From 7f70584621c77c4111f3c998beee184120eb4067 Mon Sep 17 00:00:00 2001 From: MrShi <1878285526@qq.com> Date: 星期一, 20 十月 2025 15:56:54 +0800 Subject: [PATCH] 优化 --- admin/src/views/index.vue | 1541 +++++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 1,240 insertions(+), 301 deletions(-) diff --git a/admin/src/views/index.vue b/admin/src/views/index.vue index 81d1978..65464e5 100644 --- a/admin/src/views/index.vue +++ b/admin/src/views/index.vue @@ -1,388 +1,1327 @@ <template> - <div class="home"> - <div class="home_total"> - <div class="home_total_head">鍦ㄥ巶浜哄憳鎬昏</div> - <div class="home_total_list"> - <div class="home_total_list_item a"> - <span>{{head && head.workerCount ? head.workerCount : 0}}</span> - <span>鍐呴儴鍛樺伐</span> + <div class="main_home"> + <!-- <div style="position: fixed;z-index: 99999"><video style="height: 100px;width: 500px" src="rtsp://10.50.250.253:554/openUrl/K2y2vE4" controls></video></div> --> + <div class="home_header"> + <div class="mb10 fs17">涓嬪崍濂斤紝{{ userInfo.realname }}</div> + <div class="fs13"> + 浠婂ぉ鏄� {{ nowDate }} {{ nowWeek }}锛屾杩庤闂櫤鎱х墿娴佸洯鍖哄畨娑堜竴浣撳寲绯荤粺 + </div> + </div> + <div class="main"> + <div class="app_content"> + <div class="static_card"> + <div class="card"> + <div class="header"> + <div class="left"> + <div class="fs15">浠婃棩鍦ㄥ洯浜烘暟(浜�)</div> + <div class="num">{{ headerData.todayInParkUserNum }}</div> + </div> + <img src="@/assets/icons/home_icon1.png" alt="" /> + </div> + <div class="content"> + <div>鍏ュ洯浜烘(浜�)锛歿{ headerData.todayInUserNum }}</div> + <div>鍑哄洯浜烘(浜�)锛歿{ headerData.todayOutUserNum }}</div> + </div> + </div> + <div class="card"> + <div class="header"> + <div class="left"> + <div class="fs15">鍦ㄥ洯璁垮鏁�(浜�)</div> + <div class="num">{{ headerData.inParkVisitUserNum }}</div> + </div> + <img src="@/assets/icons/home_icon2.png" alt="" /> + </div> + <div class="content"> + <div>鍏ュ洯浜烘(浜�)锛歿{ headerData.visitUserNum }}</div> + <div>鍑哄洯浜烘(浜�)锛歿{ headerData.signLevelNum }}</div> + </div> + </div> + <div class="card"> + <div class="header"> + <div class="left"> + <div class="fs15">鍦ㄥ洯闀挎湡鐩稿叧鏂规暟(浜�)</div> + <div class="num">{{ headerData.inParkLwUserNum }}</div> + </div> + <img src="@/assets/icons/home_icon3.png" alt="" /> + </div> + <div class="content"> + <div>鍏ュ洯浜烘(浜�)锛歿{ headerData.lwUserInNum }}</div> + <div>鍑哄洯浜烘(浜�)锛歿{ headerData.lwUserOutNum }}</div> + </div> + </div> + <div class="card"> + <div class="header"> + <div class="left"> + <div class="fs15">浠婃棩鍦ㄥ洯杞﹁締(杈�)</div> + <div class="num">{{ headerData.todayInParkCarNum }}</div> + </div> + <img src="@/assets/icons/home_icon4.png" alt="" /> + </div> + <div class="content"> + <div>鍏ュ洯杞︽(杈�)锛歿{ headerData.todayInCarNum }}</div> + <div>鍑哄洯杞︽(杈�)锛歿{ headerData.todayOutCarNum }}</div> + </div> + </div> </div> - <div class="home_total_list_item b"> - <span>{{head && head.visitorCount ? head.visitorCount : 0}}</span> - <span>璁垮</span> + <div class="funcs"> + <div class="home_title">甯哥敤鍔熻兘</div> + <div class="list"> + <div v-for="item in funcList" @click="funcClick(item)" :key="item.name" class="item"> + <img class="mb10" :src="item.url" alt="" /> + <div>{{ item.name }}</div> + </div> + </div> </div> - <div class="home_total_list_item c"> - <span>{{head && head.lwCount ? head.lwCount : 0}}</span> - <span>鍔冲姟浜哄憳</span> + <div class="static_wrap"> + <div class="df mb10"> + <div class="wrap static1"> + <div class="header"> + <div class="home_title">鍦ㄥ満浜哄憳鍗犳瘮</div> + <!-- <div class="df_ac more"> + 鏇村<i class="el-icon-arrow-right"></i> + </div> --> + </div> + <div class="content"> + <div class="echart_wrap"> + <div class="pie_text"> + <div class="fs13">鎬绘暟</div> + <div class="fs15"><strong>{{ headerData.todayInParkUserNum }}</strong></div> + </div> + <div class="echart" id="echart1"></div> + </div> + <div class="list"> + <div class="item" v-for="item, i in manningRatio" :key="i"> + <div :style="{ background: colors[i] }" class="icon"></div> + <div class="text">{{ item.name }}</div> + <div class="num">{{ item.value }}</div> + </div> + </div> + </div> + </div> + <div class="wrap static2"> + <div class="header"> +<!-- <div class="home_title">闀挎湡鐩稿叧鏂瑰垎甯�</div>--> + <el-radio-group v-model="tabPosition" @change="changeType"> + <el-radio-button label="right">鍐呴儴浜哄憳鍒嗗竷</el-radio-button> + <el-radio-button label="top">闀挎湡鐩稿叧鏂瑰垎甯�</el-radio-button> + </el-radio-group> + <!-- <div class="df_ac more"> + 鏇村<i class="el-icon-arrow-right"></i> + </div> --> + </div> + <template v-if="tabPosition==='right'" > <div class="echart" id="echart2"></div></template> + <template v-if="tabPosition==='top'" > <div class="echart" id="echart21"></div></template> + </div> + </div> + <div class="df"> + <div class="wrap static3"> + <div class="header"> + <div class="home_title">7鏃ヨ瀹㈢粺璁�</div> + <!-- <div class="df_ac more"> + 鏇村<i class="el-icon-arrow-right"></i> + </div> --> + </div> + <div class="echart" id="echart3"></div> + </div> + <div class="wrap static4"> + <div class="header"> + <div class="home_title">7鏃ヨ溅杈嗙粺璁�</div> + <!-- <div class="df_ac more"> + 鏇村<i class="el-icon-arrow-right"></i> + </div> --> + </div> + <div class="echart" id="echart4"></div> + </div> + </div> </div> - <div class="home_total_list_item d"> - <span>{{head && head.presenceCarCount ? head.presenceCarCount : 0}}</span> - <span>鍦ㄥ満杞﹁締</span> + </div> + <div class="app_side"> + <div class="task"> + <div class="header df_sb"> + <div class="home_title df"> + <span >寰呭姙浜嬮」</span> + <span class="num" v-if="taskTotal">{{ taskTotal }}</span> + </div> + <div class="df_ac more" @click="jumpPage('/task/index')"> + 鏇村<i class="el-icon-arrow-right"></i> + </div> + </div> + <div class="list"> + <div class="item" v-for="item in taskList" :key="item.id"> + <div class="content"> + <div class="title">{{ item.title }}</div> + <div class="time">{{ item.createDate }}</div> + </div> + <div class="btn" v-permissions="['business:staging:query']" @click="handleDetail(item)">澶勭悊</div> + </div> + <div v-if="taskList.length == 0" class="empty"> + <img src="@/assets/images/default_homeimg.png" alt=""> + </div> + </div> </div> - <div class="home_total_list_item e"> - <span>{{head && head.longCarCount ? head.longCarCount : 0}}</span> - <span>闀挎湡杞﹁締</span> - </div> - <div class="home_total_list_item f"> - <span>{{head && head.visitorCarCount ? head.visitorCarCount : 0}}</span> - <span>棰勭害杞﹁締</span> - </div> - <div class="home_total_list_item g"> - <span>{{head && head.supplierCount ? head.supplierCount : 0}}</span> - <span>渚涘簲鍟�</span> + <div class="warnning"> + <div class="header df_sb"> + <div class="home_title df"> + <span>瓒呮椂棰勮</span> + <span class="num" v-if="warningTotal">{{ warningTotal }}</span> + </div> + <div class="df_ac more" @click="jumpPage('/business/strandedPersonnel')"> + 鏇村<i class="el-icon-arrow-right"></i> + </div> + </div> + <div class="list"> + <div class="item" v-for="item in warningList" :key="item.id"> + <div class="name_wrap df_sb"> + <div class="name">{{ item.name }}</div> + <div class="identity">璁垮</div> + </div> + <div class="line">鑱旂郴鐢佃瘽锛歿{ item.phone }}</div> + <div class="line">璁垮鍏徃锛歿{ item.companyName }}</div> + <div class="auth df_sb"> + <div class="time">鎺堟潈鏈熼檺锛歿{ item.endtime }}</div> + <div class="btn" @click="departure(item.id)">绂诲満</div> + </div> + </div> + </div> + <div v-if="warningList.length == 0" class="empty"> + <img src="@/assets/images/default_homeimg.png" alt=""> + </div> </div> </div> </div> - <div class="home_charts"> - <div class="home_charts_item"> - <div class="home_charts_item_label">鍦ㄥ巶浜哄憳鍗犳瘮</div> - <div class="home_charts_item_charts" id="chart1"></div> - </div> - <div class="home_charts_item"> - <div class="home_charts_item_label">鍔冲姟浜哄憳鍒嗗竷鎬昏</div> - <div class="home_charts_item_charts" id="chart2"></div> - </div> - </div> - <div class="home_table"> - <div class="home_table_head">瓒呮椂棰勮浜哄憳({{total}})</div> - <div class="home_table_box"> - <el-table - :data="list" - :header-cell-style="{background: '#dcdde2', color: 'rgb(51, 51, 51)'}" - border - style="width: 100%"> - <el-table-column - prop="name" - label="璁垮濮撳悕"> - </el-table-column> - <el-table-column - prop="phone" - label="璁垮鐢佃瘽"> - </el-table-column> - <el-table-column - prop="companyName" - label="璁垮鍏徃"> - </el-table-column> - <el-table-column - label="浜哄憳绫诲瀷"> - <template slot-scope="{row}"> - <span v-if="row.type === 0">鍔冲姟璁垮</span> - <span v-if="row.type === 1">鏅�氳瀹�</span> - <span v-if="row.type === 2">鍐呴儴浜哄憳</span> - </template> - </el-table-column> - <el-table-column - prop="outDate" - label="鎺堟潈鍒版湡鏃堕棿"> - </el-table-column> - <el-table-column - label="鐘舵��"> - <template slot-scope="{row}"> - <span v-if="row.outStatus === 0">鏈秴鏃�</span> - <span style="color: red;" v-if="row.outStatus === 1">宸茶秴鏃�</span> - <span v-if="row.outStatus === 2">鍗冲皢瓒呮椂</span> - </template> - </el-table-column> - <el-table-column - prop="address" - label="澶勭悊" - width="80"> - <template slot-scope="scope"> - <el-button type="text" @click="departure(scope.row.id)">绂诲満</el-button> - </template> - </el-table-column> - </el-table> - <el-pagination - style="margin-top: 20px;" - @current-change="handleCurrentChange" - :current-page="page" - :page-size="10" - layout="total, prev, pager, next, jumper" - :total="total"> - </el-pagination> - </div> - </div> + <TaskDetail v-if="isShowDetail" ref="DetailRef" @success="SubSuccess('isShowDetail')" /> + <VisReportDetail v-if="isShowReport" ref="VisReportDetailRef" @success="SubSuccess('isShowReport')" /> + <DangetDetail v-if="isShowDanger" ref="DangetDetailRef" @success="SubSuccess('isShowDanger')" /> + <DriverDetail v-if="isShowDriver" ref="DriverDetailRef" @success="SubSuccess('isShowDriver')" /> + <!-- 鐢ㄨ溅鐢宠 --> + <OperaCarUseBookWindow ref="OperaDetailsWindow" @success="getTaskList" /> + <!-- 闅愭偅 --> + <OperaHiddenDangerWindow ref="OperaHiddenDangerWindow" @success="getTaskList" /> + <!-- 棰勭害璇︽儏 --> + <OperaVisitsDesWindow ref="OperaVisitsDesWindow" /> </div> </template> <script> +import dayjs from 'dayjs' import * as echarts from 'echarts' -import { body, head, timeoutPage, level } from '@/api/business/staging' +import { weeks } from '@/utils/config' +import { + getWorkbenchData, + getAppHeaderNav, syncHkNotice +} from '@/api' +import { level } from '@/api/business/visits' +import TaskDetail from '@/views/task/visSubDetail.vue' +import VisReportDetail from '@/views/task/visReportDetail.vue' +import DangetDetail from '@/views/task/dangetDetail.vue' +import DriverDetail from '@/views/task/driverDetail.vue' +import OperaCarUseBookWindow from '@/components/business/OperaCarUseBookWindow' +import OperaHiddenDangerWindow from '@/components/business/OperaHiddenDangerWindow' +import OperaVisitsDesWindow from '@/components/business/OperaVisitsDesWindow' +const colors = ['#52a4f7', '#7678f7', '#5fc6d5'] export default { - name: 'Index', + components: { + TaskDetail, + VisReportDetail, + DangetDetail, + DriverDetail, + OperaCarUseBookWindow, + OperaHiddenDangerWindow, + OperaVisitsDesWindow + }, data () { return { - head: null, - list: [], - total: 0, - data1: [], - data2: [[],[]], - page: 1 + tabPosition: 'right', + colors, + nowDate: '', + nowWeek: '', + headerData: {}, + staticData: {}, + manningRatio: [], + taskList: [], + taskTotal: 0, + warningList: [], + warningTotal: 0, + funcList: [ + { name: '璁垮鎶ュ', path: '', url: require('@/assets/icons/home_func1.png'), path: '/business/reportRecord' }, + { name: '闅愭偅闅忔墜鎷�', path: '', url: require('@/assets/icons/home_func2.png'), path: '/operation/danger/record' }, + { name: '棰勭害浼氳瀹�', path: '', url: require('@/assets/icons/home_func3.png'), path: '/meeting/bookings' }, + { name: '鍏姟杞﹂绾�', path: '', url: require('@/assets/icons/home_func5.png'), path: '/operation/serviceCar/apprRecord' }, + { name: '鑰冨嫟宸ヤ綔鍙�', path: '', url: require('@/assets/icons/home_func4.png') }, + { name: '椋熷爞娑堣垂', path: '', url: require('@/assets/icons/8.png') } + ], + isShowDetail: false, + isShowReport: false, + isShowDanger: false, + isShowDriver: false + } + }, + computed: { + userInfo () { + return this.$store.state.userInfo } }, created () { - this.getHeader() - this.getData() + this.updateDate() + setInterval(() => { + this.updateDate() + }, 1000 * 60 * 60) }, mounted () { - // this.getcharts2() + this.initData() }, methods: { - departure(id) { - this.$confirm('纭畾绂诲満鍚�, 鏄惁缁х画?', '鎻愮ず', { + changeType (e) { + console.log(e) + this.initEchart2() + this.initEchart21() + }, + getNoticeList () { + syncHkNotice().then(res => { + + }) + }, + handleTest (row) { + getAppHeaderNav(5).then(res => { + if (res == undefined || res == null) { + return + } + console.log('鍗曠偣鐧诲綍鍦板潃------', res) + + const myWindow = top.window.open(res) + console.log('myWindow---', myWindow) + setTimeout(() => { + const params = { + componentId: 'dfe', + componentMenuId: 'process_apply', + callback: { + method: 'dealTlncMsg', + argument: { + msgId: '98c256b9-aaff-11ef-8347-fa163ee2c57c', + moduleId: 'dfeFlowTodoModuleId', + msgTitle: '璇峰強鏃跺鐞�13856591439鍙戣捣鐨勮鍋囩敵璇�', + msgStatus: '0', + msgCreateTime: '浠婂ぉ 15:33', + msgCreateTimeIso: '2024-11-25T15:33:42.000+08:00', + serverTime: 1732531014591, + menuCode: 'process_apply', + msgStatusStr: '寰呭鐞�', + comId: 'dfe', + userId: '13856591439', + extendNoShow: '{"processInstanceId":"98a57fe0-aaff-11ef-8347-fa163ee2c57c","processId":"process_dabcfdd39f1b6f46d36a9f4ff6ce1080","param":{"sourceType":"todo","modelCode":"tb_leave_dfe_for_dfe_runtime","processNodeId":"UserTask_dde7d83377343a2d5fa1f60c23b023ef","taskId":"98c256b9-aaff-11ef-8347-fa163ee2c57c"},"process.param.appId":"32ca8770-6f85-11ec-b5a3-991864da52a6","appId":"32ca8770-6f85-11ec-b5a3-991864da52a6","name":"璇峰亣鐢宠","taskId":"98c256b9-aaff-11ef-8347-fa163ee2c57c","taskNodeId":"UserTask_dde7d83377343a2d5fa1f60c23b023ef","url":"/dfe-form/process/tlnc/apply"}', + targetComId: 'dfe', + moduleName: '娴佺▼寰呭姙', + tid: '99cad778-aaff-11ef-9dbf-ff08ba71965c', + msgEndTime: null, + msgEndTimeIso: '', + picUrl: '', + extendJson: '{"key1":"璇峰強鏃跺鐞嗛檲楦块鍙戣捣鐨勮鍋囩敵璇�"}', + extendParam: null, + extendCascade: null, + createUser: '13856591439', + webCascadeUrl: null, + h5CascadeUrl: null, + cascadeTodoOpenType: null, + cascadeSourceConfigId: null, + h5Url: '/h5/pages/form-page/form-page?returnPath=-1&appId=32ca8770-6f85-11ec-b5a3-991864da52a6&taskId=98c256b9-aaff-11ef-8347-fa163ee2c57c&processNodeId=UserTask_dde7d83377343a2d5fa1f60c23b023ef&modelCode=tb_leave_dfe_for_dfe_runtime&type=flowHandle&component=form-apply&_sn=true', + segmentId: 'dfe-form', + lastUsers: '闄堥缚椋�', + currentUsers: '闄堥缚椋�', + todoTypeCode: 'dfe@@tlnc_placeholder_tlnc@@dfeFlowTodoModuleId', + currentUserIds: '13856591439', + lastUserIds: '13856591439', + msgDesc: null, + widgetUrl: null, + detailType: null, + widgetWidth: null, + widgetHeight: null, + userIdList: null, + statusName: null, + arriveTime: null, + stayTime: null, + todoType: null, + cascadePort: null, + openMode: null + } + }, + msgType: 'tlnc' + } + const argus = JSON.parse(row.param5) + console.log('row.param5 Obj---', argus) + // const argus = JSON.stringify(params) + myWindow.postMessage('{"method":"goToApp","argument":' + row.param5 + '}', '*') + }, 8000) + }) + }, + SubSuccess (str) { + this[str] = false + this.getTaskList() + }, + funcClick (item) { + if (item.name == '鑰冨嫟宸ヤ綔鍙�') { + getAppHeaderNav(4).then(res => { + window.open(res, '_blank') + }) + return + } + if (item.name == '椋熷爞娑堣垂') { + getAppHeaderNav(6).then(res => { + window.open(res, '_blank') + }) + return + } + this.$router.push(item.path) + }, + updateDate () { + this.nowDate = dayjs().format('YYYY骞碝鏈圖鏃�') + this.nowWeek = weeks[new Date().getDay()] + }, + initData () { + this.getWorkHead() + this.getWorkBody() + this.getTaskList() + this.getWarningList() + }, + getWarningList () { + getWorkbenchData({ queryType: 4 }).then(res => { + this.warningList = res.timeOutVisitList || [] + this.warningTotal = res.timeOutVisitNum || 0 + }) + }, + getTaskList () { + getWorkbenchData({ queryType: 3 }).then(res => { + this.taskList = res.noticesList || [] + this.taskTotal = res.noticesNum || 0 + }) + }, + getWorkBody () { + getWorkbenchData({ queryType: 2 }).then(res => { + console.log(res) + this.staticData = res || {} + this.initEchart2() + this.initEchart21() + this.initEchart3() + this.initEchart4() + }) + }, + getWorkHead () { + getWorkbenchData({ queryType: 1 }).then(res => { + this.headerData = res || {} + const arr = [] + arr.push({ name: '璁垮', value: this.headerData.inParkVisitUserNum }) + arr.push({ name: '鍐呴儴鍛樺伐', value: this.headerData.todayInParkUserNum - this.headerData.inParkLwUserNum - this.headerData.inParkVisitUserNum - this.headerData.inParkDriverUserNum }) + arr.push({ name: '闀挎湡鐩稿叧鏂�', value: this.headerData.inParkLwUserNum }) + arr.push({ name: '璐ц繍鍙告満', value: this.headerData.inParkDriverUserNum }) + arr.sort((a, b) => b.value - a.value) + this.manningRatio = arr + this.initEchart1() + }) + }, + jumpPage (page) { + this.$router.push(page) + }, + departure (id) { + this.$confirm('纭畾绂诲巶鍚�, 鏄惁缁х画?', '鎻愮ず', { confirmButtonText: '纭畾', cancelButtonText: '鍙栨秷', type: 'warning' }).then(() => { level(id) .then(res => { - this.page = 1 - this.getData() + this.getWarningList() }) }).catch(() => { - }); - }, - getData() { - timeoutPage({ - capacity: 10, - page: this.page, - model: {} - }).then(res => { - this.list = res.records - this.total = res.total }) }, - getHeader() { - head().then(res => { - this.head = res - }) - body().then(res => { - this.data1 = res.retentionUsers.map(item => { - let name = '' - if (item.memberType === 0) { - name = '鍔冲姟璁垮' - } else if (item.memberType === 1) { - name = '鏅�氳瀹�' - } else if (item.memberType === 2) { - name = '鍐呴儴鍛樺伐' - } - return { - value: item.memberCount, - name - } + handleDetail (row) { + if (row.type === 7) { + this.handleTest(row) + return + } + if (row.objType === 2) { + this.$refs.OperaDetailsWindow.open('鍏姟杞︾敵璇疯鎯�', { ...row, id: row.objId }) + return + } + if (row.objType === 1) { + this.isShowReport = true + this.$nextTick(() => { + this.$refs.VisReportDetailRef.id = row.objId + this.$refs.VisReportDetailRef.type = row.objType + this.$refs.VisReportDetailRef.getDetail() + this.$refs.VisReportDetailRef.isShowModal = true }) - let arr1 = res.companyUsers.map(item => item.companyName) - let arr2 = res.companyUsers.map(item => item.memberCount) - if (arr1.length > 0) { - this.data2 = [arr1, arr2] - this.getcharts2() - } - this.getcharts1() - }) + return + } + if (row.objType === 3) { + const obj = { ...row, id: row.objId } + this.$refs.OperaHiddenDangerWindow.open('闅愭偅闅忔墜鎷嶈鎯�', obj) + return + } + if (row.objType === 6) { + const obj = { ...row, id: row.objId } + this.isShowDriver = true + this.$nextTick(() => { + this.$refs.DriverDetailRef.id = row.objId + this.$refs.DriverDetailRef.type = row.objType + this.$refs.DriverDetailRef.getDetail() + this.$refs.DriverDetailRef.isShowModal = true + }) + return + } + if (row.objType === 0) { + this.isShowDetail = true + this.$nextTick(() => { + this.$refs.DetailRef.id = row.objId + this.$refs.DetailRef.type = row.objType + this.$refs.DetailRef.getDetail() + this.$refs.DetailRef.isShowModal = true + }) + } }, - handleCurrentChange (page) { - this.page = page - this.getData() - }, - getcharts1 () { - const myChart = echarts.init(document.getElementById('chart1')) - // 缁樺埗鍥捐〃 - myChart.setOption({ + initEchart1 () { + const myChart = echarts.init(document.getElementById('echart1')) + const that = this + + const option = { tooltip: { trigger: 'item' - }, - grid: { - bottom: '5%', - top: '5%' - }, - legend: { - bottom: '0%', - left: 'center', - icon: 'circle' }, series: [ { type: 'pie', - radius: ['40%', '70%'], + radius: ['42%', '90%'], label: { - formatter: '{b} {d}%' + show: false, + position: 'center' }, - data: this.data1, + color: colors, + labelLine: { + show: false + }, + data: that.manningRatio + // data: [ + // { value: that.headerData.inParkVisitUserNum, name: '璁垮' }, + // { value: that.headerData.todayInParkUserNum - that.headerData.inParkVisitUserNum - that.headerData.inParkLwUserNum, name: '鍐呴儴鍛樺伐' }, + // { value: that.headerData.inParkLwUserNum, name: '闀挎湡鐩稿叧鏂�' } + // ] + } + ] + } + myChart.setOption(option) + window.addEventListener('resize', function () { // 鎵ц + myChart.resize() + }) + }, + initEchart2 () { + console.log('initEchart2') + if (!document.getElementById('echart2')) { + return + } + echarts.dispose(document.getElementById('echart2')) + const myChart = echarts.init(document.getElementById('echart2')) + const that = this + var ydata = that.staticData.internalList.map(i => i.num) + let maxNum = 1 + ydata.forEach((item, index) => { + maxNum = item > maxNum ? item : maxNum + }) + myChart.setOption({ + dataZoom: [ + { + type: 'slider', // 婊戝姩鏉$被鍨� + orient: 'vertical', + left: 'left', + showDetail: false, + start: 0, // 璧峰浣嶇疆锛堢櫨鍒嗘瘮锛� + end: 40, // 缁撴潫浣嶇疆锛堢櫨鍒嗘瘮锛夛紝鎺у埗鍒濆鏄剧ず鑼冨洿 + width: 4, + dataBackground: { + areaStyle: { opacity: 0 }, // 璁剧疆鑳屾櫙閫忔槑 + lineStyle: { opacity: 0 } // 璁剧疆鑳屾櫙閫忔槑 + } + // moveOnMouseWheel: true, + }, + { + type: 'inside', // 鐢ㄤ簬鐩戝惉婊氳疆浜嬩欢 + orient: 'vertical', + start: 0, + end: 40, + showDetail: false, + minSpan: 40, + dataBackground: { + areaStyle: { opacity: 0 } // 璁剧疆鑳屾櫙閫忔槑 + }, + maxSpan: 40, + zoomLock: true // 閿佸畾缂╂斁锛堜粎鍏佽骞崇Щ锛� + // moveOnMouseWheel: true, // 鍚敤婊氳疆骞崇Щ + } + ], + grid: { + top: '4%', + left: '2%', + right: '6%', + bottom: '2%', + containLabel: true + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'line' + } + }, + xAxis: { + type: 'value', + position: 'top', + splitLine: { + show: true, + lineStyle: { + // 杩欓噷杈撳叆绾挎潯鐨勬牱寮� + color: 'rgba(255,255,255,0.14)' + } + }, + axisLabel: { + formatter: function (value) { + const intValue = Math.round(value) + return intValue > 0 ? intValue : '' + } + }, + minInterval: 1, + min: 1 + // max: maxNum + }, + yAxis: { + type: 'category', + inverse: true, + data: that.staticData.internalList.map(i => i.name), + axisLabel: { + interval: 0 + } + }, + series: [ + { + data: ydata, + type: 'bar', + barWidth: 10, itemStyle: { normal: { - color: function (colors) { - var colorList = [ - '#fc8251', - '#5470c6', - '#91cd77' + color: new echarts.graphic.LinearGradient( + 1, 0, 0, 0, + [ + { offset: 0, color: '#56abf8' }, + { offset: 1, color: '#407ff0' } ] - return colorList[colors.dataIndex] - } - } - }, - emphasis: { - itemStyle: { - shadowBlur: 10, - shadowOffsetX: 0, - shadowColor: 'rgba(0, 0, 0, 0.5)' + ) + // barBorderRadius: [0, 10, 10, 0] } } } ] }) + window.addEventListener('resize', function () { // 鎵ц + myChart.resize() + }) }, - getcharts2 () { - const myChart = echarts.init(document.getElementById('chart2')) + initEchart21 () { + console.log('initEchart21',this.staticData.lwList) + if (!document.getElementById('echart21')) { + return + } + echarts.dispose(document.getElementById('echart21')) + const myChart = echarts.init(document.getElementById('echart21')) + const that = this + var le1 = that.staticData.internalList.length + var le2 = that.staticData.lwList.length + const end = Math.round(40 * ((le1>0&& le2>0?le1:1) / (le1>0&& le2>0?le2:1)))+10 myChart.setOption({ - tooltip: { - trigger: 'item' - }, + dataZoom: [ + { + type: 'slider', // 婊戝姩鏉$被鍨� + orient: 'vertical', + left: 'left', + showDetail: false, + start: 0, // 璧峰浣嶇疆锛堢櫨鍒嗘瘮锛� + end: end, // 缁撴潫浣嶇疆锛堢櫨鍒嗘瘮锛夛紝鎺у埗鍒濆鏄剧ず鑼冨洿 + width: 4, + dataBackground: { + areaStyle: { opacity: 0 }, // 璁剧疆鑳屾櫙閫忔槑 + lineStyle: { opacity: 0 } // 璁剧疆鑳屾櫙閫忔槑 + }, + zoomLock: true, // 閿佸畾缂╂斁锛堜粎鍏佽骞崇Щ锛� + moveOnMouseWheel: true + }, + { + type: 'inside', // 鐢ㄤ簬鐩戝惉婊氳疆浜嬩欢 + orient: 'vertical', + start: 0, + end: end, + showDetail: false, + minSpan: end, + dataBackground: { + areaStyle: { opacity: 0 } // 璁剧疆鑳屾櫙閫忔槑 + }, + maxSpan: end, + zoomLock: true, // 閿佸畾缂╂斁锛堜粎鍏佽骞崇Щ锛� + moveOnMouseWheel: true // 鍚敤婊氳疆骞崇Щ + } + ], grid: { - bottom: '5%', - top: '5%' + top: '4%', + left: '2%', + right: '6%', + bottom: '2%', + containLabel: true + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'line' + } }, xAxis: { - max: 'dataMax' + type: 'value', + position: 'top', + splitLine: { + show: true, + lineStyle: { + // 杩欓噷杈撳叆绾挎潯鐨勬牱寮� + color: 'rgba(255,255,255,0.14)' + } + }, + axisLabel: { + formatter: function (value) { + const intValue = Math.round(value) + return intValue > 0 ? intValue : '' + } + }, + minInterval: 1, + min: 1 }, yAxis: { type: 'category', - data: this.data2[0] + inverse: true, + data: that.staticData.lwList.map(i => i.name), + axisLabel: { + interval: 0 + } }, series: [ { - realtimeSort: true, + data: that.staticData.lwList.map(i => i.num), type: 'bar', - data: this.data2[1], + barWidth: 10, itemStyle: { normal: { - color: '#fc8251' + color: new echarts.graphic.LinearGradient( + 1, 0, 0, 0, + [ + { offset: 0, color: '#56abf8' }, + { offset: 1, color: '#407ff0' } + ] + ) + // barBorderRadius: [0, 10, 10, 0] } } } ] + }) + window.addEventListener('resize', function () { // 鎵ц + myChart.resize() + }) + }, + initEchart3 () { + const myChart = echarts.init(document.getElementById('echart3')) + const that = this + myChart.setOption({ + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'line' + }, + formatter: function (params) { + return ` + <div style="background-color: #15323f;margin: -12px;padding: 14px;border: 2px solid rgba(1,217,254,0.5);color: #fff;"> + <div>${params[0].name}</div> + <div style="display: flex;align-items: center;"> + <div style="width: 10px;height: 10px;border-radius: 50%;background-color: #6feef0;"></div> + <span style="margin-left: 6px;">${params[0].value}</span> + <div>浜�</div> + </div> + </div> + ` + } + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: that.staticData.weekVisitList.map(i => i.name) + }, + yAxis: { + type: 'value', + name: '浜烘暟', + nameTextStyle: { + padding: [0, 0, 4, -30] // 鍥涗釜鏁板瓧鍒嗗埆涓轰笂鍙充笅宸︿笌鍘熶綅缃窛绂� + }, + axisLabel: { + formatter: function (value) { + const intValue = Math.round(value) + return intValue > 0 ? intValue : '' + } + }, + minInterval: 1, + min: 1, + splitLine: { + show: true, + lineStyle: { + // 杩欓噷杈撳叆绾挎潯鐨勬牱寮� + color: 'rgba(255,255,255,0.14)' + } + } + }, + grid: { + top: '16%', + left: '2%', + right: '8%', + bottom: '2%', + containLabel: true + }, + series: [ + { + data: that.staticData.weekVisitList.map(i => i.num), + type: 'line', + areaStyle: { + normal: { + color: { + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, + color: '#207FF7' // 0% 澶勭殑棰滆壊 + }, { + offset: 1, + color: 'rgba(255,255,255,.2)' // 100% 澶勭殑棰滆壊 + }], + globalCoord: false // 缂虹渷涓� false + } + } + }, + lineStyle: { // 绾挎潯鏍峰紡 + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, color: '#207FF7' // 0% 澶勭殑棰滆壊 + }, { + offset: 1, color: '#207FF7' // 100% 澶勭殑棰滆壊 + }] + }, + width: 2 // 绾挎潯绮楃粏 + }, + symbol: 'circle', + symbolSize: 10, + itemStyle: { + borderWidth: 1, + borderColor: '#fff', + color: '#207FF7' + }, + smooth: false + } + ] + }) + window.addEventListener('resize', function () { // 鎵ц + myChart.resize() + }) + }, + initEchart4 () { + const myChart = echarts.init(document.getElementById('echart4')) + const that = this + myChart.setOption({ + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'line' + }, + formatter: function (params) { + return ` + <div style="background-color: #15323f;margin: -12px;padding: 14px;border: 2px solid rgba(1,217,254,0.5);color: #fff;"> + <div>${params[0].name}</div> + <div style="display: flex;align-items: center;"> + <div style="width: 10px;height: 10px;border-radius: 50%;background-color: #6feef0;"></div> + <span style="margin-left: 6px;">${params[0].value || 0}</span> + <div>杈�</div> + </div> + </div> + ` + } + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: that.staticData.weekCarList.map(i => i.name) + }, + yAxis: { + type: 'value', + name: '杞﹁締鏁�', + nameTextStyle: { + padding: [0, 0, 4, -30] // 鍥涗釜鏁板瓧鍒嗗埆涓轰笂鍙充笅宸︿笌鍘熶綅缃窛绂� + }, + splitLine: { + show: true, + lineStyle: { + // 杩欓噷杈撳叆绾挎潯鐨勬牱寮� + color: 'rgba(255,255,255,0.14)' + } + }, + axisLabel: { + formatter: function (value) { + const intValue = Math.round(value) + return intValue > 0 ? intValue : '' + } + }, + minInterval: 1, + min: 1 + }, + grid: { + top: '16%', + left: '2%', + right: '8%', + bottom: '4%', + containLabel: true + }, + series: [ + { + data: that.staticData.weekCarList.map(i => i.num), + type: 'line', + areaStyle: { + normal: { + color: { + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, + color: '#42D49D' // 0% 澶勭殑棰滆壊 + }, { + offset: 1, + color: 'rgba(255,255,255,.5)' // 100% 澶勭殑棰滆壊 + }], + globalCoord: false // 缂虹渷涓� false + } + } + }, + lineStyle: { // 绾挎潯鏍峰紡 + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, color: '#42D49D' // 0% 澶勭殑棰滆壊 + }, { + offset: 1, color: '#42D49D' // 100% 澶勭殑棰滆壊 + }] + }, + width: 2 // 绾挎潯绮楃粏 + }, + symbol: 'circle', + symbolSize: 10, + itemStyle: { + borderWidth: 1, + borderColor: '#fff', + color: '#42D49D' // 鎶樼嚎鐐圭殑棰滆壊 + }, + smooth: false + } + ] + }) + window.addEventListener('resize', function () { // 鎵ц + myChart.resize() }) } } } </script> -<style scoped lang="scss"> -@import "@/assets/style/variables.scss"; -.home { - width: 100%; - .home_table { - width: 100%; - padding: 20px; - box-sizing: border-box; - background: #ffffff; - margin-top: 20px; - .home_table_head { - font-size: 16px; - font-weight: 600; - color: black; - } - .home_table_box { - width: 100%; - margin-top: 15px; - } - } - .home_charts { - width: 100%; - margin-top: 20px; - display: flex; - align-items: center; - justify-content: space-between; - .home_charts_item { - padding: 20px; - box-sizing: border-box; - flex: 1; +<style lang="scss" scoped> +div { + box-sizing: border-box; +} + +.home_title { + font-weight: 600; + font-size: 16px; + color: #222222; + line-height: 22px; +} + +.main { + display: flex; + position: relative; + z-index: 99; + + .app_content { + flex: 1; + + .static_card { + height: 187px; + color: #fff; display: flex; - flex-direction: column; - margin-right: 20px; - background: #ffffff; - .home_charts_item_label { - font-size: 16px; - font-weight: 600; - color: black; - } - .home_charts_item_charts { - width: 100%; - height: 300px; - } - &:last-child { - margin: 0 !important; - } - } - } - .home_total { - width: 100%; - background: #ffffff; - margin-top: 20px; - .home_total_head { - width: 100%; - font-size: 16px; - font-weight: 600; - color: black; - padding: 10px 20px; - box-sizing: border-box; - border-bottom: 1px solid #ececec; - } - .home_total_list { - width: 100%; - padding: 20px; - box-sizing: border-box; - display: flex; - align-items: center; - .a { - border-left: 5px solid rgba(129, 211, 248, 1) !important; - } - .b { - border-left: 5px solid rgba(236, 128, 141, 1) !important; - } - .c { - border-left: 5px solid rgba(250, 205, 145, 1) !important; - } - .d { - border-left: 5px solid rgba(245, 154, 35, 1) !important; - } - .e { - border-left: 5px solid rgba(128, 128, 255, 1) !important; - } - .f { - border-left: 5px solid rgba(202, 249, 130, 1) !important; - } - .g { - border-left: 5px solid rgba(194, 128, 255, 1) !important; - } - .home_total_list_item { + justify-content: space-between; + + .card { flex: 1; - display: flex; - align-items: center; - flex-direction: column; - justify-content: center; - height: 80px; - border-radius: 5px; - border: 1px solid #ececec; - margin-right: 15px; - &:last-child { - margin: 0 !important; + height: 187px; + background: linear-gradient(270deg, #29aeff 0%, #207ff7 100%); + box-shadow: 0px 2px 10px 0px rgba(32, 127, 247, 0.4); + border-radius: 8px; + margin-right: 14px; + + &:nth-of-type(2) { + background: linear-gradient(270deg, #8383ff 0%, #6b6eff 100%); } - span { - &:first-child { - font-weight: 500; - font-size: 24px; - color: black; + + &:nth-of-type(3) { + background: linear-gradient(270deg, #42d49d 0%, #12bb8b 100%); + } + + &:nth-of-type(4) { + margin-right: 0; + background: linear-gradient(270deg, #30d3de 0%, #04b7cd 100%); + } + + .header { + height: 103px; + display: flex; + justify-content: space-between; + align-items: center; + padding: 20px 20px 12px; + border-bottom: 1px solid rgba(255, 255, 255, 0.2); + + img { + width: 40px; + height: 40px; } - &:last-child { - font-weight: 400; - font-size: 14px; - color: #666666; - margin-top: 2px; + + .num { + font-weight: 600; + font-size: 30px; + margin-top: 12px; + } + } + + .content { + height: 82px; + display: flex; + flex-direction: column; + justify-content: space-between; + font-size: 13px; + padding: 15px 20px 20px; + } + } + } + + .funcs { + height: 149px; + padding: 20px; + background: #fff; + margin: 10px 0; + + .list { + display: flex; + padding-top: 20px; + + .item { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin-right: 24px; + cursor: pointer; + + img { + width: 44px; + height: 44px; } } } } } + + .app_side { + width: 408px; + margin-left: 10px; + + .task { + background: #fff; + border-radius: 2px; + border: 1px solid #eeeeee; + padding: 20px; + height: 346px; + margin-bottom: 10px; + + .header { + .num { + position: relative; + top: 3px; + height: 16px; + line-height: 16px; + font-size: 12px; + color: #ffffff; + padding: 0 6px; + font-weight: 400; + background: red; + border-radius: 8px; + margin-left: 13px; + } + + .more { + font-size: 13px; + color: #999999; + } + } + + .list { + .item { + display: flex; + align-items: center; + margin-top: 15px; + + .content { + flex: 1; + + .title { + color: #222222; + margin-bottom: 5px; + } + + .time { + color: #999999; + font-size: 12px; + } + } + + .btn { + margin-left: 10px; + width: 58px; + text-align: center; + height: 30px; + line-height: 30px; + background: #ffffff; + border-radius: 2px; + border: 1px solid #207ff7; + font-size: 13px; + color: #207ff7; + cursor: pointer; + } + } + } + } + + .warnning { + background: #fff; + border-radius: 2px; + border: 1px solid #eeeeee; + padding: 20px; + height: 508px; + + .header { + .num { + position: relative; + top: 3px; + height: 16px; + line-height: 16px; + font-size: 12px; + color: #ffffff; + padding: 0 6px; + font-weight: 400; + background: red; + border-radius: 8px; + margin-left: 13px; + } + + .more { + font-size: 13px; + color: #999999; + } + } + + .list { + padding-top: 6px; + + .item { + margin-top: 10px; + padding: 15px; + width: 100%; + height: 140px; + background: rgba(32, 127, 247, 0.05); + border-radius: 4px; + + .name_wrap { + margin-bottom: 10px; + + .name { + font-weight: 600; + color: #222222; + } + + .identity { + font-size: 13px; + color: #207ff7; + } + } + + .line { + color: #666666; + margin-bottom: 8px; + font-size: 13px; + } + + .auth { + .time { + font-weight: 600; + font-size: 13px; + color: #ee3821; + } + + .btn { + margin-left: 10px; + width: 58px; + text-align: center; + height: 30px; + cursor: pointer; + line-height: 30px; + background: #ffffff; + border-radius: 2px; + border: 1px solid #207ff7; + font-size: 13px; + color: #207ff7; + } + } + } + } + } + + .more { + cursor: pointer; + } + + .empty { + height: 300px; + display: flex; + justify-content: center; + align-items: center; + + img { + width: 140px; + } + } + } + + .static_wrap { + .wrap { + background: #fff; + padding: 20px 20px 10px; + border-radius: 2px; + border: 1px solid #eeeeee; + height: 250px; + flex: 1; + + &:nth-of-type(2n) { + margin-left: 10px; + } + + .echart { + width: 100%; + height: 190px; + } + + .header { + display: flex; + justify-content: space-between; + align-items: center; + + .more { + font-size: 13px; + color: #999999; + } + } + } + + .static1 { + .content { + display: flex; + justify-content: center; + align-items: center; + height: 100%; + + .echart_wrap { + position: relative; + + .pie_text { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + z-index: 999; + } + } + + .echart { + width: 150px; + height: 150px; + } + + .list { + margin-left: 36px; + + .item { + display: flex; + align-items: center; + margin: 8px 0; + + .icon { + width: 16px; + height: 16px; + border-radius: 50%; + margin-right: 6px; + background: linear-gradient(270deg, #29aeff 0%, #207ff7 100%); + } + + .text { + margin-right: 6px; + } + } + } + } + } + } +} + +.main_home { + background: #f4f7fc; + position: relative; + width: 100%; + height: 100%; + overflow: auto; + padding: 20px 20px 40px 20px; + padding-top: 92px; + + .home_header { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 200px; + padding: 20px; + color: #fff; + background: linear-gradient(180deg, #207ff7 0%, rgba(32, 127, 247, 0) 100%); + } } </style> -- Gitblit v1.9.3