From a030368330d5a6bf1d0ed42b6121b53d13b587d0 Mon Sep 17 00:00:00 2001 From: liukangdong <898885815@qq.com> Date: 星期四, 31 十月 2024 11:35:13 +0800 Subject: [PATCH] ll --- h5/pages/staffLogin/login.vue | 9 screen/src/views/LogisticsEfficiency.vue | 236 +++++--- screen/vite.config.js | 2 screen/src/views/SecurityControl.vue | 219 ++++--- admin/src/components/business/OperaHiddenDangerParamWindow.vue | 1 pda/pages/index/queueup.vue | 2 screen/src/api/index.js | 18 h5/pages/staff/snapshot.vue | 999 +++++++++++++++++++------------------- pda/pages/index/set.vue | 14 h5/api/staff.js | 8 pda/pages/index/center.vue | 21 admin/src/components/operation/HiddenDangerParam.vue | 11 admin/src/components/system/role/OperaSystemRoleDataWindow.vue | 3 h5/manifest.json | 4 screen/src/components/percent.vue | 1 admin/src/views/operation/danger/record.vue | 6 16 files changed, 815 insertions(+), 739 deletions(-) diff --git a/admin/src/components/business/OperaHiddenDangerParamWindow.vue b/admin/src/components/business/OperaHiddenDangerParamWindow.vue index ffe844c..a7a8128 100644 --- a/admin/src/components/business/OperaHiddenDangerParamWindow.vue +++ b/admin/src/components/business/OperaHiddenDangerParamWindow.vue @@ -91,6 +91,7 @@ }) } } + this.loadMember() }) }, getfindCompanyTreePage() { diff --git a/admin/src/components/operation/HiddenDangerParam.vue b/admin/src/components/operation/HiddenDangerParam.vue index c2b75eb..f3e73ea 100644 --- a/admin/src/components/operation/HiddenDangerParam.vue +++ b/admin/src/components/operation/HiddenDangerParam.vue @@ -23,7 +23,7 @@ /> </el-form-item> <el-form-item label="璐d换閮ㄩ棬" prop="companyId"> - <el-select v-model="param.companyId"> + <el-select @change="getAddrList" v-model="param.companyId"> <el-option v-for="op in department" :key="op.id" :label="op.name" :value="op.id"></el-option> </el-select> </el-form-item> @@ -155,9 +155,6 @@ allList({ type: 1 }).then(res => { // 绫诲瀷 this.typeList = res || [] }) - allList({ type: 0 }).then(res => { // 浣嶇疆 - this.addrList = res || [] - }) memberList({}).then(res => { this.memberList = res || [] }) @@ -171,6 +168,12 @@ } }) }, + getAddrList() { + const { companyId } = this.param + allList({ type: 0,companyId }).then(res => { // 浣嶇疆 + this.addrList = res || [] + }) + }, changeArea (e) { const item = this.addrList.find(i => i.id === e) const arr = [] diff --git a/admin/src/components/system/role/OperaSystemRoleDataWindow.vue b/admin/src/components/system/role/OperaSystemRoleDataWindow.vue index 5727a97..1f81396 100644 --- a/admin/src/components/system/role/OperaSystemRoleDataWindow.vue +++ b/admin/src/components/system/role/OperaSystemRoleDataWindow.vue @@ -35,7 +35,8 @@ { name: '鎵�灞為儴闂ㄥ強涓嬪睘閮ㄩ棬', id: 1 }, { name: '鎵�灞為儴闂ㄥ強鍏跺瓙瀛欓儴闂�', id: 2 }, { name: '浠呮墍灞為儴闂�', id: 3 }, - { name: '鑷畾涔夐儴闂�', id: 4 } + { name: '鑷畾涔夐儴闂�', id: 4 }, + { name: '鍙湅鑷繁', id: -1 }, ], // 琛ㄥ崟鏁版嵁 form: { diff --git a/admin/src/views/operation/danger/record.vue b/admin/src/views/operation/danger/record.vue index 31f2fbb..5b60581 100644 --- a/admin/src/views/operation/danger/record.vue +++ b/admin/src/views/operation/danger/record.vue @@ -8,8 +8,8 @@ <el-form-item label="鎻愭姤浜虹粍缁�" prop="companyName"> <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏�" clearable @keypress.enter.native="search"></el-input> </el-form-item> - <el-form-item label="璐d换閮ㄩ棬" prop="companyName"> - <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏�" clearable @keypress.enter.native="search"></el-input> + <el-form-item label="璐d换閮ㄩ棬" prop="dutyCompanyName"> + <el-input v-model="searchForm.dutyCompanyName" placeholder="璇疯緭鍏ヨ矗浠婚儴闂�" clearable @keypress.enter.native="search"></el-input> </el-form-item> <el-form-item label="闅愭偅鍖哄煙" prop="areaId"> <el-select v-model="searchForm.areaId" placeholder="璇烽�夋嫨闅愭偅鍖哄煙" clearable @change="search"> @@ -75,7 +75,7 @@ @selection-change="handleSelectionChange" > <el-table-column type="selection" width="55"></el-table-column> - <el-table-column prop="companyName" label="璐d换閮ㄩ棬" min-width="150px"></el-table-column> + <el-table-column prop="dutyCompanyName" label="璐d换閮ㄩ棬" min-width="150px"></el-table-column> <el-table-column prop="areaName" label="闅愭偅鍖哄煙" min-width="150px"></el-table-column> <el-table-column prop="categoryName" label="闅愭偅绫诲瀷" min-width="150px"></el-table-column> <el-table-column prop="memberName" label="鎻愭姤浜�" min-width="80px"></el-table-column> diff --git a/h5/api/staff.js b/h5/api/staff.js index dd2f307..ea64d24 100644 --- a/h5/api/staff.js +++ b/h5/api/staff.js @@ -84,6 +84,14 @@ method: 'get' }) } +// 閮ㄩ棬鍒楄〃 +export const deptListPost = (data) => { + return http({ + url: '/visitsAdmin/cloudService/business/company/list', + method: 'post', + data + }) +} // 闅愭偅 绫诲瀷 export const DangerConfigType = (data) => { return http({ diff --git a/h5/manifest.json b/h5/manifest.json index cd8f8b1..e051485 100644 --- a/h5/manifest.json +++ b/h5/manifest.json @@ -129,8 +129,8 @@ // 杩欎釜瀛楁鍚嶉渶涓庝綘閰嶇疆鐨刡asePrefixUrl涓�鑷达紝绯荤粺璇嗗埆鍒板甫鏈�/dev-api璇锋眰鐨勫湴鍧�鏃讹紝浼氬湪鍓嶉潰鎷兼帴涓婁唬鐞嗘湇鍔″櫒鍦板潃 // "target" : "http://172.20.10.7:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃 // "target" : "http://192.168.0.100:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃 - // "target" : "http://10.50.250.253:8088/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃 - "target" : "http://192.168.0.173/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃 + "target" : "http://10.50.250.253:8088/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃 + // "target" : "http://192.168.0.173/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃 "changeOrigin" : true, // 鍏佽璺ㄥ煙 "pathRewrite" : { "^/gateway_interface" : "" diff --git a/h5/pages/staff/snapshot.vue b/h5/pages/staff/snapshot.vue index b0677bc..4d14c15 100644 --- a/h5/pages/staff/snapshot.vue +++ b/h5/pages/staff/snapshot.vue @@ -1,500 +1,499 @@ -<template> - <view class="main_app"> - <view class="main_wrap"> - <!-- --> - <view class="line"> - <view class="label"> - <text>*</text> - <text>闅愭偅鍖哄煙</text> - </view> - <view class="value" @click="isShowArea = true"> - <text - class="mr6" - :style="{ color: param.areaName ? '#000000' : '#999999' }" - >{{ param.areaName ? param.areaName : "璇烽�夋嫨" }}</text - > - <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon> - </view> - </view> - <view class="line"> - <view class="label"> - <text>*</text> - <text>鎺ユ敹浜�</text> - </view> - <view class="value" @click="selMember"> - <text - class="mr6" - :style="{ color: param.checkorName ? '#000000' : '#999999' }" - >{{ param.checkorName ? param.checkorName : "璇烽�夋嫨" }}</text - > - <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon> - </view> - </view> - <view class="empty"></view> - <view class="line"> - <view class="label"> - <text>*</text> - <text>闅愭偅绫诲瀷</text> - </view> - <view class="value" @click="isShowType = true"> - <text - class="mr6" - :style="{ color: param.categoryName ? '#000000' : '#999999' }" - >{{ param.categoryName ? param.categoryName : "璇烽�夋嫨" }}</text - > - <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon> - </view> - </view> - <view class="upload_line"> - <view class="name">鐜板満鎯呭喌</view> - <view class="wrap"> - <view - class="adduser_list_item_ipt1_upload" - @click="showUpload = true" - > - <u-icon name="plus" color="rgb(153, 153, 153)" size="20"></u-icon> - <view class="mt6">鍥剧墖/瑙嗛</view> - </view> - <view - class="adduser_list_item_ipt1_upload" - v-for="(item, i) in submitFileList" - :key="i" - > - <u-icon - class="close" - size="20" - name="close-circle-fill" - color="red" - @click="fileDel(i)" - ></u-icon> - <image - v-if="item.type == 0" - :src="item.fileurlFull" - mode="widthFix" - ></image - ><video v-if="item.type == 1" :src="item.fileurlFull"></video - ></view> - </view> - </view> - <view class="empty"></view> - <view class="upload_line" style="padding: 15px 0 0"> - <view class="name" style="margin-bottom: 10rpx"> - <text style="color: #e42d2d">*</text> - <text>鎯呭喌璇存槑</text> - </view> - <view class="value"> - <textarea - placeholder="璇疯缁嗘弿杩扮幇鍦烘儏鍐碉紝涓嶅皯浜�10涓瓧" - minlength="10" - v-model="param.content" - placeholder-style="color: #999999;" - /> - </view> - </view> - <view class="empty"></view> - <view class="line"> - <view class="label"> - <text></text> - <text>鎻愭姤浜�</text> - </view> - <view class="value" - ><input - type="text" - disabled - placeholder="璇疯緭鍏ユ彁鎶ヤ汉" - v-model="param.memberName" - placeholder-style="color: #999999;" - /></view> - </view> - <view class="line"> - <view class="label"> - <text></text> - <text>鑱旂郴鐢佃瘽</text> - </view> - <view class="value" - ><input - type="text" - disabled - placeholder="璇疯緭鍏ヨ仈绯荤數璇�" - v-model="param.memberPhone" - placeholder-style="color: #999999;" - /></view> - </view> - <view class="line"> - <view class="label"> - <text></text> - <text>鎻愭姤鏃堕棿</text> - </view> - <view class="value" @click="isShowTime = true"> - <text - class="mr6" - :style="{ color: param.submitTime ? '#000000' : '#999999' }" - >{{ param.submitTime ? param.submitTime : "璇烽�夋嫨" }}</text - > - <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon> - </view> - </view> - - <view class="footer" - ><view class="footer_btn" @click="onSubmit">鎻愪氦</view></view - > - </view> - <!-- --> - <!-- 鍖哄煙 --> - <u-picker - keyName="name" - :show="isShowArea" - closeOnClickOverlay - :columns="areaOptions" - @confirm="seletedArea" - @close="isShowArea = false" - @cancel="isShowArea = false" - ></u-picker> - <u-picker - keyName="name" - :show="isShowType" - closeOnClickOverlay - :columns="areaType" - @confirm="seletedType" - @close="isShowType = false" - @cancel="isShowType = false" - ></u-picker> - <!-- --> - <u-datetime-picker - :show="isShowTime" - :minDate="new Date().getTime()" - mode="datetime" - closeOnClickOverlay - @cancel="isShowTime = false" - @close="isShowTime = false" - @confirm="seletedDate" - ></u-datetime-picker> - <!-- --> - <u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay> - <view class="upload_wrap"> - <view class="btn" @click="uploadImage">閫夋嫨鍥剧墖</view> - <view class="btn" @click="uploadVideo">閫夋嫨瑙嗛</view> - </view> - </u-popup> - </view> -</template> - -<script> -import { - uploadUrl, - DangerCreate, - DangerConfigType -} from '@/api' -import dayjs from 'dayjs' -export default { - data() { - return { - param: {}, - submitFileList: [], - - isShowArea: false, - isShowType: false, - isShowTime: false, - showUpload: false, - - areaOptions: [], - areaType: [], - } - }, - onLoad(option) { - this.initConfig() - const userInfo = uni.getStorageSync('userInfo') || {} - this.$set(this.param, 'memberName', userInfo.realname) - this.$set(this.param, 'memberPhone', userInfo.mobile) - this.$set(this.param, 'memberId', userInfo.id) - this.$set(this.param, 'submitTime', dayjs().format('YYYY-MM-DD HH:mm:ss')) - }, - mounted() { - this.$eventBus.$on('snapshotSel', (option) => { - this.$set(this.param, 'checkUserId', option.id) - this.$set(this.param, 'applyCheckUserId', option.id) - this.$set(this.param, 'checkorName', option.name) - }) - }, - methods: { - onSubmit() { - const { param, submitFileList } = this - if (!param.areaName) return uni.showToast({ - title: '璇烽�夋嫨闅愭偅鍖哄煙', - icon: 'none' - }) - if (!param.applyCheckUserId) return uni.showToast({ - title: '璇烽�夋嫨鎺ユ敹浜�', - icon: 'none' - }) - if (!param.categoryName) return uni.showToast({ - title: '璇烽�夋嫨闅愭偅绫诲瀷', - icon: 'none' - }) - if (!param.content) return uni.showToast({ - title: '璇疯緭鍏ユ儏鍐佃鏄�', - icon: 'none' - }) - if (param.content.length < 10) return uni.showToast({ - title: '鎯呭喌璇存槑涓嶅緱灏忎簬10涓瓧', - icon: 'none' - }) - - DangerCreate({ - ...param, - submitFileList - }).then(res => { - if (res.code === 200) { - this.$jump('/pages/staff/snapshotResult') - } - }) - }, - seletedArea(e) { - const item = e.value[0] - this.$set(this.param, 'areaId', item.id) - this.$set(this.param, 'areaName', item.name) - console.log(item) - if (item.memberIds && item.memberIds.indexOf(',') === -1) { - this.$set(this.param, 'checkUserId', item.memberIds) - this.$set(this.param, 'applyCheckUserId', item.memberIds) - this.$set(this.param, 'checkorName', item.memberNames) - } else { - this.$set(this.param, 'checkUserId', '') - this.$set(this.param, 'applyCheckUserId', '') - this.$set(this.param, 'checkorName', '') - } - this.isShowArea = false - }, - seletedType(e) { - const item = e.value[0] - this.$set(this.param, 'cateId', item.id) - this.$set(this.param, 'categoryName', item.name) - console.log(item) - this.isShowType = false - }, - seletedSafety(e) { - - }, - seletedDate(e) { - this.$set(this.param, 'submitTime', dayjs(e.value).format('YYYY-MM-DD HH:mm:ss')) - this.isShowTime = false - }, - initConfig() { - DangerConfigType({ type: '1' }).then(res => { - this.areaType = [res.data] - }) - DangerConfigType({ type: '0' }).then(res => { - this.areaOptions = [res.data] - }) - }, - selMember() { - if (!this.param.areaId) return uni.showToast({ - title: '璇峰厛閫夋嫨闅愭偅鍖哄煙', - icon: 'none' - }) - uni.navigateTo({ - url: '/pages/staff/memberSel?areaId=' + this.param.areaId - }) - }, - fileDel(i) { - this.submitFileList.splice(i, 1) - }, - uploadImage() { - this.showUpload = false - let token = uni.getStorageSync('token') || '' - uni.chooseImage({ - count: 4, - success: (chooseImageRes) => { - uni.showLoading({ title: '涓婁紶涓�', mask: true }) - const tempFilePaths = chooseImageRes.tempFilePaths - let imgs = tempFilePaths.map((value, index) => { - return { - name: 'file', - uri: value - } - }) - uni.uploadFile({ - url: `${uploadUrl}`, - files: imgs, - name: 'file', - formData: { - folder: 'HIDDEN_DANGER_FILE' - }, - header: { - Dm_user_token: token - }, - success: (uploadFileRes) => { - let res = JSON.parse(uploadFileRes.data) - console.log('res', res.data) - if (res.data && res.data.length > 0) { - res.data.forEach(i => { - i.type = 0 - i.fileurl = i.imgaddr - i.fileurlFull = i.url - this.submitFileList.push(i) - }) - } - }, - fail(err) { - console.log('err', err) - }, - complete() { - uni.hideLoading() - // if (i === chooseImageRes.tempFilePaths.length - 1) { - // uni.hideLoading() - // } - } - }) - // } - } - }) - }, - uploadVideo() { - this.showUpload = false - let that = this - let token = uni.getStorageSync('token') || '' - uni.chooseVideo({ - success: (chooseImageRes) => { - uni.showLoading({ title: '涓婁紶涓�', mask: true }) - uni.uploadFile({ - url: `${uploadUrl}`, - filePath: chooseImageRes.tempFilePath, - header: { - Dm_user_token: token - }, - name: 'file', - formData: { - folder: 'HIDDEN_DANGER_FILE' - }, - success: (uploadFileRes) => { - let res = JSON.parse(uploadFileRes.data) - if (res.data && res.data.length > 0) { - res.data.forEach(i => { - i.type = 1 - i.fileurl = i.imgaddr - i.fileurlFull = i.url - this.submitFileList.push(i) - }) - } - }, - complete() { - uni.hideLoading() - } - }) - } - }) - }, - - getUser() { } - } -}; -</script> - -<style lang="scss"> -.main_wrap { - padding-bottom: 200rpx; - .line { - display: flex; - justify-content: space-between; - align-items: center; - border-bottom: 1rpx solid #e5e5e5; - padding: 30rpx 0; - .label { - font-size: 30rpx; - font-weight: 400; - text { - &:nth-child(1) { - color: #e42d2d; - margin-right: 4rpx; - } - } - } - .value { - flex: 1; - height: 100%; - margin-left: 30rpx; - display: flex; - align-items: center; - justify-content: flex-end; - input { - width: 100%; - height: 100%; - text-align: right; - font-size: 28rpx; - font-weight: 400; - color: #222222; - } - } - } - .upload_line { - padding: 30rpx 0; - .wrap { - display: flex; - flex-wrap: wrap; - } - .adduser_list_item_ipt1_upload { - margin-top: 24rpx; - width: 120rpx; - height: 120rpx; - margin-right: 24rpx; - border: 2rpx solid #e5e5e5; - background: #f7f7f7; - color: #666666; - font-size: 22rpx; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - position: relative; - .close { - position: absolute; - right: -20rpx; - top: -20rpx; - z-index: 9999; - } - image { - width: 100%; - height: 100%; - } - video { - width: 100%; - max-height: 120rpx; - } - } - } -} -.upload_wrap { - width: 100%; - .btn { - height: 90rpx; - line-height: 90rpx; - text-align: center; - } -} -.footer { - width: 100%; - padding: 0 30rpx; - padding-bottom: env(safe-area-inset-bottom); - box-sizing: border-box; - position: fixed; - left: 0; - bottom: 68rpx; - - .footer_btn { - width: 100%; - height: 88rpx; - line-height: 88rpx; - text-align: center; - background: $uni-color-primary; - border-radius: 44rpx; - font-size: 32rpx; - color: #ffffff; - } -} -.empty { - width: 750rpx; - height: 20rpx; - background-color: #f7f7f7; - margin: 0 -30rpx; -} -</style> +<template> + <view class="main_app"> + <view class="main_wrap"> + <!-- --> + <view class="line"> + <view class="label"> + <text>*</text> + <text>璐d换閮ㄩ棬</text> + </view> + <view class="value" @click="isShowCompany = true"> + <text class="mr6" + :style="{ color: param.companyName ? '#000000' : '#999999' }">{{ param.companyName ? param.companyName : "璇烽�夋嫨" }}</text> + <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon> + </view> + </view> + <view class="line"> + <view class="label"> + <text>*</text> + <text>闅愭偅鍖哄煙</text> + </view> + <view class="value" @click="isShowArea = true"> + <text class="mr6" + :style="{ color: param.areaName ? '#000000' : '#999999' }">{{ param.areaName ? param.areaName : "璇烽�夋嫨" }}</text> + <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon> + </view> + </view> + <view class="line"> + <view class="label"> + <text>*</text> + <text>鎺ユ敹浜�</text> + </view> + <view class="value" @click="selMember"> + <text class="mr6" + :style="{ color: param.checkorName ? '#000000' : '#999999' }">{{ param.checkorName ? param.checkorName : "璇烽�夋嫨" }}</text> + <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon> + </view> + </view> + <view class="empty"></view> + <view class="line"> + <view class="label"> + <text>*</text> + <text>闅愭偅绫诲瀷</text> + </view> + <view class="value" @click="isShowType = true"> + <text class="mr6" + :style="{ color: param.categoryName ? '#000000' : '#999999' }">{{ param.categoryName ? param.categoryName : "璇烽�夋嫨" }}</text> + <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon> + </view> + </view> + <view class="upload_line"> + <view class="name">鐜板満鎯呭喌</view> + <view class="wrap"> + <view class="adduser_list_item_ipt1_upload" @click="showUpload = true"> + <u-icon name="plus" color="rgb(153, 153, 153)" size="20"></u-icon> + <view class="mt6">鍥剧墖/瑙嗛</view> + </view> + <view class="adduser_list_item_ipt1_upload" v-for="(item, i) in submitFileList" :key="i"> + <u-icon class="close" size="20" name="close-circle-fill" color="red" @click="fileDel(i)"></u-icon> + <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image><video v-if="item.type == 1" + :src="item.fileurlFull"></video> + </view> + </view> + </view> + <view class="empty"></view> + <view class="upload_line" style="padding: 15px 0 0"> + <view class="name" style="margin-bottom: 10rpx"> + <text style="color: #e42d2d">*</text> + <text>鎯呭喌璇存槑</text> + </view> + <view class="value"> + <textarea placeholder="璇疯缁嗘弿杩扮幇鍦烘儏鍐碉紝涓嶅皯浜�10涓瓧" minlength="10" v-model="param.content" + placeholder-style="color: #999999;" /> + </view> + </view> + <view class="empty"></view> + <view class="line"> + <view class="label"> + <text></text> + <text>鎻愭姤浜�</text> + </view> + <view class="value"><input type="text" disabled placeholder="璇疯緭鍏ユ彁鎶ヤ汉" v-model="param.memberName" + placeholder-style="color: #999999;" /></view> + </view> + <view class="line"> + <view class="label"> + <text></text> + <text>鑱旂郴鐢佃瘽</text> + </view> + <view class="value"><input type="text" disabled placeholder="璇疯緭鍏ヨ仈绯荤數璇�" v-model="param.memberPhone" + placeholder-style="color: #999999;" /></view> + </view> + <view class="line"> + <view class="label"> + <text></text> + <text>鎻愭姤鏃堕棿</text> + </view> + <view class="value" @click="isShowTime = true"> + <text class="mr6" + :style="{ color: param.submitTime ? '#000000' : '#999999' }">{{ param.submitTime ? param.submitTime : "璇烽�夋嫨" }}</text> + <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon> + </view> + </view> + + <view class="footer"> + <view class="footer_btn" @click="onSubmit">鎻愪氦</view> + </view> + </view> + <!-- --> + <u-picker keyName="name" :show="isShowCompany" closeOnClickOverlay :columns="deptList" @confirm="seletedCompany" + @close="isShowCompany = false" @cancel="isShowCompany = false"></u-picker> + <!-- 鍖哄煙 --> + <u-picker keyName="name" :show="isShowArea" closeOnClickOverlay :columns="areaOptions" @confirm="seletedArea" + @close="isShowArea = false" @cancel="isShowArea = false"></u-picker> + <u-picker keyName="name" :show="isShowType" closeOnClickOverlay :columns="areaType" @confirm="seletedType" + @close="isShowType = false" @cancel="isShowType = false"></u-picker> + <!-- --> + <u-datetime-picker :show="isShowTime" :minDate="new Date().getTime()" mode="datetime" closeOnClickOverlay + @cancel="isShowTime = false" @close="isShowTime = false" @confirm="seletedDate"></u-datetime-picker> + <!-- --> + <u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay> + <view class="upload_wrap"> + <view class="btn" @click="uploadImage">閫夋嫨鍥剧墖</view> + <view class="btn" @click="uploadVideo">閫夋嫨瑙嗛</view> + </view> + </u-popup> + </view> +</template> + +<script> + import { + uploadUrl, + DangerCreate, + DangerConfigType, + deptListPost + } from '@/api' + import dayjs from 'dayjs' + export default { + data() { + return { + param: {}, + submitFileList: [], + + isShowCompany: false, + isShowArea: false, + isShowType: false, + isShowTime: false, + showUpload: false, + + deptList: [], + areaOptions: [], + areaType: [], + } + }, + onLoad(option) { + this.initConfig() + const userInfo = uni.getStorageSync('userInfo') || {} + this.$set(this.param, 'memberName', userInfo.realname) + this.$set(this.param, 'memberPhone', userInfo.mobile) + this.$set(this.param, 'memberId', userInfo.id) + this.$set(this.param, 'submitTime', dayjs().format('YYYY-MM-DD HH:mm:ss')) + }, + mounted() { + this.$eventBus.$on('snapshotSel', (option) => { + this.$set(this.param, 'checkUserId', option.id) + this.$set(this.param, 'applyCheckUserId', option.id) + this.$set(this.param, 'checkorName', option.name) + }) + }, + methods: { + onSubmit() { + const { + param, + submitFileList + } = this + if (!param.companyName) return uni.showToast({ + title: '璇烽�夋嫨璐d换閮ㄩ棬', + icon: 'none' + }) + if (!param.areaName) return uni.showToast({ + title: '璇烽�夋嫨闅愭偅鍖哄煙', + icon: 'none' + }) + if (!param.applyCheckUserId) return uni.showToast({ + title: '璇烽�夋嫨鎺ユ敹浜�', + icon: 'none' + }) + if (!param.categoryName) return uni.showToast({ + title: '璇烽�夋嫨闅愭偅绫诲瀷', + icon: 'none' + }) + if (!param.content) return uni.showToast({ + title: '璇疯緭鍏ユ儏鍐佃鏄�', + icon: 'none' + }) + if (param.content.length < 10) return uni.showToast({ + title: '鎯呭喌璇存槑涓嶅緱灏忎簬10涓瓧', + icon: 'none' + }) + + DangerCreate({ + ...param, + submitFileList + }).then(res => { + if (res.code === 200) { + this.$jump('/pages/staff/snapshotResult') + } + }) + }, + seletedCompany(e) { + const item = e.value[0] + this.$set(this.param, 'companyId', item.id) + this.$set(this.param, 'companyName', item.name) + this.$set(this.param, 'areaId', '') + this.$set(this.param, 'areaName', '') + DangerConfigType({ + type: '0', + companyId: item.id + }).then(res => { + this.areaOptions = [res.data] + }) + this.isShowCompany = false + }, + seletedArea(e) { + const item = e.value[0] + this.$set(this.param, 'areaId', item.id) + this.$set(this.param, 'areaName', item.name) + console.log(item) + if (item.memberIds && item.memberIds.indexOf(',') === -1) { + this.$set(this.param, 'checkUserId', item.memberIds) + this.$set(this.param, 'applyCheckUserId', item.memberIds) + this.$set(this.param, 'checkorName', item.memberNames) + } else { + this.$set(this.param, 'checkUserId', '') + this.$set(this.param, 'applyCheckUserId', '') + this.$set(this.param, 'checkorName', '') + } + this.isShowArea = false + }, + seletedType(e) { + const item = e.value[0] + this.$set(this.param, 'cateId', item.id) + this.$set(this.param, 'categoryName', item.name) + console.log(item) + this.isShowType = false + }, + seletedSafety(e) { + + }, + seletedDate(e) { + this.$set(this.param, 'submitTime', dayjs(e.value).format('YYYY-MM-DD HH:mm:ss')) + this.isShowTime = false + }, + initConfig() { + deptListPost({}).then(res => { + this.deptList = [res.data] + }) + DangerConfigType({ + type: '1' + }).then(res => { + this.areaType = [res.data] + }) + DangerConfigType({ + type: '0' + }).then(res => { + this.areaOptions = [res.data] + }) + }, + selMember() { + if (!this.param.areaId) return uni.showToast({ + title: '璇峰厛閫夋嫨闅愭偅鍖哄煙', + icon: 'none' + }) + uni.navigateTo({ + url: '/pages/staff/memberSel?areaId=' + this.param.areaId + }) + }, + fileDel(i) { + this.submitFileList.splice(i, 1) + }, + uploadImage() { + this.showUpload = false + let token = uni.getStorageSync('token') || '' + uni.chooseImage({ + count: 4, + success: (chooseImageRes) => { + uni.showLoading({ + title: '涓婁紶涓�', + mask: true + }) + const tempFilePaths = chooseImageRes.tempFilePaths + let imgs = tempFilePaths.map((value, index) => { + return { + name: 'file', + uri: value + } + }) + uni.uploadFile({ + url: `${uploadUrl}`, + files: imgs, + name: 'file', + formData: { + folder: 'HIDDEN_DANGER_FILE' + }, + header: { + Dm_user_token: token + }, + success: (uploadFileRes) => { + let res = JSON.parse(uploadFileRes.data) + console.log('res', res.data) + if (res.data && res.data.length > 0) { + res.data.forEach(i => { + i.type = 0 + i.fileurl = i.imgaddr + i.fileurlFull = i.url + this.submitFileList.push(i) + }) + } + }, + fail(err) { + console.log('err', err) + }, + complete() { + uni.hideLoading() + // if (i === chooseImageRes.tempFilePaths.length - 1) { + // uni.hideLoading() + // } + } + }) + // } + } + }) + }, + uploadVideo() { + this.showUpload = false + let that = this + let token = uni.getStorageSync('token') || '' + uni.chooseVideo({ + success: (chooseImageRes) => { + uni.showLoading({ + title: '涓婁紶涓�', + mask: true + }) + uni.uploadFile({ + url: `${uploadUrl}`, + filePath: chooseImageRes.tempFilePath, + header: { + Dm_user_token: token + }, + name: 'file', + formData: { + folder: 'HIDDEN_DANGER_FILE' + }, + success: (uploadFileRes) => { + let res = JSON.parse(uploadFileRes.data) + if (res.data && res.data.length > 0) { + res.data.forEach(i => { + i.type = 1 + i.fileurl = i.imgaddr + i.fileurlFull = i.url + this.submitFileList.push(i) + }) + } + }, + complete() { + uni.hideLoading() + } + }) + } + }) + }, + + getUser() {} + } + }; +</script> + +<style lang="scss"> + .main_wrap { + padding-bottom: 200rpx; + + .line { + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 1rpx solid #e5e5e5; + padding: 30rpx 0; + + .label { + font-size: 30rpx; + font-weight: 400; + + text { + &:nth-child(1) { + color: #e42d2d; + margin-right: 4rpx; + } + } + } + + .value { + flex: 1; + height: 100%; + margin-left: 30rpx; + display: flex; + align-items: center; + justify-content: flex-end; + + input { + width: 100%; + height: 100%; + text-align: right; + font-size: 28rpx; + font-weight: 400; + color: #222222; + } + } + } + + .upload_line { + padding: 30rpx 0; + + .wrap { + display: flex; + flex-wrap: wrap; + } + + .adduser_list_item_ipt1_upload { + margin-top: 24rpx; + width: 120rpx; + height: 120rpx; + margin-right: 24rpx; + border: 2rpx solid #e5e5e5; + background: #f7f7f7; + color: #666666; + font-size: 22rpx; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + position: relative; + + .close { + position: absolute; + right: -20rpx; + top: -20rpx; + z-index: 9999; + } + + image { + width: 100%; + height: 100%; + } + + video { + width: 100%; + max-height: 120rpx; + } + } + } + } + + .upload_wrap { + width: 100%; + + .btn { + height: 90rpx; + line-height: 90rpx; + text-align: center; + } + } + + .footer { + width: 100%; + padding: 0 30rpx; + padding-bottom: env(safe-area-inset-bottom); + box-sizing: border-box; + position: fixed; + left: 0; + bottom: 68rpx; + + .footer_btn { + width: 100%; + height: 88rpx; + line-height: 88rpx; + text-align: center; + background: $uni-color-primary; + border-radius: 44rpx; + font-size: 32rpx; + color: #ffffff; + } + } + + .empty { + width: 750rpx; + height: 20rpx; + background-color: #f7f7f7; + margin: 0 -30rpx; + } +</style> \ No newline at end of file diff --git a/h5/pages/staffLogin/login.vue b/h5/pages/staffLogin/login.vue index a0a5506..510a544 100644 --- a/h5/pages/staffLogin/login.vue +++ b/h5/pages/staffLogin/login.vue @@ -71,12 +71,13 @@ data() { return { form: { - username: '18056814089', - password: '123456', - code: 1 + // username: '18056814089', + username: '', + password: '', + code: '' }, isShowProtocol: false, - ProtocolFlag: true, + ProtocolFlag: false, captcha: {}, htmlText: '' } diff --git a/pda/pages/index/center.vue b/pda/pages/index/center.vue index 1e91669..0bd09a4 100644 --- a/pda/pages/index/center.vue +++ b/pda/pages/index/center.vue @@ -48,7 +48,7 @@ </view> <view class="line"> <text class="label">鎬昏繍杈撻噺</text> - <text class="value">{{ item.totalNum }}涓囨敮</text> + <text class="value">{{ item.totalNum || item.ioQty}}涓囨敮</text> </view> <view class="line" v-if="item.carrierName"> <text class="label">杩愯緭鍏徃</text> @@ -113,7 +113,7 @@ </view> <view class="line"> <text class="label">鎬昏繍杈撻噺</text> - <text class="value">{{ item.totalNum }}涓囨敮</text> + <text class="value">{{ item.totalNum || item.ioQty }}涓囨敮</text> </view> <view class="line" v-if="item.carrierName"> <text class="label">杩愯緭鍏徃</text> @@ -525,19 +525,20 @@ flex-wrap: wrap; .item { - width: 210rpx; - height: 80rpx; - display: flex; - justify-content: center; - align-items: center; + width: 220rpx; + height: 80rpx; + line-height: 80rpx; + text-align: center; background: #ffffff; border-radius: 8rpx; border: 1rpx solid #999999; font-size: 30rpx; color: #222222; - margin-bottom: 20rpx; - margin-right: 30rpx; - + margin-bottom: 15rpx; + margin-right: 15rpx; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; &:nth-of-type(3n) { margin-right: 0; } diff --git a/pda/pages/index/queueup.vue b/pda/pages/index/queueup.vue index aad2d5b..0909f05 100644 --- a/pda/pages/index/queueup.vue +++ b/pda/pages/index/queueup.vue @@ -56,7 +56,7 @@ </view> <view class="line"> <text class="label">鎬昏繍杈撻噺</text> - <text class="value">{{ item.totalNum }}涓囨敮</text> + <text class="value">{{ item.totalNum || item.ioQty }}涓囨敮</text> </view> <view class="line" v-if="item.carrierName"> <text class="label">杩愯緭鍏徃</text> diff --git a/pda/pages/index/set.vue b/pda/pages/index/set.vue index 9764a7d..694261b 100644 --- a/pda/pages/index/set.vue +++ b/pda/pages/index/set.vue @@ -88,16 +88,18 @@ margin-bottom: 120rpx; } .item { - width: 210rpx; + width: 220rpx; height: 80rpx; background: #f3f3f3; border-radius: 40rpx; - display: flex; - justify-content: center; - align-items: center; - margin-bottom: 20rpx; + line-height: 80rpx; + text-align: center; + margin-bottom: 15rpx; font-size: 30rpx; - margin-right: 30rpx; + margin-right: 15rpx; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; &:nth-of-type(3n){ margin-right: 0; } diff --git a/screen/src/api/index.js b/screen/src/api/index.js index 0056ec7..09598d0 100644 --- a/screen/src/api/index.js +++ b/screen/src/api/index.js @@ -101,25 +101,13 @@ // 瀹夐槻绠℃帶澶у睆 涓績鏁版嵁 export const getEnergyCenterData = (data) => { - return instance({ - url: 'visitsAdmin/cloudService/board/api/energy/centerData', - method: 'get', - data - }) + return request('visitsAdmin/cloudService/board/api/security/centerData', data) } // 瀹夐槻绠℃帶澶у睆 鍥尯瀹夐槻璁惧 export const getSecurityDeviceData = (data) => { - return instance({ - url: 'visitsAdmin/cloudService/board/api/energy/securityDeviceData', - method: 'get', - data - }) + return request('visitsAdmin/cloudService/board/api/security/securityDeviceData', data) } // 瀹夐槻绠℃帶澶у睆 璁垮婊炵暀鎯呭喌 export const getVisitRetentionData = (data) => { - return instance({ - url: 'visitsAdmin/cloudService/board/api/energy/visitRetentionData', - method: 'get', - data - }) + return request('visitsAdmin/cloudService/board/api/security/visitRetentionData', data) } \ No newline at end of file diff --git a/screen/src/components/percent.vue b/screen/src/components/percent.vue index aaf5112..fd8e94a 100644 --- a/screen/src/components/percent.vue +++ b/screen/src/components/percent.vue @@ -20,6 +20,7 @@ background-color: #172630; padding: 4px; height: 18px; + overflow: hidden; .plan{ height: 10px; } diff --git a/screen/src/views/LogisticsEfficiency.vue b/screen/src/views/LogisticsEfficiency.vue index f7dbdd1..cde3e9f 100644 --- a/screen/src/views/LogisticsEfficiency.vue +++ b/screen/src/views/LogisticsEfficiency.vue @@ -20,19 +20,23 @@ <div>绱鍑哄簱閲忕粺璁�</div> </div> <div class="tabs"> - <div class="tab active">鏈湀</div> + <div class="tab" :class="{ active: activeTab1 == 0 }" @click="tabClick1(0)">鏈湀</div> <div class="separate"></div> - <div class="tab">鏈勾</div> + <div class="tab" :class="{ active: activeTab1 == 1 }" @click="tabClick1(1)">鏈勾</div> </div> <img src="@/assets/images/title@2x.png" class="bg" alt="" /> </div> <div class="content_wrap"> <div class="content"> - <div class="num">1000000</div> - <div class="unit_wrap"> + <div class="num">{{ activeTab1 == 0 ? data1.monthOutTotal : data1.yearOutTotal }}</div> + <div class="unit_wrap" v-if="data1.monthOutTotalOnYear || data1.yearOutTotalOnYear"> <span style="color: #869CC9;">鍚屾瘮</span> - <img src="@/assets/images/ic_up.png" class="icon" alt=""> - <span>10.2%</span> + <img + v-if="(activeTab1 == 0 && data1.monthOutTotalOnYear > 0) || (activeTab1 == 1 && data1.yearOutTotalOnYear > 0)" + src="@/assets/images/ic_up.png" class="icon" alt=""> + <img v-else src="@/assets/images/ic_down.png" class="icon" alt=""> + <span>{{ activeTab1 == 0 ? Math.abs(data1.monthOutTotalOnYear) : Math.abs(data1.yearOutTotalOnYear) + }}%</span> </div> </div> <div class="train_wrap"> @@ -41,7 +45,8 @@ </div> <div class="total"> <span>绱鍑哄簱杞︽</span> - <span><strong>3900</strong><span class="unit">娆�</span></span> + <span><strong>{{ activeTab1 == 0 ? data1.monthOutTimes : data1.yearOutTimes }}</strong><span + class="unit">娆�</span></span> </div> </div> </div> @@ -50,14 +55,14 @@ <div class="com_header"> <div class="title"> <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> - <div>鏈堣兘鑰楀垎鏋�</div> + <div>杩愯緭浠诲姟鍒嗘瀽</div> </div> <div class="tabs"> - <div class="tab active">杩�7鏃�</div> + <div class="tab" :class="{ active: activeTab2 == 0 }" @click="tabClick2(0)">杩�7鏃�</div> <div class="separate"></div> - <div class="tab">鏈湀</div> + <div class="tab" :class="{ active: activeTab2 == 1 }" @click="tabClick2(1)">鏈湀</div> <div class="separate"></div> - <div class="tab">鏈勾</div> + <div class="tab" :class="{ active: activeTab2 == 2 }" @click="tabClick2(2)">鏈勾</div> </div> <img src="@/assets/images/title@2x.png" class="bg" alt="" /> </div> @@ -83,13 +88,14 @@ <span class="item addr">鏀惰揣鍗曚綅</span> <span class="item time">浠诲姟寮�濮嬫椂闂�</span> </div> - <div class="line" v-for="i in 7"> - <span class="item flag"><span class="flag_bg">鍑�</span></span> - <span class="item order">11</span> - <span class="item id_card">11</span> - <span class="item status">11</span> - <span class="item addr">11</span> - <span class="item time">11</span> + <div class="line" v-for="item in dataList3"> + <span class="item flag"><span :class="{ flag_bg: item.type == 1 || item.type == 3 }">{{ item.type == 1 + || item.type == 3 ? '鍑�' : '鍏�' }}</span></span> + <span class="item order">{{ item.billCode || item.contractNum }}</span> + <span class="item id_card">{{ item.carCodeFront }}</span> + <span class="item status">{{ statusMap[item.status].label }}</span> + <span class="item addr">{{ item.repertotyAddress }}</span> + <span class="item time" v-if="item.confirmTaskDate">{{ item.confirmTaskDate.slice(5, 16) }}</span> </div> </div> </div> @@ -98,12 +104,14 @@ <div class="center_box"> <div class="center_box_one"> <div class="tabs"> - <div class="tab active"> - <img src="@/assets/images/energy_ef/chuku_task_ac.png" alt=""> + <div class="tab" :class="{ active: activeTab4 == 0 }" @click="tabClick4(0)"> + <img v-if="activeTab4 == 0" src="@/assets/images/energy_ef/chuku_task_ac.png" alt=""> + <img v-else src="@/assets/images/energy_ef/chuku_task.png" alt=""> <span>鍑哄簱浠诲姟</span> </div> - <div class="tab"> - <img src="@/assets/images/energy_ef/ruku_task.png" alt=""> + <div class="tab" :style="{ color: activeTab4 == 1 ? '#387df0' : '#d8e4f8' }" @click="tabClick4(1)"> + <img v-if="activeTab4 == 1" src="@/assets/images/energy_ef/ruku_task_ac.png" alt=""> + <img v-if="activeTab4 == 0" src="@/assets/images/energy_ef/ruku_task.png" alt=""> <span>鍏ュ簱浠诲姟</span> </div> </div> @@ -112,21 +120,22 @@ <img src="@/assets/images/energy_ef/ic_renwuzongliang@2x.png" alt=""> <div class="content"> <div class="name">褰撳墠浠诲姟閲�</div> - <div class="num"><span>1000</span>涓囨敮</div> + <div class="num"><span>{{ data4.planTaskNum }}</span>涓囨敮</div> </div> </div> <div class="item"> <img src="@/assets/images/energy_ef/ic_wanchengrenwu@2x.png" alt=""> <div class="content"> <div class="name">褰撴棩瀹屾垚浠诲姟鎬婚噺</div> - <div class="num"><span class="today">1000</span>涓囨敮</div> + <div class="num"><span class="today">{{ data4.finishTaskNum }}</span>涓囨敮</div> </div> </div> <div class="item"> <img src="@/assets/images/energy_ef/ic_bili@2x.png" alt=""> <div class="content"> <div class="name">宸插畬鎴愭瘮渚�</div> - <div class="num"><span class="finish">1000</span>涓囨敮</div> + <div class="num" v-if="data4.finishTaskNum && data4.planTaskNum"><span class="finish">{{ (( + data4.finishTaskNum / data4.planTaskNum) * 100).toFixed(1) }}%</span>涓囨敮</div> </div> </div> </div> @@ -143,9 +152,9 @@ <div>鍑哄叆搴撴晥鐜�</div> </div> <div class="tabs"> - <div class="tab active">浠婃棩</div> + <div class="tab" :class="{ active: activeTab12 == 0 }" @click="tabClick12(0)">浠婃棩</div> <div class="separate"></div> - <div class="tab">鏈湀</div> + <div class="tab" :class="{ active: activeTab12 == 1 }" @click="tabClick12(1)">鏈湀</div> </div> <img src="@/assets/images/title@2x.png" class="bg" alt="" /> </div> @@ -154,14 +163,16 @@ <img src="@/assets/images/energy_ef/ic_chukuxiaolv@2x.png" alt=""> <div class="content"> <div class="name">鍑哄簱鏁堢巼</div> - <div class="num"><span>1000</span>涓囨敮/灏忔椂</div> + <div class="num"><span>{{ activeTab12 == 0 ? data1.todayInRata : data1.monthInRata }}</span>涓囨敮/灏忔椂 + </div> </div> </div> <div class="item"> <img src="@/assets/images/energy_ef/ic_rukuxiaolv@2x.png" alt=""> <div class="content"> <div class="name">鍏ュ簱鏁堢巼</div> - <div class="num"><span class="today">1000</span>涓囨敮/灏忔椂</div> + <div class="num"><span class="today">{{ activeTab12 == 0 ? data1.monthOutTotal : data1.yearOutTotal + }}</span>涓囨敮/灏忔椂</div> </div> </div> </div> @@ -177,32 +188,18 @@ <div class="content"> <div class="echart_wrap"> <div class="pie_text"> - <div class="fs30"><strong>300</strong></div> + <div class="fs30"><strong>{{ data5 }}</strong></div> <div>鍏ュ簱鏁伴噺</div> </div> <div class="echart" id="echart1"></div> </div> <div class="list"> - <div class="item"> + <div class="item" v-for="item, i in dataList5"> <div class="line"> - <div :style="{ background: colors[0] }" class="icon"></div> - <div class="text">鍚堣偉鍘�</div> + <div :style="{ background: colors[i] }" class="icon"></div> + <div class="text">{{ item.name }}</div> </div> - <div :style="{ color: colors[0] }" class="num">100涓囨敮 | 55%</div> - </div> - <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涓囨敮 | 55%</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涓囨敮 | 55%</div> + <div :style="{ color: colors[i] }" class="num">{{ item.value }}涓囨敮 | {{ item.rate }}%</div> </div> </div> </div> @@ -218,19 +215,15 @@ <div class="repertory"> <div class="use_ratio"> <div class="header"> - <div>搴撳瓨閲� <span class="num">80/100</span></div> - <div>鍒╃敤鐜� 88%</div> + <div>搴撳瓨閲� <span class="num">{{data1.stockTotal}}/{{data1.stockMax}}</span></div> + <div v-if="data1.stockTotal && data1.stockMax">鍒╃敤鐜噞{ ((data1.stockTotal / data1.stockMax) * 100).toFixed(0) }}%</div> </div> - <Percent :rate="80" /> + <Percent v-if="data1.stockTotal && data1.stockMax" :rate="((data1.stockTotal / data1.stockMax) * 100).toFixed(0)" /> </div> <div class="list"> - <div class="item"> - <div class="la">榛勫北(鏂板埗鐨栫儫)</div> - <div class="val">400涓囨敮</div> - </div> - <div class="item"> - <div class="la">榛勫北(鏂板埗鐨栫儫)</div> - <div class="val">400涓囨敮</div> + <div class="item" v-for="item in dataList6"> + <div class="la">{{ item.name }}</div> + <div class="val">{{item.num}}涓囨敮</div> </div> </div> </div> @@ -278,10 +271,10 @@ itemGap: 12, // icon: 'circle', right: '12px', - top: '0', - data: ['鎬诲簱瀛�', '褰撳墠搴撳瓨', '搴撳瓨鍒╃敤鐜�'], - itemWidth: 20, - itemHeight: 10, + top: '10px', + data: ['璁″垝浠诲姟閲�', '浠诲姟瀹屾垚閲�', '璁″垝浠诲姟鏁�'], + itemWidth: 12, + itemHeight: 4, textStyle: { color: '#fff', borderColor: '#fff' @@ -291,7 +284,7 @@ left: '3%', right: '4%', bottom: '3%', - top: '16%', + top: '18%', containLabel: true }, tooltip: { @@ -313,7 +306,7 @@ axisTick: { show: false, }, - data: ['7.1', '7.1', '7.1', '7.1', '7.1'], + data: dataList2.value.map(i => i.planDate), }], yAxis: [ { @@ -353,7 +346,7 @@ ], series: [ { - name: '璁″垝瀹屾垚鏁伴噺', + name: '璁″垝浠诲姟閲�', type: 'bar', barWidth: 10, barGap: '60%', @@ -379,7 +372,7 @@ }, barBorderRadius: [3, 3, 0, 0], }, - data: [900, 438, 485, 631, 689] + data: dataList2.value.map(i => i.planTaskNum) }, { name: '浠诲姟瀹屾垚閲�', @@ -407,7 +400,7 @@ }, barBorderRadius: [3, 3, 0, 0], }, - data: [438, 485, 631, 689, 900] + data: dataList2.value.map(i => i.finishTaskNum) }, { name: '璁″垝浠诲姟鏁�', @@ -423,7 +416,7 @@ position: 'top', color: '#fff', }, - data: [485, 631, 389, 224, 287] + data: dataList2.value.map(i => i.planTimes) } ] }) @@ -451,11 +444,7 @@ labelLine: { show: false }, - data: [ - { value: 1048, name: 'Search Engine' }, - { value: 735, name: 'Direct' }, - { value: 580, name: 'Email' } - ] + data: dataList5.value } ] } @@ -634,40 +623,87 @@ }) } -const dataList1 = ref([]) +const data1 = ref({}) +const activeTab1 = ref(0) +const activeTab12 = ref(0) +const tabClick1 = (val) => { + activeTab1.value = val +} +const tabClick12 = (val) => { + activeTab12.value = val +} const getData1 = () => { wlcenterData().then(res => { - const result = res + const result = res.data + data1.value = result }) } + const dataList2 = ref([]) +const activeTab2 = ref(0) +const tabClick2 = (val) => { activeTab2.value = val } const getData2 = () => { - wlcenterData().then(res => { - const result = res + wltransportMeasure({ queryType: activeTab2.value }).then(res => { + const result = res.data + dataList2.value = result + initEnergy() }) } + const dataList3 = ref([]) +const statusMap = [ + { value: 0, label: '寰呯‘璁�' }, + { value: 1, label: '寰呯鍒�' }, + { value: 2, label: '绛夊緟鍙彿' }, + { value: 3, label: '鍏ュ洯绛夊緟' }, + { value: 4, label: '鏈堝彴绛夊緟' }, + { value: 5, label: '浣滀笟涓�' }, + { value: 6, label: '浣滀笟瀹屾垚' }, + { value: 7, label: '杞Щ涓�' }, + { value: 8, label: '寮傚父鎸傝捣' }, + { value: 9, label: '宸叉巿鏉冪鍥�' }, + { value: 10, label: '宸茬鍥�' }, + { value: 11, label: '宸茶繃鍙�' }, + { value: 12, label: '宸插彇娑�' }, +] const getData3 = () => { - wlcenterData().then(res => { - const result = res + wlplatformJobList().then(res => { + const result = res.data + dataList3.value = result }) } -const dataList4 = ref([]) +const data4 = ref({}) +const activeTab4 = ref(0) +const tabClick4 = (val) => { activeTab4.value = val } const getData4 = () => { - wlcenterData().then(res => { - const result = res + wljobData({ queryType: activeTab4.value }).then(res => { + const result = res.data + data4.value = result }) } const dataList5 = ref([]) +const data5 = ref(0) const getData5 = () => { - wlcenterData().then(res => { - const result = res + wltotalInList().then(res => { + const result = res.data || [] + let count = 0 + dataList5.value = result.map(i => { + i.value = i.num + count += i.num + return i + }) + dataList5.value.forEach(i => { + i.rate = ((i.num / count) * 100).toFixed(0) + }) + data5.value = count + initEchart1() }) } const dataList6 = ref([]) const getData6 = () => { - wlcenterData().then(res => { - const result = res + wlstockList().then(res => { + const result = res.data + dataList6.value = result }) } onMounted(() => { @@ -677,9 +713,7 @@ getData4() getData5() getData6() - return - initEnergy() - initEchart1() + initMap() }) @@ -811,10 +845,6 @@ &:nth-of-type(2n) { background: rgba(27, 64, 97, 0.52); - - .flag_bg { - background: #01ABFE !important; - } } .item { @@ -828,7 +858,7 @@ flex: 3; display: flex; - .flag_bg { + span { width: 22px; height: 22px; display: flex; @@ -838,6 +868,10 @@ background: #00F2F3; font-weight: 500; color: #001B3C; + } + + .flag_bg { + background: #4eacf6; } } @@ -876,6 +910,7 @@ display: flex; align-items: center; margin-right: 30px; + cursor: pointer; img { width: 20px; @@ -900,12 +935,13 @@ .static_wrap { display: flex; - justify-content: space-between; align-items: center; margin: 30px 0 54px; .item { display: flex; + justify-content: center; + flex: 1; img { width: 68px; @@ -959,7 +995,6 @@ .echart_map { width: 100%; height: 100%; - border: 1px solid; } } } @@ -1032,7 +1067,6 @@ justify-content: center; align-items: center; height: 200px; - border: 1px solid; .echart_wrap { position: relative; @@ -1118,7 +1152,9 @@ .list { margin-top: 22px; - + height: 240px; + overflow: auto; + scrollbar-width: none; .item { width: 100%; height: 36px; @@ -1241,6 +1277,10 @@ margin: 0 6px; } + .tab { + cursor: pointer; + } + .active { color: #0094eb; } diff --git a/screen/src/views/SecurityControl.vue b/screen/src/views/SecurityControl.vue index e2bcac9..a8f450a 100644 --- a/screen/src/views/SecurityControl.vue +++ b/screen/src/views/SecurityControl.vue @@ -28,25 +28,26 @@ </div> <div class="num_wrap"> <div class="la">鎬昏溅浣嶏細</div> - <div class="val">100</div> + <div class="val">{{ data.parkingLotTotal }}</div> </div> </div> <div class="stall_static"> <div class="residue"> <div class="la">鍓╀綑杞︿綅</div> - <div class="val">50</div> + <div class="val">{{ data.freeParkingLot }}</div> </div> <div class="total"> <div class="la">杞︿綅鎬绘暟</div> - <div class="val">50</div> + <div class="val">{{ data.parkingLotTotal }}</div> </div> <div class="rate"> <div class="la"> <span>杞︿綅浣跨敤鐜�</span> - <span class="num">50%</span> + <span v-if="data.inParkCarTotal && data.parkingLotTotal" class="num">{{ ((data.inParkCarTotal / + data.parkingLotTotal) * 100).toFixed(0) }}%</span> </div> <div class="val"> - <Percent :rate="50" /> + <Percent :rate="((data.inParkCarTotal / data.parkingLotTotal) * 100).toFixed(0)" /> </div> </div> </div> @@ -59,22 +60,22 @@ <div class="private_car"> <div class="item"> <div class="name">鍛樺伐杞﹁締</div> - <div class="num">20</div> + <div class="num">{{ data.internalCarTotal }}</div> </div> <div class="item"> <div class="name">鐩稿叧鏂硅溅杈�</div> - <div class="num num2">20</div> + <div class="num num2">{{ data.relatedCarTotal }}</div> </div> <div class="item"> <div class="name">鏉ヨ杞﹁締</div> - <div class="num num3">20</div> + <div class="num num3">{{ data.visitCarTotal }}</div> </div> </div> <div class="section"> - <div class="item"></div> - <div class="item"></div> - <div class="item"></div> + <div class="item" :style="{ flex: data.internalCarTotal }"></div> + <div class="item" :style="{ flex: data.relatedCarTotal }"></div> + <div class="item" :style="{ flex: data.visitCarTotal }"></div> </div> <div class="second_title"> <div class="title"> @@ -85,32 +86,19 @@ <div class="car_static"> <div class="echart_wrap"> <div class="pie_text"> - <div class="fs30"><strong>300</strong></div> + <div class="fs30"><strong v-if="data.visitJobCarTotal">{{ data.internalJobCarTotal + + data.relatedJobCarTotal + data.visitJobCarTotal }}</strong></div> <div>璐ц溅</div> </div> <div class="echart" id="echart1"></div> </div> <div class="list"> - <div class="item"> + <div class="item" v-for="item, i in dataList1"> <div class="line"> - <div :style="{ background: colors[0] }" class="icon"></div> - <div class="text">鍐呰繍杞﹁締</div> + <div :style="{ background: colors[i] }" class="icon"></div> + <div class="text">{{ item.name }}</div> </div> - <div :style="{ color: colors[0] }" class="num">100</div> - </div> - <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 :style="{ color: colors[i] }" class="num">{{ item.value }}</div> </div> </div> </div> @@ -125,7 +113,7 @@ <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt=""> </div> <div class="num_wrap"> - <div class="num">200</div> + <div class="num">{{ data.inParkTotal }}</div> <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt=""> </div> </div> @@ -135,7 +123,7 @@ <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt=""> </div> <div class="num_wrap"> - <div class="num">200</div> + <div class="num">{{ data.inParkCarTotal }}</div> <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt=""> </div> </div> @@ -145,7 +133,7 @@ <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt=""> </div> <div class="num_wrap"> - <div class="num">200</div> + <div class="num">{{ data.deviceTotal }}</div> <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt=""> </div> </div> @@ -155,7 +143,7 @@ <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt=""> </div> <div class="num_wrap"> - <div class="num">200</div> + <div class="num">{{ data.errTotal }}</div> <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt=""> </div> </div> @@ -182,21 +170,24 @@ <img src="@/assets/images/SecurityControl/staff_ic_neibu@2x.png" alt=""> <div class="content"> <div class="name">鍐呴儴鍛樺伐</div> - <div class="num"><span>1000</span> | 66.6%</div> + <div class="num" v-if="data.internalTotal && data.inParkTotal"><span>{{ data.internalTotal }}</span> | + {{ ((data.internalTotal / data.inParkTotal) * 100).toFixed(1) }}%</div> </div> </div> <div class="item"> <img src="@/assets/images/SecurityControl/staff_ic_xiangguanfang@2x.png" alt=""> <div class="content"> <div class="name">闀挎湡鐩稿叧鏂�</div> - <div class="num today"><span>1000</span> | 66.6%</div> + <div class="num today" v-if="data.relatedTotal && data.inParkTotal"><span>{{ data.relatedTotal + }}</span> | {{ ((data.relatedTotal / data.inParkTotal) * 100).toFixed(1) }}%</div> </div> </div> <div class="item"> <img src="@/assets/images/SecurityControl/staff_ic_fangke@2x.png" alt=""> <div class="content"> <div class="name">鍦ㄥ洯璁垮</div> - <div class="num finish"><span>1000</span> | 66.6%</div> + <div class="num finish" v-if="data.visitTotal && data.inParkTotal"><span>{{ data.visitTotal }}</span> + | {{ ((data.visitTotal / data.inParkTotal) * 100).toFixed(1) }}%</div> </div> </div> </div> @@ -351,26 +342,21 @@ <div class="sa_static"> <div class="echart_wrap"> <div class="pie_text"> - <div class="fs30"><strong>300</strong></div> + <div class="fs30"><strong v-if="dataListT2 && dataListT2.length == 2">{{ dataListT2[0].value + + dataListT2[1].value }}</strong></div> <div>鎬昏</div> </div> <div class="echart" id="echart2"></div> </div> <div class="list"> - <div class="item"> + <div class="item" v-for="item, i in dataListT2"> <div class="line"> - <div :style="{ background: colors[1] }" class="icon"></div> - <div class="text">鍦ㄧ嚎</div> + <div :style="{ background: colors[i] }" class="icon"></div> + <div class="text">{{ item.name }}</div> </div> - <div :style="{ color: colors[1] }" class="num">100</div> + <div :style="{ color: colors[i] }" class="num">{{ item.value }} | {{ item.rate }}%</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"> @@ -381,22 +367,18 @@ <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> + <template v-for="item, i in dataList2"> + <div class="line"> + <div class="driver">{{ item.deviceType }}</div> + <div>{{ item.totalNum }}</div> + <div>{{ item.onlineNum }}</div> + <div>{{ item.offlineDeviceNum }}</div> + <div v-if="item.onlineNum && item.totalNum">{{ ((item.onlineNum / item.totalNum) * 100).toFixed(0) }}% + </div> + </div> + <div class="separate"></div> + </template> + </div> </div> </div> @@ -414,18 +396,14 @@ <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> + <template v-for="item in dataList3"> + <div class="line"> + <div>{{ item.name }}</div> + <div class="dept">{{ item.companyName }}</div> + <div class="dept">{{ item.timeOutMinuteT }}</div> + </div> + <div class="separate"></div> + </template> </div> </div> </div> @@ -438,11 +416,12 @@ import VScaleScreen from 'v-scale-screen' import Percent from '@/components/percent.vue' import dayjs from 'dayjs' +import duration from 'dayjs/plugin/duration' +dayjs.extend(duration) import * as echarts from 'echarts' import { getEnergyCenterData, getSecurityDeviceData, getVisitRetentionData } from '@/api' -const colors = ['#FEAF01', '#01ABFE', '#51F9E4'] const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',] const date = ref(dayjs().format('YYYY.MM.DD')) const week = ref(weekMap[new Date().getDay()]) @@ -515,8 +494,18 @@ myChart.resize() }) } + +const dataList1 = ref([]) const initEchart1 = () => { const myChart = echarts.init(document.getElementById('echart1')) + const temp = [] + temp.push({ name: '鍐呰繍杞﹁締', value: data.value.internalJobCarTotal }) + temp.push({ name: '澶栧崗杩愯緭杞﹁締', value: data.value.relatedJobCarTotal }) + temp.push({ name: '甯傚叕鍙稿嵏璐ц溅杈�', value: data.value.visitJobCarTotal }) + temp.sort((a, b) => { + return a.value - b.value + }) + dataList1.value = temp const option = { series: [ { @@ -534,11 +523,7 @@ labelLine: { show: false }, - data: [ - { value: 1048, name: 'Search Engine' }, - { value: 735, name: 'Direct' }, - { value: 580, name: 'Email' } - ] + data: temp } ] } @@ -547,6 +532,8 @@ myChart.resize() }) } + +const colors = ['#FEAF01', '#01ABFE', '#51F9E4'] const initEchart2 = () => { const myChart = echarts.init(document.getElementById('echart2')) const option = { @@ -566,11 +553,7 @@ labelLine: { show: false }, - data: [ - { value: 1048, name: 'Search Engine' }, - { value: 735, name: 'Direct' }, - { value: 580, name: 'Email' } - ] + data: dataListT2.value } ] } @@ -723,14 +706,59 @@ myChart.resize() }) } -const ininDate = () => { - getEnergyCenterData() + +const data = ref({}) +const getData1 = () => { + getEnergyCenterData().then(res => { + const result = res.data + data.value = result + initEchart1() + }) } + +const dataList2 = ref([]) +const dataListT2 = ref([]) +const getData2 = () => { + getSecurityDeviceData().then(res => { + const result = res.data + let temp = [] + let online = 0 + let outline = 0 + dataList2.value = result.map(item => { + online += item.onlineNum + outline += item.offlineDeviceNum + return item + }) + if (online >= outline) { + temp.push({ name: '鍦ㄧ嚎', value: online, rate: ((online / (online + outline)) * 100).toFixed(1) }) + temp.push({ name: '绂荤嚎', value: outline, rate: ((outline / (online + outline)) * 100).toFixed(1) }) + } else { + temp.push({ name: '绂荤嚎', value: outline, rate: ((outline / (online + outline)) * 100).toFixed(1) }) + temp.push({ name: '鍦ㄧ嚎', value: online, rate: ((online / (online + outline)) * 100).toFixed(1) }) + } + + dataListT2.value = temp + initEchart2() + }) +} + +const dataList3 = ref([]) +const getData3 = () => { + getVisitRetentionData().then(res => { + const result = res.data || [] + dataList3.value = result.map(i => { + i.timeOutMinuteT = dayjs.duration(i.timeOutMinute * 60 * 1000).format('HH:mm') + return i + }) + }) +} + onMounted(() => { - ininDate() + getData1() + getData2() + getData3() initEchart3() - initEchart1() - initEchart2() + // initEchart1() }) @@ -1293,6 +1321,7 @@ flex: 1; margin-right: 20px; position: relative; + .content { display: flex; @@ -1406,9 +1435,11 @@ background: linear-gradient(180deg, #021F4A 0%, #054281 100%), linear-gradient(180deg, #011738 0%, rgba(5, 66, 129, 0.26) 100%), #00141F; border-radius: 2px; border: 1px solid rgba(12, 153, 236, 0.68); - .icon{ + + .icon { width: 30px; } + .top { width: 12px; height: 12px; diff --git a/screen/vite.config.js b/screen/vite.config.js index 1afa5c0..4074074 100644 --- a/screen/vite.config.js +++ b/screen/vite.config.js @@ -25,7 +25,7 @@ server: { proxy: { "/gateway_interface": { - // target: "http://192.168.0.103:10010", + // target: "http://192.168.0.138:10010", // target: "http://10.50.250.253:8088/gateway_interface", target: "http://192.168.0.173/gateway_interface", changeOrigin: true, -- Gitblit v1.9.3