feat(欢迎页): 添加动态获取小程序二维码功能

- 新增二维码API模块及相关类型定义
- 在欢迎页添加动态获取二维码逻辑
- 使用VITE_APP_BASE_API拼接二维码地址
- 保留静态二维码作为备用方案
This commit is contained in:
dzq 2025-12-03 11:36:43 +08:00
parent 529408a739
commit 7fec91ae35
2 changed files with 186 additions and 1 deletions

164
src/api/qy/mpQrcode.ts Normal file
View File

@ -0,0 +1,164 @@
import { http } from "@/utils/http";
/**
* DTO
*/
export interface QyMpQrcodeDTO {
/** 二维码ID */
qrcodeId?: number;
/** 企业微信ID */
corpid?: string;
/** 二维码名称 */
name?: string;
/** 小程序码参数 */
scene?: string;
/** 小程序页面路径 */
page?: string;
/** 二维码链接 */
qrcodeUrl?: string;
/** 创建者 */
creatorName?: string;
/** 创建时间 */
createTimeStr?: string;
/** 更新者 */
updaterName?: string;
/** 更新时间 */
updateTimeStr?: string;
/** 删除标志 */
deleted?: boolean;
}
/**
*
*/
export interface QyMpQrcodeEntity {
/** 二维码唯一ID */
qrcodeId?: number;
/** 企业微信id */
corpid?: string;
/** 二维码名称 */
name?: string;
/** 小程序码参数最大32个可见字符 */
scene?: string;
/** 小程序页面路径 */
page?: string;
/** 二维码链接 */
qrcodeUrl?: string;
}
/**
*
*/
export interface SearchMpQrcodeQuery extends BasePageQuery {
/** 企业微信ID */
corpid?: string;
/** 二维码名称 */
name?: string;
/** 小程序码参数 */
scene?: string;
/** 创建开始时间 */
createStartTime?: string;
/** 创建结束时间 */
createEndTime?: string;
}
/**
*
*/
export interface AddMpQrcodeCommand {
/** 企业微信ID */
corpid: string;
/** 二维码名称 */
name: string;
/** 小程序码参数 */
scene?: string;
/** 小程序页面路径 */
page?: string;
}
/**
*
*/
export interface UpdateMpQrcodeCommand extends AddMpQrcodeCommand {
/** 二维码ID */
qrcodeId: number;
}
/**
*
* @param params
* @returns
*/
export const getMpQrcodeListApi = (params: SearchMpQrcodeQuery) => {
return http.request<ResponseData<PageDTO<QyMpQrcodeDTO>>>("get", "/qywx/mp-qrcodes", {
params
});
};
/**
*
* @param id ID
* @returns
*/
export const getMpQrcodeDetailApi = (id: number) => {
return http.request<ResponseData<QyMpQrcodeDTO>>("get", `/qywx/mp-qrcodes/${id}`);
};
/**
*
* @param data
* @returns
*/
export const addMpQrcodeApi = (data: AddMpQrcodeCommand) => {
return http.request<ResponseData<void>>("post", "/qywx/mp-qrcodes", { data });
};
/**
*
* @param id ID
* @param data
* @returns
*/
export const updateMpQrcodeApi = (id: number, data: UpdateMpQrcodeCommand) => {
return http.request<ResponseData<void>>("put", `/qywx/mp-qrcodes/${id}`, { data });
};
/**
*
* @param ids ID数组
* @returns
*/
export const deleteMpQrcodeApi = (ids: number[]) => {
return http.request<ResponseData<void>>("delete", `/qywx/mp-qrcodes/${ids.join(',')}`);
};
/**
* ID查询二维码
* @param corpid ID
* @returns
*/
export const getMpQrcodeByCorpidApi = (corpid: string) => {
return http.request<ResponseData<QyMpQrcodeEntity[]>>("get", `/qywx/mp-qrcodes/by-corpid/${corpid}`);
};
/**
* ID和名称查询或创建二维码
* @param corpid ID
* @param name 线
* @returns
*/
export const getOrCreateMpQrcodeApi = (corpid: string, name: string) => {
return http.request<ResponseData<QyMpQrcodeEntity>>("get", `/qywx/mp-qrcodes/get-or-create`, {
params: { corpid, name }
});
};
/**
* Excel
* @param params
* @param fileName
* @returns
*/
export const exportMpQrcodeExcelApi = (params: SearchMpQrcodeQuery, fileName: string) => {
return http.download("/qywx/mp-qrcodes/excel", fileName, { params });
};

View File

@ -9,7 +9,9 @@ import { ElDialog, ElForm, ElFormItem, ElInput, ElMessage } from 'element-plus';
import { bindQyUserApi } from '@/api/ab98/user';
import qrcode from '@/assets/qrcode.png';
import { getBasicInfoByCorpidApi } from '@/api/qy/corp';
import { getOrCreateMpQrcodeApi, QyMpQrcodeEntity } from '@/api/qy/mpQrcode';
import { storeToRefs } from 'pinia';
const { VITE_APP_BASE_API } = import.meta.env;
defineOptions({
name: "Welcome"
@ -48,6 +50,9 @@ const topGoods = ref<TopGoodsDTO[]>([]);
const todayLatestOrderGoods = ref<TodayLatestOrderGoodsDTO[]>([]);
const maxOccurrenceCount = ref(0);
//
const qrcodeData = ref<QyMpQrcodeEntity | null>(null);
//
const borrowReturnDynamicList = ref<BorrowReturnDynamicDTO[]>([]);
const loading = ref(false);
@ -143,6 +148,19 @@ const fetchCorpBasicInfo = async () => {
}
};
//
const fetchQrcodeData = async () => {
try {
const { data } = await getOrCreateMpQrcodeApi(wxStore.corpid, 'HOME');
if (data) {
qrcodeData.value = data;
}
} catch (error) {
console.error('获取二维码数据失败:', error);
// 使
}
};
//
const fetchBorrowReturnDynamic = async () => {
loading.value = true;
@ -208,6 +226,9 @@ onMounted(async () => {
//
await fetchCorpBasicInfo();
//
await fetchQrcodeData();
try {
const { data } = await getStats(wxStore.corpid);
shopData.value = [
@ -279,7 +300,7 @@ onMounted(async () => {
</div>
</div>
<div class="shop-qrcode">
<el-image :src="qrcode" fit="contain" class="qrcode-image" />
<el-image :src="VITE_APP_BASE_API + qrcodeData?.qrcodeUrl || qrcode" fit="contain" class="qrcode-image" />
<p class="qrcode-text">扫码进入小程序</p>
</div>
</div>