Merge remote-tracking branch 'origin/master'

This commit is contained in:
zhaoxiao
2021-09-02 18:30:15 +08:00
9 changed files with 979 additions and 3 deletions
+2
View File
@@ -26,6 +26,7 @@ import JeroComponents from "@/components/jero/index";
import JDictSelectTag from "./components/dict/index.js";
import '@/utils/filter' // base filtermybatis-plus
import vTrim from "@/utils/vTrim";
import preventClick from "@/utils/preventClick";
import '@/assets/less/JAreaLinkage.less'
import VueAreaLinkage from 'vue-area-linkage'
@@ -37,6 +38,7 @@ Vue.use(router);
Vue.use(JeroComponents);
Vue.use(JDictSelectTag);
Vue.use(vTrim)
Vue.use(preventClick)
Vue.use(VueAreaLinkage)
new Vue({
+19
View File
@@ -0,0 +1,19 @@
export default {
install (Vue) {
// 防重复点击(指令实现)
Vue.directive('preventclick', {
inserted (el, binding) {
el.addEventListener('click', () => {
if (!el.disabled) {
el.disabled = true
setTimeout(() => {
el.disabled = false
}, binding.value || 1000)
}
})
}
})
}
}
@@ -0,0 +1,309 @@
<template>
<div>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="参会单位">
<a-input placeholder="请输入参会单位" v-model="queryParam.projectName"></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="参会人">
<a-input placeholder="请输入参会人" v-model="queryParam.projectName"></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="审核">
<j-dict-select-tag v-model="queryParam.audit" placeholder="请选择"
dictCode="signup_status"/>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="签到">
<j-dict-select-tag v-model="queryParam.audit" placeholder="请选择"
dictCode="signin_status"/>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="来款年份">
<j-year-date style="width:100%" placeholder="请选择来款年份" v-model="queryParam.particularYear"></j-year-date>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="身份">
<j-dict-select-tag v-model="queryParam.identify" placeholder="请选择身份"
dictCode="meet_identify_type"/>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24" v-if="queryParam.identify === '1' ">
<a-form-item label="嘉宾类型">
<j-dict-select-tag v-model="queryParam.guest" placeholder="请选择身份"
dictCode="guest_type"/>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
<a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
</span>
</a-col>
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button type="primary" icon="import" @click="importParticipant">导入参会人</a-button>
<a-button type="primary" icon="plus" @click="addParticipant">添加参会人</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('会员项目')">导出</a-button>
<a-button type="danger" icon="delete" @click="batchDel">批量删除</a-button>
<a-button type="primary" @click="batchInvoice">合并开票</a-button>
<a-button type="primary" @click="batchSetDocker">设置对接人</a-button>
</div>
<!-- table区域-begin -->
<div>
<a-table
ref="table"
size="middle"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text,record">
<div class="primary-color" @click="openDetailModal(record)">参会单位</div>
</template>
<template slot="text" slot-scope="text">
<j-ellipsis v-if="text" :value="text" :length="20"></j-ellipsis>
<span v-else></span>
</template>
<span slot="action" slot-scope="text, record" class="action-span-cell">
<a @click="handleAudit(record)">审核</a>
<a @click="handleEdit(record)">编辑</a>
<a @click="handleDelete(record.id)">删除</a>
</span>
</a-table>
</div>
<import-participant-modal ref="importParticipantModal" @ok="modalFormOk"></import-participant-modal>
<batch-invocie-modal ref="batchInvoiceModal" @ok="modalFormOk"></batch-invocie-modal>
<batch-set-docker-modal ref="batchSetDockerModal" @ok="modalFormOk"></batch-set-docker-modal>
<project-detail-modal ref="projectDetailModal"></project-detail-modal>
<audit-modal ref="auditModal" @ok="modalFormOk"></audit-modal>
</a-card>
</div>
</template>
<script>
import {JeroListMixin} from "@/mixins/JeroListMixin";
import {mixinDevice} from "@/utils/mixin";
import JYearDate from "@comp/jero/JYearDate";
import JDictSelectTag from "@comp/dict/JDictSelectTag";
import ImportParticipantModal from "@views/incomePayments/meetManage/modules/ImportParticipantModal";
import BatchInvocieModal from "@views/incomePayments/meetManage/modules/BatchInvocieModal";
import BatchSetDockerModal from "@views/incomePayments/meetManage/modules/BatchSetDockerModal";
import ProjectDetailModal from "@comp/ProjectDetailModal";
import AuditModal from "@views/incomePayments/meetManage/modules/AuditModal";
export default {
name: "Attendance",
mixins: [JeroListMixin, mixinDevice],
components: {
JYearDate,
JDictSelectTag,
ImportParticipantModal,
BatchInvocieModal,
BatchSetDockerModal,
ProjectDetailModal,
AuditModal
},
data() {
return {
description: '参会情况',
columns: [
{
title: '序号',
dataIndex: '',
key: 'rowIndex',
width: 60,
align: "center",
customRender: function (t, r, index) {
return parseInt(index) + 1;
}
},
{
title: '参会单位',
align: "center",
dataIndex: '',
scopedSlots: {customRender: 'htmlSlot'}
},
{
title: '参会人员',
align: "center",
dataIndex: '',
},
{
title: '应收金额',
align: "center",
dataIndex: ''
},
{
title: '实收金额',
align: "center",
dataIndex: ''
},
{
title: '缴费方式',
align: "center",
dataIndex: ''
},
{
title: '是否签到',
align: "center",
dataIndex: ''
},
{
title: '打包',
align: "center",
dataIndex: ''
},
{
title: '需要发票',
align: "center",
dataIndex: ''
},
{
title: '到账',
align: "center",
dataIndex: ''
},
{
title: '开票',
align: "center",
dataIndex: ''
},
{
title: '邮寄',
align: "center",
dataIndex: ''
},
{
title: '对接人',
align: "center",
dataIndex: ''
},
{
title: '操作',
align: "center",
scopedSlots: {customRender: 'action'}
},
],
url: {
list: "/jero/memberProject/page",
delete: "/jero/memberProject/delete",
deleteBatch: "/jero/memberProject/deleteBatch",
exportXlsUrl: "/jero/memberProject/exportXls",
importExcelUrl: "jero/memberProject/importExcel",
},
}
},
methods: {
/*
* 审核
* */
handleAudit(record) {
this.$refs.auditModal.open(record)
},
/*
* 导入参会人
* */
importParticipant() {
this.$refs.importParticipantModal.open()
this.$refs.importParticipantModal.title = '导入参会人'
},
/*
* 添加参会人
* */
addParticipant(){
this.$router.push({
path:'/incomePayments/meetManage/SignUpInfoEdit'
})
},
/*
* 合并开票
* */
batchInvoice(){
if(this.selectionRows.length === 0){
this.$message.warn('请选择一条记录')
return
}
// 只能选择相同的单位进行合并开票
if(this.selectionRows.length > 0){
// 一个数据不做判断
if(this.selectionRows.length === 1){
// 打开模态框
this.$refs.batchInvoiceModal.open()
}else {
let initName = this.selectionRows[0].name;
// 单位判重
let flag = this.selectionRows.some(item => {
return item.name !== initName
})
if(flag){
// flag为true 说明有单位不一样
this.$message.warn('请选择同一企业的参会人进行开票')
return
}else {
// 打开模态框 要传一个参数
this.$refs.batchInvoiceModal.open()
}
}
}
},
/*
* 设置对接人 只有研讨会 会议才可以设置
* */
batchSetDocker(){
if(this.selectionRows.length === 0){
this.$message.warn('请选择一条记录')
return
}
let flag = this.selectionRows.some(item => {
return item.meetingType !== 3
})
if(flag){
this.$message.warn('只有研讨会议才可设置对接人')
return
}else {
// 打开模态框
this.$refs.batchSetDockerModal.open()
}
},
/*
* 打开项目详情
* */
openDetailModal(record){
this.$refs.projectDetailModal.open(record)
}
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
</style>
@@ -73,7 +73,7 @@
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text,record">
<div class="primary-color">会议名称</div>
<div class="primary-color" @click="toAttendance">会议名称</div>
</template>
<template slot="text" slot-scope="text">
@@ -213,6 +213,17 @@ export default {
this.$router.push({
path: '/incomePayments/meetManage/AddOrDetailMeet',
})
},
/*
* 参会情况
* */
toAttendance(record){
this.$router.push({
path:"/incomePayments/meetManage/Attendance",
query:{
id:record.id
}
})
}
}
@@ -59,7 +59,6 @@
<!-- table区域-begin -->
<div>
<a-table
ref="table"
size="middle"
@@ -183,7 +182,7 @@ export default {
this.$router.push({
path:'/incomePayments/meetManage/SignUpInfoEdit'
})
}
},
}
}
@@ -0,0 +1,188 @@
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
:confirmLoading="confirmLoading"
@ok="handleOk"
@cancel="handleCancel"
cancelText="关闭">
<a-spin :spinning="confirmLoading">
<h3>报名信息</h3>
<a-row :gutter="24">
<a-col :span="24">
<label>参会企业:</label>
<span></span>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="12">
<label>姓名:</label>
<span></span></a-col>
<a-col :span="12">
<label>手机号:</label>
<span></span></a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="12">
<label>身份:</label>
<span></span></a-col>
<a-col :span="12">
<label>是否入住协议酒店:</label>
<span></span></a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="12">
<label>抵达时间:</label>
<span></span></a-col>
<a-col :span="12">
<label>抵达时间:</label>
<span></span></a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="12">
<label>缴费方式:</label>
<span></span></a-col>
<a-col :span="12">
<label>需要发票:</label>
<span></span></a-col>
</a-row>
<a-row :gutter="24">
<j-image-upload></j-image-upload>
</a-row>
<h3>审核</h3>
<a-form :form="form">
<a-row :gutter="24">
<a-col :xl="12" :sm="24">
<a-form-item label="会议对接人" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-radio-group v-decorator="['',]" placeholder="请选择机构类型">
<a-radio value="1">
通过
</a-radio>
<a-radio value=0>
驳回
</a-radio>
</a-radio-group>
</a-form-item>
</a-col>
<a-col :xl="24" :sm="24">
<a-form-item label="备注" :labelCol="remarksLabelCol" :wrapperCol="remarksWrapperCol">
<a-textarea
placeholder="请输入备注"
:auto-size="{ minRows: 3, maxRows: 6 }"
:maxLength='200'
v-decorator="['']"
@change="e => {e.target.value = (e.target.value + '').trim()}"/>
</a-form-item>
</a-col>
</a-row>
</a-form>
</a-spin>
<template slot="footer">
<a-button @click="handleCancel">关闭</a-button>
<a-button type="primary" @click="handleOk" v-preventclick>确定</a-button>
</template>
</j-modal>
</template>
<script>
import JImageUpload from "@comp/jero/JImageUpload";
export default {
name: "AuditModal",
components: {
JImageUpload
},
data() {
return {
title: '审核凭证',
width: 800,
visible: false,
confirmLoading: false,
form: this.$form.createForm(this),
model: {},
labelCol: {
xs: {span: 24},
sm: {span: 6}
},
wrapperCol: {
xs: {span: 24},
sm: {span: 18}
},
remarksLabelCol: {
xs: {span: 24},
sm: {span: 3}
},
remarksWrapperCol: {
xs: {span: 24},
sm: {span: 21}
},
validatorRules: {
projectName: {
rules: [{required: true, message: '请输入会员项目'}],
validateTrigger: 'blur'
},
particularYear: {
rules: [{required: true, message: '请选择年份'}],
validateTrigger: ['change', 'blur']
},
directorId: {
rules: [{required: true, message: '请选择负责人'}],
validateTrigger: ['change', 'blur']
}
},
url: {
add: "/jero/memberProject/add",
edit: "/jero/memberProject/edit",
}
}
},
methods: {
open(record) {
this.visible = true
this.model = Object.assign({}, record)
},
close() {
this.$emit('close')
this.visible = false
},
handleOk() {
const that = this
// 触发表单验证
this.form.validateFields((err, values) => {
if (!err) {
let httpurl = ''
let method = 'post'
const formData = Object.assign(this.model, values)
console.log('表单提交数据', formData)
httpAction(httpurl, formData, method).then((res) => {
if (res.success) {
that.$message.success(res.message)
that.$emit('ok')
that.close()
} else {
that.$message.warning(res.message)
}
}).finally(() => {
that.confirmLoading = false
})
}
})
},
handleCancel() {
this.close()
},
addContactsOk() {
this.$refs.selectContacts.getContactsList()
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,152 @@
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
:confirmLoading="confirmLoading"
switchFullscreen
@ok="handleOk"
@cancel="handleCancel"
cancelText="关闭">
<a-spin :spinning="confirmLoading">
<a-form :form="form">
<a-row :gutter="24">
<a-col :xl="24" :sm="24">
<a-form-item label="邮寄联系人" :labelCol="labelCol" :wrapperCol="wrapperCol">
<select-contacts :selected-company="selectedCompany"
placeholder="请选择联系人"
v-decorator="['contactsId',validatorRules.contactsId]"
:maxLength='50'
ref="selectContacts"
@ok="addContactsOk"></select-contacts>
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :xl="24" :sm="24">
<a-form-item label="地址" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入地址"
:maxLength='50'
v-decorator="[ 'chargeStandard']"
></a-input>
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :xl="24" :sm="24">
<a-form-item label="发票号" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入发票号"
:maxLength='50'
v-decorator="[ 'chargeStandard']"
></a-input>
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :xl="24" :sm="24">
<a-form-item label="开票金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入开票金额"
:maxLength='50'
v-decorator="[ 'chargeStandard']"
></a-input>
</a-form-item>
</a-col>
</a-row>
</a-form>
</a-spin>
<template slot="footer">
<a-button @click="handleCancel">关闭</a-button>
<a-button type="primary" @click="handleOk" v-preventclick>确定</a-button>
</template>
</j-modal>
</template>
<script>
import SelectContacts from "@comp/company/SelectContacts";
export default {
name: "BatchInvocieModal",
components:{
SelectContacts
},
data() {
return {
title: '合并开票',
width: 800,
visible: false,
confirmLoading: false,
form: this.$form.createForm(this),
// 选中的企业
selectedCompany:{},
labelCol: {
xs: {span: 24},
sm: {span: 6}
},
wrapperCol: {
xs: {span: 24},
sm: {span: 18}
},
validatorRules: {
projectName: {
rules: [{required: true, message: '请输入会员项目'}],
validateTrigger: 'blur'
},
particularYear: {
rules: [{required: true, message: '请选择年份'}],
validateTrigger: ['change', 'blur']
},
directorId: {
rules: [{required: true, message: '请选择负责人'}],
validateTrigger: ['change', 'blur']
}
},
url: {
add: "/jero/memberProject/add",
edit: "/jero/memberProject/edit",
}
}
},
methods: {
open(){
this.visible = true
},
close() {
this.$emit('close')
this.visible = false
},
handleOk() {
const that = this
// 触发表单验证
this.form.validateFields((err, values) => {
if (!err) {
let httpurl = ''
let method = 'post'
const formData = Object.assign(this.model, values)
console.log('表单提交数据', formData)
httpAction(httpurl, formData, method).then((res) => {
if (res.success) {
that.$message.success(res.message)
that.$emit('ok')
that.close()
} else {
that.$message.warning(res.message)
}
}).finally(() => {
that.confirmLoading = false
})
}
})
},
handleCancel() {
this.close()
},
addContactsOk(){
this.$refs.selectContacts.getContactsList()
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,114 @@
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
:confirmLoading="confirmLoading"
@ok="handleOk"
@cancel="handleCancel"
cancelText="关闭">
<a-spin :spinning="confirmLoading">
<a-form :form="form">
<a-row :gutter="24">
<a-col :xl="24" :sm="24">
<a-form-item label="会议对接人" :labelCol="labelCol" :wrapperCol="wrapperCol">
<select-principal placeholder="请选择会议对接人"
v-decorator="['directorId']"></select-principal>
</a-form-item>
</a-col>
</a-row>
</a-form>
</a-spin>
<template slot="footer">
<a-button @click="handleCancel">关闭</a-button>
<a-button type="primary" @click="handleOk" v-preventclick>确定</a-button>
</template>
</j-modal>
</template>
<script>
import SelectPrincipal from "@comp/company/SelectPrincipal";
export default {
name: "BatchSetDockerModal",
components:{
SelectPrincipal
},
data() {
return {
title: '设置对接人',
width: 400,
visible: false,
confirmLoading: false,
form: this.$form.createForm(this),
labelCol: {
xs: {span: 24},
sm: {span: 6}
},
wrapperCol: {
xs: {span: 24},
sm: {span: 18}
},
validatorRules: {
projectName: {
rules: [{required: true, message: '请输入会员项目'}],
validateTrigger: 'blur'
},
particularYear: {
rules: [{required: true, message: '请选择年份'}],
validateTrigger: ['change', 'blur']
},
directorId: {
rules: [{required: true, message: '请选择负责人'}],
validateTrigger: ['change', 'blur']
}
},
url: {
add: "/jero/memberProject/add",
edit: "/jero/memberProject/edit",
}
}
},
methods: {
open() {
this.visible = true
},
close() {
this.$emit('close')
this.visible = false
},
handleOk() {
const that = this
// 触发表单验证
this.form.validateFields((err, values) => {
if (!err) {
let httpurl = ''
let method = 'post'
const formData = Object.assign(this.model, values)
console.log('表单提交数据', formData)
httpAction(httpurl, formData, method).then((res) => {
if (res.success) {
that.$message.success(res.message)
that.$emit('ok')
that.close()
} else {
that.$message.warning(res.message)
}
}).finally(() => {
that.confirmLoading = false
})
}
})
},
handleCancel() {
this.close()
},
addContactsOk() {
this.$refs.selectContacts.getContactsList()
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,182 @@
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
:confirmLoading="confirmLoading"
switchFullscreen
@ok="handleOk"
@cancel="handleCancel"
cancelText="关闭">
<div class="color-red">请确保企业信息和参会人信息准确,谢谢</div>
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="24">
<a-col :xl="12" :lg="7" :md="8" :sm="24">
<a-form-item label="姓名/手机号">
<a-input placeholder="请输入姓名/手机号" v-model="queryParam.projectName"></a-input>
</a-form-item>
</a-col>
<a-col :xl="12" :lg="7" :md="8" :sm="24">
<a-form-item label="企业名称">
<a-input placeholder="请输入企业名称" v-model="queryParam.projectName"></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
<a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
</span>
</a-col>
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<a-table
ref="table"
size="middle"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text,record">
<div class="primary-color">参会单位</div>
</template>
<template slot="text" slot-scope="text">
<j-ellipsis v-if="text" :value="text" :length="20"></j-ellipsis>
<span v-else></span>
</template>
>
</a-table>
<template slot="footer">
<a-button @click="handleCancel">关闭</a-button>
<a-button type="primary" @click="handleOk" v-preventclick>确定</a-button>
</template>
</j-modal>
</template>
<script>
import {JeroListMixin} from "@/mixins/JeroListMixin";
import {mixinDevice} from "@/utils/mixin";
import {postAction} from "@api/manage";
export default {
name: "ImportParticipantModal",
mixins: [JeroListMixin, mixinDevice],
data() {
return {
description: "导入参会人模态框",
disableMixinCreated: true,
title: '操作',
width: 1000,
confirmLoading: false,
flag:false,
visible: false,
columns: [
{
title: '序号',
dataIndex: '',
key: 'rowIndex',
width: 60,
align: "center",
customRender: function (t, r, index) {
return parseInt(index) + 1;
}
},
{
title: '企业名称',
align: "center",
dataIndex: '',
},
{
title: '姓名',
align: "center",
dataIndex: '',
},
{
title: '身份',
align: "center",
dataIndex: '',
},
{
title: '手机号',
align: "center",
dataIndex: '',
},
{
title: '职务',
align: "center",
dataIndex: '',
},
{
title: '邮箱',
align: "center",
dataIndex: '',
},
],
model: {},
url: {
list: "/jero/memberProject/page",
add: ''
}
}
},
methods: {
handleOk() {
console.log(this.selectionRows)
const that = this
this.flag = false
if(this.flag){
return
}
if (this.selectionRows.length === 0) {
this.$message.warn('请选择一条记录')
return;
}
if (this.selectionRows.length > 0) {
this.flag = true
this.confirmLoading = true
postAction(this.url.add,{params:this.selectionRows}).then(res => {
if(res.success){
that.$emit('ok')
}
}).finally( () => {
this.confirmLoading = false
this.flag = false
})
}
},
handleCancel() {
this.close()
},
open() {
this.visible = true
// 清空上次选中
this.onClearSelected()
this.loadData(1)
},
close() {
this.visible = false
},
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
.color-red {
color: red;
margin-bottom: 10px;
}
</style>