首次完整推送,

V:1.20240808.006
This commit is contained in:
fm453
2024-08-13 18:32:37 +08:00
parent 15be3e9373
commit c62d15b288
939 changed files with 111777 additions and 0 deletions

13
apis/ctms/_utils/auth.js Normal file
View File

@ -0,0 +1,13 @@
const TokenKey = 'CTMS-CLIENT-Token'
export function getToken() {
return uni.getStorageSync(TokenKey)
}
export function setToken(token) {
return uni.setStorageSync(TokenKey, token)
}
export function removeToken() {
return uni.removeStorageSync(TokenKey)
}

View File

@ -0,0 +1,55 @@
//缓存变量的键名
const constant = {
storageKey: 'ctmsClientStore', //缓存键名,必须有
user: 'userinfo', //用户信息
orderBookForm: {
'prefix': 'OrderBookDraft'
}, //运单询价草稿
orderBookSearch: "OrderBookSearch", //询价订单查询表单
orderBookList: {
'prefix': "OrderBookList"
}, //询价缓存,
orderBookDetail: {
'prefix': "OrderBookDetail"
}, //询价单详情拼接oid订单ID参数
orderCreateForm: {
'prefix': 'OrderCreateDraft'
}, //运单创建草稿
orderSearchS: 'OrderSearchSimple', //简单运单查询表单
orderSearchA: "OrderSearchAll", //完整运单查询表单
orderList: {
'prefix': "OrderList"
}, //运单缓存,根据页面情况拼接参数;重新查询时应及时更新
orderDetail: {
'prefix': "OrderDetail"
}, //运单详情拼接oid订单ID参数
orderCheck: {
'prefix': "OrderCheckInfo"
}, //运单详情拼接oid订单ID参数
noticeList: {
'prefix': "NoticeList"
},
noticeDetail: {
'prefix': "NoticeDetail"
},
newsList: {
'prefix': "NewsList"
},
newsDetail: {
'prefix': "NewsDetail"
},
newsReading: "NewsReading",
newsLiked: "NewsLiked",
newsViewed: "NewsViewed",
userLoginForm: "fansLoginForm",
userRegForm: "fansRegForm",
splashShowed: "splashShowed" //已显示过开屏页
}
export default constant

View File

@ -0,0 +1,10 @@
{
"0": "没有符合条件的数据",
"100": "",
"101": "",
"401": "认证失败,无法访问系统资源",
"403": "当前操作没有权限",
"404": "访问资源不存在",
"500": "网络服务出错",
"default": "系统未知错误,请反馈给管理员"
}

113
apis/ctms/_utils/request.js Normal file
View File

@ -0,0 +1,113 @@
import store from '@/store'
import config from '@/config/ctms.config.js'
import {
getToken
} from './auth.js'
import errorCode from './errorCode.json'
import utils from '@/utils/common.js'
const tansParams = utils.tansParams;
const timeout = 10000
const loginPage = config.loginPage
const request = function(param) {
utils.debug(param);
//url每次request请求都需要重新组织
let url = config.apiUrl;
url = url + config.url_entry + param.url + '.' + config.url_suffix;
if (param.force_url) {
url = param.force_url;
}
// get请求映射params参数
if (param.params) {
url = url + '?' + tansParams(param.params)
url = url.slice(0, -1)
}
// 是否需要设置 token
const isToken = (param.headers || {}).isToken === false
config.header = param.headers || {} //TODO,未成功使用
if (getToken() && !isToken) {
config.header['Authorization'] = 'hi-ctms-client ' + getToken()
}
let postdata = param.data || {};
postdata.pid = config.pid || 0;
var user = store.state.user;
postdata.uid = user.info.id || 0;
return new Promise((resolve, reject) => {
uni.request({
method: param.method || 'GET',
timeout: param.timeout || timeout,
url: url,
data: postdata,
header: config.header,
dataType: param.dataType || 'json',
success: function(res) {
// utils.debug(res);
if (res.statusCode === 200) {
//请求成功
const code = res.data.code || 0
//只有0200这两种状态码可以返回数据以便下一步操作其他状态码无法进入到下一步
const msg = res.data.msg || errorCode[code] || errorCode['default']
switch (code) {
default:
resolve(false);
if (getApp().globalData.config.isDebug) {
reject(msg) //调试台显示错误提示
}
break;
case 401:
utils.showConfirm('登录状态已过期,您可以继续留在该页面,或者重新登录').then(res => {
if (res.confirm) {
store.dispatch('LogOut').then(res => {
uni.reLaunch({
url: loginPage
})
})
}
})
reject('无效的会话,或者会话已过期,请重新登录。')
break;
case 100:
case 101:
resolve(false);
uni.showToast({
title: msg,
icon: "error"
});
break;
case 0:
case 200:
resolve(res.data) //返回的只是数据
break;
}
} else if (res.statusCode === 500) {
reject('500')
} else {
reject(res.statusCode)
}
},
fail: (error) => {
let {
errMsg
} = error, message = ""
if (errMsg == 'request:fail') {
message = '云端连接异常'
} else if (errMsg == 'Network Error') {
message = '后端接口连接异常'
} else if (errMsg.includes('timeout')) {
message = '系统接口请求超时'
} else if (errMsg.includes('Request failed with status code')) {
message = '系统接口' + message.substr(message.length - 3) + '异常'
}
reject(message)
}
})
})
}
export default request

View File

@ -0,0 +1,95 @@
import constant from './constant'
// 存储变量名前缀
let storageKey = constant.storageKey;
const storage = {
init: function(key) {
if (key === storageKey) {
return false;
}
if (typeof key === 'string') {
return key;
} else if (typeof key === 'object') {
return key['prefix'];
}
},
set: function(key, value, params = null) {
var _key = this.init(key);
// console.log('比较两个KEY', key, _key)
if (!_key) {
return;
}
let tmp = uni.getStorageSync(storageKey)
tmp = tmp ? tmp : {}
if (_key === key) {
tmp[key] = value;
} else {
tmp[_key] = tmp[_key] || {};
if (params === null || params === 'undefined') {
//不加params参数则将该项原有数据全部抹除后写入新value作为对象唯一的一个值
//只有在明确设置了为null 或者 undifined才是
//注意已知问题参数object的键名不允许是负数
tmp[_key] = {
0: value
};
} else {
//添加参数,则为指定覆盖方式,对其他项不产生影响
tmp[_key][params] = value;
}
}
uni.setStorageSync(storageKey, tmp)
},
get: function(key, params = null) {
var _key = this.init(key);
if (!_key) {
return false;
}
let tmp = uni.getStorageSync(storageKey)
tmp = tmp ? tmp : {}
if (_key === key) {
return tmp[key] || "";
} else {
return (tmp[_key] ? (tmp[_key][params] || "") : "");
}
},
all: function(key) {
//获取指定键的全部缓存
var _key = this.init(key);
if (!_key) {
return false;
}
let tmp = uni.getStorageSync(storageKey)
tmp = tmp ? tmp : {}
if (_key === key) {
return tmp[key] || "";
} else {
return tmp[_key] || [];
}
},
remove: function(key, params = null) {
var _key = this.init(key);
if (!_key) {
return;
}
let tmp = uni.getStorageSync(storageKey)
tmp = tmp ? tmp : {}
if (_key === key) {
delete tmp[key];
} else {
delete tmp[_key][params];
}
uni.setStorageSync(storageKey, tmp)
},
clean: function() {
uni.removeStorageSync(storageKey)
},
info: function() {
//返回当前缓存情况 https://uniapp.dcloud.net.cn/api/storage/storage.html#getstorageinfo
//currentSize 当前占用空间 kb; keys所有缓存键key
return uni.getStorageInfoSync(); //只能获取全部无法指定key
}
}
export default storage

113
apis/ctms/_utils/upload.js Normal file
View File

@ -0,0 +1,113 @@
import store from '@/store'
import config from '@/config/ctms.config.js'
import {
getToken
} from './auth.js'
import errorCode from './errorCode.json'
import utils from '@/utils/common.js'
const tansParams = utils.tansParams;
const timeout = 10000
const loginPage = config.loginPage
const request = function(param) {
utils.debug(param);
//url每次request请求都需要重新组织
let url = config.apiUrl;
url = url + config.url_entry + param.url + '.' + config.url_suffix;
if (param.force_url) {
url = param.force_url;
}
// get请求映射params参数
if (param.params) {
url = url + '?' + tansParams(param.params)
url = url.slice(0, -1)
}
// 是否需要设置 token
const isToken = (param.headers || {}).isToken === false
config.header = param.headers || {} //TODO,未成功使用
if (getToken() && !isToken) {
config.header['Authorization'] = 'hi-ctms-client ' + getToken()
}
let postdata = param.data || {};
postdata.pid = config.pid || 0;
var user = store.state.user;
postdata.uid = user.info.id || 0;
return new Promise((resolve, reject) => {
uni.request({
method: param.method || 'GET',
timeout: param.timeout || timeout,
url: url,
data: postdata,
header: config.header,
dataType: param.dataType || 'json',
success: function(res) {
// utils.debug(res);
if (res.statusCode === 200) {
//请求成功
const code = res.data.code || 0
//只有0200这两种状态码可以返回数据以便下一步操作其他状态码无法进入到下一步
const msg = res.data.msg || errorCode[code] || errorCode['default']
switch (code) {
default:
resolve(false);
if (getApp().globalData.config.isDebug) {
reject(msg) //调试台显示错误提示
}
break;
case 401:
utils.showConfirm('登录状态已过期,您可以继续留在该页面,或者重新登录').then(res => {
if (res.confirm) {
store.dispatch('LogOut').then(res => {
uni.reLaunch({
url: loginPage
})
})
}
})
reject('无效的会话,或者会话已过期,请重新登录。')
break;
case 100:
case 101:
resolve(false);
uni.showToast({
title: msg,
icon: "error"
});
break;
case 0:
case 200:
resolve(res.data) //返回的只是数据
break;
}
} else if (res.statusCode === 500) {
reject('500')
} else {
reject(res.statusCode)
}
},
fail: (error) => {
let {
errMsg
} = error, message = ""
if (errMsg == 'request:fail') {
message = '云端连接异常'
} else if (errMsg == 'Network Error') {
message = '后端接口连接异常'
} else if (errMsg.includes('timeout')) {
message = '系统接口请求超时'
} else if (errMsg.includes('Request failed with status code')) {
message = '系统接口' + message.substr(message.length - 3) + '异常'
}
reject(message)
}
})
})
}
export default request

29
apis/ctms/ads.js Normal file
View File

@ -0,0 +1,29 @@
import request from './_utils/request.js'
import apis from './apis.json'
export default {
// 开屏广告
splash: function() {
const data = {}
let url = apis.AdsSplash;
return request({
'url': url,
// 'force_url': '', //强制指定URL忽略上面的url设定
'method': 'GET',
'data': data,
'params': {}
}).then((res) => {
if (res.code == 200) return res.data;
})
},
// BANNER
banner: function() {
let url = apis.AdsBanner;
return request({
'url': url,
'method': 'GET'
}).then((res) => {
if (res.code == 200) return res.data;
})
}
}

53
apis/ctms/apis copy.json Normal file
View File

@ -0,0 +1,53 @@
/**/
{
"index": "/index/index",
"IndexData": "/index/h5data",
"AdsSplash": "/index/ads-splash",
"AdsBanner": "/index/ads-banner",
"OrderSearch": "/order/list",
"OrderSearchToday": "/order/today",
"OrderSearchYesterday": "/order/yesterday",
"OrderSearchFuture": "/order/futrue",
"OrderSearchWeek": "/order/week",
"OrderSearchPreWeek": "/order/preweek",
"OrderSearchMonth": "/order/month",
"OrderSearchPreMonth": "/order/premonth",
"OrderSearchDongbei": "/order/dongbei", //东三省
"OrderSearchArea1": "/order/area1", //京津冀
"OrderSearchArea2": "/order/area2", //川渝云贵
"OrderSearchArea3": "/order/area3", //江浙沪
"OrderSearchNocheck": "/order/nocheck", //待验车
"OrderSearchMine": "/order/mine", //指派我的或我创建的
"OrderSearchTonghang": "/order/tonghang", //同行运单
"OrderDetail": "/order/detail",
"OrderCreate": "/order/create",
"OrderCheck": "/ordercheck/basic",
"JiaocheSearch": "/jiaoche/list",
"JiaocheDetail": "/jiaoche/detail",
"JiaocheCreate": "/jiaoche/create",
"BookSearch": "/orderpre/list",
"BookDetail": "/orderpre/detail",
"BookCreate": "/orderpre/create",
"CarList": "/car/list",
"CarDetail": "/car/detail",
"StoreList": "/store/list",
"StoreDetail": "/store/detail",
"TruckList": "/truck/list",
"TruckDetail": "/truck/detail",
"WeituorenSearch": "/weituoren/list",
"WeituorenDetail": "/weituoren/detail",
"MemberList": "/member/list",
"MemberDetail": "/member/detail",
"UserLogin": "/user/login",
"UserReg": "/user/register",
"UserDetail": "/user/detail",
"UserLogout": "/user/logout",
"UploadImage": "/upload/image",
"UploadImages": "/upload/images"
}

59
apis/ctms/apis.json Normal file
View File

@ -0,0 +1,59 @@
/**/
{
"index": "/index/index",
"IndexData": "/index/h5data",
"AdsSplash": "/index/ads-splash",
"AdsBanner": "/index/ads-banner",
//获取短信验证码
"getVcode": "/sms/vcode",
"getCwVcode": "/sms/caiwu",
"OrderSearch": "/order/list",
"OrderDetail": "/order/detail",
"OrderCreate": "/order/create",
"OrderCancel": "/order/cancel",
"OrderCheck": "/ordercheck/basic",
"OrderBookSearch": "/orderpre/list",
"OrderBookDetail": "/orderpre/detail",
"OrderBookCreate": "/orderpre/create",
"OrderBookEdit": "/orderpre/edit",
"OrderBookCancel": "/orderpre/cancel",
"UserLogin": "/fans/login",
"UserLoginSms": "/fans/login-sms",
"UserAuth": "/fans/auth",
"UserReg": "/fans/register",
"UserDetail": "/fans/detail",
"UserLogout": "/fans/logout",
"NewsPriceList": "/news/price-list",
"NewsPriceDetail": "/news/price-detail",
"NewsSearch": "/news/list",
"NewsDetail": "/news/detail",
"NewsAjax": "/news/ajax",
"NewsCatList": "/newscat/list",
"NoticeList": "/notice/list",
"NoticeDetail": "/notice/detail",
"JiaocheSearch": "/jiaoche/list",
"JiaocheDetail": "/jiaoche/detail",
"JiaocheCreate": "/jiaoche/create",
"BookSearch": "/orderpre/list",
"BookDetail": "/orderpre/detail",
"BookCreate": "/orderpre/create",
"CarList": "/car/list",
"CarDetail": "/car/detail",
"StoreList": "/store/list",
"StoreDetail": "/store/detail",
"TruckList": "/truck/list",
"TruckDetail": "/truck/detail",
"WeituorenSearch": "/weituoren/list",
"WeituorenDetail": "/weituoren/detail",
"MemberList": "/member/list",
"MemberDetail": "/member/detail",
"UploadImage": "/upload/image",
"UploadImages": "/upload/images"
}

85
apis/ctms/fab.js Normal file
View File

@ -0,0 +1,85 @@
export default {
// 登录方法
login: function(username, password, smscode, uuid) {
const data = {
username,
password,
smscode,
uuid
}
return request({
'url': apis.UserLogin,
headers: {
isToken: false
},
'method': 'post',
'data': data
})
},
// 注册方法
register: function(data) {
return request({
url: apis.UserReg,
headers: {
isToken: false
},
method: 'post',
data: data
})
},
// 获取用户详细信息
getInfo: function() {
return request({
'url': apis.UserDetail,
'method': 'get'
})
},
// 退出方法
logout: function() {
return request({
'url': userLogout,
'method': 'post'
})
},
// 用户密码重置
updateUserPwd: function(oldPassword, newPassword) {
const data = {
oldPassword,
newPassword
}
return request({
url: '/system/user/profile/updatePwd',
method: 'put',
params: data
})
},
// 查询用户个人信息
getUserProfile: function() {
return request({
url: '/system/user/profile',
method: 'get'
})
},
// 修改用户个人信息
updateUserProfile: function(data) {
return request({
url: '/system/user/profile',
method: 'put',
data: data
})
},
// 用户头像上传
uploadAvatar: function(data) {
return upload({
url: '/system/user/profile/avatar',
name: data.name,
filePath: data.filePath
})
}
}

55
apis/ctms/index.js Normal file
View File

@ -0,0 +1,55 @@
import user from './user.js';
import ads from './ads.js';
import order from './order.js';
import orderpre from './orderpre.js';
import notice from './notice.js';
import news from './news.js';
import vcode from './vcode.js';
import sync from './sync.js';
import fab from './fab.js';
import constant from "./_utils/constant.js";
import storage from './_utils/storage.js';
//处理缓存
const cache = {
size: function() {
var info = storage.info();
var size = info.currentSize,
kb, m;
kb = size % 1000;
m = size / 1000 - kb;
return {
'm': m,
'kb': kb
}
},
clear: function() {
uni.showModal({
title: '您在本机上存储的数据将被抹除,请确认',
cancelText: '我再想想',
confirmText: '确认',
success() {
storage.clean();
return true;
},
fail() {
return false;
}
})
}
}
const ctms = {
user,
ads,
order,
orderpre,
notice,
news,
vcode,
sync,
fab,
constant,
cache
}
export default ctms;

209
apis/ctms/news.js Normal file
View File

@ -0,0 +1,209 @@
import request from './_utils/request.js'
import apis from './apis.json'
import constant from './_utils/constant.js'
import storage from './_utils/storage.js'
export default {
//查询运单
search: function(formData = null, page = 0, psize = 0, ls = null) {
page = page || 1;
psize = psize || 10;
var data = {
'search[title]': formData.title,
'search[cid]': formData.cid,
page: page,
psize: psize, //分页数据大小
};
var url = apis.NewsSearch;
var header = {
'content-type': 'application/x-www-form-urlencoded'
};
return request({
'url': url,
'method': 'POST',
'data': data,
"headers": header,
'params': {}
}).then((res) => {
if (!res) {
storage.set(constant.newsList, {});
return false;
}
switch (res.code) {
default:
uni.showToast({
title: "没有查询到相关内容!",
icon: "fail"
});
break;
case 0:
var news = {};
var totalCount = 0;
storage.set(constant.newsList, news, 'page-' + page);
break;
case 200:
var news = res.data.news;
var totalCount = res.data.total;
storage.set(constant.newsList, totalCount, 'total');
storage.set(constant.newsList, news, 'page-' + page);
for (var x in news) {
var detail = news[x];
var id = detail.id;
storage.set(constant.newsDetail, detail, id);
}
break;
}
return res.data;
})
},
//列表,从本地缓存中加载
list: function(page = 0) {
//取缓存
var total = storage.get(constant.newsList, 'total');
if (total) {
var news = storage.get(constant.newsList, 'page-' + page);
if (news) {
return {
'total': total,
'news': news
}
}
}
return false;
},
//详情,网络更新
checkDetail: function(id) {
var data = {
id: id
};
var url = apis.NewsDetail;
return request({
'url': url,
'method': 'POST',
'data': data,
'params': {}
}).then((res) => {
if (res.code == 200) {
var detail = res.data;
storage.set(constant.newsDetail, detail, id);
return res;
} else {
uni.showToast({
title: "信息获取失败!",
icon: "fail"
});
}
})
},
//详情,从缓存中读取
detail: function(id) {
return storage.get(constant.newsDetail, id);
},
//AJAX操作
ajax: function(id, op) {
var data = {
id: id,
op: op,
};
var url = apis.NewsAjax;
return request({
'url': url,
'method': 'POST',
'data': data,
'params': {}
}).then((res) => {
if (res.code == 200) {
var detail = res.data;
storage.set(constant.newsDetail, detail, id);
return res;
}
})
},
// 取文章分类
cats: function() {
var url = apis.NewsCatList;
var header = {
'content-type': 'application/x-www-form-urlencoded'
};
return request({
'url': url,
'method': 'GET',
'data': {},
"headers": header,
'params': {}
}).then((res) => {
if (res.code == 200) {
var cats = res.data.cats;
return cats;
}
})
},
//标记文章浏览记录
viewed: function(id) {
var ls = constant.newsViewed;
var res = uni.getStorageSync(ls) || {};
if (!res[id]) {
res[id] = id;
uni.setStorageSync(ls, res);
this.ajax(id, 'view');
return true;
}
},
//标记文章状态(纯缓存记录)(id,内容IDop为具体操作-默认为取全部,type为状态类型)
mark: function(id, type = null, op = false) {
//不归入统一的缓存集合,以确保不在清除缓存时被误清除
if (!type) {
return false;
}
var ls, opp_set, opp_del;
switch (type) {
case 'reading':
//在读
ls = constant.newsReading;
opp_set = 'read';
opp_del = 'no_read';
break;
case 'liked':
//喜欢
ls = constant.newsLiked;
opp_set = 'like';
opp_del = 'no_like';
break;
}
var res = uni.getStorageSync(ls) || {};
if (!op) {
return res;
}
var data = res,
ret = false;
switch (op) {
case 'set':
if (id && !data[id]) {
data[id] = id;
uni.setStorageSync(ls, data);
ret = true;
this.ajax(id, opp_set);
}
break;
case 'get':
ret = data[id] || false;
break;
case 'del':
delete data[id];
uni.setStorageSync(ls, data);
ret = true;
this.ajax(id, opp_del);
break;
default:
ret = res;
}
return ret;
}
}

69
apis/ctms/notice.js Normal file
View File

@ -0,0 +1,69 @@
import request from './_utils/request.js'
import apis from './apis.json'
import constant from './_utils/constant.js'
import storage from './_utils/storage.js'
export default {
//列表
list: function(page = 0, psize = 10) {
var data = {
page: page,
psize: psize, //分页数据大小
};
var url = apis.NoticeList;
var header = {
'content-type': 'application/x-www-form-urlencoded'
};
return request({
'url': url,
'method': 'POST',
'data': data,
"headers": header,
'params': {}
}).then((res) => {
switch (res.code) {
default:
break;
case 0:
var notices = {};
var totalCount = 0;
storage.set(constant.noitceList, notices, 'page-' + page);
break;
case 200:
var notices = res.data.notices;
var totalCount = res.data.total;
storage.set(constant.noticeList, totalCount, 'total');
storage.set(constant.noitceList, notices, 'page-' + page);
for (var x in notices) {
storage.set(constant.noticeDetail, notices[x], notices[x].id);
}
break;
}
return res.data;
})
},
//详情
detail: function(id) {
var data = {
id: id
};
var url = apis.NoticeDetail;
return request({
'url': url,
'method': 'POST',
'data': data,
'params': {}
}).then((res) => {
if (res.code == 200) {
var notice = res.data;
storage.set(constant.noticeDetail, notice, id);
return res;
} else {
uni.showToast({
title: "信息获取失败!",
icon: "fail"
});
}
})
}
}

220
apis/ctms/order.js Normal file
View File

@ -0,0 +1,220 @@
import request from './_utils/request.js'
import apis from './apis.json'
import constant from './_utils/constant.js'
import storage from './_utils/storage.js'
export default {
//存取草稿(只允许1+5条记录第1条覆盖保存后5条循环保存)
draft: function(formData, index = 0) {
var lsIndex = constant.orderForm;
// 指定第1条
if (index === null) {
return storage.set(lsIndex, formData, 0);
}
//指定第几条缓存
var i = Number(index);
if (i > 0) {
return storage.set(lsIndex, formData, i);
}
//确认上次缓存的是第几条
var lastIndex = storage.get(lsIndex, 'lastIndex');
var li = lastIndex ? lastIndex : 0;
if (li < 5) {
li += 1;
} else {
li = 1;
}
storage.set(lsIndex, li, 'lastIndex');
return storage.set(lsIndex, formData, li);
},
getDraft: function(index = null) {
var lsIndex = constant.orderForm;
index = index || 0;
return storage.get(lsIndex, index);
},
delDraft: function(index = null) {
var lsIndex = constant.orderForm;
index = index || 0;
storage.remove(lsIndex, index);
},
//删除缓存
delDetail: function(oid) {
storage.remove(constant.orderDetail, oid);
},
//取消订单
cancel: function(oid) {
//网络请求
var data = {
'id': oid
};
var url = apis.OrderCancel;
var header = {
'content-type': 'application/x-www-form-urlencoded'
};
return request({
'url': url,
'method': 'POST',
'data': data,
"headers": header,
'params': {}
}).then((res) => {
if (!res) {
return false;
}
return res.data;
})
},
// 在线下单
create: function(formData) {
//缓存表单
var lsIndex = constant.orderCreateForm
storage.set(lsIndex, formData);
//网络请求
var data = formData;
var url = apis.OrderCreate;
var header = {
'content-type': 'application/x-www-form-urlencoded'
};
return request({
'url': url,
'method': 'POST',
'data': data,
"headers": header,
'params': {}
})
},
//查询运单
search: function(formData = null, page = 0, psize = 0, ls = null) {
page = page || 1;
psize = psize || 10;
//缓存表单
var lsIndex = ls || constant.orderSearchA
if (formData) {
storage.set(lsIndex, formData);
} else {
formData = storage.get(lsIndex)
}
var data = {
'search[carno]': formData.carno,
'search[sn]': formData.ordersn ? formData.ordersn : 0,
'search[phone]': formData.phone,
page: page,
psize: psize, //分页数据大小
};
var url = apis.OrderSearch;
var header = {
'content-type': 'application/x-www-form-urlencoded'
};
return request({
'url': url,
'method': 'POST',
'data': data,
"headers": header,
'params': {}
}).then((res) => {
if (!res) {
storage.set(constant.orderList, {});
return false;
}
switch (res.code) {
default:
uni.showToast({
title: "没有查询到相关订单!",
icon: "fail"
});
break;
case 0:
var orders = {};
var totalCount = 0;
storage.set(constant.orderList, orders, 'page-' + page);
break;
case 200:
var orders = res.data.orders;
var totalCount = res.data.total;
storage.set(constant.orderList, totalCount, 'total');
storage.set(constant.orderList, orders, 'page-' + page);
for (var x in orders) {
var order = orders[x];
var oid = order.id;
storage.set(constant.orderDetail, order, oid);
}
break;
}
return res.data;
})
},
//运单列表,从本地缓存中加载
list: function(page = 0) {
//取缓存
var total = storage.get(constant.orderList, 'total');
if (total) {
var orders = storage.get(constant.orderList, 'page-' + page);
if (orders) {
return {
'total': total,
'orders': orders
}
}
}
return false;
},
//运单详情,网络更新
checkDetail: function(oid) {
var data = {
oid: oid
};
var url = apis.OrderDetail;
return request({
'url': url,
'method': 'POST',
'data': data,
'params': {}
}).then((res) => {
if (res.code == 200) {
var order = res.data;
storage.set(constant.orderDetail, order, oid);
return res.data;
} else {
uni.showToast({
title: "订单信息获取失败!",
icon: "fail"
});
}
})
},
//运单详情,从缓存中读取
detail: function(oid) {
return storage.get(constant.orderDetail, oid);
},
//运单验车
yanche: function(oid, checks, op) {
var data = {
oid: oid,
op: op,
checks: checks,
};
var url = apis.OrderCheck;
return request({
'url': url,
'method': 'POST',
'data': data,
'params': {}
}).then((res) => {
if (res.code == 200) {
return res.data;
} else {
return false;
}
})
}
}

183
apis/ctms/orderpre.js Normal file
View File

@ -0,0 +1,183 @@
import request from './_utils/request.js'
import apis from './apis.json'
import constant from './_utils/constant.js'
import storage from './_utils/storage.js'
export default {
//存取草稿(只允许1+5条记录第1条覆盖保存后5条循环保存)
draft: function(formData, index = 0) {
var lsIndex = constant.orderBookForm;
// 指定第1条
if (index === null) {
return storage.set(lsIndex, formData, 0);
}
//指定第几条缓存
var i = Number(index);
if (i > 0) {
return storage.set(lsIndex, formData, i);
}
//确认上次缓存的是第几条
var lastIndex = storage.get(lsIndex, 'lastIndex');
var li = lastIndex ? lastIndex : 0;
if (li < 5) {
li += 1;
} else {
li = 1;
}
storage.set(lsIndex, li, 'lastIndex');
return storage.set(lsIndex, formData, li);
},
getDraft: function(index = null) {
var lsIndex = constant.orderBookForm;
index = index || 0;
return storage.get(lsIndex, index);
},
delDraft: function(index = null) {
var lsIndex = constant.orderBookForm;
index = index || 0;
storage.remove(lsIndex, index);
},
//删除缓存
delDetail: function(oid) {
storage.remove(constant.orderBookDetail, oid);
},
// 下单询价
create: function(formData) {
//缓存表单
this.draft(formData)
//网络请求
var data = formData;
var url = apis.OrderBookCreate;
if (formData.id) url = apis.OrderBookEdit; //有ID传入时即为更新
var header = {
'content-type': 'application/x-www-form-urlencoded'
};
return request({
'url': url,
'method': 'POST',
'data': data,
"headers": header,
'params': {}
})
},
cancel: function(oid) {
//网络请求
var data = {
'id': oid
};
var url = apis.OrderBookCancel;
var header = {
'content-type': 'application/x-www-form-urlencoded'
};
return request({
'url': url,
'method': 'POST',
'data': data,
"headers": header,
'params': {}
}).then((res) => {
if (!res) {
return false;
}
return res.data;
})
},
//获取询价单列表
list: function(formData = null, page = 0, psize = 10, ls = null) {
page = page || 1;
psize = psize || 10;
//缓存表单
var lsIndex = ls || constant.orderBookSearch
if (formData) {
storage.set(lsIndex, formData);
} else {
formData = storage.get(lsIndex)
}
var data = {
'search[carno]': formData.carno,
'search[sn]': formData.ordersn ? formData.ordersn : 0,
'search[phone]': formData.phone,
page: page,
psize: psize, //分页数据大小
};
var url = apis.OrderBookSearch;
var header = {
'content-type': 'application/x-www-form-urlencoded'
};
return request({
'url': url,
'method': 'POST',
'data': data,
"headers": header,
'params': {}
}).then((res) => {
switch (res.code) {
default:
uni.showToast({
title: "没有查询到相关订单!",
icon: "fail"
});
break;
case 0:
var orders = {};
var totalCount = 0;
storage.set(constant.orderBookList, orders, 'page-' + page);
break;
case 200:
var orders = res.data.orders;
var totalCount = res.data.total;
storage.set(constant.orderBookList, totalCount, 'total');
storage.set(constant.orderBookList, orders, 'page-' + page);
for (var x in orders) {
var order = orders[x];
var oid = order.id;
storage.set(constant.orderBookDetail, order, oid);
}
break;
}
return res.data;
})
},
//询价单详情
//@oid,cache(是否使用缓存)
detail: function(oid, cache = null) {
var data = {
id: oid
};
var url = apis.OrderBookDetail;
if (cache) {
return new Promise((resolve, reject) => {
var res = storage.get(constant.orderBookDetail, oid);
if (res) {
resolve(res)
} else {
// reject('没有查询到该运单的缓存')
resolve(false)
}
});
}
return request({
'url': url,
'method': 'POST',
'data': data,
'params': {}
}).then((res) => {
if (res.code == 200) {
var order = res.data;
storage.set(constant.orderBookDetail, order, oid);
return res.data;
} else {
uni.showToast({
title: "询价单信息获取失败!",
icon: "fail"
});
}
})
}
}

77
apis/ctms/sync.js Normal file
View File

@ -0,0 +1,77 @@
// 对异步函数进行同步化模拟
const Confirm = {
modalPromise: function(title, content, editable) {
return new Promise((resolve, reject) => {
uni.showModal({
title: title,
content: content,
editable: editable,
success: (res) => {
if (res.confirm) {
if (editable) {
resolve(res.content);
} else {
resolve(true);
}
} else if (res.cancel) {
resolve(false);
}
},
fail: (err) => {
reject(err);
}
});
});
},
doSync: async function(title, content, editable) {
try {
const res = await this.modalPromise(title, content, editable);
// console.log('对话框返回', res)
return res;
} catch (error) {
// console.error('Error:', error);
// 处理错误或用户取消操作...
}
}
}
const Actions = {
actionPromise: function(title, list) {
return new Promise((resolve, reject) => {
uni.showActionSheet({
title: title,
itemList: list,
success: function(res) {
// console.log('授权点击', res)
var index = res.tapIndex;
var item = list[index];
resolve({
'index': index,
'item': item
})
},
fail: function(res) {
// console.log(res.errMsg);
resolve(false)
}
});
});
},
doSync: async function(title, list) {
try {
const res = await this.actionPromise(title, list);
// console.log('actionsheet点击返回', res)
return res;
} catch (error) {
// console.error('Error:', error);
// 处理错误或用户取消操作...
}
}
}
export default {
Confirm,
Actions
}

319
apis/ctms/user.js Normal file
View File

@ -0,0 +1,319 @@
import request from './_utils/request.js'
import apis from './apis.json'
import constant from './_utils/constant.js'
import _sync from './sync.js'
import config from "@/config/ctms.config.js";
import store from '@/store/index.js';
export default {
//检查登陆,返回用户信息
checkLogin: function() {
var user = store.state.user,
isCloud = config.isUserUnicloud;
if (user.hasLogin && !isCloud) {
return user.info;
}
var userCloud = store.state.userCloud;
if (isCloud && userCloud.hasLogin) {
var data = {
mobile: userCloud.mobile,
openid: userCloud.openid,
username: userCloud.mobile
}
this.authLogin(data);
return data;
}
return false;
},
// 获取用户信息
getInfo: function() {
var user = store.state.user,
isCloud = config.isUserUnicloud;
if (user.hasLogin && !isCloud) {
return user.info;
}
var userCloud = store.state.userCloud;
if (isCloud && userCloud.hasLogin) {
return {
mobile: userCloud.mobile,
openid: userCloud.openid,
username: userCloud.mobile
}
}
return false;
},
//一键授权
oneKeyAuth: async function() {
var _that = this;
var isCloud = config.isUserUnicloud;
if (!isCloud) {
uni.showToast({
icon: 'none',
title: '应用未开启云服务支持'
})
}
var user = store.state.user,
userCloud = store.state.userCloud,
list = [];
if (!userCloud.hasLogin) {
return uni.showModal({
title: '提示',
content: '请先登陆云平台',
showCancel: true,
cancelText: '放弃',
success() {
uni.navigateTo({
url: 'uni_modules/uni-id-pages/pages/login/login-withoutpwd'
})
}
})
}
var _info = userCloud.info,
openid = userCloud.openid,
mobile = userCloud.mobile;
var reg = new RegExp(
/^(?:(?:\+|00)86)?1(?:(?:3\d)|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8\d)|(?:9[189]))\d{8}$/
);
var matches = reg.exec(mobile);
if (matches['length'] == 1 && matches['0'] == mobile) {
list.unshift(mobile)
} else if (openid) {
list.unshift('同意')
} else {
return uni.showToast({
icon: 'fail',
title: '无效的平台信息'
})
}
var res = await _sync.Actions.doSync('请确认授权', list);
if (res) {
var user = {
mobile: mobile,
openid: openid,
isLong: true
}
var user = await _that.authLogin(user);
// console.log('登陆授权返回', user)
return user;
}
return false;
},
// 登陆,成功后执行相应的缓存操作
login: function(formData) {
var isLong = formData.isLong || false;
var data = {
username: formData.username,
passwd: formData.passwd,
isLong: isLong
};
var url = apis.UserLogin;
var header = {
'content-type': 'application/x-www-form-urlencoded'
};
return request({
'url': url,
// 'force_url': '', //强制指定URL忽略上面的url设定
'method': 'post',
'data': data,
"headers": header,
'params': {}
}).then((res) => {
if (res.code == 200) {
// utils.debug(res.data);
var user = store.state.user;
var _info = res.data.user;
var date = new Date();
var expireTime = date.getTime() + 3600 * 24 * 1000;
//过期时间正常是24小时
if (isLong) {
date.setDate(date.getMonth() + 1);
//选择持久登陆时时长改为1个月
expireTime = date.getTime();
}
// console.log(expireTime, _info.tokenExpired);
_info.expireTime = expireTime;
store.commit('user/login', _info) //触发@store/modules/user.js的login函数同步执行
return _info;
} else {
uni.showToast({
title: '登陆失败',
icon: 'none'
});
}
})
},
// 通过短信验证码登陆,成功后执行相应的缓存操作
smsLogin: function(formData) {
var isLong = formData.isLong || false;
var data = {
mobile: formData.mobile,
vcode: formData.vcode,
isLong: isLong
};
var url = apis.UserLoginSms;
var header = {
'content-type': 'application/x-www-form-urlencoded'
};
return request({
'url': url,
// 'force_url': '', //强制指定URL忽略上面的url设定
'method': 'post',
'data': data,
"headers": header,
'params': {}
}).then((res) => {
if (res.code == 200) {
// utils.debug(res.data);
var user = store.state.user;
var _info = res.data.user;
var date = new Date();
var expireTime = date.getTime() + 3600 * 24 * 1000;
//过期时间正常是24小时
if (isLong) {
date.setDate(date.getMonth() + 1);
//选择持久登陆时时长改为1个月
expireTime = date.getTime();
}
// console.log(expireTime, _info.tokenExpired);
_info.expireTime = expireTime;
store.commit('user/login', _info) //触发@store/modules/user.js的login函数同步执行
return _info;
} else {
uni.showToast({
title: '登陆失败',
icon: 'none'
});
}
})
},
// 注册,成功后执行相应的缓存操作
reg: function(formData) {
var isLong = formData.isLong || false;
var data = {
username: formData.username,
passwd: formData.passwd,
vcode: formData.vcode,
email: formData.email,
isLong: isLong
};
var url = apis.UserReg;
var header = {
'content-type': 'application/x-www-form-urlencoded'
};
return request({
'url': url,
// 'force_url': '', //强制指定URL忽略上面的url设定
'method': 'post',
'data': data,
"headers": header,
'params': {}
}).then((res) => {
if (res.code == 200) {
// utils.debug(res.data);
var user = store.state.user;
var _info = res.data.user;
var date = new Date();
var expireTime = date.getTime() + 3600 * 24 * 1000;
//过期时间正常是24小时
if (isLong) {
date.setDate(date.getMonth() + 1);
//选择持久登陆时时长改为1个月
expireTime = date.getTime();
}
// console.log(expireTime, _info.tokenExpired);
_info.expireTime = expireTime;
store.commit('user/login', _info) //触发@store/modules/user.js的login函数同步执行
return _info;
}
})
},
// 一键授权登陆
authLogin: async function(user, from) {
var isLong = user.isLong || false;
var plat = getApp().globalData.config.openplat;
var from = from || plat;
var data = {
mobile: user.mobile,
openid: user.openid,
isLong: isLong,
from: from
};
var url = apis.UserAuth;
var header = {
'content-type': 'application/x-www-form-urlencoded'
};
return await request({
'url': url,
'method': 'post',
'data': data,
"headers": header,
'params': {}
}).then((res) => {
if (res.code == 200) {
// utils.debug(res.data);
var user = store.state.user;
var _info = res.data.user;
var date = new Date();
var expireTime = date.getTime() + 3600 * 24 * 1000;
//过期时间正常是24小时
if (isLong) {
date.setDate(date.getMonth() + 1);
//选择持久登陆时时长改为1个月
expireTime = date.getTime();
}
// console.log(expireTime, _info.tokenExpired);
_info.expireTime = expireTime;
store.commit('user/login', _info) //触发@store/modules/user.js的login函数同步执行
return _info;
}
})
},
logout: async function() {
var isCloud = config.isUserUnicloud;
var res = await _sync.Confirm.doSync('提示', '您正在注销,请确认继续', false);
if (res) {
store.commit('user/logout') //触发@store/modules/user.js的logout函数同步执行
if (isCloud) store.commit('userCloud/logout')
uni.showToast({
title: '您已注销现在重新打开APP',
icon: 'none'
});
return true;
}
return false;
},
loginDraft(formData = {}, isGet = false) {
var ls = constant.userLoginForm;
var data = uni.getStorageSync(ls);
if (isGet) return data;
var data = {
...data,
...formData
};
uni.setStorageSync(ls, data);
},
regDraft(formData = {}, isGet = false) {
var ls = constant.userRegForm;
var data = uni.getStorageSync(ls);
if (isGet) return data;
var data = {
...data,
...formData
};
uni.setStorageSync(ls, data);
}
}

47
apis/ctms/vcode.js Normal file
View File

@ -0,0 +1,47 @@
import request from './_utils/request.js'
import apis from './apis.json'
import constant from './_utils/constant.js'
import storage from './_utils/storage.js'
export default {
//手机短信验证码相关操作
// 获取验证码
//scence使用场景phone发送手机号
get: function(scence, phone) {
//网络请求
var data = {
'scence': scence,
'phone': phone
};
var url = apis.getVcode;
if (scence === 'caiwu') {
url = apis.getCwVcode;
}
var header = {
'content-type': 'application/x-www-form-urlencoded'
};
return request({
'url': url,
'method': 'POST',
'data': data,
"headers": header,
'params': {}
}).then(
function(res) {
var data = {};
if (res.msg) {
data.msg = res.msg;
}
if (res.code == 200) {
return {
...res.data,
...data
}
} else {
return false;
}
})
},
}