admin/src/components/business/OperaDeviceRoleWindow.vue
@@ -32,6 +32,7 @@ :filter-method="filterMethod" filter-placeholder="请输入门禁点或区域名称" v-model="form.doorIds" class="transfer" :data="device"> </el-transfer> </el-form-item> @@ -196,8 +197,25 @@ } </script> <style> .el-transfer-panel { width: 350px !important; } <style lang="scss" scoped> .transfer { height: 600px; width: 100%; display: flex; justify-content: center; align-items: center; ::v-deep .el-transfer-panel { flex: 1; height: 100%; } ::v-deep .el-transfer-panel__body { height: 500px; } ::v-deep .el-transfer-panel__list.is-filterable { height: 480px; } } </style> admin/src/components/business/OperaMemberRoleWindow.vue
@@ -1,51 +1,32 @@ <template> <GlobalWindow :title="title" :visible.sync="visible" width="70%" :confirm-working="isWorking" @confirm="confirm" > <p class="tip-warn"><i class="el-icon-warning"></i>提醒:<br> 1.门禁权限配置成功后,授权任务即进入权限下发队列,可前往【人员授权记录】查看下发进度;<br> 2.如果需要清空当前选中人员下发权限,以下【已选门禁点分组】为空提交即可。 </p> <p class="tip" v-if="form.names != null">正在为<em>【{{ form.names.map(item => `${item}`).join(',') }}】</em> 配置门禁权限</p> <el-form :model="form" ref="form" :rules="rules"> <el-form-item label="门禁有效期:" prop="timeType"> <el-radio-group v-model="form.timeType"> <el-radio :label="0">长期有效</el-radio> <el-radio :label="1">自定义时间</el-radio> <el-radio :label="2" v-if="companyType=== 0">培训有效期</el-radio> </el-radio-group> <div v-if="form.timeType ==1" style="margin-top: 10px" > <el-date-picker @change="seleTime" v-model="time" type="datetimerange" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"> </el-date-picker> </div> </el-form-item> <el-form-item label="门禁点分组:" prop="roleIds"> <el-transfer style="margin-top: 15px;font-size: 12px" :titles="['未选门禁点分组', '已选门禁点分组']" filterable :filter-method="filterMethod" filter-placeholder="请输入门禁点分组名称" v-model="form.roleIds" class="transfer" :data="roles"> </el-transfer> </el-form-item> <GlobalWindow :title="title" :visible.sync="visible" width="900px" :confirm-working="isWorking" @confirm="confirm"> <p class="tip-warn"><i class="el-icon-warning"></i>提醒:<br> 1.门禁权限配置成功后,授权任务即进入权限下发队列,可前往【人员授权记录】查看下发进度;<br> 2.如果需要清空当前选中人员下发权限,以下【已选门禁点分组】为空提交即可。 </p> <p class="tip" v-if="form.names != null">正在为<em>【{{ form.names.map(item => `${item}`).join(',') }}】</em> 配置门禁权限</p> <el-form :model="form" ref="form" :rules="rules"> <el-form-item label="门禁有效期:" prop="timeType"> <el-radio-group v-model="form.timeType"> <el-radio :label="0">长期有效</el-radio> <el-radio :label="1">自定义时间</el-radio> <el-radio :label="2" v-if="companyType === 0">培训有效期</el-radio> </el-radio-group> <div v-if="form.timeType == 1" style="margin-top: 10px"> <el-date-picker @change="seleTime" v-model="time" type="datetimerange" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"> </el-date-picker> </div> </el-form-item> <el-form-item label="门禁点分组:" prop="roleIds"> <el-transfer style="margin-top: 15px;font-size: 12px" :titles="['未选门禁点分组', '已选门禁点分组']" filterable :filter-method="filterMethod" filter-placeholder="请输入门禁点分组名称" v-model="form.roleIds" class="transfer" :data="roles"> </el-transfer> </el-form-item> </el-form> </GlobalWindow> </el-form> </GlobalWindow> </template> <script> @@ -56,7 +37,7 @@ name: 'OperaDeviceRoleWindow', extends: BaseOpera, components: { GlobalWindow }, data () { data() { var validateTime = (rule, value, callback) => { if (this.form.timeType == null) { callback(new Error('请填写正确的门禁有效期时间')) @@ -84,7 +65,7 @@ }, roles: [], rules: { // 验证规则 // 验证规则 timeType: [ { required: true, validator: validateTime, message: '请选中门禁有效期' } ], @@ -97,18 +78,18 @@ } } }, created () { created() { this.config({ api: '/business/member', 'field.id': 'id' }) }, methods: { filterMethod (query, item) { filterMethod(query, item) { if (!query) return item return item.label.indexOf(query) > -1 }, seleTime (e) { seleTime(e) { if (e && e.length >= 2) { this.form.startTime = e[0] this.form.endTime = e[1] @@ -117,7 +98,7 @@ this.form.endTime = null } }, confirm () { confirm() { this.$refs.form.validate((valid) => { if (!valid) { return @@ -127,13 +108,13 @@ .then(() => { this.confirmDo() }) .catch(() => {}) .catch(() => { }) } else { this.confirmDo() } }) }, confirmDo () { confirmDo() { // 调用新建接口 this.isWorking = true this.api.batchRoleAuth({ @@ -156,7 +137,7 @@ }) }, // 获取设备 getLists () { getLists() { getDeviceRoleList({ type: 2 }) .then(res => { this.roles = res.map(item => { @@ -168,7 +149,7 @@ }) }) }, open (title, ids, names, companyType) { open(title, ids, names, companyType) { this.roles = [] this.getLists() this.title = title @@ -190,6 +171,7 @@ <style scoped lang="scss"> @import "@/assets/style/variables.scss"; // 角色配置 .global-window { .tip { @@ -199,10 +181,12 @@ font-weight: bold; } } .tip-warn { margin: 4px 0 12px 0; font-size: 12px; color: #999; i { color: orange; margin-right: 4px; @@ -212,22 +196,25 @@ } } } .transfer { height: 600px; width: 100%; display: flex; justify-content: center; align-items: center; ::v-deep .el-transfer-panel{ flex: 1; height: 100%; } ::v-deep .el-transfer-panel__body { height: 500px; } ::v-deep .el-transfer-panel__list.is-filterable { height: 480px; } .transfer { height: 600px; width: 100%; display: flex; justify-content: center; align-items: center; ::v-deep .el-transfer-panel { flex: 1; height: 100%; } ::v-deep .el-transfer-panel__body { height: 500px; } ::v-deep .el-transfer-panel__list.is-filterable { height: 480px; } } </style> admin/src/components/business/OperaMemberWindow.vue
@@ -1,56 +1,45 @@ <template> <GlobalWindow :title="title" width="60%" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm" > <el-form :model="form" ref="form" :rules="rules"> <el-form-item label="姓名" prop="name"> <el-input v-model="form.name" placeholder="请输入姓名" v-trim/> </el-form-item> <el-form-item label="所属组织" prop="companyId"> <el-cascader v-model="form.company" :options="department" @change="handleChangeCompany" :show-all-levels="false" clearable filterable :props="departprops" ></el-cascader> <div style="font-size: 12px;color: #F56C6C" > 注:仅支持选择 【{{companyType ===0?'相关方组织':'内部组织'}}】 </div> </el-form-item> <el-form-item label="手机号" prop="phone"> <el-input v-model="form.phone" placeholder="请输入手机号" v-trim/> <div style="color: #F56C6C;font-size: 12px">注:员工手机号将作为平台登录账号,初始密码为系统默认密码配置项</div> </el-form-item> <el-form-item label="身份证号" prop="idcardNo" v-if="form.id ==null"> <el-input v-model="form.idcardNo" placeholder="请输入身份证号" v-trim/> </el-form-item> <el-form-item label="修改身份证号" prop="idcardNoNew" v-if="form.id !=null"> <el-input v-model="form.idcardNoNew" placeholder="可修改身份证号" v-trim/> <div style="font-size: 12px" v-if="form.id !=null"> 注:当前身份证号为<span style="color: #F56C6C">【{{form.idcardDecode}}】</span>,如需修改,请在输入栏填写新的身份证号! </div> </el-form-item> <el-form-item label="工号" prop="code"> <el-input v-model="form.code" placeholder="请输入员工工号" v-trim/> </el-form-item> <el-form-item label="人脸照片" prop="faceImgFull" > <UploadFaceImg :file="{ 'imgurlfull': form.faceImgFull, 'imgurl': form.faceImg }" :uploadData="uploadData" @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false" @uploadBegin="isUploading = true" /> </el-form-item> </el-form> </GlobalWindow> <GlobalWindow :title="title" width="60%" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm"> <el-form :model="form" ref="form" :rules="rules"> <el-form-item label="姓名" prop="name"> <el-input v-model="form.name" placeholder="请输入姓名" v-trim /> </el-form-item> <el-form-item label="所属组织" prop="companyId"> <el-cascader v-model="form.company" :options="department" @change="handleChangeCompany" :show-all-levels="false" clearable filterable :props="departprops"></el-cascader> <div style="font-size: 12px;color: #F56C6C"> 注:仅支持选择 【{{ companyType === 0 ? '相关方组织' : '内部组织' }}】 </div> </el-form-item> <el-form-item label="手机号" prop="phone"> <el-input v-model="form.phone" placeholder="请输入手机号" v-trim /> <div style="color: #F56C6C;font-size: 12px">注:员工手机号将作为平台登录账号,初始密码为系统默认密码配置项</div> </el-form-item> <el-form-item label="身份证号" v-if="form.id == null"> <el-input v-model="form.idcardNo" placeholder="请输入身份证号" v-trim /> </el-form-item> <el-form-item label="修改身份证号" v-if="form.id != null"> <el-input v-model="form.idcardNoNew" placeholder="可修改身份证号" v-trim /> <div style="font-size: 12px" v-if="form.id != null"> 注:当前身份证号为<span style="color: #F56C6C">【{{ form.idcardDecode }}】</span>,如需修改,请在输入栏填写新的身份证号! </div> </el-form-item> <el-form-item label="工号" prop="code"> <el-input v-model="form.code" placeholder="请输入员工工号" v-trim /> </el-form-item> <el-form-item label="人脸照片" prop="faceImgFull"> <div class="upload_wrap"> <UploadFaceImg :file="{ 'imgurlfull': form.faceImgFull, 'imgurl': form.faceImg }" :uploadData="uploadData" @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false" @uploadBegin="isUploading = true" /> <div class="content"> <div>1、请选择浅色或中性背景,使用均匀光线拍照。</div> <div>2、请保持面部正对镜头,勿遮挡面部,保持中立表情。</div> <div>3、请避免后期修图,确保人脸轮廓清晰、完整,尽可能减少非脸部内容占比。</div> </div> </div> </el-form-item> </el-form> </GlobalWindow> </template> <script> @@ -58,12 +47,12 @@ import GlobalWindow from '@/components/common/GlobalWindow' import UploadAvatarImage from '@/components/common/UploadAvatarImage' import UploadFaceImg from '@/components/common/UploadFaceImg' import {checkMobile, validIdCardNo, validIdCardNoNew} from '@/utils/form' import { checkMobile, validIdCardNo, validIdCardNoNew } from '@/utils/form' export default { name: 'OperaCompanyWindow', extends: BaseOpera, components: { GlobalWindow, UploadAvatarImage,UploadFaceImg }, data () { components: { GlobalWindow, UploadAvatarImage, UploadFaceImg }, data() { return { uploadData: { folder: 'member' @@ -73,7 +62,7 @@ value: 'id', checkStrictly: true }, companyType:0, companyType: 0, department: [], // 表单数据 form: { @@ -102,14 +91,14 @@ } } }, created () { created() { this.config({ api: '/business/member.js', 'field.id': 'id' }) }, methods: { handleChangeCompany (value) { handleChangeCompany(value) { if (this.form.company && this.form.company.length > 1) { this.form.companyId = this.form.company[this.form.company.length - 1] } @@ -119,7 +108,7 @@ * @title 窗口标题 * @target 编辑的对象 */ open (title, target, depart,companyType) { open(title, target, depart, companyType) { this.title = title this.department = depart this.visible = true @@ -140,7 +129,7 @@ this.form[key] = target[key] this.form.idcardNo = '' } this.form.company =[] this.form.company = [] if (target.companyId && target.companyPath) { var array = target.companyPath.split('/') array.forEach(item => { @@ -152,10 +141,34 @@ }) }, // 上传图片 uploadAvatarSuccess (file) { uploadAvatarSuccess(file) { this.form.faceImg = file.imgurl this.form.faceImgFull = file.imgurlfull } } } </script> <style lang="scss" scoped> .upload_wrap{ display: flex; align-items: center; .avatar-uploader{ display: flex; align-items: center; justify-content: center; } ::v-deep .avatar{ max-width: 90px; max-height: 90px; } .content{ display: flex; flex-direction: column; justify-content: center; font-size: 12px; color: #999999; margin-left: 12px; line-height: 24px; } } </style> admin/src/components/business/OperaPlatformApproveTemplWindow.vue
@@ -82,10 +82,10 @@ <!-- 抄送人 --> <template v-if="apprList[activeIndex].type == '1'"> <div class="config_data_item_reviewed_content"> <div v-for="mem in apprList[activeIndex].objIds" :key="mem.id" <div v-for="(mem,memIndex) in apprList[activeIndex].objIds" :key="mem.id" class="config_data_item_reviewed_content_item"> <span>{{ mem.name }}</span> <i class="el-icon-close"></i> <i @click="memDel(memIndex)" class="el-icon-close"></i> </div> <span class="add" @click="selStaff">+添加</span> </div> admin/src/components/business/operaVisitsWindow.vue
@@ -288,7 +288,6 @@ .upload_wrap{ display: flex; align-items: center; justify-content: center; .avatar-uploader{ display: flex; align-items: center; admin/src/components/common/UploadFaceImg.vue
@@ -24,8 +24,9 @@ <ImageCropper ref="iconShot" v-if="updateImg" :imgSrc="img" > </ImageCropper> <span slot="footer" class="dialog-footer"> <el-button @click="updateImg = false">取 消</el-button> <el-button type="primary" @click="uploadIcon">确 定</el-button> <el-button v-if="loading">取 消</el-button> <el-button v-else @click="updateImg = false">取 消</el-button> <el-button :loading="loading" type="primary" @click="uploadIcon">确 定</el-button> </span> </el-dialog> </div> @@ -50,6 +51,7 @@ }, data () { return { loading: false, fileInfo:{}, img: null, updateImg: false, @@ -75,7 +77,9 @@ { type: this.fileInfo.type } // 设置File类型的文件类型 ) ) this.loading = true upload(formData).then(res => { this.loading = false console.log(res) this.file.imgurl = res.imgaddr this.file.imgurlfull = res.url @@ -84,6 +88,8 @@ this.updateImg = false this.$emit('uploadSuccess', { imgurl: res.imgaddr, imgurlfull: res.url, name: res.originname }) this.$emit('uploadEnd') }, () => { this.loading = false }) }) }, admin/src/components/system/role/PermissionConfigWindow.vue
@@ -12,6 +12,7 @@ ref="permissionTransfer" v-model="selectedIds" filterable class="transfer" :filter-method="filterPermissions" :titles="['未授权权限', '已授权权限']" :props="{ @@ -121,4 +122,24 @@ } } } .transfer { height: 600px; width: 100%; display: flex; justify-content: center; align-items: center; ::v-deep .el-transfer-panel { flex: 1; height: 100%; } ::v-deep .el-transfer-panel__body { height: 500px; } ::v-deep .el-transfer-panel__list.is-filterable { height: 480px; } } </style> admin/src/components/system/user/RoleConfigWindow.vue
@@ -11,6 +11,7 @@ <div class="df_center"> <el-transfer v-model="selectedIds" class="transfer" :titles="['未授权角色', '已授权角色']" :props="{ key: 'id', @@ -126,4 +127,24 @@ } } } .transfer { height: 600px; width: 100%; display: flex; justify-content: center; align-items: center; ::v-deep .el-transfer-panel { flex: 1; height: 100%; } ::v-deep .el-transfer-panel__body { height: 500px; } ::v-deep .el-transfer-panel__list.is-filterable { height: 480px; } } </style> admin/src/views/business/approvalReport.vue
@@ -107,12 +107,12 @@ <template v-if="apprList[activeIndex].type == '1'"> <div class="config_data_item_reviewed_content"> <div v-for="mem in apprList[activeIndex].objIds" v-for="mem,memIndex in apprList[activeIndex].objIds" :key="mem.id" class="config_data_item_reviewed_content_item" > <span>{{ mem.name }}</span> <i class="el-icon-close"></i> <i @click="memDel(memIndex)" class="el-icon-close"></i> </div> <span class="add" @click="selStaff">+添加</span> </div> admin/src/views/platform/platformReason.vue
@@ -38,7 +38,8 @@ <el-table-column prop="reason" label="入园原因" fixed min-width="100px"></el-table-column> <el-table-column prop="groupName" label="对应作业月台组" fixed min-width="150px"></el-table-column> <el-table-column prop="limitNum" label="作业量(万只/天)" min-width="120px"></el-table-column> <el-table-column prop="reason" label="说明" fixed min-width="100px"></el-table-column> <el-table-column prop="sortnum" label="排序码" fixed min-width="80px"></el-table-column> <el-table-column prop="remark" label="说明" fixed min-width="100px"></el-table-column> <el-table-column label="禁/启用" min-width="120px" > <template slot-scope="{row}"> <el-switch admin/src/views/platform/queueUp.vue
@@ -21,7 +21,7 @@ <span></span> </div> </div> <el-table v-if="activeGroup.type == 2" class="mb20" v-loading="loading" :data="dataList" stripe row-key="id" default-expand-all> <el-table class="mb20" v-loading="loading" :data="dataList" stripe row-key="id" default-expand-all> <el-table-column type="index" label="序号" width="80" /> <el-table-column label="车牌号" width="130"> <template slot-scope="{ row }"> @@ -33,8 +33,21 @@ </div> </template> </el-table-column> <el-table-column prop="contractNum" label="合同单号" min-width="120" /> <el-table-column prop="totalNum" label="总运输量(万支)" min-width="110" /> <el-table-column prop="carrierName" label="运输公司" min-width="120"> <template v-slot="scope"> <span>{{ scope.row.carrierName || '-' }}</span> </template> </el-table-column> <el-table-column prop="contractNum" label="运输单号/合同号" min-width="120"> <template v-slot="scope"> <span>{{ scope.row.billCode || scope.row.carrierName || '-' }}</span> </template> </el-table-column> <el-table-column prop="totalNum" label="总运输量(万支)" min-width="110"> <template v-slot="scope"> <span>{{ scope.row.totalNum || '-' }}</span> </template> </el-table-column> <el-table-column label="驾驶员" min-width="130"> <template slot-scope="{ row }"> <span class="mr10">{{ row.driverName }}</span> @@ -50,7 +63,7 @@ </template> </el-table-column> </el-table> <el-table v-else class="mb20" v-loading="loading" :data="dataList" stripe row-key="id" default-expand-all> <!-- <el-table v-else class="mb20" v-loading="loading" :data="dataList" stripe row-key="id" default-expand-all> <el-table-column type="index" label="序号" width="80" /> <el-table-column label="车牌号" width="130"> <template slot-scope="{ row }"> @@ -78,7 +91,7 @@ <el-button v-else type="text" @click="subDetail(row)">预约详情</el-button> </template> </el-table-column> </el-table> </el-table> --> <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="pagination" /> <!-- --> admin/src/views/platform/set/group.vue
@@ -72,6 +72,7 @@ :titles="['待添加月台', '已添加月台']" v-model="param.sel" :data="data" class="transfer" > </el-transfer> @@ -144,5 +145,25 @@ } </script> <style> <style lang="scss" scoped> .transfer { height: 600px; width: 100%; display: flex; justify-content: center; align-items: center; ::v-deep .el-transfer-panel { flex: 1; height: 100%; } ::v-deep .el-transfer-panel__body { height: 500px; } ::v-deep .el-transfer-panel__list.is-filterable { height: 480px; } } </style> admin/src/views/task/driverDetail.vue
@@ -14,7 +14,7 @@ <div class="right" :class="{ scs: info.status == '2' || info.status == '5', msg: info.status == '3' || info.status == '6' }">{{ statusMap[info.status] }}</div> </div> <div class="info"> <div class="title">公务车申请信息</div> <div class="title">物流车预约信息</div> <div class="list"> <div class="item"> <div class="label">申请人</div> admin/src/views/task/index.vue
@@ -250,7 +250,7 @@ getList (page) { this.getHeadData() const { filters, pagination } = this if (filters.selTime && filters.selTime.length > 0) { if (filters.selTime && filters.selTime.length > 0 && filters.queryType != 0) { filters.startDate = filters.selTime[0] filters.endDate = filters.selTime[1] } else { h5/pages/staff/task/visitorReport.vue
@@ -222,143 +222,166 @@ padding-bottom: 0; .flow_wrap { padding: 30rpx 0; .flow_title { font-weight: 600; font-size: 32rpx; color: #222222; margin-bottom: 24rpx; } .list { .item { display: flex; margin-bottom: 48rpx; position: relative; .separate { position: absolute; width: 4rpx; height: 100%; background-color: #eeeeee; left: 40rpx; transform: translate(-50%, 0); top: 80rpx; } .avatar { width: 80rpx; height: 80rpx; position: relative; margin-right: 20rpx; .img { width: 80rpx; height: 80rpx; border-radius: 50%; } .status { width: 28rpx; height: 28rpx; border-radius: 50%; position: absolute; right: 0; bottom: 0; } } .content { flex: 1; .head { display: flex; justify-content: space-between; margin-bottom: 4rpx; .event { font-size: 30rpx; } .time { font-size: 26rpx; color: #999999; } } .name_wrap { font-size: 26rpx; color: #777777; .status { color: $uni-color-primary; } } .children { display: flex; flex-wrap: wrap; margin-top: 12rpx; .child { display: flex; flex-direction: column; justify-content: center; align-items: center; margin-right: 12rpx; font-size: 26rpx; color: #777777; .child_img { width: 48rpx; height: 48rpx; border-radius: 50%; } } } .remark { margin-top: 12rpx; background-color: #f7f7f7; padding: 14rpx 20rpx; border-radius: 8rpx; font-size: 26rpx; color: #666666; line-height: 36rpx; } } .carbon { display: flex; width: 590rpx; overflow-x: auto; margin-top: 12rpx; .carbon_item { text-align: center; flex-shrink: 0; width: 100rpx; image { width: 60rpx; height: 60rpx; margin: 0 auto; } view { font-size: 26rpx; color: #777777; } } } &:nth-last-child(1) { .separate { height: 0; } } } } padding: 30rpx 0; .flow_title { font-weight: 600; font-size: 32rpx; color: #222222; margin-bottom: 24rpx; } .list { .item { display: flex; margin-bottom: 48rpx; position: relative; .separate { position: absolute; width: 4rpx; height: 100%; background-color: #eeeeee; left: 40rpx; transform: translate(-50%, 0); top: 80rpx; } .avatar { width: 80rpx; height: 80rpx; position: relative; margin-right: 20rpx; display: flex; align-items: center; justify-content: center; .img { width: 80rpx; height: 80rpx; border-radius: 50%; } .img_name { font-size: 32rpx; color: #FFFFFF; } .status { width: 28rpx; height: 28rpx; border-radius: 50%; position: absolute; right: 0; bottom: 0; } } .content { flex: 1; .head { display: flex; justify-content: space-between; margin-bottom: 4rpx; .event { font-size: 30rpx; } .time { font-size: 26rpx; color: #999999; } } .name_wrap { font-size: 26rpx; color: #777777; .status { color: $uni-color-primary; } } .children { display: flex; flex-wrap: wrap; margin-top: 12rpx; .child { display: flex; flex-direction: column; justify-content: center; align-items: center; margin-right: 12rpx; font-size: 26rpx; color: #777777; .child_img { width: 48rpx; height: 48rpx; border-radius: 50%; margin-bottom: 2rpx; } .child_name { margin-bottom: 2rpx; width: 48rpx; height: 48rpx; text-align: center; justify-content: center; padding-top: 4rpx; font-size: 28rpx; border-radius: 50%; color: #FFFFFF; background-color: $uni-color-primary; } } } .remark { margin-top: 12rpx; background-color: #f7f7f7; padding: 14rpx 20rpx; border-radius: 8rpx; font-size: 26rpx; color: #666666; line-height: 36rpx; } } .carbon { display: flex; width: 590rpx; overflow-x: auto; margin-top: 12rpx; .carbon_item { text-align: center; flex-shrink: 0; width: 100rpx; image { width: 60rpx; height: 60rpx; margin: 0 auto; } view { font-size: 26rpx; color: #777777; } } } &:nth-last-child(1) { .separate { height: 0; } } } } } .module_list {