1263428893@qq.com 3 months ago
parent
commit
e795c9d3d1
24 changed files with 975 additions and 276 deletions
  1. +9
    -0
      common/api.js
  2. +0
    -2
      common/config.js
  3. +22
    -4
      pages.json
  4. +1
    -1
      pages/auth/index.vue
  5. +87
    -55
      pages/home/index.vue
  6. +8
    -3
      pages/identity/index.vue
  7. +16
    -11
      pages/reservation/index.vue
  8. +100
    -18
      pages/user/index.vue
  9. +54
    -11
      pages_subpack/apply/index.vue
  10. +9
    -3
      pages_subpack/apply/list.vue
  11. +51
    -36
      pages_subpack/business/index.vue
  12. +52
    -15
      pages_subpack/category/index.vue
  13. +52
    -14
      pages_subpack/detail/index.vue
  14. +1
    -1
      pages_subpack/invite/index.vue
  15. +67
    -23
      pages_subpack/person/index.vue
  16. +138
    -79
      pages_subpack/release/index.vue
  17. +151
    -0
      pages_subpack/release/list.vue
  18. +157
    -0
      pages_subpack/spare/index.vue
  19. BIN
      static/image/nav1.png
  20. BIN
      static/image/nav2.png
  21. BIN
      static/image/nav3.png
  22. BIN
      static/image/nav4.png
  23. BIN
      static/image/nav5.png
  24. BIN
      static/image/nav6.png

+ 9
- 0
common/api.js View File

@ -78,3 +78,12 @@ export const queryMileageList = (params) => http.get('/carrent-admin/api/config/
export const bindPhone = (params) => http.get('/carrent-admin/api/login/bindPhone', {params:params})
export const updateUser = (params) => http.post('/carrent-admin/api/user/updateUser', params)
export const queryModuleList = (params) => http.get('/carrent-admin/api/config/queryModuleList', {params:params})
export const queryCategoryList = (params) => http.get('/carrent-admin/api/config/queryCategoryList', {params:params})
// 查询个人实名
export const queryAuthenticationPerson = (params) => http.get('/carrent-admin/api/user/queryAuthenticationPerson', {params:params})
// 查询企业实名
export const queryAuthenticationCompany = (params) => http.get('/carrent-admin/api/company/queryAuthenticationCompany', {params:params})

+ 0
- 2
common/config.js View File

@ -1,6 +1,4 @@
module.exports = {
// baseUrl: 'https://employadmin.augcl.com/employ-api',
// baseUrl: 'http://augcl.natapp1.cc/employ-api'
baseUrl:"https://carrentadmin.augcl.com"
// baseUrl:"http://augcl.natapp1.cc"


+ 22
- 4
pages.json View File

@ -3,7 +3,7 @@
{
"path": "pages/home/index",
"style": {
"navigationBarTitleText": "环卫",
"navigationBarTitleText": "环卫",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white",
@ -69,6 +69,15 @@
{
"root": "pages_subpack",
"pages": [
{
"path": "spare/index",
"style": {
"navigationBarTitleText": "环卫设备及配件",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "apply/list",
"style": {
@ -150,6 +159,15 @@
"navigationBarTextStyle": "white"
}
},
{
"path": "release/list",
"style": {
"navigationBarTitleText": "发布列表",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "release/index",
"style": {
@ -171,7 +189,7 @@
{
"path": "business/index",
"style": {
"navigationBarTitleText": "企业注册",
"navigationBarTitleText": "企业认证",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
@ -180,7 +198,7 @@
{
"path": "person/index",
"style": {
"navigationBarTitleText": "个人注册",
"navigationBarTitleText": "个人认证",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
@ -196,7 +214,7 @@
"navigationBarBackgroundColor": "#669A32",
"backgroundColor": "#f5f5f5",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "环卫",
"navigationBarTitleText": "环卫",
"backgroundColorTop": "#f5f5f5",
"backgroundColorBottom": "#f5f5f5"
},


+ 1
- 1
pages/auth/index.vue View File

@ -3,7 +3,7 @@
<view class="se-flex se-pt-200 se-flex-h-c se-flex-ff-cw">
<image class="se-w-150 se-h-150" src="@/static/image/logo.png" mode=""></image>
<view class="se-flex se-flex-h-c se-fs-34 se-fw-6 se-c-black se-mt-40">
环卫小程序
环卫小程序
</view>
</view>
<view class="se-pb-200 se-pos-cb se-w-p-100">


+ 87
- 55
pages/home/index.vue View File

@ -6,15 +6,15 @@
</view>
<view class="se-flex se-flex-h-sb se-px-20 se-pb-10 se-pt-10 se-zi-s" style="background-color: transparent;">
<view class="se-c-white se-fs-28">
<view class="se-c-white se-py-5 se-px-10 se-fw-6 se-br-12 se-fs-28 se-display-ib">
<view class="se-c-white se-py-5 se-px-10 se-fw-6 se-br-12 se-fs-30 se-display-ib">
环保
</view>
<text class="se-ml-10 se-fw-6 se-fs-22">寻找你想要的</text>
<text class="se-ml-10 se-fw-6 se-fs-26">寻找你想要的</text>
</view>
</view>
<view class="se-px-40 se-py-20">
<view class=" se-br-50 se-c-black se-px-20 se-py-5 se-flex se-flex-h-sb se-fs-26">
<view class="se-pl-10 se-pr-20 se-flex se-flex-h se-h-40 se-lh-40 " @click="handleAreaChange()">
<view class="se-pl-10 se-pr-20 se-flex se-flex-h se-h-40 se-lh-40 " @click="getLocation()">
<text class="se-pr-20 se-c-white nobreak">{{city?city:'未知'}}</text>
<u-icon name="arrow-down-fill" color="#ffffff"></u-icon>
</view>
@ -24,8 +24,9 @@
</view>
</view>
<view class="se-pb-20 se-pt-40 se-zi-s">
<view class="se-px-20">
<u-swiper height="300rpx" style="background-color: transparent;height: 300rpx;" keyName="image" :list="swiperList" @click="swiperClick"></u-swiper>
<view class="se-px-20 se-br-20">
<!-- <image src="" mode="widthFix"></image> -->
<u-swiper :imgMode="widthFix" height="320rpx" :indicator="true" indicatorMode="dot" :loading="false" :circular="true" :interval="4000" :autoplay="true" style="background-color: #f5f5f5;height: 320rpx;" keyName="image" :list="swiperList" @click="swiperClick"></u-swiper>
</view>
<!-- <view class="se-pt-10 se-bgc-white se-px-0 se-py-10 se-ta-l se-c-orange se-flex se-flex-ai-c se-fs-26">
<image class="se-a-80" src="@/static/image/aed60x.png" mode=""></image>
@ -33,13 +34,14 @@
</view> -->
</view>
<view class="se-my-20 se-pt-20 se-bgc-white se-grid">
<navigator :url="item.url" v-for="(item, index) in nav" :key="index" class="se-flex-v-c se-pt-10 se-mb-10">
<image class="se-a-100 se-br-20" :src="item.img" mode=""></image>
<text class="se-w-150 se-h-60 se-lh-30 se-c-black se-fs-22 se-ta-c se-mt-10 se-toe-2">{{item.name}}</text>
<navigator :url="item.path" v-for="(item, index) in nav" :key="index" class="se-flex-v-c se-pt-10 se-mb-10">
<image class="se-a-100 se-br-20" :src="item.image" mode=""></image>
<text class="se-w-150 se-h-60 se-lh-30 se-c-black se-fs-22 se-ta-c se-mt-10 se-toe-2">{{item.title}}</text>
</navigator>
</view>
<view class="se-px-30 se-py-30 se-bgc-white se-c-black">
精品二手车
<!-- 精品二手车 -->
精品车列表
</view>
<view class="se-grid-2">
<view class="items-box se-br-5 se-px-10" v-for="(items,indexs) in list" :key="indexs" @click="onDetail(items)">
@ -47,17 +49,20 @@
<view class="se-c-black se-fs-24 se-fw-6 se-mt-10">
{{ items.goodsName }}
</view>
<view class="se-flex se-mt-10">
<view class="se-flex se-flex-ff-rw se-mt-10" v-if="items.cartypeId!='1867039853005877250'">
<view class="se-tag">
{{items.cartypeId_dictText}}
{{items.brand}}
</view>
<view class="se-tag">
{{items.categorytwoId_dictText}}
{{items.goodsTime}}
</view>
<view class="se-tag">
{{items.mileage}}公里
</view>
</view>
<view class="se-flex se-flex-h-sb se-w-p-100 se-pt-20">
<view class="se-fs-24 se-display-ib">
<text class="se-c-orange se-fs-30 se-fw-6"><text class="se-fs-24"></text>{{items.price}}<text class="se-fs-24"></text></text>
<text class="se-c-orange se-fs-26 se-fw-6"><text class="se-fs-24"></text>{{items.price}}<text class="se-fs-24"></text><text class="se-fs-24" v-if="items.cartypeId=='1875536807086256130'">/</text></text>
</view>
<view class="se-display-ib se-bgc-orange se-px-15 se-br-40 se-flex-h-c se-h-40 se-lh-40 se-ta-c se-fs-22 se-c-white se-b">
<text>查看详情</text>
@ -70,7 +75,7 @@
</template>
<script>
import { getInfo,queryGoodsList,queryBannerList } from "@/common/api.js"
import { getInfo,queryGoodsList,queryBannerList,queryModuleList } from "@/common/api.js"
import QQMapWX from "@/util/qqmap-wx-jssdk.min.js"
export default{
components:{
@ -79,41 +84,8 @@
data(){
return {
city:"",
swiperList: [
"https://cdn.uviewui.com/uview/swiper/swiper1.png"
],
nav:[
{
img:"../../static/image/nav1.png",
name:"新车商城",
url:"/pages_subpack/category/index"
},
{
img:"../../static/image/nav2.png",
name:"二手车商城",
url:"/pages_subpack/category/index"
},
{
img:"../../static/image/nav3.png",
name:"环卫设备及配件",
url:"/pages_subpack/category/index"
},
{
img:"../../static/image/nav4.png",
name:"车辆租赁",
url:"/pages_subpack/category/index"
},
{
img:"../../static/image/nav5.png",
name:"新闻资讯",
url:"/pages_subpack/news/index"
},
{
img:"../../static/image/nav6.png",
name:"帮助寻车",
url:"/pages_subpack/category/index"
}
],
swiperList: [],
nav:[],
pageNo:1,
pageSize:10,
list:[]
@ -130,12 +102,16 @@
this.onPageList()
this.getLocation()
this.onQueryBannerList()
this.onQueryModuleList()
},
onPullDownRefresh() {
let that = this
that.pageNo = 1
that.list = []
that.onPageList()
this.getLocation()
this.onQueryBannerList()
this.onQueryModuleList()
},
onReachBottom() {
let that = this
@ -156,6 +132,17 @@
return share
},
methods:{
onQueryModuleList(){
const that = this;
let params={}
queryModuleList(params).then(response=>{
console.info("queryBannerList",response)
that.nav = response.result.records
// that.swiperList = response.result.records
}).catch(error=>{
})
},
onSearch(){
uni.navigateTo({
url:"/pages_subpack/category/index"
@ -195,6 +182,54 @@
console.error('逆地理编码失败:', error);
}
});
},
fail(err) {
console.error('获取位置失败:', err);
if (err.errMsg.includes('auth deny') || err.errMsg.includes('auth denied')) {
//
uni.showModal({
title: '授权提示',
content: '需要获取位置信息,请前往设置授权',
success: (res) => {
if (res.confirm) {
uni.openSetting({
success: (settingRes) => {
if (settingRes.authSetting['scope.userLocation']) {
console.log('用户已重新授权');
//
uni.getLocation({
type: 'wgs84',
success: (res) => {
const qqmapsdk = new QQMapWX({
key: 'TT7BZ-Z3LW4-KOAUB-KWHOA-SBJJ6-Y5B6R' //
});
qqmapsdk.reverseGeocoder({
location: {
latitude: res.latitude,
longitude: res.longitude
},
success: function(response) {
that.city = response.result.ad_info.city
console.log('逆地理编码结果:', response);
},
fail: function(error) {
console.error('逆地理编码失败:', error);
}
});
},
fail: (err) => {
console.error('重新获取位置失败:', err);
},
});
} else {
console.error('用户未授权位置信息');
}
},
});
}
},
});
}
}
})
},
@ -212,7 +247,7 @@
let that = this
let params={
pageNo:that.pageNo,
pageSize:that.pageSize
pageSize:that.pageSize,
}
queryGoodsList(params).then((response) => {
console.info('queryGoodsList',response)
@ -281,6 +316,8 @@
padding: 20rpx;
}
.se-tag{
margin-right: 10rpx;
margin-top: 5px;
padding: 5rpx 10rpx;
background: #fff2df;
border-radius: 4rpx;
@ -290,10 +327,5 @@
font-weight: 700;
text-align: center;
color: #fab143;
margin-left: 10rpx;
}
.se-tag:first-child{
margin-left: 0rpx;
}
</style>

+ 8
- 3
pages/identity/index.vue View File

@ -18,18 +18,23 @@
export default{
data(){
return{
userStatus:null,
}
},
onLoad(options) {
if(options.userStatus){
this.userStatus = options.userStatus
}
},
methods:{
onBusiness(){
uni.navigateTo({
url:"/pages_subpack/business/index"
url:"/pages_subpack/business/index?userStatus="+this.userStatus
})
},
onPerson(){
uni.navigateTo({
url:"/pages_subpack/person/index"
url:"/pages_subpack/person/index?userStatus="+this.userStatus
})
}
}


+ 16
- 11
pages/reservation/index.vue View File

@ -46,7 +46,7 @@
</template>
<script>
import { queryOrderList,queryTypeList } from "@/common/api.js"
import { queryOrderList,queryCategoryList } from "@/common/api.js"
export default{
data(){
return{
@ -75,22 +75,25 @@
},
methods:{
onQueryTypeList(){
queryTypeList({}).then(response=>{
console.info("queryTypeList",response)
queryCategoryList({}).then(response=>{
console.info("queryCategoryList",response)
let arr=[
{
name:"全部",
id:null,
}
];
this.navList = arr.concat(response.result.records)
this.navList = arr.concat(response.result)
}).catch(error=>{
})
},
tabClick(event){
this.typeId = event.id;
this.onPageList()
let that = this
that.pageNo = 1
that.typeId = event.id;
that.list = []
that.onPageList()
},
onPageList(){
let that = this
@ -102,13 +105,15 @@
queryOrderList(params).then(response=>{
console.info("queryOrderList",response)
response.result.records.forEach((items,indexs)=>{
if(items.carrentGoods.image){
items.carrentGoods.images = items.carrentGoods.image.split(',')
}else{
items.carrentGoods.images = []
if(items.carrentGoods){
if(items.carrentGoods.image){
items.carrentGoods.images = items.carrentGoods.image.split(',')
}else{
items.carrentGoods.images = []
}
}
})
that.list = response.result.records
that.list = that.list.concat(response.result.records)
}).catch(error=>{
})


+ 100
- 18
pages/user/index.vue View File

@ -15,10 +15,27 @@
<text>手机号:</text>
<text class="se-ml-20">{{user.phone}}</text>
</view>
<view class="se-fs-24 se-display-ib">
<text class="se-tag se-bgc-gray" v-if="companyAuthenticationStatus==2">企业认证-未通过</text>
<text class="se-tag se-bgc-blue" v-if="companyAuthenticationStatus==1">企业认证-已通过</text>
<text class="se-tag se-bgc-red" v-if="companyAuthenticationStatus==0">企业认证-审核中</text>
<text class="se-tag se-bgc-gray" v-if="personAuthenticationStatus==2">个人认证-未通过</text>
<text class="se-tag se-bgc-blue" v-if="personAuthenticationStatus==1">个人认证-已通过</text>
<text class="se-tag se-bgc-red" v-if="personAuthenticationStatus==0">个人认证-审核中</text>
</view>
</view>
</view>
</view>
<view class="se-m-30 se-mt-30 se-pl-30 se-pr-20 se-br-20 se-bgc-white">
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onIdentity()">
<view class="se-flex se-flex-ai-c">
<image class="se-a-30" src="@/static/image/482012.png" mode=""></image>
<text class="se-ml-20 se-fs-24 se-fw-5">实名认证</text>
</view>
<view class="se-flex se-flex-ai-c">
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onReservation()">
<view class="se-flex se-flex-ai-c">
<image class="se-a-30" src="@/static/image/482011.png" mode=""></image>
@ -28,7 +45,7 @@
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onRelease">
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onRelease()">
<view class="se-flex se-flex-ai-c">
<image class="se-a-30" src="@/static/image/482014.png" mode=""></image>
<text class="se-ml-20 se-fs-24 se-fw-5">我的发布</text>
@ -46,7 +63,7 @@
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onInvite">
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onInvite()">
<view class="se-flex se-flex-ai-c">
<image class="se-a-30" src="@/static/image/482012.png" mode=""></image>
<text class="se-ml-20 se-fs-24 se-fw-5">我的邀请</text>
@ -55,7 +72,7 @@
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onRecommend">
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onRecommend()">
<view class="se-flex se-flex-ai-c">
<image class="se-a-30" src="@/static/image/482012.png" mode=""></image>
<text class="se-ml-20 se-fs-24 se-fw-5">我的推荐</text>
@ -64,7 +81,7 @@
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onCustomerService">
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onCustomerService()">
<view class="se-flex se-flex-ai-c">
<image class="se-a-30" src="@/static/image/470868.png" mode=""></image>
<text class="se-ml-20 se-fs-24 se-fw-5">在线客服</text>
@ -73,7 +90,7 @@
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onVersion">
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onVersion()">
<view class="se-flex se-flex-ai-c">
<image class="se-a-30" src="@/static/image/470868.png" mode=""></image>
<text class="se-ml-20 se-fs-24 se-fw-5">关于我们</text>
@ -82,7 +99,7 @@
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb" @click="onLogOut">
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb" @click="onLogOut()">
<view class="se-flex se-flex-ai-c">
<text class="se-fs-24 se-fw-5">退出登录</text>
</view>
@ -101,9 +118,14 @@
return {
user:{},
phone:"",
companyAuthenticationStatus:null,
personAuthenticationStatus:null,
}
},
onLoad() {
},
onShow() {
this.onUserInfo()
this.onQueryPhone()
},
@ -113,9 +135,12 @@
getInfo({id:uni.getStorageSync('userInfo').id}).then(response=>{
console.info('resultresult',response)
that.user = response.result.memberInfo
}).catch(err=>{
})
that.companyAuthenticationStatus = response.result.companyAuthenticationStatus
that.personAuthenticationStatus = response.result.personAuthenticationStatus
uni.setStorageSync('userInfo', response.result.memberInfo)
uni.setStorageSync("companyAuthenticationStatus",response.result.companyAuthenticationStatus)
uni.setStorageSync("personAuthenticationStatus",response.result.personAuthenticationStatus)
}).catch(err=>{})
},
onQueryPhone(){
queryPhone({}).then(response=>{
@ -124,6 +149,12 @@
})
},
//
onIdentity(){
uni.navigateTo({
url:"/pages/identity/index?userStatus=1"
})
},
onInvite(){
uni.navigateTo({
url:"/pages_subpack/invite/index"
@ -135,14 +166,38 @@
})
},
onRelease(){
uni.navigateTo({
url:"/pages_subpack/release/index"
})
let that = this
if (that.companyAuthenticationStatus == 1 || that.personAuthenticationStatus == 1){
uni.navigateTo({
url:"/pages_subpack/release/list"
})
}else{
uni.showModal({
title:"未实名认证",
showCancel:false,
content:"立即前往实名认证",
success() {
that.onIdentity()
}
})
}
},
onApply(){
uni.navigateTo({
url:"/pages_subpack/apply/list"
})
let that = this
if (that.companyAuthenticationStatus == 1 || that.personAuthenticationStatus == 1){
uni.navigateTo({
url:"/pages_subpack/apply/list"
})
}else{
uni.showModal({
title:"未实名认证",
showCancel:false,
content:"立即前往实名认证",
success() {
that.onIdentity()
}
})
}
},
onSystem(){
uni.navigateTo({
@ -150,9 +205,21 @@
})
},
onReservation(){
uni.navigateTo({
url:"/pages/reservation/index"
})
let that = this
if (that.companyAuthenticationStatus == 1 || that.personAuthenticationStatus == 1){
uni.navigateTo({
url:"/pages/reservation/index"
})
}else{
uni.showModal({
title:"未实名认证",
showCancel:false,
content:"立即前往实名认证",
success() {
that.onIdentity()
}
})
}
},
onVersion(){
uni.navigateTo({
@ -168,9 +235,13 @@
success:(res)=> {
console.info(res)
if(res.confirm==true){
uni.removeStorageSync("userId")
uni.removeStorageSync("shareId")
uni.removeStorageSync("userInfo")
uni.removeStorageSync("token")
uni.removeStorageSync("sessionKey")
uni.removeStorageSync("companyAuthenticationStatus")
uni.removeStorageSync("personAuthenticationStatus")
uni.navigateTo({
url:"/pages/auth/index"
})
@ -217,4 +288,15 @@
gap: 10rpx;
padding-bottom: 4rpx;
}
.se-tag{
margin-right: 10rpx;
margin-top: 5px;
padding: 5rpx 10rpx;
border-radius: 4rpx;
border: 2rpx solid rgba(0,0,0,0.00);
font-size: 16rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: center;
}
</style>

+ 54
- 11
pages_subpack/apply/index.vue View File

@ -1,8 +1,18 @@
<template>
<view class="se-m-20 se-p-20 se-br-10">
<u--form labelPosition="left" :model="form" :rules="rules" ref="uForm" labelWidth="80">
<u-form-item label="类型" prop="type" @click="showType=true">
<u--input border="bottom" v-model="form.type" disabled placeholder="请填写类型"></u--input>
<u-form-item labelWidth="0">
<view class="se-fs-26 se-c-black se-pb-10">
请选择您要寻找的车辆类型
</view>
<view class="se-flex se-flex-ai-c se-flex-ff-rw">
<view v-if="item.name !='环卫设备及配件'" class="se-py-10 se-px-30 se-fs-22 se-br-10 se-mr-15 se-mt-10" :class="item.id==form.cartypeId ? 'se-bgc-green se-c-white se-b-green' : 'se-b se-c-text'" @click="handleCartype(item)" v-for="(item,index) in categoryList" :key="index">
{{item.name}}
</view>
</view>
</u-form-item>
<u-form-item label="类型" prop="categorytwoId" @click="showType=true">
<u--input border="bottom" v-model="form.categorytwoName" disabled placeholder="请填写类型"></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
<u-form-item label="车辆型号" prop="model">
@ -41,13 +51,14 @@
</u--form>
<u-action-sheet
:show="showType"
:actions="actions"
:actions="categoryTwoList"
title="请选择类型"
@close="showType = false"
@select="typeSelect"
@select="categoryTwoSelect"
>
</u-action-sheet>
<u-datetime-picker
:maxDate="maxDate"
:show="showDate"
v-model="date"
mode="date"
@ -58,21 +69,29 @@
</template>
<script>
const now = new Date();
const startOfToday = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime();
const startOfYesterday = startOfToday - 24 * 60 * 60 * 1000;
import { queryTypeList,addApply } from "@/common/api.js"
import { queryTypeList,addApply,queryCategoryList } from "@/common/api.js"
export default {
components:{
},
data() {
return {
maxDate:startOfYesterday,
categoryTwoList:[],
categoryList:[],
showDate:false,
showType:false,
actions: [],
date:Number(new Date()),
form: {
cartypeId:"",
cartypeName:"",
categorytwoId:"",//id
categorytwoName:"",
type:"",//
model:"",//
date:"",//
@ -83,7 +102,7 @@
remark:"",//
},
rules: {
type:[
categorytwoName:[
{
type: 'string',
required: true,
@ -144,11 +163,34 @@
},
onLoad(options) {
this.onQueryTypeList()
this.onQueryCategoryList()
},
watch: {
},
methods: {
handleCartype(event){
this.form.cartypeId = event.id
this.form.cartypeName = event.name
this.categoryTwoList =event.carrentCategorytwoList
this.form.categorytwoId = ""
this.form.categorytwoName = ""
},
onQueryCategoryList(){
let that = this
queryCategoryList({}).then(response=>{
console.info("queryCategoryList",response)
if(response.result.length>0){
that.categoryList = response.result
that.form.cartypeId = response.result[0].id
that.form.cartypeName = response.result[0].name
that.categoryTwoList = response.result[0].carrentCategorytwoList
}
}).catch(error=>{
})
},
onCancel(){
this.showDate = false
},
@ -161,15 +203,15 @@
this.form.date = `${year}-${month}-${day}`;
this.showDate = false
},
typeSelect(event) {
console.info(event)
categoryTwoSelect(event){
this.form.categorytwoId = event.id
this.form.type = event.name
this.form.categorytwoName = event.name
},
onQueryTypeList(){
queryTypeList({}).then(response=>{
console.info("queryTypeList",response)
this.actions = response.result.records
this.actions = response.result
}).catch(error=>{
})
@ -185,6 +227,7 @@
onAddApply(){
let that = this
let params={
cartypeId:that.form.cartypeId,
categorytwoId:that.form.categorytwoId,
model:that.form.model,
carTime:that.form.date,


+ 9
- 3
pages_subpack/apply/list.vue View File

@ -23,6 +23,7 @@
<view v-else>
<u-empty mode="list" ></u-empty>
</view>
<view class="se-h-200"></view>
<view class="se-pos-fixed se-flex-h-c se-bs-t se-w-750 se-h-200" style="background-color: #fff;bottom: 0;left: 0;">
<view @click="onApply()" class="se-mb-20 se-br-20 se-w-400 se-ml-20 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-32 se-c-white se-bgc-green">
<text class="se-ml-10">申请寻车</text>
@ -42,7 +43,13 @@
}
},
onLoad(options) {
this.onPageList()
},
onShow() {
let that = this
that.pageNo = 1
that.list = []
that.onPageList()
},
onPullDownRefresh() {
let that = this
@ -69,8 +76,7 @@
}
queryApplyList(params).then(response=>{
console.info("queryApplyList",response)
that.list = response.result.records
that.list = that.list.concat(response.result.records)
}).catch(error=>{
})


+ 51
- 36
pages_subpack/business/index.vue View File

@ -1,25 +1,28 @@
<template>
<view>
<view class="se-pt-20 se-pb-20 se-px-40 se-bgc-blue se-c-white se-ta-c se-fs-24" v-if="status==1">
企业认证-已通过
</view>
<u--form labelPosition="left" :model="form" :rules="rules" ref="uForm" labelWidth="80">
<view class="se-p-20">
<view class="se-p-20 se-bgc-white se-br-10 se-fs-20">
<u-form-item label="公司名称" prop="company">
<u--input v-model="form.company" placeholder="请输入公司名称"></u--input>
<u--input v-model="form.company" :readonly="status==1?true:false" placeholder="请输入公司名称"></u--input>
</u-form-item>
<u-form-item label="联系人" prop="name">
<u--input v-model="form.name" placeholder="请输入姓名名称"></u--input>
<u--input v-model="form.name" :readonly="status==1?true:false" placeholder="请输入姓名名称"></u--input>
</u-form-item>
<u-form-item label="联系电话" prop="mobile">
<u--input v-model="form.mobile" placeholder="请输入联系方式"></u--input>
<u--input v-model="form.mobile" :readonly="status==1?true:false" placeholder="请输入联系方式"></u--input>
</u-form-item>
<u-form-item label="公司地址" prop="address">
<u--input v-model="form.address" placeholder="请输入公司地址"></u--input>
<u--input v-model="form.address" :readonly="status==1?true:false" placeholder="请输入公司地址"></u--input>
</u-form-item>
</view>
</view>
<view class="se-p-20">
<view class="se-px-20 se-pb-20 se-bgc-white se-br-10 se-fs-20">
<u-form-item prop="file" labelWidth="0">
<u-form-item prop="fileList" labelWidth="0">
<view class="se-flex se-flex-v-sa">
<view class="se-py-20 se-w-p-100 se-flex">
<view class="line-green"></view>
@ -35,11 +38,11 @@
</u-form-item>
</view>
</view>
<view class="se-px-20 se-pt-20">
<view class="se-px-20 se-pt-20" v-if="status!=1">
<view class="se-px-20 se-pb-80 se-fs-20 se-flex">
<view @click="submit"
class="se-mx-10 se-flex-1 se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-28 se-c-white se-bgc-green">
<text>确认</text>
<text>提交申请</text>
</view>
</view>
</view>
@ -47,31 +50,18 @@
</view>
</template>
<script>
import { addCompany } from "@/common/api.js"
import { addCompany,queryAuthenticationCompany } from "@/common/api.js"
export default{
data(){
return{
status:null,
form: {
name: '',
mobile: '',
company:'',
address:'',
file: '',
fileList:[],
// name: 'jerryxiao',
// mobile: '13189698114',
// company:'',
// address:'',
// file: '1',
// fileList:[
// {
// url:"https://tennis-oss.xzaiyp.top/2024-12-14/7e98056b-e0b9-496f-89f8-88026ce9426e.png"
// },
// {
// url:"https://tennis-oss.xzaiyp.top/2024-12-14/499fcd8a-3d4b-42f3-b023-61bac6b1c020.png"
// }
// ],
},
rules: {
name: [{
@ -106,29 +96,54 @@
message: '请输入公司地址',
trigger: ['blur', 'change']
}],
fileList:[
{
validator: (rule, value, callback) => {
if (value === null || value === undefined || value === '' || (Array.isArray(value) && value.length === 0)) {
callback(new Error('请选择营业执照'));
} else {
callback();
}
},
trigger: 'blur'
}
],
file: [{
type: 'string',
required: true,
message: '请选择营业执照',
trigger: ['blur', 'change']
}]
},
}
},
watch: {
'form.fileList'(newValue, oldValue) {
if (newValue.length > 0) {
this.form.file = '有'
} else {
this.form.file = ''
}
onLoad(options) {
if(options.userStatus==1){
this.status=uni.getStorageSync("companyAuthenticationStatus")
this.onQueryAuthenticationCompany()
}
},
onReady() {
this.$refs.uForm.setRules(this.rules)
},
methods: {
onQueryAuthenticationCompany(){
let params={}
queryAuthenticationCompany(params).then(response=>{
let result = response.result
let list =[]
response.result.businessLicense.split(',').forEach(item=>{
list.push({
url: item
})
})
this.form={
name: result.userName,
mobile: result.phone,
company:result.companyName,
address:result.address,
fileList:list,
}
}).catch(error=>{
})
},
submit() {
let that = this;
that.$refs.uForm.validate().then(res => {


+ 52
- 15
pages_subpack/category/index.vue View File

@ -25,21 +25,24 @@
<view class="se-grid-2 se-pt-200">
<view class="items-box se-br-5 se-px-10" v-for="(items,indexs) in list" :key="indexs" @click="onDetail(items)">
<image class="se-w-p-100 se-h-200 se-bgc-f5 se-br-5 se-py-5" :src="items.image" mode=""></image>
<image class="se-w-p-100 se-h-200 se-bgc-f5 se-br-5 se-py-5" :src="items.images[0]" mode=""></image>
<view class="se-c-black se-fs-24 se-fw-6 se-mt-10">
{{ items.goodsName }}
</view>
<view class="se-flex se-mt-10">
<view class="se-flex se-flex-ff-rw se-mt-10" v-if="items.cartypeId!='1867039853005877250'">
<view class="se-tag">
{{items.cartypeId_dictText}}
{{items.brand}}
</view>
<view class="se-tag">
{{items.categorytwoId_dictText}}
{{items.goodsTime}}
</view>
<view class="se-tag">
{{items.mileage}}公里
</view>
</view>
<view class="se-flex se-flex-h-sb se-w-p-100 se-pt-20">
<view class="se-fs-24 se-display-ib">
<text class="se-c-orange se-fs-30 se-fw-6"><text class="se-fs-24"></text>{{items.price}}<text class="se-fs-24"></text></text>
<text class="se-c-orange se-fs-26 se-fw-6"><text class="se-fs-24"></text>{{items.price}}<text class="se-fs-24"></text><text class="se-fs-24" v-if="items.cartypeId=='1875536807086256130'">/</text></text>
</view>
<view class="se-display-ib se-bgc-orange se-px-15 se-br-40 se-flex-h-c se-h-40 se-lh-40 se-ta-c se-fs-22 se-c-white se-b">
<text>查看详情</text>
@ -61,7 +64,7 @@
</template>
<script>
import { queryGoodsList,queryCategoryTwoList,queryMileageList } from "@/common/api.js"
import { queryGoodsList,queryCategoryTwoList,queryCategoryList,queryMileageList } from "@/common/api.js"
export default{
data(){
return{
@ -152,11 +155,16 @@
onQueryCategoryTwoList(){
let that = this
let params = {
categoryoneId:"1867039853005877250"
// categoryoneId:that.id,
categoryOneId:that.id,
}
queryCategoryTwoList(params).then(response=>{
queryCategoryList(params).then(response=>{
// queryCategoryTwoList(params).then(response=>{
console.info("queryCategoryTwoList",response)
that.categoryTwoList = response.result.records
if(response.result.length>0){
that.categoryTwoList = response.result[0].carrentCategorytwoList
}
}).catch(error=>{
})
@ -187,10 +195,42 @@
goodsTime:that.goodsTime,
goodsName:that.goodsName,
pageNo:that.pageNo,
pageSize:that.pageSize
pageSize:that.pageSize,
}
queryGoodsList(params).then((response) => {
console.info('queryGoodsList',response)
response.result.records.forEach((items,indexs)=>{
if(items.image){
items.images = items.image.split(',')
}else{
items.images = []
}
if(items.imageBack){
items.imageBacks = items.imageBack.split(',')
}else{
items.imageBacks = []
}
if(items.imageCab){
items.imageCabs = items.imageCab.split(',')
}else{
items.imageCabs = []
}
if(items.imageFront){
items.imageFronts = items.imageFront.split(',')
}else{
items.imageFronts = []
}
if(items.imageLeft){
items.imageLefts = items.imageLeft.split(',')
}else{
items.imageLefts = []
}
if(items.imageRight){
items.imageRights = items.imageRight.split(',')
}else{
items.imageRights = []
}
})
if(that.pageNo==1){
that.list = response.result.records
}else{
@ -218,6 +258,8 @@
padding: 20rpx;
}
.se-tag{
margin-right: 10rpx;
margin-top: 5px;
padding: 5rpx 10rpx;
background: #fff2df;
border-radius: 4rpx;
@ -227,10 +269,5 @@
font-weight: 700;
text-align: center;
color: #fab143;
margin-left: 10rpx;
}
.se-tag:first-child{
margin-left: 0rpx;
}
</style>

+ 52
- 14
pages_subpack/detail/index.vue View File

@ -9,30 +9,52 @@
{{detail.goodsName}}
</view>
<view class="se-display-ib se-c-red se-fs-32 se-br-8 se-px-10 se-py-5">
{{detail.price}}
{{detail.price}}<text class="se-fs-24"></text><text class="se-fs-24" v-if="detail.cartypeId=='1875536807086256130'">/</text>
</view>
</view>
<view class="se-pr-30 se-flex se-flex-v-c">
<text>浏览{{detail.views}}+</text>
<text>销售{{detail.views}}+</text>
<!-- <button style="justify-content: center;" class="se-w-140 se-flex se-flex-ai-c se-h-60 se-lh-60 se-fs-22 se-bgc-green se-c-white se-py-0 se-br-30 se-px-20 se-m-0" open-type="share">
<uv-icon name="share" color="#fff"></uv-icon>
<text class="se-fs-20 se-pl-5">分享</text>
</button> -->
</view>
</view>
<view class="se-mt-20 se-bgc-white se-px-20 se-py-10 se-ta-l se-c-black se-py-20 se-flex se-flex-ai-c se-fs-24">
<text>型号:</text>
<text class="se-ml-10">{{detail.model}}</text>
<view class="se-mt-20 se-bgc-white se-px-20 se-py-10 se-ta-l se-c-black se-py-20 se-flex se-flex-ff-cw se-fs-24">
<view class="se-flex se-flex-ai-c">
<text>型号:</text>
<view class="se-tag">
{{detail.model}}
</view>
</view>
<view class="se-flex se-flex-ai-c se-pt-10" v-if="detail.cartypeId!='1867039853005877250'">
<text>品牌名:</text>
<view class="se-tag">
{{detail.brand}}
</view>
</view>
<view class="se-flex se-flex-ai-c se-pt-10" v-if="detail.cartypeId!='1867039853005877250'">
<text>公里数:</text>
<view class="se-tag">
{{detail.mileage}}公里
</view>
</view>
<view class="se-flex se-flex-ai-c se-pt-10" v-if="detail.cartypeId!='1867039853005877250'">
<text>时间:</text>
<view class="se-tag">
{{detail.goodsTime}}
</view>
</view>
</view>
<template v-if="detail.imageFronts && detail.imageFronts.length>0">
<template v-if="detail.imageFronts && detail.imageFronts.length>0 && detail.cartypeId!='1867039853005877250'">
<view class="se-mt-20 se-bgc-white se-px-20 se-py-10 se-ta-l se-c-black se-py-20 se-flex se-flex-ai-c se-fs-24">
<text>车辆照片:</text>
</view>
<view class="se-flex se-m-20" style="flex-wrap: wrap;">
<image v-for="(items,indexs) in detail.imageFronts" :key="indexs" @click="previewImage(detail.imageBacks,items)" class="se-w-220 se-h-180 se-bgc-f5 se-br-5 se-mr-10 se-mb-10" :src="items" mode=""></image>
<image v-for="(items,indexs) in detail.imageFronts" :key="indexs" @click="previewImage(detail.imageFronts,items)" class="se-w-220 se-h-180 se-bgc-f5 se-br-5 se-mr-10 se-mb-10" :src="items" mode=""></image>
</view>
</template>
<template v-if="detail.imageBacks && detail.imageBacks.length>0">
<template v-if="detail.imageBacks && detail.imageBacks.length>0 && detail.cartypeId!='1867039853005877250'">
<view class="se-mt-20 se-bgc-white se-px-20 se-py-10 se-ta-l se-c-black se-py-20 se-flex se-flex-ai-c se-fs-24">
<text>车辆照片:</text>
</view>
@ -40,7 +62,7 @@
<image v-for="(items,indexs) in detail.imageBacks" :key="indexs" @click="previewImage(detail.imageBacks,items)" class="se-w-220 se-h-180 se-bgc-f5 se-br-5 se-mr-10 se-mb-10" :src="items" mode=""></image>
</view>
</template>
<template v-if="detail.imageLefts && detail.imageLefts.length>0">
<template v-if="detail.imageLefts && detail.imageLefts.length>0 && detail.cartypeId!='1867039853005877250'">
<view class="se-mt-20 se-bgc-white se-px-20 se-py-10 se-ta-l se-c-black se-py-20 se-flex se-flex-ai-c se-fs-24">
<text>车辆照片:</text>
</view>
@ -48,7 +70,7 @@
<image v-for="(items,indexs) in detail.imageLefts" :key="indexs" @click="previewImage(detail.imageLefts,items)" class="se-w-220 se-h-180 se-bgc-f5 se-br-5 se-mr-10 se-mb-10" :src="items" mode=""></image>
</view>
</template>
<template v-if="detail.imageRights && detail.imageRights.length>0">
<template v-if="detail.imageRights && detail.imageRights.length>0 && detail.cartypeId!='1867039853005877250'">
<view class="se-mt-20 se-bgc-white se-px-20 se-py-10 se-ta-l se-c-black se-py-20 se-flex se-flex-ai-c se-fs-24">
<text>车辆照片:</text>
</view>
@ -56,7 +78,7 @@
<image v-for="(items,indexs) in detail.imageRights" :key="indexs" @click="previewImage(detail.imageRights,items)" class="se-w-220 se-h-180 se-bgc-f5 se-br-5 se-mr-10 se-mb-10" :src="items" mode=""></image>
</view>
</template>
<template v-if="detail.imageCabs && detail.imageCabs.length>0">
<template v-if="detail.imageCabs && detail.imageCabs.length>0 && detail.cartypeId!='1867039853005877250'">
<view class="se-mt-20 se-bgc-white se-px-20 se-py-10 se-ta-l se-c-black se-py-20 se-flex se-flex-ai-c se-fs-24">
<text>车辆照片驾驶室:</text>
</view>
@ -90,7 +112,7 @@
</view>
<u-popup :show="show" @close="close" @open="open">
<u--form labelPosition="left" :model="form" :rules="rules" ref="uForm" labelWidth="80">
<view class="se-bgc-white se-pt-40 se-pb-80">
<view class="se-bgc-white se-pt-40 se-pb-80" style="border-radius: 10px 10px 0 0;">
<view class="se-px-40 se-py-20 se-c-black se-fs-30 se-fw-6">
预约租车
</view>
@ -199,7 +221,7 @@
console.info(options)
let share = {
title:this.detail.goodsName,
path:"/pages_subpack/detail/index?id="+this.id+"&shareId="+uni.getStorageSync('userInfo').id,
path:"/pages_subpack/detail/index?goodsId="+this.id+"&shareId="+uni.getStorageSync('userInfo').id,
imageUrl:this.list[0].url,
success:(res) => {
console.info(res)
@ -272,7 +294,7 @@
// uni.$u.toast('')
this.onAddOrder()
}).catch(errors => {
uni.$u.toast('校验失败')
})
},
onAddOrder(){
@ -367,4 +389,20 @@
content: "";
border: none;
}
.se-tag{
padding: 5rpx 20rpx;
background: #fff2df;
border-radius: 4rpx;
border: 2rpx solid rgba(0,0,0,0.00);
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: center;
color: #fab143;
margin-left: 10rpx;
font-size: 22rpx;
}
.se-tag:first-child{
margin-left: 0rpx;
}
</style>

+ 1
- 1
pages_subpack/invite/index.vue View File

@ -3,7 +3,7 @@
<view class="se-p-40 se-flex se-bgc-white se-br-20 se-bs se-flex-v-sa">
<text class="se-pb-50 se-pt-100">邀请好友</text>
<image class="se-a-300 se-br-20" :src="qrcode" mode=""></image>
<text class="se-pt-50 se-pb-80">邀请码{{shareId}} </text>
<!-- <text class="se-pt-50 se-pb-80">邀请码{{shareId}} </text> -->
<!-- 邀请码TKAFGED -->
</view>
<view class="se-px-100 se-pt-80 se-fs-20 se-flex">


+ 67
- 23
pages_subpack/person/index.vue View File

@ -1,22 +1,25 @@
<template>
<view>
<view class="se-pt-20 se-pb-20 se-px-40 se-bgc-blue se-c-white se-ta-c se-fs-24" v-if="status==1">
个人认证-已通过
</view>
<u--form labelPosition="top" :model="form" :rules="rules" ref="uForm" labelWidth="80">
<view class="se-p-20">
<view class="se-p-20 se-bgc-white se-br-10 se-fs-20">
<u-form-item label="姓名" prop="name">
<u--input v-model="form.name" placeholder="请输入姓名名称"></u--input>
<u--input v-model="form.name" :readonly="status==1?true:false" placeholder="请输入姓名名称"></u--input>
</u-form-item>
<u-form-item label="身份证号码" prop="idCard">
<u--input v-model="form.idCard" placeholder="请输入详细地址"></u--input>
<u--input v-model="form.idCard" :readonly="status==1?true:false" placeholder="请输入身份证号码"></u--input>
</u-form-item>
<u-form-item label="联系电话" prop="mobile">
<u--input v-model="form.mobile" placeholder="请输入联系方式"></u--input>
<u--input v-model="form.mobile" :readonly="status==1?true:false" placeholder="请输入联系方式"></u--input>
</u-form-item>
</view>
</view>
<view class="se-p-20">
<view class="se-px-20 se-pb-20 se-bgc-white se-br-10 se-fs-20">
<u-form-item prop="file" labelWidth="2">
<u-form-item prop="fileList" labelWidth="2">
<view class="se-flex se-flex-v-sa">
<view class="se-py-20 se-w-p-100 se-flex">
<view class="line-green"></view>
@ -32,11 +35,11 @@
</u-form-item>
</view>
</view>
<view class="se-px-20 se-pt-20">
<view class="se-px-20 se-pt-20" v-if="status!=1">
<view class="se-px-20 se-pb-80 se-fs-20 se-flex">
<view @click="submit"
class="se-mx-10 se-flex-1 se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-28 se-c-white se-bgc-green">
<text>确认</text>
<text>提交申请</text>
</view>
</view>
</view>
@ -44,15 +47,15 @@
</view>
</template>
<script>
import { addUser } from "@/common/api.js"
import { addUser,queryAuthenticationPerson } from "@/common/api.js"
export default{
data(){
return{
status:null,
form: {
name: '',
idCard:'',
mobile: '',
file: '',
fileList:[]
},
rules: {
@ -62,6 +65,24 @@
message: '请输入姓名名称',
trigger: ['blur', 'change']
}],
idCard:[
{
required: true,
message: '请输入身份证号码',
trigger: ['change','blur'],
},
{
validator: (rule, value, callback) => {
if (!uni.$u.test.idCard(value)) {
callback(new Error('请输入正确身份证'));
} else {
callback();
}
},
trigger: ['change','blur'],
}
],
mobile: [
{
required: true,
@ -76,28 +97,52 @@
trigger: ['change','blur'],
},
],
file: [{
type: 'string',
required: true,
message: '请选择身份证照片',
trigger: ['blur', 'change']
}]
fileList:[
{
validator: (rule, value, callback) => {
if (value === null || value === undefined || value === '' || (Array.isArray(value) && value.length === 0)) {
callback(new Error('请选择身份证'));
} else {
callback();
}
},
trigger: 'blur'
}
],
},
}
},
watch: {
'form.fileList'(newValue, oldValue) {
if (newValue.length > 0) {
this.form.file = '有'
} else {
this.form.file = ''
}
watch: {},
onLoad(options) {
if(options.userStatus==1){
this.status=uni.getStorageSync("personAuthenticationStatus")
this.onQueryAuthenticationPerson()
}
},
onReady() {
this.$refs.uForm.setRules(this.rules)
},
methods: {
onQueryAuthenticationPerson(){
let params={}
queryAuthenticationPerson(params).then(response=>{
let result = response.result
let list =[]
response.result.cerImage.split(',').forEach(item=>{
list.push({
url: item
})
})
this.form={
name: result.name,
mobile: result.phone,
idCard:result.cerNo,
fileList:list,
}
}).catch(error=>{
})
},
submit() {
let that = this
that.$refs.uForm.validate().then(res => {
@ -105,7 +150,6 @@
that.onAddUser()
}).catch(errors => {
console.info(errors)
uni.$u.toast('校验失败')
})
},
onAddUser(){
@ -129,7 +173,7 @@
})
},
deletePic(event) {
deletePic(e) {
this.form.fileList.splice(e.index, 1)
},
async afterRead(e) {


+ 138
- 79
pages_subpack/release/index.vue View File

@ -6,7 +6,7 @@
请选择您要发布的车辆类型
</view>
<view class="se-flex se-flex-ai-c se-flex-ff-rw">
<view class="se-py-10 se-px-30 se-fs-22 se-br-10 se-mr-15 se-mt-10" :class="item.id==form.typeId ? 'se-bgc-green se-c-white se-b-green' : 'se-b se-c-text'" @click="handleCartype(item)" v-for="(item,index) in actions" :key="index">
<view v-if="item.name !='环卫设备及配件'" class="se-py-10 se-px-30 se-fs-22 se-br-10 se-mr-15 se-mt-10" :class="item.id==form.cartypeId ? 'se-bgc-green se-c-white se-b-green' : 'se-b se-c-text'" @click="handleCartype(item)" v-for="(item,index) in categoryList" :key="index">
{{item.name}}
</view>
</view>
@ -49,7 +49,7 @@
</u-form-item>
<u-form-item label="价格" prop="price">
<u--input v-model="form.price" placeholder="请填写价格"></u--input>
<div slot="right" class="se-c-green"></div>
<div slot="right" class="se-c-green"> <text v-if="form.cartypeName=='租赁车辆'">/</text> </div>
</u-form-item>
<u-form-item label="库存" prop="inventory">
<u--input v-model="form.inventory" type="number" placeholder="请填写库存"></u--input>
@ -141,11 +141,12 @@
</u--form>
<u-datetime-picker
:show="showDate"
v-model="date"
mode="date"
@confirm="onConfirm"
@cancel="onCancel"
:maxDate="maxDate"
:show="showDate"
v-model="date"
mode="date"
@confirm="onConfirm"
@cancel="onCancel"
></u-datetime-picker>
<u-action-sheet :actions="categoryOneList" @select="selectCategoryOneClick" title="分类" :show="categoryOneShow" @close="categoryOneShow=false"></u-action-sheet>
<u-action-sheet :actions="categoryTwoList" @select="selectCategoryTwoClick" title="分类" :show="categoryTwoShow" @close="categoryTwoShow=false"></u-action-sheet>
@ -153,7 +154,11 @@
</template>
<script>
import { queryTypeList,addGoods,queryCategoryOneList,queryCategoryTwoList } from "@/common/api.js"
const now = new Date();
const startOfToday = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime();
const startOfYesterday = startOfToday - 24 * 60 * 60 * 1000;
import { queryTypeList,addGoods,queryCategoryOneList,queryCategoryTwoList,queryCategoryList } from "@/common/api.js"
import QQMapWX from "@/util/qqmap-wx-jssdk.min.js"
export default {
components:{
@ -161,6 +166,7 @@
},
data() {
return {
maxDate:startOfYesterday,
actions:[],
showType:false,
showDate:false,
@ -169,77 +175,106 @@
categoryOneList:[],
categoryTwoShow:false,
categoryTwoList:[],
categoryList:[],//
form: {
// typeId:"",//
// cartypeId:"",//
// cartypeName:"",//
// categorytwoId:"",//
// categorytwoName:"",//
// goodsName:"",//
// brand:"",//
// model:"",//
// area:"658",//
// latitude:"28.23586",
// longitude:"112.931496",
// address:'',
// date:"2024-12-15",//
// mileage:"2000",//
// price:"210000",//
// inventory:"5",//
// contacts:"",//
// phone:"13189698115",//
// views:"5",//
// fileCarList:[
// {
// url:"https://tennis-oss.xzaiyp.top/2024-12-14/7e98056b-e0b9-496f-89f8-88026ce9426e.png"
// },
// {
// url:"https://tennis-oss.xzaiyp.top/2024-12-14/499fcd8a-3d4b-42f3-b023-61bac6b1c020.png"
// }
// ],//
// fileFrontList:[
// {
// url:"https://tennis-oss.xzaiyp.top/2024-12-14/7e98056b-e0b9-496f-89f8-88026ce9426e.png"
// },
// {
// url:"https://tennis-oss.xzaiyp.top/2024-12-14/499fcd8a-3d4b-42f3-b023-61bac6b1c020.png"
// }
// ],//
// fileBackList:[
// {
// url:"https://tennis-oss.xzaiyp.top/2024-12-14/7e98056b-e0b9-496f-89f8-88026ce9426e.png"
// },
// {
// url:"https://tennis-oss.xzaiyp.top/2024-12-14/499fcd8a-3d4b-42f3-b023-61bac6b1c020.png"
// }
// ],//
// fileLeftList:[
// {
// url:"https://tennis-oss.xzaiyp.top/2024-12-14/7e98056b-e0b9-496f-89f8-88026ce9426e.png"
// },
// {
// url:"https://tennis-oss.xzaiyp.top/2024-12-14/499fcd8a-3d4b-42f3-b023-61bac6b1c020.png"
// }
// ],//
// fileRightList:[
// {
// url:"https://tennis-oss.xzaiyp.top/2024-12-14/7e98056b-e0b9-496f-89f8-88026ce9426e.png"
// },
// {
// url:"https://tennis-oss.xzaiyp.top/2024-12-14/499fcd8a-3d4b-42f3-b023-61bac6b1c020.png"
// }
// ],//
// fileCabList:[
// {
// url:"https://tennis-oss.xzaiyp.top/2024-12-14/7e98056b-e0b9-496f-89f8-88026ce9426e.png"
// },
// {
// url:"https://tennis-oss.xzaiyp.top/2024-12-14/499fcd8a-3d4b-42f3-b023-61bac6b1c020.png"
// }
// ],//
// introduce:` "Toyota Corolla 2024"
// 轿SUVMPV
// 广`,//
typeId:"",//
typeName:"",//
cartypeId:"",//
cartypeName:"",//
categorytwoId:"",//
categorytwoName:"",//
goodsName:"驾驶式扫地机",//
brand:"大众",//
model:"朗逸",//
area:"湖南省长沙市岳麓区含光路658号",//
latitude:"28.23586",
longitude:"112.931496",
goodsName:"",//
brand:"",//
model:"",//
area:"",//
latitude:"",
longitude:"",
address:'',
date:"2024-12-15",//
mileage:"2000",//
price:"210000",//
inventory:"5",//
contacts:"柳川",//
phone:"13189698115",//
views:"5",//
fileCarList:[
{
url:"https://tennis-oss.xzaiyp.top/2024-12-14/7e98056b-e0b9-496f-89f8-88026ce9426e.png"
},
{
url:"https://tennis-oss.xzaiyp.top/2024-12-14/499fcd8a-3d4b-42f3-b023-61bac6b1c020.png"
}
],//
fileFrontList:[
{
url:"https://tennis-oss.xzaiyp.top/2024-12-14/7e98056b-e0b9-496f-89f8-88026ce9426e.png"
},
{
url:"https://tennis-oss.xzaiyp.top/2024-12-14/499fcd8a-3d4b-42f3-b023-61bac6b1c020.png"
}
],//
fileBackList:[
{
url:"https://tennis-oss.xzaiyp.top/2024-12-14/7e98056b-e0b9-496f-89f8-88026ce9426e.png"
},
{
url:"https://tennis-oss.xzaiyp.top/2024-12-14/499fcd8a-3d4b-42f3-b023-61bac6b1c020.png"
}
],//
fileLeftList:[
{
url:"https://tennis-oss.xzaiyp.top/2024-12-14/7e98056b-e0b9-496f-89f8-88026ce9426e.png"
},
{
url:"https://tennis-oss.xzaiyp.top/2024-12-14/499fcd8a-3d4b-42f3-b023-61bac6b1c020.png"
}
],//
fileRightList:[
{
url:"https://tennis-oss.xzaiyp.top/2024-12-14/7e98056b-e0b9-496f-89f8-88026ce9426e.png"
},
{
url:"https://tennis-oss.xzaiyp.top/2024-12-14/499fcd8a-3d4b-42f3-b023-61bac6b1c020.png"
}
],//
fileCabList:[
{
url:"https://tennis-oss.xzaiyp.top/2024-12-14/7e98056b-e0b9-496f-89f8-88026ce9426e.png"
},
{
url:"https://tennis-oss.xzaiyp.top/2024-12-14/499fcd8a-3d4b-42f3-b023-61bac6b1c020.png"
}
],//
introduce:`车型名称:车辆的品牌和型号,例如 "Toyota Corolla 2024"。
车辆类型轿车SUVMPV皮卡跑车等
价格区间可选项适用于市场推广`,//车辆介绍
date:"",//
mileage:"",//
price:"",//
inventory:"",//
contacts:"",//
phone:"",//
views:"",//
fileCarList:[],//
fileFrontList:[],//
fileBackList:[],//
fileLeftList:[],//
fileRightList:[],//
fileCabList:[],//
introduce:``,//
},
rules: {
typeId:[
@ -415,14 +450,30 @@
}
},
onLoad(options) {
this.onQueryTypeList()
this.onQueryCategoryOneList()
this.onQueryCategoryTwoList()
// this.onQueryTypeList()
// this.onQueryCategoryOneList()
// this.onQueryCategoryTwoList()
this.onQueryCategoryList()
},
watch: {
},
methods: {
onQueryCategoryList(){
let that = this
queryCategoryList({}).then(response=>{
console.info("queryCategoryList",response)
if(response.result.length>0){
that.categoryList = response.result
that.form.cartypeId = response.result[0].id
that.form.cartypeName = response.result[0].name
that.categoryTwoList = response.result[0].carrentCategorytwoList
}
}).catch(error=>{
})
},
handleCategoryOneChange(){
console.info('handleCategoryOneChange')
this.categoryOneShow = true
@ -519,14 +570,17 @@
// this.$refs.citySelectRef.open()
},
handleCartype(event){
this.form.typeId = event.id
this.form.cartypeId = event.id
this.form.cartypeName = event.name
this.categoryTwoList =event.carrentCategorytwoList
this.form.categorytwoId = ""
this.form.categorytwoName = ""
},
//
delCarFront(event) {
this.form.fileCarList.splice(event.index, 1)
},
async afterCarFront(e) {
console.info("e",e)
let self = this
e.file.forEach(file => {
self.$Oss.ossUpload(file.url).then(url => {
@ -622,9 +676,9 @@
onAddGoods(){
let that = this
let params={
// cartypeId:that.form.cartypeId,
cartypeId:that.form.cartypeId,
// categorytwoId:"1867040891523936258",
cartypeId:that.form.typeId,
// cartypeId:that.form.typeId,
categorytwoId:that.form.categorytwoId,
goodsName:that.form.goodsName,//
brand:that.form.brand,//
@ -655,6 +709,11 @@
icon: 'none',
duration: 2000
})
setTimeout(()=>{
uni.switchTab({
url:"/pages/home/index"
})
},1500)
}).catch(error=>{
})


+ 151
- 0
pages_subpack/release/list.vue View File

@ -0,0 +1,151 @@
<template>
<view class="se-p-20 se-pb-200">
<view v-if="list.length>0">
<view class="se-grid-2 se-pt-10">
<view class="items-box se-br-5 se-px-10" v-for="(items,indexs) in list" :key="indexs" @click="onDetail(items)">
<image class="se-w-p-100 se-h-200 se-bgc-f5 se-br-5 se-py-5" :src="items.images[0]" mode=""></image>
<view class="se-c-black se-fs-24 se-fw-6 se-mt-10">
{{ items.goodsName }}
</view>
<view class="se-flex se-flex-ff-rw se-mt-10" v-if="items.cartypeId!='1867039853005877250'">
<view class="se-tag">
{{items.brand}}
</view>
<view class="se-tag">
{{items.goodsTime}}
</view>
<view class="se-tag">
{{items.mileage}}公里
</view>
</view>
<view class="se-flex se-flex-h-sb se-w-p-100 se-pt-20">
<view class="se-fs-24 se-display-ib">
<text class="se-c-orange se-fs-26 se-fw-6"><text class="se-fs-24"></text>{{items.price}}<text class="se-fs-24"></text><text class="se-fs-24" v-if="items.cartypeId=='1875536807086256130'">/</text></text>
</view>
</view>
</view>
</view>
<u-empty v-if="list && list.length==0" mode="list"></u-empty>
</view>
<view v-else>
<u-empty mode="list" ></u-empty>
</view>
<view class="se-pos-fixed se-flex-h-c se-bs-t se-w-750 se-h-200" style="background-color: #fff;bottom: 0;left: 0;">
<view @click="onApply()" class="se-mb-20 se-br-20 se-w-400 se-ml-20 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-32 se-c-white se-bgc-green">
<text class="se-ml-10">立即发布</text>
</view>
</view>
</view>
</template>
<script>
import { queryGoodsList } from "@/common/api.js"
export default{
data(){
return{
pageNo:1,
pageSize:10,
list:[]
}
},
onLoad(options) {
this.onPageList()
},
onPullDownRefresh() {
let that = this
that.pageNo = 1
that.list = []
that.onPageList()
},
onReachBottom() {
let that = this
that.pageNo = that.pageNo + 1
that.onPageList()
},
methods:{
onDetail(event){
uni.navigateTo({
url:"/pages_subpack/detail/index?goodsId="+event.id
})
},
onApply(){
uni.navigateTo({
url:"/pages_subpack/release/index"
})
},
onPageList(){
let that = this
let params={
pageNo:that.pageNo,
pageSize:that.pageSize,
token:uni.getStorageSync('token')
}
queryGoodsList(params).then(response=>{
console.info("queryApplyList",response)
response.result.records.forEach((items,indexs)=>{
if(items.image){
items.images = items.image.split(',')
}else{
items.images = []
}
if(items.imageBack){
items.imageBacks = items.imageBack.split(',')
}else{
items.imageBacks = []
}
if(items.imageCab){
items.imageCabs = items.imageCab.split(',')
}else{
items.imageCabs = []
}
if(items.imageFront){
items.imageFronts = items.imageFront.split(',')
}else{
items.imageFronts = []
}
if(items.imageLeft){
items.imageLefts = items.imageLeft.split(',')
}else{
items.imageLefts = []
}
if(items.imageRight){
items.imageRights = items.imageRight.split(',')
}else{
items.imageRights = []
}
})
that.list = that.list.concat(response.result.records)
}).catch(error=>{
})
},
}
}
</script>
<style>
page{
background-color: #f5f5f5;
}
.items-box{
background: #ffffff;
border-radius: 8rpx;
box-shadow: 0rpx 4rpx 16rpx 0rpx rgba(0,0,0,0.05);
padding: 20rpx;
}
.se-tag{
padding: 5rpx 10rpx;
background: #fff2df;
border-radius: 4rpx;
border: 2rpx solid rgba(0,0,0,0.00);
font-size: 16rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: center;
color: #fab143;
margin-left: 10rpx;
}
.se-tag:first-child{
margin-left: 0rpx;
}
</style>

+ 157
- 0
pages_subpack/spare/index.vue View File

@ -0,0 +1,157 @@
<template>
<view class="se-h-vh-100 se-w-vw-100 se-flex">
<view class="se-w-vw-25 se-bgc-f5">
<view class="se-h-80 se-lh-80 se-tos-1 se-ta-c se-fs-24 se-c-black " @click="onItems(indexs,items)" :class="indexs==current?'se-bgc-white se-c-green':''" v-for="(items,indexs) in navList" :key="indexs">
<text>{{items.name}}</text>
</view>
</view>
<view class="se-w-vw-75 se-scroll-y">
<view class="se-grid-2 se-pt-10">
<view class="items-box se-br-5 se-px-10" v-for="(items,indexs) in list" :key="indexs" @click="onDetail(items)">
<image class="se-w-p-100 se-h-200 se-bgc-f5 se-br-5 se-py-5" :src="items.images[0]" mode=""></image>
<view class="se-c-black se-fs-24 se-fw-6 se-mt-10">
{{ items.goodsName }}
</view>
<!-- <view class="se-flex se-flex-ff-rw se-mt-10">
<view class="se-tag">
{{items.brand}}
</view>
<view class="se-tag">
{{items.goodsTime}}
</view>
<view class="se-tag">
{{items.mileage}}公里
</view>
</view> -->
<view class="se-flex se-flex-h-sb se-w-p-100 se-pt-20">
<view class="se-fs-24 se-display-ib">
<text class="se-c-orange se-fs-26 se-fw-6"><text class="se-fs-24"></text>{{items.price}}<text class="se-fs-24"></text><text class="se-fs-24" v-if="items.cartypeId=='1875536807086256130'">/</text></text>
</view>
</view>
</view>
</view>
<u-empty v-if="list && list.length==0" mode="list"></u-empty>
</view>
</view>
</template>
<script>
import { queryCategoryList,queryGoodsList } from "@/common/api.js"
export default {
data(){
return{
id:null,
categorytwoId:"",
current:0,
navList:[],
list:[],
pageNo:1,
pageSize:20
}
},
onLoad(options) {
this.id = options.id
this.onQueryCategoryTwoList()
},
methods:{
onItems(indexs,items){
this.current=indexs
this.categorytwoId = items.id
this.pageNo=1
this.onPageList()
},
onQueryCategoryTwoList(){
let that = this
let params = {
categoryOneId:that.id
}
queryCategoryList(params).then(response=>{
that.navList = response.result[0].carrentCategorytwoList
that.categorytwoId = response.result[0].carrentCategorytwoList[0].id
that.onPageList()
}).catch(error=>{
})
},
onPageList(){
let that = this
let params={
cartypeId:that.id,
categorytwoId:that.categorytwoId,
pageNo:that.pageNo,
pageSize:that.pageSize,
}
queryGoodsList(params).then((response) => {
console.info('queryGoodsList',response)
response.result.records.forEach((items,indexs)=>{
if(items.image){
items.images = items.image.split(',')
}else{
items.images = []
}
if(items.imageBack){
items.imageBacks = items.imageBack.split(',')
}else{
items.imageBacks = []
}
if(items.imageCab){
items.imageCabs = items.imageCab.split(',')
}else{
items.imageCabs = []
}
if(items.imageFront){
items.imageFronts = items.imageFront.split(',')
}else{
items.imageFronts = []
}
if(items.imageLeft){
items.imageLefts = items.imageLeft.split(',')
}else{
items.imageLefts = []
}
if(items.imageRight){
items.imageRights = items.imageRight.split(',')
}else{
items.imageRights = []
}
})
if(that.pageNo==1){
that.list = response.result.records
}else{
that.list = that.list.concat(response.result.records)
}
}).catch((error) =>{
})
},
onDetail(event){
uni.navigateTo({
url:"/pages_subpack/detail/index?goodsId="+event.id
})
}
}
}
</script>
<style>
.items-box{
background: #ffffff;
border-radius: 8rpx;
box-shadow: 0rpx 4rpx 16rpx 0rpx rgba(0,0,0,0.05);
padding: 20rpx;
}
.se-tag{
margin-right: 10rpx;
margin-top: 5px;
padding: 5rpx 10rpx;
background: #fff2df;
border-radius: 4rpx;
border: 2rpx solid rgba(0,0,0,0.00);
font-size: 16rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: center;
color: #fab143;
}
</style>

BIN
static/image/nav1.png View File

Before After
Width: 82  |  Height: 82  |  Size: 7.7 KiB

BIN
static/image/nav2.png View File

Before After
Width: 82  |  Height: 82  |  Size: 7.8 KiB

BIN
static/image/nav3.png View File

Before After
Width: 82  |  Height: 82  |  Size: 8.1 KiB

BIN
static/image/nav4.png View File

Before After
Width: 82  |  Height: 82  |  Size: 7.2 KiB

BIN
static/image/nav5.png View File

Before After
Width: 82  |  Height: 82  |  Size: 7.7 KiB

BIN
static/image/nav6.png View File

Before After
Width: 82  |  Height: 82  |  Size: 7.6 KiB

Loading…
Cancel
Save