parent
f2899f62a7
commit
82d3b5c675
After Width: | Height: | Size: 396 KiB |
@ -0,0 +1,15 @@ |
||||
// rem等比适配配置文件
|
||||
// 基准大小
|
||||
const baseSize = 16; |
||||
// 设置 rem 函数
|
||||
function setRem() { |
||||
// let rem = vW * basePc; // 以默认比例值乘以当前窗口宽度,得到该宽度下的相应font-size值
|
||||
document.documentElement.style.fontSize = window.innerWidth / 1920 * baseSize + "px"
|
||||
} |
||||
// 初始化
|
||||
setRem(); |
||||
// 改变窗口大小时重新设置 rem
|
||||
window.addEventListener('resize', () => { |
||||
setRem(); |
||||
}) |
||||
//存放在utils文件夹,在main.js中引入
|
@ -0,0 +1,17 @@ |
||||
<template> |
||||
|
||||
</template> |
||||
|
||||
<script setup> |
||||
import { onBeforeMount } from 'vue' |
||||
import { useRouter } from 'vue-router' |
||||
const router = useRouter() |
||||
onBeforeMount(() => { |
||||
router.replace({ |
||||
path: '/largeScreen', |
||||
}) |
||||
}) |
||||
|
||||
</script> |
||||
|
||||
<style scoped lang='scss'></style> |
@ -0,0 +1,40 @@ |
||||
<template> |
||||
<div class="data-screen" element-loading-text="加载中请稍后..." > |
||||
<div class="topheader"> |
||||
<div class="gradient"> |
||||
智慧工地数据大屏 |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</template> |
||||
<script setup> |
||||
import { ref, onMounted, reactive, nextTick } from 'vue' |
||||
const state = reactive({ |
||||
loading: false |
||||
}) |
||||
</script> |
||||
<style scoped lang='scss'> |
||||
.topheader { |
||||
width: 100%; |
||||
height: 158px; |
||||
background: url('../../assets/images/datatopbj.png') no-repeat; |
||||
background-size: 100% 100%; |
||||
display: flex; |
||||
justify-content: center; |
||||
font-weight: 400; |
||||
font-size: 52px; |
||||
padding-top: 20px; |
||||
} |
||||
|
||||
.gradient { |
||||
background: linear-gradient(270.0000000000008deg, #F2F7FF 0%, #D4F7FF 50%, #F2F7FF 100%); |
||||
-webkit-background-clip: text; |
||||
-webkit-text-fill-color: transparent; |
||||
} |
||||
|
||||
.data-screen { |
||||
width: 100%; |
||||
height: 100vh; |
||||
background: #040614; |
||||
} |
||||
</style> |
@ -0,0 +1,55 @@ |
||||
import axios from '@/utils/request' |
||||
// 查询分页数据:
|
||||
export const getRecordPage = (arg) => { |
||||
return axios.request({ |
||||
url: '/dahua/accessControl/getRecordPage', |
||||
method: 'post', |
||||
data: { |
||||
...arg, |
||||
pageNum:arg.current, |
||||
pageSize:arg.limit, |
||||
}, |
||||
dataType: 'json' |
||||
}) |
||||
} |
||||
// 查询详情数据:
|
||||
export const iuserGetById = (arg) => { |
||||
return axios.request({ |
||||
url: `/iuser/getById`, |
||||
method: 'get', |
||||
params: arg, |
||||
dataType: 'json' |
||||
}) |
||||
} |
||||
|
||||
// 添加数据:
|
||||
export const iuserAdd = (arg) => { |
||||
return axios.request({ |
||||
url: '/iuser/add', |
||||
method: 'post', |
||||
data: arg, |
||||
dataType: 'json' |
||||
}) |
||||
} |
||||
|
||||
// 修改数据:
|
||||
export const IuserUpdate = (arg) => { |
||||
return axios.request({ |
||||
url: '/iuser/update', |
||||
method: 'put', |
||||
data: arg, |
||||
dataType: 'json' |
||||
}) |
||||
} |
||||
|
||||
// 删除数据:
|
||||
export const iuserDelete = (arg) => { |
||||
return axios.request({ |
||||
url: '/iuser/delete', |
||||
method: 'delete', |
||||
params: { |
||||
id: arg.id[0] |
||||
}, |
||||
dataType: 'json' |
||||
}) |
||||
} |
@ -0,0 +1,81 @@ |
||||
<script setup> |
||||
import { onMounted, reactive } from 'vue' |
||||
import { getRecordPage, iuserAdd, IuserUpdate, iuserDelete, iuserGetById } from './api' |
||||
import { baseModelOptions, baseFilterOptions, stausList } from './options' |
||||
|
||||
// const { proxy } = getCurrentInstance(); |
||||
|
||||
const state = reactive({ |
||||
baseModelOptions: baseModelOptions(), |
||||
baseFilterOptions: baseFilterOptions(), |
||||
title: "实名管理", |
||||
baseModelName: '实名信息', |
||||
addBtnName: '新增人员', |
||||
editBtnName: '', |
||||
delBtnName: '', |
||||
primaryKey: 'id', |
||||
getTableFn: getRecordPage, |
||||
addFn: iuserAdd, |
||||
editFn: IuserUpdate, |
||||
deleteFn: iuserDelete, |
||||
detailFn: iuserGetById, |
||||
showEditBtn: false, |
||||
showDeleteBtn: false, |
||||
columnCount: 1, |
||||
hideControl: true, |
||||
showAddBtn: false, |
||||
hideselection: true, |
||||
rowControl: { |
||||
showEditBtn: false, |
||||
showDelBtn: false |
||||
}, |
||||
permission: {//菜单管理中添加权限 |
||||
add: 'accessControl:page:list', |
||||
edit: 'accessControl:page:list', |
||||
delete: 'accessControl:page:list', |
||||
detail: 'accessControl:page:list', |
||||
}, |
||||
pageInfo: { total: 0, base: { limit: 8, current: 1 } }, |
||||
tableDataFormatter: function (params, res) { |
||||
res.data.total = res.data.totalRows |
||||
res.data.list = res.data.pageData |
||||
return res.data.list |
||||
}, |
||||
}) |
||||
onMounted(() => { |
||||
|
||||
}) |
||||
</script> |
||||
|
||||
<template> |
||||
<div class="app-container"> |
||||
<BaseTablePage :tableOptions="state"> |
||||
<template v-slot:column> |
||||
<el-table-column type="index" align="center" label="序号" width="70" /> |
||||
<el-table-column label="姓名" align="center" prop="personName" /> |
||||
<el-table-column label="进出门类型" align="center" prop="enterOrExit"> |
||||
<template #default="scope"> |
||||
<span>{{ stausList().find((item) => |
||||
item.value == scope.row.openType)?.label || '-' }}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column label="刷卡时间" align="center" prop="startSwingTime" /> |
||||
<el-table-column label="人员类型" align="center" prop="imageType"> |
||||
<template #default="scope"> |
||||
<span>{{ scope.row.imageType == 1 ? '内部人员' : scope.row.imageType == 2 ? '访客' : '-' }}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column label="是否佩戴口罩" align="center" prop="createTime"> |
||||
<template #default="scope"> |
||||
<span>{{ scope.row.maskState == 3 ? '带口罩' : scope.row.maskState == 2 ? '没带口罩' : '未识别' }}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column label="是否超温" align="center" prop="overTemp"> |
||||
<span>{{ scope.row.overTemp ? '是' : '否' }}</span> |
||||
</el-table-column> |
||||
</template> |
||||
</BaseTablePage> |
||||
</div> |
||||
</template> |
||||
|
||||
<style scoped></style> |
@ -0,0 +1,101 @@ |
||||
export const baseModelOptions = () => { |
||||
return [ |
||||
|
||||
] |
||||
} |
||||
export const stausList = () => { |
||||
return [ |
||||
{ "value": 42, "label": "合法密码开门" }, |
||||
{ "value": 43, "label": "非法密码开门" }, |
||||
{ "value": 45, "label": "合法指纹开门" }, |
||||
{ "value": 46, "label": "非法指纹开门" }, |
||||
{ "value": 48, "label": "远程开门" }, |
||||
{ "value": 49, "label": "按钮开门" }, |
||||
{ "value": 50, "label": "钥匙开门" }, |
||||
{ "value": 51, "label": "合法刷卡开门" }, |
||||
{ "value": 52, "label": "非法刷卡开门" }, |
||||
{ "value": 53, "label": "门磁事件" }, |
||||
{ "value": 54, "label": "异常开门" }, |
||||
{ "value": 55, "label": "异常关门" }, |
||||
{ "value": 56, "label": "正常关门" }, |
||||
{ "value": 57, "label": "正常开门" }, |
||||
{ "value": 59, "label": "对讲请求事件" }, |
||||
{ "value": 61, "label": "人脸合法开门" }, |
||||
{ "value": 62, "label": "人脸非法开门" }, |
||||
{ "value": 1421, "label": "RFID有源合法" }, |
||||
{ "value": 1422, "label": "RFID无源合法" }, |
||||
{ "value": 1423, "label": "RFID有源非法" }, |
||||
{ "value": 1424, "label": "RFID无源非法" }, |
||||
{ "value": 1433, "label": "黑名单事件" }, |
||||
{ "value": 1436, "label": "人证合法开门" }, |
||||
{ "value": 1437, "label": "人证非法开门" }, |
||||
{ "value": 1438, "label": "人证和身份证非法开门" }, |
||||
{ "value": 1439, "label": "人证和身份证合法开门" }, |
||||
{ "value": 1448, "label": "RFID感应事件" }, |
||||
{ "value": 1449, "label": "RFID非法感应事件" }, |
||||
{ "value": 1450, "label": "RFID按键事件" }, |
||||
{ "value": 1451, "label": "RFID非法按键事件" }, |
||||
{ "value": 1455, "label": "先刷卡后密码合法开门" }, |
||||
{ "value": 1456, "label": "先刷卡后密码非法开门" }, |
||||
{ "value": 1461, "label": "刷卡+指纹组合合法开门" }, |
||||
{ "value": 1462, "label": "刷卡+指纹组合非法开门" }, |
||||
{ "value": 1463, "label": "多人合法开门" }, |
||||
{ "value": 1464, "label": "多人非法开门" }, |
||||
{ "value": 1467, "label": "人员编号+密码合法开门" }, |
||||
{ "value": 1468, "label": "人员编号+密码非法开门" }, |
||||
{ "value": 1469, "label": "人脸+密码合法开门" }, |
||||
{ "value": 1470, "label": "人脸+密码非法开门" }, |
||||
{ "value": 1471, "label": "指纹+密码合法开门" }, |
||||
{ "value": 1472, "label": "指纹+密码非法开门" }, |
||||
{ "value": 1473, "label": "指纹+人脸合法开门" }, |
||||
{ "value": 1474, "label": "指纹+人脸非法开门" }, |
||||
{ "value": 1475, "label": "刷卡+人脸合法开门" }, |
||||
{ "value": 1476, "label": "刷卡+人脸非法开门" }, |
||||
{ "value": 1487, "label": "指纹+人脸+密码合法开门" }, |
||||
{ "value": 1488, "label": "指纹+人脸+密码非法开门" }, |
||||
{ "value": 1489, "label": "刷卡+人脸+密码合法开门" }, |
||||
{ "value": 1490, "label": "刷卡+人脸+密码非法开门" }, |
||||
{ "value": 1491, "label": "刷卡+指纹+密码合法开门" }, |
||||
{ "value": 1492, "label": "刷卡+指纹+密码非法开门" }, |
||||
{ "value": 1493, "label": "卡+指纹+人脸组合合法开门" }, |
||||
{ "value": 1494, "label": "卡+指纹+人脸组合非法开门" }, |
||||
{ "value": 4603, "label": "卡+指纹+人脸+密码组合合法开门" }, |
||||
{ "value": 4604, "label": "卡+指纹+人脸+密码组合非法开门" }, |
||||
{ "value": 4626, "label": "人脸+安全帽合法开门" }, |
||||
{ "value": 4627, "label": "人脸+安全帽非法开门" }, |
||||
{ "value": 10001, "label": "健康码合法开门" }, |
||||
{ "value": 10002, "label": "异常健康码开门" } |
||||
] |
||||
} |
||||
export const baseFilterOptions = () => { |
||||
return [ |
||||
{ |
||||
tag: 'el-input', |
||||
label: '姓名:', |
||||
key: 'personName', |
||||
value: '', |
||||
default: '', |
||||
rules: [ |
||||
{ required: true, message: '请输入姓名', trigger: 'blur' }, |
||||
], |
||||
attribute: {//属性
|
||||
type: 'text', |
||||
placeholder: '请输入姓名', |
||||
}, |
||||
}, |
||||
{ |
||||
tag: 'BaseSelect', |
||||
label: '开门类型:', |
||||
key: 'openType', |
||||
value: '', |
||||
default: '', |
||||
rules: [ |
||||
{ required: true, message: '请选择开门类型', trigger: 'blur' }, |
||||
], |
||||
attribute: { //属性
|
||||
placeholder: '请选择开门类型', |
||||
options: stausList() |
||||
}, |
||||
}, |
||||
] |
||||
} |
@ -0,0 +1,55 @@ |
||||
import axios from '@/utils/request' |
||||
// 查询分页数据:
|
||||
export const getRecordPage = (arg) => { |
||||
return axios.request({ |
||||
url: '/dahua/attendance/getRecordPage', |
||||
method: 'post', |
||||
data: { |
||||
...arg, |
||||
pageNum:arg.current, |
||||
pageSize:arg.limit, |
||||
}, |
||||
dataType: 'json' |
||||
}) |
||||
} |
||||
// 查询详情数据:
|
||||
export const iuserGetById = (arg) => { |
||||
return axios.request({ |
||||
url: `/iuser/getById`, |
||||
method: 'get', |
||||
params: arg, |
||||
dataType: 'json' |
||||
}) |
||||
} |
||||
|
||||
// 添加数据:
|
||||
export const iuserAdd = (arg) => { |
||||
return axios.request({ |
||||
url: '/iuser/add', |
||||
method: 'post', |
||||
data: arg, |
||||
dataType: 'json' |
||||
}) |
||||
} |
||||
|
||||
// 修改数据:
|
||||
export const IuserUpdate = (arg) => { |
||||
return axios.request({ |
||||
url: '/iuser/update', |
||||
method: 'put', |
||||
data: arg, |
||||
dataType: 'json' |
||||
}) |
||||
} |
||||
|
||||
// 删除数据:
|
||||
export const iuserDelete = (arg) => { |
||||
return axios.request({ |
||||
url: '/iuser/delete', |
||||
method: 'delete', |
||||
params: { |
||||
id: arg.id[0] |
||||
}, |
||||
dataType: 'json' |
||||
}) |
||||
} |
@ -0,0 +1,84 @@ |
||||
<script setup> |
||||
import { onMounted, reactive } from 'vue' |
||||
import { getRecordPage, iuserAdd, IuserUpdate, iuserDelete, iuserGetById } from './api' |
||||
import { baseModelOptions, baseFilterOptions, stausList } from './options' |
||||
|
||||
// const { proxy } = getCurrentInstance(); |
||||
|
||||
const state = reactive({ |
||||
baseModelOptions: baseModelOptions(), |
||||
baseFilterOptions: baseFilterOptions(), |
||||
title: "实名管理", |
||||
baseModelName: '实名信息', |
||||
addBtnName: '新增人员', |
||||
editBtnName: '', |
||||
delBtnName: '', |
||||
primaryKey: 'id', |
||||
getTableFn: getRecordPage, |
||||
addFn: iuserAdd, |
||||
editFn: IuserUpdate, |
||||
deleteFn: iuserDelete, |
||||
detailFn: iuserGetById, |
||||
showEditBtn: false, |
||||
showDeleteBtn: false, |
||||
columnCount: 1, |
||||
hideControl: true, |
||||
showAddBtn: false, |
||||
hideselection: true, |
||||
rowControl: { |
||||
showEditBtn: false, |
||||
showDelBtn: false |
||||
}, |
||||
permission: {//菜单管理中添加权限 |
||||
add: 'workAttendance:page:list', |
||||
edit: 'workAttendance:page:list', |
||||
delete: 'workAttendance:page:list', |
||||
detail: 'workAttendance:page:list', |
||||
}, |
||||
pageInfo: { total: 0, base: { limit: 8, current: 1 } }, |
||||
beforeFilter: (params) => { |
||||
//1. 使用异步的方式 |
||||
return new Promise((resolve) => { |
||||
//dosomething... |
||||
resolve({ |
||||
attendanceType:params.attendanceType, |
||||
personName: params.personName, |
||||
actionTimeAfter:params.params && params.params.length>0?params.params[0]:null, |
||||
actionTimeBefore:params.params && params.params.length>0?params.params[1]:null, |
||||
}) |
||||
}) |
||||
}, |
||||
tableDataFormatter: function (params, res) { |
||||
res.data.total = res.data.totalRows |
||||
res.data.list = res.data.pageData |
||||
return res.data.list |
||||
}, |
||||
}) |
||||
onMounted(() => { |
||||
|
||||
}) |
||||
</script> |
||||
|
||||
<template> |
||||
<div class="app-container"> |
||||
<BaseTablePage :tableOptions="state"> |
||||
<template v-slot:column> |
||||
<el-table-column type="index" align="center" label="序号" width="70" /> |
||||
<el-table-column label="姓名" align="center" prop="personName" /> |
||||
<el-table-column label="考勤方式" align="center" prop="enterOrExit"> |
||||
<template #default="scope"> |
||||
<span>{{ stausList().find(item => item.value === scope.row.attendanceType)?.label || '-' }}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column label="刷卡时间" align="center" prop="reportTime" /> |
||||
<el-table-column label="考勤点名称" align="center" prop="imageType"> |
||||
<template #default="scope"> |
||||
<span>{{ scope.row.siteName }}</span> |
||||
</template> |
||||
</el-table-column> |
||||
</template> |
||||
</BaseTablePage> |
||||
</div> |
||||
</template> |
||||
|
||||
<style scoped></style> |
@ -0,0 +1,81 @@ |
||||
export const baseModelOptions = () => { |
||||
return [ |
||||
|
||||
] |
||||
} |
||||
export const stausList = () => { |
||||
return [ |
||||
{ "value": 42, "label": "密码" }, |
||||
{ "value": 45, "label": "指纹" }, |
||||
{ "value": 51, "label": "刷卡" }, |
||||
{ "value": 61, "label": "人脸" }, |
||||
{ "value": 1436, "label": "人证" }, |
||||
{ "value": 1439, "label": "人证+身份证" }, |
||||
{ "value": 1455, "label": "刷卡+密码" }, |
||||
{ "value": 1461, "label": "刷卡+指纹" }, |
||||
{ "value": 1463, "label": "多人考勤" }, |
||||
{ "value": 1467, "label": "人员编号+密码" }, |
||||
{ "value": 1469, "label": "人脸+密码" }, |
||||
{ "value": 1471, "label": "指纹+密码" }, |
||||
{ "value": 1473, "label": "指纹+人脸" }, |
||||
{ "value": 1475, "label": "刷卡+人脸" }, |
||||
{ "value": 1487, "label": "指纹+人脸+密码" }, |
||||
{ "value": 1489, "label": "刷卡+人脸+密码" }, |
||||
{ "value": 1491, "label": "刷卡+指纹+密码" }, |
||||
{ "value": 1493, "label": "刷卡+指纹+人脸" }, |
||||
{ "value": 4603, "label": "刷卡+指纹+人脸+密码" }, |
||||
{ "value": 4626, "label": "人脸+安全帽" }, |
||||
{ "value": 10001, "label": "健康码" }, |
||||
{ "value": 1434, "label": "二维码" }, |
||||
{ "value": 1441, "label": "蓝牙" }, |
||||
{ "value": 8888, "label": "车牌" }, |
||||
{ "value": 8889, "label": "移动打卡" }, |
||||
{ "value": 8890, "label": "异地打卡" } |
||||
] |
||||
} |
||||
export const baseFilterOptions = () => { |
||||
return [ |
||||
{ |
||||
tag: 'el-input', |
||||
label: '姓名:', |
||||
key: 'personName', |
||||
value: '', |
||||
default: '', |
||||
rules: [ |
||||
{ required: true, message: '请输入姓名', trigger: 'blur' }, |
||||
], |
||||
attribute: {//属性
|
||||
type: 'text', |
||||
placeholder: '请输入姓名', |
||||
}, |
||||
}, |
||||
{ |
||||
tag: 'BaseSelect', |
||||
label: '考勤类型:', |
||||
key: 'attendanceType', |
||||
value: '', |
||||
default: '', |
||||
rules: [ |
||||
{ required: true, message: '请选择考勤类型', trigger: 'blur' }, |
||||
], |
||||
attribute: { //属性
|
||||
placeholder: '请选择考勤类型', |
||||
options: stausList() |
||||
}, |
||||
}, |
||||
{ |
||||
tag: 'el-date-picker', |
||||
label: '时间:', |
||||
key: 'params', |
||||
value: '', |
||||
default: '', |
||||
attribute: {//属性
|
||||
valueFormat: "YYYY-MM-DD HH:mm:ss", |
||||
type: "datetimerange", |
||||
rangeSeparator: "-", |
||||
startPlaceholder: "开始时间", |
||||
endPlaceholder: "结束时间", |
||||
}, |
||||
}, |
||||
] |
||||
} |
@ -0,0 +1,10 @@ |
||||
import axios from '@/utils/request' |
||||
export const vehicletoken = (arg) => { |
||||
return axios.request({ |
||||
url: '/vehicle/token', |
||||
method: 'get', |
||||
params: arg, |
||||
dataType: 'json', |
||||
|
||||
}) |
||||
} |
@ -0,0 +1,98 @@ |
||||
<script setup> |
||||
import { onMounted, reactive } from 'vue' |
||||
import { useRoute, useRouter } from 'vue-router'; |
||||
import { vehicletoken } from './api' |
||||
const { proxy } = getCurrentInstance(); |
||||
const route = useRoute() |
||||
const router = useRouter() |
||||
const state = reactive({ |
||||
url: "", |
||||
item: JSON.parse(route.query.item), |
||||
showLoading: true |
||||
}) |
||||
onMounted(() => { |
||||
vehicletoken().then((res) => { |
||||
state.showLoading = false |
||||
state.url = `https://openh5.aichezaixian.com/?token=${res.msg}&imei=${state.item.imei}&appKey=8FB345B8693CCD00BA15086EBAA101736574BC1ECEB825E0`; |
||||
}) |
||||
}) |
||||
// &activeTab=CCC |
||||
</script> |
||||
|
||||
<template> |
||||
<div class="app-container" v-if="state.url" v-loading="state.showLoading" :element-loading-text="'Loading...'" |
||||
:element-loading-background="'rgb(34, 58, 106, 0.5)'"> |
||||
<div style="display: flex;align-items: center;height: 40px;"> |
||||
<el-button icon="Back" @click="router.back()"> |
||||
返回</el-button> |
||||
</div> |
||||
<div style="display: flex;align-items: center;height: calc(100% - 40px);width: 100%;"> |
||||
<div class="left-detail"> |
||||
<div>{{ state.item.vehicleNumber ? state.item.vehicleNumber : '-' }}</div> |
||||
<div class="left-detail-item"> |
||||
<span>设备型号:</span> |
||||
<span>{{ state.item.mcType ? state.item.mcType : '-' }}</span> |
||||
</div> |
||||
<div class="left-detail-item"> |
||||
<span>设备类型:</span> |
||||
<span> {{ state.item.equipType == 'WIRED' ? '有线' : state.item.equipType == 'WIRELESS' ? '无线' : '-' |
||||
}}</span> |
||||
</div> |
||||
|
||||
<div class="left-detail-item"> |
||||
<span>司机姓名:</span> |
||||
<span>{{ state.item.driverName ? state.item.driverName : '-' }}</span> |
||||
</div> |
||||
<div class="left-detail-item"> |
||||
<span>司机电话:</span> |
||||
<span>{{ state.item.driverPhone ? state.item.driverPhone : '-' }}</span> |
||||
</div> |
||||
</div> |
||||
<iframe style="width: calc(100% - 242px);height: 100%;border: none;" :src="state.url"></iframe> |
||||
</div> |
||||
</div> |
||||
</template> |
||||
|
||||
<style scoped lang="scss"> |
||||
.app-container { |
||||
width: 100%; |
||||
height: calc(100vh - 50px); |
||||
} |
||||
|
||||
.left-detail-item { |
||||
display: flex; |
||||
justify-content: space-between; |
||||
align-items: center; |
||||
margin-top: 14px; |
||||
|
||||
>span:nth-child(1) { |
||||
font-family: Source Han Sans CN, Source Han Sans CN; |
||||
font-weight: 400; |
||||
font-size: 14px; |
||||
color: #666666; |
||||
} |
||||
|
||||
>span:nth-child(2) { |
||||
font-family: Source Han Sans CN, Source Han Sans CN; |
||||
font-weight: 400; |
||||
color: #333333; |
||||
font-size: 14px; |
||||
} |
||||
} |
||||
|
||||
.left-detail { |
||||
padding: 24px; |
||||
height: 100%; |
||||
background: red; |
||||
width: 242px; |
||||
background: #fff; |
||||
border-radius: 0px 0px 0px 0px; |
||||
|
||||
>div:nth-child(1) { |
||||
font-family: Source Han Sans CN, Source Han Sans CN; |
||||
font-weight: 500; |
||||
font-size: 16px; |
||||
color: #333333; |
||||
} |
||||
} |
||||
</style> |
Loading…
Reference in new issue