From d39cce94b1e2ac194fbf8c76b4925c7dcb41160e Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期五, 06 九月 2024 18:20:45 +0800
Subject: [PATCH] ll
---
admin/src/api/index.js | 1
admin/src/assets/task/bg_shenhe@2x.png | 0
admin/src/views/platform/LogisticsRecord/waybill.vue | 51 +
admin/src/views/task/driverDetail.vue | 500 ++++++++++++++++++++
admin/src/views/platform/config.js | 11
admin/src/views/platform/queueUp.vue | 206 +++++++
admin/src/api/platform/index.js | 27 +
admin/src/views/platform/platform.vue | 2
admin/src/views/index.vue | 21
admin/src/assets/task/bg_shenhe_fail@2x.png | 0
admin/src/components/common/Header.vue | 2
admin/src/views/task/visReportDetail.vue | 248 +++------
admin/src/api/workbench/index.js | 22
admin/src/views/task/index.vue | 30
h5/pages/staff/task/driver.vue | 3
admin/src/views/platform/LogisticsRecord/subscribe.vue | 298 ++++++++----
admin/src/api/business/approve.js | 4
admin/src/components/common/CommonHeader.vue | 10
admin/src/assets/task/bg_shenhe_chexiao@2x.png | 0
admin/src/assets/task/bg_shenhe_pass@2x.png | 0
20 files changed, 1,114 insertions(+), 322 deletions(-)
diff --git a/admin/src/api/business/approve.js b/admin/src/api/business/approve.js
index 5baffdf..a45e4a1 100644
--- a/admin/src/api/business/approve.js
+++ b/admin/src/api/business/approve.js
@@ -47,3 +47,7 @@
params
})
}
+// 鐗╂祦杞﹂绾﹁鎯�
+export function getDriverJobDetail (id) {
+ return request.get('visitsAdmin/cloudService/business/platformBooks/getDetail?id=' + id)
+}
diff --git a/admin/src/api/index.js b/admin/src/api/index.js
index bfb4e76..af847c6 100644
--- a/admin/src/api/index.js
+++ b/admin/src/api/index.js
@@ -3,3 +3,4 @@
export * from './business/index'
export * from './platform'
export * from './other/other'
+export * from './workbench/index'
diff --git a/admin/src/api/platform/index.js b/admin/src/api/platform/index.js
index c0f68ec..dfcaa52 100644
--- a/admin/src/api/platform/index.js
+++ b/admin/src/api/platform/index.js
@@ -59,3 +59,30 @@
trim: true
})
}
+// 杞﹁締鎺掗槦鎯呭喌
+export function platformLineUpPage (data) {
+ return request.post('/visitsAdmin/cloudService/business/platform/platformLineUpPage', data, {
+ trim: true
+ })
+}
+
+// 鍏ュ洯鍘熷洜
+export function platformReasonList () {
+ return request.get('/visitsAdmin/cloudService/business/platformBooks/platformReasonList')
+}
+// 鐗╂祦杞﹂绾�
+export function platformBooksApply (data) {
+ return request.post('/visitsAdmin/cloudService/business/platformBooks/apply', data)
+}
+// 鑾峰彇鏈堝彴缁� 绛夊緟涓庡紓甯告寕璧锋暟鎹�
+export function getPlatformGroupWork (id) {
+ return request.get('/visitsAdmin/cloudService/business/platform/getPlatformGroupWork?platformGroupId=' + id)
+}
+// 鏈堝彴鍏ュ洯棰勭害 鍒嗛〉鍒楄〃
+export function platformBooksPage (data) {
+ return request.post('/visitsAdmin/cloudService/business/platformBooks/page', data)
+}
+// 鏈堝彴璋冨害浣滀笟浠诲姟 鍒嗛〉鍒楄〃
+export function platformJobPage (data) {
+ return request.post('/visitsAdmin/cloudService/business/platformJob/page', data)
+}
diff --git a/admin/src/api/workbench/index.js b/admin/src/api/workbench/index.js
new file mode 100644
index 0000000..98bb243
--- /dev/null
+++ b/admin/src/api/workbench/index.js
@@ -0,0 +1,22 @@
+import request from '@/utils/request'
+
+// 涓讳綋鏁版嵁
+export function getWorkbenchBody (data) {
+ return request.get('/visitsAdmin/cloudService/business/staging/body', data)
+}
+// 澶撮儴鏁版嵁
+export function getWorkbenchHead (data) {
+ return request.get('/visitsAdmin/cloudService/business/staging/head', data)
+}
+// 瓒呮椂棰勮浜哄憳
+export function getWorkbenchLevel(data) {
+ return request.get('/visitsAdmin/cloudService/business/staging/level', data)
+}
+// 鏍囪宸茶
+export function getWorkbenchSignRead (data) {
+ return request.get('/visitsAdmin/cloudService/business/staging/signRead', data)
+}
+// 浠诲姟涓績澶撮儴
+export function getWorkbenchTaskHead (data) {
+ return request.post('/visitsAdmin/cloudService/business/staging/taskCenterHeadPC', data)
+}
\ No newline at end of file
diff --git a/admin/src/assets/task/bg_shenhe@2x.png b/admin/src/assets/task/bg_shenhe@2x.png
new file mode 100644
index 0000000..904c7cc
--- /dev/null
+++ b/admin/src/assets/task/bg_shenhe@2x.png
Binary files differ
diff --git a/admin/src/assets/task/bg_shenhe_chexiao@2x.png b/admin/src/assets/task/bg_shenhe_chexiao@2x.png
new file mode 100644
index 0000000..474cc2f
--- /dev/null
+++ b/admin/src/assets/task/bg_shenhe_chexiao@2x.png
Binary files differ
diff --git a/admin/src/assets/task/bg_shenhe_fail@2x.png b/admin/src/assets/task/bg_shenhe_fail@2x.png
new file mode 100644
index 0000000..4ac63a2
--- /dev/null
+++ b/admin/src/assets/task/bg_shenhe_fail@2x.png
Binary files differ
diff --git a/admin/src/assets/task/bg_shenhe_pass@2x.png b/admin/src/assets/task/bg_shenhe_pass@2x.png
new file mode 100644
index 0000000..55b4d70
--- /dev/null
+++ b/admin/src/assets/task/bg_shenhe_pass@2x.png
Binary files differ
diff --git a/admin/src/components/common/CommonHeader.vue b/admin/src/components/common/CommonHeader.vue
index aa3672e..4174818 100644
--- a/admin/src/components/common/CommonHeader.vue
+++ b/admin/src/components/common/CommonHeader.vue
@@ -2,7 +2,7 @@
<div class="common-header">
<div class="header">
<div class="logo">
- <div>{{ title }}</div>
+ <div class="title">{{ title }}</div>
<div class="list">
<div class="item active">
<div>鏈嶅姟涓績</div>
@@ -208,6 +208,7 @@
background-color: #2080f7;
}
.list{
+ flex: 1;
display: flex;
align-items: center;
margin-left: 60px;
@@ -241,7 +242,7 @@
.logo {
/* background: url("../../assets/images/top_ic_chilun@2x.png") no-repeat; */
box-sizing: border-box;
- min-width: 280px;
+ min-width: 360px;
height: 56px;
padding: 10px 30px;
// flex-shrink: 0;
@@ -251,6 +252,9 @@
color: #fff;
display: flex;
align-items: center;
+ .title{
+ width: 200px;
+ }
// display: inline;
.title-en {
font-size: 11px;
@@ -259,7 +263,7 @@
}
}
.user {
- width: 712px;
+ width: 212px;
box-sizing: border-box;
height: 56px;
padding-right: 25px;
diff --git a/admin/src/components/common/Header.vue b/admin/src/components/common/Header.vue
index 1800c40..a286282 100644
--- a/admin/src/components/common/Header.vue
+++ b/admin/src/components/common/Header.vue
@@ -41,7 +41,7 @@
h2 {
flex-shrink: 0;
line-height: 48px;
- width: 200px;
+ width: 240px;
font-size: 19px;
color: #606263;
font-weight: normal;
diff --git a/admin/src/views/index.vue b/admin/src/views/index.vue
index 38b95a9..a391765 100644
--- a/admin/src/views/index.vue
+++ b/admin/src/views/index.vue
@@ -1,7 +1,7 @@
<template>
<div class="main_home">
<div class="home_header">
- <div class="mb10 fs17">涓嬪崍濂斤紝绯荤粺绠$悊鍛�</div>
+ <div class="mb10 fs17">涓嬪崍濂斤紝{{ userInfo.realname }}</div>
<div class="fs13">
浠婂ぉ鏄� {{ nowDate }} {{ nowWeek }}锛屾杩庡洖鍒版櫤鎱х墿娴佸洯鍖哄畨娑堜竴浣撳寲绯荤粺
</div>
@@ -225,6 +225,10 @@
import dayjs from 'dayjs'
import * as echarts from 'echarts'
import { weeks } from '@/utils/config'
+import {
+ getWorkbenchBody,
+ getWorkbenchHead
+} from '@/api'
const colors = ['#52a4f7', '#7678f7', '#5fc6d5']
export default {
data () {
@@ -240,7 +244,13 @@
]
}
},
+ computed: {
+ userInfo(){
+ return this.$store.state.userInfo
+ }
+ },
created () {
+
this.updateDate()
setInterval(() => {
this.updateDate()
@@ -255,11 +265,20 @@
this.nowWeek = weeks[new Date().getDay()]
},
initData () {
+ this.getWorkBody() //涓讳綋鏁版嵁
+ this.getWorkHead() //涓讳綋鏁版嵁
+
this.initEchart1()
this.initEchart2()
this.initEchart3()
this.initEchart4()
},
+ getWorkBody() {
+ getWorkbenchBody()
+ },
+ getWorkHead() {
+ getWorkbenchHead()
+ },
initEchart1 () {
const myChart = echarts.init(document.getElementById('echart1'))
const option = {
diff --git a/admin/src/views/platform/LogisticsRecord/subscribe.vue b/admin/src/views/platform/LogisticsRecord/subscribe.vue
index 92cba1b..3aa5208 100644
--- a/admin/src/views/platform/LogisticsRecord/subscribe.vue
+++ b/admin/src/views/platform/LogisticsRecord/subscribe.vue
@@ -1,133 +1,160 @@
<template>
<div class="main_app">
- <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="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="80"
- align="center"
- show-overflow-tooltip
- >
+ <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
+ <div>
+ <el-button type="primary" @click="handleEdit" icon="el-icon-plus"
+ v-permissions="['business:platformbooks:create']">鏂板缓</el-button>
+ <el-button type="primary" @click="handleEx" v-permissions="['business:platformbooks:exportExcel']">瀵煎嚭</el-button>
+ </div>
+ <el-table class="mb20" v-loading="loading" :data="list" stripe>
+ <el-table-column prop="contractNum" label="鍚堝悓鍗曞彿" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="inReason" label="鍏ュ洯鍘熷洜" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="totalNum" 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="driverName" label="椹鹃┒鍛�" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="driverPhone" label="鑱旂郴鏂瑰紡" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="inTypeTemp" label="鍏ュ簱绫诲瀷" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="arriveDate" label="棰勭害鍒板満鏃堕棿" min-width="150" show-overflow-tooltip />
+ <el-table-column prop="name" label="瀹℃壒缁撴灉" min-width="100" show-overflow-tooltip>
<template v-slot="scope">
- <el-button type="text" @click="handleEdit(scope.row)">棰勭害璇︽儏</el-button>
+ <span v-if="scope.row.status == '0'">寰呭鎵�</span>
+ <span v-if="scope.row.status == '1'">瀹℃壒涓�</span>
+ <span v-if="scope.row.status == '2'">瀹℃壒閫氳繃</span>
+ <span v-if="scope.row.status == '3'">瀹℃壒椹冲洖</span>
+ <span v-if="scope.row.status == '4'">宸插彇娑�</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="name" label="褰撳墠瀹℃壒浜�" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="150" show-overflow-tooltip />
+ <el-table-column prop="name" label="鎿嶄綔" min-width="120" align="center" fixed="right" show-overflow-tooltip>
+ <template v-slot="scope">
+ <el-button type="text" v-permissions="['business:platformbooks:detail']"
+ @click="handleDetail(scope.row)">棰勭害璇︽儏</el-button>
</template>
</el-table-column>
</el-table>
- <pagination
- @size-change="handleSizeChange"
- @current-change="getList"
- :pagination="pagination"
- />
+ <pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
+ <!-- -->
+ <GlobalWindow :title="param.id ? '缂栬緫鐗╂祦杞﹂绾�' : '鏂板鐗╂祦杞﹂绾�'" center :visible.sync="isShowEdit" width="600px"
+ :confirm-working="subLoading" @confirm="onSubmit">
+ <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px">
+ <div class="param_title">杩愯緭淇℃伅</div>
+ <el-form-item label="鍏ュ洯鍘熷洜" prop="inReason">
+ <el-select v-model="param.inReason" class="w300" placeholder="璇烽�夋嫨">
+ <el-option v-for="item in reasonList" :key="item.id" :label="item.reason" :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍚堝悓鍙�" prop="contractNum">
+ <el-input v-model="param.contractNum" class="w300" placeholder="璇疯緭鍏ュ悎鍚屽彿"></el-input>
+ </el-form-item>
+ <el-form-item label="鍒板満鏃堕棿" prop="arriveDate">
+ <el-date-picker v-model="param.arriveDate" value-format="yyyy-MM-dd HH:mm:ss" type="datetime" class="w300"
+ placeholder="璇烽�夋嫨">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="鍏ュ簱绫诲瀷" prop="inType">
+ <div>
+ <el-radio v-model="param.inType" :label="0">鏁翠欢鐩�</el-radio>
+ <el-radio v-model="param.inType" :label="1">浠剁儫</el-radio>
+ </div>
+ </el-form-item>
+ <el-form-item label="鎬昏繍杈撻噺" prop="totalNum">
+ <el-input v-model="param.totalNum" placeholder="璇疯緭鍏�" class="w300"></el-input>
+ <span class="ml10">涓囨敮</span>
+ </el-form-item>
+ <el-form-item label="鍑嗚繍璇佺収鐗�" prop="transportImgFull">
+ <UploadFaceImg :file="{ 'imgurlfull': param.transportImgFull, 'imgurl': param.transportImg }"
+ :uploadData="{ folder: 'PLATFORM' }" @uploadSuccess="uploadSuccess" @uploadEnd="isUploading = false"
+ @uploadBegin="isUploading = true" />
+ </el-form-item>
+ <div class="param_title">鍙告満/杞﹁締淇℃伅</div>
+ <el-form-item label="鍙告満濮撳悕" prop="driverName">
+ <el-input v-model="param.driverName" placeholder="璇疯緭鍏�" class="w300"></el-input>
+ </el-form-item>
+ <el-form-item label="鍙告満鎵嬫満鍙�" prop="driverPhone">
+ <el-input v-model="param.driverPhone" placeholder="璇疯緭鍏�" class="w300"></el-input>
+ </el-form-item>
+ <el-form-item label="杞﹀墠鐗岀収鍙�" prop="carCodeFront">
+ <el-input v-model="param.carCodeFront" placeholder="璇疯緭鍏�" class="w300"></el-input>
+ </el-form-item>
+ <el-form-item label="杞﹀悗鐗岀収鍙�" prop="carCodeBack">
+ <el-input v-model="param.carCodeBack" placeholder="璇疯緭鍏�" class="w300"></el-input>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+ <!-- -->
+ <DriverDetail v-if="isShowDriver" ref="DriverDetailRef" />
</div>
</template>
<script>
import Pagination from '@/components/common/Pagination'
import QueryForm from '@/components/common/QueryForm'
+import { platformBooksPage, platformReasonList, platformBooksApply } from '@/api'
+import DriverDetail from "@/views/task/driverDetail"
+import GlobalWindow from '@/components/common/GlobalWindow'
+import UploadFaceImg from '@/components/common/UploadFaceImg'
export default {
components: {
Pagination,
- QueryForm
+ QueryForm,
+ DriverDetail,
+ GlobalWindow,
+ UploadFaceImg
},
- data () {
+ data() {
return {
+ isShowDriver: false,
loading: false,
pagination: {
- capacity: 10,
- page: 1
+ pageSize: 10,
+ page: 1,
+ total: 0
},
- filters: {},
+ filters: {
+ selDate: []
+ },
list: [],
- total: 0,
+
isShowEdit: false,
+ subLoading: false,
param: {},
- rules: {},
+ reasonList: [],
+ rules: {
+ contractNum: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+ totalNum: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+ driverName: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+ driverPhone: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+ carCodeFront: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+ carCodeBack: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+
+ inReason: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+ arriveDate: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+ inType: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+ driverName: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+ },
queryFormConfig: {
formItems: [
{
- filed: 'aaaa',
+ filed: 'carCodeFront',
type: 'input',
label: '杞︾墝鍙�'
},
{
- filed: 'bbb',
+ filed: 'driverName',
type: 'input',
label: '椹鹃┒鍛�'
},
{
- filed: 'cc',
+ filed: 'contractNum',
type: 'input',
label: '鍚堝悓鍗曞彿'
},
{
filed: 'selDate',
- type: 'daterange',
+ type: 'datetimerange',
label: '鎿嶄綔鏃堕棿'
}
],
@@ -135,26 +162,93 @@
},
}
},
+ created() {
+ this.getList()
+ },
methods: {
- handleSub () {
+ getList(page) {
+ const { pagination, filters } = this
+ this.loading = true
+ platformBooksPage({
+ model: {
+ ...filters,
+ arriveDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
+ arriveDateEnd: 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 ? '鏁存墭鐩�' : '浠剁儫'
+ })
+ this.pagination.total = res.total || 0
+ }, () => {
+ this.loading = false
+ })
+ },
+ handleEx() {
+
+ },
+ onSubmit() {
+ this.$refs['ruleForm'].validate((valid) => {
+ const param = this.param
+ if (valid) {
+ platformBooksApply({...param}).then(res => {
+
+ })
+ }
+ })
+ },
+ uploadSuccess(file) {
+ this.$set(this.param, 'transportImg', file.imgurl)
+ this.$set(this.param, 'transportImgFull', file.imgurlfull)
+ },
+ handleEdit(row) {
+ this.isShowEdit = true
+ this.getplatformReason()
+ },
+ getplatformReason() {
+ platformReasonList().then(res => {
+ this.reasonList = res || []
+ })
+ },
+ handleSub() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
alert('submit!')
}
})
},
- getList (page) { },
- clear () { },
- handleEdit (row) {
- this.isShowEdit = true
+ clear() {
+ this.pagination.page = 1
+ this.filters = {
+ selDate: []
+ }
+ this.getList()
},
- handleDel () { },
- handleSizeChange (capacity) {
- this.pagination.capacity = capacity
+ handleDetail(row) {
+ this.isShowDriver = true
+ this.$nextTick(() => {
+ this.$refs.DriverDetailRef.id = row.id
+ this.$refs.DriverDetailRef.type = 6
+ this.$refs.DriverDetailRef.getDetail()
+ this.$refs.DriverDetailRef.isShowModal = true
+ })
+ },
+ handleDel() { },
+ handleSizeChange(capacity) {
+ this.pagination.pageSize = capacity
}
}
}
</script>
-
-<style>
-</style>
+<style lang="scss" scoped>
+.param_title {
+ font-size: 18px;
+ font-weight: 600;
+ color: #000000;
+ margin-bottom: 15px;
+}
+</style>
\ No newline at end of file
diff --git a/admin/src/views/platform/LogisticsRecord/waybill.vue b/admin/src/views/platform/LogisticsRecord/waybill.vue
index 887f2ab..2f39dd4 100644
--- a/admin/src/views/platform/LogisticsRecord/waybill.vue
+++ b/admin/src/views/platform/LogisticsRecord/waybill.vue
@@ -84,7 +84,13 @@
width="480px"
>
<el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px">
- <el-form-item label="杩愯緭鍗曞彿" prop="name">
+ <el-form-item label="鍏ュ洯鍘熷洜" prop="name">
+ <el-input v-model="param.aaa" placeholder="璇疯緭鍏�"></el-input>
+ </el-form-item>
+ <el-form-item label="鍚堝悓鍙�" prop="name">
+ <el-input v-model="param.aaa" placeholder="璇疯緭鍏�"></el-input>
+ </el-form-item>
+ <el-form-item label="鍒板満鏃堕棿" prop="name">
<el-input v-model="param.aaa" placeholder="璇疯緭鍏�"></el-input>
</el-form-item>
<el-form-item label="杞﹀墠鐗岀収鍙�" prop="name">
@@ -115,6 +121,7 @@
<script>
import Pagination from '@/components/common/Pagination'
import QueryForm from '@/components/common/QueryForm'
+import { platformJobPage } from '@/api'
export default {
components: {
Pagination,
@@ -124,29 +131,29 @@
return {
loading: false,
pagination: {
- capacity: 10,
- page: 1
+ pageSize: 10,
+ page: 1,
+ total: 0
},
filters: {},
list: [],
- total: 0,
isShowEdit: false,
param: {},
rules: {},
queryFormConfig: {
formItems: [
{
- filed: 'aaaa',
+ filed: 'carCodeFront',
type: 'input',
label: '杞︾墝鍙�'
},
{
- filed: 'bbb',
+ filed: 'driverName',
type: 'input',
label: '椹鹃┒鍛�'
},
{
- filed: 'cc',
+ filed: 'code',
type: 'input',
label: '杩愯緭鍗曞彿'
},
@@ -160,6 +167,9 @@
},
}
},
+ created() {
+ this.getList()
+ },
methods: {
handleSub () {
this.$refs.ruleForm.validate((valid) => {
@@ -168,18 +178,33 @@
}
})
},
- getList (page) { },
- clear () { },
+ getList (page) {
+ const { pagination, filters } = this
+ this.loading = true
+ platformJobPage({
+ model: { ...filters, jobType: 0 },
+ capacity: pagination.pageSize,
+ page: pagination.page,
+ }).then(res => {
+ this.loading = false
+ this.list = res.records || []
+ this.pagination.total = res.total || 0
+ }, () => {
+ this.loading = false
+ })
+ },
+ clear () {
+ this.pagination.page = 1
+ this.filters = {}
+ this.getList()
+ },
handleEdit (row) {
this.isShowEdit = true
},
handleDel () { },
handleSizeChange (capacity) {
- this.pagination.capacity = capacity
+ this.pagination.pageSize = capacity
}
}
}
</script>
-
-<style>
-</style>
diff --git a/admin/src/views/platform/config.js b/admin/src/views/platform/config.js
index e4a6ab5..61b54a7 100644
--- a/admin/src/views/platform/config.js
+++ b/admin/src/views/platform/config.js
@@ -12,3 +12,14 @@
10: '宸茬鍥�',
11: '宸茶繃鍙�'
}
+export const queryQueueUpConfig = {
+ formItems: [
+ {
+ filed: 'carCodeFront',
+ type: 'input',
+ label: '鎼滅储杞﹁締',
+ placeholder: '璇疯緭鍏ヨ溅鐗屽彿'
+ },
+ ],
+ online: true
+}
\ No newline at end of file
diff --git a/admin/src/views/platform/platform.vue b/admin/src/views/platform/platform.vue
index a21ad90..8ae1b2c 100644
--- a/admin/src/views/platform/platform.vue
+++ b/admin/src/views/platform/platform.vue
@@ -68,7 +68,7 @@
</el-table-column>
<el-table-column prop="broadcastNames" label="鍏宠仈骞挎挱" min-width="100px"></el-table-column>
<el-table-column prop="ledNames" label="鍏宠仈LED" min-width="100px"></el-table-column>
- <el-table-column prop="hkDate" label="鍚屾鏃堕棿" min-width="140px"></el-table-column>
+ <el-table-column prop="hkDate" label="鍚屾鏃堕棿" min-width="150px"></el-table-column>
<el-table-column
v-if="containPermissions(['business:platform:update', 'business:platform:delete'])"
label="鎿嶄綔"
diff --git a/admin/src/views/platform/queueUp.vue b/admin/src/views/platform/queueUp.vue
index 785983c..9b7f0b2 100644
--- a/admin/src/views/platform/queueUp.vue
+++ b/admin/src/views/platform/queueUp.vue
@@ -2,77 +2,237 @@
<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>
+ </div>
</div>
+ <QueryForm v-model="filters" :query-form-config="queryQueueUpConfig" @handleQuery="getList(1)" @clear="clear">
+ </QueryForm>
+ <div class="main_content">
+ <div class="static_wrap">
+ <span>绛夊緟锛�<span class="num">{{ staticParam.waitNum }}</span></span>
+ <span class="mr30">{{ }}</span>
+ <span>鎸傝捣锛�<span class="red">{{ staticParam.exceptionNum }}</span></span>
+ <span></span>
+ </div>
</div>
+ <el-table class="mb20" v-loading="loading" :data="dataList" stripe row-key="id" default-expand-all>
+ <el-table-column type="index" label="搴忓彿" width="80" />
+ <el-table-column label="杞︾墝鍙�" width="160">
+ <template slot-scope="{ row }">
+ <div class="plate_id">
+ <span>{{ row.carCodeFront.slice(0, 1) }}</span>
+ <span>{{ row.carCodeFront.slice(1, 2) }}</span>
+ <span>路</span>
+ <span>{{ row.carCodeFront.slice(2) }}</span>
+ </div>
+ </template>
+ </el-table-column>
+ <el-table-column prop="carrierName" label="杩愯緭鍏徃" min-width="200" />
+ <el-table-column prop="code" label="杩愬崟鍙�" min-width="200" />
+ <el-table-column prop="totalNum" label="鎬昏繍杈撻噺(涓囨敮)" min-width="130" />
+ <el-table-column prop="driverName" label="椹鹃┒鍛�" min-width="140">
+ <template slot-scope="{ row }">
+ <span class="mr10">{{ row.driverName }}</span>
+ <span>{{ row.drivierPhone }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="signDate" label="绛惧埌鏃堕棿" min-width="150" />
+ <el-table-column label="鎿嶄綔" width="100" fixed="right">
+ <template slot-scope="{ row }">
+ <el-button type="text" @click="handleDetail(row)" v-permissions="['business:company:update']">杩愬崟璇︽儏</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="pagination" />
+
+ <!-- -->
+ <WaybillDetail
+ ref="WaybillDetailRef"
+ v-if="isShowDetail"
+ @success="getList"
+ @close="isShowDetail = false"
+ />
</div>
</template>
<script>
+import Pagination from '@/components/common/Pagination'
+import QueryForm from '@/components/common/QueryForm'
import {
- getPlatformGroupList
+ getPlatformGroupList,
+ platformLineUpPage,
+ getPlatformGroupWork
} from '@/api'
+import { queryQueueUpConfig } from './config'
+import WaybillDetail from './components/WaybillDetail.vue'
export default {
- data () {
+ components: {
+ Pagination,
+ QueryForm,
+ WaybillDetail
+ },
+ data() {
return {
filters: {},
activeGroup: {},
PlatGroupList: [],
-
- isShowSet: false, // 鏈堝彴閰嶇疆
- setParam: {},
+ staticParam: {},
+ dataList: [],
+ loading: false,
+ pagination: {
+ pageSize: 10,
+ page: 1,
+ total: 0,
+ },
+ queryQueueUpConfig,
isShowDetail: false, // 杩愬崟璇︽儏
detail: {}
}
},
- created () {
+ created() {
this.getPlatGroupList()
},
methods: {
- getPlatGroupList () {
+ getPlatGroupList() {
getPlatformGroupList({
queryData: 1,
queryType: 1
}).then(res => {
this.PlatGroupList = res || []
- if (this.activeGroup && this.activeGroup.id) {
- this.activeGroup = res.find(item => item.id === this.activeGroup.id)
- } else {
- this.activeGroup = res[0]
+ if (res && res.length > 0) {
+ if (this.activeGroup && this.activeGroup.id) {
+ this.activeGroup = res.find(item => item.id === this.activeGroup.id)
+ } else {
+ this.activeGroup = res[0]
+ }
+ this.getPlatformGroupWork()
+ this.getList()
}
})
},
- platgroupClick (item) {
- this.activeGroup = { ...item }
+ getList() {
+ const { activeGroup, pagination, filters } = this
+ this.loading = true
+ platformLineUpPage({
+ model: { platformGroupId: activeGroup.id, ...filters, callType: 3 },
+ capacity: pagination.pageSize,
+ page: pagination.page,
+ }).then(res => {
+ this.loading = false
+ this.dataList = res.records || []
+ this.pagination.total = res.total || 0
+ }, () => {
+ this.loading = false
+ })
},
- getList () { },
- clear () { }
+ getPlatformGroupWork() {
+ const { activeGroup } = this
+ getPlatformGroupWork(activeGroup.id).then(res => {
+ this.staticParam = res || {}
+ })
+ },
+ handleSizeChange(e) {
+ this.pagination.pageSize = e
+ this.getList()
+ },
+ handlePageChange(e) {
+ this.pagination.page = e
+ this.getList()
+ },
+ platgroupClick(item) {
+ this.activeGroup = { ...item }
+ this.pagination.page = 1
+ this.filters = {}
+ this.getPlatformGroupWork()
+ this.getList()
+ },
+ clear() {
+ this.pagination.page = 1
+ this.filters = {}
+ this.getList()
+ },
+ handleDetail(row) {
+ this.isShowDetail = true
+ this.$nextTick(() => {
+ this.$refs.WaybillDetailRef.isShowModal = true
+ })
+ },
}
}
</script>
<style lang="scss" scoped>
@import "@/assets/style/variables.scss";
+
+.main_content {
+ background-color: #fff;
+ position: relative;
+ z-index: 999;
+ top: -10;
+ margin: -20px;
+ padding: 0 20px;
+
+ .static_wrap {
+ height: 50px;
+ line-height: 50px;
+ color: #666666;
+ font-size: 15px;
+ padding: 0 20px;
+ background: #F4FAFB;
+ border-radius: 2px 2px 0px 0px;
+ margin-bottom: 36px;
+
+ .num {
+ color: #111111;
+ }
+ }
+}
+
+.plate_id {
+ display: flex;
+ width: 111px;
+ font-weight: 600;
+ height: 30px;
+ line-height: 30px;
+ font-size: 16px;
+ color: #111111;
+ border-radius: 4px;
+ border: 1px solid #dfdede;
+ span {
+ &:nth-of-type(1) {
+ background: $primary-color;
+ padding: 0 6px;
+ color: #fff
+ }
+
+ &:nth-of-type(2) {
+ padding-left: 2px;
+ }
+
+ &:nth-of-type(4) {
+ padding-right: 3px;
+ }
+ }
+}
+
+
.main_header {
.platgroup_tabs {
flex: 1;
display: flex;
border-bottom: 1px solid #dfe2e8;
+
.tab {
color: #666666;
margin-right: 40px;
cursor: pointer;
- padding-bottom: 18px;
+ padding-bottom: 14px;
border-bottom: 2px solid #fff;
}
+
.active {
font-weight: 500;
font-size: 15px;
diff --git a/admin/src/views/task/driverDetail.vue b/admin/src/views/task/driverDetail.vue
new file mode 100644
index 0000000..1af3fe4
--- /dev/null
+++ b/admin/src/views/task/driverDetail.vue
@@ -0,0 +1,500 @@
+<template>
+ <GlobalWindow :title="title" :visible.sync="isShowModal" @confirm="confirm">
+ <div class="modal_wrap">
+ <div class="modal_content">
+ <div class="header">
+ <img v-if="info.status == '3' || info.status == '6'" class="head_bg" src="@/assets/task/bg_shenhe_fail@2x.png" alt="">
+ <img v-else-if="info.status == '2' || info.status == '5'" class="head_bg" src="@/assets/task/bg_shenhe_pass@2x.png" alt="">
+ <img v-else-if="info.status == '4'" class="head_bg" src="@/assets/task/bg_shenhe_chexiao@2x.png" alt="">
+ <img v-else class="head_bg" src="@/assets/task/bg_shenhe@2x.png" alt="">
+ <div class="left">
+ <div class="h1">鐗╂祦杞﹂绾�</div>
+ <div class="time">鎻愪氦鏃堕棿锛歿{ info.createDate }}</div>
+ </div>
+ <div class="right" :class="{ scs: info.status == '2' || info.status == '5', msg: info.status == '3' || info.status == '6' }">{{ statusMap[info.status] }}</div>
+ </div>
+ <div class="info">
+ <div class="title">鍏姟杞︾敵璇蜂俊鎭�</div>
+ <div class="list">
+ <div class="item">
+ <div class="label">鐢宠浜�</div>
+ <div class="value">{{ info.driverName }} {{ info.driverPhone }}</div>
+ </div>
+ <div class="item">
+ <div class="label">杞︾墝鐓�</div>
+ <div class="value">鍓� {{ info.carCodeFront }}锛屽悗 {{ info.carCodeBack }}</div>
+ </div>
+ <div class="item">
+ <div class="label">鍚堝悓缂栧彿</div>
+ <div class="value">{{ info.contractNum }}</div>
+ </div>
+ <div class="item">
+ <div class="label">鍒板巶鏃堕棿</div>
+ <div class="value">{{ info.arriveDate }}</div>
+ </div>
+ <div class="item">
+ <div class="label">鍏ュ簱绫诲瀷</div>
+ <div class="value">{{ info.inType == 0 ? '鏁存墭鐩�' : '浠剁儫' }}</div>
+ </div>
+ <div class="item">
+ <div class="label">鎬昏繍杈撻噺</div>
+ <div class="value">{{ info.totalNum }}涓囨敮</div>
+ </div>
+ <div class="item">
+ <div class="label">鍑嗚繍璇佺収鐗�</div>
+ <div v-if="info.transportImg" class="value">
+ <el-image style="width: 100px" :preview-src-list="[info.prefixUrl + info.transportImg]" :src="info.prefixUrl + info.transportImg" alt="" />
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="side">
+ <div class="side_title">瀹℃壒娴佺▼</div>
+ <div class="list" v-if="info.approveDateVO != null && info.approveDateVO.approveList != null">
+ <div class="item" v-for="item, index in info.approveDateVO.approveList">
+ <div v-if="index != info.approveDateVO.approveList.length - 1" class="separate"></div>
+ <div class="info">
+ <img src="@/assets/icons/ic_tongguo.png" class="iconnew" v-if="item.status == 2" />
+ <img src="@/assets/icons/ic_dangqian.png" class="iconnew" v-if="item.status == 1" />
+ <img src="@/assets/icons/ic_jujue.png" class="iconnew" v-if="item.status == 3" />
+ <img src="@/assets/icons/ic_grey.png" class="iconnew" v-if="item.status == null || item.status == 0" />
+ </div>
+ <div class="avatar_wrap">
+ <img class="img" :src="item.faceImg
+ ? item.faceImg
+ : require('@/assets/avatar/man.png')
+ " />
+ </div>
+ <div class="content">
+ <div class="head">
+ <div class="event">{{ item.title }}</div>
+ <div class="time">{{ item.createDate }}</div>
+ </div>
+ <div class="name_wrap">
+ <span>{{ item.memberName }}<span v-if="item.statusInfo" class="status">({{ item.statusInfo
+ }})</span></span>
+ </div>
+ <div v-if="item.checkInfo" class="remark">
+ {{ item.checkInfo }}
+ </div>
+ <div v-if="item.approveType == 1" class="carbon">
+ <div class="carbon_item" v-for="child in item.approveList" :key="child.id">
+ <img :src="child.faceImg
+ ? child.faceImg
+ : require('@/assets/avatar/man.png')
+ "></img>
+ <div class="text">{{ child.memberName }}</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <!-- -->
+ <template v-slot:footer>
+ <el-button @click="handleAppr(2)" type="primary" class="status-red" v-if="
+ info.approveDateVO != null &&
+ info.approveDateVO.canBeApproved != null &&
+ info.approveDateVO.canBeApproved == 1
+ ">鍚屾剰</el-button>
+ <el-button @click="handleAppr(3)" type="danger" v-if="
+ info.approveDateVO != null &&
+ info.approveDateVO.canBeApproved != null &&
+ info.approveDateVO.canBeApproved == 1
+ ">鎷掔粷</el-button>
+ <el-button @click="isShowModal = false">杩斿洖</el-button>
+ </template>
+ <!-- 鍚屾剰/鎷掔粷 -->
+ <el-dialog append-to-body :title="apprTitle" :visible.sync="isShowAppr" width="480px">
+ <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
+ <el-form-item :prop="param.status == 3 ? 'checkInfo' : ''" :label="param.status == 2 ? '鍚屾剰璇存槑' : '鎷掔粷璇存槑'">
+ <el-input type="textarea" :placeholder="param.status == 2 ? '鍚屾剰璇存槑锛岄潪蹇呭~' : '鎷掔粷璇存槑蹇呭~'
+ " :rows="4" v-model="param.checkInfo" />
+ </el-form-item>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="isShowAppr = false">鍙栨秷</el-button>
+ <el-button :loading="subLoading" type="primary" @click="onSubAppr">纭畾</el-button>
+ </span>
+ </el-dialog>
+ </GlobalWindow>
+</template>
+
+<script>
+import GlobalWindow from '@/components/common/GlobalWindow'
+import {
+ getDriverJobDetail,
+ approveDo
+} from '@/api'
+export default {
+ components: { GlobalWindow },
+ data() {
+ return {
+ id: '',
+ type: '',
+
+ title: '璁垮棰勭害璇︽儏',
+ isShowModal: false,
+ info: {},
+ isShowAppr: false,
+ apprTitle: '鍚屾剰',
+ subLoading: false,
+ param: {},
+
+ isShowProblem: false,
+ rules: {
+ checkInfo: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }]
+ },
+ statusMap: {
+ 0: '寰呭鏍�',
+ 1: '澶勭悊涓�',
+ 2: '宸插悓鎰�',
+ 3: '宸叉嫆缁�',
+ 4: '宸插彇娑�',
+ 5: '浠栦汉鎴栫',
+ 6: '浠栦汉鎷掔粷'
+ },
+ cateList: {
+ 0: '璁垮鐢宠',
+ 1: '璁垮鎶ュ',
+ 2: '鐢ㄨ溅鐢宠',
+ 3: '闅愭偅闅忔墜鎷�',
+ 4: '鐗╂祦杞︾敵璇�'
+ }
+ }
+ },
+ methods: {
+ onSubAppr() {
+ this.$refs.ruleForm.validate((valid) => {
+ if (!valid) {
+ return
+ }
+ this.$dialog.actionConfirm('鎿嶄綔纭', this.param.status === 2 ? '鎮ㄧ‘璁ゅ悓鎰忚鐢宠鍚楋紵' : '鎮ㄧ‘璁ゆ嫆缁濊鐢宠鍚楋紵')
+ .then(() => {
+ this.subLoading = true
+ approveDo({
+ objId: this.id,
+ objType: 6,
+ status: this.param.status,
+ checkInfo: this.param.checkInfo
+ })
+ .then(res => {
+ this.subLoading = false
+ this.$tip.apiSuccess('澶勭悊鎴愬姛')
+ this.getDetail()
+ this.isShowAppr = false
+ })
+ .finally(() => {
+ this.subLoading = false
+ })
+ })
+ })
+ },
+ getDetail() {
+ const { id } = this
+ getDriverJobDetail(id).then(res => {
+ this.info = res
+ if (this.info.approveDateVO && this.info.approveDateVO.approveList.length > 0) {
+ this.info.approveDateVO.approveList.forEach(item => {
+ if (item.approveList && item.approveList.length == 1 && item.type !== 1) {
+ item.title = item.approveList[0].title
+ item.faceImg = item.approveList[0].faceImg
+ item.memberName = item.approveList[0].memberName
+ item.statusInfo = item.approveList[0].statusInfo
+ item.approveList = []
+ }
+ })
+ }
+ })
+ },
+ handleAppr(val) {
+ this.$set(this.param, 'status', val)
+ this.apprTitle = val == 2 ? '鍚屾剰' : '鎷掔粷'
+ this.isShowAppr = true
+ },
+ confirm() {
+ console.log('--')
+ },
+ handleTransfer() {
+ this.isShowProblem = true
+ },
+ reject() { },
+ handleAvatarSuccess() { },
+ beforeAvatarUpload() { }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "@/assets/style/variables.scss";
+
+.upload_box {
+ width: 84px;
+ height: 84px;
+ border-radius: 4px;
+ background-color: #f7f7f7;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ color: #999999;
+ border: 1px solid #e4e4e4;
+
+ .icon {
+ font-size: 24px;
+ }
+
+ .text {
+ font-size: 12px;
+ }
+}
+
+.side_title {
+ font-weight: 600;
+ font-size: 18px;
+ color: #111111;
+ margin-bottom: 20px;
+ margin-left: 20px;
+ margin-top: 20px;
+}
+
+.modal_wrap {
+ display: flex;
+ height: 100%;
+
+ .modal_content {
+ flex: 1;
+ padding: 0px 30px;
+ border-radius: 8px;
+ overflow: hidden;
+ height: 100%;
+
+ .title {
+ font-weight: 600;
+ font-size: 18px;
+ color: #333333;
+ margin-bottom: 20px;
+ margin-top: 30px;
+ }
+
+ .info {
+ .list {
+ display: flex;
+ flex-wrap: wrap;
+
+ .item {
+ display: flex;
+ width: 40%;
+ margin-bottom: 20px;
+
+ &:nth-of-type(2n) {
+ width: 60%;
+ }
+
+ .label {
+ color: #888888;
+ width: 100px;
+ }
+
+ .value {
+ color: #111111;
+ }
+ }
+ }
+ }
+
+ .header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 20px 30px;
+ margin: 0 -30px;
+ border-radius: 8px 8px 0 0;
+ position: relative;
+ .head_bg{
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ z-index: 9;
+ }
+ .h1 {
+ font-weight: 600;
+ font-size: 22px;
+ color: #111111;
+ margin-bottom: 8px;
+ }
+
+ .time {
+ font-size: 14px;
+ color: #999999;
+ }
+
+ .right {
+ height: 40px;
+ font-size: 16px;
+ color: #ffffff;
+ line-height: 40px;
+ padding: 0 20px;
+ background: #207ff7;
+ box-shadow: 4px 4px 0px 0px rgba(32, 127, 247, 0.16);
+ border-radius: 16px 0px 16px 0px;
+ position: relative;
+ z-index: 99;
+ }
+ .scs{
+ background-color: #00BA67;
+ }
+ .msg{
+ background-color: #ED4545;
+ }
+ }
+
+ .table_info {
+ .name_wrap {
+ display: flex;
+ align-items: center;
+
+ .avatar {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ margin-right: 12px;
+ }
+
+ .content {
+ .line {
+ display: flex;
+ }
+
+ .tag {
+ color: #b2cbf9;
+ border: 1px solid #b2cbf9;
+ padding: 0px 4px;
+ border-radius: 4px;
+ margin-left: 6px;
+ }
+ }
+ }
+ }
+ }
+
+ .side {
+ height: 100%;
+ width: 420px;
+ background: #ffffff;
+ border-left: 20px solid #f7f7f7;
+
+ .list {
+ .item {
+ padding: 8px 0;
+ display: flex;
+ margin-bottom: 24px;
+ position: relative;
+ .separate {
+ position: absolute;
+ border-left: 2px dashed #cccccc;
+ left: 31px;
+ height: calc(100% - 2px);
+ top: 42px;
+ }
+ .info{
+ padding-top: 10px;
+ margin-left: 20px;
+ margin-right: 16px;
+ .iconnew {
+ width: 24px;
+ height: 24px;
+ }
+ }
+ .avatar_wrap {
+ width: 40px;
+ height: 40px;
+ position: relative;
+ margin-right: 10px;
+
+ .img {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ }
+
+ .status {
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ }
+
+ }
+
+ .content {
+ flex: 1;
+
+ .head {
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 2px;
+
+ .event {
+ font-size: 15px;
+ }
+
+ .time {
+ font-size: 13px;
+ color: #999999;
+ }
+ }
+
+ .name_wrap {
+ font-size: 13px;
+ color: #777777;
+
+ .status {
+ color: $primary-color;
+ }
+ }
+
+ .remark {
+ margin-top: 6px;
+ background-color: #f7f7f7;
+ padding: 7px 10px;
+ border-radius: 4px;
+ font-size: 13px;
+ color: #666666;
+ line-height: 18px;
+ }
+ }
+
+ .carbon {
+ display: flex;
+ width: 100%;
+ overflow-x: auto;
+ margin-top: 12px;
+ .carbon_item {
+ text-align: center;
+ flex-shrink: 0;
+ width: 60px;
+
+ img {
+ width: 36px;
+ height: 36px;
+ margin: 0 auto;
+ }
+
+ div {
+ font-size: 13px;
+ color: #777777;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+</style>
diff --git a/admin/src/views/task/index.vue b/admin/src/views/task/index.vue
index 8d1c350..00740fb 100644
--- a/admin/src/views/task/index.vue
+++ b/admin/src/views/task/index.vue
@@ -59,24 +59,11 @@
:data="dataList"
stripe
row-key="id"
+ class="mb20"
default-expand-all
>
-<!-- <el-table-column prop="name" label="浠诲姟绫诲瀷" min-width="100">
- <template v-slot="scope">
- <span
- v-if="
- (scope.row.objType || scope.row.objType == 0) &&
- cateList[scope.row.objType].name
- "
- >{{ cateList[scope.row.objType].name }}</span
- >
- </template>
- </el-table-column>-->
<el-table-column label="澶勭悊浜嬮」" min-width="200">
<template slot-scope="{ row }"> {{ row.title}}
-<!-- <span v-if="row.title">{{
- row.title.split("-")[1]
- }}</span>-->
</template>
</el-table-column>
<el-table-column prop="createDate" label="鎻愪氦鏃堕棿" min-width="100">
@@ -100,6 +87,7 @@
<TaskDetail v-if="isShowDetail" ref="DetailRef" />
<VisReportDetail v-if="isShowReport" ref="VisReportDetailRef" />
<DangetDetail v-if="isShowDanger" ref="DangetDetailRef" />
+ <DriverDetail v-if="isShowDriver" ref="DriverDetailRef" />
<!-- 鐢ㄨ溅鐢宠 -->
<OperaCarUseBookWindow ref="OperaDetailsWindow" @success="getList" />
<!-- 闅愭偅 -->
@@ -115,6 +103,7 @@
import TaskDetail from './visSubDetail.vue'
import VisReportDetail from './visReportDetail.vue'
import DangetDetail from './dangetDetail.vue'
+import DriverDetail from './driverDetail.vue'
import OperaCarUseBookWindow from '@/components/business/OperaCarUseBookWindow'
import OperaHiddenDangerWindow from '@/components/business/OperaHiddenDangerWindow'
import OperaVisitsDesWindow from '@/components/business/OperaVisitsDesWindow'
@@ -130,6 +119,7 @@
VisReportDetail,
DangetDetail,
QueryForm,
+ DriverDetail,
Pagination,
OperaCarUseBookWindow,
OperaHiddenDangerWindow,
@@ -140,6 +130,7 @@
isShowDetail: false,
isShowReport: false,
isShowDanger: false,
+ isShowDriver: false,
filters: {
queryType: '0',
fastdate: 0
@@ -229,6 +220,17 @@
this.$refs.OperaHiddenDangerWindow.open('闅愭偅闅忔墜鎷嶈鎯�', obj)
return
}
+ if (row.objType === 6) {
+ const obj = { ...row, id: row.objId }
+ this.isShowDriver = true
+ this.$nextTick(() => {
+ this.$refs.DriverDetailRef.id = row.objId
+ this.$refs.DriverDetailRef.type = row.objType
+ this.$refs.DriverDetailRef.getDetail()
+ this.$refs.DriverDetailRef.isShowModal = true
+ })
+ return
+ }
if (row.objType === 0) {
this.isShowDetail = true
this.$nextTick(() => {
diff --git a/admin/src/views/task/visReportDetail.vue b/admin/src/views/task/visReportDetail.vue
index fa7d122..2ef8471 100644
--- a/admin/src/views/task/visReportDetail.vue
+++ b/admin/src/views/task/visReportDetail.vue
@@ -20,7 +20,7 @@
<div class="label">鏉ヨ鏃堕棿</div>
<div class="value">{{ info.starttime }}鑷硔{ info.endtime }}</div>
</div>
- <div class="item">
+ <div class="item">
<div class="label">鏉ヨ鍗曚綅</div>
<div class="value">{{ info.companyName }}</div>
</div>
@@ -45,69 +45,24 @@
</div>
<div class="side">
<div class="side_title">瀹℃壒娴佺▼</div>
- <div
- class="list"
- v-if="
- info.approveDateVO != null && info.approveDateVO.approveList != null
- "
- >
- <div
- class="item"
- v-for="(item, index) in info.approveDateVO.approveList"
- :key="item.id"
- >
- <div
- class="separate"
- v-if="index < info.approveDateVO.approveList.length - 1"
- ></div>
+ <div class="list" v-if="
+ info.approveDateVO != null && info.approveDateVO.approveList != null
+ ">
+ <div class="item" v-for="(item, index) in info.approveDateVO.approveList" :key="item.id">
+ <div class="separate" v-if="index < info.approveDateVO.approveList.length - 1"></div>
<div class="info">
- <img
- src="@/assets/icons/ic_tongguo.png"
- class="iconnew"
- v-if="item.status == 2"
- />
- <img
- src="@/assets/icons/ic_dangqian.png"
- class="iconnew"
- v-if="item.status == 1"
- />
- <img
- src="@/assets/icons/ic_jujue.png"
- class="iconnew"
- v-if="item.status == 3"
- />
- <img
- src="@/assets/icons/ic_grey.png"
- class="iconnew"
- v-if="item.status == null || item.status == 0"
- />
+ <img src="@/assets/icons/ic_tongguo.png" class="iconnew" v-if="item.status == 2" />
+ <img src="@/assets/icons/ic_dangqian.png" class="iconnew" v-if="item.status == 1" />
+ <img src="@/assets/icons/ic_jujue.png" class="iconnew" v-if="item.status == 3" />
+ <img src="@/assets/icons/ic_grey.png" class="iconnew" v-if="item.status == null || item.status == 0" />
<div style="display: inline" v-if="item.approveType != 1">
- <img
- v-if="item.faceImg != null && item.faceImg != ''"
- :src="item.faceImg"
- class="avatar"
- alt=""
- />
- <img
- v-if="item.faceImg == null || item.faceImg == ''"
- src="@/assets/avatar/man.png"
- class="avatar"
- alt=""
- />
+ <img v-if="item.faceImg != null && item.faceImg != ''" :src="item.faceImg" class="avatar" alt="" />
+ <img v-if="item.faceImg == null || item.faceImg == ''" src="@/assets/avatar/man.png" class="avatar"
+ alt="" />
</div>
<div style="display: inline" v-if="item.approveType == 1">
- <img
- v-if="item.type != 1"
- src="@/assets/icons/ic_duoren.png"
- class="avatar"
- alt=""
- />
- <img
- v-if="item.type == 1"
- src="@/assets/icons/ic_chaosong.png"
- class="avatar"
- alt=""
- />
+ <img v-if="item.type != 1" src="@/assets/icons/ic_duoren.png" class="avatar" alt="" />
+ <img v-if="item.type == 1" src="@/assets/icons/ic_chaosong.png" class="avatar" alt="" />
</div>
<div class="content">
<div class="line">
@@ -117,47 +72,27 @@
<div class="line">
<div class="company">
{{ item.memberName }}
- <div
- style="display: inline"
- v-if="item.statusInfo != null && item.statusInfo != ''"
- >
+ <div style="display: inline" v-if="item.statusInfo != null && item.statusInfo != ''">
锛�<span class="status-green">{{
item.statusInfo || ""
- }}</span
- >锛�
+ }}</span>锛�
</div>
</div>
</div>
</div>
</div>
- <div
- v-if="
- item.approveType != 1 &&
- item.checkInfo != null &&
- item.checkInfo != ''
- "
- class="remark"
- >
+ <div v-if="
+ item.approveType != 1 &&
+ item.checkInfo != null &&
+ item.checkInfo != ''
+ " class="remark">
{{ item.checkInfo || "" }}
</div>
<div v-if="item.approveType == 1" class="childList">
- <div
- class="m_content company"
- v-for="item1 in item.approveList"
- :key="item1.id"
- >
- <img
- v-if="item1.faceImg != null && item1.faceImg != ''"
- :src="item1.faceImg"
- class="avatar"
- alt=""
- />
- <img
- v-if="item1.faceImg == null || item1.faceImg == ''"
- src="@/assets/avatar/man.png"
- class="avatar"
- alt=""
- />
+ <div class="m_content company" v-for="item1 in item.approveList" :key="item1.id">
+ <img v-if="item1.faceImg != null && item1.faceImg != ''" :src="item1.faceImg" class="avatar" alt="" />
+ <img v-if="item1.faceImg == null || item1.faceImg == ''" src="@/assets/avatar/man.png" class="avatar"
+ alt="" />
<span> {{ item1.memberName }}</span>
</div>
</div>
@@ -167,46 +102,24 @@
</div>
<!-- -->
<template v-slot:footer>
- <el-button
- @click="handleAppr(2)"
- type="primary"
- class="status-red"
- v-if="
- info.approveDateVO != null &&
- info.approveDateVO.canBeApproved != null &&
- info.approveDateVO.canBeApproved == 1
- "
- >鍚屾剰</el-button
- >
- <el-button
- @click="handleAppr(3)"
- type="danger"
- v-if="
- info.approveDateVO != null &&
- info.approveDateVO.canBeApproved != null &&
- info.approveDateVO.canBeApproved == 1
- "
- >鎷掔粷</el-button
- >
+ <el-button @click="handleAppr(2)" type="primary" class="status-red" v-if="
+ info.approveDateVO != null &&
+ info.approveDateVO.canBeApproved != null &&
+ info.approveDateVO.canBeApproved == 1
+ ">鍚屾剰</el-button>
+ <el-button @click="handleAppr(3)" type="danger" v-if="
+ info.approveDateVO != null &&
+ info.approveDateVO.canBeApproved != null &&
+ info.approveDateVO.canBeApproved == 1
+ ">鎷掔粷</el-button>
<el-button @click="isShowModal = false">杩斿洖</el-button>
</template>
<!-- 鍚屾剰/鎷掔粷 -->
- <el-dialog
- append-to-body
- :title="apprTitle"
- :visible.sync="isShowAppr"
- width="480px"
- >
+ <el-dialog append-to-body :title="apprTitle" :visible.sync="isShowAppr" width="480px">
<el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item :prop="param.status == 3 ? 'checkInfo' : ''" :label="param.status == 2 ? '鍚屾剰璇存槑' : '鎷掔粷璇存槑'">
- <el-input
- type="textarea"
- :placeholder="
- param.status == 2 ? '鍚屾剰璇存槑锛岄潪蹇呭~' : '鎷掔粷璇存槑蹇呭~'
- "
- :rows="4"
- v-model="param.checkInfo"
- />
+ <el-input type="textarea" :placeholder="param.status == 2 ? '鍚屾剰璇存槑锛岄潪蹇呭~' : '鎷掔粷璇存槑蹇呭~'
+ " :rows="4" v-model="param.checkInfo" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
@@ -215,32 +128,16 @@
</span>
</el-dialog>
<!-- 闅愭偅 -->
- <el-dialog
- append-to-body
- title="闅愭偅"
- :visible.sync="isShowProblem"
- width="480px"
- >
+ <el-dialog append-to-body title="闅愭偅" :visible.sync="isShowProblem" width="480px">
<el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px">
<el-form-item label="閫�鍥炴椂闂�">
- <el-date-picker
- class="w300"
- value-format="yyyy-MM-dd"
- type="date"
- placeholder="閫夋嫨鏃ユ湡"
- v-model="param.date"
- />
+ <el-date-picker class="w300" value-format="yyyy-MM-dd" type="date" placeholder="閫夋嫨鏃ユ湡" v-model="param.date" />
</el-form-item>
<el-form-item label="鏁存敼鍓�">
<div class="df_ac">
<img src="@/assets/avatar/man.png" />
- <el-upload
- class="avatar-uploader"
- action="https://jsonplaceholder.typicode.com/posts/"
- :show-file-list="false"
- :on-success="handleAvatarSuccess"
- :before-upload="beforeAvatarUpload"
- >
+ <el-upload class="avatar-uploader" action="https://jsonplaceholder.typicode.com/posts/"
+ :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
<img v-if="param.url" :src="param.url" class="avatar" />
<div v-else class="upload_box">
<el-icon class="el-icon-plus icon" />
@@ -250,19 +147,12 @@
</div>
</el-form-item>
<el-form-item label="閫�鍥炶鏄�">
- <el-input
- type="textarea"
- placeholder="璇峰~鍐欒鏄�"
- :rows="4"
- v-model="param.explain"
- />
+ <el-input type="textarea" placeholder="璇峰~鍐欒鏄�" :rows="4" v-model="param.explain" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="isShowProblem = false">鍙栨秷</el-button>
- <el-button type="primary" @click="isShowProblem = false"
- >纭畾</el-button
- >
+ <el-button type="primary" @click="isShowProblem = false">纭畾</el-button>
</span>
</el-dialog>
</GlobalWindow>
@@ -276,7 +166,7 @@
} from '@/api'
export default {
components: { GlobalWindow },
- data () {
+ data() {
return {
id: '',
type: '',
@@ -312,7 +202,7 @@
}
},
methods: {
- onSubAppr () {
+ onSubAppr() {
this.$refs.ruleForm.validate((valid) => {
if (!valid) {
return
@@ -338,25 +228,26 @@
})
})
},
- getDetail () {
+ getDetail() {
const { id } = this
getVisitedReDetail({ id }).then(res => {
this.info = res
})
},
- handleAppr (val) {
+ handleAppr(val) {
this.$set(this.param, 'status', val)
+ this.apprTitle = val == 2 ? '鍚屾剰' : '鎷掔粷'
this.isShowAppr = true
},
- confirm () {
+ confirm() {
console.log('--')
},
- handleTransfer () {
+ handleTransfer() {
this.isShowProblem = true
},
- reject () { },
- handleAvatarSuccess () { },
- beforeAvatarUpload () { }
+ reject() { },
+ handleAvatarSuccess() { },
+ beforeAvatarUpload() { }
}
}
</script>
@@ -373,13 +264,16 @@
align-items: center;
color: #999999;
border: 1px solid #e4e4e4;
+
.icon {
font-size: 24px;
}
+
.text {
font-size: 12px;
}
}
+
.side_title {
font-weight: 600;
font-size: 18px;
@@ -388,9 +282,11 @@
margin-left: 20px;
margin-top: 20px;
}
+
.modal_wrap {
display: flex;
height: 100%;
+
.modal_content {
flex: 1;
padding: 0px 30px;
@@ -405,6 +301,7 @@
margin-bottom: 20px;
margin-top: 30px;
}
+
.info {
.list {
display: flex;
@@ -414,6 +311,7 @@
display: flex;
width: 40%;
margin-bottom: 20px;
+
&:nth-of-type(2n) {
width: 60%;
}
@@ -462,20 +360,24 @@
border-radius: 16px 0px 16px 0px;
}
}
+
.table_info {
.name_wrap {
display: flex;
align-items: center;
+
.avatar {
width: 40px;
height: 40px;
border-radius: 50%;
margin-right: 12px;
}
+
.content {
.line {
display: flex;
}
+
.tag {
color: #b2cbf9;
border: 1px solid #b2cbf9;
@@ -493,10 +395,12 @@
width: 420px;
background: #ffffff;
border-left: 20px solid #f7f7f7;
+
.list {
.item {
padding: 8px 0;
position: relative;
+
.separate {
position: absolute;
border-left: 2px dashed #cccccc;
@@ -504,6 +408,7 @@
height: calc(100% - 36px);
top: 49px;
}
+
.avatar {
width: 40px;
height: 40px;
@@ -511,18 +416,22 @@
margin: 0 12px 0 16px;
//border: 1px solid;
}
+
.childList {
display: flex;
flex-wrap: wrap;
margin-left: 100px;
}
+
.company {
font-size: 13px;
color: #888888;
+
.status {
color: #00ba67;
}
}
+
.m_content {
display: flex;
flex-direction: column;
@@ -530,56 +439,67 @@
justify-content: center;
margin-bottom: 4px;
}
+
.info {
display: flex;
align-items: center;
margin-left: 20px;
+
.icon {
position: relative;
z-index: 11;
color: #53b76f;
font-size: 24px;
}
+
.icon1 {
position: relative;
z-index: 11;
color: deepskyblue;
font-size: 24px;
}
+
.icon2 {
position: relative;
z-index: 11;
color: #dc362e;
font-size: 24px;
}
+
.iconnew {
width: 24px;
height: 24px;
}
+
.icon3 {
position: relative;
z-index: 11;
color: gray;
font-size: 24px;
}
+
.content {
flex: 1;
+
.line {
display: flex;
justify-content: space-between;
align-content: center;
margin-bottom: 6px;
+
.name {
font-weight: 600;
font-size: 16px;
color: #111111;
}
+
.time {
color: #888888;
}
}
}
}
+
.remark {
background: #f7f7f7;
border-radius: 4px;
diff --git a/h5/pages/staff/task/driver.vue b/h5/pages/staff/task/driver.vue
index 3330aaf..7bc40ed 100644
--- a/h5/pages/staff/task/driver.vue
+++ b/h5/pages/staff/task/driver.vue
@@ -91,6 +91,9 @@
<view class="name_wrap">
<text>{{item.memberName}}<text v-if="item.statusInfo" class="status">({{item.statusInfo}})</text></text>
</view>
+ <div v-if="item.checkInfo" class="remark">
+ {{ item.checkInfo }}
+ </div>
<view v-if="item.approveType == 1" class="carbon">
<view class="carbon_item" v-for="child in item.approveList"
:key="child.id">
--
Gitblit v1.9.3