Merge branch 'dev-sy'

This commit is contained in:
BianLzhaoMin 2024-12-02 14:07:34 +08:00
commit 3f4c3b077e
17 changed files with 1384 additions and 482 deletions

4
env/.env.dev vendored
View File

@ -7,8 +7,8 @@ VITE_API_URL = '/proxyApi'
# 开发环境接口地址
# VITE_proxyTarget = 'http://10.40.92.74:8080' #盛旭
VITE_proxyTarget = 'http://192.168.2.246:28080' # 马帅
# VITE_proxyTarget = 'http://192.168.0.244:28580' # 马帅
# VITE_proxyTarget = 'http://192.168.2.246:28080' # 马帅
VITE_proxyTarget = 'http://192.168.0.244:28580' # 马帅
# VITE_proxyTarget = 'http://192.168.2.129:18080' # 马帅
# VITE_proxyTarget = 'http://10.40.92.185:9206' # 赵福海 ( 设备类型)

View File

@ -26,7 +26,7 @@
<script lang="ts" setup>
import { addBookCarApi } from '@/http/api/equip'
import { useRoute, useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
const router = useRouter()
const route = useRoute()
const props: any = defineProps({
@ -78,11 +78,27 @@ const cardClick = () => {
}
const onHandelLessee = () => {
onAddCart()
router.push({
path: `/orderConfirm/${props.id}`,
// onAddCart()
// router.push({
// path: `/orderConfirm/${props.id}`,
// })
// console.log('')
ElMessageBox.confirm('是否确定立即承租该装备?', '温馨提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'success',
})
console.log('立即租赁')
.then(async () => {
router.push({
// path: `/orderConfirm/${props.id}`,
name: 'order-confirm',
query: {
id: props.id,
},
})
})
.catch(() => {})
}
//

View File

@ -96,16 +96,16 @@ const onSelectRoles = (type: number) => {
if (type === 1) {
rolesName.value = '1'
userStore.editMenuList(1)
userStore.editUserMenuList(1)
// userStore.editUserMenuList(1)
localStorage.setItem('rolesType', '1')
router.replace({ name: 'my-lease' })
} else {
rolesName.value = '2'
userStore.editMenuList(2)
userStore.editUserMenuList(2)
// userStore.editUserMenuList(2)
localStorage.setItem('rolesType', '2')
router.replace({ name: 'my-lessee' })
}
window.location.reload()
isRolesSelect.value = false
}
@ -163,16 +163,7 @@ const onCarts = () => {
</div>
</div>
<div class="header-item">
<a
@click="
() => {
rolesName == 1
? router.push({ name: 'my-lease' })
: router.push({ name: 'my-lessee' })
}
"
>个人中心</a
>
<a>个人中心</a>
</div>
<!-- <div class="header-item last-item">
<img src="../../assets/img/home/phone.png" alt="" />

View File

@ -19,4 +19,8 @@ export const getLeaseDetailsByIdApi = (data: any) => {
// 删除
export const deleteLeaseInfoApi = (data: any) => {
return post('/material-mall/ma-lease/deleteById', data)
}
// 接单列表查询
export const getAcceptOrdersListApi = (data: any) => {
return get('/material-mall/ma-lease/rentList', data)
}

View File

@ -2,11 +2,13 @@
import $bus from '@/utils/bus'
import { mainStore } from 'store/main'
import { useStore } from 'store/user'
import { cartStore } from 'store/cart'
import { ElMessage, ElMessageBox } from 'element-plus'
import { getHotSearchListApi, getBookCarDetailsApi } from 'http/api/home/index'
import imgSrc from '@/assets/img/logo.png'
const store: any = mainStore()
const userStore = useStore()
const cart = cartStore()
userStore.editMenuList(1)
@ -126,15 +128,16 @@ const onSelectRoles = (type: number) => {
isRolesSelect.value = false
}
const cartNum = ref(0)
const getBookCarDetailsData = async () => {
const res: any = await getBookCarDetailsApi()
console.log(res, '预约车数量')
cartNum.value = res.data.length
cart.SET_CART_NUM(res.data.length || 0)
}
getBookCarDetailsData()
const cartNum = computed(() => {
return cart.cartNum
})
//
const onCarts = () => {
console.log('跳转预约车页面')
@ -208,9 +211,7 @@ const onCarts = () => {
<a
@click="
() => {
rolesName == 1
? router.push({ name: 'my-lease' })
: router.push({ name: 'my-lessee' })
router.push({ name: 'my-user' })
}
"
>个人中心</a

View File

@ -200,292 +200,8 @@ const routes: Array<RouteRecordRaw> = [
keepAlive: false,
AuthFlag: false
},
redirect: '/my-user/baseInfo',
children: [
/* 基础信息 */
{
path: 'baseInfo',
name: 'baseInfo',
component: () => import('views/user/baseInfo/index.vue'),
meta: {
title: '基础信息',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
/* 订单管理(承租方) */
{
path: 'orderManagement',
name: 'orderManagement',
component: () => import('@/views/user/orderManagement/index.vue'),
meta: {
title: '订单管理(求租)',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
/* 订单管理(出租方) */
{
path: 'orderManagementBuy',
name: 'orderManagementBuy',
component: () => import('@/views/user/orderManagementCz/index.vue'),
meta: {
title: '订单管理(求租)',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
/* 订单管理(订单详情出租) */
{
path: 'orderManagementInfoBuy',
name: 'orderManagementInfoBuy',
component: () => import('@/views/user/orderManagementCz/detail.vue'),
meta: {
title: '订单详情',
keepAlive: true,
AuthFlag: false,
isLogin: false
},
},
/* 订单管理(订单详情承租) */
{
path: 'orderManagementInfo',
name: 'orderManagementInfo',
component: () => import('@/views/user/orderManagement/detail.vue'),
meta: {
title: '订单详情',
keepAlive: true,
AuthFlag: false,
isLogin: false
},
},
/* 订单管理(退租) */
{
path: 'rentinTermination',
name: 'rentinTermination',
component: () => import('views/user/orderManagement/orderCom/rentinTermination.vue'),
meta: {
title: '订单管理(退租)',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
/* 订单管理(续租) */
{
path: 'renewalOfLease',
name: 'renewalOfLease',
component: () => import('views/user/orderManagement/orderCom/renewalOfLease.vue'),
meta: {
title: '订单管理(续租)',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
{
path: 'subAccount',
name: 'subAccount',
component: () => import('views/user/subAccount/index.vue'),
meta: {
title: '子账号管理',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
{
path: 'business',
name: 'business',
component: () => import('views/user/business/index.vue'),
meta: {
title: '业务开通',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
/* 寻源需求 */
{
path: 'sourcingNeed',
name: 'sourcingNeed',
component: () => import('views/user/sourcingNeed/index.vue'),
meta: {
title: '需求管理',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
{
path: 'orderManagementCz',
name: 'orderManagementCz',
component: () => import('views/user/orderManagementCz/index.vue'),
meta: {
title: '订单管理(承租)',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
/* 订单管理(结算) */
{
path: 'settlement',
name: 'settlement',
component: () => import('views/user/orderManagementCz/settlement/index.vue'),
meta: {
title: '订单管理(结算)',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
{
path: 'goodsManagement',
name: 'goodsManagement',
component: () => import('views/user/goodsManagement/index.vue'),
meta: {
title: '基础信息',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
{
path: 'goodsUpdown',
name: 'goodsUpdown',
component: () => import('views/user/goodsUpdown/index.vue'),
meta: {
title: '基础信息',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
{
path: 'operatorManagement',
name: 'operatorManagement',
component: () => import('views/user/operatorManagement/index.vue'),
meta: {
title: '基础信息',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
{
path: 'orderDetails',
name: 'orderDetails',
component: () => import('@/views/user/orderManagement/orderCom/orderDetails.vue'),
meta: {
title: '订单详情',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
{
path: 'orderConfirm',
name: 'orderConfirm',
component: () => import('views/user/orderManagement/orderCom/orderConfirm.vue'),
meta: {
title: '订单确认',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
{
path: 'sourcingBidding',
name: 'sourcingBidding',
component: () => import('views/user/sourcingBidding/index.vue'),
meta: {
title: '寻源竞价',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
/* 专区管理 */
{
path: 'zoneManag',
name: 'zoneManag',
component: () => import('views/user/zoneManag/index.vue'),
meta: {
title: '专区管理',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
/* 申请加入专区页面 */
{
path: 'joinZone',
name: 'joinZone',
component: () => import('views/user/zoneManag/zoneCom/joinZone.vue'),
meta: {
title: '请加入专区',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
]
},
// 预约车页面
{
path: '/cart',
name: 'cart',
component: () => import('views/cart/index.vue'),
meta: {
title: '预约车',
keepAlive: false,
AuthFlag: false
},
},
// 订单确认页面
{
path: '/orderConfirm/:maId',
name: 'orderConfirm',
component: () => import('views/order/index.vue'),
meta: {
title: '订单提交',
keepAlive: false,
AuthFlag: false
},
},
// 需求详情页面
{
path: '/demand-details',
name: 'demand-details',
component: () => import('views/demand-details/index.vue'),
meta: {
title: '需求详情',
keepAlive: false,
AuthFlag: false
},
},
// 个人中心改造路由
/**
* 1.
*/
{
path: '/my-lease', // 主路由地址
name: 'my-lease',
component: () => import('views/user/index.vue'), // 组件加载
meta: {
title: '个人中心',
keepAlive: false,
AuthFlag: false
},
redirect: '/my-lease/goodsManagement',
children: [
{
path: 'orderManagementCz',
name: 'orderManagementCz',
@ -509,35 +225,16 @@ const routes: Array<RouteRecordRaw> = [
},
},
{
path: 'goodsUpdown',
name: 'goodsUpdown',
component: () => import('views/user/goodsUpdown/index.vue'),
path: 'accept-orders',
name: 'accept-orders',
component: () => import('views/user/accept-orders/index.vue'),
meta: {
title: '基础信息',
title: '接单管理',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
]
},
/**
* 2.
*/
{
path: '/my-lessee', // 主路由地址
name: 'my-lessee',
component: () => import('views/user/index.vue'), // 组件加载
meta: {
title: '个人中心',
keepAlive: false,
AuthFlag: false
},
redirect: '/my-lessee/sourcingNeed',
children: [
{
path: 'sourcingNeed',
name: 'sourcingNeed',
@ -560,8 +257,366 @@ const routes: Array<RouteRecordRaw> = [
isLogin: true
},
},
// /* 基础信息 */
// {
// path: 'baseInfo',
// name: 'baseInfo',
// component: () => import('views/user/baseInfo/index.vue'),
// meta: {
// title: '基础信息',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// /* 订单管理(承租方) */
// {
// path: 'orderManagement',
// name: 'orderManagement',
// component: () => import('@/views/user/orderManagement/index.vue'),
// meta: {
// title: '订单管理(求租)',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// /* 订单管理(出租方) */
// {
// path: 'orderManagementBuy',
// name: 'orderManagementBuy',
// component: () => import('@/views/user/orderManagementCz/index.vue'),
// meta: {
// title: '订单管理(求租)',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// /* 订单管理(订单详情出租) */
// {
// path: 'orderManagementInfoBuy',
// name: 'orderManagementInfoBuy',
// component: () => import('@/views/user/orderManagementCz/detail.vue'),
// meta: {
// title: '订单详情',
// keepAlive: true,
// AuthFlag: false,
// isLogin: false
// },
// },
// /* 订单管理(订单详情承租) */
// {
// path: 'orderManagementInfo',
// name: 'orderManagementInfo',
// component: () => import('@/views/user/orderManagement/detail.vue'),
// meta: {
// title: '订单详情',
// keepAlive: true,
// AuthFlag: false,
// isLogin: false
// },
// },
// /* 订单管理(退租) */
// {
// path: 'rentinTermination',
// name: 'rentinTermination',
// component: () => import('views/user/orderManagement/orderCom/rentinTermination.vue'),
// meta: {
// title: '订单管理(退租)',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// /* 订单管理(续租) */
// {
// path: 'renewalOfLease',
// name: 'renewalOfLease',
// component: () => import('views/user/orderManagement/orderCom/renewalOfLease.vue'),
// meta: {
// title: '订单管理(续租)',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// {
// path: 'subAccount',
// name: 'subAccount',
// component: () => import('views/user/subAccount/index.vue'),
// meta: {
// title: '子账号管理',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// {
// path: 'business',
// name: 'business',
// component: () => import('views/user/business/index.vue'),
// meta: {
// title: '业务开通',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// /* 寻源需求 */
// {
// path: 'sourcingNeed',
// name: 'sourcingNeed',
// component: () => import('views/user/sourcingNeed/index.vue'),
// meta: {
// title: '需求管理',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// {
// path: 'orderManagementCz',
// name: 'orderManagementCz',
// component: () => import('views/user/orderManagementCz/index.vue'),
// meta: {
// title: '订单管理(承租)',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// /* 订单管理(结算) */
// {
// path: 'settlement',
// name: 'settlement',
// component: () => import('views/user/orderManagementCz/settlement/index.vue'),
// meta: {
// title: '订单管理(结算)',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// {
// path: 'goodsManagement',
// name: 'goodsManagement',
// component: () => import('views/user/goodsManagement/index.vue'),
// meta: {
// title: '基础信息',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// {
// path: 'goodsUpdown',
// name: 'goodsUpdown',
// component: () => import('views/user/goodsUpdown/index.vue'),
// meta: {
// title: '基础信息',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// {
// path: 'operatorManagement',
// name: 'operatorManagement',
// component: () => import('views/user/operatorManagement/index.vue'),
// meta: {
// title: '基础信息',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// {
// path: 'orderDetails',
// name: 'orderDetails',
// component: () => import('views/user/orderManagement/orderCom/orderDetails.vue'),
// meta: {
// title: '订单详情',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// {
// path: 'orderConfirm',
// name: 'orderConfirm',
// component: () => import('views/user/orderManagement/orderCom/orderConfirm.vue'),
// meta: {
// title: '订单确认',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// {
// path: 'sourcingBidding',
// name: 'sourcingBidding',
// component: () => import('views/user/sourcingBidding/index.vue'),
// meta: {
// title: '寻源竞价',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// /* 专区管理 */
// {
// path: 'zoneManag',
// name: 'zoneManag',
// component: () => import('views/user/zoneManag/index.vue'),
// meta: {
// title: '专区管理',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// /* 申请加入专区页面 */
// {
// path: 'joinZone',
// name: 'joinZone',
// component: () => import('views/user/zoneManag/zoneCom/joinZone.vue'),
// meta: {
// title: '请加入专区',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
]
}
},
// 预约车页面
{
path: '/cart',
name: 'cart',
component: () => import('views/cart/index.vue'),
meta: {
title: '预约车',
keepAlive: false,
AuthFlag: false
},
},
// 订单确认页面
{
path: '/order-confirm',
name: 'order-confirm',
component: () => import('views/order/index.vue'),
meta: {
title: '订单提交',
keepAlive: false,
AuthFlag: false
},
},
// 需求详情页面
{
path: '/demand-details',
name: 'demand-details',
component: () => import('views/demand-details/index.vue'),
meta: {
title: '需求详情',
keepAlive: false,
AuthFlag: false
},
},
// 个人中心改造路由
/**
* 1.
*/
// {
// path: '/my-lease', // 主路由地址
// name: 'my-lease',
// component: () => import('views/user/index.vue'), // 组件加载
// meta: {
// title: '个人中心',
// keepAlive: false,
// AuthFlag: false
// },
// redirect: '/my-lease/goodsManagement',
// children: [
// {
// path: 'orderManagementCz',
// name: 'orderManagementCz',
// component: () => import('views/user/orderManagementCz/index.vue'),
// meta: {
// title: '订单管理(出租方)',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// {
// path: 'goodsManagement',
// name: 'goodsManagement',
// component: () => import('views/user/goodsManagement/index.vue'),
// meta: {
// title: '商品管理',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// {
// path: 'accept-orders',
// name: 'accept-orders',
// component: () => import('views/user/accept-orders/index.vue'),
// meta: {
// title: '接单管理',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// ]
// },
// /**
// * 2. 承租方
// */
// {
// path: '/my-lessee', // 主路由地址
// name: 'my-lessee',
// component: () => import('views/user/index.vue'), // 组件加载
// meta: {
// title: '个人中心',
// keepAlive: false,
// AuthFlag: false
// },
// redirect: '/my-lessee/sourcingNeed',
// children: [
// {
// path: 'sourcingNeed',
// name: 'sourcingNeed',
// component: () => import('views/user/sourcingNeed/index.vue'),
// meta: {
// title: '需求管理',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// {
// path: 'orderManagement',
// name: 'orderManagement',
// component: () => import('views/user/orderManagement/index.vue'),
// meta: {
// title: '订单管理',
// keepAlive: true,
// AuthFlag: false,
// isLogin: true
// },
// },
// ]
// }
@ -574,6 +629,8 @@ const router = createRouter({
routes
})
console.log(router, '*****路由')
// 使页面跳转后滚动条恢复至顶部
router.beforeEach((to, from, next) => {

View File

@ -0,0 +1,63 @@
export default [
{
path: '/my-user',
name: 'my-user',
meta: {
title: "系统管理",
},
permission: ['1', '2'],
component: () => import('views/user/index.vue'),
children: [
{
path: 'goodsManagement',
name: 'goodsManagement',
component: () => import('views/user/goodsManagement/index.vue'),
permission: ['1'],
meta: {
title: '装备管理',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
{
path: 'orderManagementCz',
name: 'orderManagementCz',
component: () => import('views/user/orderManagementCz/index.vue'),
permission: ['1'],
meta: {
title: '订单管理',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
{
path: 'sourcingNeed',
name: 'sourcingNeed',
component: () => import('views/user/sourcingNeed/index.vue'),
permission: ['2'],
meta: {
title: '需求管理',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
{
path: 'orderManagement',
name: 'orderManagement',
component: () => import('views/user/orderManagement/index.vue'),
permission: ['2'],
meta: {
title: '订单管理',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
]
}
]

0
src/router/permission.ts Normal file
View File

23
src/store/cart.ts Normal file
View File

@ -0,0 +1,23 @@
export const cartStore = defineStore('cart', {
state: () => {
return {
cartNum: 0
}
},
actions: {
SET_CART_NUM(val: number) {
this.cartNum = val
}
},
persist: {
enabled: true, // 开启数据缓存
strategies: [
{
// 自定义存储的 key默认是 store.$id
key: 'cart',
storage: localStorage, //缓存模式 可选 localStorage sessionStorage
paths: ['cartNum',]
}
]
}
})

View File

@ -25,9 +25,9 @@ export const useStore = defineStore('myUser', {
deviceTypeSunList: [], // 设备类型小类
leaseAndLesseeList: [],
leaseAndLesseeUserList: [
{ title: '商品管理', name: 'goodsManagement' },
{ title: '装备管理', name: 'goodsManagement' },
{ title: '订单管理', name: 'orderManagementCz' },
// { title: '商品上下架', name: 'goodsUpdown' },
{ title: '接单管理', name: 'accept-orders' },
// { title: '机手管理', name: 'operatorManagement' },
// { title: '寻源竞价', name: 'sourcingBidding' },
// { title: '专区管理', name: 'zoneManag' },
@ -35,7 +35,8 @@ export const useStore = defineStore('myUser', {
isType: 1,
leaseUserList: [
{ title: '订单管理', name: 'orderManagementCz' },
{ title: '装备管理管理', name: 'goodsManagement' },
{ title: '装备管理', name: 'goodsManagement' },
{ title: '接单管理', name: 'accept-orders' },
// { title: '商品上下架', name: 'goodsUpdown' },
// { title: '机手管理', name: 'operatorManagement' },
// { title: '寻源竞价', name: 'sourcingBidding' },
@ -145,7 +146,7 @@ export const useStore = defineStore('myUser', {
const leaseList: any = [
{ title: '订单管理', name: 'orderManagementCz' },
{ title: '装备管理', name: 'goodsManagement' },
{ title: '商品上下架', name: 'goodsUpdown' },
{ title: '接单管理', name: 'accept-orders' },
// { title: '机手管理', name: 'operatorManagement' },
// { title: '寻源竞价', name: 'sourcingBidding' },
// { title: '专区管理', name: 'zoneManag' },

View File

@ -77,9 +77,8 @@
<img :src="goods.picUrl" alt="" />
<div class="goods-code">
<div style="font-size: 14px; font-weight: bold">{{ goods.deviceName }}</div>
<!-- <div>装备编号 {{ goods.code }}</div>
<div>装备型号 {{ goods.typeName }}</div> -->
<div>装备编号 {{ goods.code }}</div>
<div>装备型号 {{ goods.typeName }}</div>
</div>
</el-col>
<el-col :span="4">

View File

@ -132,7 +132,7 @@ const equipBaseInfoList = reactive([
},
{
label: '所属地市',
key: 'operateAddress',
key: 'areaName',
},
{
label: '预估数量',

View File

@ -369,14 +369,17 @@ import {
import { useRoute, useRouter } from 'vue-router'
// import Navmenu from '@/components/Navmenu/index.vue'
import equipDetailTable from '@/components/equipDetailTable.vue'
import { cartStore } from 'store/cart'
import { ElMessage, ElMessageBox } from 'element-plus'
import { mainStore } from '@/store/main'
import { getBookCarDetailsApi } from 'http/api/home/index'
const router = useRouter()
const route: any = useRoute()
const store = mainStore()
const ruleFormRef = ref()
const pageParams = route.params
const cart = cartStore()
console.log(pageParams, 'pageParams')
const backPath = ref<any>('')
@ -881,14 +884,14 @@ const onAddCart = async () => {
if (res.code === 200) {
ElMessage({
type: 'success',
duration: 1000,
message: `预约车加入成功`,
})
getData()
const res: any = await getBookCarDetailsApi()
cart.SET_CART_NUM(res.data.length)
} else {
ElMessage({
type: 'error',
duration: 1000,
message: res.msg,
})
}

View File

@ -14,9 +14,11 @@
<el-row class="cart-th">
<el-col :span="2">
<div>
<el-checkbox v-model="allChecked" @change="onChangeAll" :key="allKey"> 全选 </el-checkbox>
</div>
<!-- <div>
<el-checkbox v-model="allChecked" @change="onChangeAll" :key="allKey">
全选
</el-checkbox>
</div> -->
</el-col>
<el-col :span="8">
<div>装备信息</div>
@ -67,10 +69,7 @@
</div> -->
</el-col>
<el-col :span="9" class="goods-info">
<img
src="https://fc1tn.baidu.com/it/u=4185529537,1682541874&fm=202&src=766&fc=tdmatt&mola=new&crop=v1"
alt=""
/>
<img :src="item.picUrl" alt="" />
<div class="goods-code">
<div style="font-size: 14px; font-weight: bold">{{ item.deviceName }}</div>
<div>装备编号 {{ item.code }}</div>
@ -97,22 +96,23 @@
</el-col>
<el-col :span="2">
<div class="red-font" style="color: #0062ff">
{{ item.lease_day }}
{{ item.days }}
</div>
</el-col>
<el-col :span="2">
<div>
<el-input-number
v-model="item.goods_num"
style="width: 100px;margin-left: 10px;"
:min="1" :max="item.deviceCount"
v-model="item.num"
style="width: 100px; margin-left: 10px"
:min="1"
:max="item.deviceCount"
size="small"
/>
</div>
</el-col>
<el-col :span="2">
<div class="red-font" style="margin-left: 20px;">
{{ item.goods_num * item.dayLeasePrice * item.lease_day }}
<div class="red-font" style="margin-left: 20px">
{{ item.num * item.dayLeasePrice * item.days }}
</div>
</el-col>
<el-col :span="2">
@ -174,7 +174,8 @@
import Header from '../../components/header/index.vue'
import FooterInfo from '../../components/FooterInfo/index.vue'
import { ElMessage } from 'element-plus'
import { getBookCarDetailByMaId,submitBookCarApi } from '../../http/api/order/index'
import { getBookCarDetailByMaId, submitBookCarApi } from '../../http/api/order/index'
import { getDetail } from 'http/api/equip'
import moment from 'moment'
import { useRoute, useRouter } from 'vue-router'
const router = useRouter()
@ -186,39 +187,59 @@ const protocolChecked = ref<boolean>(false)
const orderList = ref<any>([])
const getOrderListData = async () => {
const getOrderListData = async () => {
const addParams = {
maId: Number(pageParams.maId)
maId: Number(pageParams.maId),
}
const res: any = await getBookCarDetailByMaId(addParams)
console.log(res, '----')
const res: any = await getDetail(route.query.id, false)
console.log(res, '装备详情')
orderList.value = []
// orderList.value = res.data
orderList.value = res.data
const { companyName, person, picUrl, personPhone, deviceName, code, typeName, dayLeasePrice } =
res.data
orderList.value.forEach((e: any) => {
e.isChecked = false;
e.goods_num = 1;
e.lease_day = 1;
// e.devInfoVoList.forEach((j: any) => {
// j.isChecked = false
// })
})
//
const orderInfo = {
companyName,
person,
personPhone,
deviceName,
code,
typeName,
picUrl,
rentBeginTime: '',
rentEndTime: '',
lease_date: '',
dayLeasePrice,
days: 0,
num: 1,
}
console.log(orderList.value, '***********')
orderList.value.push(orderInfo)
// orderList.value.forEach((e: any) => {
// e.isChecked = false
// e.goods_num = 1
// e.lease_day = 1
// // e.devInfoVoList.forEach((j: any) => {
// // j.isChecked = false
// // })
// })
// console.log(orderList.value, '***********')
// console.log(res, '')
}
onMounted(() => {
setTimeout(()=>{
setTimeout(() => {
getOrderListData()
},500)
}, 500)
})
// change
const onLeaseDateChange = (e: any, item: any) => {
item.lease_date_string = `${e[0]}${e[1]}`
item.lease_day = moment(e[1]).diff(e[0], 'day')
item.lease_day = moment(e[1]).diff(e[0], 'day')
}
//
@ -263,20 +284,20 @@ const allChecked = computed(() => {
//
const amountDevice = computed(() => {
let amountNum = 0
orderList.value.forEach((e) => {
orderList.value.forEach((e) => {
if (e.isChecked) {
amountNum++
}
}
})
return amountNum
})
//
const amountDeviceList = computed(() => {
let selectList: any = []
orderList.value.forEach((e: any) => {
orderList.value.forEach((e: any) => {
if (e.isChecked) {
selectList.push(e)
}
}
})
return selectList
})
@ -284,17 +305,16 @@ const amountDeviceList = computed(() => {
//
const orderAmountPice = computed(() => {
let orderAmountPice = 0
orderList.value.forEach((e) => {
orderList.value.forEach((e) => {
if (e.isChecked) {
orderAmountPice = e.goods_num * e.dayLeasePrice * e.lease_day + orderAmountPice
}
}
})
return orderAmountPice
})
//
const onCartSubmit = async () => {
ElMessage.closeAll()
if (amountDevice.value < 1) {
ElMessage({
@ -304,8 +324,8 @@ const onCartSubmit = async () => {
})
return
}
console.log(amountDeviceList.value[0].lease_date==undefined)
if (amountDeviceList.value[0].lease_date==undefined) {
console.log(amountDeviceList.value[0].lease_date == undefined)
if (amountDeviceList.value[0].lease_date == undefined) {
ElMessage({
showClose: false,
message: '请选择租期',
@ -321,8 +341,7 @@ const onCartSubmit = async () => {
})
return
}
console.log('提交订单')
//
const detailsList = amountDeviceList.value.map((e: any) => {
@ -343,7 +362,7 @@ const onCartSubmit = async () => {
cost: orderAmountPice.value,
detailsList,
}
console.log('submitParams',submitParams)
console.log('submitParams', submitParams)
const res: any = await submitBookCarApi(submitParams)
if (res.code === 200) {
ElMessage({
@ -354,9 +373,8 @@ const onCartSubmit = async () => {
allKey.value++
router.push({
path: `/equipDetail/${pageParams.maId}`,
})
})
}
}
</script>

View File

@ -0,0 +1,692 @@
<template>
<!-- 寻源需求 -->
<el-form
:inline="true"
size="default"
label-width="0"
ref="searchFormRef"
:model="searchParams"
>
<el-row>
<el-col :span="6">
<el-form-item prop="leaseName">
<el-input
style="width: 100%"
placeholder="请输入需求名称"
v-model="searchParams.leaseName"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="leaseCode">
<el-input
style="width: 100%"
placeholder="请输入需求编号"
v-model="searchParams.leaseCode"
clearable
/>
</el-form-item>
</el-col>
<!-- <el-col :span="4">
<el-form-item prop="leaseStatus">
<el-select
clearable
style="width: 100%"
placeholder="选择需求状态"
v-model="searchParams.leaseStatus"
>
<el-option label="待接单" :value="0" />
<el-option label="已接单" :value="1" />
<el-option label="已到期" :value="2" />
</el-select>
</el-form-item>
</el-col> -->
<el-col :span="6">
<el-form-item>
<el-date-picker
style="width: 100%"
v-model="endTime"
type="daterange"
range-separator="-"
value-format="YYYY-MM-DD"
start-placeholder="截止开始日期"
end-placeholder="截止结束日期"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item>
<el-date-picker
v-model="releaseTime"
style="width: 100%"
type="daterange"
range-separator="-"
value-format="YYYY-MM-DD"
start-placeholder="接单开始日期"
end-placeholder="接单结束日期"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item>
<el-button @click="getLeaseListData" type="primary">查询</el-button>
<el-button @click="onReset">重置</el-button>
<!-- <el-button
@click="
() => {
addOrEditDialogVisible = true
isRepublish = true
dialogTitle = '新增'
}
"
style="background-color: #17907f; color: #fff"
>
需求新建
</el-button> -->
</el-form-item>
</el-form>
<!-- 表格 -->
<el-table
:data="leaseList"
show-overflow-tooltip
:header-cell-style="{
background: '#fafafa',
color: '#333',
}"
>
<el-table-column align="center" label="序号" type="index" width="80" />
<el-table-column align="center" prop="leaseCode" label="需求编号" />
<el-table-column align="center" prop="leaseName" label="需求名称" />
<el-table-column align="center" prop="areaName" label="项目所在地" />
<el-table-column align="center" prop="publishUser" label="发布人" />
<el-table-column align="center" prop="orderUser" label="操作人" />
<el-table-column align="center" prop="endTime" label="需求截止日期" />
<el-table-column align="center" prop="orderTime" label="接单时间" />
<!-- <el-table-column align="center" prop="leaseStatusName" label="需求状态" />
<el-table-column align="center" label="操作" :width="220">
<template #default="{ row }">
<el-button
text
size="small"
type="primary"
v-if="row.leaseStatus === 2"
@click="onRepublish(row.id, false)"
>
重新发布
</el-button>
<el-button
text
size="small"
type="primary"
v-if="row.leaseStatus === 2"
@click="onRepublish(row.id, true)"
>
编辑
</el-button>
<el-popconfirm
width="220"
:icon="InfoFilled"
icon-color="#626AEF"
title="确定删除该项需求吗?"
@confirm="onDelete(row.id)"
v-if="row.leaseStatus != 1"
>
<template #reference>
<el-button size="small" text type="danger"> 删除 </el-button>
</template>
<template #actions="{ confirm }">
<el-button size="small">取消</el-button>
<el-button type="danger" size="small" @click="confirm()"> 确定 </el-button>
</template>
</el-popconfirm>
</template>
</el-table-column> -->
</el-table>
<!-- <el-pagination
size="small"
background
layout="prev, pager, next"
:page-size="searchParams.pageSize"
:total="total"
class="mt-4"
@current-change="onCurrentChange"
v-if="total > 0"
/> -->
<el-pagination
style="text-align: right"
background
size="small"
:total="total"
:page-sizes="[10, 20, 50, 100]"
v-model:page-size="searchParams.pageSize"
v-model:current-page="searchParams.pageNum"
layout="total, prev, pager, next,sizes"
@size-change="getLeaseListData"
@current-change="getLeaseListData"
/>
<!-- 新增修改对话框 -->
<el-dialog
:title="dialogTitle"
width="60%"
align-center
destroy-on-close
v-model="addOrEditDialogVisible"
@close="onClose"
>
<el-form
label-width="auto"
label-position="right"
ref="addOrEditFormRef"
:model="addOrEditForm"
:rules="addOrEditFormRules"
>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="需求名称" prop="leaseName">
<el-input v-model="addOrEditForm.leaseName" placeholder="请输入需求名称" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="装备类目" prop="typeIds">
<el-cascader
clearable
style="width: 100%"
:options="classOptions"
:show-all-levels="false"
placeholder="请选择装备类目"
v-model="addOrEditForm.typeIds"
:props="{
value: 'id',
label: 'name',
checkStrictly: true,
}"
@change="onChangeClass"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="租赁公司" prop="companyId">
<el-select
clearable
style="width: 100%"
placeholder="请选择租赁公司"
v-model="addOrEditForm.companyId"
>
<el-option
v-for="item in companyOptions"
:key="item.companyId"
:label="item.companyName"
:value="item.companyId"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="联系人" prop="person">
<el-input
clearable
placeholder="请输入联系人"
v-model="addOrEditForm.person"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话" prop="personPhone">
<el-input
clearable
placeholder="请输入联系电话"
v-model="addOrEditForm.personPhone"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="预估租期(天)" prop="leaseDay">
<el-input-number
:min="1"
clearable
:max="9999"
style="width: 100%"
v-model="addOrEditForm.leaseDay"
placeholder="请输入预估租期"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="预估数量" prop="leaseNum">
<el-input-number
clearable
:min="1"
:max="9999"
style="width: 100%"
v-model="addOrEditForm.leaseNum"
placeholder="请输入预估数量"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="需求截止日期" prop="endTime">
<el-date-picker
clearable
type="date"
style="width: 100%"
value-format="YYYY-MM-DD"
v-model="addOrEditForm.endTime"
placeholder="请选择需求截止日期"
:disabled-date="disabledDate"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目所在地" prop="areaId">
<el-select
clearable
style="width: 100%"
placeholder="请选择项目所在地"
v-model="addOrEditForm.areaId"
>
<el-option
v-for="item in areaList"
:key="item.areaId"
:label="item.areaName"
:value="item.areaId"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="1" style="margin-bottom: 0" class="upload-tip">
支持格式.jpg.png 单个文件大小不能超过2M最多可上传4张
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="参考图片/样式">
<div class="img-list" v-if="addOrEditForm.fileInfoList.length > 0">
<div
v-for="(item, index) in addOrEditForm.fileInfoList"
:key="item.id"
class="img-items"
>
<img :src="item.fileUrl" alt="" />
<div class="mask-img">
<el-icon class="delete-icon" @click="onDeleteImg(index)"
><DeleteFilled
/></el-icon>
</div>
</div>
</div>
<UploadComponentNew
:maxSize="2"
:minLimit="minLimit"
:max-limit="4"
width="120px"
height="120px"
:autoUpload="true"
:multiple="true"
:fileListN="addOrEditForm.fileInfoList"
listType="picture-card"
:acceptTypeList="['.jpg', '.png']"
:actionUrl="uploadUrl"
@onFileChange="onFileChange"
>
<template v-slot:default>
<el-icon size="48" color="#aaa"><Plus /></el-icon>
</template>
</UploadComponentNew>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="需求描述" prop="description">
<el-input
clearable
type="textarea"
placeholder="请输入需求描述"
v-model="addOrEditForm.description"
:autosize="{ minRows: 6, maxRows: 10 }"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="onCancel">取消</el-button>
<el-button type="primary" @click="onSubmit(false)" v-if="isSave"> 保存 </el-button>
<el-button type="primary" @click="onSubmit(true)"> 提交 </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import UploadComponentNew from 'components/uploadComponentNew/index.vue'
import { getCompanyListApi, getGoodsClassListApi, getAreaApi } from 'http/api/home'
import { getAcceptOrdersListApi } from 'http/api/sourcing/index'
import { InfoFilled } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus'
const uploadUrl = import.meta.env.VITE_API_URL + '/file/upload'
const addOrEditDialogVisible = ref(false)
const companyOptions = ref<any>([])
const classOptions = ref<any>([])
const addOrEditFormRef = ref<any>(null)
const searchFormRef = ref<any>(null)
const leaseList = ref<any>([])
const isRepublish = ref(true)
const isSave = ref(false)
const total = ref(0)
const endTime = ref([])
const areaList = ref<any>([])
const releaseTime = ref([])
const dialogTitle = ref('新增')
const fileListTemp = ref<any>([])
const props2 = {
multiple: true,
checkStrictly: true,
}
const searchParams = reactive({
leaseName: '',
leaseCode: '',
finishStartTime: '',
finishEndTime: '',
orderStartTime: '',
orderEndTime: '',
pageSize: 1,
pageNum: 10,
})
const addOrEditForm = ref<any>({
leaseName: '',
typeId: '',
typeIds: [],
companyId: '',
person: '',
personPhone: '',
leaseDay: 1,
leaseNum: 1,
endTime: '',
description: '',
isSubmit: '',
fileInfoList: [],
areaId: '',
})
const addOrEditFormTemp = ref<any>({
leaseName: '',
typeId: '',
typeIds: [],
companyId: '',
person: '',
personPhone: '',
leaseDay: 1,
leaseNum: 1,
endTime: '',
description: '',
isSubmit: '',
fileInfoList: fileListTemp ? fileListTemp : [],
areaId: '',
})
const addOrEditFormRules = reactive({
leaseName: [{ required: true, message: '请输入需求名称', trigger: 'blur' }],
typeIds: [{ required: true, message: '请选择装备类目', trigger: 'change' }],
companyId: [{ required: true, message: '请选择租赁公司', trigger: 'change' }],
person: [{ required: true, message: '请输入联系人', trigger: 'blur' }],
personPhone: [
{ required: true, message: '请输入联系电话', trigger: 'blur' },
{
pattern: /^1[3456789]\d{9}$/,
message: '请输入正确的联系电话',
trigger: 'blur',
},
],
leaseDay: [{ required: true, message: '请输入预估租期', trigger: 'blur' }],
leaseNum: [{ required: true, message: '请输入预估数量', trigger: 'blur' }],
endTime: [{ required: true, message: '请选择需求截止日期', trigger: 'change' }],
fileInfoList: [{ required: true, message: '请上传参考图片', trigger: 'blur' }],
areaId: [{ required: true, message: '请选择项目所在地', trigger: 'change' }],
})
const disabledDate = (date: any) => {
const today = new Date()
//
return date.getTime() < today.getTime()
}
const getClassAndCompanyData = async () => {
const classResult: any = await getGoodsClassListApi()
const companyResult: any = await getCompanyListApi()
classOptions.value = classResult.data
companyOptions.value = companyResult.data
}
//
const getLeaseListData = async () => {
if (endTime.value.length > 0) {
searchParams.finishStartTime = endTime.value[0]
searchParams.finishEndTime = endTime.value[1]
}
if (releaseTime.value.length > 0) {
searchParams.orderStartTime = releaseTime.value[0]
searchParams.orderEndTime = releaseTime.value[1]
}
const { data: res }: any = await getAcceptOrdersListApi(searchParams)
leaseList.value = res.rows
total.value = res.total
}
const getAreaData = async () => {
const res: any = await getAreaApi()
areaList.value = res.data
}
//
const onReset = () => {
endTime.value = []
releaseTime.value = []
searchParams.finishStartTime = ''
searchParams.finishEndTime = ''
searchParams.orderStartTime = ''
searchParams.orderEndTime = ''
searchParams.pageNum = 1
searchParams.pageSize = 10
searchFormRef.value.resetFields()
getLeaseListData()
}
//
const onDelete = async (id: any) => {
const res: any = await deleteLeaseInfoApi({ id })
if (res.code === 200) {
ElMessage({
type: 'success',
message: '删除成功',
})
getLeaseListData()
}
}
//
const onRepublish = async (id: any, type: any) => {
dialogTitle.value = '编辑'
isRepublish.value = false
isSave.value = type
const res: any = await getLeaseDetailsByIdApi({ id })
const {
leaseName,
typeId,
companyId,
person,
personPhone,
leaseDay,
leaseNum,
endTime,
description,
typeIds,
fileInfoList,
areaId,
} = res.data
Object.assign(addOrEditForm.value, {
leaseName,
typeId,
companyId,
person,
personPhone,
leaseDay,
leaseNum,
endTime,
description,
typeIds,
id,
fileInfoList: fileInfoList ? fileInfoList : [],
areaId,
})
addOrEditForm.value.typeIds = addOrEditForm.value.typeIds.map((e: any) => {
return (e *= 1)
})
addOrEditDialogVisible.value = true
}
//
const onSubmit = (type: boolean) => {
addOrEditFormRef.value.validate(async (valid: any) => {
if (valid) {
addOrEditForm.value.isSubmit = type
addOrEditForm.value.typeId =
addOrEditForm.value.typeIds[addOrEditForm.value.typeIds.length - 1]
addOrEditForm.value.fileInfoList.push(...fileListTemp.value)
const SUBMIT_API = isRepublish.value ? addLeaseInfoApi : editLeaseInfoApi
const res: any = await SUBMIT_API(addOrEditForm.value)
if (res.code === 200) {
ElMessage({
type: 'success',
message: '提交成功',
})
addOrEditDialogVisible.value = false
getLeaseListData()
}
}
})
}
//
const onFileChange = (fileList: any) => {
fileListTemp.value = []
fileListTemp.value = fileList.map((e: any) => {
return {
fileName: e.name,
fileUrl: e.url,
}
})
// addOrEditForm.value.fileInfoList.push(...fileListTemp.value)
}
//
const onCancel = () => {
addOrEditDialogVisible.value = false
}
const onClose = () => {
addOrEditFormRef.value.resetFields()
addOrEditForm.value = JSON.parse(JSON.stringify(addOrEditFormTemp.value))
fileListTemp.value = []
}
const onDeleteImg = (index: any) => {
addOrEditForm.value.fileInfoList.splice(index, 1)
}
const minLimit = computed(() => {
return addOrEditForm.value.fileInfoList.length
})
const onChangeClass = (val: any) => {
console.log(val, '***')
}
onMounted(() => {
getClassAndCompanyData()
getLeaseListData()
getAreaData()
})
</script>
<style lang="scss" scoped>
:deep.upload-tip .el-form-item__label {
color: transparent;
}
.el-pagination {
justify-content: flex-end;
padding: 5px 0;
}
:deep.el-pagination.is-background .el-pager li.is-active {
background-color: #3cb4a6;
}
:deep.el-form--inline .el-form-item {
margin-right: 6px;
width: 95%;
}
.img-list {
display: flex;
align-items: center;
.img-items {
width: 120px;
height: 120px;
margin-right: 8px;
position: relative;
img {
width: 100%;
height: 100%;
}
.mask-img {
visibility: hidden;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #000;
opacity: 0.5;
display: flex;
align-items: center;
justify-content: center;
.delete-icon {
font-size: 20px;
cursor: pointer;
z-index: 9;
color: #fff;
}
}
}
.img-items:hover .mask-img {
visibility: visible;
}
}
</style>

View File

@ -46,21 +46,43 @@ import imgSrc from '@/assets/img/logo.png'
// }
const handleSelect = (name: any, path: any) => {
store.editcurrentMenuItem(name)
// store.editcurrentMenuItem(name)
router.push({
name,
})
}
const activeseekingRent = computed(() => {
return store.currentMenuType
})
const menuList: any = computed(() => {
return store.leaseAndLesseeUserList
const isType = computed(() => {
return localStorage.getItem('rolesType')
})
const activeMenuItem = computed(() => {
return store.leaseAndLesseeUserList[0].name
const allList = [
{ title: '装备管理', name: 'goodsManagement', permission: ['1'] },
{ title: '订单管理', name: 'orderManagementCz', permission: ['1'] },
{ title: '接单管理', name: 'accept-orders', permission: ['1'] },
{ title: '需求管理', name: 'sourcingNeed', permission: ['2'] },
{ title: '订单管理', name: 'orderManagement', permission: ['2'] },
]
const menuList: any = computed(() => {
return allList.filter((e) => e.permission.includes(isType.value))
})
router.push({
name: menuList.value[0].name,
})
onMounted(() => {
console.log(route, '**********************')
})
// const activeMenuItem = computed(() => {
// return store.leaseAndLesseeUserList[0].name
// })
// watch(route, (newVlaue) => {
// if (newVlaue.path.indexOf('myuser') === -1) {
// store.editcurrentMenuItem('baseInfo')
@ -115,14 +137,15 @@ const activeMenuItem = computed(() => {
</div> -->
<el-menu
router
class="el-menu-vertical-demo"
@select="handleSelect"
:default-active="activeMenuItem"
:default-active="route.name"
>
<el-menu-item v-for="(item, index) in menuList" :key="index" :index="item.name">
{{ item.title }}
</el-menu-item>
<template v-for="(item, index) in menuList" :key="index">
<el-menu-item :index="item.name">
{{ item.title }}
</el-menu-item>
</template>
</el-menu>
</div>
<div class="right-content">

View File

@ -1,24 +1,25 @@
<template>
<el-page-header @click="$router.go(-1)">
<template #content>
</template>
<template #content> </template>
</el-page-header>
<timeLineHorizontal themeColor="#2282fe" :timeLineList="timeLineList.list"></timeLineHorizontal>
<el-form label-width="130px" inline="true" style="padding: 0 20px 0px 20px; width: 865px" size="small">
<el-form
label-width="130px"
inline="true"
style="padding: 0 20px 0px 20px; width: 865px"
size="small"
>
<!-- <el-form-item label="订单编号" style="width: 600px;">
xxxxx
</el-form-item> -->
<el-form-item label="需求单位" class="table_item">
{{ detailsInfo.needCompany }}
</el-form-item>
<el-form-item label="联系电话" class="table_item">{{
detailsInfo.phone
}}</el-form-item>
<el-form-item label="联系电话" class="table_item">{{ detailsInfo.phone }}</el-form-item>
<el-form-item label="租赁时长" class="table_item">
<div style="white-space: nowrap;">
{{ detailsInfo.planStartTime }}- {{ getTimeByPoint(detailsInfo.planStartTime, detailsInfo.duration) }}
<div style="white-space: nowrap">
{{ detailsInfo.planStartTime }}-
{{ getTimeByPoint(detailsInfo.planStartTime, detailsInfo.duration) }}
</div>
</el-form-item>
<el-form-item label="设备进场地址:" class="table_item">{{
@ -30,9 +31,7 @@
<el-form-item label="是否需求机手:" class="table_item">
{{ detailsInfo.isMachinist == 0 ? '否' : '是' }}
</el-form-item>
<el-form-item label="详细地址:" class="table_item">{{
detailsInfo.address
}}</el-form-item>
<el-form-item label="详细地址:" class="table_item">{{ detailsInfo.address }}</el-form-item>
<el-form-item label="工期时长:" class="table_item">{{
detailsInfo.duration
}}</el-form-item>
@ -68,22 +67,25 @@
</div> -->
<div>
<div class="equipMoneyClass">
<span>
装备
</span>
<span style="color: #f00">¥
</span>
<el-input v-model.trim="equipMoneyInfo.equipMoney" placeholder="请输入企业类型" clearable maxlength="30" />
<span> 装备 </span>
<span style="color: #f00">¥ </span>
<el-input
v-model.trim="equipMoneyInfo.equipMoney"
placeholder="请输入企业类型"
clearable
maxlength="30"
/>
/
</div>
<div v-if="detailsInfo.isMachinist != 0" class="equipMoneyClass">
<span>
机手
</span>
<span style="color: #f00">¥
</span>
<el-input v-model.trim="equipMoneyInfo.phoneMoney" placeholder="请输入企业类型" clearable
maxlength="30" />/
<span> 机手 </span>
<span style="color: #f00">¥ </span>
<el-input
v-model.trim="equipMoneyInfo.phoneMoney"
placeholder="请输入企业类型"
clearable
maxlength="30"
/>/
</div>
</div>
</template>
@ -103,8 +105,14 @@
</el-form-item> -->
<el-form-item label="订单合同:" style="width: 800px" v-if="stepVal == '1'">
<div>
<uploadComponent :maxLimit="1" listType="text" :acceptTypeList="['.pdf']" :scuccesCallback="scuccesCallback"
height="32px" width="360px">
<uploadComponent
:maxLimit="1"
listType="text"
:acceptTypeList="['.pdf']"
:scuccesCallback="scuccesCallback"
height="32px"
width="360px"
>
<template v-slot:default>
<el-button type="primary">上传文件</el-button>
</template>
@ -114,19 +122,39 @@
</div>
</el-form-item>
<div v-else-if="stepVal == '2'">
<el-form :model="submitInfo" ref="ruleFormRef" :rules="formConfirmRules" label-width="136px">
<el-form
:model="submitInfo"
ref="ruleFormRef"
:rules="formConfirmRules"
label-width="136px"
>
<el-form-item label="机手姓名:" style="width: 300px" prop="driver">
<!-- <el-select v-model="submitInfo.driver" placeholder="请选择机手姓名" clearable filterable style="width: 100%">
<el-option v-for="item in driverInfo.list" :key="item.value" :label="item.label"
:value="item.value" />
</el-select> -->
<el-input v-model.trim="submitInfo.driver" placeholder="请输入机手姓名" clearable maxlength="30" />
<el-input
v-model.trim="submitInfo.driver"
placeholder="请输入机手姓名"
clearable
maxlength="30"
/>
</el-form-item>
<el-form-item label="联系电话:" style="width: 300px" prop="driverPhone">
<el-input v-model.trim="submitInfo.driverPhone" placeholder="请输入联系电话" clearable maxlength="30" />
<el-input
v-model.trim="submitInfo.driverPhone"
placeholder="请输入联系电话"
clearable
maxlength="30"
/>
</el-form-item>
<el-form-item label="物流司机电话:" style="width: 300px" prop="deliverPhone">
<el-input v-model.trim="submitInfo.deliverPhone" placeholder="请输入物流司机电话" clearable maxlength="30" />
<el-input
v-model.trim="submitInfo.deliverPhone"
placeholder="请输入物流司机电话"
clearable
maxlength="30"
/>
</el-form-item>
</el-form>
</div>
@ -172,7 +200,7 @@ import uploadComponent from 'components/uploadComponent/index.vue'
import { ElMessageBoxOpert } from 'utils/elementCom'
import { ElMessage } from 'element-plus'
import { apiOrderInfoDetails, apiUpdateOrderInfo, apiOrderReject } from 'http/api/usercenter/order'
import { getNewDay } from "utils/time"
import { getNewDay } from 'utils/time'
const router = useRouter()
const route = useRoute()
@ -188,14 +216,14 @@ const tableInfo = reactive({
v_equipment_address: '',
devicePrice: '',
machinistPrice: '',
imgUrl: ''
imgUrl: '',
})
const errorTipFlag = ref(0)
const equipMoneyInfo = reactive({
equipMoney: '',
phoneMoney: ''
phoneMoney: '',
})
const stepVal = ref('0')
@ -205,19 +233,19 @@ const timeLineList = reactive({
{
title: '订单需求审核',
content: '开工阶段',
done: true
done: true,
},
{
title: '合同上传',
content: '请填写公司详细信息',
done: false
done: false,
},
{
title: '装备发货',
content: '请填写公司财务信息',
done: false
}
]
done: false,
},
],
})
// const driverInfo = reactive({
@ -235,20 +263,12 @@ const timeLineList = reactive({
const submitInfo = reactive({
driver: '',
driverPhone: '',
deliverPhone: ''
deliverPhone: '',
})
const formConfirmRules = reactive<FormRules<any>>({
driver: [
{ required: true, message: '请选择机手姓名', trigger: 'change' },
],
driverPhone: [
{ required: true, message: '请输入联系电话', trigger: 'blur' },
],
deliverPhone: [
{ required: true, message: '请输入物流司机电话', trigger: 'blur' },
],
driver: [{ required: true, message: '请选择机手姓名', trigger: 'change' }],
driverPhone: [{ required: true, message: '请输入联系电话', trigger: 'blur' }],
deliverPhone: [{ required: true, message: '请输入物流司机电话', trigger: 'blur' }],
})
let fileItem: any = null
@ -256,13 +276,13 @@ const demandConfirmFn = () => {
if (!equipMoneyInfo.equipMoney) {
return ElMessage({
type: 'warning',
message: '请输入装备租金'
message: '请输入装备租金',
})
}
if (!equipMoneyInfo.phoneMoney) {
return ElMessage({
type: 'warning',
message: '请输入机手租金'
message: '请输入机手租金',
})
}
stepVal.value = '1'
@ -272,18 +292,17 @@ const rejectCallBack = async (row: any, value: any) => {
console.log('editCallBack', row, value)
let params = {
rejectReason: value.value,
orderId: detailsInfo.orderId
orderId: detailsInfo.orderId,
}
const res: any = await apiOrderReject(params)
if (res.code == 200) {
ElMessage({
type: 'success',
message: '驳回成功'
message: '驳回成功',
})
}
}
const demandRejectFn = (row = "") => {
const demandRejectFn = (row = '') => {
ElMessageBoxOpert(
'驳回原因',
'填写驳回原因',
@ -298,20 +317,16 @@ const demandRejectFn = (row = "") => {
rejectCallBack,
row,
'textarea',
'dangerC'
'dangerC',
)
}
const nextFn = () => {
if (!fileItem) {
errorTipFlag.value = 2
} else {
stepVal.value = '2'
}
}
const detailsInfo: any = reactive({})
const initApiOrderDetails = async () => {
@ -331,29 +346,28 @@ const initApiOrderDetails = async () => {
tableInfo.devicePrice = deviceInfo.deviceMonthLeasePrice
tableInfo.machinistPrice = deviceInfo.machinistPrice
tableInfo.imgUrl = deviceInfo.devicePicUrl
}
const confirmSendFn = () => {
if (!ruleFormRef) return
ruleFormRef.value.validate(async (valid: any) => {
if (valid) {
let params = {
orderId: detailsInfo.orderId,
contractUrl: 'https://hzgyp-prod-1259451974.cos.ap-guangzhou.myqcloud.com/enterprise/serviceAgreement.pdf',//
machinistName: submitInfo.driver,//
logisticsPhone: submitInfo.deliverPhone,//
phone: submitInfo.driverPhone,//
contractUrl:
'https://hzgyp-prod-1259451974.cos.ap-guangzhou.myqcloud.com/enterprise/serviceAgreement.pdf', //
machinistName: submitInfo.driver, //
logisticsPhone: submitInfo.deliverPhone, //
phone: submitInfo.driverPhone, //
leasePrice: equipMoneyInfo.equipMoney,
machinistPrice: equipMoneyInfo.phoneMoney
machinistPrice: equipMoneyInfo.phoneMoney,
}
const res = await apiUpdateOrderInfo(params)
console.log("resapiUpdateOrderInfo", res)
console.log('resapiUpdateOrderInfo', res)
ElMessage({
message: '已经确认发货',
type: 'success'
type: 'success',
})
stepVal.value = '3'
timeLineList.list[2].done = true
@ -363,14 +377,13 @@ const confirmSendFn = () => {
return false
}
})
}
const backFn = () => {
router.go(-1)
}
const scuccesCallback = (ev: any) => {
console.log("list0000", ev)
console.log('list0000', ev)
fileItem = ev
errorTipFlag.value = 1
}
@ -381,11 +394,9 @@ const getTimeByPoint = (start: any, duration: any) => {
const totalMoneyFn = () => {
return Number(equipMoneyInfo.equipMoney) + Number(equipMoneyInfo.phoneMoney) + '元'
}
onBeforeMount(() => {
initApiOrderDetails()
})
</script>
@ -404,7 +415,8 @@ onBeforeMount(() => {
display: flex;
justify-content: space-between;
.btn_c {}
.btn_c {
}
}
.total_money {
@ -440,12 +452,11 @@ onBeforeMount(() => {
width: 160px;
padding: 0 12px;
}
}
</style>
<style>
.dangerC {
background-color: #F56C6C !important;
border: #F56C6C;
background-color: #f56c6c !important;
border: #f56c6c;
}
</style>