Browse Source

1,对接接口

master
1263428893@qq.com 4 months ago
parent
commit
dd4ae37d1d
23 changed files with 1227 additions and 307 deletions
  1. +49
    -1
      common/api.js
  2. +2
    -2
      common/config.js
  3. +7
    -1
      manifest.json
  4. +15
    -6
      pages.json
  5. +71
    -20
      pages/auth/index.vue
  6. +73
    -16
      pages/home/index.vue
  7. +2
    -3
      pages/login/index.vue
  8. +105
    -58
      pages/reservation/index.vue
  9. +25
    -3
      pages/user/index.vue
  10. +80
    -9
      pages_subpack/apply/index.vue
  11. +101
    -0
      pages_subpack/apply/list.vue
  12. +40
    -14
      pages_subpack/business/index.vue
  13. +19
    -13
      pages_subpack/category/index.vue
  14. +102
    -22
      pages_subpack/detail/index.vue
  15. +19
    -4
      pages_subpack/news/detail.vue
  16. +36
    -5
      pages_subpack/news/index.vue
  17. +37
    -14
      pages_subpack/person/index.vue
  18. +354
    -66
      pages_subpack/release/index.vue
  19. +10
    -6
      pages_subpack/success/index.vue
  20. +29
    -7
      pages_subpack/version/index.vue
  21. +1
    -0
      util/qqmap-wx-jssdk.min.js
  22. +5
    -19
      util/request/requestInterceptors.js
  23. +45
    -18
      util/request/responseInterceptors.js

+ 49
- 1
common/api.js View File

@ -9,4 +9,52 @@ export const fetchMenu = (params, config = {}) => http.post('/ebapi/public_api/i
* 登录的接口
*/
// 微信登录接口
export const wxLogin = (params) => http.get('/api/login/login', {params:params})
export const wxLogin = (params) => http.get('/api/login/login', {params:params})
// 微信登录接口
export const appletLogin = (params) => http.get('/carrent-admin/api/login/login', {params:params})
// 用户信息
export const getInfo = (params) => http.post('/carrent-admin/api/user/queryUser', params)
// 用户注册
export const addUser = (params) => http.post('/carrent-admin/api/user/addUser', params)
// 企业注册
export const addCompany = (params) => http.post('/carrent-admin/api/company/addCompany', params)
// 商品信息-获取商品列表
export const queryGoodsList = (params) => http.get('/carrent-admin/api/goods/queryGoodsList', {params:params})
// 商品信息-根据id获取商品详情
export const queryGoodsById = (params) => http.get('/carrent-admin/api/goods/queryGoodsById', {params:params})
// 新闻资讯-获取新闻列表
export const queryNewsList = (params) => http.get('/carrent-admin/api/news/queryNewsList', {params:params})
// 新闻资讯-根据id获取新闻详情
export const queryNewsById = (params) => http.get('/carrent-admin/api/news/queryNewsById', {params:params})
// 寻车申请-添加申请
export const addApply = (params) => http.get('/carrent-admin/api/apply/addApply', {params:params})
// 寻车申请-申请列表
export const queryApplyList = (params) => http.get('/carrent-admin/api/apply/queryApplyList', {params:params})
// 配置信息-获取关于我们
export const queryAboutus = (params) => http.get('/carrent-admin/api/config/queryAboutus', {params:params})
// 配置信息-获取用户协议
export const queryAgreement = (params) => http.get('/carrent-admin/api/config/queryAgreement', {params:params})
// 配置信息-获取在线客服电话
export const queryPhone = (params) => http.get('/carrent-admin/api/config/queryPhone', {params:params})
// 配置信息-获取隐私政策
export const queryPrivacy = (params) => http.get('/carrent-admin/api/config/queryPrivacy', {params:params})
// 配置信息-获取商品类型列表
export const queryTypeList = (params) => http.get('/carrent-admin/api/config/queryTypeList', {params:params})
// 车辆预约-提交预约信息
export const addOrder = (params) => http.post('/carrent-admin/api/order/addOrder', params)
// 车辆预约-车辆预约列表
export const queryOrderList = (params) => http.get('/carrent-admin/api/order/queryOrderList', {params:params})
// 商品信息-车辆信息发布
export const addGoods = (params) => http.post('/carrent-admin/api/goods/addGoods', params)

+ 2
- 2
common/config.js View File

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

+ 7
- 1
manifest.json View File

@ -96,7 +96,13 @@
},
"quickapp" : {},
"mp-weixin" : {
"appid" : "wxecec2f505129f162",
"appid" : "wx1c95690b8180a150",
"permission" : {
"scope.userLocation" : {
"desc" : "将获取你的具体位置信息,用于帮助用户浏览所在位置的零活信息"
}
},
"requiredPrivateInfos" : [ "getLocation", "chooseLocation" ],
"setting" : {
"urlCheck" : false,
"es6" : false,


+ 15
- 6
pages.json View File

@ -1,18 +1,18 @@
{
"pages": [
{
"path": "pages/user/index",
"path": "pages/home/index",
"style": {
"navigationBarTitleText": "我的",
"navigationBarTitleText": "环卫车",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/home/index",
"path": "pages/user/index",
"style": {
"navigationBarTitleText": "环卫车",
"navigationBarTitleText": "我的",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
@ -58,10 +58,19 @@
{
"root": "pages_subpack",
"pages": [
{
"path": "apply/list",
"style": {
"navigationBarTitleText": "寻车列表",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "apply/index",
"style": {
"navigationBarTitleText": "我的寻车申请",
"navigationBarTitleText": "寻车申请",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
@ -70,7 +79,7 @@
{
"path": "category/index",
"style": {
"navigationBarTitleText": "新车商城",
"navigationBarTitleText": "分类",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"


+ 71
- 20
pages/auth/index.vue View File

@ -7,10 +7,14 @@
</view>
</view>
<view class="se-pb-200 se-pos-cb se-w-p-100">
<view @click="onLogin()" class="se-mx-80 se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-32 se-c-white se-bgc-green">
<!-- <view @click="onLogin()" class="se-mx-80 se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-32 se-c-white se-bgc-green">
<image class="se-w-45 se-h-35" src="@/static/image/wechat.png" mode=""></image>
<text class="se-ml-10">微信登录</text>
</view>
</view> -->
<button @getuserinfo="onLogin" open-type="getUserInfo" class="se-mx-80 se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-32 se-c-white se-bgc-green">
<image class="se-w-45 se-h-35" src="@/static/image/wechat.png" mode=""></image>
<text class="se-ml-10">微信登录</text>
</button>
<!-- <view class="se-mx-80 se-br-40 se-mt-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-32 se-c-66 se-bgc-f5">
<text>手机验证码登录</text>
</view> -->
@ -49,7 +53,7 @@
</template>
<script>
import { fetchMenu,wxLogin } from "@/common/api.js"
import { getInfo,appletLogin } from "@/common/api.js"
export default {
name : 'Auth',
data() {
@ -70,7 +74,8 @@
this.show=false;
this.checked=['1'];
},
onLogin(){
onLogin(event){
console.info(event)
let that = this
if(that.checked.length==0){
return uni.showToast({
@ -81,24 +86,70 @@
uni.showLoading({
title: '登录中...'
})
uni.navigateTo({
url:"/pages/login/index"
})
// uni.login({
// success(res) {
// console.info(res.code)
// if(res.errMsg != "login:ok"){
// return
// }
// wxLogin({ code : res.code }).then((response) => {
// uni.hideLoading()
// uni.setStorageSync('token', response.result.token)
// that.commit('setUserInfo',{userInfo:response.result.userInfo,token:response.result.token})
// }).catch(() =>{
uni.login({
success(res) {
console.info(res.code)
if(res.errMsg != "login:ok"){
return
}
let params={
code : res.code,
encryptedData: event.detail.encryptedData,
headimgurl:event.detail.userInfo.avatarUrl,
iv:event.detail.iv,
nickName:event.detail.userInfo.nickName,
session_key:"",
shareId:uni.getStorageSync('userId'),
vid:""
}
appletLogin(params).then((response) => {
console.info(`response`,response)
uni.hideLoading()
uni.setStorageSync('token', response.result.token)
uni.setStorageSync('sessionKey', response.result.userInfo.sessionKey)
uni.setStorageSync('userInfo', response.result.userInfo)
// that.commit('setUserInfo',{userInfo:response.result.userInfo,token:response.result.token})
getInfo({id:response.result.userInfo.id}).then(result=>{
// console.info('resultresult',result)
uni.navigateTo({
url:"/pages/login/index"
})
// if(result.result.nickName){
// uni.switchTab({
// url:"/pages/home/index"
// })
// }else{
// }
}).catch(err=>{
})
// })
// }
}).catch((error) =>{
})
}
})
// uni.navigateTo({
// url:"/pages/login/index"
// })
// // uni.login({
// // success(res) {
// // console.info(res.code)
// // if(res.errMsg != "login:ok"){
// // return
// // }
// // wxLogin({ code : res.code }).then((response) => {
// // uni.hideLoading()
// // uni.setStorageSync('token', response.result.token)
// // that.commit('setUserInfo',{userInfo:response.result.userInfo,token:response.result.token})
// // }).catch(() =>{
// // })
// // }
// // })
},
handleOpenPrivacyContract() {
//


+ 73
- 16
pages/home/index.vue View File

@ -25,7 +25,7 @@
</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;" :list="list" @click="swiperClick"></u-swiper>
<u-swiper height="300rpx" style="background-color: transparent;height: 300rpx;" :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>
@ -42,25 +42,22 @@
精品二手车
</view>
<view class="se-grid-2">
<view class="items-box se-br-5 se-px-10" v-for="(items,indexs) in 10" :key="indexs" @click="onDetail(items)">
<image class="se-w-p-100 se-h-200 se-py-5" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode=""></image>
<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-py-5" :src="items.image" mode=""></image>
<view class="se-c-black se-fs-24 se-fw-6 se-mt-10">
HOUS环卫车
{{ items.goodsName }}
</view>
<view class="se-flex se-mt-10">
<view class="se-tag">
品牌名
{{items.cartypeId_dictText}}
</view>
<view class="se-tag">
品牌名
</view>
<view class="se-tag">
品牌名
{{items.categorytwoId_dictText}}
</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>6000<text class="se-fs-24"></text></text>
<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>
</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>
@ -73,7 +70,8 @@
</template>
<script>
import { getInfo,queryGoodsList } from "@/common/api.js"
import QQMapWX from "@/util/qqmap-wx-jssdk.min.js"
export default{
components:{
@ -81,7 +79,7 @@
data(){
return {
city:"",
list: [
swiperList: [
"https://cdn.uviewui.com/uview/swiper/swiper1.png"
],
nav:[
@ -116,12 +114,32 @@
url:"/pages_subpack/category/index"
}
],
pageNo:1,
pageSize:10,
list:[]
}
},
mounted() {
onLoad(options) {
this.onPageList()
this.getLocation()
},
onPullDownRefresh() {
let that = this
that.pageNo = 1
that.list = []
that.onPageList()
},
onReachBottom() {
let that = this
that.pageNo = that.pageNo + 1
that.onPageList()
},
methods:{
onSearch(){
uni.navigateTo({
url:"/pages_subpack/category/index"
})
},
handleAreaChange(){
console.info("获取地址")
},
@ -130,9 +148,48 @@
},
onDetail(event){
uni.navigateTo({
url:"/pages_subpack/detail/index"
url:"/pages_subpack/detail/index?goodsId="+event.id
})
}
},
getLocation(){
const that = this;
wx.getLocation({
type: 'wgs84',
success: function (res) {
console.log('当前位置的经度:' + res.longitude);
console.log('当前位置的纬度:' + res.latitude);
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);
}
});
}
})
},
onPageList(){
let that = this
let params={
pageNo:that.pageNo,
pageSize:that.pageSize
}
queryGoodsList(params).then((response) => {
console.info('queryGoodsList',response)
that.list = that.list.concat(response.result.records)
}).catch((error) =>{
})
},
}
}


+ 2
- 3
pages/login/index.vue View File

@ -23,14 +23,13 @@
<input type="nickname" placeholder="请输入昵称" v-model="nameUser"
@blur="bindblur" class="se-h-80 se-lh-80 se-w-320 se-fs-24 se-ta-r" placeholder-class="se-fs-24 se-ta-r" />
</view>
<!-- <view class=" se-b-b se-flex se-h-140 se-lh-140 se-flex-h-sb">
<view class=" se-b-b se-flex se-h-140 se-lh-140 se-flex-h-sb">
<text>手机号</text>
<button v-if="phone" class="default-btn se-h-100 se-p-0 se-m-0" open-type="getPhoneNumber" @getphonenumber="onPhonenumber">{{phone}}</button>
<button v-else class="se-w-140 se-h-60 se-lh-60 se-fs-20 se-bgc-green se-c-white se-py-0 se-br-30 se-px-20 se-m-0" open-type="getPhoneNumber" @getphonenumber="onPhonenumber">
获取手机号
</button>
</view> -->
</view>
</view>
<view class="se-mx-40">
<view @click="onUpdateInfo" class="se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-32 se-c-white se-bgc-green">


+ 105
- 58
pages/reservation/index.vue View File

@ -1,82 +1,129 @@
<template>
<view>
<u-sticky bgColor="#ffffff">
<u-tabs :list="nav" :current="current" lineColor="#669A32" :activeStyle="{
<u-tabs :list="navList" :current="current" lineColor="#669A32" :activeStyle="{
color: '#669A32',
transform: 'scale(1.05)'
}" :scrollable="true" itemStyle="padding-left: 20rpx; padding-right: 20rpx;font-size:22rpx; height: 80rpx;"
@click="tabClick"></u-tabs>
</u-sticky>
<view class="se-p-40">
<view class="se-px-40 se-mb-30 se-py-30 se-bgc-white se-br-40 se-bs-b" v-for="(items,indexs) in 20"
:key="indexs">
<view class="se-flex se-flex-h-sb se-fw-6 se-fs-32 se-pb-20">
<view class="se-flex">
<text>环卫车租赁</text>
</view>
<view class="se-c-green se-fw-4">
已预约
</view>
</view>
<view class="se-flex">
<view class="se-w-160 se-h-160">
<image class="se-w-160 se-h-160 se-br-10" src="https://cdn.uviewui.com/uview/album/1.jpg"
mode=""></image>
<view v-if="list.length>0">
<view class="se-px-40 se-mb-30 se-py-30 se-bgc-white se-br-40 se-bs-b" v-for="(items,indexs) in list"
:key="indexs">
<view class="se-flex se-flex-h-sb se-fw-6 se-fs-32 se-pb-20">
<view class="se-flex">
<text>{{items.carrentGoods.goodsName}}</text>
</view>
<view class="se-c-green se-fw-4">
已预约
</view>
</view>
<view class="se-ml-20 se-flex se-flex-v-sa se-flex-ai-fs">
<view class="se-fw-6 se-c-black se-fs-30 se-display-ib">客户名称李先生</view>
<view class="se-fs-24 se-c-text-third se-display-ib">电话:1318969845</view>
<view class="se-fs-24 se-c-text-third se-display-ib">租赁地址:广东省广州市番禺区石桥镇</view>
<view class="se-flex">
<view class="se-w-160 se-h-160">
<image class="se-w-160 se-h-160 se-br-10" src="https://cdn.uviewui.com/uview/album/1.jpg"
mode=""></image>
</view>
<view class="se-ml-20 se-flex se-flex-v-sa se-flex-ai-fs">
<view class="se-fw-6 se-c-black se-fs-30 se-display-ib">客户名称{{items.name}}</view>
<view class="se-fs-24 se-c-text-third se-display-ib">电话{{items.phone}}</view>
<view class="se-fs-24 se-c-text-third se-display-ib">地址{{items.area}}</view>
</view>
</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"></view>
<view
class="se-display-ib se-px-20 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-bgc-green se-ta-c se-fs-24 se-fs-24 se-c-white se-b">
<text>电话联系</text>
<view class="se-flex se-flex-h-sb se-w-p-100 se-pt-20">
<view class="se-fs-24 se-display-ib"></view>
<view @click="onCustomerService(items.phone)"
class="se-display-ib se-px-20 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-bgc-green se-ta-c se-fs-24 se-fs-24 se-c-white se-b">
<text>电话联系</text>
</view>
</view>
</view>
</view>
<view v-else>
<u-empty mode="list" ></u-empty>
</view>
</view>
</view>
</template>
<script>
export default {
components: {
},
data() {
return {
current: 0,
nav: [{
name: '全部',
}, {
name: '新车',
}, {
name: '二手车'
}, {
name: '租赁车辆'
},
{
name: '环卫设备及配件'
}
],
list: [{},
{},
{},
{},
{},
{},
{},
{},
{},
]
import { queryOrderList,queryTypeList } from "@/common/api.js"
export default{
data(){
return{
navList:[],
current:0,
typeId:null,
pageNo:1,
pageSize:10,
list:[]
}
},
methods: {
tabClick(event) {
this.current = event.index
onLoad(options) {
this.onPageList()
this.onQueryTypeList()
},
onPullDownRefresh() {
let that = this
that.pageNo = 1
that.list = []
that.onPageList()
},
onReachBottom() {
let that = this
that.pageNo = that.pageNo + 1
that.onPageList()
},
methods:{
onQueryTypeList(){
queryTypeList({}).then(response=>{
console.info("queryTypeList",response)
let arr=[
{
name:"全部",
id:null,
}
];
this.navList = arr.concat(response.result.records)
}).catch(error=>{
})
},
tabClick(event){
this.typeId = event.id;
this.onPageList()
},
onPageList(){
let that = this
let params={
typeId:that.typeId,
pageNo:that.pageNo,
pageSize:that.pageSize
}
queryOrderList(params).then(response=>{
console.info("queryOrderList",response)
that.list = response.result.records
}).catch(error=>{
})
},
onCustomerService(phone){
let that = this
if (uni.canIUse('makePhoneCall')) {
uni.makePhoneCall({
phoneNumber: String(phone),
success: function () {
console.log('拨打电话成功');
},
fail: function () {
console.log('拨打电话失败');
}
});
} else {
console.log('你的设备不支持拨打电话功能');
}
}
}
}


+ 25
- 3
pages/user/index.vue View File

@ -95,13 +95,35 @@
</template>
<script>
import { getInfo,queryPhone } from "@/common/api.js"
export default {
data() {
return {
user:{},
phone:"",
}
},
onLoad() {
this.onUserInfo()
this.onQueryPhone()
},
methods: {
onUserInfo(){
let that = this
getInfo({id:uni.getStorageSync('userInfo').id}).then(response=>{
console.info('resultresult',response)
that.user = response.data
}).catch(err=>{
})
},
onQueryPhone(){
queryPhone({}).then(response=>{
this.phone = response.result.paramValue
}).catch(error=>{
})
},
onInvite(){
uni.navigateTo({
url:"/pages_subpack/invite/index"
@ -119,7 +141,7 @@
},
onApply(){
uni.navigateTo({
url:"/pages_subpack/apply/index"
url:"/pages_subpack/apply/list"
})
},
onSystem(){
@ -162,7 +184,7 @@
// let obj = that.$utils.getkeyContent('phone')
if (uni.canIUse('makePhoneCall')) {
uni.makePhoneCall({
phoneNumber: "13156957887", //
phoneNumber: String(that.phone),
success: function () {
console.log('拨打电话成功');
},


+ 80
- 9
pages_subpack/apply/index.vue View File

@ -1,14 +1,16 @@
<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">
<u--input v-model="form.type" placeholder="请填写类型"></u--input>
<u-form-item label="类型" prop="type" @click="showType=true">
<u--input border="bottom" v-model="form.type" disabled placeholder="请填写类型"></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
<u-form-item label="车辆型号" prop="model">
<u--input v-model="form.model" placeholder="请填写车辆型号"></u--input>
</u-form-item>
<u-form-item label="年限" prop="date">
<u--input v-model="form.date" placeholder="请填写年限"></u--input>
<u-form-item label="年限" prop="date" @click="showDate=true">
<u--input border="bottom" v-model="form.date" disabled placeholder="请填写年限"></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
<u-form-item label="公里数" prop="distance">
<u--input v-model="form.distance" placeholder="请填写公里数"></u--input>
@ -37,17 +39,40 @@
</u-form-item>
</u--form>
<u-action-sheet
:show="showType"
:actions="actions"
title="请选择类型"
@close="showType = false"
@select="typeSelect"
>
</u-action-sheet>
<u-datetime-picker
:show="showDate"
v-model="date"
mode="date"
@confirm="onConfirm"
@cancel="onCancel"
></u-datetime-picker>
</view>
</template>
<script>
import { queryTypeList,addApply } from "@/common/api.js"
export default {
components:{
},
data() {
return {
showDate:false,
showType:false,
actions: [],
date:Number(new Date()),
form: {
categorytwoId:"",//id
type:"",//
model:"",//
date:"",//
@ -118,21 +143,67 @@
}
},
onLoad(options) {
this.onQueryTypeList()
},
watch: {
},
methods: {
onCancel(){
this.showDate = false
},
onConfirm(e){
console.info('e',e)
const date = new Date(e.value);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
this.form.date = `${year}-${month}-${day}`;
this.showDate = false
},
typeSelect(event) {
console.info(event)
this.form.categorytwoId = event.id
this.form.type = event.name
},
onQueryTypeList(){
queryTypeList({}).then(response=>{
console.info("queryTypeList",response)
this.actions = response.result.records
}).catch(error=>{
})
},
onSubmit() {
this.$refs.uForm.validate().then(res => {
uni.$u.toast('校验通过')
this.onAddApply()
// uni.$u.toast('')
}).catch(errors => {
// uni.$u.toast('')
})
}
},
onAddApply(){
let that = this
let params={
categorytwoId:that.form.categorytwoId,
model:that.form.model,
carTime:that.form.date,
mileage:that.form.distance,
name:that.form.contacts,
phone:that.form.phone,
remark:that.form.remark
}
addApply(params).then(response=>{
uni.$u.toast(response.message)
setTimeout(()=>{
uni.navigateBack({
delta:1
})
},1500)
}).catch(error=>{
})
},
},
onReady() {
this.$refs.uForm.setRules(this.rules)


+ 101
- 0
pages_subpack/apply/list.vue View File

@ -0,0 +1,101 @@
<template>
<view class="se-p-40">
<view v-if="list.length>0">
<view class="se-px-40 se-mb-30 se-py-30 se-bgc-white se-br-40 se-bs-b" v-for="(items,indexs) in list"
:key="indexs">
<view class="se-flex">
<view class=" se-flex se-flex-v-sa se-flex-ai-fs">
<view class="se-fw-6 se-c-black se-fs-30 se-display-ib">车辆型号{{items.model}}</view>
<view class="se-fs-24 se-c-text-third se-display-ib">联系人:{{items.name}}</view>
<view class="se-fs-24 se-c-text-third se-display-ib">公里数:{{items.mileage}}</view>
<view class="se-fs-24 se-c-text-third se-display-ib">备注:{{items.remark}}</view>
</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"></view>
<view @click="onCustomerService(items.phone)"
class="se-display-ib se-px-20 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-bgc-green se-ta-c se-fs-24 se-fs-24 se-c-white se-b">
<text>电话联系</text>
</view>
</view>
</view>
</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 { queryApplyList } 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:{
onApply(){
uni.navigateTo({
url:"/pages_subpack/apply/index"
})
},
onPageList(){
let that = this
let params={
pageNo:that.pageNo,
pageSize:that.pageSize
}
queryApplyList(params).then(response=>{
console.info("queryApplyList",response)
that.list = response.result.records
}).catch(error=>{
})
},
onCustomerService(phone){
let that = this
// let obj = that.$utils.getkeyContent('phone')
if (uni.canIUse('makePhoneCall')) {
uni.makePhoneCall({
phoneNumber: String(phone),
success: function () {
console.log('拨打电话成功');
},
fail: function () {
console.log('拨打电话失败');
}
});
} else {
console.log('你的设备不支持拨打电话功能');
}
}
}
}
</script>
<style>
</style>

+ 40
- 14
pages_subpack/business/index.vue View File

@ -28,7 +28,7 @@
</view>
</view>
<view class="se-py-20 se-w-p-100">
<u-upload :fileList="fileList" @afterRead="afterRead" @delete="deletePic" name="1"
<u-upload :fileList="form.fileList" @afterRead="afterRead" @delete="deletePic" name="1"
multiple :maxCount="10"></u-upload>
</view>
</view>
@ -47,16 +47,24 @@
</view>
</template>
<script>
import { addCompany } from "@/common/api.js"
export default{
data(){
return{
form: {
name: '',
mobile: '',
company:'',
address:'',
fileList:[],
file: ''
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: [{
@ -102,8 +110,7 @@
}
},
watch: {
fileList(newValue, oldValue) {
'form.fileList'(newValue, oldValue) {
if (newValue.length > 0) {
this.form.file = '有'
} else {
@ -116,15 +123,34 @@
},
methods: {
submit() {
uni.switchTab({
url:"/pages/home/index"
})
this.$refs.uForm.validate().then(res => {
uni.$u.toast('校验通过')
let that = this;
that.$refs.uForm.validate().then(res => {
// uni.$u.toast('')
that.onAddCompany()
}).catch(errors => {
// uni.$u.toast('')
})
},
onAddCompany(){
let that = this
let params={
companyName:that.form.company,
userName:that.form.name,
phone:that.form.mobile,
address:that.form.address,
businessLicense:that.form.fileList.map(item => item.url).join(','),
}
addCompany(params).then(response=>{
uni.$u.toast(response.result)
setTimeout(()=>{
uni.switchTab({
url:"/pages/home/index"
})
},1500)
}).catch(error=>{
})
},
deletePic(event) {
this.form.fileList.splice(event.index, 1)
},


+ 19
- 13
pages_subpack/category/index.vue View File

@ -1,20 +1,26 @@
<template>
<view>
<view class="se-flex se-bgc-white se-fs-26 se-h-80 se-b-b">
<view class="se-flex-1 se-flex se-flex-h-c">
<text class="se-mr-10">分类</text>
<u-icon name="arrow-down-fill" color="#666666"></u-icon>
<view class="se-pos-fixed se-pos-lt se-w-p-100">
<view class="se-p-20" style="background: linear-gradient(168deg,#669a32 0%, #669a32 100%);">
<u-search @click="onSearch()" :showAction="false" bgColor="#fff" placeholder="搜索" v-model="keyword"></u-search>
</view>
<view class="se-flex-1 se-b-l se-b-r se-flex se-flex-h-c">
<text class="se-mr-10">时间</text>
<u-icon name="arrow-down-fill" color="#666666"></u-icon>
</view>
<view class="se-flex-1 se-flex se-flex-h-c">
<text class="se-mr-10">公里数</text>
<u-icon name="arrow-down-fill" color="#666666"></u-icon>
<view class="se-flex se-bgc-white se-fs-26 se-h-80 se-b-b">
<view class="se-flex-1 se-flex se-flex-h-c">
<text class="se-mr-10">分类</text>
<u-icon name="arrow-down-fill" color="#666666"></u-icon>
</view>
<view class="se-flex-1 se-b-l se-b-r se-flex se-flex-h-c">
<text class="se-mr-10">时间</text>
<u-icon name="arrow-down-fill" color="#666666"></u-icon>
</view>
<view class="se-flex-1 se-flex se-flex-h-c">
<text class="se-mr-10">公里数</text>
<u-icon name="arrow-down-fill" color="#666666"></u-icon>
</view>
</view>
</view>
<view class="se-grid-2">
<view class="se-grid-2 se-pt-200">
<view class="items-box se-br-5 se-px-10" v-for="(items,indexs) in 10" :key="indexs" @click="onDetail(items)">
<image class="se-w-p-100 se-h-200 se-py-5" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode=""></image>
<view class="se-c-black se-fs-24 se-fw-6 se-mt-10">
@ -49,7 +55,7 @@
export default{
data(){
return{
keyword:"",
}
},
methods:{


+ 102
- 22
pages_subpack/detail/index.vue View File

@ -6,14 +6,14 @@
<view class="se-py-20 se-flex se-bgc-white">
<view class="se-w-vw-90 se-pl-30">
<view class=" se-c-black se-fw-6 se-fs-32">
环卫车
{{detail.goodsName}}
</view>
<view class="se-display-ib se-c-red se-fs-32 se-br-8 se-px-10 se-py-5">
3600
{{detail.price}}
</view>
</view>
<view class="se-pr-30 se-flex se-flex-v-c">
<text>浏览量1000+</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>
@ -22,16 +22,14 @@
</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">阿萨德防守打法2水岸东方</text>
<text class="se-ml-10">{{detail.model}}</text>
</view>
<view class="se-pt-20">
<view class="se-p-20 se-c-black se-fs-28">
产品参数
</view>
<view>
<image class="se-w-p-100" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode="widthFix"></image>
<image class="se-w-p-100" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode="widthFix"></image>
<image class="se-w-p-100" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode="widthFix"></image>
<u-parse :content="detail.detail"></u-parse>
</view>
</view>
<view class="se-pos-fixed se-bgc-white se-b-ts se-w-vw-100 se-h-160" style="bottom: 0px;left: 0rpx;">
@ -52,20 +50,24 @@
</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-py-30">
<view class="se-bgc-white se-pt-40 se-pb-80">
<view class="se-px-40 se-py-20 se-c-black se-fs-30 se-fw-6">
预约租车
</view>
<view class="se-px-20 se-pb-20 se-mx-20 se-bgc-white se-br-20">
<u-form-item label="联系姓名" prop="name" borderBottom>
<u-form-item class="se-py-20" label="联系姓名" prop="name" borderBottom>
<u--input v-model="form.name" border="none" placeholder="请输入联系姓名"></u--input>
</u-form-item>
<u-form-item label="联系电话" prop="mobile" borderBottom>
<u-form-item class="se-py-20" label="联系电话" prop="mobile" borderBottom>
<u--input v-model="form.mobile" type="number" border="none" placeholder="请输入联系电话"></u--input>
</u-form-item>
<u-form-item label="所在地区" prop="address" borderBottom>
<u--input v-model="form.address" type="text" border="none" placeholder="请输入所在地区"></u--input>
<u-form-item label="所在地区" prop="area" @click="handleAreaChange()">
<u--input readonly v-model="form.address" placeholder="请选择地址" border="bottom"></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
<!-- <u-form-item class="se-py-20" label="所在地区" prop="address" borderBottom>
<u--input v-model="form.address" type="text" border="none" placeholder="请输入所在地区"></u--input>
</u-form-item> -->
<u-form-item>
<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">
@ -80,22 +82,25 @@
</template>
<script>
import { queryGoodsById,addOrder } from "@/common/api.js"
import QQMapWX from "@/util/qqmap-wx-jssdk.min.js"
export default{
data(){
return{
show:false,
list:[
'https://cdn.uviewui.com/uview/swiper/swiper1.png',
'https://cdn.uviewui.com/uview/swiper/swiper2.png',
'https://cdn.uviewui.com/uview/swiper/swiper3.png',
// 'https://cdn.uviewui.com/uview/swiper/swiper1.png',
// 'https://cdn.uviewui.com/uview/swiper/swiper2.png',
// 'https://cdn.uviewui.com/uview/swiper/swiper3.png',
],
form:{
name:"",
mobile:"",
address: ''
address: '',
latitude:"",
longitude:"",
},
rules:{
name: [
{
required: true,
@ -117,25 +122,68 @@
trigger: ['blur', 'change']
}
]
}
},
id:null,
detail:{}
}
},
onLoad(options) {
this.id = options.goodsId
this.onDetail()
},
methods:{
onDetail(){
let that = this
queryGoodsById({goodsId:that.id}).then(response=>{
console.info("queryGoodsById",response)
let items = response.result
if(items.image){
items.image.split(',').forEach(item=>{
that.list.push({
url: item,
type: 'image'
})
})
}
that.detail = items
}).catch(error=>{
})
},
submit() {
this.$refs.uForm.validate().then(res => {
uni.$u.toast('校验通过')
// uni.$u.toast('')
this.onAddOrder()
}).catch(errors => {
uni.$u.toast('校验失败')
})
},
onAddOrder(){
let that = this
let params ={
goodsId:that.detail.id,
area:that.form.address,
name:that.form.name,
phone:that.form.mobile,
typeId:that.detail.cartypeId
}
addOrder(params).then(response=>{
uni.$u.toast(response.message)
that.close()
uni.navigateTo({
url:"/pages_subpack/success/index"
})
}).catch(error=>{
})
},
onCustomerService(){
let that = this
// let obj = that.$utils.getkeyContent('phone')
if (uni.canIUse('makePhoneCall')) {
uni.makePhoneCall({
// phoneNumber: obj.keyContent, //
phoneNumber:"13189698115",
phoneNumber:String(that.detail.phone),
success: function () {
console.log('拨打电话成功');
},
@ -153,7 +201,39 @@
},
close() {
this.show = false
}
},
handleAreaChange(){
const that = this;
wx.chooseLocation({
// type: 'wgs84',
success: function (res) {
const qqmapsdk = new QQMapWX({
key: 'TT7BZ-Z3LW4-KOAUB-KWHOA-SBJJ6-Y5B6R' //
});
uni.showLoading({
title:"获取中...."
})
qqmapsdk.reverseGeocoder({
location: {
latitude: res.latitude,
longitude: res.longitude
},
success: function(response) {
console.log('逆地理编码结果:', response);
uni.hideLoading()
that.form.longitude = response.result.location.lng
that.form.latitude = response.result.location.lat
that.form.address = response.result.address
},
fail: function(error) {
uni.hideLoading()
console.error('逆地理编码失败:', error);
}
});
}
})
// this.$refs.citySelectRef.open()
},
}
}
</script>


+ 19
- 4
pages_subpack/news/detail.vue View File

@ -1,26 +1,41 @@
<template>
<view class="se-p-20">
<view class="se-c-black se-fw-6 se-fs-28">
我国将加快改善农村生活条件我国将加快改善农村生活条件我国将加快改善农村生活条件
{{detail.title}}
</view>
<view class="se-mt-20">
<image class="se-w-p-100" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode="widthFix"></image>
<u-parse :content="detail.content" :previewImg="true"></u-parse>
<!-- <image class="se-w-p-100" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode="widthFix"></image> -->
</view>
</view>
</template>
<script>
import { queryNewsById } from "@/common/api.js"
export default{
data(){
return{
id:null,
detail:{}
}
},
onLoad(options) {
this.id=options.id
this.onQueryNewsByDetail()
},
methods:{
onQueryNewsByDetail(){
queryNewsById({newsId:this.id}).then(response=>{
console.info('onQueryNewsByDetail',response)
this.detail = response.result
}).catch(error=>{
})
}
}
}
</script>
<style>
</style>

+ 36
- 5
pages_subpack/news/index.vue View File

@ -1,12 +1,13 @@
<template>
<view >
<view class="se-flex se-bgc-white se-m-20 se-p-20 se-br-20" v-for="(items,indexs) in 20" :key="indexs" @click="onDetail(items)">
<view class="se-flex se-bgc-white se-m-20 se-p-20 se-br-20" v-for="(items,indexs) in list" :key="indexs" @click="onDetail(items)">
<image class="se-w-240 se-h-180 se-br-20" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode=""></image>
<view class="se-flex se-flex-v se-flex-1 se-px-20">
<view class="se-c-black se-fw-6 se-fs-28 se-toe-1 se-pt-5">
我国将加快改善农村生活条件我国将加快改善农村生活条件我国将加快改善农村生活条件
{{items.title}}
</view>
<view class="se-c-33 se-fs-24 se-lh-40 se-toe-3 se-pt-10">
<!-- <u-parse :content="items.content"></u-parse> -->
我国将加快改善农村生活条件我国将加快改善农村生活条件我国将加快改善农村生活条件我国将加快改善农村生活条件我国将加快改善农村生活条件我国将加快改善农村生活条件
</view>
</view>
@ -15,18 +16,48 @@
</template>
<script>
import { queryNewsList } 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/news/detail"
url:"/pages_subpack/news/detail?id="+event.id
})
}
},
onPageList(){
let that = this
let params={
pageNo:that.pageNo,
pageSize:that.pageSize
}
queryNewsList(params).then((response) => {
console.info('queryNewsList',response)
that.list = that.list.concat(response.result.records)
}).catch((error) =>{
})
},
}
}
</script>


+ 37
- 14
pages_subpack/person/index.vue View File

@ -21,11 +21,11 @@
<view class="se-py-20 se-w-p-100 se-flex">
<view class="line-green"></view>
<view class="se-ml-10">
身份证上传()
身份证上传(正面)
</view>
</view>
<view class="se-py-20 se-w-p-100">
<u-upload :fileList="fileList" @afterRead="afterRead" @delete="deletePic" name="1"
<u-upload :fileList="form.fileList" @afterRead="afterRead" @delete="deletePic" name="1"
multiple :maxCount="10"></u-upload>
</view>
</view>
@ -44,16 +44,18 @@
</view>
</template>
<script>
import { addUser } from "@/common/api.js"
export default{
data(){
return{
fileList: [],
form: {
name: '',
idCard:'',
mobile: '',
file: ''
file: '',
fileList:[
]
},
rules: {
name: [{
@ -86,7 +88,7 @@
}
},
watch: {
fileList(newValue, oldValue) {
'form.fileList'(newValue, oldValue) {
if (newValue.length > 0) {
this.form.file = '有'
} else {
@ -99,23 +101,44 @@
},
methods: {
submit() {
uni.switchTab({
url:"/pages/home/index"
})
this.$refs.uForm.validate().then(res => {
uni.$u.toast('校验通过')
let that = this
that.$refs.uForm.validate().then(res => {
// uni.$u.toast('')
that.onAddUser()
}).catch(errors => {
// uni.$u.toast('')
console.info(errors)
uni.$u.toast('校验失败')
})
},
onAddUser(){
let that = this
let params={
cerImage:that.form.fileList.map(item => item.url).join(','),
cerNo:that.form.idCard,
id:uni.getStorageSync('userInfo').id,
name:that.form.name,
phone:that.form.mobile
}
addUser(params).then(response=>{
uni.$u.toast(response.result)
setTimeout(()=>{
uni.switchTab({
url:"/pages/home/index"
})
},1500)
}).catch(error=>{
})
},
deletePic(event) {
this.fileList.splice(e.index, 1)
this.form.fileList.splice(e.index, 1)
},
async afterRead(e) {
let self = this
e.file.forEach(file => {
self.$Oss.ossUpload(file.url).then(url => {
self.fileList.push({
self.form.fileList.push({
url
})
})


+ 354
- 66
pages_subpack/release/index.vue View File

@ -2,87 +2,115 @@
<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 labelWidth="0">
<view class="se-fs-26 se-c-black se-py-10">
<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 class="se-py-10 se-px-30 se-fs-22 se-br-10 se-mr-15 se-mt-10" :class="item.select ? 'se-bgc-green se-c-white se-b-green' : 'se-b se-c-text'" @click="handleType(index)" v-for="(item,index) in typeList" :key="index">
{{item.text}}
<view 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 actions" :key="index">
{{item.name}}
</view>
</view>
</u-form-item>
<u-form-item label="产品名称">
<u-form-item label="标题" prop="goodsName">
<view class="se-flex se-flex-h-c">
<u--input v-model="form.title" type="text" class="se-w-200" placeholder="请填写产品名称"></u--input>
<u--input v-model="form.goodsName" type="text" class="se-w-200" placeholder="请填写标题"></u--input>
</view>
</u-form-item>
<u-form-item label="区域" prop="area">
<u-form-item label="品牌" prop="brand">
<view class="se-flex se-flex-h-c">
<u--input v-model="form.brand" type="text" class="se-w-200" placeholder="请填写品牌"></u--input>
</view>
</u-form-item>
<u-form-item label="型号" prop="model">
<view class="se-flex se-flex-h-c">
<u--input v-model="form.model" type="text" class="se-w-200" placeholder="请填写型号"></u--input>
</view>
</u-form-item>
<u-form-item label="区域" prop="area" @click="handleAreaChange()">
<u--input readonly v-model="form.area" placeholder="请选择地址" border="bottom"></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
<u-form-item label="时间" prop="date">
<u--input v-model="form.date" placeholder="请填写时间"></u--input>
<u-form-item label="年限" prop="date" @click="showDate=true">
<u--input border="bottom" v-model="form.date" readonly placeholder="请填写年限"></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
<u-form-item label="公里数" prop="distance">
<u--input v-model="form.distance" placeholder="请填写时间"></u--input>
<u-form-item label="公里数" prop="mileage">
<u--input v-model="form.mileage" type="number" placeholder="请填写公里数"></u--input>
</u-form-item>
<u-form-item label="租赁价格" prop="price">
<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"></div>
</u-form-item>
<u-form-item label="库存" prop="inventory">
<u--input v-model="form.inventory" type="number" placeholder="请填写库存"></u--input>
</u-form-item>
<u-form-item label="联系人" prop="contacts">
<u--input v-model="form.contacts" placeholder="请填写联系人"></u--input>
</u-form-item>
<u-form-item label="联系人电话" prop="phone">
<u--input v-model="form.phone" placeholder="请填写电话"></u--input>
<u--input v-model="form.phone" type="number" placeholder="请填写电话"></u--input>
</u-form-item>
<u-form-item label="浏览量" prop="views">
<u--input v-model="form.views" placeholder="请填写浏览量"></u--input>
</u-form-item>
<u-form-item prop="fileCarList" labelWidth="0">
<view class="se-flex se-flex-v-sa">
<view class="se-py-20 se-w-p-100 se-flex">
车辆照片
</view>
<view class="se-py-20 se-w-p-100">
<u-upload :fileList="form.fileCarList" @afterRead="afterCarFront" @delete="delCarFront" multiple :maxCount="5"></u-upload>
</view>
</view>
</u-form-item>
<u-form-item prop="file" labelWidth="0">
<u-form-item prop="fileFrontList" labelWidth="0">
<view class="se-flex se-flex-v-sa">
<view class="se-py-20 se-w-p-100 se-flex">
车辆照片()
</view>
<view class="se-py-20 se-w-p-100">
<u-upload :fileList="form.fileFrontList" @afterRead="afterFront" @delete="delFront" :maxCount="1"></u-upload>
<u-upload :fileList="form.fileFrontList" @afterRead="afterFront" @delete="delFront" multiple :maxCount="5"></u-upload>
</view>
</view>
</u-form-item>
<u-form-item prop="file" labelWidth="0">
<u-form-item prop="fileBackList" labelWidth="0">
<view class="se-flex se-flex-v-sa">
<view class="se-py-20 se-w-p-100 se-flex">
车辆照片()
</view>
<view class="se-py-20 se-w-p-100">
<u-upload :fileList="form.fileBackList" @afterRead="afterBack" @delete="delBack" :maxCount="1"></u-upload>
<u-upload :fileList="form.fileBackList" @afterRead="afterBack" @delete="delBack" multiple :maxCount="5"></u-upload>
</view>
</view>
</u-form-item>
<u-form-item prop="file" labelWidth="0">
<u-form-item prop="fileLeftList" labelWidth="0">
<view class="se-flex se-flex-v-sa">
<view class="se-py-20 se-w-p-100 se-flex">
车辆照片()
</view>
<view class="se-py-20 se-w-p-100">
<u-upload :fileList="form.fileLeftList" @afterRead="afterLeft" @delete="delLeft" :maxCount="1"></u-upload>
<u-upload :fileList="form.fileLeftList" @afterRead="afterLeft" @delete="delLeft" multiple :maxCount="5"></u-upload>
</view>
</view>
</u-form-item>
<u-form-item prop="file" labelWidth="0">
<u-form-item prop="fileRightList" labelWidth="0">
<view class="se-flex se-flex-v-sa">
<view class="se-py-20 se-w-p-100 se-flex">
车辆照片()
</view>
<view class="se-py-20 se-w-p-100">
<u-upload :fileList="form.fileRightList" @afterRead="afterRight" @delete="delRight" :maxCount="1"></u-upload>
<u-upload :fileList="form.fileRightList" @afterRead="afterRight" @delete="delRight" multiple :maxCount="5"></u-upload>
</view>
</view>
</u-form-item>
<u-form-item prop="file" labelWidth="0">
<u-form-item prop="fileCabList" labelWidth="0">
<view class="se-flex se-flex-v-sa">
<view class="se-py-20 se-w-p-100 se-flex">
车辆照片(驾驶室)
</view>
<view class="se-py-20 se-w-p-100">
<u-upload :fileList="form.fileCabList" @afterRead="afterCab" @delete="delCab" :maxCount="1"></u-upload>
<u-upload :fileList="form.fileCabList" @afterRead="afterCab" @delete="delCab" multiple :maxCount="5"></u-upload>
</view>
</view>
</u-form-item>
@ -102,55 +130,121 @@
</u-form-item>
</u--form>
<u-datetime-picker
:show="showDate"
v-model="date"
mode="date"
@confirm="onConfirm"
@cancel="onCancel"
></u-datetime-picker>
</view>
</template>
<script>
import { queryTypeList,addGoods } from "@/common/api.js"
import QQMapWX from "@/util/qqmap-wx-jssdk.min.js"
export default {
components:{
},
data() {
return {
typeList:[
{
text:"新车",
value:"xin",
select:true
},
{
text:"二手车",
value:"ershouche",
select:false
},
{
text:"租赁车辆",
value:"all",
select:false
}
],
actions:[],
showType:false,
showDate:false,
date:Number(new Date()),
form: {
title:"",//
area:"",//
cartypeId:"",
goodsName:"驾驶式扫地机",//
brand:"大众",//
model:"朗逸",//
area:"湖南省长沙市岳麓区含光路658号",//
latitude:"28.23586",
longitude:"112.931496",
address:'',
date:"",//
distance:"",//
price:"",//
contacts:"",//
phone:"",//
fileFrontList:[],//
fileBackList:[],//
fileLeftList:[],//
fileRightList:[],//
fileCabList:[],//
introduce:"",//
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皮卡跑车等
价格区间可选项适用于市场推广`,//车辆介绍
},
rules: {
title:[
goodsName:[
{
type: 'string',
required: true,
message: '请填写产品名称',
message: '请填写标题',
trigger: ['blur', 'change']
}
],
brand:[
{
type: 'string',
required: true,
message: '请填写品牌',
trigger: ['blur', 'change']
}
],
model:[
{
type: 'string',
required: true,
message: '请填写型号',
trigger: ['blur', 'change']
}
],
@ -170,7 +264,7 @@
trigger: ['blur', 'change']
}
],
distance:[
mileage:[
{
type: 'string',
required: true,
@ -186,6 +280,14 @@
trigger: ['blur', 'change']
}
],
inventory:[
{
type: 'string',
required: true,
message: '请填写库存',
trigger: ['blur', 'change']
}
],
contacts:[
{
type: 'string',
@ -202,21 +304,167 @@
trigger: ['blur', 'change']
}
],
views:[
{
type: 'string',
required: true,
message: '请填写浏览量',
trigger: ['blur', 'change']
}
],
fileCarList:[
{
validator: (rule, value, callback) => {
if (value === null || value === undefined || value === '' || (Array.isArray(value) && value.length === 0)) {
callback(new Error('照片不能为空'));
} else {
callback();
}
},
trigger: 'blur'
}
],
fileFrontList:[
{
validator: (rule, value, callback) => {
if (value === null || value === undefined || value === '' || (Array.isArray(value) && value.length === 0)) {
callback(new Error('照片不能为空'));
} else {
callback();
}
},
trigger: 'blur'
}
],
fileBackList:[
{
validator: (rule, value, callback) => {
if (value === null || value === undefined || value === '' || (Array.isArray(value) && value.length === 0)) {
callback(new Error('照片不能为空'));
} else {
callback();
}
},
trigger: 'blur'
}
],
fileLeftList:[
{
validator: (rule, value, callback) => {
if (value === null || value === undefined || value === '' || (Array.isArray(value) && value.length === 0)) {
callback(new Error('照片不能为空'));
} else {
callback();
}
},
trigger: 'blur'
}
],
fileRightList:[
{
validator: (rule, value, callback) => {
if (value === null || value === undefined || value === '' || (Array.isArray(value) && value.length === 0)) {
callback(new Error('照片不能为空'));
} else {
callback();
}
},
trigger: 'blur'
}
],
fileCabList:[
{
validator: (rule, value, callback) => {
if (value === null || value === undefined || value === '' || (Array.isArray(value) && value.length === 0)) {
callback(new Error('照片不能为空'));
} else {
callback();
}
},
trigger: 'blur'
}
],
}
}
},
onLoad(options) {
this.onQueryTypeList()
},
watch: {
},
methods: {
handleType(index){
this.typeList.forEach(items=>{
items.select = false
onQueryTypeList(){
queryTypeList({}).then(response=>{
console.info("queryTypeList",response)
this.actions = response.result.records
this.form.cartypeId = response.result.records[0].id
}).catch(error=>{
})
},
onCancel(){
this.showDate = false
},
onConfirm(e){
console.info('e',e)
const date = new Date(e.value);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
this.form.date = `${year}-${month}-${day}`;
this.showDate = false
},
handleAreaChange(){
const that = this;
wx.chooseLocation({
// type: 'wgs84',
success: function (res) {
const qqmapsdk = new QQMapWX({
key: 'TT7BZ-Z3LW4-KOAUB-KWHOA-SBJJ6-Y5B6R' //
});
uni.showLoading({
title:"获取中...."
})
qqmapsdk.reverseGeocoder({
location: {
latitude: res.latitude,
longitude: res.longitude
},
success: function(response) {
console.log('逆地理编码结果:', response);
uni.hideLoading()
that.form.longitude = response.result.location.lng
that.form.latitude = response.result.location.lat
that.form.area = response.result.address
},
fail: function(error) {
uni.hideLoading()
console.error('逆地理编码失败:', error);
}
});
}
})
// this.$refs.citySelectRef.open()
},
handleCartype(event){
this.form.cartypeId = event.id
},
//
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 => {
self.form.fileCarList.push({
url
})
})
})
this.typeList[index].select = !this.typeList[index].select
},
//
delFront(event) {
@ -289,15 +537,55 @@
})
},
onSubmit() {
console.info(this.form)
uni.navigateTo({
url:"/pages_subpack/success/index"
})
// console.info(this.form)
// uni.navigateTo({
// url:"/pages_subpack/success/index"
// })
this.$refs.uForm.validate().then(res => {
uni.$u.toast('校验通过')
// uni.$u.toast('')
this.onAddGoods()
}).catch(errors => {
console.info(errors)
// uni.$u.toast('')
})
},
onAddGoods(){
let that = this
let params={
cartypeId:that.form.cartypeId,
// categorytwoId:"1867040891523936258",
goodsName:that.form.goodsName,//
brand:that.form.brand,//
model:that.form.model,//
area:that.form.area,//
latitude:that.form.latitude,
longitude:that.form.longitude,
goodsTime:that.form.date,//
inventory:that.form.inventory,//
mileage:that.form.mileage,//
userName:that.form.contacts,//
phone:that.form.phone,//
price:that.form.price,//
views:that.form.views,//
image:that.form.fileCarList.map(item => item.url).join(','),//
imageBack:that.form.fileBackList.map(item => item.url).join(','),//()
imageCab:that.form.fileCabList.map(item => item.url).join(','),//()
imageFront:that.form.fileFrontList.map(item => item.url).join(','),//()
imageLeft:that.form.fileLeftList.map(item => item.url).join(','),//()
imageRight:that.form.fileRightList.map(item => item.url).join(','),//()
detail:that.form.introduce,//
}
addGoods(params).then(response=>{
console.info('response',response)
uni.showToast({
title: response.message,
mask: false,
icon: 'none',
duration: 2000
})
}).catch(error=>{
})
}
},
onReady() {


+ 10
- 6
pages_subpack/success/index.vue View File

@ -3,14 +3,18 @@
<view class="se-flex se-flex-v-sa se-pt-140">
<u-icon name="checkmark-circle-fill" color="#31a836" size="50"></u-icon>
<view class="se-c-black se-fw-6 se-fs-32 se-ta-c se-mt-20">
发布成功
预约成功
</view>
</view>
<view class="se-px-40 se-mt-140">
<view class="se-px-20 se-pb-80 se-fs-20 se-flex">
<view @click="onOrderDetail()"
<view class="se-px-20 se-pb-80 se-fs-20 se-flex se-flex-v">
<view @click="onReservation()"
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 @click="onCancel()"
class="se-mx-10 se-mt-60 se-flex-1 se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-28 se-c-66 se-b">
<text>取消</text>
</view>
</view>
</view>
@ -25,9 +29,9 @@
}
},
methods:{
onOrderDetail(){
onReservation(){
uni.navigateTo({
url:"/pages_subpack/order-detail/index"
url:"/pages/reservation/index"
})
},
onCancel(){


+ 29
- 7
pages_subpack/version/index.vue View File

@ -2,16 +2,38 @@
<view>
<view class="se-flex se-flex-v-c se-pt-180">
<image class="se-a-150" src="@/static/image/logo.png" mode=""></image>
<text class="se-c-black se-fs-28 se-pt-30">8.12.1</text>
<text class="se-c-black se-fs-28 se-pt-30">{{paramValue}}</text>
</view>
</view>
</template>
<script>
export default{
}
</script>
import { queryAboutus } from "@/common/api.js"
<style>
</style>
export default {
data(){
return{
paramValue:"",
}
},
watch: {
},
onLoad() {
this.onqueryAboutus()
},
methods:{
onClick(index){
console.info(index)
},
onqueryAboutus(){
queryAboutus({}).then(response=>{
console.info("queryAboutus",response)
this.paramValue = response.result.paramValue
}).catch(error=>{
})
}
}
}
</script>

+ 1
- 0
util/qqmap-wx-jssdk.min.js
File diff suppressed because it is too large
View File


+ 5
- 19
util/request/requestInterceptors.js View File

@ -3,26 +3,12 @@
* @param {Object} http
*/
module.exports = (vm) => {
// uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
// // 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
// config.data = config.data || {}
// // 可以在此通过vm引用vuex中的变量,具体值在vm.$store.state中
// // console.log(vm.$store.state);
// return config
// }, (config) => // 可使用async await 做异步操作
// Promise.reject(config))
// 请求拦截
uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
// 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
uni.$u.http.interceptors.request.use((config) => {
config.data = config.data || {}
// 根据custom参数中配置的是否需要token,添加对应的请求头
if(config?.custom?.auth) {
// 可以在此通过vm引用vuex中的变量,具体值在vm.$store.state中
config.header.token = vm.$store.state.user.token
}
return config
}, config => { // 可使用async await 做异步操作
config.header['X-Access-Token'] = uni.getStorageSync('token');
config.header['Content-Type'] = 'application/x-www-form-urlencoded'
return config
}, config => {
return Promise.reject(config)
})
}


+ 45
- 18
util/request/responseInterceptors.js View File

@ -6,26 +6,53 @@ module.exports = (vm) => {
// 响应拦截
uni.$u.http.interceptors.response.use((response) => { /* 对响应成功做点什么 可使用async await 做异步操作*/
const data = response.data
// 自定义参数
const custom = response.config?.custom
if (data.code !== 200) {
// 如果没有显式定义custom的toast参数为false的话,默认对报错进行toast弹出提示
if (custom.toast !== false) {
uni.$u.toast(data.message)
}
// 如果需要catch返回,则进行reject
if (custom?.catch) {
return Promise.reject(data)
} else {
// 否则返回一个pending中的promise,请求不会进入catch中
return new Promise(() => { })
}
console.info('interceptorsresponse',data)
if (data.code == 200) {
return Promise.resolve(data);
}else if(data.code === 401){
uni.showToast({
icon:"none",
title:data.message
})
uni.removeStorageSync('token')
uni.removeStorageSync('userInfo')
uni.removeStorageSync('sessionKey')
uni.navigateTo({
url:"/pages/auth/index"
})
return;
}else if(data.code === 500 && (data.message == '操作失败,token非法无效!' || data.message == '操作失败,用户不存在!')){
uni.$u.toast(data.message)
uni.showToast({
icon:"none",
title:data.message
})
uni.removeStorageSync('token')
uni.removeStorageSync('userInfo')
uni.removeStorageSync('sessionKey')
uni.navigateTo({
url:"/pages/auth/index"
})
return;
}else{
uni.showToast({
icon:"none",
title:data.message
})
return Promise.reject(data)
}
return data.data === undefined ? {} : data.data
}, (response) => {
// 对响应错误做点什么 (statusCode !== 200)
const data = response.data
console.info('responseresponse',data)
if(data.code === 401){
uni.removeStorageSync('token')
uni.removeStorageSync('userInfo')
uni.removeStorageSync('sessionKey')
uni.navigateTo({
url:"/pages/auth/index"
})
return;
}
return Promise.reject(response)
})
}

Loading…
Cancel
Save