| | |
| | | export function platformJobPage(data) { |
| | | return request.post('/visitsAdmin/cloudService/business/platformJob/page', data) |
| | | } |
| | | // 月台作业统计 分页列表 |
| | | export function platformWorkReportPage(data) { |
| | | return request.post('/visitsAdmin/cloudService/business/platform/platformWorkReportPage', data) |
| | | } |
| | | // 月台调度作业任务 删除 |
| | | export function platformJobDel(id) { |
| | | return request.get('/visitsAdmin/cloudService/business/platformJob/delete?id=' + id) |
| | | } |
| | | // 月台运单详情 |
| | | export function platformWmsJobDetail(id) { |
| | | return request.get('/visitsAdmin/cloudService/business/platformWmsJob/' + id) |
| | | } |
| | | // 月台调度作业任务 签到 |
| | | export function platformJobSign(data) { |
| | | return request.post('/visitsAdmin/cloudService/business/platformJob/signIn', data) |
| | |
| | | next() |
| | | return |
| | | } |
| | | if (to.name === 'login') { |
| | | next() |
| | | return |
| | | } |
| | | getUserInfo() |
| | | .then(userInfo => { |
| | | // 如果用户不存在权限 |
| | |
| | | <template> |
| | | <div class="wrap"> |
| | | <div class="introduce"> |
| | | <h2>{{title}}</h2> |
| | | <h3></h3> |
| | | </div> |
| | | <div class="login"> |
| | | <h1>系统登录 / LOGIN IN</h1> |
| | | <div class="info-input"> |
| | | <el-input v-model="username" placeholder="请输入用户名" prefix-icon="el-icon-user-solid" maxlength="50" v-trim/> |
| | | <el-input v-model="password" placeholder="请输入密码" type="password" prefix-icon="eva-icon-password" maxlength="30" show-password/> |
| | | <div class="captcha-input"> |
| | | <el-input v-model="captcha.value" placeholder="图片验证码" prefix-icon="eva-icon-shield" maxlength="4" @keypress.enter.native="login"/> |
| | | <img v-if="!captcha.loading" :src="captcha.uri" @click="refreshCaptcha"> |
| | | <span v-else><i class="el-icon-loading"></i></span> |
| | | <img src="@/assets/images/bg@2x.png" class="main_bg" alt=""> |
| | | <div class="login_wrap"> |
| | | <div class="login_img"> |
| | | <div class="h3">智慧物流园区安消一体化系统</div> |
| | | </div> |
| | | <div class="form_wrap"> |
| | | <!-- <div class="tabs"> |
| | | <div class="tab active"> |
| | | <div class="name">帐号登录</div> |
| | | <div class="icon"></div> |
| | | </div> |
| | | <div class="tab"> |
| | | <div class="name">手机登录</div> |
| | | <div class="icon"></div> |
| | | </div> |
| | | </div> --> |
| | | <div class="df_ac"> |
| | | <div class="label">帐号</div> |
| | | <div class="line"> |
| | | <el-input v-model="username" placeholder="请输入帐号" maxlength="50" v-trim /> |
| | | </div> |
| | | </div> |
| | | <div class="df_ac"> |
| | | <div class="label">密码</div> |
| | | <div class="line"> |
| | | <el-input v-model="password" placeholder="请输入密码" type="password" maxlength="30" show-password /> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="df_ac"> |
| | | <div class="label">验证码</div> |
| | | <div class="line"> |
| | | <el-input v-model="captcha.value" placeholder="请输入验证码" maxlength="4" @keypress.enter.native="login" /> |
| | | <img v-if="!captcha.loading" class="code_image" :src="captcha.uri" @click="refreshCaptcha"> |
| | | <span v-else><i class="el-icon-loading"></i></span> |
| | | </div> |
| | | </div> |
| | | <el-button :loading="loading" type="primary" class="login_btn" |
| | | @click.native.prevent="login">立即登录</el-button> |
| | | <div class="btn_wrap"> |
| | | <el-checkbox v-model="isRemPsd"> |
| | | <span style="font-size: 13px; font-weight: 400" class="placeholder9">记住密码</span> |
| | | </el-checkbox> |
| | | </div> |
| | | <div class="google"> |
| | | <img src="@/assets/images/ic_google@2x.png" class="img" alt=""> |
| | | <span class="placeholder6">本系统推荐使用GOOGLE浏览器</span> |
| | | </div> |
| | | </div> |
| | | <el-button :loading="loading" @click="login">登 录</el-button> |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | <script> |
| | | import { mapMutations } from 'vuex' |
| | | import { getCaptcha, loginByPassword } from '@/api/system/common' |
| | | import Cookies from "js-cookie"; |
| | | import Cookies from "js-cookie" |
| | | |
| | | export default { |
| | | name: 'Login', |
| | | data () { |
| | | data() { |
| | | return { |
| | | loading: false, |
| | | title: process.env.VUE_APP_TITLE, |
| | | isRemPsd: false, |
| | | username: '', |
| | | password: '', |
| | | // 验证码 |
| | |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.username = localStorage.getItem('username') || '' |
| | | this.password = localStorage.getItem('password') || '' |
| | | const isRemPsd = localStorage.getItem('isRemPsd') || false |
| | | this.isRemPsd = JSON.parse(isRemPsd) |
| | | this.refreshCaptcha() |
| | | }, |
| | | methods: { |
| | | ...mapMutations(['setUserInfo']), |
| | | // 登录 |
| | | login () { |
| | | login() { |
| | | if (this.loading) { |
| | | return |
| | | } |
| | |
| | | }) |
| | | .then((res) => { |
| | | // window.location.href = process.env.VUE_APP_CONTEXT_PATH |
| | | Cookies.set('dm_user_token',res) |
| | | window.location.reload() |
| | | if (this.isRemPsd) { |
| | | localStorage.setItem('username', this.username.trim()) |
| | | localStorage.setItem('password', this.password.trim()) |
| | | localStorage.setItem('isRemPsd', this.isRemPsd) |
| | | } else { |
| | | localStorage.removeItem('username') |
| | | localStorage.removeItem('password') |
| | | localStorage.removeItem('isRemPsd') |
| | | } |
| | | Cookies.set('dm_user_token', res) |
| | | this.$router.push('index') |
| | | }) |
| | | .catch(e => { |
| | | this.refreshCaptcha() |
| | |
| | | }) |
| | | }, |
| | | // 刷新验证码 |
| | | refreshCaptcha () { |
| | | refreshCaptcha() { |
| | | this.captcha.loading = true |
| | | getCaptcha() |
| | | .then(data => { |
| | |
| | | }) |
| | | }, |
| | | // 登录前验证 |
| | | __check () { |
| | | __check() { |
| | | if (this.username.trim() === '') { |
| | | this.$tip.error('请输入用户名') |
| | | return false |
| | |
| | | return true |
| | | } |
| | | }, |
| | | created () { |
| | | this.refreshCaptcha() |
| | | } |
| | | |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/style/variables.scss"; |
| | | |
| | | div { |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | $input-gap: 30px; |
| | | |
| | | .wrap { |
| | | display: flex; |
| | | width: 100%; |
| | | height: 100vh; |
| | | background-image: url("../assets/images/login.jpg"); |
| | | background-repeat: no-repeat; |
| | | background-size: auto 180%; |
| | | background-clip: content-box; |
| | | background-position: center; |
| | | position: relative; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | |
| | | // 左边介绍 |
| | | .introduce { |
| | | padding-left: 10%; |
| | | .main_bg { |
| | | position: absolute; |
| | | width: 100%; |
| | | height: 100%; |
| | | left: 0; |
| | | top: 0; |
| | | z-index: -1; |
| | | } |
| | | |
| | | .login_wrap { |
| | | width: 1000px; |
| | | height: 600px; |
| | | box-sizing: border-box; |
| | | color: #fff; |
| | | background: rgba(0, 0, 0, 0.4); |
| | | background: #ffffff; |
| | | box-shadow: 0px 20px 60px 0px rgba(0, 0, 0, 0.11); |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | h2 { |
| | | font-size:34px; |
| | | font-style: italic; |
| | | font-weight: 900; |
| | | margin-top: 50px; |
| | | |
| | | .login_img { |
| | | width: 500px; |
| | | height: 600px; |
| | | background: url("../assets/images/login_img@2x.png"); |
| | | background-size: 100% 100%; |
| | | padding-left: 40px; |
| | | padding-top: 80px; |
| | | |
| | | .h3 { |
| | | font-size: 28px; |
| | | font-weight: 700; |
| | | color: #fff; |
| | | margin-bottom: 26px; |
| | | } |
| | | |
| | | .text { |
| | | font-size: 18px; |
| | | color: #fff; |
| | | } |
| | | } |
| | | h3 { |
| | | font-size: 49px; |
| | | font-weight: 300; |
| | | margin: 25px 0; |
| | | |
| | | .form_wrap { |
| | | flex: 1; |
| | | height: 100%; |
| | | background-color: #fff; |
| | | box-sizing: border-box; |
| | | /* padding: 50px 80px 20px; */ |
| | | padding: 80px 80px 20px; |
| | | position: relative; |
| | | |
| | | .tabs { |
| | | display: flex; |
| | | justify-content: space-evenly; |
| | | font-size: 20px; |
| | | color: #666666; |
| | | margin-bottom: 30px; |
| | | |
| | | .tab { |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | align-items: center; |
| | | |
| | | .icon { |
| | | width: 36px; |
| | | height: 4px; |
| | | background: #fff; |
| | | border-radius: 2px; |
| | | margin-top: 8px; |
| | | } |
| | | } |
| | | |
| | | .active { |
| | | font-weight: 500; |
| | | font-size: 24px; |
| | | color: #222222; |
| | | |
| | | .icon { |
| | | background: #207FF7; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .df_ac { |
| | | flex-direction: column; |
| | | align-items: flex-start; |
| | | } |
| | | |
| | | .title { |
| | | font-size: 24px; |
| | | margin-top: 70px; |
| | | margin-bottom: 48px; |
| | | text-align: center; |
| | | } |
| | | |
| | | .label { |
| | | color: #222222; |
| | | margin-bottom: 18px; |
| | | font-size: 14px; |
| | | margin-right: 12px; |
| | | width: 42px; |
| | | } |
| | | |
| | | &.ey { |
| | | .label { |
| | | width: 135px; |
| | | } |
| | | } |
| | | |
| | | .line { |
| | | margin-bottom: 17px; |
| | | display: flex; |
| | | width: 100%; |
| | | |
| | | .el-input { |
| | | height: 40px; |
| | | |
| | | // font-size: 14px; |
| | | ::v-deep .el-input__inner { |
| | | height: 40px !important; |
| | | } |
| | | } |
| | | |
| | | .code_image { |
| | | width: 100px; |
| | | margin-left: 10px; |
| | | } |
| | | } |
| | | |
| | | .forget { |
| | | justify-content: space-between; |
| | | width: 100%; |
| | | |
| | | .text { |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | |
| | | .login_btn { |
| | | width: 100%; |
| | | height: 40px; |
| | | background: $primary-color; |
| | | box-shadow: 0px 2px 8px 0px rgba(67, 94, 190, 0.15); |
| | | border-radius: 2px; |
| | | margin: 0 auto; |
| | | font-weight: 500; |
| | | font-size: 16px; |
| | | } |
| | | |
| | | .google { |
| | | position: absolute; |
| | | left: 50%; |
| | | transform: translate(-50%, 0); |
| | | bottom: 20px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 100%; |
| | | font-size: 12px; |
| | | |
| | | .img { |
| | | margin-right: 5px; |
| | | width: 18px; |
| | | } |
| | | } |
| | | |
| | | .btn_wrap { |
| | | margin-top: 20px; |
| | | } |
| | | |
| | | .agreement { |
| | | text-align: center; |
| | | } |
| | | |
| | | .google { |
| | | position: absolute; |
| | | left: 50%; |
| | | transform: translate(-50%, 0); |
| | | bottom: 20px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 100%; |
| | | font-size: 12px; |
| | | |
| | | .img { |
| | | margin-right: 5px; |
| | | width: 18px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 右边登录 |
| | | .login { |
| | | height: 100%; |
| | |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | box-sizing: border-box; |
| | | |
| | | h1 { |
| | | font-size: 28px; |
| | | font-weight: 500; |
| | | } |
| | | |
| | | .info-input { |
| | | margin-top: $input-gap; |
| | | margin-bottom: 60px; |
| | | |
| | | /deep/ .el-input { |
| | | margin-top: 30px; |
| | | |
| | | .el-input__inner { |
| | | height: 50px; |
| | | background: #F9F9F9; |
| | | border: 1px solid transparent; |
| | | |
| | | &:focus { |
| | | border: 1px solid $primary-color; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 验证码输入 |
| | | .captcha-input { |
| | | display: flex; |
| | | margin-top: $input-gap; |
| | | height: 50px; |
| | | |
| | | .el-input { |
| | | width: 100%; |
| | | margin-top: 0; |
| | | } |
| | | span, img { |
| | | |
| | | span, |
| | | img { |
| | | width: 45%; |
| | | height: 100%; |
| | | flex-shrink: 0; |
| | | margin-left: 16px; |
| | | } |
| | | |
| | | span { |
| | | display: flex; |
| | | align-items: center; |
| | |
| | | border-radius: 8px; |
| | | } |
| | | } |
| | | |
| | | .el-button { |
| | | height: 50px; |
| | | width: 100%; |
| | |
| | | <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> |
| | | <!-- --> |
| | | <!-- --> |
| | | <DriverDetail v-if="isShowDriver" ref="DriverDetailRef" /> |
| | | <WaybillDetailRef v-if="isShowDetail" ref="WaybillDetailRef" /> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | import QueryForm from '@/components/common/QueryForm' |
| | | import { platformJobPage, platformJobExport, platformJobDel } from '@/api' |
| | | import { statusMap } from '../config' |
| | | import DriverDetail from "@/views/task/driverDetail" |
| | | import WaybillDetailRef from "../components/WaybillDetail.vue" |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import UploadFaceImg from '@/components/common/UploadFaceImg' |
| | | import { Message } from 'element-ui' |
| | |
| | | components: { |
| | | Pagination, |
| | | QueryForm, |
| | | DriverDetail, |
| | | WaybillDetailRef, |
| | | GlobalWindow, |
| | | UploadFaceImg |
| | | }, |
| | | data() { |
| | | return { |
| | | statusMap, |
| | | isShowDriver: false, |
| | | isShowDetail: false, |
| | | exLoading: false, |
| | | loading: false, |
| | | pagination: { |
| | |
| | | this.getList() |
| | | }, |
| | | handleDetail(row) { |
| | | this.isShowDriver = true |
| | | this.isShowDetail = true |
| | | this.$nextTick(() => { |
| | | this.$refs.DriverDetailRef.id = row.id |
| | | this.$refs.DriverDetailRef.type = 6 |
| | | this.$refs.DriverDetailRef.getDetail() |
| | | this.$refs.DriverDetailRef.isShowModal = true |
| | | this.$refs.WaybillDetailRef.isShowModal = true |
| | | this.$refs.WaybillDetailRef.id = row.id |
| | | this.$refs.WaybillDetailRef.getDetail() |
| | | }) |
| | | }, |
| | | handleSizeChange(capacity) { |
| | |
| | | </div> |
| | | </div> |
| | | <div class="footer df_sb"> |
| | | <div v-if="item.type != 4" class="detail">运单详情</div> |
| | | <div @click="handleDetail(item)" v-if="item.type != 4" class="detail">运单详情</div> |
| | | <div v-else></div> |
| | | <el-button type="primary" @click="handleCall(item)">签到</el-button> |
| | | </div> |
| | |
| | | <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="pagination"> |
| | | </pagination> |
| | | </div> |
| | | <WaybillDetailRef v-if="isShowDetail" ref="WaybillDetailRef" /> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import Pagination from '@/components/common/Pagination' |
| | | import WaybillDetailRef from "./WaybillDetail.vue" |
| | | import { platformJobPage, platformJobSign } from '@/api' |
| | | import { statusMap } from '../config' |
| | | import { Message } from 'element-ui' |
| | | export default { |
| | | components: { |
| | | GlobalWindow, |
| | | Pagination |
| | | Pagination, |
| | | WaybillDetailRef |
| | | }, |
| | | data() { |
| | | return { |
| | | statusMap, |
| | | isShowModal: false, |
| | | isShowDetail: false, |
| | | subLoading: false, |
| | | pagination: { |
| | | total: 0, |
| | |
| | | }).then(res => { |
| | | this.dataList = res.records |
| | | this.pagination.total = res.total |
| | | }) |
| | | }, |
| | | handleDetail(row) { |
| | | this.isShowDetail = true |
| | | this.$nextTick(() => { |
| | | this.$refs.WaybillDetailRef.isShowModal = true |
| | | this.$refs.WaybillDetailRef.id = row.id |
| | | this.$refs.WaybillDetailRef.getDetail() |
| | | }) |
| | | }, |
| | | reset() { |
| | |
| | | .footer { |
| | | .detail { |
| | | color: $primaryColor; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | } |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | title="运单详情" |
| | | center |
| | | :visible.sync="isShowModal" |
| | | width="420px" |
| | | :confirm-working="subLoading" |
| | | @confirm="isShowDetail = false" |
| | | > |
| | | <GlobalWindow title="运单详情" center :visible.sync="isShowModal" width="600px" :confirm-working="subLoading" |
| | | @confirm="isShowModal = false"> |
| | | <div class="detail_modal"> |
| | | <div class="head"> |
| | | <div class="plate">皖A12122</div> |
| | | <div class="plate" v-if="info.plateNumber"> |
| | | <span>{{ info.plateNumber.slice(0, 1) }}</span> |
| | | <span>{{ info.plateNumber.slice(1, 2) }}</span> |
| | | <span>·</span> |
| | | <span>{{ info.plateNumber.slice(2) }}</span> |
| | | </div> |
| | | <div class="list"> |
| | | <div class="item"> |
| | | <span>运输单号:</span> |
| | | <span>22222</span> |
| | | <span>{{ info.carryBillCode }}</span> |
| | | </div> |
| | | <div class="item"> |
| | | <span>总运输量:</span> |
| | | <span>22222</span> |
| | | <span>{{ info.ioQty }}万支</span> |
| | | </div> |
| | | <div class="item"> |
| | | <span>驾驶员:</span> |
| | | <span>22222</span> |
| | | <span>{{ info.driverName }} {{ info.driverPhone }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="title">合同列表</div> |
| | | <div class="content"> |
| | | <div class="item"> |
| | | <div class="contract">合同号:1292992</div> |
| | | <div class="placeholder6">收货地:address</div> |
| | | <div class="item" v-for="item in info.wmsJobContractVOList"> |
| | | <div class="contract">合同号:{{ item.contractCode }}</div> |
| | | <div class="placeholder6">收货地:{{ item.address }}</div> |
| | | <div class="list"> |
| | | <div class="line"> |
| | | <div class="left"><span>物料名称:</span><span>黄山</span></div> |
| | | <div class="right"><span>数量:</span><span>100</span></div> |
| | | <div class="line" v-for="line in item.platformWmsDetailList"> |
| | | <div class="left"><span>物料名称:</span><span>{{ line.materialName }}</span></div> |
| | | <div class="right"><span>数量:</span><span>{{ line.ioQty }}万支</span></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import { getPlatform, PlatformEdit, PlatformDel } from '@/api' |
| | | import { platformWmsJobDetail } from '@/api' |
| | | export default { |
| | | components: { |
| | | GlobalWindow |
| | |
| | | return { |
| | | isShowModal: false, |
| | | subLoading: false, |
| | | param: {} |
| | | info: {}, |
| | | id: '' |
| | | |
| | | } |
| | | }, |
| | | methods: { |
| | | handleSub() { |
| | | const { param } = this |
| | | this.subLoading = true |
| | | PlatformEdit({ |
| | | ...param |
| | | }).then(res => { |
| | | this.subLoading = false |
| | | this.isShowEdit = false |
| | | this.$tip.success('提交成功') |
| | | this.getList() |
| | | }, () => { |
| | | this.subLoading = false |
| | | getDetail() { |
| | | const { id } = this |
| | | platformWmsJobDetail(id).then(res => { |
| | | this.info = res |
| | | }) |
| | | } |
| | | } |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "@/assets/style/variables.scss"; |
| | | |
| | | .detail_modal { |
| | | font-size: 12px; |
| | | color: #282828; |
| | | |
| | | .head { |
| | | background: rgba(39, 155, 170, 0.05); |
| | | border-radius: 4px; |
| | | border: 1px solid #dfe2e8; |
| | | padding: 16px; |
| | | |
| | | .plate { |
| | | width: 90px; |
| | | text-align: center; |
| | | display: flex; |
| | | font-weight: 600; |
| | | height: 30px; |
| | | line-height: 30px; |
| | | font-size: 15px; |
| | | color: #111111; |
| | | padding: 4px 5px; |
| | | font-weight: 700; |
| | | border: 1px solid #279baa; |
| | | background-color: #fff; |
| | | border-radius: 4px; |
| | | border: 1px solid $primaryColor; |
| | | padding-right: 4px; |
| | | width:106px; |
| | | span { |
| | | &:nth-of-type(1) { |
| | | background: $primaryColor; |
| | | padding: 0 8px; |
| | | color: #fff; |
| | | } |
| | | |
| | | &:nth-of-type(2) { |
| | | padding-left: 4px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .list { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | margin-top: 16px; |
| | | |
| | | .item { |
| | | width: 50%; |
| | | margin-bottom: 8px; |
| | | |
| | | span { |
| | | &:nth-child(1) { |
| | | color: #666666; |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | .title { |
| | | margin: 16px 0; |
| | | font-weight: 500; |
| | | font-size: 16px; |
| | | color: #222222; |
| | | } |
| | | |
| | | .content { |
| | | .item { |
| | | border-radius: 4px; |
| | | border: 1px solid #dfe2e8; |
| | | padding: 16px; |
| | | margin-bottom: 10px; |
| | | |
| | | .list { |
| | | background: #f7f7f7; |
| | | border-radius: 4px; |
| | | padding: 12px 16px; |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .contract { |
| | | font-weight: 500; |
| | | font-size: 15px; |
| | | color: #279baa; |
| | | margin-bottom: 4px; |
| | | } |
| | | |
| | | .line { |
| | | display: flex; |
| | | margin-bottom: 8px; |
| | | |
| | | &:nth-last-child(1) { |
| | | margin: 0; |
| | | } |
| | | |
| | | div { |
| | | span { |
| | | &:nth-child(1) { |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | .left { |
| | | flex: 6; |
| | | } |
| | | |
| | | .right { |
| | | flex: 4; |
| | | } |
| | |
| | | </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(task)">运单详情</span> |
| | | </div> |
| | | <div v-else></div> |
| | | <div class="right"> |
| | |
| | | this.$refs.PlatformQueuingRef.title = item.name |
| | | }) |
| | | }, |
| | | handleDetail() { |
| | | handleDetail(row) { |
| | | this.isShowDetail = true |
| | | this.$nextTick(() => { |
| | | this.$refs.WaybillDetailRef.isShowModal = true |
| | | this.$refs.WaybillDetailRef.id = row.id |
| | | this.$refs.WaybillDetailRef.getDetail() |
| | | }) |
| | | }, |
| | | getList() { |
| | |
| | | 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; |
| | | } |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="signDate" label="签到时间" min-width="150" /> |
| | | <el-table-column label="操作" width="100" fixed="right"> |
| | | <el-table-column label="操作" align="center" width="100" fixed="right"> |
| | | <template slot-scope="{ row }"> |
| | | <el-button type="text" @click="handleDetail(row)" v-permissions="['business:company:update']">运单详情</el-button> |
| | | <el-button v-if="row.type != 4" type="text" @click="handleDetail(row)" v-permissions="['business:company:update']">运单详情</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | this.isShowDetail = true |
| | | this.$nextTick(() => { |
| | | this.$refs.WaybillDetailRef.isShowModal = true |
| | | this.$refs.WaybillDetailRef.id = row.id |
| | | this.$refs.WaybillDetailRef.getDetail() |
| | | }) |
| | | }, |
| | | } |
| | |
| | | filed: 'platformGroupId', |
| | | type: 'select', |
| | | label: '月台组', |
| | | placeholder: '全部月台组', |
| | | options: [] |
| | | }, |
| | | { |
| | |
| | | label: i.name |
| | | } |
| | | }) |
| | | // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '全部月台组' }) |
| | | }) |
| | | }, |
| | | getList(page) { |
| | |
| | | <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"> |
| | | <template #fastdate> |
| | | <el-radio-group v-model="filters.fastdate" size="small" @input="changeRadio"> |
| | | <el-radio-button label="0">当天</el-radio-button> |
| | | <el-radio-button label="6">近7天</el-radio-button> |
| | | <el-radio-button label="29">近30天</el-radio-button> |
| | | </el-radio-group> |
| | | </template> |
| | | </QueryForm> |
| | | <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="groupName" label="月台组" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="stopCount" label="停靠次数(次)" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="workCountTime" label="工作时长" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="useRata" label="月台使用率" min-width="100" show-overflow-tooltip /> |
| | | </el-table> |
| | | <pagination |
| | | @size-change="handleSizeChange" |
| | | @current-change="getList" |
| | | :pagination="pagination" |
| | | /> |
| | | <!-- <pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> --> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Pagination from '@/components/common/Pagination' |
| | | import QueryForm from '@/components/common/QueryForm' |
| | | import dayjs from 'dayjs' |
| | | import { platformWorkReportPage, 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: {}, |
| | | filters: { |
| | | fastdate: 0, |
| | | selDate: [] |
| | | }, |
| | | list: [], |
| | | total: 0, |
| | | queryFormConfig: { |
| | | formItems: [ |
| | | { |
| | | filed: 'aaaa', |
| | | filed: 'name', |
| | | type: 'input', |
| | | label: '月台名称' |
| | | }, |
| | | { |
| | | filed: 'bbb', |
| | | filed: 'groupId', |
| | | type: 'select', |
| | | label: '月台组', |
| | | placeholder: '全部月台组', |
| | | options: [] |
| | | }, |
| | | { |
| | | type: 'slot', |
| | | filed: 'fastdate', |
| | | label: '' |
| | | }, |
| | | { |
| | | filed: 'selDate', |
| | | type: 'daterange', |
| | | label: '选择时间' |
| | | clearable: false, |
| | | label: '日期' |
| | | } |
| | | ], |
| | | online: true |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | | this.changeRadio('0') |
| | | this.getList() |
| | | }, |
| | | methods: { |
| | | handleSub () { |
| | | changeRadio(day) { |
| | | const arr = [dayjs().subtract(day, 'day').format('YYYY-MM-DD'), dayjs().format('YYYY-MM-DD')] |
| | | this.$set(this.filters, 'selDate', arr) |
| | | this.getList() |
| | | }, |
| | | 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 |
| | | } |
| | | }) |
| | | // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '全部月台组' }) |
| | | }) |
| | | }, |
| | | getList(page) { |
| | | const { pagination, filters } = this |
| | | this.loading = true |
| | | platformWorkReportPage({ |
| | | ...filters, |
| | | queryDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null, |
| | | queryDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null, |
| | | }).then(res => { |
| | | this.loading = false |
| | | this.list = res || [] |
| | | this.list.forEach(item => { |
| | | item.useRata = item.useRata + '%' |
| | | item.workCountTime = item.workCountTime + '时' |
| | | // item.workTime = dayjs.duration(item.workTime, 'seconds').format('H时m分s秒') |
| | | }) |
| | | }, () => { |
| | | this.loading = false |
| | | }) |
| | | }, |
| | | clear() { |
| | | this.filters = { |
| | | fastdate: 0, |
| | | selDate: [] |
| | | } |
| | | this.changeRadio('0') |
| | | }, |
| | | handleSizeChange(capacity) { |
| | | this.pagination.pageSize = capacity |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | </style> |
| | | <style></style> |
| | |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // wms运单详情 |
| | | export const wmsJobDetail = (data) => { |
| | | return http({ |
| | | url: 'visitsAdmin/cloudService/web/driverPlatform/wmsJobDetail', |
| | | method: 'get', |
| | | data |
| | | }) |
| | | } |
| | |
| | | "/admin_interface" : { |
| | | // 这个字段名需与你配置的basePrefixUrl一致,系统识别到带有/dev-api请求的地址时,会在前面拼接上代理服务器地址 |
| | | // "target" : "http://172.20.10.7:10010", // 代理服务器域名或IP地址 |
| | | "target" : "http://192.168.0.103:10010", // 代理服务器域名或IP地址 |
| | | "target" : "http://192.168.0.100:10010", // 代理服务器域名或IP地址 |
| | | // "target" : "http://10.50.250.178:8088/gateway_interface", // 代理服务器域名或IP地址 |
| | | "changeOrigin" : true, // 允许跨域 |
| | | "pathRewrite" : { |
| | |
| | | </view> |
| | | <view class="line"> |
| | | <view class="label">运输单号</view> |
| | | <view class="value" @click="showDetail = true"> |
| | | <text class="waybill_num">{{ param.contractNum }}</text> |
| | | <view class="value" @click="wmsDetail"> |
| | | <text class="waybill_num">{{ param.billCode }}</text> |
| | | <text class="btn">运单详情</text> |
| | | </view> |
| | | </view> |
| | |
| | | <u-popup :show="showDetail" :round="10" :safeAreaInsetBottom="true" closeOnClickOverlay :closeable="true" mode="bottom" @close="showDetail = false"> |
| | | <view class="detail_modal"> |
| | | <view class="modal_title">运单详情</view> |
| | | <view class="id_card"> |
| | | <view class="last">皖</view> |
| | | <view class="name">AD1111</view> |
| | | <view v-if="wmsInfo.plateNumber" class="id_card"> |
| | | <text>{{ wmsInfo.plateNumber.slice(0, 1) }}</text> |
| | | <text>{{ wmsInfo.plateNumber.slice(1, 2) }}</text> |
| | | <text>·</text> |
| | | <text>{{ wmsInfo.plateNumber.slice(2) }}</text> |
| | | </view> |
| | | <!-- --> |
| | | <view class="info"> |
| | | <view class="line"> |
| | | <view class="label">运输单号</view> |
| | | <view class="value">2222</view> |
| | | <view class="value">{{ wmsInfo.carryBillCode }}</view> |
| | | </view> |
| | | <view class="line"> |
| | | <view class="label">驾驶员</view> |
| | | <view class="value">2222</view> |
| | | <view class="value">{{ wmsInfo.driverName }} {{ wmsInfo.driverPhone }}</view> |
| | | </view> |
| | | <view class="line"> |
| | | <view class="label">总运输量</view> |
| | | <view class="value">2222</view> |
| | | <view class="value">{{ wmsInfo.ioQty }}万支</view> |
| | | </view> |
| | | <view class="line"> |
| | | <view class="label">运输公司</view> |
| | | <view class="value">2222</view> |
| | | <view class="value">{{ wmsInfo.carrierName }}</view> |
| | | </view> |
| | | </view> |
| | | <view class="separate"></view> |
| | | <view class="contract_list"> |
| | | <view class="title">合同号:111</view> |
| | | <view class="address">aadd</view> |
| | | <view class="contract_list" v-for="item in wmsInfo.wmsJobContractVOList"> |
| | | <view class="title">合同号:{{ item.contractCode }}</view> |
| | | <view class="address">收货地:{{ item.address }}</view> |
| | | <view class="list"> |
| | | <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 class="item" v-for="line in item.platformWmsDetailList"> |
| | | <view class="line"> |
| | | <view class="label">物料:</view> |
| | | <view class="value">{{ line.materialName }}</view> |
| | | </view> |
| | | <view class="line"> |
| | | <view class="label">数量:</view> |
| | | <view class="value">{{ line.ioQty }}</view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | |
| | | |
| | | <script> |
| | | import keyboardInput from '@/components/keyboard-input/keyboard-input.vue'; |
| | | import { driverTaskJobDetail, driverConfirmTask } from '@/api'; |
| | | import { driverTaskJobDetail, driverConfirmTask, wmsJobDetail } from '@/api'; |
| | | import dayjs from 'dayjs' |
| | | export default { |
| | | components: { |
| | |
| | | data() { |
| | | return { |
| | | param: {}, |
| | | wmsInfo: {}, |
| | | showDate: false, |
| | | showDetail: false, |
| | | minDate: '', |
| | |
| | | }).then(ress => { |
| | | this.param = { ...ress.data, carCodeBack: '' }; |
| | | }); |
| | | }, |
| | | wmsDetail() { |
| | | const { param } = this |
| | | wmsJobDetail({ id: param.id }).then(res => { |
| | | this.wmsInfo = res.data |
| | | this.showDetail = true |
| | | }) |
| | | }, |
| | | dateEnter(e) { |
| | | setTimeout(() => { |
| | |
| | | } |
| | | |
| | | .id_card { |
| | | border-radius: 8rpx; |
| | | display: flex; |
| | | font-weight: 600; |
| | | height: 60rpx; |
| | | line-height: 60rpx; |
| | | font-weight: 600; |
| | | font-size: 36rpx; |
| | | font-size: 32rpx; |
| | | color: #111111; |
| | | text-align: center; |
| | | margin-bottom: 30rpx; |
| | | |
| | | .last { |
| | | background: #e9f5f6; |
| | | width: 60rpx; |
| | | border-radius: 8rpx 0rpx 0rpx 8rpx; |
| | | border: 1rpx solid #dfdede; |
| | | } |
| | | |
| | | .name { |
| | | width: 186rpx; |
| | | border: 1rpx solid #dfdede; |
| | | border-radius: 8rpx; |
| | | border: 1rpx solid #dfdede; |
| | | width: 220rpx; |
| | | margin-bottom: 15rpx; |
| | | text { |
| | | &:nth-of-type(1) { |
| | | background: #e9f5f6; |
| | | padding: 0 12rpx; |
| | | } |
| | | |
| | | &:nth-of-type(2) { |
| | | padding-left: 10rpx; |
| | | } |
| | | |
| | | &:nth-of-type(4) { |
| | | padding-right: 6rpx; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | <view class="line"> |
| | | <view class="label">运输单号</view> |
| | | <view class="value" @click="showDetail = true"> |
| | | <text class="waybill_num">{{param.code}}</text> |
| | | <text class="waybill_num">{{param.billCode}}</text> |
| | | <text class="btn">运单详情</text> |
| | | </view> |
| | | </view> |
| | |
| | | "proxy": {
|
| | | "/gateway_interface": {
|
| | | // 这个字段名需与你配置的basePrefixUrl一致,系统识别到带有/dev-api请求的地址时,会在前面拼接上代理服务器地址
|
| | | "target" : "http://10.50.250.178:8088/gateway_interface", // 代理服务器域名或IP地址
|
| | | // "target": "http://192.168.0.139:10010", // 代理服务器域名或IP地址
|
| | | // "target" : "http://10.50.250.178:8088/gateway_interface", // 代理服务器域名或IP地址
|
| | | "target": "http://192.168.0.100:10010", // 代理服务器域名或IP地址
|
| | | "changeOrigin": true, // 允许跨域
|
| | | "pathRewrite": {
|
| | | "^/gateway_interface": "" // 重写地址,如果实际接口中是不带/dev-api,需要将这个前缀置空,因为这个前缀只是为了识别用,识别完之后就没用了
|