Merge remote-tracking branch 'origin/master'
| | |
| | | <el-form-item label="用车开始时间" prop="startTime"> |
| | | <el-date-picker |
| | | v-model="form.startTime" |
| | | format="yyyy-MM-dd HH:mm" |
| | | format="yyyy-MM-dd HH:mm:ss" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | type="datetime" |
| | | :picker-options="pickerOptions" |
| | | @change="seletedShiwaiDate" |
| | | :default-time="defaultTime" |
| | | :picker-options="pickerOptionsNow" |
| | | @change="seletedShiwaiDate(1)" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="用车结束时间" prop="endTime"> |
| | | <el-date-picker |
| | | v-model="form.endTime" |
| | | format="yyyy-MM-dd HH:mm" |
| | | format="yyyy-MM-dd HH:mm:ss" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | type="datetime" |
| | | :default-time="defaultTime" |
| | | :picker-options="pickerOptions" |
| | | @change="seletedShiwaiDate" |
| | | > |
| | |
| | | |
| | | memberList: [], |
| | | timeList: [], |
| | | defaultTime: dayjs().format('HH:mm:ss'), |
| | | selDatetime: '', |
| | | colorOptions: [ |
| | | { color: this.$store.state.primaryColor, name: '已选择' }, |
| | |
| | | }, |
| | | selectableRange: '00:00:00 - 23:59:59' |
| | | }, |
| | | pickerOptionsNow: { |
| | | disabledDate: (time) => { |
| | | return time.getTime() < Date.now() - 8.64e7; |
| | | } |
| | | }, |
| | | // 验证规则 |
| | | rules: { |
| | | type: [{ required: true, message: '请选择', trigger: 'change' }], |
| | |
| | | handler (newValue, oldValue) { |
| | | if (newValue) { |
| | | this.$set(this.pickerOptions, 'selectableRange', this.form.startTime.slice(11, 19) + ' - ' + this.form.endTime.slice(11, 19)) |
| | | // this.startPickerOptions = this.startPickerOptions |
| | | } |
| | | }, |
| | | deep: true, |
| | | immediate: true |
| | | }, |
| | | 'form.startTime': { |
| | | handler (newValue, oldValue) { |
| | | if (newValue) { |
| | | this.$set(this.pickerOptions, 'selectableRange', this.form.startTime.slice(11, 19) + ' - ' + '23:59:59') |
| | | // this.startPickerOptions = this.startPickerOptions |
| | | } |
| | | }, |
| | |
| | | this.isShowTime = true |
| | | } else { |
| | | this.clearTime() |
| | | this.selDatetime = '' |
| | | this.isShowShiwai = true |
| | | } |
| | | }, |
| | |
| | | seletedDate (e) { |
| | | this.gettimes() |
| | | }, |
| | | seletedShiwaiDate () { |
| | | seletedShiwaiDate (str) { |
| | | const { form } = this |
| | | if(str && str == 1){ |
| | | this.$set(this.form, 'endTime', '') |
| | | } |
| | | if (form.startTime && form.endTime) { |
| | | this.selDatetime = form.startTime + '-' + form.endTime |
| | | carUseBookList({ |
| | |
| | | <el-table-column prop="isDangyuan" label="是否党员" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.isDangyuan ==1 " style="color: green">党员</span> |
| | | <span v-else >非党员</span> |
| | | <span v-if="row.isDangyuan ==0">非党员</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="jobDate" label="入职日期" min-width="100px"></el-table-column> |
| | |
| | | <el-table-column prop="isDangyuan" label="是否党员" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.isDangyuan ==1 " style="color: green">党员</span> |
| | | <span v-else >非党员</span> |
| | | <span v-if="row.isDangyuan ==0">非党员</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="jobDate" label="入职日期" min-width="100px"> </el-table-column> |
| | |
| | | <el-option label="待提交审批" value="0"></el-option> |
| | | <el-option label="审批中" value="1"></el-option> |
| | | <el-option label="审核通过" value="2"></el-option> |
| | | <el-option label="审核不通过" value="3"></el-option> |
| | | <el-option label="审批驳回" value="3"></el-option> |
| | | <el-option label="取消" value="4"></el-option> |
| | | <el-option label="预约成功" value="5"></el-option> |
| | | <el-option label="预约失败" value="6"></el-option> |
| | | <el-option label="下发成功" value="5"></el-option> |
| | | <el-option label="下发失败" value="6"></el-option> |
| | | <el-option label="拜访中" value="7"></el-option> |
| | | <el-option label="已签离" value="8"></el-option> |
| | | <el-option label="已失效" value="9"></el-option> |
| | |
| | | <el-table-column prop="status" fixed="right" label="状态" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <span style="color: rgba(245, 154, 35, 0.996);" v-if="row.status === 0">待提交审批</span> |
| | | <span v-if="row.status === 1" style="color: rgba(245, 154, 35, 0.996);">处理中</span> |
| | | <span v-if="row.status === 2" style="color: rgba(245, 154, 35, 0.996);">已同意</span> |
| | | <span style="color: gray;" v-if="row.status === 3">已拒绝</span> |
| | | <span v-if="row.status === 1" style="color: rgba(245, 154, 35, 0.996);">审批中</span> |
| | | <span v-if="row.status === 2" style="color: rgba(245, 154, 35, 0.996);">审核通过</span> |
| | | <span style="color: gray;" v-if="row.status === 3">审批驳回</span> |
| | | <span v-if="row.status === 4" style="color: gray">取消</span> |
| | | <span v-if="row.status === 5" style="color: green">下发成功</span> |
| | | <span v-if="row.status === 6" style="color: gray">下发失败</span> |
| | |
| | | <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_nodata.png" alt=""> |
| | | <img src="@/assets/images/default_homeimg.png" alt=""> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | <div v-if="warningList.length == 0" class="empty"> |
| | | <img src="@/assets/images/default_nodata.png" alt=""> |
| | | <img src="@/assets/images/default_homeimg.png" alt=""> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | @click="exportExcel">导出</el-button> |
| | | </li> |
| | | </ul> |
| | | <el-table v-loading="isWorking.search" :data="tableData.list" stripe border |
| | | <el-table v-loading="isWorking.search" :data="tableData.list" stripe |
| | | @selection-change="handleSelectionChange"> |
| | | <!-- <el-table-column type="selection" align="center" width="55"></el-table-column> --> |
| | | <el-table-column prop="name" label="会议主题" align="center" min-width="120px" show-overflow-tooltip> |
| | |
| | | v-model="form.roomId" |
| | | filterable |
| | | clearable |
| | | :disabled="isEdit" |
| | | placeholder="请选择关联会议室" |
| | | @change="selectRoom" |
| | | > |
| | |
| | | </el-form-item> |
| | | <el-form-item label="预定日期" prop="date"> |
| | | <el-date-picker |
| | | :disabled="isEdit" |
| | | v-model="form.date" |
| | | value-format="yyyy-MM-dd" |
| | | placeholder="请选择预定日期" |
| | |
| | | .time-item { |
| | | margin-right: 8px; |
| | | margin-bottom: 8px; |
| | | border: #111 solid 1px; |
| | | border: #cccccc solid 1px; |
| | | font-size: 14px; |
| | | font-weight: 500; |
| | | font-weight: 400; |
| | | line-height: 14px; |
| | | width: 124px; |
| | | height: 36px; |
| | |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | stripe |
| | | border |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="index" prop="index" label="序号" align="center" min-width="50px"></el-table-column> |
| | |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | stripe |
| | | border |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | stripe |
| | | border |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column label="图标" align="center" min-width="100px"> |
| | |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | stripe |
| | | border |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column prop="roomName" label="会议室" align="center" min-width="120px"></el-table-column> |
| | |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | stripe |
| | | border |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <!-- <el-table-column type="selection" width="55"></el-table-column> --> |
| | |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | stripe |
| | | border |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <!-- <el-table-column prop="roomName" label="会议室" align="center" min-width="100px"></el-table-column> --> |
| | |
| | | <text>总运输量</text> |
| | | </view> |
| | | <view class="value"> |
| | | <input type="number" placeholder="请输入总运输量" v-model="param.totalNum" placeholder-style="color: #999999;" /> |
| | | <input type="number" @blur="checkSurplus" placeholder="请输入总运输量" v-model="param.totalNum" placeholder-style="color: #999999;" /> |
| | | <text class="unit">万支</text> |
| | | </view> |
| | | </view> |
| | |
| | | |
| | | <script> |
| | | import keyboardInput from '@/components/keyboard-input/keyboard-input.vue'; |
| | | import { uploadUrl, driverCarApply,driverCarApplyEdit, driverReasonList, driverApplyDetail } from '@/api'; |
| | | import { uploadUrl, driverCarApply,driverCarApplyEdit, driverReasonList, driverApplyDetail, checkSurplusNum } from '@/api'; |
| | | import dayjs from 'dayjs' |
| | | export default { |
| | | components: { |
| | |
| | | this.initData() |
| | | }, |
| | | methods: { |
| | | checkSurplus() { |
| | | const { arriveDate, reasonId, totalNum } = this.param |
| | | if(!arriveDate || !reasonId || !totalNum) return |
| | | checkSurplusNum({ |
| | | arriveDate: arriveDate + ':00', |
| | | reasonId, |
| | | totalNum |
| | | }).then(res => { |
| | | console.log('res', res); |
| | | |
| | | if( res.data == 0 || res.data < Number(totalNum)){ |
| | | this.showToast(`当日剩余可预约作业量不足请选择其他到场日期`) |
| | | } |
| | | }) |
| | | }, |
| | | reasonClick() { |
| | | if(this.param.id){ |
| | | return |
| | |
| | | const index = e.indexs[0] |
| | | this.$set(this.param, 'inReason', reasonList[index].reason) |
| | | this.$set(this.param, 'reasonId', reasonList[index].id) |
| | | this.checkSurplus() |
| | | this.showReason = false |
| | | }, |
| | | setinDate(e) { |
| | | this.$set(this.param, 'arriveDate', dayjs(e.value).format('YYYY-MM-DD HH:mm')) |
| | | this.checkSurplus() |
| | | this.showDatetime = false |
| | | }, |
| | | inTypeClick(e) { |
| | |
| | | width: 100%; |
| | | height: 100vh; |
| | | display: flex; |
| | | padding-top: 160rpx; |
| | | padding-top: 130rpx; |
| | | box-sizing: border-box; |
| | | align-items: center; |
| | | flex-direction: column; |
| | |
| | | font-weight: 600; |
| | | color: #333333; |
| | | margin-top: 40rpx; |
| | | margin-bottom: 120rpx; |
| | | margin-bottom: 80rpx; |
| | | } |
| | | .login_list { |
| | | width: 100%; |
| | |
| | | routes: [ |
| | | { |
| | | path: '/', |
| | | component: () => import('../views/LogisticsEfficiency.vue') |
| | | component: () => import('../views/SecurityControl.vue') |
| | | }, |
| | | { |
| | | path: '/PlatformCall', |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="main_footer"> |
| | | <div class="car_warning"> |
| | | <div class="com_header"> |
| | | <div class="title"> |
| | | <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> |
| | | <div>当前车辆滞留预警</div> |
| | | </div> |
| | | <img src="@/assets/images/title@2x.png" class="bg" alt="" /> |
| | | </div> |
| | | <div class="table"> |
| | | <div class="line header"> |
| | | <div>车牌</div> |
| | | <div class="dept">拜访部门</div> |
| | | <div class="time">超时时长</div> |
| | | </div> |
| | | <div class="line"> |
| | | <div>皖A33234</div> |
| | | <div class="dept">综合管理科</div> |
| | | <div class="time">10:21</div> |
| | | </div> |
| | | <div class="separate"></div> |
| | | <div class="line"> |
| | | <div>皖A33234</div> |
| | | <div class="dept">综合管理科</div> |
| | | <div class="time">10:21</div> |
| | | </div> |
| | | <div class="separate"></div> |
| | | </div> |
| | | </div> |
| | | <div class="safe_warning"> |
| | | <div class="com_header"> |
| | | <div class="title"> |
| | | <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> |
| | | <div>安防告警</div> |
| | | </div> |
| | | <div class="tabs"> |
| | | <div class="tab active">全部</div> |
| | | <div class="separate"></div> |
| | | <div class="tab">区域告警</div> |
| | | <div class="separate"></div> |
| | | <div class="tab">行为告警</div> |
| | | </div> |
| | | <img src="@/assets/images/title@2x.png" class="bg" alt="" /> |
| | | </div> |
| | | <div class="list"> |
| | | <div class="item"> |
| | | <div class="icon"> |
| | | <div class="circle"></div> |
| | | <div class="line"></div> |
| | | </div> |
| | | <div class="content"> |
| | | <div class="header"> |
| | | <div class="time"> |
| | | <span>123</span> |
| | | <span class="status">处理中</span> |
| | | </div> |
| | | <div class="have_time">已经发生<span>1</span>分钟</div> |
| | | </div> |
| | | <div class="wrap"> |
| | | <div class="title">消防警告</div> |
| | | <div class="title">address</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="icon"> |
| | | <div class="circle"></div> |
| | | <div class="line"></div> |
| | | </div> |
| | | <div class="content"> |
| | | <div class="header"> |
| | | <div class="time"> |
| | | <span>123</span> |
| | | <span class="status">处理中</span> |
| | | </div> |
| | | <div class="have_time">已经发生<span>1</span>分钟</div> |
| | | </div> |
| | | <div class="wrap"> |
| | | <div class="title">消防警告</div> |
| | | <div class="title">address</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="garden_warning"> |
| | | <div class="com_header"> |
| | | <div class="title"> |
| | | <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> |
| | | <div>园区安防设备</div> |
| | | </div> |
| | | <img src="@/assets/images/title@2x.png" class="bg" alt="" /> |
| | | </div> |
| | | <div class="content"> |
| | | <div class="sa_static"> |
| | | <div class="echart_wrap"> |
| | | <div class="pie_text"> |
| | | <div class="fs30"><strong>300</strong></div> |
| | | <div>总计</div> |
| | | </div> |
| | | <div class="echart" id="echart2"></div> |
| | | </div> |
| | | <div class="list"> |
| | | <div class="item"> |
| | | <div class="line"> |
| | | <div :style="{ background: colors[1] }" class="icon"></div> |
| | | <div class="text">在线</div> |
| | | </div> |
| | | <div :style="{ color: colors[1] }" class="num">100</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="line"> |
| | | <div :style="{ background: colors[2] }" class="icon"></div> |
| | | <div class="text">离线</div> |
| | | </div> |
| | | <div :style="{ color: colors[2] }" class="num">100</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="table"> |
| | | <div class="line header"> |
| | | <div class="driver">设备类型</div> |
| | | <div>总数</div> |
| | | <div>在线数</div> |
| | | <div>离线数</div> |
| | | <div>在线率</div> |
| | | </div> |
| | | <div class="line"> |
| | | <div class="driver">门禁设备</div> |
| | | <div>10</div> |
| | | <div>10</div> |
| | | <div>10</div> |
| | | <div>10</div> |
| | | </div> |
| | | <div class="separate"></div> |
| | | <div class="line"> |
| | | <div class="driver">门禁设备</div> |
| | | <div>10</div> |
| | | <div>10</div> |
| | | <div>10</div> |
| | | <div>10</div> |
| | | </div> |
| | | <div class="separate"></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="visitor_warning"> |
| | | <div class="com_header"> |
| | | <div class="title"> |
| | | <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> |
| | | <div>今日访客滞留情况</div> |
| | | </div> |
| | | <img src="@/assets/images/title@2x.png" class="bg" alt="" /> |
| | | </div> |
| | | <div class="table"> |
| | | <div class="line header"> |
| | | <div>姓名</div> |
| | | <div class="dept">拜访部门</div> |
| | | <div class="dept">超时时长</div> |
| | | </div> |
| | | <div class="line"> |
| | | <div>name</div> |
| | | <div class="dept">综合管理科</div> |
| | | <div class="dept">10:21</div> |
| | | </div> |
| | | <div class="separate"></div> |
| | | <div class="line"> |
| | | <div>name</div> |
| | | <div class="dept">综合管理科</div> |
| | | <div class="dept">10:21</div> |
| | | </div> |
| | | <div class="separate"></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </v-scale-screen> |
| | | </template> |
| | |
| | | myChart.resize() |
| | | }) |
| | | } |
| | | const initEchart2 = () => { |
| | | const myChart = echarts.init(document.getElementById('echart2')) |
| | | const option = { |
| | | series: [ |
| | | { |
| | | type: 'pie', |
| | | radius: ['86%', '100%'], |
| | | label: { |
| | | show: false, |
| | | position: 'center' |
| | | }, |
| | | padAngle: 5, |
| | | itemStyle: { |
| | | borderRadius: 10 |
| | | }, |
| | | color: colors, |
| | | labelLine: { |
| | | show: false |
| | | }, |
| | | data: [ |
| | | { value: 1048, name: 'Search Engine' }, |
| | | { value: 735, name: 'Direct' }, |
| | | { value: 580, name: 'Email' } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| | | myChart.setOption(option) |
| | | window.addEventListener('resize', function () { // 执行 |
| | | myChart.resize() |
| | | }) |
| | | } |
| | | |
| | | onMounted(() => { |
| | | // initEnergy() |
| | | initEchart1() |
| | | initEchart2() |
| | | }) |
| | | |
| | | |
| | |
| | | display: flex; |
| | | justify-content: space-between; |
| | | padding: 20px; |
| | | |
| | | .item { |
| | | font-size: 12px; |
| | | color: #D2E0FF; |
| | |
| | | display: flex; |
| | | align-items: flex-end; |
| | | margin-top: 8px; |
| | | |
| | | .num{ |
| | | font-size: 22px; |
| | | line-height: 22px; |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | .spacing{ |
| | | width: 1px; |
| | | height: 40px; |
| | |
| | | } |
| | | } |
| | | |
| | | .main_footer { |
| | | /* margin-top: 20px; */ |
| | | display: flex; |
| | | padding: 20px 25px 0; |
| | | |
| | | .car_warning { |
| | | width: 360px; |
| | | |
| | | .table { |
| | | margin-top: 15px; |
| | | |
| | | .line { |
| | | display: flex; |
| | | align-items: center; |
| | | font-size: 14px; |
| | | height: 32px; |
| | | |
| | | div { |
| | | flex: 3; |
| | | height: 16px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | } |
| | | |
| | | .dept { |
| | | flex: 5; |
| | | } |
| | | |
| | | .time { |
| | | flex: 4; |
| | | } |
| | | } |
| | | |
| | | .header { |
| | | background: rgba(134, 156, 201, 0.1); |
| | | font-weight: 500; |
| | | |
| | | div { |
| | | border-right: 1px solid rgba(255, 255, 255, 0.2); |
| | | |
| | | &:nth-last-child(1) { |
| | | border: none; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .separate { |
| | | width: 100%; |
| | | height: 2px; |
| | | background-color: rgba(255, 255, 255, 0.2); |
| | | /* background-color: red; */ |
| | | border-right: 4px solid #00F2F3; |
| | | border-left: 4px solid #00F2F3; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .safe_warning { |
| | | width: 406px; |
| | | margin-left: 20px; |
| | | margin-right: 20px; |
| | | |
| | | .list { |
| | | height: 147px; |
| | | overflow: auto; |
| | | margin-top: 15px; |
| | | scrollbar-width: none; |
| | | |
| | | .item { |
| | | display: flex; |
| | | font-size: 13px; |
| | | color: #D2E0FF; |
| | | |
| | | .icon { |
| | | width: 40px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: center; |
| | | padding-top: 3px; |
| | | |
| | | .circle { |
| | | width: 7px; |
| | | height: 7px; |
| | | border-radius: 50%; |
| | | background: #01D9FE; |
| | | box-shadow: 0px 0px 1px 4px #34788f; |
| | | /* opacity: 0.52; */ |
| | | } |
| | | |
| | | .line { |
| | | margin-top: 3px; |
| | | width: 1px; |
| | | height: calc(100% - 10px); |
| | | background-color: #153947; |
| | | } |
| | | } |
| | | |
| | | .content { |
| | | flex: 1; |
| | | |
| | | .header { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | |
| | | .time { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .status { |
| | | height: 18px; |
| | | line-height: 18px; |
| | | border-radius: 2px; |
| | | padding: 2px 4px; |
| | | border: 1px solid #869CC9; |
| | | font-size: 12px; |
| | | margin-left: 8px; |
| | | } |
| | | } |
| | | |
| | | .have_time { |
| | | font-size: 12px; |
| | | color: #D2E0FF; |
| | | |
| | | span { |
| | | color: #FEAF01; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .wrap { |
| | | height: 40px; |
| | | background: linear-gradient(270deg, rgba(254, 85, 1, 0) 0%, rgba(254, 85, 1, 0.19) 100%); |
| | | border-radius: 2px 0px 0px 2px; |
| | | display: flex; |
| | | align-items: center; |
| | | border: 1px solid; |
| | | margin-bottom: 20px; |
| | | margin-top: 8px; |
| | | padding: 0 10px; |
| | | border-image: linear-gradient(270deg, rgba(254, 85, 1, 0), rgba(254, 85, 1, 0.6)) 1 1; |
| | | |
| | | .title { |
| | | flex: 4; |
| | | font-weight: bold; |
| | | font-size: 15px; |
| | | color: #FFFFFF; |
| | | } |
| | | |
| | | .address { |
| | | flex: 6; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .garden_warning { |
| | | flex: 1; |
| | | margin-right: 20px; |
| | | |
| | | .content { |
| | | display: flex; |
| | | |
| | | .sa_static { |
| | | width: 285px; |
| | | margin-top: 15px; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | padding: 16px 24px; |
| | | |
| | | .echart_wrap { |
| | | position: relative; |
| | | |
| | | .pie_text { |
| | | width: 82px; |
| | | height: 82px; |
| | | border: 1px dashed rgba(1, 217, 254, 0.7); |
| | | border-radius: 50%; |
| | | position: absolute; |
| | | |
| | | left: 50%; |
| | | top: 50%; |
| | | transform: translate(-50%, -50%); |
| | | z-index: 999; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | align-items: center; |
| | | font-size: 12px; |
| | | |
| | | .fs30 { |
| | | font-weight: bold; |
| | | font-size: 18px; |
| | | margin-bottom: 4px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .echart { |
| | | width: 110px; |
| | | height: 110px; |
| | | } |
| | | |
| | | .list { |
| | | margin-left: 36px; |
| | | flex: 1; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: space-between; |
| | | height: 110px; |
| | | |
| | | .item { |
| | | width: 100%; |
| | | font-size: 14px; |
| | | |
| | | .line { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-bottom: 6px; |
| | | |
| | | .icon { |
| | | width: 12px; |
| | | height: 12px; |
| | | border-radius: 50%; |
| | | margin-right: 10px; |
| | | background: linear-gradient(270deg, #29aeff 0%, #207ff7 100%); |
| | | } |
| | | } |
| | | |
| | | .num { |
| | | margin-left: 20px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .table { |
| | | .line { |
| | | div { |
| | | justify-content: flex-end; |
| | | padding-right: 10px; |
| | | } |
| | | |
| | | .driver { |
| | | flex: 4; |
| | | justify-content: center; |
| | | } |
| | | } |
| | | |
| | | .header { |
| | | div { |
| | | justify-content: center; |
| | | padding-right: 0; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | .visitor_warning { |
| | | width: 360px; |
| | | .table{ |
| | | .line{ |
| | | div{ |
| | | .dept{ |
| | | flex: 5; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .com_header { |
| | | height: 40px; |
| | | display: flex; |
| | |
| | | } |
| | | } |
| | | |
| | | .table { |
| | | margin-top: 15px; |
| | | flex: 1; |
| | | |
| | | .line { |
| | | display: flex; |
| | | align-items: center; |
| | | font-size: 14px; |
| | | height: 32px; |
| | | |
| | | div { |
| | | flex: 3; |
| | | height: 16px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | } |
| | | |
| | | .dept { |
| | | flex: 5; |
| | | } |
| | | |
| | | .time { |
| | | flex: 4; |
| | | } |
| | | } |
| | | |
| | | .header { |
| | | background: rgba(134, 156, 201, 0.1); |
| | | font-weight: 500; |
| | | |
| | | div { |
| | | border-right: 1px solid rgba(255, 255, 255, 0.2); |
| | | |
| | | &:nth-last-child(1) { |
| | | border: none; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .separate { |
| | | width: 100%; |
| | | height: 2px; |
| | | background-color: rgba(255, 255, 255, 0.2); |
| | | /* background-color: red; */ |
| | | border-right: 4px solid #00F2F3; |
| | | border-left: 4px solid #00F2F3; |
| | | } |
| | | } |
| | | |
| | | .second_title { |
| | | height: 24px; |
| | | display: flex; |
| | |
| | | height: 960px; |
| | | /* width: 100%; |
| | | height: 100vh; */ |
| | | background: #0b2539; |
| | | color: #FFFFFF; |
| | | position: relative; |
| | | z-index: -2; |
| | | font-size: 14px; |
| | | |
| | | .main_bg { |
| | |
| | | import java.net.URLEncoder; |
| | | import java.security.Key; |
| | | import java.util.Base64; |
| | | import java.util.UUID; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | public class DESUtil { |
| | |
| | | long currentTimeMillis = System.currentTimeMillis() + 1000*60*60*hour; |
| | | String encrypt = DESUtil.encrypt("12345678",currentTimeMillis + "_" + userName ); |
| | | try{ |
| | | encrypt = URLEncoder.encode(encrypt,"UTF-8"); |
| | | // encrypt = Base64.getEncoder().encodeToString(encrypt.getBytes()); |
| | | // encrypt = URLEncoder.encode(encrypt,"UTF-8"); |
| | | }catch (Exception e){ |
| | | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"生成加密码失败!"); |
| | | } |
| | | redisTemplate.opsForValue().set(Constants.REDIS_HK_TOKEN_KEY+encrypt, encrypt,1000*60*60*hour, TimeUnit.MILLISECONDS); |
| | | return encrypt; |
| | | String token = UUID.randomUUID().toString(); |
| | | redisTemplate.opsForValue().set(Constants.REDIS_HK_TOKEN_KEY+token, encrypt,1000*60*60*hour, TimeUnit.MILLISECONDS); |
| | | return token; |
| | | } |
| | | |
| | | |
| | |
| | | @ApiOperation("token解析") |
| | | @GetMapping("/water/decodeToken") |
| | | public Map<String,Object> decodeToken(@RequestParam String token) { |
| | | String token1 =token; |
| | | log.info("【安防平台单点登录token解析】================="+token1); |
| | | log.info("【安防平台单点登录token解析】================="+token); |
| | | int success = Constants.ZERO; |
| | | Map<String,Object> result = new HashMap<>() ; |
| | | try { |
| | | token = URLEncoder.encode(token1); |
| | | HkBaseTokenRequest hkBaseTokenRequest = new HkBaseTokenRequest(); |
| | | hkBaseTokenRequest.setToken(token); |
| | | result = this.decodeTokenForHk(hkBaseTokenRequest); |
| | |
| | | e.printStackTrace(); |
| | | success = Constants.ONE; |
| | | }finally { |
| | | interfaceLogService.saveInterfaceLog("/hk/api/water/decodeToken", "【安防平台】单点登录token解析",token1, |
| | | interfaceLogService.saveInterfaceLog("/hk/api/water/decodeToken", "【安防平台】单点登录token解析",token, |
| | | success, JSONObject.toJSONString(result),Constants.ZERO); |
| | | } |
| | | return result; |
| | |
| | | result.put("msg","token无效!"); |
| | | return result; |
| | | } |
| | | String userName = null; |
| | | try { |
| | | userName = DESUtil.verifyHkToken(URLDecoder.decode(hkBaseTokenRequest.getToken(),"UTF-8")); |
| | | }catch (Exception e){ |
| | | } |
| | | String userName = DESUtil.verifyHkToken( redisToken);; |
| | | if(StringUtils.isBlank(userName)){ |
| | | result.put("code","-1"); |
| | | result.put("msg","token参数为空"); |
| | |
| | | QueryWrapper<Position> queryWrapper = new QueryWrapper<>(); |
| | | Utils.MP.blankToNull(pageWrap.getModel()); |
| | | pageWrap.getModel().setIsdeleted(Constants.ZERO); |
| | | queryWrapper.lambda() |
| | | queryWrapper |
| | | .select("*,(select count(1) from member where member.position_id = position.id and member.type=2 and isdeleted=0) as memberNum" ) |
| | | .lambda() |
| | | .eq(pageWrap.getModel().getId() != null, Position::getId, pageWrap.getModel().getId()) |
| | | .eq(pageWrap.getModel().getCreator() != null, Position::getCreator, pageWrap.getModel().getCreator()) |
| | | .ge(pageWrap.getModel().getCreateDate() != null, Position::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())) |