Commit 5c7c8584 by xiaohai

.

parent b7930c0b
<template>
<div class="editable-cell-container">
<div class="title-div">
<span>{{title}}</span>
<a class="a-href">编辑</a>
</div>
<el-form></el-form>
</div>
</template>
<script>
export default {
name: "editableCell",
props: {
info: {
type: Object,
required: true
},
items: {
type: Array,
required: true
},
title: {
type: String,
default: ""
}
}
}
</script>
<style lang="scss">
</style>
<template>
<div class="e-r-l-container">
<div class="handle-area">
<div class="flex1">
<el-select v-model="clerkType" placeholder="选择类型" @change="reGetList">
<el-option
v-for="(type, index) in typeLsit"
:key="index"
:label="type"
:value="index">
</el-option>
</el-select>
<el-select v-model="clerkStatus" placeholder="选择状态" @change="reGetList">
<el-option
v-for="(type, index) in statusList"
:key="index"
:label="type"
:value="index">
</el-option>
</el-select>
</div>
<el-button type="primary">导出<i class="el-icon-upload el-icon--right"></i></el-button>
</div>
<el-table
class="list-table"
height="490px"
:data="employeeList"
@sort-change="sortList"
:default-sort="{prop: 'hireDate', order: 'descending'}"
>
<template v-for="prop in propList">
<list-item :item="prop" :key="prop" @callHandle="callHandle"></list-item>
</template>
</el-table>
<el-pagination
class="pagination"
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:page-sizes="[20, 40, 60, 80]"
:page-size="pageSize"
:current-page="pageNum"
layout="total, sizes, prev, pager, next"
:total="total">
</el-pagination>
<el-dialog
:title="typeTitle"
:visible.sync="dialogVisible"
width="480px">
<handle-dialog :employee="employeeObj" :handleType="handleType" :typeTitle="typeTitle" @handleSuccess="handleSuccess"></handle-dialog>
</el-dialog>
</div>
</template>
<script>
import { getRequest, postRequest, postJsonRequest } from '@/api/api';
import listItem from "components/employeeRecord/listItem";
import handleDialog from "components/employeeRecord/handleDialog";
export default {
name: "employeeRecordList",
components: {
listItem,
handleDialog
},
data() {
return {
employeeList: [],
pageNum: 1,
pageSize: 20,
sortType: "desc",
sortColumn: "hireDate",
statusList: ["全部", "正式", "试用", "离职"],
typeLsit: ["全部", "全职", "兼职", "外包", "实习", "无类型"],
clerkType: 0,
clerkStatus: 0,
total: 0,
propList: ["headPic", "clerkName", "clerkPhone", "groupName", "clerkCode", "positionName", "clerkType", "hireDate", "correctionDate", "handleEmployee"],
handleType: "turnPositive",
typeTitle: "",
dialogVisible: false,
employeeObj: {}
};
},
methods: {
handleSuccess() {
this.dialogVisible = false;
this.getEmloyeeList();
},
callHandle(obj, type, typeTitle) {
this.handleType = type;
this.employeeObj = obj;
this.typeTitle = typeTitle;
this.dialogVisible = true;
},
handleSizeChange(val) {
this.pageSize = val;
this.getEmloyeeList();
},
handleCurrentChange(val) {
this.pageNum = val;
this.getEmloyeeList();
},
sortList(obj) {
console.log(obj);
this.sortColumn = obj.prop,
this.sortType = obj.order == "descending" ? "desc" : "asc";
this.getEmloyeeList();
},
reGetList() {
this.getEmloyeeList();
},
getEmloyeeList() {
let ths = this;
let params = {
pageNum: ths.pageNum,
pageSize: ths.pageSize,
sortType: ths.sortType,
clerkStatus: ths.clerkStatus == 0 ? "" : ths.clerkStatus,
sortColumn: ths.sortColumn,
clerkType: ths.clerkType == 0 ? "" : ths.clerkType
};
getRequest("/haoban-manage-web/record/find-on-work-employee-record-page", params)
.then(res => {
console.log(res, "list");
if (res.data.errorCode == 1) {
ths.employeeList = res.data.result.list;
ths.total = res.data.result.pageInfo.total;
} else {
ths.$message.error({
message: res.data.message
});
}
})
.catch(e => {
ths.$message({
message: e.message
});
});
}
},
beforeMount() {
this.getEmloyeeList();
}
}
</script>
<style lang="scss">
.e-r-l-container {
margin-top: 24px;
padding: 24px;
background: #fff;
.handle-area {
display: flex;
.flex1 {
flex: 1;
}
}
.list-table {
margin-top: 22px;
}
.pagination {
text-align: right;
margin-top: 20px;
}
}
</style>
<template>
<div class="dialog-content">
<el-form
label-width="110px"
:model="ruleForm"
:rules="rules"
ref="ruleForm"
>
<template v-if="typeTitle == '办理离职'">
<el-form-item label="最后工作日:" prop="date">
<el-date-picker
style="width: 280px;"
v-model="ruleForm.date"
type="date"
placeholder="选择日期">
</el-date-picker>
</el-form-item>
<el-form-item label="离职原因:" required>
<el-select
v-model="ruleForm.reason"
placeholder="请选择离职原因"
style="width: 280px;">
<el-option
v-for="(item, index) in reasons"
:key="index"
:label="item"
:value="index">
</el-option>
</el-select>
</el-form-item>
</template>
<template v-else>
<el-form-item label="姓名:">
<span>{{employee.clerkName}}</span>
</el-form-item>
<el-form-item label="入职时间:">
<span>{{employee.hireDate | formatDate("YY-MM-DD")}}</span>
</el-form-item>
<el-form-item label="实际转正时间:">
<span>{{employee.correctionDate | formatDate("YY-MM-DD")}}</span>
</el-form-item>
<el-form-item label="今日日期:">
<span>{{today}}</span>
</el-form-item>
<el-form-item label="调整转正时间:" v-if="typeTitle == '修改转正时间'" prop="editDate">
<el-date-picker
style="width: 280px;"
v-model="ruleForm.editDate"
type="date"
placeholder="选择日期">
</el-date-picker>
</el-form-item>
</template>
<el-form-item label="备注:" prop="remarks">
<el-input
type="textarea"
style="width: 280px;"
:autosize="{ minRows: 3, maxRows: 5}"
placeholder="请输入备注"
v-model="ruleForm.remarks">
</el-input>
<p class="counter">{{ruleForm.remarks.length}}/100</p>
</el-form-item>
</el-form>
<div class="button-box">
<el-button type="primary" @click="submitHandle">{{typeTitle == '办理转正' ? '确认转正' : '确认办理'}}</el-button>
</div>
</div>
</template>
<script>
import { formatDate } from '@/utils/index';
import { getRequest, postRequest, postJsonRequest } from '@/api/api';
export default {
name: "handleDialog",
props: {
employee: {
type: Object,
required: true
},
handleType: {
type: String,
required: true
},
typeTitle: {
type: String,
required: true
}
},
filters: {
formatDate
},
data() {
return {
ruleForm: {
remarks: "",
date: "",
editDate: "",
reason: 1
},
rules: {
remarks: [
{ max: 100, message: '长度不能超过100字符', trigger: 'blur' }
],
reason: [
{ required: true, message: '请选择活离职原因', trigger: 'change' }
],
date: [
{ required: true, message: '请选择日期', trigger: 'change' }
],
editDate: [
{ required: true, message: '请选择日期', trigger: 'change' }
]
},
reasons: ["家庭原因", "个人原因", "发展原因", "合同到期不续签", "协议解除", "无法胜任工作", "经济性裁员", "严重违法违纪", "其他"]
};
},
methods: {
submitHandle() {
let ths = this;
this.$refs.ruleForm.validate((valid) => {
if (valid) {
ths.$confirm("是否要确认"+ths.typeTitle, "提示", {
type: "warning"
}).then(() => {
let typeObj = {
turnPositive: {
params: {
correctionDate: ths.today,
remark: ths.ruleForm.remarks,
recordId: ths.employee.recordId
},
url: "/haoban-manage-web/record/become-regular"
},
eidtCorrectionTime: {
params: {
correctionDate: ths.ruleForm.editDate,
remark: ths.ruleForm.remarks,
recordId: ths.employee.recordId
},
url: "/haoban-manage-web/record/change-correction-detail"
},
resignation: {
params: {
fireReason: ths.ruleForm.reason,
remark: ths.ruleForm.remarks,
recordId: ths.employee.recordId,
fireDate: ths.ruleForm.date
},
url: "/haoban-manage-web/record/fire-work"
}
};
ths.subRequest(typeObj[ths.handleType].params, typeObj[ths.handleType].url);
})
.catch(e => {
console.log(e, "error");
});
} else {
console.log('error submit!!');
return false;
}
});
},
subRequest(params, url) {
console.log(params, url);
let ths = this;
getRequest(url, params)
.then(res => {
if (res.data.errorCode == 1) {
ths.$emit("handleSuccess");
} else {
ths.$message.error({
message: res.data.message
});
}
})
.catch(e => {
ths.$message.error({
message: e.message
});
});
}
},
computed: {
today() {
let time = Date.parse( new Date());
return formatDate(time, "YY-MM-DD");
}
}
}
</script>
<style lang="scss">
.dialog-content {
.date-picker {
width: 280px;
}
.counter {
width: 280px;
text-align: right;
font-size:12px;
color:rgba(192,196,204,1);
}
.button-box {
text-align: center;
margin: 60px 0 25px;
}
}
</style>
<template>
<el-table-column
v-if="propList[item].slot"
:label="propList[item].label"
:width="propList[item].width"
:sortable="propList[item].needSort"
:prop="item"
>
<template slot-scope="scope">
<div v-if="item == 'clerkType'">
{{typeLsit[scope.row[item] || 5]}}
</div>
<div v-else-if="item == 'hireDate' || item == 'correctionDate' || item == 'fireDate'">
{{scope.row[item] | formatDate("YY-MM-DD")}}
</div>
<div v-else-if="item == 'headPic'">
<img class="header-pic" :src="scope.row[item]">
</div>
<div v-else-if="item == 'handleEmployee'">
<div class="table-handle">
<el-dropdown class="more" @command="callHandle">
<span class="el-dropdown-link">
更多<i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<template v-if="scope.row.clerkStatus == 2">
<el-dropdown-item :command="{obj: scope.row, type: 'turnPositive', typeTitle: '办理转正'}">办理转正</el-dropdown-item>
<el-dropdown-item :command="{obj: scope.row, type: 'eidtCorrectionTime', typeTitle: '修改转正时间'}">修改转正时间</el-dropdown-item>
</template>
<el-dropdown-item :command="{obj: scope.row, type: 'editEmployee', typeTitle: '编辑员工资料'}">编辑员工资料</el-dropdown-item>
<el-dropdown-item :command="{obj: scope.row, type: 'resignation', typeTitle: '办理离职'}">办理离职</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div>
</template>
</el-table-column>
<el-table-column
v-else
:label="propList[item].label"
:width="propList[item].width"
:prop="item"
>
</el-table-column>
</template>
<script>
import { formatDate } from '@/utils/index';
export default {
name: "list-item",
props: {
item: {
type: String,
required: true
}
},
filters: {
formatDate
},
data() {
return {
typeLsit: ["全部", "全职", "兼职", "外包", "实习", "无类型"],
propList: {
headPic: {
label: "",
slot: true,
width: 50
},
clerkName: {
label: "姓名",
width: 90
},
clerkPhone: {
label: "手机号"
},
groupName: {
label: "部门"
},
clerkCode: {
label: "code"
},
positionName: {
label: "职位"
},
clerkType: {
label: "员工类型",
slot: true
},
hireDate: {
label: "入职日期",
needSort: "custom",
slot: true
},
correctionDate: {
label: "转正日期",
needSort: "custom",
slot: true
},
handleEmployee: {
label: "操作",
slot: true
}
}
};
},
methods: {
/**
* 唤起设置弹窗
*/
// callHandle(obj, type) {
// console.log()
// this.$emit("callHandle", obj, type);
// },
callHandle(command) {
console.log(command);
if (command.typeTitle != "编辑员工资料") {
this.$emit("callHandle", command.obj, command.type, command.typeTitle);
} else {
location.href = "#/recordInfo?recordId=" + command.obj.recordId;
}
}
}
}
</script>
<style lang="scss">
.header-pic {
width: 35px;
height: 35px;
border-radius: 3px;
}
.table-handle {
cursor: pointer;
.el-dropdown-link {
color: #409EFF;
}
}
</style>
...@@ -100,14 +100,24 @@ export const constantRouterMap = [ ...@@ -100,14 +100,24 @@ export const constantRouterMap = [
component: _import('contacts','fileSet') component: _import('contacts','fileSet')
}, },
{ {
path: '/recordInfo',
name: '编辑员工信息',
component: _import('contacts','recordInfo')
},
{
path: '/shareContact', path: '/shareContact',
name: '共享通讯录', name: '共享通讯录',
component: _import('contacts','shareContact') component: _import('contacts','shareContact')
}, },
{ {
path: "/shareCode", path: "/shareCode",
name: '共享通讯录', name: '共享通讯录二维码',
component: _import('contacts','shareCode') component: _import('contacts','shareCode')
},
{
path: "/employeeRecord",
name: '共享通讯录二维码',
component: _import('contacts','employeeRecord')
} }
] ]
}, },
......
import { date } from "index";
export default function (value, format) {
if (!value) return "";
value = date.getdate(value, format);
return value;
};
/** /**
* Created by jiachenpan on 16/11/18. * Created by jiachenpan on 16/11/18.
*/ */
export let date = {
_date_cur_date: new Date(),
_date_reg_all: /^[12][0-9]{3}(-|\/)(0?[0-9]|1[0-2])(-|\/)(0?[1-9]|[1-2][0-9]|3[0-1]).(0?[0-9]|1[0-9]|2[0-3]):(0?[0-9]|[1-5][0-9]):(0?[0-9]|[1-5][0-9])$/,
_date_reg_year_month: /^[12][0-9]{3}(-|\/)(0?[0-9]|1[0-2])$/,
_date_reg_year_month_date: /^[12][0-9]{3}(-|\/)(0?[0-9]|1[0-2])(-|\/)(0?[1-9]|[1-2][0-9]|3[0-1])$/,
_date_reg_year_month_date_hour: /^[12][0-9]{3}(-|\/)(0?[0-9]|1[0-2])(-|\/)(0?[1-9]|[1-2][0-9]|3[0-1]).(0?[0-9]|1[0-9]|2[0-3])$/,
_date_reg_year_month_date_hour_minute: /^[12][0-9]{3}(-|\/)(0?[0-9]|1[0-2])(-|\/)(0?[1-9]|[1-2][0-9]|3[0-1]).(0?[0-9]|1[0-9]|2[0-3]):(0?[0-9]|[1-5][0-9])$/,
_date_reg_time: /^(0?[0-9]|1[0-9]|2[0-3]):(0?[0-9]|[1-5][0-9]):(0?[0-9]|[1-5][0-9])$/,
/***
* @param {Object|Number|String} date
* @param {Object} format
*/
getdate: function (date, format) {
var now = this.tojsdate(date),
year = now.getFullYear(),
month = (now.getMonth() + 1),
day = now.getDate(),
hour = now.getHours(),
minute = now.getMinutes(),
second = now.getSeconds(),
result,
fill = function (val) {
return (val < 10 ? "0" : "") + val;
};
month = fill(month);
day = fill(day);
hour = fill(hour);
minute = fill(minute);
second = fill(second);
switch (format) {
case "YY-MM":
result = year + "-" + month;
break;
case "MM-DD":
result = month + "-" + day;
break;
case "YY-MM-DD":
result = year + "-" + month + "-" + day;
break;
case "YY-MM-DD HH:MM:SS":
result = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
break;
case "YY-MM-DD HH:MM":
result = year + "-" + month + "-" + day + " " + hour + ":" + minute;
break;
case "YY/MM/DD HH:MM":
result = year + "/" + month + "/" + day + " " + hour + ":" + minute;
break;
case "HH:MM":
result = hour + ":" + minute;
break;
case "HH:MM:SS":
result = hour + ":" + minute + ":" + second;
break;
default:
result = year + "/" + month + "/" + day + " " + hour + ":" + minute + ":" + second;
}
return result;
},
// 以后所有的时间都从这块来, 这块的时间将会配合时间矫正来处理.
getcurdate: function () {
return new Date(this._date_cur_date);
},
// 转化成为js 的时间
tojsdate: function (date) {
if (!this.is_date(date)) {
return this.getcurdate();
}
if (typeof date === "string") {
if (/^\d{11,}$/.test(date)) {
return new Date(+date);
}
date = date.replace(/-/g, "/");
if (this._date_reg_year_month.test(date)) {
date += "/01";
}
}
return new Date(date);
},
/**
*
* Number y、mo、d、h、m、s 分别表示年/月/日/小时/分/秒. 如果没带后缀, 则默认为天.
* @param {Object|Number|String} oldDate
* @param {String|Number} changeDate
*/
getdiffdate: function (oldDate, changeDate, format) {
var curDate = this.tojsdate(oldDate);
if (/^(-?\d+)y$/.test(changeDate)) {
curDate.setFullYear(curDate.getFullYear() + (+RegExp.$1));
} else if (/^(-?\d+)mo$/.test(changeDate) && RegExp.$1 !== 0) {
// 缓存当前的天
let _cacheDay = curDate.getDate();
// 重置到月初. 如果当前的 getDate() 大于目标月的最大日期就悲剧了
curDate.setDate(1);
// 设置月份
curDate.setMonth(curDate.getMonth() + (+RegExp.$1));
curDate.setDate(_cacheDay);
if (curDate.getDate() !== _cacheDay) {
// 上个月的最后一天
curDate.setDate(0);
}
} else if (/^(-?\d+)d$/.test(changeDate)) {
curDate.setDate(curDate.getDate() + (+RegExp.$1));
} else if (/^(-?\d+)h$/.test(changeDate)) {
curDate.setHours(curDate.getHours() + (+RegExp.$1));
} else if (/^(-?\d+)m$/.test(changeDate)) {
curDate.setMinutes(curDate.getMinutes() + (+RegExp.$1));
} else if (/^(-?\d+)s$/.test(changeDate)) {
curDate.setSeconds(curDate.getSeconds() + (+RegExp.$1));
}
return this.getdate(curDate, format);
},
calculate: function (date, offset, format = "YY-MM-DD") {
let timestamp = new Date(date);
let calculateDate = timestamp.setDate(timestamp.getDate() + offset);
return this.getdate(calculateDate, format);
},
format_date: function (date) {
if (!date || !this.is_date(date)) {
return false;
}
var reg = this._date_reg_time;
if (reg.test(date)) {
return date.replace(/-/g, "/");
} else {
return this.getdate(date);
}
},
is_date: function (date) {
if (!date || date === null) {
return false;
}
var newdate;
if (typeof date === "string") {
if (/^\d{11,}$/.test(date)) {
newdate = new Date(+date);
return newdate !== "Invalid Date";
}
return this._date_reg_all.test(date) ||
this._date_reg_year_month.test(date) ||
this._date_reg_year_month_date.test(date) ||
this._date_reg_year_month_date_hour.test(date) ||
this._date_reg_year_month_date_hour_minute.test(date);
}
newdate = new Date(date);
return newdate !== "Invalid Date";
}
};
export function formatDate (value, format) {
if (!value) return "";
value = date.getdate(value, format);
return value;
};
export function parseTime(time, cFormat) { export function parseTime(time, cFormat) {
if (arguments.length === 0) { if (arguments.length === 0) {
return null return null
......
<template>
<div class="e-record-container">
<div class="top-area">
<div class="top-title">
<span class="title-span">在职员工</span>
<a href="">
<el-button type="primary">导入员工档案<i class="el-icon-upload el-icon--right"></i></el-button>
</a>
</div>
<div class="e-type-num-title">
<div class="type-cell" v-for="(count, key) in countObj" :key="key" :class="key == 'onWorkCout' || key == 'noTypeWorkCount' ? 'with-bdr' : ''">
<p class="type-name">{{typeObj[key]}}</p>
<p class="num">{{count}}</p>
</div>
</div>
</div>
<employee-list></employee-list>
</div>
</template>
<script>
import { getRequest, postRequest, postJsonRequest } from '@/api/api';
import employeeList from "components/employeeRecord/employeeList";
export default {
name: "employeeRecord",
components: {
employeeList
},
data() {
return {
typeObj: {
onWorkCout: "在职员工",
allWorkCount: "全职",
partTimeWorkCount: "兼职",
outWorkCount: "外包",
practiceWorkCount: "实习",
noTypeWorkCount: "无类型",
regularCount: "正式",
onTrialCount: "试用",
noStatusCount: "无状态"
},
countObj: {}
};
},
methods: {
getEmployeeCount() {
let ths = this;
getRequest("/haoban-manage-web/record/employee-count-detail", {})
.then(res => {
console.log(res, "res count");
if (res.data.errorCode == 1) {
ths.countObj = res.data.result;
} else {
ths.$message.error({
message: res.data.message
});
}
})
.catch(e => {
ths.$message.error({
message: e.message
});
});
}
},
beforeMount() {
this.getEmployeeCount();
}
};
</script>
<style lang="scss">
.top-area {
background: #fff;
padding: 10px 32px;
.top-title {
display: flex;
line-height: 32px;
font-size:20px;
font-weight:bolder;
color:rgba(48,49,51,1);
.title-span {
flex: 1;
}
}
.e-type-num-title {
display: flex;
padding: 12px 0;
margin-top: 20px;
color: #606266;
font-size: 14px;
.type-cell {
box-sizing: border-box;
height: 70px;
flex: 1;
margin-right: 20px;
padding: 10px 0;
&.with-bdr {
border-right: 1px solid #DCDFE6;
padding-right: 50px;
}
.num {
font-size:24px;
font-weight:400;
color:rgba(48,49,51,1);
margin-top: 20px;
}
}
}
}
</style>
<template>
<div class="commom-container clerk-detail-container">
<p class="t-rt"><a class="a-href">打印员工档案</a></p>
<div class="employee-detail">
<div class="head-info">
<p class="head-cell"><img :src="info.headPic" class="head-img"></p>
<p class="head-cell name">{{info.clerkName}}<span>{{statusList[info.clerkStatus - 1]}}</span></p>
<p class="head-cell c-303133">{{info.groupName}}{{info.positionName}}</p>
<p class="head-cell">已在{{info.contractCompany}}工作了{{info.days}}</p>
</div>
</div>
<editable-cell :info="info" :items="items" title="基础信息"></editable-cell>
</div>
</template>
<script>
import { getRequest, postRequest, postJsonRequest } from '@/api/api';
import editableCell from "components/employeeRecord/editableCell";
export default {
name: "recordInfo",
components: {
editableCell
},
data() {
return {
info: {},
statusList: ["正式", "试用", "离职"],
items: []
}
},
methods: {
getEmployeeDetail() {
let ths = this;
let params = {
recordId: ths.$route.query.recordId
};
getRequest("/haoban-manage-web/record/employee-detail", params)
.then(res => {
console.log(res, "info");
if (res.data.errorCode == 1) {
ths.info = res.data.result;
} else {
ths.$message.error({
message: res.data.message
});
}
})
.catch(e => {
ths.$message.error({
message: e.message
});
});
}
},
beforeMount() {
this.getEmployeeDetail();
}
}
</script>
<style lang="scss">
.clerk-detail-container {
padding: 30px;
.employee-detail {
.head-info {
margin-top: 20px;
text-align: center;
font-size: 14px;
color: #606266;
.head-cell {
margin-bottom: 15px;
.head-img {
width:70px;
height:70px;
background:rgba(64,158,255,1);
border-radius:6px;
}
&.name {
font-size:20px;
font-weight:500;
color:rgba(48,49,51,1);
span {
display: inline-block;
width:32px;
height:16px;
border:1px solid rgba(74,168,255,1);
border-radius:3px;
text-align: center;
line-height: 16px;
font-size: 10px;
color: #4AA8FF;
margin-left: 8px;
vertical-align: middle;
}
}
}
}
}
}
</style>
...@@ -31,7 +31,9 @@ ...@@ -31,7 +31,9 @@
padding: 0 20px; padding: 0 20px;
}*/ }*/
} }
.commom-container {
background: #fff;
}
.common-frame-container { .common-frame-container {
display: flex; display: flex;
.common-right-container { .common-right-container {
......
...@@ -335,6 +335,9 @@ input:focus { ...@@ -335,6 +335,9 @@ input:focus {
.c-909399 { .c-909399 {
color: #909399; color: #909399;
} }
.c-303133 {
color: #303133;
}
.m-l-16 { .m-l-16 {
margin-left: 16px; margin-left: 16px;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment