forked from gxwebsoft/mp-10550
修复已知问题
This commit is contained in:
@@ -1,101 +0,0 @@
|
|||||||
import request from '@/utils/request';
|
|
||||||
import type { ApiResult, PageResult } from '@/api/index';
|
|
||||||
import type { HjmBxLog, HjmBxLogParam } from './model';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询黄家明_保险记录
|
|
||||||
*/
|
|
||||||
export async function pageHjmBxLog(params: HjmBxLogParam) {
|
|
||||||
const res = await request.get<ApiResult<PageResult<HjmBxLog>>>(
|
|
||||||
'/hjm/hjm-bx-log/page',
|
|
||||||
params
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询黄家明_保险记录列表
|
|
||||||
*/
|
|
||||||
export async function listHjmBxLog(params?: HjmBxLogParam) {
|
|
||||||
const res = await request.get<ApiResult<HjmBxLog[]>>(
|
|
||||||
'/hjm/hjm-bx-log',
|
|
||||||
params
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加黄家明_保险记录
|
|
||||||
*/
|
|
||||||
export async function addHjmBxLog(data: HjmBxLog) {
|
|
||||||
const res = await request.post<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-bx-log',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改黄家明_保险记录
|
|
||||||
*/
|
|
||||||
export async function updateHjmBxLog(data: HjmBxLog) {
|
|
||||||
const res = await request.put<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-bx-log',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除黄家明_保险记录
|
|
||||||
*/
|
|
||||||
export async function removeHjmBxLog(id?: number) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-bx-log/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除黄家明_保险记录
|
|
||||||
*/
|
|
||||||
export async function removeBatchHjmBxLog(data: (number | undefined)[]) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-bx-log/batch',
|
|
||||||
{
|
|
||||||
data
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据id查询黄家明_保险记录
|
|
||||||
*/
|
|
||||||
export async function getHjmBxLog(id: number) {
|
|
||||||
const res = await request.get<ApiResult<HjmBxLog>>(
|
|
||||||
'/hjm/hjm-bx-log/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
import type { PageParam } from '@/api/index';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 黄家明_保险记录
|
|
||||||
*/
|
|
||||||
export interface HjmBxLog {
|
|
||||||
// 自增ID
|
|
||||||
id?: number;
|
|
||||||
// 用户ID
|
|
||||||
userId?: number;
|
|
||||||
// 事故类型
|
|
||||||
accidentType?: string;
|
|
||||||
// 车辆ID
|
|
||||||
carId?: number;
|
|
||||||
// 车辆编号
|
|
||||||
carNo?: string;
|
|
||||||
// 保险图片
|
|
||||||
image?: any;
|
|
||||||
// 排序(数字越小越靠前)
|
|
||||||
sortNumber?: number;
|
|
||||||
// 备注
|
|
||||||
comments?: string;
|
|
||||||
// 状态, 0正常, 1冻结
|
|
||||||
status?: number;
|
|
||||||
// 是否删除, 0否, 1是
|
|
||||||
deleted?: number;
|
|
||||||
// 租户id
|
|
||||||
tenantId?: number;
|
|
||||||
// 创建时间
|
|
||||||
createTime?: string;
|
|
||||||
// 修改时间
|
|
||||||
updateTime?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 黄家明_保险记录搜索条件
|
|
||||||
*/
|
|
||||||
export interface HjmBxLogParam extends PageParam {
|
|
||||||
id?: number;
|
|
||||||
userId?: number;
|
|
||||||
keywords?: string;
|
|
||||||
}
|
|
||||||
@@ -1,152 +0,0 @@
|
|||||||
import request from '@/utils/request';
|
|
||||||
import type { ApiResult, PageResult } from '@/api/index';
|
|
||||||
import type { HjmCar, HjmCarParam } from './model';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询黄家明_车辆管理
|
|
||||||
*/
|
|
||||||
export async function pageHjmCar(params: HjmCarParam) {
|
|
||||||
const res = await request.get<ApiResult<PageResult<HjmCar>>>(
|
|
||||||
'/hjm/hjm-car/page',
|
|
||||||
params
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询黄家明_车辆管理列表
|
|
||||||
*/
|
|
||||||
export async function listHjmCar(params?: HjmCarParam) {
|
|
||||||
const res = await request.get<ApiResult<HjmCar[]>>(
|
|
||||||
'/hjm/hjm-car',
|
|
||||||
{
|
|
||||||
params
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加黄家明_车辆管理
|
|
||||||
*/
|
|
||||||
export async function addHjmCar(data: HjmCar) {
|
|
||||||
const res = await request.post<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-car',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改黄家明_车辆管理
|
|
||||||
*/
|
|
||||||
export async function updateHjmCar(data: HjmCar) {
|
|
||||||
const res = await request.put<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-car',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除黄家明_车辆管理
|
|
||||||
*/
|
|
||||||
export async function removeHjmCar(id?: number) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-car/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除黄家明_车辆管理
|
|
||||||
*/
|
|
||||||
export async function removeBatchHjmCar(data: (number | undefined)[]) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-car/batch',
|
|
||||||
{
|
|
||||||
data
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据id查询黄家明_车辆管理
|
|
||||||
*/
|
|
||||||
export async function getHjmCar(id: number) {
|
|
||||||
const res = await request.get<ApiResult<HjmCar>>(
|
|
||||||
'/hjm/hjm-car/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据code查询黄家明_车辆管理
|
|
||||||
*/
|
|
||||||
export async function getHjmCarByCode(code: string) {
|
|
||||||
const res = await request.get<ApiResult<HjmCar>>(
|
|
||||||
'/hjm/hjm-car/getByCode/' + code
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function pageByQQMap(params: HjmCarParam) {
|
|
||||||
const res = await request.get<ApiResult<PageResult<HjmCar>>>(
|
|
||||||
'/hjm/hjm-car/pageByQQMap',
|
|
||||||
params
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function pushSubscriptionMessages(data: any) {
|
|
||||||
const res = await request.post<ApiResult<unknown>>(
|
|
||||||
'/hjm/wx-subscription/send-template',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 启动mqtt服务
|
|
||||||
*/
|
|
||||||
export async function mqttStart() {
|
|
||||||
const res = await request.get<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-car/mqtt'
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
import type { PageParam } from '@/api/index';
|
|
||||||
import {HjmFence} from "@/api/hjm/hjmFence/model";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 黄家明_车辆管理
|
|
||||||
*/
|
|
||||||
export interface HjmCar {
|
|
||||||
// 自增ID
|
|
||||||
id?: number;
|
|
||||||
// 车辆名称
|
|
||||||
name?: string;
|
|
||||||
// 车辆图片
|
|
||||||
image?: string;
|
|
||||||
// 类型 0汽车 1其他车
|
|
||||||
type?: number;
|
|
||||||
// 快递公司
|
|
||||||
kuaidi?: string;
|
|
||||||
// 管理负责人
|
|
||||||
kuaidiAdmin?: string;
|
|
||||||
organization?: string;
|
|
||||||
organizationId?: number;
|
|
||||||
organizationParentId?: number;
|
|
||||||
parentOrganization?: string;
|
|
||||||
parentOrganizationAdmin?: string;
|
|
||||||
// 车辆编号
|
|
||||||
code?: string;
|
|
||||||
// 操作员ID
|
|
||||||
driverId?: number;
|
|
||||||
// 操作员
|
|
||||||
driver?: any;
|
|
||||||
// 操作员名称
|
|
||||||
driverName?: string;
|
|
||||||
// 保险状态
|
|
||||||
insuranceStatus?: number;
|
|
||||||
// GPS设备编号
|
|
||||||
gpsNo?: string;
|
|
||||||
// 速度
|
|
||||||
speed?: string;
|
|
||||||
// 电子围栏ID
|
|
||||||
fenceId?: number;
|
|
||||||
// 电子围栏名称
|
|
||||||
fenceName?: string;
|
|
||||||
// 电子围栏
|
|
||||||
fence?: HjmFence;
|
|
||||||
// 位置
|
|
||||||
location?: string;
|
|
||||||
// 经度
|
|
||||||
longitude?: number,
|
|
||||||
// 纬度
|
|
||||||
latitude?: number,
|
|
||||||
// 地址
|
|
||||||
address?: string,
|
|
||||||
// 用户ID
|
|
||||||
userId?: number;
|
|
||||||
// 排序(数字越小越靠前)
|
|
||||||
sortNumber?: number;
|
|
||||||
// 备注
|
|
||||||
comments?: string;
|
|
||||||
// 状态, 0正常, 1冻结
|
|
||||||
status?: number;
|
|
||||||
// 是否删除, 0否, 1是
|
|
||||||
deleted?: number;
|
|
||||||
// 租户id
|
|
||||||
tenantId?: number;
|
|
||||||
// 创建时间
|
|
||||||
createTime?: string;
|
|
||||||
// 更新时间
|
|
||||||
updateTime?: string;
|
|
||||||
// 是否在电子围栏内
|
|
||||||
inFence?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 黄家明_车辆管理搜索条件
|
|
||||||
*/
|
|
||||||
export interface HjmCarParam extends PageParam {
|
|
||||||
id?: number;
|
|
||||||
userId?: number;
|
|
||||||
driverId?: number;
|
|
||||||
organizationId?: number;
|
|
||||||
organizationParentId?: number;
|
|
||||||
status?: number;
|
|
||||||
latitude?: number;
|
|
||||||
longitude?: number;
|
|
||||||
deleted?: number;
|
|
||||||
keywords?: string;
|
|
||||||
}
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
import request from '@/utils/request';
|
|
||||||
import type { ApiResult, PageResult } from '@/api/index';
|
|
||||||
import type { HjmChoices, HjmChoicesParam } from './model';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询选择题选项
|
|
||||||
*/
|
|
||||||
export async function pageHjmChoices(params: HjmChoicesParam) {
|
|
||||||
const res = await request.get<ApiResult<PageResult<HjmChoices>>>(
|
|
||||||
'/hjm/hjm-choices/page',
|
|
||||||
{
|
|
||||||
params
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询选择题选项列表
|
|
||||||
*/
|
|
||||||
export async function listHjmChoices(params?: HjmChoicesParam) {
|
|
||||||
const res = await request.get<ApiResult<HjmChoices[]>>(
|
|
||||||
'/hjm/hjm-choices',
|
|
||||||
{
|
|
||||||
params
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加选择题选项
|
|
||||||
*/
|
|
||||||
export async function addHjmChoices(data: HjmChoices) {
|
|
||||||
const res = await request.post<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-choices',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改选择题选项
|
|
||||||
*/
|
|
||||||
export async function updateHjmChoices(data: HjmChoices) {
|
|
||||||
const res = await request.put<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-choices',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除选择题选项
|
|
||||||
*/
|
|
||||||
export async function removeHjmChoices(id?: number) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-choices/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除选择题选项
|
|
||||||
*/
|
|
||||||
export async function removeBatchHjmChoices(data: (number | undefined)[]) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-choices/batch',
|
|
||||||
{
|
|
||||||
data
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据id查询选择题选项
|
|
||||||
*/
|
|
||||||
export async function getHjmChoices(id: number) {
|
|
||||||
const res = await request.get<ApiResult<HjmChoices>>(
|
|
||||||
'/hjm/hjm-choices/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
import type { PageParam } from '@/api/index';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 选择题选项
|
|
||||||
*/
|
|
||||||
export interface HjmChoices {
|
|
||||||
// 自增ID
|
|
||||||
id?: number;
|
|
||||||
// 题目ID
|
|
||||||
questionId?: number;
|
|
||||||
// 题目
|
|
||||||
content?: string;
|
|
||||||
// 是否正确
|
|
||||||
isCorrect?: boolean;
|
|
||||||
// 排序(数字越小越靠前)
|
|
||||||
sortNumber?: number;
|
|
||||||
// 备注
|
|
||||||
comments?: string;
|
|
||||||
// 状态, 0正常, 1冻结
|
|
||||||
status?: number;
|
|
||||||
// 是否删除, 0否, 1是
|
|
||||||
deleted?: number;
|
|
||||||
// 租户id
|
|
||||||
tenantId?: number;
|
|
||||||
// 创建时间
|
|
||||||
createTime?: string;
|
|
||||||
// 修改时间
|
|
||||||
updateTime?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 选择题选项搜索条件
|
|
||||||
*/
|
|
||||||
export interface HjmChoicesParam extends PageParam {
|
|
||||||
id?: number;
|
|
||||||
keywords?: string;
|
|
||||||
}
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
import request from '@/utils/request';
|
|
||||||
import type {ApiResult, PageResult} from '@/api/index';
|
|
||||||
import type {HjmCourses, HjmCoursesParam} from './model';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询课程
|
|
||||||
*/
|
|
||||||
export async function pageHjmCourses(params: HjmCoursesParam) {
|
|
||||||
const res = await request.get<ApiResult<PageResult<HjmCourses>>>(
|
|
||||||
'/hjm/hjm-courses/page',
|
|
||||||
{
|
|
||||||
params
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询课程列表
|
|
||||||
*/
|
|
||||||
export async function listHjmCourses(params?: HjmCoursesParam) {
|
|
||||||
const res = await request.get<ApiResult<HjmCourses[]>>(
|
|
||||||
'/hjm/hjm-courses',
|
|
||||||
{
|
|
||||||
params
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加课程
|
|
||||||
*/
|
|
||||||
export async function addHjmCourses(data: HjmCourses) {
|
|
||||||
const res = await request.post<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-courses',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改课程
|
|
||||||
*/
|
|
||||||
export async function updateHjmCourses(data: HjmCourses) {
|
|
||||||
const res = await request.put<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-courses',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除课程
|
|
||||||
*/
|
|
||||||
export async function removeHjmCourses(id?: number) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-courses/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除课程
|
|
||||||
*/
|
|
||||||
export async function removeBatchHjmCourses(data: (number | undefined)[]) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-courses/batch',
|
|
||||||
{
|
|
||||||
data
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据id查询课程
|
|
||||||
*/
|
|
||||||
export async function getHjmCourses(id: number) {
|
|
||||||
const res = await request.get<ApiResult<HjmCourses>>(
|
|
||||||
'/hjm/hjm-courses/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res) {
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
import type { PageParam } from '@/api/index';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 课程
|
|
||||||
*/
|
|
||||||
export interface HjmCourses {
|
|
||||||
// 自增ID
|
|
||||||
id?: number;
|
|
||||||
// 课程名称
|
|
||||||
name?: string;
|
|
||||||
// 类型
|
|
||||||
type?: number;
|
|
||||||
// 课程编号
|
|
||||||
code?: string;
|
|
||||||
// 课程封面图
|
|
||||||
image?: string;
|
|
||||||
// 用户ID
|
|
||||||
userId?: number;
|
|
||||||
// 排序(数字越小越靠前)
|
|
||||||
sortNumber?: number;
|
|
||||||
// 备注
|
|
||||||
comments?: string;
|
|
||||||
// 状态, 0正常, 1冻结
|
|
||||||
status?: number;
|
|
||||||
// 是否删除, 0否, 1是
|
|
||||||
deleted?: number;
|
|
||||||
// 租户id
|
|
||||||
tenantId?: number;
|
|
||||||
// 创建时间
|
|
||||||
createTime?: string;
|
|
||||||
// 修改时间
|
|
||||||
updateTime?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 课程搜索条件
|
|
||||||
*/
|
|
||||||
export interface HjmCoursesParam extends PageParam {
|
|
||||||
id?: number;
|
|
||||||
keywords?: string;
|
|
||||||
}
|
|
||||||
@@ -1,114 +0,0 @@
|
|||||||
import request from '@/utils/request';
|
|
||||||
import type { ApiResult, PageResult } from '@/api/index';
|
|
||||||
import type { HjmExamLog, HjmExamLogParam } from './model';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询黄家明_学习记录
|
|
||||||
*/
|
|
||||||
export async function pageHjmExamLog(params: HjmExamLogParam) {
|
|
||||||
const res = await request.get<ApiResult<PageResult<HjmExamLog>>>(
|
|
||||||
'/hjm/hjm-exam-log/page',
|
|
||||||
params
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询黄家明_学习记录列表
|
|
||||||
*/
|
|
||||||
export async function listHjmExamLog(params?: HjmExamLogParam) {
|
|
||||||
const res = await request.get<ApiResult<HjmExamLog[]>>(
|
|
||||||
'/hjm/hjm-exam-log',
|
|
||||||
params
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加黄家明_学习记录
|
|
||||||
*/
|
|
||||||
export async function addHjmExamLog(data: HjmExamLog) {
|
|
||||||
const res = await request.post<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-exam-log',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改黄家明_学习记录
|
|
||||||
*/
|
|
||||||
export async function updateHjmExamLog(data: HjmExamLog) {
|
|
||||||
const res = await request.put<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-exam-log',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除黄家明_学习记录
|
|
||||||
*/
|
|
||||||
export async function removeHjmExamLog(id?: number) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-exam-log/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除黄家明_学习记录
|
|
||||||
*/
|
|
||||||
export async function removeBatchHjmExamLog(data: (number | undefined)[]) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-exam-log/batch',
|
|
||||||
{
|
|
||||||
data
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据id查询黄家明_学习记录
|
|
||||||
*/
|
|
||||||
export async function getHjmExamLog(id: number) {
|
|
||||||
const res = await request.get<ApiResult<HjmExamLog>>(
|
|
||||||
'/hjm/hjm-exam-log/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
export async function checkMonthTaskCompleted() {
|
|
||||||
const res = await request.get<ApiResult<HjmExamLog>>(
|
|
||||||
'/hjm/hjm-exam-log/checkMonthTaskCompleted'
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
import type { PageParam } from '@/api/index';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 黄家明_学习记录
|
|
||||||
*/
|
|
||||||
export interface HjmExamLog {
|
|
||||||
// 自增ID
|
|
||||||
id?: number;
|
|
||||||
// 用户ID
|
|
||||||
userId?: number;
|
|
||||||
// 得分
|
|
||||||
total?: string;
|
|
||||||
// 用时
|
|
||||||
useTime?: string;
|
|
||||||
// 排序(数字越小越靠前)
|
|
||||||
sortNumber?: number;
|
|
||||||
// 备注
|
|
||||||
comments?: string;
|
|
||||||
// 状态, 0正常, 1冻结
|
|
||||||
status?: number;
|
|
||||||
// 是否删除, 0否, 1是
|
|
||||||
deleted?: number;
|
|
||||||
// 租户id
|
|
||||||
tenantId?: number;
|
|
||||||
// 创建时间
|
|
||||||
createTime?: string;
|
|
||||||
// 修改时间
|
|
||||||
updateTime?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 黄家明_学习记录搜索条件
|
|
||||||
*/
|
|
||||||
export interface HjmExamLogParam extends PageParam {
|
|
||||||
id?: number;
|
|
||||||
userId?: number;
|
|
||||||
status?: number;
|
|
||||||
keywords?: string;
|
|
||||||
}
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
import request from '@/utils/request';
|
|
||||||
import type {ApiResult, PageResult} from '@/api/index';
|
|
||||||
import type {HjmFence, HjmFenceParam} from './model';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询电子围栏
|
|
||||||
*/
|
|
||||||
export async function pageHjmFence(params: HjmFenceParam) {
|
|
||||||
const res = await request.get<ApiResult<PageResult<HjmFence>>>(
|
|
||||||
'/hjm/hjm-fence/page',
|
|
||||||
{
|
|
||||||
params
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询电子围栏列表
|
|
||||||
*/
|
|
||||||
export async function listHjmFence(params?: HjmFenceParam) {
|
|
||||||
const res = await request.get<ApiResult<HjmFence[]>>(
|
|
||||||
'/hjm/hjm-fence',
|
|
||||||
{
|
|
||||||
params
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加电子围栏
|
|
||||||
*/
|
|
||||||
export async function addHjmFence(data: HjmFence) {
|
|
||||||
const res = await request.post<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-fence',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改电子围栏
|
|
||||||
*/
|
|
||||||
export async function updateHjmFence(data: HjmFence) {
|
|
||||||
const res = await request.put<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-fence',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除电子围栏
|
|
||||||
*/
|
|
||||||
export async function removeHjmFence(id?: number) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-fence/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除电子围栏
|
|
||||||
*/
|
|
||||||
export async function removeBatchHjmFence(data: (number | undefined)[]) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-fence/batch',
|
|
||||||
{
|
|
||||||
data
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据id查询电子围栏
|
|
||||||
*/
|
|
||||||
export async function getHjmFence(id: number) {
|
|
||||||
const res = await request.get<ApiResult<HjmFence>>(
|
|
||||||
'/hjm/hjm-fence/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
import type { PageParam } from '@/api/index';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 电子围栏
|
|
||||||
*/
|
|
||||||
export interface HjmFence {
|
|
||||||
// 自增ID
|
|
||||||
id?: number;
|
|
||||||
// 围栏名称
|
|
||||||
name?: string;
|
|
||||||
// 类型 0圆形 1方形
|
|
||||||
type?: number;
|
|
||||||
// 位置
|
|
||||||
location?: string;
|
|
||||||
// 经度
|
|
||||||
longitude?: number;
|
|
||||||
// 纬度
|
|
||||||
latitude?: number;
|
|
||||||
// 区域
|
|
||||||
district?: string;
|
|
||||||
// 轮廓
|
|
||||||
points?: string;
|
|
||||||
// 颜色
|
|
||||||
color?: string;
|
|
||||||
// 填充颜色
|
|
||||||
fillColor?: string;
|
|
||||||
// 圆角
|
|
||||||
radius?: number;
|
|
||||||
// 边框宽度
|
|
||||||
strokeWidth?: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 电子围栏搜索条件
|
|
||||||
*/
|
|
||||||
export interface HjmFenceParam extends PageParam {
|
|
||||||
id?: number;
|
|
||||||
keywords?: string;
|
|
||||||
}
|
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
import request from '@/utils/request';
|
|
||||||
import type { ApiResult, PageResult } from '@/api/index';
|
|
||||||
import type { HjmGpsLog, HjmGpsLogParam } from './model';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询黄家明_gps轨迹
|
|
||||||
*/
|
|
||||||
export async function pageHjmGpsLog(params: HjmGpsLogParam) {
|
|
||||||
const res = await request.get<ApiResult<PageResult<HjmGpsLog>>>(
|
|
||||||
'/hjm/hjm-gps-log/page',
|
|
||||||
params
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询黄家明_gps轨迹列表
|
|
||||||
*/
|
|
||||||
export async function listHjmGpsLog(params?: HjmGpsLogParam) {
|
|
||||||
const res = await request.get<ApiResult<HjmGpsLog[]>>(
|
|
||||||
'/hjm/hjm-gps-log',
|
|
||||||
params
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加黄家明_gps轨迹
|
|
||||||
*/
|
|
||||||
export async function addHjmGpsLog(data: HjmGpsLog) {
|
|
||||||
const res = await request.post<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-gps-log',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改黄家明_gps轨迹
|
|
||||||
*/
|
|
||||||
export async function updateHjmGpsLog(data: HjmGpsLog) {
|
|
||||||
const res = await request.put<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-gps-log',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除黄家明_gps轨迹
|
|
||||||
*/
|
|
||||||
export async function removeHjmGpsLog(id?: number) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-gps-log/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除黄家明_gps轨迹
|
|
||||||
*/
|
|
||||||
export async function removeBatchHjmGpsLog(data: (number | undefined)[]) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-gps-log/batch',
|
|
||||||
{
|
|
||||||
data
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据id查询黄家明_gps轨迹
|
|
||||||
*/
|
|
||||||
export async function getHjmGpsLog(id: number) {
|
|
||||||
const res = await request.get<ApiResult<HjmGpsLog>>(
|
|
||||||
'/hjm/hjm-gps-log/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
import type { PageParam } from '@/api/index';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 黄家明_gps轨迹
|
|
||||||
*/
|
|
||||||
export interface HjmGpsLog {
|
|
||||||
// 自增ID
|
|
||||||
id?: number;
|
|
||||||
// 车辆ID
|
|
||||||
carId?: number;
|
|
||||||
// gps编号
|
|
||||||
gpsNo?: string;
|
|
||||||
// 经度
|
|
||||||
longitude?: string;
|
|
||||||
// 纬度
|
|
||||||
latitude?: string;
|
|
||||||
// 时间
|
|
||||||
ddmmyy?: string;
|
|
||||||
// 时分秒
|
|
||||||
hhmmss?: string;
|
|
||||||
// 速度
|
|
||||||
speed?: string;
|
|
||||||
// 备注
|
|
||||||
comments?: string;
|
|
||||||
// 状态, 0正常, 1冻结
|
|
||||||
status?: number;
|
|
||||||
// 租户id
|
|
||||||
tenantId?: number;
|
|
||||||
// 创建时间
|
|
||||||
createTime?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 黄家明_gps轨迹搜索条件
|
|
||||||
*/
|
|
||||||
export interface HjmGpsLogParam extends PageParam {
|
|
||||||
id?: number;
|
|
||||||
gpsNo?: string;
|
|
||||||
ddmmyy?: string;
|
|
||||||
hhmmss?: string;
|
|
||||||
keywords?: string;
|
|
||||||
}
|
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
import request from '@/utils/request';
|
|
||||||
import type { ApiResult, PageResult } from '@/api/index';
|
|
||||||
import type { HjmQuestions, HjmQuestionsParam } from './model';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询题目
|
|
||||||
*/
|
|
||||||
export async function pageHjmQuestions(params: HjmQuestionsParam) {
|
|
||||||
const res = await request.get<ApiResult<PageResult<HjmQuestions>>>(
|
|
||||||
'/hjm/hjm-questions/page',
|
|
||||||
params
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询题目列表
|
|
||||||
*/
|
|
||||||
export async function listHjmQuestions(params?: HjmQuestionsParam) {
|
|
||||||
const res = await request.get<ApiResult<HjmQuestions[]>>(
|
|
||||||
'/hjm/hjm-questions',
|
|
||||||
params
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加题目
|
|
||||||
*/
|
|
||||||
export async function addHjmQuestions(data: HjmQuestions) {
|
|
||||||
const res = await request.post<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-questions',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改题目
|
|
||||||
*/
|
|
||||||
export async function updateHjmQuestions(data: HjmQuestions) {
|
|
||||||
const res = await request.put<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-questions',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除题目
|
|
||||||
*/
|
|
||||||
export async function removeHjmQuestions(id?: number) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-questions/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除题目
|
|
||||||
*/
|
|
||||||
export async function removeBatchHjmQuestions(data: (number | undefined)[]) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/hjm/hjm-questions/batch',
|
|
||||||
{
|
|
||||||
data
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据id查询题目
|
|
||||||
*/
|
|
||||||
export async function getHjmQuestions(id: number) {
|
|
||||||
const res = await request.get<ApiResult<HjmQuestions>>(
|
|
||||||
'/hjm/hjm-questions/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
import type { PageParam } from '@/api/index';
|
|
||||||
import {HjmChoices} from "@/api/hjm/hjmChoices/model";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 题目
|
|
||||||
*/
|
|
||||||
export interface HjmQuestions {
|
|
||||||
// 自增ID
|
|
||||||
id?: number;
|
|
||||||
// 课程ID
|
|
||||||
courseId?: number;
|
|
||||||
// 课程名称
|
|
||||||
courseName?: string;
|
|
||||||
// 类型 0choice 1fill 2essay
|
|
||||||
type?: number;
|
|
||||||
// 题目
|
|
||||||
question?: string;
|
|
||||||
// 正确答案
|
|
||||||
correctAnswer?: string;
|
|
||||||
// 难度,'easy', 'medium', 'hard'
|
|
||||||
difficulty?: number;
|
|
||||||
// 用户ID
|
|
||||||
userId?: number;
|
|
||||||
// 排序(数字越小越靠前)
|
|
||||||
sortNumber?: number;
|
|
||||||
// 备注
|
|
||||||
comments?: string;
|
|
||||||
// 状态, 0正常, 1冻结
|
|
||||||
status?: number;
|
|
||||||
// 是否删除, 0否, 1是
|
|
||||||
deleted?: number;
|
|
||||||
// 租户id
|
|
||||||
tenantId?: number;
|
|
||||||
// 创建时间
|
|
||||||
createTime?: string;
|
|
||||||
// 修改时间
|
|
||||||
updateTime?: string;
|
|
||||||
// 选项
|
|
||||||
choicesA?: string,
|
|
||||||
choicesB?: string,
|
|
||||||
choicesC?: string,
|
|
||||||
choicesD?: string,
|
|
||||||
choices?: number;
|
|
||||||
choicesList?: HjmChoices[];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 题目搜索条件
|
|
||||||
*/
|
|
||||||
export interface HjmQuestionsParam extends PageParam {
|
|
||||||
id?: number;
|
|
||||||
courseId?: number;
|
|
||||||
keywords?: string;
|
|
||||||
}
|
|
||||||
@@ -128,3 +128,15 @@ export async function submit(data: UserVerify) {
|
|||||||
}
|
}
|
||||||
return Promise.reject(new Error(res.message));
|
return Promise.reject(new Error(res.message));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function myTenantList(params: any) {
|
||||||
|
const res = await request.get<ApiResult<UserVerify>>(
|
||||||
|
'http://127.0.0.1:8080/api/v1/tenants',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,146 +0,0 @@
|
|||||||
import request from '@/utils/request';
|
|
||||||
import type { ApiResult, PageResult } from '@/api/index';
|
|
||||||
import type {
|
|
||||||
Config,
|
|
||||||
CmsWebsiteField,
|
|
||||||
CmsWebsiteFieldParam
|
|
||||||
} from "@/api/cms/cmsWebsiteField/model";
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询项目参数
|
|
||||||
*/
|
|
||||||
export async function pageWebsiteField(params: CmsWebsiteFieldParam) {
|
|
||||||
const res = await request.get<ApiResult<PageResult<CmsWebsiteField>>>(
|
|
||||||
'/cms/cms-website-field/page',
|
|
||||||
{
|
|
||||||
params
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询项目参数列表
|
|
||||||
*/
|
|
||||||
export async function listWebsiteField(params?: CmsWebsiteFieldParam) {
|
|
||||||
const res = await request.get<ApiResult<CmsWebsiteField[]>>(
|
|
||||||
'/cms/cms-website-field',
|
|
||||||
{
|
|
||||||
params
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据id查询项目参数
|
|
||||||
*/
|
|
||||||
export async function getWebsiteField(id: number) {
|
|
||||||
const res = await request.get<ApiResult<CmsWebsiteField>>(
|
|
||||||
'/cms/cms-website-field/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加项目参数
|
|
||||||
*/
|
|
||||||
export async function addWebsiteField(data: CmsWebsiteField) {
|
|
||||||
const res = await request.post<ApiResult<unknown>>(
|
|
||||||
'/cms/cms-website-field',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改项目参数
|
|
||||||
*/
|
|
||||||
export async function updateWebsiteField(data: CmsWebsiteField) {
|
|
||||||
const res = await request.put<ApiResult<unknown>>(
|
|
||||||
'/cms/cms-website-field',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除项目参数
|
|
||||||
*/
|
|
||||||
export async function removeWebsiteField(id?: number) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/cms/cms-website-field/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除项目参数
|
|
||||||
*/
|
|
||||||
export async function removeBatchWebsiteField(data: (number | undefined)[]) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/cms/cms-website-field/batch',
|
|
||||||
{
|
|
||||||
data
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 检查IP是否存在
|
|
||||||
*/
|
|
||||||
export async function checkExistence(
|
|
||||||
field: string,
|
|
||||||
value: string,
|
|
||||||
id?: number
|
|
||||||
) {
|
|
||||||
const res = await request.get<ApiResult<unknown>>(
|
|
||||||
'/cms/cms-website-field/existence',
|
|
||||||
{
|
|
||||||
params: { field, value, id }
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询项目参数列表
|
|
||||||
*/
|
|
||||||
export async function configWebsiteField(params?: CmsWebsiteFieldParam) {
|
|
||||||
const res = await request.get<ApiResult<Config>>(
|
|
||||||
'https://modules.gxwebsoft.com/api/cms/cms-website-field/config',
|
|
||||||
{
|
|
||||||
params
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
import type { PageParam } from '@/api';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 网站参数
|
|
||||||
*/
|
|
||||||
export interface WebsiteField {
|
|
||||||
id?: number;
|
|
||||||
name?: string;
|
|
||||||
value?: string;
|
|
||||||
comments?: string;
|
|
||||||
userId?: number;
|
|
||||||
websiteId?: number;
|
|
||||||
status?: any;
|
|
||||||
sortNumber?: any;
|
|
||||||
createTime?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 网站参数搜索条件
|
|
||||||
*/
|
|
||||||
export interface WebsiteFieldParam extends PageParam {
|
|
||||||
id?: number;
|
|
||||||
userId?: number;
|
|
||||||
websiteId?: number;
|
|
||||||
}
|
|
||||||
@@ -1,168 +0,0 @@
|
|||||||
import request from '@/utils/request';
|
|
||||||
import type { ApiResult, PageResult } from '@/api/index';
|
|
||||||
import type { Website, WebsiteParam } from './model';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取网站信息
|
|
||||||
*/
|
|
||||||
export async function getSiteInfo() {
|
|
||||||
const res = await request.get<ApiResult<Website>>(
|
|
||||||
'/system/website/getSiteInfo'
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 清除缓存
|
|
||||||
*/
|
|
||||||
export async function removeSiteInfoCache(key?: string) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/system/website/clearSiteInfo/' + key
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询网站
|
|
||||||
*/
|
|
||||||
export async function pageWebsite(params: WebsiteParam) {
|
|
||||||
const res = await request.get<ApiResult<PageResult<Website>>>(
|
|
||||||
'/system/website/page',
|
|
||||||
{
|
|
||||||
params
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询网站列表
|
|
||||||
*/
|
|
||||||
export async function listWebsite(params?: WebsiteParam) {
|
|
||||||
const res = await request.get<ApiResult<Website[]>>(
|
|
||||||
'/system/website',
|
|
||||||
{
|
|
||||||
params
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加网站
|
|
||||||
*/
|
|
||||||
export async function addWebsite(data: Website) {
|
|
||||||
const res = await request.post<ApiResult<unknown>>(
|
|
||||||
'/system/website',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改网站
|
|
||||||
*/
|
|
||||||
export async function updateWebsite(data: Website) {
|
|
||||||
const res = await request.put<ApiResult<unknown>>(
|
|
||||||
'/system/website',
|
|
||||||
data
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除网站
|
|
||||||
*/
|
|
||||||
export async function removeWebsite(id?: number) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/system/website/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除网站
|
|
||||||
*/
|
|
||||||
export async function removeBatchWebsite(data: (number | undefined)[]) {
|
|
||||||
const res = await request.del<ApiResult<unknown>>(
|
|
||||||
'/system/website/batch',
|
|
||||||
{
|
|
||||||
data
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改用户状态
|
|
||||||
*/
|
|
||||||
export async function updateWebsiteStatus(websiteId?: number, status?: number) {
|
|
||||||
const res = await request.put<ApiResult<unknown>>(
|
|
||||||
'/system/website/status',
|
|
||||||
{
|
|
||||||
websiteId,
|
|
||||||
status
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据id查询网站
|
|
||||||
*/
|
|
||||||
export async function getWebsite(id: number) {
|
|
||||||
const res = await request.get<ApiResult<Website>>(
|
|
||||||
'/system/website/' + id
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
|
||||||
return res.data;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 检查IP是否存在
|
|
||||||
*/
|
|
||||||
export async function checkExistence(
|
|
||||||
field: string,
|
|
||||||
value: string,
|
|
||||||
id?: number
|
|
||||||
) {
|
|
||||||
const res = await request.get<ApiResult<unknown>>(
|
|
||||||
'/system/website/existence',
|
|
||||||
{
|
|
||||||
params: { field, value, id }
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (res.code === 0) {
|
|
||||||
return res.message;
|
|
||||||
}
|
|
||||||
return Promise.reject(new Error(res.message));
|
|
||||||
}
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
import { WebsiteField } from '@/api/cms/website/field/model';
|
|
||||||
import { Navigation } from '@/api/cms/navigation/model';
|
|
||||||
import { Link } from '@/api/cms/link/model';
|
|
||||||
import { ArrangeCategory } from '@/api/cms/category/model';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 菜单
|
|
||||||
*/
|
|
||||||
export interface Website {
|
|
||||||
websiteId?: number;
|
|
||||||
websiteName?: string;
|
|
||||||
websiteCode?: string;
|
|
||||||
websiteIcon?: string;
|
|
||||||
websiteLogo?: string;
|
|
||||||
websiteDarkLogo?: string;
|
|
||||||
keywords?: string;
|
|
||||||
address?: string;
|
|
||||||
phone?: string;
|
|
||||||
email?: string;
|
|
||||||
websiteType?: string;
|
|
||||||
expirationTime?: string;
|
|
||||||
templateId?: string;
|
|
||||||
industryParent?: string;
|
|
||||||
industryChild?: string;
|
|
||||||
companyId?: number;
|
|
||||||
domain?: string;
|
|
||||||
icpNo?: string;
|
|
||||||
policeNo?: string;
|
|
||||||
comments?: string;
|
|
||||||
sortNumber?: number;
|
|
||||||
createTime?: string;
|
|
||||||
disabled?: boolean;
|
|
||||||
country?: string;
|
|
||||||
province?: string;
|
|
||||||
recommend?: number;
|
|
||||||
city?: string;
|
|
||||||
region?: string;
|
|
||||||
appId?: number;
|
|
||||||
fields?: WebsiteField[];
|
|
||||||
status?: number;
|
|
||||||
tenantId?: number;
|
|
||||||
tenantName?: string;
|
|
||||||
navigations?: Navigation[];
|
|
||||||
categoryList?: ArrangeCategory[];
|
|
||||||
links?: Link[];
|
|
||||||
// 配置信息
|
|
||||||
config?: any;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 菜单搜索参数
|
|
||||||
*/
|
|
||||||
export interface WebsiteParam {
|
|
||||||
title?: string;
|
|
||||||
path?: string;
|
|
||||||
authority?: string;
|
|
||||||
parentId?: number;
|
|
||||||
}
|
|
||||||
@@ -2,9 +2,8 @@ export default defineAppConfig({
|
|||||||
pages: [
|
pages: [
|
||||||
'pages/index/index',
|
'pages/index/index',
|
||||||
'pages/order/order',
|
'pages/order/order',
|
||||||
'pages/kefu/kefu',
|
'pages/cart/cart',
|
||||||
'pages/user/user',
|
'pages/user/user'
|
||||||
// 'pages/find/find'
|
|
||||||
],
|
],
|
||||||
"subpackages": [
|
"subpackages": [
|
||||||
{
|
{
|
||||||
@@ -30,7 +29,6 @@ export default defineAppConfig({
|
|||||||
{
|
{
|
||||||
"root": "user",
|
"root": "user",
|
||||||
"pages": [
|
"pages": [
|
||||||
"car/index",
|
|
||||||
"company/company",
|
"company/company",
|
||||||
"profile/profile",
|
"profile/profile",
|
||||||
"setting/setting",
|
"setting/setting",
|
||||||
|
|||||||
22
src/app.scss
22
src/app.scss
@@ -48,4 +48,26 @@ button[open-type="chooseAvatar"] {
|
|||||||
border-radius: 100px 0 0 100px;
|
border-radius: 100px 0 0 100px;
|
||||||
height: 70px;
|
height: 70px;
|
||||||
}
|
}
|
||||||
|
.cart-add{
|
||||||
|
background: #e9fff2;
|
||||||
|
color: #333333;
|
||||||
|
border-radius: 20px 0 0 20px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 80px;
|
||||||
|
}
|
||||||
|
.cart-buy{
|
||||||
|
background: linear-gradient(-45deg, #1fbfa2, #94e0ce);
|
||||||
|
color: #ffffff;
|
||||||
|
border-radius: 0 20px 20px 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 80px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
image {
|
||||||
|
margin: 0; /* 全局设置图片的 margin */
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,13 +6,9 @@ import './app.scss'
|
|||||||
import {loginByOpenId} from "@/api/layout";
|
import {loginByOpenId} from "@/api/layout";
|
||||||
import {TenantId} from "@/utils/config";
|
import {TenantId} from "@/utils/config";
|
||||||
import {saveStorageByLoginUser} from "@/utils/server";
|
import {saveStorageByLoginUser} from "@/utils/server";
|
||||||
import {mqttStart} from "@/api/hjm/hjmCar";
|
|
||||||
|
|
||||||
function App(props) {
|
function App(props) {
|
||||||
const reload = () => {
|
const reload = () => {
|
||||||
mqttStart().then(() => {
|
|
||||||
console.log('mqttStart')
|
|
||||||
})
|
|
||||||
Taro.login({
|
Taro.login({
|
||||||
success: (res) => {
|
success: (res) => {
|
||||||
loginByOpenId({
|
loginByOpenId({
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import {Avatar, Cell, Space, Tabs, Button, TabPane} from '@nutui/nutui-react-taro'
|
import {Avatar, Cell, Space, Tabs, Button, TabPane} from '@nutui/nutui-react-taro'
|
||||||
import {useEffect, useState, CSSProperties} from "react";
|
import {useEffect, useState, CSSProperties} from "react";
|
||||||
import Taro from '@tarojs/taro';
|
import Taro from '@tarojs/taro';
|
||||||
import {BszxPay} from "@/api/bszx/bszxPay/model";
|
|
||||||
import {InfiniteLoading} from '@nutui/nutui-react-taro'
|
import {InfiniteLoading} from '@nutui/nutui-react-taro'
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import {pageShopOrder} from "@/api/shop/shopOrder";
|
import {pageShopOrder} from "@/api/shop/shopOrder";
|
||||||
@@ -167,7 +166,6 @@ function OrderList(props: any) {
|
|||||||
</div>
|
</div>
|
||||||
<div className={' w-full text-right'}>实付金额:¥{item.payPrice}</div>
|
<div className={' w-full text-right'}>实付金额:¥{item.payPrice}</div>
|
||||||
<Space className={'btn flex justify-end'}>
|
<Space className={'btn flex justify-end'}>
|
||||||
<Button size={'small'}>取消订单</Button>
|
|
||||||
<Button size={'small'}>发货</Button>
|
<Button size={'small'}>发货</Button>
|
||||||
</Space>
|
</Space>
|
||||||
</Space>
|
</Space>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
export default definePageConfig({
|
export default definePageConfig({
|
||||||
navigationBarTitleText: '商品列表',
|
navigationBarTitleText: '购物车',
|
||||||
navigationBarTextStyle: 'black',
|
navigationBarTextStyle: 'black',
|
||||||
navigationStyle: 'custom'
|
navigationStyle: 'custom'
|
||||||
})
|
})
|
||||||
@@ -4,7 +4,7 @@ import {Space, NavBar} from '@nutui/nutui-react-taro'
|
|||||||
import {Search, Received, Scan} from '@nutui/icons-react-taro'
|
import {Search, Received, Scan} from '@nutui/icons-react-taro'
|
||||||
import GoodsList from "@/components/GoodsList";
|
import GoodsList from "@/components/GoodsList";
|
||||||
|
|
||||||
function Kefu() {
|
function Cart() {
|
||||||
const [statusBarHeight, setStatusBarHeight] = useState<number>()
|
const [statusBarHeight, setStatusBarHeight] = useState<number>()
|
||||||
|
|
||||||
useShareTimeline(() => {
|
useShareTimeline(() => {
|
||||||
@@ -64,4 +64,4 @@ function Kefu() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Kefu;
|
export default Cart;
|
||||||
@@ -7,7 +7,7 @@ import {getCmsAd} from "@/api/cms/cmsAd";
|
|||||||
const MyPage = () => {
|
const MyPage = () => {
|
||||||
const [item, setItem] = useState<CmsAd>()
|
const [item, setItem] = useState<CmsAd>()
|
||||||
const reload = () => {
|
const reload = () => {
|
||||||
getCmsAd(433).then(data => {
|
getCmsAd(439).then(data => {
|
||||||
setItem(data)
|
setItem(data)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -18,10 +18,10 @@ const MyPage = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Swiper defaultValue={0} height={item?.height} indicator style={{ height: item?.height, display: 'none' }}>
|
<Swiper defaultValue={0} height={item?.height} indicator style={{ height: item?.height + 'px', display: 'none' }}>
|
||||||
{item?.imageList?.map((item) => (
|
{item?.imageList?.map((item) => (
|
||||||
<Swiper.Item key={item}>
|
<Swiper.Item key={item}>
|
||||||
<Image width="100%" height="100%" src={item.url} mode={'scaleToFill'} style={{ height: item.height }} />
|
<Image width="100%" height="100%" src={item.url} mode={'scaleToFill'} style={{ height: item.height + 'px' }} />
|
||||||
</Swiper.Item>
|
</Swiper.Item>
|
||||||
))}
|
))}
|
||||||
</Swiper>
|
</Swiper>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import {useEffect, useState} from "react";
|
import {useEffect, useState} from "react";
|
||||||
import {Image, Space, Tag, Divider} from '@nutui/nutui-react-taro'
|
import {Image} from '@nutui/nutui-react-taro'
|
||||||
import {Cart} from '@nutui/icons-react-taro'
|
import {Share} from '@nutui/icons-react-taro'
|
||||||
import Taro from '@tarojs/taro'
|
import Taro from '@tarojs/taro'
|
||||||
import {ShopGoods} from "@/api/shop/shopGoods/model";
|
import {ShopGoods} from "@/api/shop/shopGoods/model";
|
||||||
import {pageShopGoods} from "@/api/shop/shopGoods";
|
import {pageShopGoods} from "@/api/shop/shopGoods";
|
||||||
@@ -9,11 +9,11 @@ import './BestSellers.scss'
|
|||||||
|
|
||||||
const BestSellers = () => {
|
const BestSellers = () => {
|
||||||
const [list, setList] = useState<ShopGoods[]>([])
|
const [list, setList] = useState<ShopGoods[]>([])
|
||||||
|
|
||||||
const reload = () => {
|
const reload = () => {
|
||||||
pageShopGoods({}).then(res => {
|
pageShopGoods({}).then(res => {
|
||||||
setList(res?.list || []);
|
setList(res?.list || []);
|
||||||
})
|
})
|
||||||
console.log(list)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -21,48 +21,45 @@ const BestSellers = () => {
|
|||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={'py-0'}>
|
<>
|
||||||
<div className={'flex flex-col justify-between items-center rounded-lg px-2'}>
|
<div className={'py-3'}>
|
||||||
{list?.map((item, index) => {
|
<div className={'flex flex-col justify-between items-center rounded-lg px-2'}>
|
||||||
return (
|
{list?.map((item, index) => {
|
||||||
<div key={index} className={'flex flex-col rounded-lg bg-white shadow-sm w-full mb-5'}
|
return (
|
||||||
onClick={() => Taro.navigateTo({url: '/shop/goodsDetail/index?id=' + item.goodsId})}>
|
<div key={index} className={'flex flex-col rounded-lg bg-white shadow-sm w-full mb-5'}>
|
||||||
<Image src={item.image} mode={'scaleToFill'}
|
<Image src={item.image} mode={'scaleToFill'}
|
||||||
radius="10px 10px 0 0" height="180"/>
|
radius="10px 10px 0 0" height="180"
|
||||||
<div className={'flex flex-col p-2 rounded-lg'}>
|
onClick={() => Taro.navigateTo({url: '/shop/goodsDetail/index?id=' + item.goodsId})}/>
|
||||||
<div>
|
<div className={'flex flex-col p-2 rounded-lg'}>
|
||||||
<div className={'car-no text-sm'}>{item.name} #{item.goodsId}</div>
|
<div>
|
||||||
<div className={'flex justify-between text-xs py-1'}>
|
<div className={'car-no text-sm'}>{item.name}</div>
|
||||||
<span className={'text-orange-500'}>丰江桥佛手瓜面,非油炸,Q弹爽口,营养丰</span>
|
<div className={'flex justify-between text-xs py-1'}>
|
||||||
<span className={'text-gray-400'}>已售 {item.sales}</span>
|
<span className={'text-orange-500'}>{item.comments}</span>
|
||||||
</div>
|
<span className={'text-gray-400'}>已售 {item.sales}</span>
|
||||||
<Space>
|
|
||||||
<Tag plain round background={'#ff0000'}>会客厅循环劵<Divider direction={'vertical'} style={{
|
|
||||||
borderStyle: 'dashed', padding: '0',
|
|
||||||
borderColor: '#fd8989', margin: '0 5px'
|
|
||||||
}}/>每拍2减10元</Tag>
|
|
||||||
<Tag plain round background={'#ff0000'}>会客厅专享<Divider direction={'vertical'} style={{
|
|
||||||
borderStyle: 'dashed', padding: '0',
|
|
||||||
borderColor: '#fd8989', margin: '0 5px'
|
|
||||||
}}/>拍1减3元</Tag>
|
|
||||||
</Space>
|
|
||||||
<div className={'flex justify-between items-center py-2'}>
|
|
||||||
<div className={'flex text-red-500 text-xl items-baseline'}>
|
|
||||||
<span className={'text-xs'}>¥</span>
|
|
||||||
<span className={'font-bold text-2xl'}>19.9</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div className={'buy-btn'}>
|
<div className={'flex justify-between items-center py-2'}>
|
||||||
<div className={'cart-icon'}><Cart size={20} className={'mx-4 mt-2'} /></div>
|
<div className={'flex text-red-500 text-xl items-baseline'}>
|
||||||
<div className={'text-white pl-4 pr-5'}>购买</div>
|
<span className={'text-xs'}>¥</span>
|
||||||
|
<span className={'font-bold text-2xl'}>{item.price}</span>
|
||||||
|
</div>
|
||||||
|
<div className={'buy-btn'}>
|
||||||
|
<div className={'cart-icon'}>
|
||||||
|
<Share size={20} className={'mx-4 mt-2'}
|
||||||
|
onClick={() => Taro.navigateTo({url: '/shop/goodsDetail/index?id=' + item.goodsId})}/>
|
||||||
|
</div>
|
||||||
|
<div className={'text-white pl-4 pr-5'}
|
||||||
|
onClick={() => Taro.navigateTo({url: '/shop/goodsDetail/index?id=' + item.goodsId})}>购买
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
)
|
||||||
)
|
})}
|
||||||
})}
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
export default BestSellers
|
export default BestSellers
|
||||||
|
|||||||
8
src/pages/index/Header.scss
Normal file
8
src/pages/index/Header.scss
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
.header-bg{
|
||||||
|
background: linear-gradient(to bottom, #03605c, #18ae4f);
|
||||||
|
height: 335px;
|
||||||
|
width: 100%;
|
||||||
|
top: 0;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
@@ -6,9 +6,11 @@ import {Popup, Avatar, NavBar} from '@nutui/nutui-react-taro'
|
|||||||
import {getSiteInfo, getUserInfo, getWxOpenId} from "@/api/layout";
|
import {getSiteInfo, getUserInfo, getWxOpenId} from "@/api/layout";
|
||||||
import {TenantId} from "@/utils/config";
|
import {TenantId} from "@/utils/config";
|
||||||
import {getOrganization} from "@/api/system/organization";
|
import {getOrganization} from "@/api/system/organization";
|
||||||
import {myUserVerify} from "@/api/system/userVerify";
|
import {myTenantList, myUserVerify} from "@/api/system/userVerify";
|
||||||
import {CmsWebsite} from "@/api/cms/cmsWebsite/model";
|
import {CmsWebsite} from "@/api/cms/cmsWebsite/model";
|
||||||
import {User} from "@/api/system/user/model";
|
import {User} from "@/api/system/user/model";
|
||||||
|
import './Header.scss';
|
||||||
|
import MySearch from "./MySearch";
|
||||||
|
|
||||||
const Header = () => {
|
const Header = () => {
|
||||||
const [userInfo, setUserInfo] = useState<User>()
|
const [userInfo, setUserInfo] = useState<User>()
|
||||||
@@ -33,7 +35,7 @@ const Header = () => {
|
|||||||
if (data) {
|
if (data) {
|
||||||
setIsLogin(true);
|
setIsLogin(true);
|
||||||
setUserInfo(data)
|
setUserInfo(data)
|
||||||
console.log('用户信息>>>',data.phone)
|
console.log('用户信息>>>', data.phone)
|
||||||
// 保存userId
|
// 保存userId
|
||||||
Taro.setStorageSync('UserId', data.userId)
|
Taro.setStorageSync('UserId', data.userId)
|
||||||
// 获取openId
|
// 获取openId
|
||||||
@@ -46,27 +48,27 @@ const Header = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 是否已认证
|
// 是否已认证
|
||||||
if(data.certification){
|
if (data.certification) {
|
||||||
Taro.setStorageSync('Certification','1')
|
Taro.setStorageSync('Certification', '1')
|
||||||
}
|
}
|
||||||
// 机构ID
|
// 机构ID
|
||||||
Taro.setStorageSync('OrganizationId',data.organizationId)
|
Taro.setStorageSync('OrganizationId', data.organizationId)
|
||||||
// 父级机构ID
|
// 父级机构ID
|
||||||
if(Number(data.organizationId) > 0){
|
if (Number(data.organizationId) > 0) {
|
||||||
getOrganization(Number(data.organizationId)).then(res => {
|
getOrganization(Number(data.organizationId)).then(res => {
|
||||||
Taro.setStorageSync('OrganizationParentId',res.parentId)
|
Taro.setStorageSync('OrganizationParentId', res.parentId)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 管理员
|
// 管理员
|
||||||
const isKdy = data.roles?.findIndex(item => item.roleCode == 'admin')
|
const isKdy = data.roles?.findIndex(item => item.roleCode == 'admin')
|
||||||
if(isKdy != -1){
|
if (isKdy != -1) {
|
||||||
Taro.setStorageSync('RoleName', '管理')
|
Taro.setStorageSync('RoleName', '管理')
|
||||||
Taro.setStorageSync('RoleCode', 'admin')
|
Taro.setStorageSync('RoleCode', 'admin')
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// 注册用户
|
// 注册用户
|
||||||
const isUser = data.roles?.findIndex(item => item.roleCode == 'user')
|
const isUser = data.roles?.findIndex(item => item.roleCode == 'user')
|
||||||
if(isUser != -1){
|
if (isUser != -1) {
|
||||||
Taro.setStorageSync('RoleName', '注册用户')
|
Taro.setStorageSync('RoleName', '注册用户')
|
||||||
Taro.setStorageSync('RoleCode', 'user')
|
Taro.setStorageSync('RoleCode', 'user')
|
||||||
return false;
|
return false;
|
||||||
@@ -78,10 +80,14 @@ const Header = () => {
|
|||||||
});
|
});
|
||||||
// 认证信息
|
// 认证信息
|
||||||
myUserVerify({status: 1}).then(data => {
|
myUserVerify({status: 1}).then(data => {
|
||||||
if(data?.realName){
|
if (data?.realName) {
|
||||||
Taro.setStorageSync('RealName',data.realName)
|
Taro.setStorageSync('RealName', data.realName)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
//
|
||||||
|
myTenantList({page: 2, page_size: 50}).then(res => {
|
||||||
|
console.log(res, '...res...lei')
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 获取用户手机号 */
|
/* 获取用户手机号 */
|
||||||
@@ -107,7 +113,7 @@ const Header = () => {
|
|||||||
TenantId
|
TenantId
|
||||||
},
|
},
|
||||||
success: function (res) {
|
success: function (res) {
|
||||||
if(res.data.code == 1){
|
if (res.data.code == 1) {
|
||||||
Taro.showToast({
|
Taro.showToast({
|
||||||
title: res.data.message,
|
title: res.data.message,
|
||||||
icon: 'error',
|
icon: 'error',
|
||||||
@@ -138,6 +144,9 @@ const Header = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
<div className={'fixed top-0 header-bg'}>
|
||||||
|
<MySearch done={reload}/>
|
||||||
|
</div>
|
||||||
<NavBar
|
<NavBar
|
||||||
style={{marginTop: `${statusBarHeight}px`, marginBottom: '0px', backgroundColor: 'transparent'}}
|
style={{marginTop: `${statusBarHeight}px`, marginBottom: '0px', backgroundColor: 'transparent'}}
|
||||||
onBackClick={() => {
|
onBackClick={() => {
|
||||||
@@ -162,8 +171,8 @@ const Header = () => {
|
|||||||
size="22"
|
size="22"
|
||||||
src={config?.websiteLogo}
|
src={config?.websiteLogo}
|
||||||
/>
|
/>
|
||||||
{config?.websiteName}
|
<span className={'text-white'}>{config?.websiteName}</span>
|
||||||
<TriangleDown size={9}/>
|
<TriangleDown className={'text-white'} size={9}/>
|
||||||
</div>
|
</div>
|
||||||
)}>
|
)}>
|
||||||
</NavBar>
|
</NavBar>
|
||||||
|
|||||||
@@ -30,20 +30,18 @@ const Page = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
loading ? (<Loading>加载中</Loading>) :
|
loading ? (<Loading>加载中</Loading>) :
|
||||||
<div className={'p-3'}>
|
<div className={'p-2 z-50 mt-1'}>
|
||||||
<div className={'rounded-2xl'}>
|
<div className={'flex justify-between pb-2 p-2 bg-white rounded-xl shadow-sm'}>
|
||||||
<div className={'flex justify-between pb-2 px-1'}>
|
{
|
||||||
{
|
navItems.map((item, index) => (
|
||||||
navItems.map((item, index) => (
|
<div key={index} className={'text-center'} onClick={() => onNav(item)}>
|
||||||
<div key={index} className={'text-center'} onClick={() => onNav(item)}>
|
<div className={'flex flex-col justify-center items-center p-1'}>
|
||||||
<div className={'flex flex-col justify-center items-center'}>
|
<Image src={item.icon} height={36} width={36}/>
|
||||||
<Image src={item.icon} height={36} width={36}/>
|
<div className={'mt-1 text-gray-600'} style={{fontSize: '14px'}}>{item?.title}</div>
|
||||||
<div className={'mt-2 text-gray-600'} style={{fontSize: '14px'}}>{item?.title}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
))
|
</div>
|
||||||
}
|
))
|
||||||
</div>
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -22,15 +22,16 @@ function MySearch(props) {
|
|||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={'z-20 left-0 w-full'}>
|
<div className={'z-50 left-0 w-full'}>
|
||||||
<div className={'px-2'}>
|
<div className={'px-2'}>
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
background: '#fff',
|
background: '#ffffff',
|
||||||
padding: '0 7px',
|
padding: '0 7px',
|
||||||
borderRadius: '20px'
|
borderRadius: '20px',
|
||||||
|
marginTop: '100px',
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Search size={18} className={'ml-2 text-gray-400'}/>
|
<Search size={18} className={'ml-2 text-gray-400'}/>
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import Header from './Header';
|
import Header from './Header';
|
||||||
import MySearch from "./MySearch";
|
|
||||||
import BestSellers from './BestSellers';
|
import BestSellers from './BestSellers';
|
||||||
import Taro from '@tarojs/taro';
|
import Taro from '@tarojs/taro';
|
||||||
import {useShareAppMessage, useShareTimeline} from "@tarojs/taro"
|
import {useShareAppMessage, useShareTimeline} from "@tarojs/taro"
|
||||||
@@ -103,10 +102,9 @@ function Home() {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Header/>
|
<Header/>
|
||||||
<MySearch done={reload}/>
|
<div className={'flex flex-col mt-12'}>
|
||||||
<div className={'flex flex-col mt-3'}>
|
|
||||||
<Banner />
|
|
||||||
<Menu />
|
<Menu />
|
||||||
|
<Banner />
|
||||||
<BestSellers/>
|
<BestSellers/>
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
export default definePageConfig({
|
export default definePageConfig({
|
||||||
navigationBarTitleText: '商品详情',
|
navigationBarTitleText: '商品详情',
|
||||||
navigationBarTextStyle: 'black'
|
navigationBarTextStyle: 'black',
|
||||||
|
navigationStyle: 'custom'
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -3,3 +3,15 @@
|
|||||||
border-radius: 100px 0 0 100px;
|
border-radius: 100px 0 0 100px;
|
||||||
height: 70px;
|
height: 70px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 去掉 RichText 中图片的间距 */
|
||||||
|
rich-text img {
|
||||||
|
margin: 0 !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 在全局样式或组件样式文件中 */
|
||||||
|
.no-margin {
|
||||||
|
margin: 0 !important; /* 使用 !important 来确保覆盖默认样式 */
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,70 +1,193 @@
|
|||||||
import {useEffect, useState} from "react";
|
import {useEffect, useState} from "react";
|
||||||
import {Image, Space, Tag, Divider} from '@nutui/nutui-react-taro'
|
import {Image, Divider, Badge} from "@nutui/nutui-react-taro";
|
||||||
import {Cart} from '@nutui/icons-react-taro'
|
import {ArrowLeft, Headphones, Share, Cart} from "@nutui/icons-react-taro";
|
||||||
import Taro from '@tarojs/taro'
|
import Taro, {useShareAppMessage, useShareTimeline} from "@tarojs/taro";
|
||||||
|
import {RichText, View} from '@tarojs/components'
|
||||||
import {ShopGoods} from "@/api/shop/shopGoods/model";
|
import {ShopGoods} from "@/api/shop/shopGoods/model";
|
||||||
import {getShopGoods} from "@/api/shop/shopGoods";
|
import {getShopGoods} from "@/api/shop/shopGoods";
|
||||||
import './index.scss'
|
import {Swiper} from '@nutui/nutui-react-taro'
|
||||||
|
import {wxParse} from "@/utils/common";
|
||||||
|
import "./index.scss";
|
||||||
|
|
||||||
const GoodsDetail = () => {
|
const GoodsDetail = () => {
|
||||||
const [goods, setGoods] = useState<ShopGoods | null>(null);
|
const [goods, setGoods] = useState<ShopGoods | null>(null);
|
||||||
|
const [files, setFiles] = useState<any[]>([]);
|
||||||
const router = Taro.getCurrentInstance().router;
|
const router = Taro.getCurrentInstance().router;
|
||||||
const goodsId = router?.params?.id;
|
const goodsId = router?.params?.id;
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (goodsId) {
|
if (goodsId) {
|
||||||
getShopGoods(Number(goodsId)).then(res => {
|
getShopGoods(Number(goodsId))
|
||||||
setGoods(res);
|
.then((res) => {
|
||||||
}).catch(error => {
|
// 处理富文本内容,去掉图片间距
|
||||||
console.error("Failed to fetch goods detail:", error);
|
if (res.content) {
|
||||||
});
|
res.content = wxParse(res.content);
|
||||||
|
}
|
||||||
|
setGoods(res);
|
||||||
|
if (res.files) {
|
||||||
|
const arr = JSON.parse(res.files);
|
||||||
|
arr.length > 0 && setFiles(arr);
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
console.error("Failed to fetch goods detail:", error);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}, [goodsId]);
|
}, [goodsId]);
|
||||||
|
|
||||||
|
// 分享给好友
|
||||||
|
useShareAppMessage(() => {
|
||||||
|
return {
|
||||||
|
title: goods?.name || '精选商品',
|
||||||
|
path: `/shop/goodsDetail/index?id=${goodsId}`,
|
||||||
|
imageUrl: goods?.image, // 分享图片
|
||||||
|
success: function (res: any) {
|
||||||
|
console.log('分享成功', res);
|
||||||
|
Taro.showToast({
|
||||||
|
title: '分享成功',
|
||||||
|
icon: 'success',
|
||||||
|
duration: 2000
|
||||||
|
});
|
||||||
|
},
|
||||||
|
fail: function (res: any) {
|
||||||
|
console.log('分享失败', res);
|
||||||
|
Taro.showToast({
|
||||||
|
title: '分享失败',
|
||||||
|
icon: 'none',
|
||||||
|
duration: 2000
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
// 分享到朋友圈
|
||||||
|
useShareTimeline(() => {
|
||||||
|
return {
|
||||||
|
title: `${goods?.name || '精选商品'} - 云上商店`,
|
||||||
|
path: `/shop/goodsDetail/index?id=${goodsId}`,
|
||||||
|
imageUrl: goods?.image
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
if (!goods) {
|
if (!goods) {
|
||||||
return <div>加载中...</div>;
|
return <div>加载中...</div>;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={'py-0'}>
|
<div className={"py-0"}>
|
||||||
<div className={'flex flex-col justify-between items-center rounded-lg px-2'}>
|
<div
|
||||||
<div className={'flex flex-col rounded-lg bg-white shadow-sm w-full mb-5'}>
|
className={
|
||||||
<Image src={goods.image} mode={'scaleToFill'}
|
"fixed z-10 bg-white flex justify-center items-center font-bold shadow-sm opacity-70"
|
||||||
radius="10px 10px 0 0" height="300"/>
|
}
|
||||||
<div className={'flex flex-col p-2 rounded-lg'}>
|
style={{
|
||||||
<div>
|
borderRadius: "100%",
|
||||||
<div className={'car-no text-sm'}>{goods.name} #{goods.goodsId}</div>
|
width: "32px",
|
||||||
<div className={'flex justify-between text-xs py-1'}>
|
height: "32px",
|
||||||
<span className={'text-orange-500'}>丰江桥佛手瓜面,非油炸,Q弹爽口,营养丰</span>
|
top: "50px",
|
||||||
<span className={'text-gray-400'}>已售 {goods.sales}</span>
|
left: "10px",
|
||||||
</div>
|
}}
|
||||||
<Space>
|
onClick={() => Taro.navigateBack()}
|
||||||
<Tag plain round background={'#ff0000'}>会客厅循环劵<Divider direction={'vertical'} style={{
|
>
|
||||||
borderStyle: 'dashed', padding: '0',
|
<ArrowLeft size={14}/>
|
||||||
borderColor: '#fd8989', margin: '0 5px'
|
</div>
|
||||||
}}/>每拍2减10元</Tag>
|
<div className={
|
||||||
<Tag plain round background={'#ff0000'}>会客厅专享<Divider direction={'vertical'} style={{
|
"fixed z-10 bg-white flex justify-center items-center font-bold shadow-sm opacity-90"
|
||||||
borderStyle: 'dashed', padding: '0',
|
}
|
||||||
borderColor: '#fd8989', margin: '0 5px'
|
style={{
|
||||||
}}/>拍1减3元</Tag>
|
borderRadius: "100%",
|
||||||
</Space>
|
width: "32px",
|
||||||
<div className={'flex justify-between items-center py-2'}>
|
height: "32px",
|
||||||
|
top: "50px",
|
||||||
|
right: "110px",
|
||||||
|
}}>
|
||||||
|
<Badge value={8} top="-2" right="2">
|
||||||
|
<div style={{display: 'flex', alignItems: 'center'}}>
|
||||||
|
<Cart size={16}/>
|
||||||
|
</div>
|
||||||
|
</Badge>
|
||||||
|
</div>
|
||||||
|
{
|
||||||
|
files.length > 0 && (
|
||||||
|
<Swiper defaultValue={0} indicator height={'350px'}>
|
||||||
|
{files.map((item) => (
|
||||||
|
<Swiper.Item key={item}>
|
||||||
|
<Image width="100%" height={'100%'} src={item.url} mode={'scaleToFill'}/>
|
||||||
|
</Swiper.Item>
|
||||||
|
))}
|
||||||
|
</Swiper>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
{
|
||||||
|
files.length == 0 && (
|
||||||
|
<Image
|
||||||
|
src={goods.image}
|
||||||
|
mode={"scaleToFill"}
|
||||||
|
radius="10px 10px 0 0"
|
||||||
|
height="300"
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
<div
|
||||||
|
className={"flex flex-col justify-between items-center rounded-lg px-2"}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className={
|
||||||
|
"flex flex-col rounded-lg bg-white shadow-sm w-full mt-2"
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<div className={"flex flex-col p-2 rounded-lg"}>
|
||||||
|
<>
|
||||||
|
<div className={'flex justify-between'}>
|
||||||
<div className={'flex text-red-500 text-xl items-baseline'}>
|
<div className={'flex text-red-500 text-xl items-baseline'}>
|
||||||
<span className={'text-xs'}>¥</span>
|
<span className={'text-xs'}>¥</span>
|
||||||
<span className={'font-bold text-2xl'}>{goods.price}</span>
|
<span className={'font-bold text-2xl'}>{goods.price}</span>
|
||||||
</div>
|
</div>
|
||||||
<div className={'buy-btn'} onClick={() => Taro.navigateTo({url: '/shop/orderConfirm/index?goodsId=' + goods.goodsId})}>
|
<span className={"text-gray-400 text-xs"}>已售 {goods.sales}</span>
|
||||||
<div className={'cart-icon'}><Cart size={20} className={'mx-4 mt-2'} /></div>
|
</div>
|
||||||
<div className={'text-white pl-4 pr-5'}>购买</div>
|
<div className={'flex justify-between items-center'}>
|
||||||
|
<div className={'goods-info'}>
|
||||||
|
<div className={"car-no text-lg"}>
|
||||||
|
{goods.name}
|
||||||
|
</div>
|
||||||
|
<div className={"flex justify-between text-xs py-1"}>
|
||||||
|
<span className={"text-orange-500"}>
|
||||||
|
{goods.comments}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<button
|
||||||
|
className={'flex flex-col justify-center items-center text-gray-500 px-1 gap-1 text-nowrap whitespace-nowrap'}
|
||||||
|
open-type="share"><Share
|
||||||
|
size={20}/>
|
||||||
|
<span className={'text-xs'}>分享</span>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div className={'py-2'}>
|
</>
|
||||||
<h3>商品详情</h3>
|
|
||||||
<div dangerouslySetInnerHTML={{ __html: goods.content || '' }} />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div className={"mt-2 py-2"}>
|
||||||
|
<Divider>商品详情</Divider>
|
||||||
|
<RichText nodes={goods.content || '内容详情'}/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/*底部购买按钮*/}
|
||||||
|
<div className={'fixed bg-white w-full bottom-0 left-0 pt-4 pb-10'}>
|
||||||
|
<View className={'btn-bar flex justify-between items-center'}>
|
||||||
|
<div className={'flex justify-center items-center mx-4'}>
|
||||||
|
<button open-type="contact" className={'flex items-center'}>
|
||||||
|
<Headphones size={18} style={{marginRight: '4px'}}/>咨询
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div className={'buy-btn mx-4'}>
|
||||||
|
<div className={'cart-add px-4 text-sm'}
|
||||||
|
onClick={() => Taro.showToast({title: '加入购物车成功', icon: 'success'})}>加入购物车
|
||||||
|
</div>
|
||||||
|
<div className={'cart-buy pl-4 pr-5 text-sm'}
|
||||||
|
onClick={() => Taro.navigateTo({url: '/shop/orderConfirm/index'})}>立即购买
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</View>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
import {useEffect} from "react";
|
|
||||||
import {Image, Space} from '@nutui/nutui-react-taro'
|
|
||||||
import Taro from '@tarojs/taro'
|
|
||||||
|
|
||||||
const BestSellers = (props: any) => {
|
|
||||||
const reload = () => {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
reload()
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className={'px-2 mb-4'}>
|
|
||||||
<div className={'flex flex-col justify-between items-center rounded-lg px-3'}>
|
|
||||||
{props.data?.map((item, index) => {
|
|
||||||
return (
|
|
||||||
<div key={index} className={'flex bg-white rounded-lg w-full p-3 mb-3'}
|
|
||||||
onClick={() => Taro.navigateTo({url: '/hjm/query?id=' + item.code})}>
|
|
||||||
{item.image && (
|
|
||||||
<Image src={JSON.parse(item.image)[0].url} mode={'scaleToFill'}
|
|
||||||
radius="10%" width="80" height="80"/>
|
|
||||||
)}
|
|
||||||
<div className={'mx-3 flex flex-col'}>
|
|
||||||
<Space direction={'vertical'}>
|
|
||||||
<div className={'car-no text-lg font-bold'}>{item.code}</div>
|
|
||||||
<div className={'flex text-xs text-gray-500'}>快递公司:<span
|
|
||||||
className={'text-gray-700'}>{item.parentOrganization}</span></div>
|
|
||||||
<div className={'flex text-xs text-gray-500'}>保险状态:<span className={'text-green-600'}>{item.insuranceStatus}</span>
|
|
||||||
</div>
|
|
||||||
<div className={'flex text-xs text-gray-500'}>绑定操作员:<span
|
|
||||||
className={'text-gray-700'}>{item.driver}</span></div>
|
|
||||||
</Space>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
})}
|
|
||||||
</div>
|
|
||||||
<div style={{height: '170px'}}></div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
export default BestSellers
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
export default definePageConfig({
|
|
||||||
navigationBarTitleText: '车辆管理',
|
|
||||||
navigationStyle: 'custom'
|
|
||||||
})
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
import {useEffect, useState} from "react";
|
|
||||||
import Taro from '@tarojs/taro'
|
|
||||||
import {ArrowLeft} from '@nutui/icons-react-taro'
|
|
||||||
import {NavBar, InfiniteLoading} from '@nutui/nutui-react-taro'
|
|
||||||
import {pageHjmCar} from "@/api/hjm/hjmCar";
|
|
||||||
import {HjmCar} from "@/api/hjm/hjmCar/model";
|
|
||||||
import BestSellers from "./BestSellers";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 文章终极列表
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
const Index = () => {
|
|
||||||
const [statusBarHeight, setStatusBarHeight] = useState<number>()
|
|
||||||
const [list, setList] = useState<HjmCar[]>([])
|
|
||||||
|
|
||||||
const reload = () => {
|
|
||||||
// 获取车辆列表
|
|
||||||
pageHjmCar({driverId: Taro.getStorageSync('UserId')}).then(res => {
|
|
||||||
setList(res?.list || [])
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
Taro.getSystemInfo({
|
|
||||||
success: (res) => {
|
|
||||||
setStatusBarHeight(res.statusBarHeight)
|
|
||||||
},
|
|
||||||
})
|
|
||||||
reload()
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<NavBar
|
|
||||||
fixed={true}
|
|
||||||
style={{marginTop: `${statusBarHeight}px`}}
|
|
||||||
onBackClick={() => {
|
|
||||||
}}
|
|
||||||
left={
|
|
||||||
<>
|
|
||||||
<ArrowLeft size={18} onClick={() => {Taro.navigateBack()}} />
|
|
||||||
{/*<SearchBar shape="round" maxLength={5} style={{paddingLeft: '1px'}}/>*/}
|
|
||||||
{/*<div className={'flex flex-col text-center justify-center items-center'}>*/}
|
|
||||||
{/* <Filter size={14}/>*/}
|
|
||||||
{/* <div className={'text-xs text-gray-600 whitespace-nowrap'}>筛选</div>*/}
|
|
||||||
{/*</div>*/}
|
|
||||||
</>
|
|
||||||
}
|
|
||||||
>
|
|
||||||
<span>车辆管理</span>
|
|
||||||
</NavBar>
|
|
||||||
<InfiniteLoading
|
|
||||||
className={'w-full fixed left-0 top-24'}
|
|
||||||
>
|
|
||||||
<BestSellers data={list}/>
|
|
||||||
</InfiniteLoading>
|
|
||||||
</>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
export default Index
|
|
||||||
@@ -36,11 +36,11 @@ export function fileToBase64(filePath) {
|
|||||||
* @param htmlText
|
* @param htmlText
|
||||||
*/
|
*/
|
||||||
export function wxParse(htmlText) {
|
export function wxParse(htmlText) {
|
||||||
// Replace <img> tags with max-width and height styles
|
// Replace <img> tags with max-width, height and margin styles to remove spacing
|
||||||
htmlText = htmlText.replace(/\<img/gi, '<img style="max-width:100%;height:auto;"');
|
htmlText = htmlText.replace(/\<img/gi, '<img style="max-width:100%;height:auto;margin:0;padding:0;display:block;"');
|
||||||
|
|
||||||
// Replace style attributes that do not contain text-align
|
// Replace style attributes that do not contain text-align, add margin:0 to remove spacing
|
||||||
htmlText = htmlText.replace(/style\s*?=\s*?(['"])(?!.*?text-align)[\s\S]*?\1/ig, 'style="max-width:100%;height:auto;"');
|
htmlText = htmlText.replace(/style\s*?=\s*?(['"])(?!.*?text-align)[\s\S]*?\1/ig, 'style="max-width:100%;height:auto;margin:0;padding:0;display:block;"');
|
||||||
|
|
||||||
return htmlText;
|
return htmlText;
|
||||||
}
|
}
|
||||||
@@ -65,3 +65,28 @@ export function copyText(text: string) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分享商品链接
|
||||||
|
* @param goodsId 商品ID
|
||||||
|
* @param goodsName 商品名称
|
||||||
|
*/
|
||||||
|
export function shareGoodsLink(goodsId: string | number, goodsName?: string) {
|
||||||
|
// 构建分享链接,这里需要根据你的实际域名调整
|
||||||
|
const baseUrl = 'https://your-domain.com'; // 请替换为你的实际域名
|
||||||
|
const shareUrl = `${baseUrl}/shop/goodsDetail/index?id=${goodsId}`;
|
||||||
|
|
||||||
|
copyText(shareUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 显示分享引导提示
|
||||||
|
*/
|
||||||
|
export function showShareGuide() {
|
||||||
|
Taro.showModal({
|
||||||
|
title: '分享提示',
|
||||||
|
content: '请点击右上角的"..."按钮,然后选择"转发"来分享给好友,或选择"分享到朋友圈"',
|
||||||
|
showCancel: false,
|
||||||
|
confirmText: '知道了'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
export default definePageConfig({
|
|
||||||
navigationBarTitleText: '店铺设置'
|
|
||||||
})
|
|
||||||
@@ -1,152 +0,0 @@
|
|||||||
import {useEffect, useState} from "react";
|
|
||||||
import {ConfigProvider} from '@nutui/nutui-react-taro'
|
|
||||||
import Taro, {getCurrentInstance} from '@tarojs/taro'
|
|
||||||
import {updateUserInfo} from "@/api/layout";
|
|
||||||
import {Uploader} from '@nutui/nutui-react-taro'
|
|
||||||
|
|
||||||
const {router} = getCurrentInstance()
|
|
||||||
import {
|
|
||||||
Form,
|
|
||||||
Button,
|
|
||||||
Input
|
|
||||||
} from '@nutui/nutui-react-taro'
|
|
||||||
import {CmsWebsite} from "@/api/cms/cmsWebsite/model";
|
|
||||||
import {getSiteInfo} from "@/api/layout";
|
|
||||||
|
|
||||||
function Modify() {
|
|
||||||
const formId = Number(router?.params.id)
|
|
||||||
|
|
||||||
const [form] = Form.useForm()
|
|
||||||
const [FormData, setFormData] = useState<CmsWebsite>(
|
|
||||||
{
|
|
||||||
websiteId: undefined,
|
|
||||||
websiteName: undefined,
|
|
||||||
websiteLogo: undefined,
|
|
||||||
websiteCode: undefined,
|
|
||||||
phone: undefined,
|
|
||||||
address: undefined,
|
|
||||||
comments: undefined
|
|
||||||
}
|
|
||||||
)
|
|
||||||
const reload = () => {
|
|
||||||
// 获取用户信息
|
|
||||||
getSiteInfo().then((data) => {
|
|
||||||
setFormData(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 提交表单
|
|
||||||
const submitSucceed = (values: any) => {
|
|
||||||
console.log(values, 'values')
|
|
||||||
console.log(formId, 'formId>>')
|
|
||||||
if (values.type === 1 && values.name == '') {
|
|
||||||
Taro.showToast({
|
|
||||||
title: '请填写单位名称',
|
|
||||||
icon: 'error'
|
|
||||||
});
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
updateUserInfo(values).then(() => {
|
|
||||||
Taro.showToast({title: `保存成功`, icon: 'success'})
|
|
||||||
return Taro.navigateBack()
|
|
||||||
}).catch(() => {
|
|
||||||
Taro.showToast({
|
|
||||||
title: '保存失败',
|
|
||||||
icon: 'error'
|
|
||||||
});
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const submitFailed = (error: any) => {
|
|
||||||
console.log(error, 'err...')
|
|
||||||
// Taro.showToast({ title: error[0].message, icon: 'error' })
|
|
||||||
}
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
reload()
|
|
||||||
}, [form]);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<ConfigProvider>
|
|
||||||
<Form
|
|
||||||
divider
|
|
||||||
initialValues={FormData}
|
|
||||||
labelPosition="left"
|
|
||||||
onFinish={(values) => submitSucceed(values)}
|
|
||||||
onFinishFailed={(errors) => submitFailed(errors)}
|
|
||||||
footer={
|
|
||||||
<div
|
|
||||||
style={{
|
|
||||||
display: 'flex',
|
|
||||||
justifyContent: 'center',
|
|
||||||
width: '100%'
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<Button nativeType="submit" block type="info">
|
|
||||||
提交
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
>
|
|
||||||
<Form.Item
|
|
||||||
label="LOGO"
|
|
||||||
name="websiteLogo"
|
|
||||||
initialValue={[
|
|
||||||
{
|
|
||||||
name: 'file1.png',
|
|
||||||
url: FormData.websiteLogo,
|
|
||||||
status: 'success',
|
|
||||||
message: 'success',
|
|
||||||
type: 'image',
|
|
||||||
uid: '122',
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<Uploader url={FormData.websiteLogo}/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label={'店铺名称'}
|
|
||||||
name="websiteName"
|
|
||||||
initialValue={FormData.websiteName}
|
|
||||||
rules={[{message: '请输入店铺名称'}]}
|
|
||||||
>
|
|
||||||
<Input placeholder="请输入姓名或单位名称" type="text"/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label={'详细地址'}
|
|
||||||
name="address"
|
|
||||||
initialValue={FormData.address}
|
|
||||||
rules={[{message: '请输入详细地址'}]}
|
|
||||||
>
|
|
||||||
<Input placeholder="请输入详细地址" type="text"/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="备注信息"
|
|
||||||
name="comments"
|
|
||||||
initialValue={FormData.comments}
|
|
||||||
rules={[{message: '备注信息'}]}
|
|
||||||
>
|
|
||||||
<Input
|
|
||||||
placeholder={'可注明身份,如:家长、小学教师、公务员等'}/>
|
|
||||||
</Form.Item>
|
|
||||||
</Form>
|
|
||||||
</ConfigProvider>
|
|
||||||
{/*<Cascader*/}
|
|
||||||
{/* popupProps={{*/}
|
|
||||||
{/* className: 'cascader-popup',*/}
|
|
||||||
{/* }}*/}
|
|
||||||
{/* visible={navBarState.visible}*/}
|
|
||||||
{/* optionKey={{valueKey: 'name', textKey: 'name', childrenKey: 'children'}}*/}
|
|
||||||
{/* title="选择所在班级"*/}
|
|
||||||
{/* options={classList}*/}
|
|
||||||
{/* closeable*/}
|
|
||||||
{/* onChange={change6}*/}
|
|
||||||
{/* onClose={() => {*/}
|
|
||||||
{/* changeNarBar(false)*/}
|
|
||||||
{/* }}*/}
|
|
||||||
{/*/>*/}
|
|
||||||
</>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
export default Modify
|
|
||||||
Reference in New Issue
Block a user