|
@@ -0,0 +1,537 @@
|
|
|
+<template>
|
|
|
+ <el-container direction="vertical" class="workbench_penson">
|
|
|
+ <el-main class="layout_main header" style="padding: 20px 30px">
|
|
|
+ <div class="realname">{{ realname }}</div>
|
|
|
+ <div v-if="teamInfo">
|
|
|
+ <div
|
|
|
+ v-for="(item,index) in teamInfo"
|
|
|
+ v-show="index < 2 || teamInfoShow"
|
|
|
+ :key="index"
|
|
|
+ class="teamInfo"
|
|
|
+ >{{ item.teamName + '的' + getUserRoleInTeam(username,item) }}</div>
|
|
|
+ <div
|
|
|
+ v-if="teamInfo.length>2 && !teamInfoShow"
|
|
|
+ style="margin-top: 20px"
|
|
|
+ class="more"
|
|
|
+ @click.native="teamInfoShow = true"
|
|
|
+ >更多</div>
|
|
|
+ </div>
|
|
|
+ </el-main>
|
|
|
+ <el-container style="margin-top: 10px" class="middle">
|
|
|
+ <el-aside width="32.8%" style="margin-right: 10px" class="layout_aside">
|
|
|
+ <div class="module_title">
|
|
|
+ <div class="module_title__sign" />
|
|
|
+ <div class="module_title__caption">我的日程</div>
|
|
|
+ </div>
|
|
|
+ <MyFullCalendar :events="calendarEvents" @dateClick="dateClick" @expand="calendarDialogVisible = true" @change="queryWorkListByTime" @select="select" @eventDrop="eventDrop" />
|
|
|
+ </el-aside>
|
|
|
+ <el-aside width="32.8%" style="margin-right: 10px" class="layout_aside">
|
|
|
+ <div class="module_title">
|
|
|
+ <div class="module_title__sign" />
|
|
|
+ <div class="module_title__caption">我的数据</div>
|
|
|
+ </div>
|
|
|
+ <div style="color: #9B9B9B;line-height: 300px;text-align: center">
|
|
|
+ 敬请期待...
|
|
|
+ </div>
|
|
|
+ </el-aside>
|
|
|
+ <el-aside width="32.9%" class="layout_aside">
|
|
|
+ <div class="module_title">
|
|
|
+ <div class="module_title__sign" />
|
|
|
+ <div class="module_title__caption">提醒</div>
|
|
|
+ </div>
|
|
|
+ </el-aside>
|
|
|
+ </el-container>
|
|
|
+ <el-dialog
|
|
|
+ class="workbench_fullscreen_dialog"
|
|
|
+ :visible.sync="calendarDialogVisible"
|
|
|
+ :fullscreen="true"
|
|
|
+ style="margin-top: 80px;"
|
|
|
+ :modal="false"
|
|
|
+ >
|
|
|
+ <el-tabs v-model="tabsActiveName" @tab-click="handleTabsClick">
|
|
|
+ <el-tab-pane label="日历视图" name="1" style="padding: 31px 146px">
|
|
|
+ <MyFullCalendar :events="calendarEvents" type="big" @dateClick="dateClick" @change="queryWorkListByTime" @select="select" @eventDrop="eventDrop" />
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane label="列表视图" name="2" style="padding: 31px 146px">
|
|
|
+ <div>
|
|
|
+ <div class="list-view-header">
|
|
|
+ <button
|
|
|
+ style="border-radius: 4px 0 0 4px;"
|
|
|
+ :class="busyClassName"
|
|
|
+ @click="busyClassName = 'selected';idleClassName='idle'"
|
|
|
+ >忙碌</button>
|
|
|
+ <button
|
|
|
+ :class="idleClassName"
|
|
|
+ style="margin-left: -4px;border-left: none;border-radius: 0 4px 4px 0;"
|
|
|
+ @click="busyClassName = 'busy';idleClassName='selected';queryIdleList()"
|
|
|
+ >空闲</button>
|
|
|
+ <div v-if="idleClassName === 'selected'" style="display: inline-block">
|
|
|
+ <div style="display: inline-block;margin-left: 20px">选择时间:</div>
|
|
|
+ <el-date-picker
|
|
|
+ v-if="idleClassName === 'selected'"
|
|
|
+ v-model="timeSelectVal"
|
|
|
+ type="daterange"
|
|
|
+ range-separator="-"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ :picker-options="pickerOptions"
|
|
|
+ :clearable="false"
|
|
|
+ @change="queryIdleList()"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div v-else style="display: inline-block">
|
|
|
+ <el-select
|
|
|
+ v-model="selfScheduleForm.status"
|
|
|
+ style="margin-left: 20px"
|
|
|
+ @change="queryWorkList()"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in selfScheduleStatusEnum"
|
|
|
+ :key="item.code"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.code"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ <el-checkbox
|
|
|
+ v-model="selfScheduleForm.myOrigin[0]"
|
|
|
+ style="margin: 0 20px"
|
|
|
+ :true-label="1"
|
|
|
+ :false-label="0"
|
|
|
+ @change="queryWorkList()"
|
|
|
+ >任务排期</el-checkbox>
|
|
|
+ <el-checkbox
|
|
|
+ v-model="selfScheduleForm.myOrigin[1]"
|
|
|
+ :true-label="1"
|
|
|
+ :false-label="0"
|
|
|
+ @change="queryWorkList()"
|
|
|
+ >个人日程</el-checkbox>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <el-table
|
|
|
+ v-if="busyClassName === 'selected'"
|
|
|
+ border
|
|
|
+ :data="selfScheduleBusyTableData"
|
|
|
+ style="width: 100%;font-size: 14px; color:#333B4A;margin-top: 20px"
|
|
|
+ :header-cell-style="{color:'#333B4A',fontSize: '16px',fontWeight:500,background:'rgba(240,242,244,1)'}"
|
|
|
+ >
|
|
|
+ <el-table-column prop="name" label="日程名称" align="center" min-width="138" />
|
|
|
+ <el-table-column prop="startTime" label="日期" align="center" min-width="232">
|
|
|
+ <template v-slot="scope">
|
|
|
+ {{ scope.row.startTime + ' ~ ' + scope.row.endTime }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="originName" label="来源" align="center" min-width="126" />
|
|
|
+ <el-table-column prop="bizName" label="业务线" align="center" min-width="119" />
|
|
|
+ <el-table-column label="使用/工作日/全部" align="center" min-width="181">
|
|
|
+ <template v-slot="scope">
|
|
|
+ {{ scope.row.needDays + '/' + scope.row.legalDays + '/' + scope.row.allDays }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="是否同步团队日程" align="center" min-width="156">
|
|
|
+ <template v-slot="scope">
|
|
|
+ {{ scope.row.syncTeam? '是':'否' }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" min-width="156" align="center">
|
|
|
+ <template v-slot="scope">
|
|
|
+ <div v-if="scope.row.originName === '个人日程'">
|
|
|
+ <el-button size="small" @click="openUpdateSelfScheduleDialog(scope.row)">编辑</el-button>
|
|
|
+ <el-button size="small" @click="openDeleteSelfScheduleDialog(scope.row)">删除</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <el-table
|
|
|
+ v-else
|
|
|
+ border
|
|
|
+ :data="selfScheduleIdleTableData"
|
|
|
+ style="width: 100%;font-size: 14px; color:#333B4A;margin-top: 20px"
|
|
|
+ :header-cell-style="{color:'#333B4A',fontSize: '16px',fontWeight:500,background:'rgba(240,242,244,1)',textAlign: 'center'}"
|
|
|
+ >
|
|
|
+ <el-table-column prop="name" label="日程名称" align="center" min-width="30" />
|
|
|
+ <el-table-column prop="startTime" label="日期" align="center" min-width="30">
|
|
|
+ <template v-slot="scope">
|
|
|
+ {{ scope.row.startTime + ' ~ ' + scope.row.endTime }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="needDays" label="使用/工作日/全部" align="center" min-width="30">
|
|
|
+ <template v-slot="scope">
|
|
|
+ {{ scope.row.needDays + '/' + scope.row.legalDays + '/' + scope.row.allDays }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <div align="right">
|
|
|
+ <el-pagination
|
|
|
+ background
|
|
|
+ layout="total, prev, pager, next, jumper"
|
|
|
+ :current-page="selfScheduleForm.curIndex"
|
|
|
+ :page-size="selfScheduleForm.pageSize"
|
|
|
+ :page-sizes="[15,30,45,selfScheduleListTotal]"
|
|
|
+ :total="selfScheduleListTotal"
|
|
|
+ @size-change="handleSizeChange"
|
|
|
+ @current-change="handleCurrentChange"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
+ </el-dialog>
|
|
|
+ <calendar-dialog
|
|
|
+ :title="'编辑日程'"
|
|
|
+ :visible="updateSelfScheduleDialog.visible"
|
|
|
+ :data="updateSelfScheduleDialog.data"
|
|
|
+ @cancel="updateSelfScheduleDialog.visible = false"
|
|
|
+ @confirm="updateSelfScheduleDialog.visible = false;queryWorkList()"
|
|
|
+ />
|
|
|
+ <calendar-dialog
|
|
|
+ :title="'新建日程'"
|
|
|
+ :visible="createSelfScheduleDialog.visible"
|
|
|
+ :data="createSelfScheduleDialog.data"
|
|
|
+ @cancel="createSelfScheduleDialog.visible = false"
|
|
|
+ @confirm="createSelfScheduleDialog.visible = false;queryWorkList()"
|
|
|
+ />
|
|
|
+ <delete-dialog
|
|
|
+ :content="'是否删除当前日程'"
|
|
|
+ :visible="deleteSelfScheduleDialog.visible"
|
|
|
+ @cancel="deleteSelfScheduleDialog.visible = false"
|
|
|
+ @confirm="deleteSelfSchedule()"
|
|
|
+ />
|
|
|
+ </el-container>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import workbenchApi from '@/api/workbench.js'
|
|
|
+import MyFullCalendar from './myFullCalendar'
|
|
|
+import dayjs from 'dayjs'
|
|
|
+import CalendarDialog from './calendarFormDialog'
|
|
|
+import DeleteDialog from '@/components/dialog/delete.vue'
|
|
|
+
|
|
|
+export default {
|
|
|
+ components: {
|
|
|
+ MyFullCalendar,
|
|
|
+ CalendarDialog,
|
|
|
+ DeleteDialog
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ calendarEvents: [
|
|
|
+ // initial event data
|
|
|
+ { title: 'Event Now', start: new Date(), end: new Date().setDate(16) }
|
|
|
+ ],
|
|
|
+ deleteDialogVisible: false,
|
|
|
+ createSelfScheduleDialog: {
|
|
|
+ visible: false,
|
|
|
+ data: null
|
|
|
+ },
|
|
|
+ updateSelfScheduleDialog: {
|
|
|
+ visible: false,
|
|
|
+ data: null
|
|
|
+ },
|
|
|
+ deleteSelfScheduleDialog: {
|
|
|
+ visible: false,
|
|
|
+ data: null
|
|
|
+ },
|
|
|
+ selfScheduleStatusEnum: [
|
|
|
+ { name: '进行中', code: 0 },
|
|
|
+ { name: '未开始', code: 1 },
|
|
|
+ { name: '过去的', code: 2 }
|
|
|
+ ],
|
|
|
+ selfScheduleListTotal: 10,
|
|
|
+ selfScheduleForm: {
|
|
|
+ status: 0,
|
|
|
+ myOrigin: [1, 1],
|
|
|
+ origin: [0, 1],
|
|
|
+ syncTeam: 1,
|
|
|
+ curIndex: 1,
|
|
|
+ pageSize: 5
|
|
|
+ },
|
|
|
+ selfScheduleBusyTableData: [],
|
|
|
+ selfScheduleIdleTableData: [],
|
|
|
+ busyClassName: 'selected',
|
|
|
+ idleClassName: 'idle',
|
|
|
+ timeSelectVal: [new Date(), dayjs(new Date()).add(29, 'day')],
|
|
|
+ tabsActiveName: '1',
|
|
|
+ teamInfoShow: false,
|
|
|
+ teamAndMemberEnum: {},
|
|
|
+ teamAndMemberMap: {},
|
|
|
+ teamInfo: null,
|
|
|
+ userInfo: {},
|
|
|
+ username: localStorage.getItem('username'),
|
|
|
+ realname: localStorage.getItem('realname'),
|
|
|
+ calendarDialogVisible: false,
|
|
|
+ pickerOptions: {
|
|
|
+ disabledDate(time) {
|
|
|
+ return time.getTime() < Date.now() - 24 * 60 * 60 * 1000
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.init()
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ init() {
|
|
|
+ this.showTeamAndMemberEnum()
|
|
|
+ .then(res => {
|
|
|
+ this.queryTeamInfoList(this.username)
|
|
|
+ })
|
|
|
+
|
|
|
+ this.queryWorkList()
|
|
|
+ },
|
|
|
+ eventDrop(info) {
|
|
|
+ const form = {
|
|
|
+ id: info.event.id,
|
|
|
+ startTime: info.event.start,
|
|
|
+ endTime: info.event.end
|
|
|
+ }
|
|
|
+ workbenchApi.updateSelfSchedule(form)
|
|
|
+ },
|
|
|
+ dateClick(arg) {
|
|
|
+ // this.createSelfScheduleDialog.data = arg
|
|
|
+ // this.createSelfScheduleDialog.visible = true
|
|
|
+ },
|
|
|
+ openUpdateSelfScheduleDialog(val) {
|
|
|
+ const form = JSON.parse(JSON.stringify(val))
|
|
|
+ form.startTime = dayjs(form.startTime).toDate()
|
|
|
+ form.endTime = dayjs(form.endTime).toDate()
|
|
|
+ form.time = [form.startTime, form.endTime]
|
|
|
+ if (form.bizId !== null) {
|
|
|
+ form.isJoin = 1
|
|
|
+ } else {
|
|
|
+ form.isJoin = 0
|
|
|
+ }
|
|
|
+ this.updateSelfScheduleDialog.data = form
|
|
|
+ this.updateSelfScheduleDialog.visible = true
|
|
|
+ },
|
|
|
+ openDeleteSelfScheduleDialog(val) {
|
|
|
+ this.deleteSelfScheduleDialog.data = val
|
|
|
+ this.deleteSelfScheduleDialog.visible = true
|
|
|
+ },
|
|
|
+ select(selectionInfo) {
|
|
|
+ this.createSelfScheduleDialog.data = selectionInfo
|
|
|
+ this.createSelfScheduleDialog.visible = true
|
|
|
+ },
|
|
|
+ // 删除日程
|
|
|
+ deleteSelfSchedule() {
|
|
|
+ workbenchApi.deleteSelfSchedule(this.deleteSelfScheduleDialog.data.id)
|
|
|
+ .then(res => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.deleteSelfScheduleDialog.visible = false
|
|
|
+ this.queryWorkList()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 获取个人空闲日程列表
|
|
|
+ queryIdleList() {
|
|
|
+ workbenchApi
|
|
|
+ .queryIdleList({
|
|
|
+ timeInfo: {
|
|
|
+ startTime: dayjs(this.timeSelectVal[0]).format('YYYY.MM.DD'),
|
|
|
+ endTime: dayjs(this.timeSelectVal[1]).format('YYYY.MM.DD')
|
|
|
+ },
|
|
|
+ curIndex: this.selfScheduleForm.curIndex,
|
|
|
+ pageSize: this.selfScheduleForm.pageSize
|
|
|
+ })
|
|
|
+ .then(res => {
|
|
|
+ this.selfScheduleIdleTableData = res.data.list
|
|
|
+ this.selfScheduleListTotal = res.data.total
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 获取个人工作日程列表
|
|
|
+ queryWorkList() {
|
|
|
+ if (this.selfScheduleForm.myOrigin[0] && this.selfScheduleForm.myOrigin[1]) {
|
|
|
+ this.selfScheduleForm.origin = [0, 1]
|
|
|
+ } else if (this.selfScheduleForm.myOrigin[0]) {
|
|
|
+ this.selfScheduleForm.origin = [0]
|
|
|
+ } else if (this.selfScheduleForm.myOrigin[1]) {
|
|
|
+ this.selfScheduleForm.origin = [1]
|
|
|
+ }
|
|
|
+ workbenchApi.queryWorkList(this.selfScheduleForm).then(res => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.selfScheduleBusyTableData = res.data.list
|
|
|
+ this.selfScheduleListTotal = res.data.total
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ queryWorkListByTime(view) {
|
|
|
+ workbenchApi.queryWorkListByTime({ startTime: dayjs(view.activeStart).format('YYYY.MM.DD'), endTime: dayjs(view.activeEnd).format('YYYY.MM.DD') }).then(res => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.calendarEvents = []
|
|
|
+ for (const i in res.data) {
|
|
|
+ const item = {
|
|
|
+ id: res.data[i].id,
|
|
|
+ title: res.data[i].name,
|
|
|
+ start: dayjs(res.data[i].startTime).toDate(),
|
|
|
+ end: dayjs(res.data[i].endTime).toDate()
|
|
|
+ }
|
|
|
+ this.calendarEvents.push(item)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ handleSizeChange(val) {
|
|
|
+ this.selfScheduleForm.pageSize = val
|
|
|
+ if (this.busyClassName === 'selected') {
|
|
|
+ this.queryWorkList()
|
|
|
+ } else {
|
|
|
+ this.queryIdleList()
|
|
|
+ }
|
|
|
+ },
|
|
|
+ handleCurrentChange(val) {
|
|
|
+ this.selfScheduleForm.curIndex = val
|
|
|
+ if (this.busyClassName === 'selected') {
|
|
|
+ this.queryWorkList()
|
|
|
+ } else {
|
|
|
+ this.queryIdleList()
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 标签页切换
|
|
|
+ handleTabsClick() {},
|
|
|
+ // 获取角色信息枚举类
|
|
|
+ showTeamAndMemberEnum() {
|
|
|
+ return workbenchApi.showTeamAndMemberEnum().then(res => {
|
|
|
+ this.teamAndMemberEnum = res.data
|
|
|
+ if (this.teamAndMemberEnum) {
|
|
|
+ for (const i in this.teamAndMemberEnum) {
|
|
|
+ this.teamAndMemberMap[i] = {}
|
|
|
+ if (this.teamAndMemberEnum[i]) {
|
|
|
+ for (const j in this.teamAndMemberEnum[i]) {
|
|
|
+ this.teamAndMemberMap[i][
|
|
|
+ this.teamAndMemberEnum[i][j].code
|
|
|
+ ] = this.teamAndMemberEnum[i][j].msg
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return res
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 获取用户团队列表
|
|
|
+ queryTeamInfoList(username) {
|
|
|
+ const data = { memberIDAP: username, curIndex: 1, pageSize: 2 }
|
|
|
+ workbenchApi.queryTeamInfoList(data).then(res => {
|
|
|
+ if (res.data) {
|
|
|
+ this.teamInfo = res.data.list
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getUserRoleInTeam(username, teamInfoItem) {
|
|
|
+ const data = []
|
|
|
+ for (const i in teamInfoItem.teamAttribute) {
|
|
|
+ data.push(
|
|
|
+ this.teamAndMemberMap.teamRoleEnum[teamInfoItem.teamAttribute[i]]
|
|
|
+ )
|
|
|
+ }
|
|
|
+ return data.join('、')
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.header .realname {
|
|
|
+ font-size: 22px;
|
|
|
+ font-weight: 500;
|
|
|
+ color: rgba(51, 59, 74, 1);
|
|
|
+ line-height: 35px;
|
|
|
+ margin-bottom: 20px;
|
|
|
+}
|
|
|
+.header .teamInfo {
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 400;
|
|
|
+ color: rgba(51, 51, 51, 1);
|
|
|
+ line-height: 20px;
|
|
|
+}
|
|
|
+.header .more {
|
|
|
+ font-weight: 400;
|
|
|
+ color: rgba(155, 155, 155, 1);
|
|
|
+}
|
|
|
+.list-view-header button {
|
|
|
+ background-color: #fff;
|
|
|
+ color: #6f7c93;
|
|
|
+ border: 0.5px solid #bfc6dc;
|
|
|
+ width: 50px;
|
|
|
+ height: 32px;
|
|
|
+}
|
|
|
+.list-view-header .selected,
|
|
|
+button:hover {
|
|
|
+ background-color: #409eff;
|
|
|
+ color: #fff;
|
|
|
+ border: 0.5px solid #409eff;
|
|
|
+}
|
|
|
+</style>
|
|
|
+
|
|
|
+<style>
|
|
|
+.workbench_penson button {
|
|
|
+ outline: none !important;
|
|
|
+ outline-color: transparent;
|
|
|
+}
|
|
|
+.list-view-header .el-date-editor {
|
|
|
+ padding-top: 0;
|
|
|
+ padding-bottom: 0;
|
|
|
+ height: 35px;
|
|
|
+ width: 240px;
|
|
|
+}
|
|
|
+.list-view-header .el-date-editor input {
|
|
|
+ height: 32px;
|
|
|
+ width: 90px;
|
|
|
+}
|
|
|
+.list-view-header .el-date-editor .el-range__close-icon {
|
|
|
+ display: none;
|
|
|
+}
|
|
|
+.list-view-header .el-select .el-input__inner {
|
|
|
+ height: 34px;
|
|
|
+}
|
|
|
+.list-view-header .el-select .el-input__suffix-inner {
|
|
|
+ display: inline-block;
|
|
|
+ position: relative;
|
|
|
+ margin-top: -2px;
|
|
|
+}
|
|
|
+.workbench_fullscreen_dialog .el-tabs .el-tabs__nav-scroll {
|
|
|
+ padding: 0 44%;
|
|
|
+}
|
|
|
+.workbench_fullscreen_dialog .el-tabs .el-tabs__nav-wrap::after {
|
|
|
+ background-color: transparent;
|
|
|
+}
|
|
|
+</style>
|
|
|
+
|
|
|
+// 布局
|
|
|
+<style scoped>
|
|
|
+.workbench_penson {
|
|
|
+ background-color: #f2f3f6;
|
|
|
+ padding: 10px;
|
|
|
+}
|
|
|
+.workbench_penson .layout_main,
|
|
|
+.layout_aside {
|
|
|
+ border-radius: 4px;
|
|
|
+ background-color: #ffffff;
|
|
|
+}
|
|
|
+.middle .layout_aside {
|
|
|
+ padding: 20px 30px;
|
|
|
+ height: 400px;
|
|
|
+}
|
|
|
+</style>
|
|
|
+
|
|
|
+// 公共部分
|
|
|
+<style scoped>
|
|
|
+.module_title {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 20px;
|
|
|
+}
|
|
|
+.module_title__sign {
|
|
|
+ width: 4px;
|
|
|
+ height: 15px;
|
|
|
+ background: #409eff;
|
|
|
+ border-radius: 1px;
|
|
|
+}
|
|
|
+.module_title__caption {
|
|
|
+ width: 83px;
|
|
|
+ height: 18px;
|
|
|
+ font-size: 16px;
|
|
|
+ font-family: MicrosoftYaHei;
|
|
|
+ color: rgba(51, 59, 74, 1);
|
|
|
+ margin-left: 6px;
|
|
|
+ font-weight: 500;
|
|
|
+}
|
|
|
+</style>
|