admin/.env.test
@@ -1,4 +1,4 @@ # 测试环境配置 NODE_ENV = 'production' VUE_APP_API_URL = 'http://10.50.250.178:8088/gateway_interface/' VUE_APP_API_URL = 'http://192.168.5.13/gateway_interface' admin/src/api/platform/index.js
@@ -8,7 +8,11 @@ export function platformCallList(data) { return request.post('/visitsAdmin/cloudService/business/platform/platformCallList', data) } // 叫号 // 入园叫号 export function platformInPark(data) { return request.post('/visitsAdmin/cloudService/business/platform/platformInPark', data) } // 月台叫号 export function platformCallNumber(data) { return request.post('/visitsAdmin/cloudService/business/platform/platformCallNumber', data) } admin/src/api/workbench/index.js
@@ -2,7 +2,7 @@ // 顶部导航 export function getAppHeaderNav (data) { return request.get('/visitsAdmin/cloudService/business/hksync/getHkMenuLink', data) return request.get('/visitsAdmin/cloudService/business/hksync/getHkMenuLink?type='+ data) } // 主体数据 export function getWorkbenchBody (data) { admin/src/components/common/CommonHeader.vue
@@ -8,10 +8,10 @@ <div>服务中心</div> <div class="linellae"></div> </div> <div class="item" @click="getHeaderNav('')">安防中心</div> <div class="item" @click="getHeaderNav('')">消防中心</div> <div class="item" @click="getHeaderNav('')">能管中心</div> <div class="item" @click="getHeaderNav('')">驾驶舱</div> <div class="item" @click="getHeaderNav('0')">安防中心</div> <div class="item" @click="getHeaderNav('1')">消防中心</div> <div class="item" @click="getHeaderNav('2')">能管中心</div> <div class="item" @click="getHeaderNav('3')">驾驶舱</div> </div> <!-- <div class="title-en">Diagnosis of Intelligent Manufacturing Integrated Service Platfrom</div> --> </div> @@ -155,11 +155,9 @@ this.$refs.changePwdDataForm.resetFields() }) }, getHeaderNav(){ getAppHeaderNav({ type: '' }).then(res => { this.headerNavData = res getHeaderNav(type){ getAppHeaderNav(type).then(res => { window.open(res, "_blank"); }) }, // 确定修改密码 admin/src/views/index.vue
@@ -65,7 +65,7 @@ <div class="funcs"> <div class="home_title">常用功能</div> <div class="list"> <div v-for="item in funcList" :key="item.name" class="item"> <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> @@ -227,47 +227,56 @@ import { weeks } from '@/utils/config' import { getWorkbenchBody, getWorkbenchHead getWorkbenchHead, getAppHeaderNav } from '@/api' const colors = ['#52a4f7', '#7678f7', '#5fc6d5'] export default { data () { data() { return { colors, nowDate: '', nowWeek: '', funcList: [ { name: '访客报备', path: '', url: require('@/assets/icons/home_func1.png') }, { name: '隐患随手拍', path: '', url: require('@/assets/icons/home_func2.png') }, { name: '预约会议室', path: '', url: require('@/assets/icons/home_func3.png') }, { 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_func4.png') } ] } }, computed: { userInfo(){ userInfo() { return this.$store.state.userInfo } }, created () { created() { this.updateDate() setInterval(() => { this.updateDate() }, 1000 * 60 * 60) }, mounted () { mounted() { this.initData() }, methods: { updateDate () { funcClick(item) { if (item.name == '考勤工作台') { getAppHeaderNav(4).then(res => { window.open(res, "_blank") return }) } this.$router.push(item.path) }, updateDate() { this.nowDate = dayjs().format('YYYY年M月D日') this.nowWeek = weeks[new Date().getDay()] }, initData () { initData() { this.getWorkBody() //主体数据 this.getWorkHead() //主体数据 this.initEchart1() this.initEchart2() this.initEchart3() @@ -279,7 +288,7 @@ getWorkHead() { getWorkbenchHead() }, initEchart1 () { initEchart1() { const myChart = echarts.init(document.getElementById('echart1')) const option = { series: [ @@ -307,7 +316,7 @@ myChart.resize() }) }, initEchart2 () { initEchart2() { const myChart = echarts.init(document.getElementById('echart2')) myChart.setOption({ grid: { @@ -362,7 +371,7 @@ myChart.resize() }) }, initEchart3 () { initEchart3() { const myChart = echarts.init(document.getElementById('echart3')) myChart.setOption({ tooltip: { @@ -461,7 +470,7 @@ myChart.resize() }) }, initEchart4 () { initEchart4() { const myChart = echarts.init(document.getElementById('echart4')) myChart.setOption({ tooltip: { @@ -568,23 +577,28 @@ 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; justify-content: space-between; .card { flex: 1; height: 187px; @@ -592,16 +606,20 @@ 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%); } &: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; @@ -609,16 +627,19 @@ align-items: center; padding: 20px 20px 12px; border-bottom: 1px solid rgba(255, 255, 255, 0.2); img { width: 40px; height: 40px; } .num { font-weight: 600; font-size: 30px; margin-top: 12px; } } .content { height: 82px; display: flex; @@ -629,20 +650,25 @@ } } } .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; @@ -651,9 +677,11 @@ } } } .app_side { width: 408px; margin-left: 10px; .task { background: #fff; border-radius: 2px; @@ -661,6 +689,7 @@ padding: 20px; height: 346px; margin-bottom: 10px; .header { .num { position: relative; @@ -675,27 +704,33 @@ 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; @@ -711,12 +746,14 @@ } } } .warnning { background: #fff; border-radius: 2px; border: 1px solid #eeeeee; padding: 20px; height: 508px; .header { .num { position: relative; @@ -731,13 +768,16 @@ border-radius: 8px; margin-left: 13px; } .more { font-size: 13px; color: #999999; } } .list { padding-top: 6px; .item { margin-top: 10px; padding: 15px; @@ -745,29 +785,35 @@ 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{ .btn { margin-left: 10px; width: 58px; text-align: center; @@ -784,6 +830,7 @@ } } } .static_wrap { .wrap { background: #fff; @@ -792,30 +839,37 @@ 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; .echart_wrap { position: relative; .pie_text { position: absolute; left: 50%; @@ -824,16 +878,20 @@ 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; @@ -841,6 +899,7 @@ margin-right: 6px; background: linear-gradient(270deg, #29aeff 0%, #207ff7 100%); } .text { margin-right: 6px; } @@ -850,6 +909,7 @@ } } } .main_home { background: #f4f7fc; position: relative; @@ -858,6 +918,7 @@ overflow: auto; padding: 20px; padding-top: 92px; .home_header { position: absolute; top: 0; admin/src/views/platform/LogisticsRecord/leaveAuth.vue
@@ -47,7 +47,7 @@ <el-table-column label="操作" align="center" fixed="right" min-width="100" show-overflow-tooltip> <template v-slot="scope"> <el-button type="text" v-permissions="['business:platformbooks:detail']" @click="handleAuth(scope.row)">离远授权</el-button> @click="handleAuth(scope.row)">离园授权</el-button> </template> </el-table-column> </el-table> @@ -171,12 +171,11 @@ }) }, handleAuth(row) { this.$confirm('是否对当前运单的车辆进行离园授权,是则进行离园授权?', '提示', { this.$prompt('备注', '离园授权', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { platformPowerLevel({ jobId: row.id }).then(res => { }).then(({ remark }) => { platformPowerLevel({ jobId: row.id,remark }).then(res => { Message.success('离园授权成功') this.getList() }) admin/src/views/platform/LogisticsRecord/operation.vue
@@ -55,6 +55,8 @@ import UploadFaceImg from '@/components/common/UploadFaceImg' import { Message } from 'element-ui' import dayjs from 'dayjs' import duration from 'dayjs/plugin/duration' dayjs.extend(duration); export default { components: { Pagination, @@ -146,6 +148,7 @@ this.list.forEach(item => { item.inTypeTemp = item.inType == 0 ? '整托盘' : '件烟' item.taskOrigin = 'WMS获取' item.workTime = dayjs.duration(item.workTime, 'seconds').format('H时m分s秒'); }) this.pagination.total = res.total || 0 }, () => { admin/src/views/platform/LogisticsRecord/operationCity.vue
@@ -56,6 +56,8 @@ import UploadFaceImg from '@/components/common/UploadFaceImg' import { Message } from 'element-ui' import dayjs from 'dayjs' import duration from 'dayjs/plugin/duration' dayjs.extend(duration); export default { components: { Pagination, @@ -147,6 +149,7 @@ this.list.forEach(item => { item.inTypeTemp = item.inType == 0 ? '整托盘' : '件烟' item.taskOrigin = 'WMS获取' item.workTime = dayjs.duration(item.workTime, 'seconds').format('H时m分s秒'); }) this.pagination.total = res.total || 0 }, () => { admin/src/views/platform/LogisticsRecord/waybill.vue
@@ -39,10 +39,10 @@ </el-table-column> <el-table-column prop="name" label="操作" min-width="120" align="center" fixed="right" show-overflow-tooltip> <template v-slot="scope"> <el-button type="text" class="red" v-permissions="['business:platformjob:delete']" <el-button v-if="scope.row.status == '12'" type="text" class="red" v-permissions="['business:platformjob:delete']" @click="handleDel(scope.row)">删除</el-button> <el-button type="text" v-permissions="['business:platformjob:query']" @click="handleDetail(scope.row)">预约详情</el-button> <el-button v-if="scope.row != 12" type="text" v-permissions="['business:platformjob:query']" @click="handleDetail(scope.row)">运单详情</el-button> </template> </el-table-column> </el-table> @@ -143,8 +143,8 @@ model: { ...filters, jobType: '0', beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null, beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null, createDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null, createDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null, }, capacity: pagination.pageSize, page: page || pagination.page, admin/src/views/platform/components/PlatformQueuing.vue
@@ -1,18 +1,10 @@ <template> <GlobalWindow :title="'月台叫号-'+title" :visible.sync="isShowModal" :showConfirm="false" width="800px" > <GlobalWindow :title="callType == 1 ? '叫号入园-' + title : '月台叫号-' + title" :visible.sync="isShowModal" :showConfirm="false" width="800px"> <div class="queuing_modal"> <div class="df_ac mb20"> <span>搜索车辆:</span> <el-input class="flex1 mr20" v-model="carCodeFront" placeholder="请输入车牌号" ></el-input> <el-input class="flex1 mr20" v-model="carCodeFront" placeholder="请输入车牌号"></el-input> <el-button type="primary" @click="getList">查找</el-button> <el-button @click="reset">重置</el-button> </div> @@ -34,7 +26,7 @@ </div> <div v-else class="ite"> <span>运输单号:</span> <span>{{ item.code }}</span> <span>{{ item.billCode }}</span> </div> <div class="ite"> <span>驾驶员:</span> @@ -60,11 +52,7 @@ </div> </div> </div> <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="pagination" > <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="pagination"> </pagination> </div> </GlobalWindow> @@ -73,7 +61,7 @@ <script> import GlobalWindow from '@/components/common/GlobalWindow' import Pagination from '@/components/common/Pagination' import { platformCallList, platformCallNumber } from '@/api' import { platformCallList, platformCallNumber, platformInPark } from '@/api' import { statusMap } from '../config' import { Message } from 'element-ui' export default { @@ -81,7 +69,7 @@ GlobalWindow, Pagination }, data () { data() { return { statusMap, isShowModal: false, @@ -93,24 +81,35 @@ }, carCodeFront: '', title: '', callType: '1', activePlat: {}, dataList: [] } }, methods: { handleCall (item) { const activePlatform = this.activePlat platformCallNumber({ platformId: activePlatform.id, jobId: item.id }).then(res => { Message.success('叫号成功') this.$emit('success') this.getList() }) handleCall(item) { const { activePlat, callType } = this if (callType == 1) { // 入园叫号 platformInPark({ jobId: item.id, platformId: activePlat.id }).then(() => { Message.success('叫号成功') this.getList() }) } else { platformCallNumber({ platformId: activePlat.id, jobId: item.id }).then(res => { Message.success('叫号成功') this.$emit('success') this.getList() }) } }, getList () { const { activePlat, pagination, carCodeFront } = this getList() { const { activePlat, pagination, carCodeFront, callType } = this platformCallList({ model: { callType: '2', platformId: activePlat.id, carCodeFront }, model: { callType, platformId: activePlat.id, carCodeFront }, page: pagination.page, capacity: pagination.pageSize }).then(res => { @@ -118,21 +117,21 @@ this.pagination.total = res.total }) }, reset () { reset() { this.carCodeFront = '' this.pagination.page = 1 this.pagination.pageSize = 10 this.getList() }, handleSizeChange (e) { handleSizeChange(e) { this.pagination.pageSize = e this.getList() }, handlePageChange (e) { handlePageChange(e) { this.pagination.page = e this.getList() }, handleSub () { handleSub() { const { param } = this this.subLoading = true PlatformEdit({ @@ -153,8 +152,10 @@ <style lang="scss" scoped> @import "@/assets/style/variables.scss"; .queuing_modal { padding: 10px 30px; .list { .item { background: #f4fafb; @@ -162,8 +163,10 @@ border: 1px solid #dfe2e8; margin-bottom: 10px; padding: 16px; .head { margin-bottom: 15px; .plate { width: 90px; text-align: center; @@ -174,9 +177,11 @@ border: 1px solid #279baa; background-color: #fff; } .status { color: $primaryColor; } .code { display: flex; font-weight: 600; @@ -188,24 +193,29 @@ border-radius: 4px; border: 1px solid $primaryColor; padding-right: 4px; span { &:nth-of-type(1) { background: $primaryColor; padding: 0 8px; color: #fff; } &:nth-of-type(2) { padding-left: 4px; } } } } .info { display: flex; flex-wrap: wrap; .ite { width: 33.3%; margin-bottom: 8px; span { &:nth-child(1) { color: #666666; @@ -213,6 +223,7 @@ } } } .footer { .detail { color: $primaryColor; admin/src/views/platform/index.vue
@@ -2,13 +2,8 @@ <div class="main_app"> <div class="mb20 main_header"> <div class="platgroup_tabs"> <div class="tab" :class="{ active: activeGroup.id === item.id }" @click="platgroupClick(item)" v-for="(item, i) in PlatGroupList" :key="i" > <div class="tab" :class="{ active: activeGroup.id === item.id }" @click="platgroupClick(item)" v-for="(item, i) in PlatGroupList" :key="i"> {{ item.name }} </div> <!-- <el-tabs v-model="activeGroup.id" @tab-click="platgroupClick"> @@ -20,9 +15,7 @@ /> </el-tabs> --> </div> <el-button type="primary" class="ml20" @click="handleSet" >配置月台</el-button > <el-button type="primary" class="ml20" @click="handleSet">配置月台</el-button> </div> <!-- --> <div v-if="activeGroup.platformList" class="platform_list"> @@ -34,38 +27,23 @@ </div> <div class="name">{{ item.name }}</div> <div class="ite"> <span class="placeholder9">作业:</span ><span>{{ item.platformWorkVO.workNum }}</span> <span class="placeholder9">作业:</span><span>{{ item.platformWorkVO.workNum }}</span> </div> <div class="ite"> <span class="placeholder9">已叫:</span ><span>{{ item.platformWorkVO.callNum }}</span> <span class="placeholder9">已叫:</span><span>{{ item.platformWorkVO.callNum }}</span> </div> <div class="ite"> <span class="placeholder9">等待:</span ><span>{{ item.platformWorkVO.waitNum }}</span> <span class="placeholder9">等待:</span><span>{{ item.platformWorkVO.waitNum }}</span> </div> <div class="ite"> <span class="placeholder9">异常:</span ><span class="red">{{ item.platformWorkVO.exceptionNum }}</span> <span class="placeholder9">异常:</span><span class="red">{{ item.platformWorkVO.exceptionNum }}</span> </div> </div> <el-button type="primary" @click="handleQueuing(item)"> <div class="df_ac"> <img class="shengyin" src="@/assets/icons/shengyin.png" alt=""> <span>叫号</span> </div> </el-button> <el-button @click="handleQueuing(item, 1)">叫号入园</el-button> <el-button type="primary" @click="handleQueuing(item, 2)">月台叫号</el-button> </div> <div class="list" v-if="item.platformWorkVO && item.platformWorkVO.platformJobList" > <div class="info" v-for="task in item.platformWorkVO.platformJobList" :key="task.id" > <div class="list" v-if="item.platformWorkVO && item.platformWorkVO.platformJobList"> <div class="info" :class="{err: task.status == 8}" v-for="task in item.platformWorkVO.platformJobList" :key="task.id"> <div class="line"> <div class="left"> <div v-if="task.carCodeFront" class="code"> @@ -76,18 +54,14 @@ </div> </div> <div class="right"> <div class="status" v-if="task.status != 4 && task.status != 5" :class="{ red: task.status == 8 }" > <div class="status_item" v-if="task.status != 4 && task.status != 5" :class="{ red: task.status == 8 }"> <span class="lab">{{ statusMap[task.status] }}</span> </div> <div class="status" v-if="task.status == 4"> <div class="status_item" v-if="task.status == 4"> <span class="lab">叫号中</span> {{ task.callDateTemp }} </div> <div class="status scs" v-if="task.status == 5"> <span class="lab">已作业</span> {{ task.startDateTemp }} <div class="status_item scs" v-if="task.status == 5"> <span class="lab">作业中</span> {{ task.startDateTemp }} </div> </div> </div> @@ -98,13 +72,13 @@ </div> <div v-else class="ite"> <span>运输单号:</span> <span>{{ task.code }}</span> <span>{{ task.billCode }}</span> </div> <div class="ite"> <div class="ite siji"> <span>驾驶员:</span> <span>{{ task.driverName }}</span> </div> <div class="ite"> <div class="ite phone"> <span>手机号:</span> <span>{{ task.drivierPhone }}</span> </div> @@ -120,66 +94,38 @@ </div> <div class="line"> <div v-if="task.type != 4" class="left"> <span class="primaryColor pointer" @click="handleDetail" >运单详情</span > <span class="primaryColor pointer" @click="handleDetail">运单详情</span> </div> <div v-else></div> <div class="right"> <el-button v-if="task.status == 5" plain @click="handleErr(task)" >异常挂起</el-button > <el-button v-if="task.status == 5 || task.status == 8" plain @click="handleTransform(item, task)" >转移月台</el-button > <el-button v-if="task.status == 4" plain @click="handlePass(task)" >过号</el-button > <el-button v-if="task.status == 5 || task.status == 8" type="primary" @click="handleFinish(task)" >作业完成</el-button > <el-button v-if="task.status == 4" type="primary" @click="handleWork(task)" >开始作业</el-button > <el-button v-if="task.status == 5" plain @click="handleErr(task)">异常挂起</el-button> <el-button v-if="task.status == 5 || task.status == 8" plain @click="handleTransform(item, task)">转移月台</el-button> <el-button v-if="task.status == 4" plain @click="handlePass(task)">过号</el-button> <el-button v-if="task.status == 5 || task.status == 8" type="primary" @click="handleFinish(task)">作业完成</el-button> <el-button v-if="task.status == 4" type="primary" @click="handleWork(task)">开始作业</el-button> </div> </div> </div> </div> <div v-if="!item.platformWorkVO.platformJobList || item.platformWorkVO.platformJobList.length == 0" class="empty_plat"> <div v-if="!item.platformWorkVO.platformJobList || item.platformWorkVO.platformJobList.length == 0" class="empty_plat"> <img src="@/assets/images/default_nodata.png" alt=""> <div>暂无车辆</div> </div> </div> </div> <!-- 配置显示月台 --> <GlobalWindow title="配置显示月台" :visible.sync="isShowSet" :confirm-working="setLoading" @confirm="handleSetSub" width="560px" > <GlobalWindow title="配置显示月台" :visible.sync="isShowSet" :confirm-working="setLoading" @confirm="handleSetSub" width="560px"> <div class="set_modal"> <div class="mb10" v-for="group in PlatGroupList" :key="group.id"> <div class="title">{{group.name}}</div> <div class="title">{{ group.name }}</div> <div class="list"> <div class="item" @click="platformSetClick(item.id)" :class="{ active: item.showConfig }" v-for="item in group.platformList" :key="item.id"> <div>{{item.name}}</div> <div class="item" @click="platformSetClick(item.id)" :class="{ active: item.showConfig }" v-for="item in group.platformList" :key="item.id"> <div>{{ item.name }}</div> <div v-if="item.showConfig" class="bg"></div> <i v-if="item.showConfig" class="el-icon-check scs"></i> </div> @@ -190,33 +136,14 @@ <!-- 运单详情 --> <!-- --> <!-- 叫号 --> <PlatformQueuing ref="PlatformQueuingRef" v-if="isShowQueuing" @success="getPlatGroupList" @close="isShowQueuing = false" /> <WaybillDetail ref="WaybillDetailRef" v-if="isShowDetail" @success="getList" @close="isShowDetail = false" /> <el-dialog title="转移月台" :visible.sync="isShowTransform" width="500px" style="margin-top: 12vh" > <PlatformQueuing ref="PlatformQueuingRef" v-if="isShowQueuing" @success="getPlatGroupList" @close="isShowQueuing = false" /> <WaybillDetail ref="WaybillDetailRef" v-if="isShowDetail" @success="getList" @close="isShowDetail = false" /> <el-dialog title="转移月台" :visible.sync="isShowTransform" width="500px" style="margin-top: 12vh"> <div class="df_ac"> <span>选择转移到的月台:</span> <el-select v-model="activePlatId"> <el-option v-for="item in activeGroup.platformList" :key="item.id" :label="item.name" :value="item.id" > <el-option v-for="item in activeGroup.platformList" :key="item.id" :label="item.name" :value="item.id"> </el-option> </el-select> </div> @@ -254,7 +181,7 @@ WaybillDetail, GlobalWindow }, data () { data() { return { statusMap, activeGroup: {}, @@ -275,29 +202,29 @@ timer: null } }, created () { created() { this.getPlatGroupList() // this.getList() }, methods: { handleWork (item) { handleWork(item) { platformBeginWork({ jobId: item.id }).then(res => { Message.success('已开始作业') this.getPlatGroupList() }) }, handleFinish (item) { handleFinish(item) { platformFinishWork({ jobId: item.id }).then(res => { Message.success('完成作业') this.getPlatGroupList() }) }, handleTransform (item, task) { handleTransform(item, task) { this.activePlatId = item.id this.activetaskId = task.id this.isShowTransform = true }, transformSub () { transformSub() { const { activePlatId, activetaskId } = this platformMove({ platformId: activePlatId, jobId: activetaskId }).then(res => { Message.success('转移月台成功') @@ -305,8 +232,8 @@ this.getPlatGroupList() }) }, handlePass (item) { this.$confirm('您确认要对该任务进行过号吗', '温馨提示', { handlePass(item) { this.$confirm(`确认 ${item.carCodeFront}置为过号吗?过号后,需要重新签到才能进入园区`, '温馨提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' @@ -317,7 +244,7 @@ }) }) }, handleErr (item) { handleErr(item) { this.$confirm('您确认要对该任务进行异常挂起吗', '温馨提示', { confirmButtonText: '确定', cancelButtonText: '取消', @@ -329,14 +256,14 @@ }) }) }, platgroupClick (item) { platgroupClick(item) { this.activeGroup = { ...item } this.circulInitTaskList() this.timer = setInterval(() => { this.circulInitTaskList() }, 1000) }, getPlatGroupList () { getPlatGroupList() { getPlatformGroupList({ queryData: 1, queryType: 1 @@ -355,7 +282,7 @@ } }) }, circulInitTaskList () { circulInitTaskList() { if (this.activeGroup && this.activeGroup.platformList && this.activeGroup.platformList.length > 0) { const time = new Date() this.activeGroup.platformList.forEach(plat => { @@ -383,31 +310,32 @@ this.$forceUpdate() } }, handleQueuing (item) { handleQueuing(item, callType) { this.isShowQueuing = true this.$nextTick(() => { this.$refs.PlatformQueuingRef.isShowModal = true this.$refs.PlatformQueuingRef.callType = callType this.$refs.PlatformQueuingRef.activePlat = { ...item } this.$refs.PlatformQueuingRef.getList() this.$refs.PlatformQueuingRef.title = item.name }) }, handleDetail () { handleDetail() { this.isShowDetail = true this.$nextTick(() => { this.$refs.WaybillDetailRef.isShowModal = true }) }, getList () { getList() { const { groupId } = this listByGroupId(groupId).then(res => { this.platList = res }) }, handleSet () { handleSet() { this.isShowSet = true }, handleSetSub () { handleSetSub() { const { PlatGroupList } = this const ids = [] PlatGroupList.forEach(item => { @@ -427,7 +355,7 @@ this.setLoading = false }) }, platformSetClick (id) { platformSetClick(id) { const { PlatGroupList } = this PlatGroupList.forEach(item => { item.platformList.forEach(platform => { @@ -443,8 +371,10 @@ <style lang="scss" scoped> @import "@/assets/style/variables.scss"; .platform_list { width: 100%; .item { /* padding: 16px 24px; */ background: #ffffff; @@ -452,27 +382,32 @@ border: 1px solid #dfe2e8; margin-bottom: 12px; width: 100%; .head { display: flex; justify-content: space-between; align-items: center; height: 50px; background: linear-gradient( 270deg, #FFFFFF 0%, #EBF6F7 100%); background: linear-gradient(270deg, #FFFFFF 0%, #EBF6F7 100%); border-radius: 2px 2px 0px 0px; padding: 0 20px; .shengyin{ .shengyin { width: 12px; height: 12px; margin-right: 3px; } .left { flex: 1; display: flex; align-items: center; .name { font-size: 16px; margin-right: 50px; } .status { line-height: 25px; height: 25px; @@ -481,18 +416,19 @@ color: #ffffff; padding: 0 6px; } .ite { margin-right: 30px; } } } .list { display: flex; flex-wrap: wrap; justify-content: space-between; margin-top: 10px; padding: 16px; width: calc( 100% - 48px ); width: calc(100% - 0); .info { background: #f4fafb; border-radius: 2px; @@ -500,23 +436,41 @@ padding: 16px; border-radius: 2px; margin-bottom: 10px; width: calc( 31.6% - 16px ); .status { width: calc(31.6% - 22px); margin-right: 10px; &:nth-of-type(3n) { margin-right: 0; } .status_item { .lab { font-weight: 500; } color: #00ba67; } .line { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; margin-bottom: 6px; .ite { width: 33.3%; margin-top: 8px; } .siji { width: 29%; } .phone { width: 37.6%; } .left { .code { display: flex; @@ -529,18 +483,21 @@ border-radius: 4px; border: 1px solid $primaryColor; padding-right: 4px; span { &:nth-of-type(1) { background: $primaryColor; padding: 0 8px; color: #fff; } &:nth-of-type(2) { padding-left: 4px; } } } } .right { display: flex; align-items: center; @@ -549,18 +506,22 @@ } .jobing { background: #effbf5; .status { color: #00ba67; } } .err { background: #fef6f6; .status { color: #ed4545; } } } .empty_plat{ .empty_plat { width: 100%; height: 170px; display: flex; @@ -569,27 +530,33 @@ align-items: center; font-size: 12px; color: #B2B2B2; img{ img { width: 110px; } } } .emyty{ .head{ background: linear-gradient( 270deg, #FFFFFF 0%, #F7F7F7 100%) !important; .emyty { .head { background: linear-gradient(270deg, #FFFFFF 0%, #F7F7F7 100%) !important; } .status{ .status { background: #CCCCCC !important; } } } .main_header { display: flex; position: relative; .platgroup_tabs { flex: 1; display: flex; border-bottom: 1px solid #dfe2e8; .tab { color: #666666; margin-right: 40px; @@ -597,6 +564,7 @@ padding-bottom: 18px; border-bottom: 2px solid #fff; } .active { font-weight: 500; font-size: 15px; @@ -604,6 +572,7 @@ border-bottom: 2px solid $primary-color; } } .ml20 { position: absolute; width: 120px; @@ -612,6 +581,7 @@ top: -4px; } } /* */ .set_modal { .title { @@ -619,9 +589,11 @@ font-weight: 600; margin-bottom: 16px; } .list { display: flex; flex-wrap: wrap; .item { cursor: pointer; padding: 0 36px; @@ -635,7 +607,8 @@ margin-right: 13px; position: relative; overflow: hidden; .bg{ .bg { position: absolute; right: -12px; bottom: -12px; @@ -644,22 +617,25 @@ background: $primaryColor; transform: rotate(45deg); } .scs{ .scs { position: absolute; right: -1px; bottom: -1px; color: #fff; z-index: 99999; transform:scale(.8) transform: scale(.8) } } .active { background: rgba(39,155,170,0.06); background: rgba(39, 155, 170, 0.06); border: 1px solid $primaryColor; color: $primaryColor; } } } /* */ /* */ </style> admin/src/views/statistics/platformRecord.vue
@@ -1,82 +1,45 @@ <template> <div class="main_app"> <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> <el-table v-loading="loading" :data="list" stripe> <el-table-column prop="name" label="月台名称" min-width="100" show-overflow-tooltip /> <el-table-column prop="name" label="月台组" min-width="100" show-overflow-tooltip /> <el-table-column prop="name" label="车前牌照号" min-width="100" show-overflow-tooltip /> <el-table-column prop="name" label="车后牌照号" min-width="100" show-overflow-tooltip /> <el-table-column prop="name" label="作业开始" min-width="100" show-overflow-tooltip /> <el-table-column prop="name" label="作业结束" min-width="100" show-overflow-tooltip /> <el-table-column prop="name" label="作业时长" min-width="100" show-overflow-tooltip /><el-table-column prop="name" label="运输单号/合同号" min-width="100" show-overflow-tooltip /> <el-table-column prop="platformName" label="月台名称" min-width="100" show-overflow-tooltip /> <el-table-column prop="platformGroupName" label="月台组" min-width="100" show-overflow-tooltip /> <el-table-column prop="carCodeFront" label="车前牌照号" min-width="100" show-overflow-tooltip /> <el-table-column prop="carCodeBack" label="车后牌照号" min-width="100" show-overflow-tooltip /> <el-table-column prop="startDate" label="作业开始" min-width="100" show-overflow-tooltip /> <el-table-column prop="doneDate" label="作业结束" min-width="100" show-overflow-tooltip /> <el-table-column prop="workTime" label="作业时长" min-width="100" show-overflow-tooltip /><el-table-column prop="name" label="运输单号/合同号" min-width="100" show-overflow-tooltip> <template v-slot="scope"> <span>{{ scope.row.billCode || scope.row.contractNum }}</span> </template> </el-table-column> </el-table> <pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> <div class="mt20"> <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> </div> </div> </template> <script> import Pagination from '@/components/common/Pagination' import QueryForm from '@/components/common/QueryForm' import dayjs from 'dayjs' import duration from 'dayjs/plugin/duration' dayjs.extend(duration); import { platformJobPage, getPlatformGroupList } from '@/api' export default { components: { Pagination, QueryForm }, data () { data() { return { loading: false, pagination: { capacity: 10, page: 1 pageSize: 10, page: 1, total: 0 }, filters: {}, list: [], @@ -84,18 +47,18 @@ queryFormConfig: { formItems: [ { filed: 'aaaa', filed: 'platformName', type: 'input', label: '月台名称' }, { filed: 'bbb', filed: 'platformGroupId', type: 'select', label: '月台组', options: [] }, { filed: 'aaaa', filed: 'carCodeFront', type: 'input', label: '车牌号' }, @@ -109,22 +72,64 @@ } } }, created() { this.getList() this.getGroupList() }, methods: { handleSub () { handleSub() { this.$refs.ruleForm.validate((valid) => { if (valid) { alert('submit!') } }) }, getList (page) { }, clear () { }, handleSizeChange (capacity) { this.pagination.capacity = capacity getGroupList() { getPlatformGroupList({queryData: 0,queryType: 0}).then(res => { this.queryFormConfig.formItems[1].options = res.map(i => { return { value: i.id, label: i.name } }) }) }, getList(page) { const { pagination, filters } = this this.loading = true platformJobPage({ model: { ...filters, queryStatus: '5,6,9,10', beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null, beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null, }, capacity: pagination.pageSize, page: page || pagination.page, }).then(res => { this.loading = false this.list = res.records || [] this.list.forEach(item => { item.inTypeTemp = item.inType == 0 ? '整托盘' : '件烟' item.taskOrigin = 'WMS获取' item.workTime = dayjs.duration(item.workTime, 'seconds').format('H时m分s秒'); }) this.pagination.total = res.total || 0 }, () => { this.loading = false }) }, clear() { this.filters = {} this.pagination.pageSize = 10 this.pagination.page = 1 this.getList() }, handleSizeChange(capacity) { this.pagination.pageSize = capacity } } } </script> <style> </style> <style></style> h5/pages/driver/reserved.vue
@@ -7,8 +7,8 @@ <text>*</text> <text>入园原因</text> </view> <view class="value" @click="showReason = true"> <text class="mr6" :style="{ color: param.inReason ? '#000000' : '#999999' }">{{ param.inReason ? param.inReason : '请选择' }}</text> <view class="value" @click="reasonClick"> <text class="mr6" :class="{gray: param.id}" :style="{ color: param.inReason ? '#000000' : '#999999' }">{{ param.inReason ? param.inReason : '请选择' }}</text> <u-icon name="arrow-right" color="#CCCCCC" size="16"></u-icon> </view> </view> @@ -105,7 +105,8 @@ </view> <!-- --> <u-picker :show="showReason" keyName="reason" :columns="reasonList" @confirm="reasonConfirm"></u-picker> <u-picker :show="showReason" keyName="reason" closeOnClickOverlay @close="showReason = false" @cancel="showReason = false" :columns="reasonList" @confirm="reasonConfirm"></u-picker> <u-datetime-picker :show="showDatetime" closeOnClickOverlay @@ -149,6 +150,12 @@ this.initData() }, methods: { reasonClick() { if(this.param.id){ return } this.showReason = true }, onSubmit() { const param = { ...this.param } if (!param.arriveDate) return this.showToast('请选择到场时间') @@ -297,6 +304,9 @@ display: flex; align-items: center; justify-content: flex-end; .gray{ color: #999999 !important; } .btns { display: flex; align-items: center; h5/pages/staff/task/driver.vue
@@ -2,7 +2,7 @@ <view class="main_app"> <view class="status_wrap"> <view class="name">{{info.driverName}}的入园预约</view> <view class="desc">{{info.carCodeFront}}</view> <view class="gray">{{info.carCodeFront}}</view> <view class="desc" :class="{ gray: info.businessStatus == '2' || info.businessStatus == '3' || info.businessStatus == '4', }">{{ infoStatus }}</view> @@ -425,14 +425,15 @@ margin-bottom: 20rpx; color: #222222; } .desc { font-size: 26rpx; color: #999999; color: #ed4545; margin-bottom: 12rpx; } .gray { color: #999999; margin-bottom: 12rpx; } .status { pda/pages/index/center.vue
@@ -1,858 +1,851 @@ <template> <view class="main_app"> <view class="main_content"> <view class="title" @click="showPlatformgroup = true" >{{ activePlatformGroup.name }}<u-icon name="arrow-down" size="20" class="ml12" color="#999999" ></u-icon ></view> <view class="platform_list"> <view class="item" :class="{ active: item.id === activePlatform.id }" v-for="(item, index) in activePlatformGroup.platformList" :key="index" @click="platformClick(item)" >{{ item.name }}</view > </view> <view class="status_wrap"> <view class="status" >作业:<text>{{ platformTaskInfo.workNum }}</text></view > <view class="status" >已叫:<text>{{ platformTaskInfo.callNum }}</text></view > <view class="status" >等待:<text>{{ platformTaskInfo.waitNum }}</text></view > <view class="status" >异常:<text>{{ platformTaskInfo.exceptionNum }}</text></view > </view> </view> <!-- --> <view style="padding-bottom: 140rpx"> <view v-for="item in platformTaskInfo.platformJobList" :key="item.id" class="platform_ing" > <view class="head"> <view class="code"> <text>{{ item.carCodeFront.slice(0, 1) }}</text> <text>{{ item.carCodeFront.slice(1, 2) }}</text> <text>·</text> <text>{{ item.carCodeFront.slice(2) }}</text> </view> <view class="status" v-if="item.status != 4 && item.status != 5" :class="{ red: item.status == 8 }" >{{ statusMap[item.status] }}</view > <view class="status" v-if="item.status == 4" >叫号中 {{ item.callDateTemp }}</view > <view class="status scs" v-if="item.status == 5" >已作业 {{ item.startDateTemp }}</view > </view> <view class="line" v-if="item.type == 4"> <text class="label">合同单号</text> <text class="value">{{ item.contractNum }}</text> </view> <view class="line" v-else> <text class="label">运输单号</text> <text class="value">{{ item.code }}</text> <text class="primaryColor" @click="handleDetail()">运单详情</text> </view> <view class="line"> <text class="label">驾驶员</text> <text class="value" >{{ item.driverName }} {{ item.drivierPhone }}</text > </view> <view class="line"> <text class="label">总运输量</text> <text class="value">{{ item.totalNum }}万支</text> </view> <view class="line" v-if="item.type != 4"> <text class="label">运输公司</text> <text class="value">{{ item.carrierName }}</text> </view> <view class="btns"> <view v-if="item.status == 4" class="btn" @click="handlePass(item)" >过号</view > <view v-if="item.status == 4" class="btn active" @click="handleWork(item)" >开始作业</view > <view v-if="item.status == 5" class="btn" @click="handleErr(item)" >异常挂起</view > <view v-if="item.status == 5 || item.status == 8" class="btn" @click="handleTransform(item)" >转移月台</view > <view v-if="item.status == 5 || item.status == 8" class="btn active" @click="handleFinish(item)" >作业完成</view > </view> </view> <view v-if="!platformTaskInfo.platformJobList || platformTaskInfo.platformJobList.length == 0" class="empty_wrap"> <image src="@/static/default_nodata@2x.png" /> <text>暂无作业车辆</text> </view> </view> <!-- --> <view class="main_footer"> <view class="btn" @click="PlatformCallClick(1)">入园叫号</view> <view class="btn active" @click="PlatformCallClick(2)">月台叫号</view> </view> <!-- 叫号 --> <u-popup :show="showPlatformCall" closeable safeAreaInsetTop round="10" @close="showPlatformCall = false" > <view class="PlatformCallModal" :style="{ height: 'calc(100vh - ' + windowTop + 'px)' }" > <view class="title" v-if="callType == 2" >月台叫号({{ activePlatform.name }})</view > <view class="title" v-else>入园叫号</view> <view class="input_wrap"> <u-icon name="search" class="mr12" size="19" color="#999999" /> <input v-model="platformCallSearch" type="text" placeholder="搜索车辆牌照" placeholder-class="placeholder9" @confirm="callQuery" /> </view> <view class="order_list"> <scroll-view scroll-y="true" @scrolltolower="callScrolltolower" class="scroll_view"> <view class="platform_ing" v-for="item in platformCallList" :key="item.id" > <view class="head"> <view v-if="item.carCodeFront" class="code"> <text>{{ item.carCodeFront.slice(0, 1) }}</text> <text>{{ item.carCodeFront.slice(1, 2) }}</text> <text>·</text> <text>{{ item.carCodeFront.slice(2) }}</text> </view> <view class="status" :class="{ scs: item.status == 4 }">{{ statusMap[item.status] }}</view> </view> <view class="line" v-if="item.type == 4"> <text class="label">合同单号</text> <text class="value">{{ item.contractNum }}</text> </view> <view class="line" v-else> <text class="label">运输单号</text> <text class="value">{{ item.code }}</text> <text class="primaryColor" @click="handleDetail()" >运单详情</text > </view> <view class="line"> <text class="label">驾驶员</text> <text class="value" >{{ item.driverName }} {{ item.drivierPhone }}</text > </view> <view class="line"> <text class="label">总运输量</text> <text class="value">{{ item.totalNum }}万支</text> </view> <view class="line" v-if="item.type != 4"> <text class="label">运输公司</text> <text class="value">{{ item.carrierName }}</text> </view> <view class="btns"> <view class="btn active" @click="handleCall(item)">叫号</view> </view> </view> </scroll-view> </view> </view> </u-popup> <!-- 运单详情 --> <u-popup :show="showDetail" closeable safeAreaInsetTop round="10" @close="showDetail = false" > <view class="PlatformCallModal" :style="{ height: 'calc(100vh - ' + windowTop + 'px)' }" > <view class="title">运单详情</view> <view class="platform_ing" style="padding: 0"> <view class="head"> <view class="code"> <text>皖</text> <text>AD1212</text> </view> </view> <view class="line"> <text class="label">运输单号</text> <text class="value">11111</text> </view> <view class="line"> <text class="label">驾驶员</text> <text class="value">11111</text> </view> <view class="line"> <text class="label">总运输量</text> <text class="value">11111</text> </view> <view class="line"> <text class="label">运输公司</text> <text class="value">11111</text> </view> </view> <view class="detail_list"> <view class="item"> <view class="orderId">合同编号:{{ 111 }}</view> <view class="addr">收货地:{{ 111 }}</view> <view class="content"> <view class="line" ><view class="label">物料:</view ><view class="value">黄山</view></view > <view class="line" ><view class="label">数量:</view ><view class="value">黄山</view></view > <view class="line" ><view class="label">物料:</view ><view class="value">黄山</view></view > <view class="line" ><view class="label">数量:</view ><view class="value">黄山</view></view > </view> </view> </view> </view> </u-popup> <!-- 转移月台 --> <u-popup :show="showTransform" closeable safeAreaInsetTop round="10" @close="showTransform = false" > <view class="TransformModal"> <view class="title">转移月台</view> <view class="transform_list"> <view class="line" @click="transformPlatClick(item)" v-for="item in activePlatformGroup.platformList" :key="item.id" > <view class="name">{{ item.name }}</view> <view class="status" :class="{ green: item.workStatus == 1 }" >({{ item.workStatus == 0 ? "空闲" : "作业中" }})</view > <image v-if="transformPlatId == item.id" src="@/static/ic_select@2x.png" class="checked" /> </view> </view> <view class="btns"> <view class="btn" @click="transformCancel">取消</view> <view class="btn active" @click="transformSub">确定</view> </view> </view> </u-popup> <!-- --> <u-picker :show="showPlatformgroup" keyName="name" :columns="[platformGroupList]" @cancel="showPlatformgroup = false" @confirm="platConfirm" ></u-picker> </view> </template> <script> import { getPlatformGroupList, getPlatformWorkData, platformCallList, platformCallNumber, platformInPark, beginWork, finishWork, platformMove, platformErr, platformOverNumber } from '@/api' import { statusMap } from '@/utils/config.js' import dayjs from 'dayjs' import duration from 'dayjs/plugin/duration' dayjs.extend(duration) export default { data() { return { statusMap, windowTop: 44, showPlatformCall: false, // 月台叫号 showDetail: false, showTransform: false, // 转移 showPlatformgroup: false, platformGroupList: [], activePlatformGroup: {}, platformTaskInfo: {}, activePlatform: {}, platformCallList: [],//叫号列表 platformCallSearch: '', platformCallTotal: 0, platformCallPage: 1, callType: 1, transformPlatId: '', // 转移记录月台id transformId: '', // 转移记录任务id } }, onLoad() { this.getPlatformGroup() const res = uni.getWindowInfo() this.windowTop = res.windowTop }, methods: { getPlatformGroup() { getPlatformGroupList({ queryData: 1, queryType: 0 }).then(res => { this.platformGroupList = res.data || [] if (this.platformGroupList.length > 0) { this.activePlatformGroup = this.platformGroupList[0] if (this.activePlatformGroup.platformList && this.activePlatformGroup.platformList.length > 0) { this.activePlatform = this.activePlatformGroup.platformList[0] this.getPlatformTask() } } }) }, getPlatformTask() { getPlatformWorkData({ platformId: this.activePlatform.id }).then(res => { this.platformTaskInfo = res.data this.circulInitTaskList() setInterval(() => { this.circulInitTaskList() }, 1000) }) }, circulInitTaskList() { if (this.platformTaskInfo && this.platformTaskInfo.platformJobList && this.platformTaskInfo.platformJobList.length > 0) { let time = new Date() this.platformTaskInfo.platformJobList.forEach(item => { if (item.callDate) { let timeNum = time.getTime() - new Date(item.callDate).getTime() if (timeNum > 3600000) { item.callDateTemp = dayjs.duration(timeNum).format('H小时m分s秒') } else { item.callDateTemp = dayjs.duration(timeNum).format('m分s秒') } } if (item.startDate) { let timeNum = time.getTime() - new Date(item.startDate).getTime() if (timeNum > 3600000) { item.startDateTemp = dayjs.duration(timeNum).format('H小时m分ss秒') } else { item.startDateTemp = dayjs.duration(timeNum).format('m分s秒') } } }) this.$forceUpdate() } }, platConfirm(e) { const index = e.indexs[0] this.activePlatformGroup = this.platformGroupList[index] if (this.activePlatformGroup.platformList && this.activePlatformGroup.platformList.length > 0) { this.activePlatform = this.activePlatformGroup.platformList[0] this.getPlatformTask() } this.showPlatformgroup = false }, platformClick(item) { this.activePlatform = item this.getPlatformTask() }, handleDetail() { this.showDetail = true }, handleFinish(item) { finishWork({ jobId: item.id }).then(res => { this.showToast('完成作业') this.getPlatformTask() }) }, handleWork(item) { // 开始作业 beginWork({ jobId: item.id }).then(res => { this.showToast('已开始作业') this.getPlatformTask() }) }, handlePass(item) { uni.showModal({ content: '您确认要对该任务进行过号吗', success: (res) => { if (res.confirm) { platformOverNumber({ jobId: item.id, platformId: this.activePlatform.id }).then(res => { this.showToast('过号成功') this.getPlatformTask() }) } } }) }, handleCall(item) { const { callType, activePlatform } = this this.platformCallList = [] this.platformCallPage = 1 if (callType == 1) { // 入园叫号 platformInPark({ jobId: item.id }).then(res => { this.showToast('叫号成功') this.getPlatformCallList() }) } else { // 月台叫号 platformCallNumber({ platformId: activePlatform.id, jobId: item.id }).then(res => { this.showToast('叫号成功') this.getPlatformCallList() this.getPlatformTask() }) } }, PlatformCallClick(callType) { this.callType = callType this.showPlatformCall = true this.platformCallList = [] this.platformCallPage = 1 this.platformCallSearch = '' this.getPlatformCallList() }, callQuery() { this.platformCallList = [] this.platformCallPage = 1 this.getPlatformCallList() }, callScrolltolower() { const { platformCallTotal, platformCallList } = this if(platformCallTotal > platformCallList.length){ this.getPlatformCallList() } }, getPlatformCallList() { const { platformCallPage, callType, activePlatform, platformCallSearch } = this platformCallList({ model: { callType, platformId: activePlatform.id, carCodeFront: platformCallSearch }, capacity: 10, page: platformCallPage }).then(res => { if (res.data && res.data.records) { this.platformCallList = [ ...this.platformCallList, ...res.data.records] this.platformCallTotal = res.data.total } }) }, transformPlatClick(item) { this.transformPlatId = item.id }, transformCancel() { this.transformPlatId = '' this.showTransform = false }, transformSub() { const { transformPlatId, transformId } = this platformMove({ platformId: transformPlatId, jobId: transformId }).then(res => { this.showToast('转移月台成功') this.transformCancel() this.getPlatformTask() }) }, handleTransform(item) { let { activePlatform } = this this.transformId = item.id this.transformPlatId = activePlatform.id this.showTransform = true }, handleErr(item) { uni.showModal({ content: '您确认要对该任务进行异常挂起吗', success: (res) => { if (res.confirm) { platformErr({ jobId: item.id }).then(ress => { this.showToast('异常挂起成功') this.getPlatformTask() }) } } }) } } } </script> <style lang="scss"> .main_app { padding: 0rpx; height: calc(100vh - 44px); font-size: 30rpx; color: #333333; background: url("@/static/bg_yuetai@2x.png") no-repeat; background-size: 100% 100%; .main_content { background-color: #fff; padding: 30rpx; .platform_list { display: flex; flex-wrap: wrap; .item { width: 210rpx; 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; &:nth-of-type(3n) { margin-right: 0; } } .active { color: #fff; background-color: $uni-color-primary; border-color: $uni-color-primary; } } .status_wrap { display: flex; align-items: center; justify-content: space-evenly; width: 690rpx; height: 76rpx; margin-top: 4rpx; background: #ffffff; box-shadow: 0rpx 0rpx 8rpx 0rpx rgba(0, 0, 0, 0.18); border-radius: 8rpx; .status { color: #666666; text { color: #111111; } &:nth-last-child(1) { text { color: #ed4545; } } } } .title { font-weight: 500; font-size: 32rpx; color: #111111; line-height: 44rpx; margin-bottom: 30rpx; display: flex; justify-content: center; } } .platform_ing { margin-top: 20rpx; padding: 30rpx; background-color: #fff; .head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 30rpx; .code { display: flex; font-weight: 600; height: 60rpx; line-height: 60rpx; font-size: 32rpx; color: #111111; border-radius: 8rpx; border: 1rpx solid #dfdede; text { &:nth-of-type(1) { background: #e9f5f6; padding: 0 12rpx; } &:nth-of-type(2) { padding-left: 4rpx; } &:nth-of-type(4) { padding-right: 6rpx; } } } .status { font-size: 30rpx; color: $uni-color-primary; } .scs { color: #00ba67; } } .line { display: flex; margin-bottom: 20rpx; .label { width: 144rpx; color: #666666; } .value { flex: 1; } } .btns { display: flex; justify-content: flex-end; .btn { width: 210rpx; height: 76rpx; line-height: 76rpx; text-align: center; background: #ffffff; border-radius: 40rpx; border: 1rpx solid #999999; margin-left: 20rpx; } .active { background-color: $uni-color-primary; color: #fff; border-color: $uni-color-primary; } } } .empty { width: 220rpx; margin: 160rpx auto; } .main_footer { width: 750rpx; height: 136rpx; position: fixed; bottom: 0; left: 0; padding: 24rpx 30rpx; display: flex; justify-content: space-between; font-size: 32rpx; background-color: #fff; .btn { width: 224rpx; height: 88rpx; line-height: 88rpx; text-align: center; background: #ffffff; border-radius: 44rpx; color: $uni-color-primary; border: 1rpx solid $uni-color-primary; } .active { width: 436rpx; background-color: $uni-color-primary; color: #fff; border-color: $uni-color-primary; } } } .PlatformCallModal { height: calc(100vh - 44px); padding: 30rpx; .title { text-align: center; margin: 0 0 30rpx; } .input_wrap { display: flex; align-items: center; width: 690rpx; height: 76rpx; background: #f7f7f7; border-radius: 38rpx; padding: 0 30rpx; } .order_list { height: calc(100% - 140rpx); .scroll_view { height: 100%; } .platform_ing { border-radius: 8rpx; border: 1rpx solid #dfe2e8; } } .detail_list { border-top: 1rpx solid #e5e5e5; padding: 30rpx 0; .orderId { font-size: 30rpx; color: $uni-color-primary; margin-bottom: 14rpx; } .addr { font-size: 26rpx; color: #666666; margin-bottom: 20rpx; } .content { width: 100%; padding: 20rpx; background: #f7f7f7; border-radius: 8rpx; .line { display: flex; margin-bottom: 20rpx; &:nth-of-type(2n) { padding-bottom: 20rpx; border-bottom: 1rpx solid #e5e5e5; } &:last-child { padding-bottom: 0rpx; border-bottom: none; } .label { font-size: 28rpx; color: #666666; width: 88rpx; } .value { font-size: 28rpx; color: #222222; } } } } .btns { display: flex; align-items: center; justify-content: space-between; .btn { width: 336rpx; height: 88rpx; border-radius: 44rpx; border: 1rpx solid $uni-color-primary; color: $uni-color-primary; font-size: 32rpx; display: flex; justify-content: center; align-items: center; } .active { color: #fff; background-color: $uni-color-primary; } } } .TransformModal { height: 900rpx; padding: 30rpx; position: relative; .title { text-align: center; margin: 0 0 30rpx; } .btns { display: flex; align-items: center; justify-content: space-between; position: absolute; z-index: 999; left: 30rpx; bottom: 30rpx; .btn { width: 336rpx; height: 88rpx; border-radius: 44rpx; border: 1rpx solid $uni-color-primary; color: $uni-color-primary; font-size: 32rpx; display: flex; justify-content: center; align-items: center; } .active { color: #fff; margin-left: 18rpx; background-color: $uni-color-primary; } } .transform_list { height: 660rpx; margin-bottom: 30rpx; overflow: auto; .line { display: flex; align-items: center; border-bottom: 1rpx solid #e5e5e5; padding-bottom: 30rpx; margin-bottom: 30rpx; .name { font-size: 32rpx; color: #111111; } .status { flex: 1; font-size: 28rpx; color: $uni-color-primary; margin-left: 12rpx; } .green { color: #00ba67; } .checked { width: 40rpx; height: 40rpx; } } } } <template> <view class="main_app"> <view class="main_content"> <view class="title" @click="showPlatformgroup = true">{{ activePlatformGroup.name }}<u-icon name="arrow-down" size="20" class="ml12" color="#999999"></u-icon></view> <view class="platform_list"> <view class="item" :class="{ active: item.id === activePlatform.id }" v-for="(item, index) in activePlatformGroup.platformList" :key="index" @click="platformClick(item)"> {{ item.name }}</view> </view> <view class="status_wrap"> <view class="status">作业:<text>{{ platformTaskInfo.workNum }}</text></view> <view class="status">已叫:<text>{{ platformTaskInfo.callNum }}</text></view> <view class="status">等待:<text>{{ platformTaskInfo.waitNum }}</text></view> <view class="status">异常:<text>{{ platformTaskInfo.exceptionNum }}</text></view> </view> </view> <!-- --> <view style="padding-bottom: 140rpx"> <view v-for="item in platformTaskInfo.platformJobList" :key="item.id" class="platform_ing"> <view class="head"> <view class="code"> <text>{{ item.carCodeFront.slice(0, 1) }}</text> <text>{{ item.carCodeFront.slice(1, 2) }}</text> <text>·</text> <text>{{ item.carCodeFront.slice(2) }}</text> </view> <view class="status" v-if="item.status != 4 && item.status != 5" :class="{ red: item.status == 8 }"> {{ statusMap[item.status] }}</view> <view class="status" v-if="item.status == 4">叫号中 {{ item.callDateTemp }}</view> <view class="status scs" v-if="item.status == 5">已作业 {{ item.startDateTemp }}</view> </view> <view class="line" v-if="item.type == 4"> <text class="label">合同单号</text> <text class="value">{{ item.contractNum }}</text> </view> <view class="line" v-else> <text class="label">运输单号</text> <text class="value">{{ item.code }}</text> <text class="primaryColor" @click="handleDetail()">运单详情</text> </view> <view class="line"> <text class="label">驾驶员</text> <text class="value">{{ item.driverName }} {{ item.drivierPhone }}</text> </view> <view class="line"> <text class="label">总运输量</text> <text class="value">{{ item.totalNum }}万支</text> </view> <view class="line" v-if="item.type != 4"> <text class="label">运输公司</text> <text class="value">{{ item.carrierName }}</text> </view> <view class="btns"> <view v-if="item.status == 4" class="btn" @click="handlePass(item)">过号</view> <view v-if="item.status == 4" class="btn active" @click="handleWork(item)">开始作业</view> <view v-if="item.status == 5" class="btn" @click="handleErr(item)">异常挂起</view> <view v-if="item.status == 5 || item.status == 8" class="btn" @click="handleTransform(item)">转移月台</view> <view v-if="item.status == 5 || item.status == 8" class="btn active" @click="handleFinish(item)">作业完成</view> </view> </view> <view v-if="!platformTaskInfo.platformJobList || platformTaskInfo.platformJobList.length == 0" class="empty_wrap"> <image src="@/static/default_nodata@2x.png" /> <text>暂无作业车辆</text> </view> </view> <!-- --> <view class="main_footer"> <view class="btn" @click="PlatformCallClick(1)">入园叫号</view> <view class="btn active" @click="PlatformCallClick(2)">月台叫号</view> </view> <!-- 叫号 --> <u-popup :show="showPlatformCall" closeable safeAreaInsetTop round="10" @close="showPlatformCall = false"> <view class="PlatformCallModal" :style="{ height: 'calc(100vh - ' + windowTop + 'px)' }"> <view class="title" v-if="callType == 2">月台叫号({{ activePlatform.name }})</view> <view class="title" v-else>入园叫号</view> <view class="input_wrap"> <u-icon name="search" class="mr12" size="19" color="#999999" /> <input v-model="platformCallSearch" type="text" placeholder="搜索车辆牌照" placeholder-class="placeholder9" @confirm="callQuery" /> </view> <view class="order_list"> <scroll-view scroll-y="true" @scrolltolower="callScrolltolower" class="scroll_view"> <view class="platform_ing" v-for="item in platformCallList" :key="item.id"> <view class="head"> <view v-if="item.carCodeFront" class="code"> <text>{{ item.carCodeFront.slice(0, 1) }}</text> <text>{{ item.carCodeFront.slice(1, 2) }}</text> <text>·</text> <text>{{ item.carCodeFront.slice(2) }}</text> </view> <view class="status" :class="{ scs: item.status == 4 }">{{ statusMap[item.status] }}</view> </view> <view class="line" v-if="item.type == 4"> <text class="label">合同单号</text> <text class="value">{{ item.contractNum }}</text> </view> <view class="line" v-else> <text class="label">运输单号</text> <text class="value">{{ item.code }}</text> <text class="primaryColor" @click="handleDetail()">运单详情</text> </view> <view class="line"> <text class="label">驾驶员</text> <text class="value">{{ item.driverName }} {{ item.drivierPhone }}</text> </view> <view class="line"> <text class="label">总运输量</text> <text class="value">{{ item.totalNum }}万支</text> </view> <view class="line" v-if="item.type != 4"> <text class="label">运输公司</text> <text class="value">{{ item.carrierName }}</text> </view> <view class="btns"> <view class="btn active" @click="handleCall(item)">叫号</view> </view> </view> </scroll-view> </view> </view> </u-popup> <!-- 运单详情 --> <u-popup :show="showDetail" closeable safeAreaInsetTop round="10" @close="showDetail = false"> <view class="PlatformCallModal" :style="{ height: 'calc(100vh - ' + windowTop + 'px)' }"> <view class="title">运单详情</view> <view class="platform_ing" style="padding: 0"> <view class="head"> <view class="code"> <text>皖</text> <text>AD1212</text> </view> </view> <view class="line"> <text class="label">运输单号</text> <text class="value">11111</text> </view> <view class="line"> <text class="label">驾驶员</text> <text class="value">11111</text> </view> <view class="line"> <text class="label">总运输量</text> <text class="value">11111</text> </view> <view class="line"> <text class="label">运输公司</text> <text class="value">11111</text> </view> </view> <view class="detail_list"> <view class="item"> <view class="orderId">合同编号:{{ 111 }}</view> <view class="addr">收货地:{{ 111 }}</view> <view class="content"> <view class="line"> <view class="label">物料:</view> <view class="value">黄山</view> </view> <view class="line"> <view class="label">数量:</view> <view class="value">黄山</view> </view> <view class="line"> <view class="label">物料:</view> <view class="value">黄山</view> </view> <view class="line"> <view class="label">数量:</view> <view class="value">黄山</view> </view> </view> </view> </view> </view> </u-popup> <!-- 转移月台 --> <u-popup :show="showTransform" closeable safeAreaInsetTop round="10" @close="showTransform = false"> <view class="TransformModal"> <view class="title">转移月台</view> <view class="transform_list"> <view class="line" @click="transformPlatClick(item)" v-for="item in activePlatformGroup.platformList" :key="item.id"> <view class="name">{{ item.name }}</view> <view class="status" :class="{ green: item.workStatus == 1 }">({{ item.workStatus == 0 ? "空闲" : "作业中" }}) </view> <image v-if="transformPlatId == item.id" src="@/static/ic_select@2x.png" class="checked" /> </view> </view> <view class="btns"> <view class="btn" @click="transformCancel">取消</view> <view class="btn active" @click="transformSub">确定</view> </view> </view> </u-popup> <!-- --> <u-picker :show="showPlatformgroup" keyName="name" :columns="[platformGroupList]" @cancel="showPlatformgroup = false" @confirm="platConfirm"></u-picker> </view> </template> <script> import { getPlatformGroupList, getPlatformWorkData, platformCallList, platformCallNumber, platformInPark, beginWork, finishWork, platformMove, platformErr, platformOverNumber } from '@/api' import { statusMap } from '@/utils/config.js' import dayjs from 'dayjs' import duration from 'dayjs/plugin/duration' dayjs.extend(duration) export default { data() { return { statusMap, windowTop: 44, showPlatformCall: false, // 月台叫号 showDetail: false, showTransform: false, // 转移 showPlatformgroup: false, platformGroupList: [], activePlatformGroup: {}, platformTaskInfo: {}, activePlatform: {}, platformCallList: [], //叫号列表 platformCallSearch: '', platformCallTotal: 0, platformCallPage: 1, callType: 1, transformPlatId: '', // 转移记录月台id transformId: '', // 转移记录任务id } }, onLoad() { this.getPlatformGroup() const res = uni.getWindowInfo() this.windowTop = res.windowTop }, methods: { getPlatformGroup() { getPlatformGroupList({ queryData: 1, queryType: 0 }).then(res => { this.platformGroupList = res.data || [] if (this.platformGroupList.length > 0) { this.activePlatformGroup = this.platformGroupList[0] if (this.activePlatformGroup.platformList && this.activePlatformGroup.platformList.length > 0) { this.activePlatform = this.activePlatformGroup.platformList[0] this.getPlatformTask() } } }) }, getPlatformTask() { getPlatformWorkData({ platformId: this.activePlatform.id }).then(res => { this.platformTaskInfo = res.data this.circulInitTaskList() setInterval(() => { this.circulInitTaskList() }, 1000) }) }, circulInitTaskList() { if (this.platformTaskInfo && this.platformTaskInfo.platformJobList && this.platformTaskInfo.platformJobList .length > 0) { let time = new Date() this.platformTaskInfo.platformJobList.forEach(item => { if (item.callDate) { let timeNum = time.getTime() - new Date(item.callDate).getTime() if (timeNum > 3600000) { item.callDateTemp = dayjs.duration(timeNum).format('H小时m分s秒') } else { item.callDateTemp = dayjs.duration(timeNum).format('m分s秒') } } if (item.startDate) { let timeNum = time.getTime() - new Date(item.startDate).getTime() if (timeNum > 3600000) { item.startDateTemp = dayjs.duration(timeNum).format('H小时m分ss秒') } else { item.startDateTemp = dayjs.duration(timeNum).format('m分s秒') } } }) this.$forceUpdate() } }, platConfirm(e) { const index = e.indexs[0] this.activePlatformGroup = this.platformGroupList[index] if (this.activePlatformGroup.platformList && this.activePlatformGroup.platformList.length > 0) { this.activePlatform = this.activePlatformGroup.platformList[0] this.getPlatformTask() } this.showPlatformgroup = false }, platformClick(item) { this.activePlatform = item this.getPlatformTask() }, handleDetail() { this.showDetail = true }, handleFinish(item) { finishWork({ jobId: item.id }).then(res => { this.showToast('完成作业') this.getPlatformTask() }) }, handleWork(item) { // 开始作业 beginWork({ jobId: item.id }).then(res => { this.showToast('已开始作业') this.getPlatformTask() }) }, handlePass(item) { uni.showModal({ content: `确认 ${item.carCodeFront}置为过号吗?过号后,需要重新签到才能进入园区`, success: (res) => { if (res.confirm) { platformOverNumber({ jobId: item.id, platformId: this.activePlatform.id }).then(res => { this.showToast('过号成功') this.getPlatformTask() }) } } }) }, handleCall(item) { const { callType, activePlatform } = this this.platformCallList = [] this.platformCallPage = 1 if (callType == 1) { // 入园叫号 platformInPark({ jobId: item.id }).then(res => { this.showToast('叫号成功') this.getPlatformCallList() }) } else { // 月台叫号 platformCallNumber({ platformId: activePlatform.id, jobId: item.id }).then(res => { this.showToast('叫号成功') this.getPlatformCallList() this.getPlatformTask() }) } }, PlatformCallClick(callType) { this.callType = callType this.showPlatformCall = true this.platformCallList = [] this.platformCallPage = 1 this.platformCallSearch = '' this.getPlatformCallList() }, callQuery() { this.platformCallList = [] this.platformCallPage = 1 this.getPlatformCallList() }, callScrolltolower() { const { platformCallTotal, platformCallList } = this if (platformCallTotal > platformCallList.length) { this.getPlatformCallList() } }, getPlatformCallList() { const { platformCallPage, callType, activePlatform, platformCallSearch } = this platformCallList({ model: { callType, platformId: activePlatform.id, carCodeFront: platformCallSearch }, capacity: 10, page: platformCallPage }).then(res => { if (res.data && res.data.records) { this.platformCallList = [...this.platformCallList, ...res.data.records] this.platformCallTotal = res.data.total } }) }, transformPlatClick(item) { this.transformPlatId = item.id }, transformCancel() { this.transformPlatId = '' this.showTransform = false }, transformSub() { const { transformPlatId, transformId } = this platformMove({ platformId: transformPlatId, jobId: transformId }).then(res => { this.showToast('转移月台成功') this.transformCancel() this.getPlatformTask() }) }, handleTransform(item) { let { activePlatform } = this this.transformId = item.id this.transformPlatId = activePlatform.id this.showTransform = true }, handleErr(item) { uni.showModal({ content: '您确认要对该任务进行异常挂起吗', success: (res) => { if (res.confirm) { platformErr({ jobId: item.id }).then(ress => { this.showToast('异常挂起成功') this.getPlatformTask() }) } } }) } } } </script> <style lang="scss"> .main_app { padding: 0rpx; height: calc(100vh - 44px); font-size: 30rpx; color: #333333; background: url("@/static/bg_yuetai@2x.png") no-repeat; background-size: 100% 100%; .main_content { background-color: #fff; padding: 30rpx; .platform_list { display: flex; flex-wrap: wrap; .item { width: 210rpx; 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; &:nth-of-type(3n) { margin-right: 0; } } .active { color: #fff; background-color: $uni-color-primary; border-color: $uni-color-primary; } } .status_wrap { display: flex; align-items: center; justify-content: space-evenly; width: 690rpx; height: 76rpx; margin-top: 4rpx; background: #ffffff; box-shadow: 0rpx 0rpx 8rpx 0rpx rgba(0, 0, 0, 0.18); border-radius: 8rpx; .status { color: #666666; text { color: #111111; } &:nth-last-child(1) { text { color: #ed4545; } } } } .title { font-weight: 500; font-size: 32rpx; color: #111111; line-height: 44rpx; margin-bottom: 30rpx; display: flex; justify-content: center; } } .platform_ing { margin-top: 20rpx; padding: 30rpx; background-color: #fff; .head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 30rpx; .code { display: flex; font-weight: 600; height: 60rpx; line-height: 60rpx; font-size: 32rpx; color: #111111; border-radius: 8rpx; border: 1rpx solid #dfdede; text { &:nth-of-type(1) { background: #e9f5f6; padding: 0 12rpx; } &:nth-of-type(2) { padding-left: 4rpx; } &:nth-of-type(4) { padding-right: 6rpx; } } } .status { font-size: 30rpx; color: $uni-color-primary; } .scs { color: #00ba67; } } .line { display: flex; margin-bottom: 20rpx; .label { width: 144rpx; color: #666666; } .value { flex: 1; } } .btns { display: flex; justify-content: flex-end; .btn { width: 210rpx; height: 76rpx; line-height: 76rpx; text-align: center; background: #ffffff; border-radius: 40rpx; border: 1rpx solid #999999; margin-left: 20rpx; } .active { background-color: $uni-color-primary; color: #fff; border-color: $uni-color-primary; } } } .empty { width: 220rpx; margin: 160rpx auto; } .main_footer { width: 750rpx; height: 136rpx; position: fixed; bottom: 0; left: 0; padding: 24rpx 30rpx; display: flex; justify-content: space-between; font-size: 32rpx; background-color: #fff; .btn { width: 224rpx; height: 88rpx; line-height: 88rpx; text-align: center; background: #ffffff; border-radius: 44rpx; color: $uni-color-primary; border: 1rpx solid $uni-color-primary; } .active { width: 436rpx; background-color: $uni-color-primary; color: #fff; border-color: $uni-color-primary; } } } .PlatformCallModal { height: calc(100vh - 44px); padding: 30rpx; .title { text-align: center; margin: 0 0 30rpx; } .input_wrap { display: flex; align-items: center; width: 690rpx; height: 76rpx; background: #f7f7f7; border-radius: 38rpx; padding: 0 30rpx; } .order_list { height: calc(100% - 140rpx); .scroll_view { height: 100%; } .platform_ing { border-radius: 8rpx; border: 1rpx solid #dfe2e8; } } .detail_list { border-top: 1rpx solid #e5e5e5; padding: 30rpx 0; .orderId { font-size: 30rpx; color: $uni-color-primary; margin-bottom: 14rpx; } .addr { font-size: 26rpx; color: #666666; margin-bottom: 20rpx; } .content { width: 100%; padding: 20rpx; background: #f7f7f7; border-radius: 8rpx; .line { display: flex; margin-bottom: 20rpx; &:nth-of-type(2n) { padding-bottom: 20rpx; border-bottom: 1rpx solid #e5e5e5; } &:last-child { padding-bottom: 0rpx; border-bottom: none; } .label { font-size: 28rpx; color: #666666; width: 88rpx; } .value { font-size: 28rpx; color: #222222; } } } } .btns { display: flex; align-items: center; justify-content: space-between; .btn { width: 336rpx; height: 88rpx; border-radius: 44rpx; border: 1rpx solid $uni-color-primary; color: $uni-color-primary; font-size: 32rpx; display: flex; justify-content: center; align-items: center; } .active { color: #fff; background-color: $uni-color-primary; } } } .TransformModal { height: 900rpx; padding: 30rpx; position: relative; .title { text-align: center; margin: 0 0 30rpx; } .btns { display: flex; align-items: center; justify-content: space-between; position: absolute; z-index: 999; left: 30rpx; bottom: 30rpx; .btn { width: 336rpx; height: 88rpx; border-radius: 44rpx; border: 1rpx solid $uni-color-primary; color: $uni-color-primary; font-size: 32rpx; display: flex; justify-content: center; align-items: center; } .active { color: #fff; margin-left: 18rpx; background-color: $uni-color-primary; } } .transform_list { height: 660rpx; margin-bottom: 30rpx; overflow: auto; .line { display: flex; align-items: center; border-bottom: 1rpx solid #e5e5e5; padding-bottom: 30rpx; margin-bottom: 30rpx; .name { font-size: 32rpx; color: #111111; } .status { flex: 1; font-size: 28rpx; color: $uni-color-primary; margin-left: 12rpx; } .green { color: #00ba67; } .checked { width: 40rpx; height: 40rpx; } } } } </style> pda/pages/index/queueup.vue
@@ -21,7 +21,7 @@ /> </view> <view class="count" >已签到车辆:<text>{{ total }}</text></view >总排队车辆:<text>{{ total }}</text></view > </view> <!-- --> @@ -139,6 +139,7 @@ platConfirm(e) { const index = e.indexs[0] this.platformGroup = this.platformGroupList[index] this.platformLineUpList = [] this.getList() this.showPlatformgroup = false }, server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkInterfaceTestCloudController.java
@@ -35,11 +35,10 @@ * @author 江蹄蹄 * @date 2023/11/30 15:33 */ @Api(tags = "海康数据同步接口") @Api(tags = "海康接口测试工具接口") @RestController @RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/hktest") public class HkInterfaceTestCloudController extends BaseController { @Autowired private SystemDictDataBiz systemDictDataBiz; @@ -67,32 +66,32 @@ return ApiResponse.success( HKService.wxAccessToken(configId,tageId)); } @ApiOperation("【海康】测试分页获取告警事件") @GetMapping("/nhEventPageList") @PostMapping("/nhEventPageList") @LoginNoRequired public ApiResponse<BaseResponse> nhEventPageList(@RequestBody NhEventPageListRequest param, HttpServletResponse response) { return ApiResponse.success( HKService.nhEventPageList(param)); } @ApiOperation("【海康】分页查询消防传感器部件状态") @GetMapping("/sensorStatusSearch") @PostMapping("/sensorStatusSearch") @LoginNoRequired public ApiResponse<BaseResponse> sensorStatusSearch(@RequestBody SensorStatusListRequest param, HttpServletResponse response) { return ApiResponse.success( HKService.sensorStatusSearch(param)); } @ApiOperation("【海康】查询消防传感器列表") @GetMapping("/fireChannelSearch") @PostMapping("/fireChannelSearch") @LoginNoRequired public ApiResponse<BaseResponse> fireChannelSearch(@RequestBody FireChannelListRequest param, HttpServletResponse response) { return ApiResponse.success( HKService.fireChannelSearch(param)); } @ApiOperation("【海康】海康询消防设备列表") @GetMapping("/fireDeviceSearch") @PostMapping("/fireDeviceSearch") @LoginNoRequired public ApiResponse<BaseResponse> fireDeviceSearch(@RequestBody FireDeviceListRequest param, HttpServletResponse response) { return ApiResponse.success( HKService.fireDeviceSearch(param)); } @ApiOperation("【海康】分页查询消防设备部件状态") @GetMapping("/fireDeviceStatusSearch") @PostMapping("/fireDeviceStatusSearch") @LoginNoRequired public ApiResponse<BaseResponse> fireDeviceStatusSearch(@RequestBody FireDeviceStatuslListRequest param, HttpServletResponse response) { return ApiResponse.success( HKService.fireDeviceStatusSearch(param)); server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
@@ -593,24 +593,24 @@ * @param body * @return */ public static String fireDeviceStatusSearch(Map<String,String> body) { return startDoGetStringArtemis(HKConstants.InterfacePath.fireDeviceStatusSearch,body); public static String fireDeviceStatusSearch(String body) { return startDoPostStringArtemis(HKConstants.InterfacePath.fireDeviceStatusSearch,body); } /** * 分页查询消防传感器部件状态 * @param body * @return */ public static String sensorStatusSearch(Map<String,String> body) { return startDoGetStringArtemis(HKConstants.InterfacePath.sensorStatusSearch,body); public static String sensorStatusSearch(String body) { return startDoPostStringArtemis(HKConstants.InterfacePath.sensorStatusSearch,body); } /** * 询消防设备列表 * @param body * @return */ public static String fireChannelSearch(Map<String,String> body) { return startDoGetStringArtemis(HKConstants.InterfacePath.fireChannelSearch,body); public static String fireChannelSearch(String body) { return startDoPostStringArtemis(HKConstants.InterfacePath.fireChannelSearch,body); } /** @@ -618,8 +618,8 @@ * @param body * @return */ public static String fireDeviceSearch(Map<String,String> body) { return startDoGetStringArtemis(HKConstants.InterfacePath.fireDeviceSearch,body); public static String fireDeviceSearch(String body) { return startDoPostStringArtemis(HKConstants.InterfacePath.fireDeviceSearch,body); } /** * 获取全量用户列表 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/BaseListPageResponse.java
@@ -13,6 +13,6 @@ private int pageNo ;// number False 当前页码 private int totalPage;// number False 总页数 @JSONField(name="list",alternateNames = {"rows","records"}) @JSONField(name="list",alternateNames = {"rows","list"}) private List<T> list ;// object[] False 权限组对象列表 } server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FireDeviceStatusListResponse.java
@@ -4,21 +4,16 @@ @Data public class FireDeviceStatusListResponse { private String id ;//String false 预告警事件唯一标识 private String warningName ;//String false 预告警名称 private String nodeType ;//Number false 节点类型 private String nodeId ;//String false 节点ID private String nodeName;// String false 节点名称 private String nodePath;// String false 节点路径 private String ruleType ;//String false 预告警类型 private String warningLevel ;//Number false 预告警等级,1:一般,2:严重,3:故障 private String warningValue ;//String false 数据项当前值 private String warningEventTip;// String false 异常原因 private String createTime;// String false 发生时间 private String benchmark;// String false 基准数据 private String handleStatus;// Number false 处理状态:1:未处理,2:已处理 private String note;// String false 处理意见 private String handleTime;// String false 处理时间 private String normal;// Boolean false 预告警是否正常 private String deviceId;// String false 设备id private String cn ;//String false private String regionIndexCode ;//String false private String indexCode;// String false private String regionName;// String false private String deviceIndexCode;// String false private String deviceType;// Number false private String unitStatus ;//Number false private String online;// Number false private String collectTime;// String false private String faultType;// String false private String faultName;// String false private String faultNum;// String false } server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -926,7 +926,7 @@ public static BaseResponse<BaseListPageResponse<FireDeviceStatusListResponse>> fireDeviceStatusSearch(FireDeviceStatuslListRequest param){ log.info("【海康查询消防设备部件状态】================开始===="+JSONObject.toJSONString(param)); try { String res = HKTools.fireDeviceStatusSearch(toMap(param)); String res = HKTools.fireDeviceStatusSearch(JSONObject.toJSONString(param)); TypeReference typeReference = new TypeReference<BaseResponse<BaseListPageResponse<FireDeviceStatusListResponse>>>(){}; BaseResponse<BaseListPageResponse<FireDeviceStatusListResponse>> result = JSONObject.parseObject(res, typeReference.getType()); @@ -944,7 +944,7 @@ public static BaseResponse<BaseListPageResponse<SensorStatusListResponse>> sensorStatusSearch(SensorStatusListRequest param){ log.info("【海康分页查询消防传感器部件状态】================开始===="+JSONObject.toJSONString(param)); try { String res = HKTools.sensorStatusSearch(toMap(param)); String res = HKTools.sensorStatusSearch(JSONObject.toJSONString(param)); TypeReference typeReference = new TypeReference<BaseResponse<BaseListPageResponse<SensorStatusListResponse>>>(){}; BaseResponse<BaseListPageResponse<SensorStatusListResponse>> result = JSONObject.parseObject(res, typeReference.getType()); @@ -963,7 +963,7 @@ public static BaseResponse<BaseListPageResponse<FireChannelListResponse>> fireChannelSearch(FireChannelListRequest param){ log.info("【海康查询消防传感器列表】================开始===="+JSONObject.toJSONString(param)); try { String res = HKTools.fireChannelSearch(toMap(param)); String res = HKTools.fireChannelSearch(JSONObject.toJSONString(param)); TypeReference typeReference = new TypeReference<BaseResponse<BaseListPageResponse<FireChannelListResponse>>>(){}; BaseResponse<BaseListPageResponse<FireChannelListResponse>> result = JSONObject.parseObject(res, typeReference.getType()); @@ -981,7 +981,7 @@ public static BaseResponse<BaseListPageResponse<FireDeviceListResponse>> fireDeviceSearch(FireDeviceListRequest param){ log.info("【海康询消防设备列表】================开始===="+JSONObject.toJSONString(param)); try { String res = HKTools.fireDeviceSearch(toMap(param)); String res = HKTools.fireDeviceSearch(JSONObject.toJSONString(param)); TypeReference typeReference = new TypeReference<BaseResponse<BaseListPageResponse<FireDeviceListResponse>>>(){}; BaseResponse<BaseListPageResponse<FireDeviceListResponse>> result = JSONObject.parseObject(res, typeReference.getType()); @@ -1338,7 +1338,6 @@ log.error("【海康获取全部月台信息】================失败====:\n" + e.getMessage()); } return null; } /** *发送消息给LED server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -1027,7 +1027,6 @@ */ private void dealCarsInErrorPlatformBiz( PlatformJob model,EventPlatformCarsStatusInfoRequest status) { //TODO-----------------处理车辆进入错误月台业务逻辑 List<PlatformDevice> deviceList = platformDeviceMapper.selectList(new QueryWrapper<PlatformDevice>().lambda() .eq(PlatformDevice::getPlatformId,model.getPlatformId()) .eq(PlatformDevice::getIsdeleted,Constants.ZERO)); @@ -1041,7 +1040,6 @@ continue; } if(Constants.equalsInteger(device.getType(),Constants.ZERO)){ //如果是LED TransparentChannelBodyRequest body = new TransparentChannelBodyRequest(); TransparentChannelHeadRequest head = new TransparentChannelHeadRequest(); @@ -1053,16 +1051,21 @@ body.setMethod("ControlLedGereral");//固定值 request.setIndexCode(device.getHkId()); request.setOperationType(219);//固定值 regions.setActionType(0); regions.setActionType(32); regions.setContent(content); regions.setRegionNo(1); regions.setRegionType(14); regions.setFontColor(2); regions.setFontColor(1); regions.setCircleTimes(1);//循环次数 regions.setFontSize(31);// regions.setFontSize(32);// regions.setStayTime(1);//单位?? regions.setRegionLeftTopXPos(0); regions.setRegionLeftTopYPos(0); regions.setRegionRightBottomXPos(255); regions.setRegionRightBottomYPos(31); request.setRegions(new ArrayList<>()); request.getRegions().add(regions); regions.setSpeed(13); body.setParams(request); HKService.transparentchannel(head,body); }else if(Constants.equalsInteger(device.getType(),Constants.ZERO)){ @@ -1073,9 +1076,9 @@ if(broadcastList.size()>0){ CustomBroadcastRequest request = new CustomBroadcastRequest(); request.setAudioPointIndexCode(broadcastList); request.setPlayDuration(60);//单位秒 request.setPlayDuration(15);//单位秒 request.setBroadCastMode("tts"); request.setPriority(15); request.setPriority(1); request.setState(1);//播放/停止标识 1-播放,0-停止 request.setPlayTtsContent(content); HKService.customBroadcast(request);