root 1 kuukausi sitten
vanhempi
commit
1bbc3f3790

+ 9 - 0
.env

@@ -0,0 +1,9 @@
+NODE_ENV = 'development'
+VITE_SERVE = 'http://10.113.248.3:8443' # 开发阶段服务器地址
+VITE_MEDIA = 'https://test.jue-ming.com:8084'
+VITE_PORT = 8443
+
+# NODE_ENV = 'production'
+# VITE_SERVE = 'https://jinhong-credit.com:8443' # 开发阶段服务器地址
+# VITE_MEDIA = 'https://test.jue-ming.com:8084'
+# VITE_PORT = 8443

+ 18 - 14
.hbuilderx/launch.json

@@ -1,16 +1,20 @@
-{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
-  // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
-    "version": "0.0",
-    "configurations": [{
-     	"default" : 
-     	{
-     		"launchtype" : "local"
-     	},
-     	"mp-weixin" : 
-     	{
-     		"launchtype" : "local"
-     	},
-     	"type" : "uniCloud"
-     }
+{
+    // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+    // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+    "version" : "0.0",
+    "configurations" : [
+        {
+            "default" : {
+                "launchtype" : "local"
+            },
+            "mp-weixin" : {
+                "launchtype" : "local"
+            },
+            "type" : "uniCloud"
+        },
+        {
+            "openVueDevtools" : false,
+            "type" : "uni-app:miniProgram"
+        }
     ]
 }

+ 119 - 119
src/App.vue

@@ -1,138 +1,138 @@
 <script setup lang="ts">
-	import { onLaunch, onShow, onHide } from "@dcloudio/uni-app";
+import { onLaunch, onShow, onHide } from "@dcloudio/uni-app";
 
-	// onLaunch((options) => {
-	//   console.log(decodeURIComponent(options?.query.scene));
-	//   console.log("App Launch");
-	// });
-	onShow(() => {
-		console.log("App Show");
-		//调用  版本更新
-	});
-	onHide(() => {
-		console.log("App Hide");
-	});
-	const autoUpdate = () => {
-		if (uni.canIUse("getUpdateManager")) {
-			const updateManager = uni.getUpdateManager();
-			updateManager.onCheckForUpdate(function (res) {
-				if (res.hasUpdate) {
-					updateManager.onUpdateReady(function () {
+// onLaunch((options) => {
+//   console.log(decodeURIComponent(options?.query.scene));
+//   console.log("App Launch");
+// });
+onShow(() => {
+	console.log("App Show");
+	//调用  版本更新
+});
+onHide(() => {
+	console.log("App Hide");
+});
+const autoUpdate = () => {
+	if (uni.canIUse("getUpdateManager")) {
+		const updateManager = uni.getUpdateManager();
+		updateManager.onCheckForUpdate(function (res) {
+			if (res.hasUpdate) {
+				updateManager.onUpdateReady(function () {
+					uni.showModal({
+						title: "更新提示",
+						content: "新版本已经准备好,是否重启应用?",
+						showCancel: false,
+						success: function (res) {
+							if (res.confirm) {
+								updateManager.applyUpdate();
+							} else if (res.cancel) {
+								uni.showModal({
+									title: "温馨提示~",
+									content: "本次版本更新涉及到新的功能添加,旧版本无法正常访问的哦~",
+									success: function (res) {
+										// autoUpdate();
+										// return;
+										//第二次提示后,强制更新
+										if (res.confirm) {
+											// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
+											updateManager.applyUpdate();
+										} else if (res.cancel) {
+											//重新回到版本更新提示
+											autoUpdate();
+										}
+									},
+								});
+							}
+						},
+					});
+					updateManager.onUpdateFailed(function () {
+						// 新的版本下载失败
 						uni.showModal({
-							title: "更新提示",
-							content: "新版本已经准备好,是否重启应用?",
-							showCancel: false,
-							success: function (res) {
-								if (res.confirm) {
-									updateManager.applyUpdate();
-								} else if (res.cancel) {
-									uni.showModal({
-										title: "温馨提示~",
-										content: "本次版本更新涉及到新的功能添加,旧版本无法正常访问的哦~",
-										success: function (res) {
-											// autoUpdate();
-											// return;
-											//第二次提示后,强制更新
-											if (res.confirm) {
-												// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
-												updateManager.applyUpdate();
-											} else if (res.cancel) {
-												//重新回到版本更新提示
-												autoUpdate();
-											}
-										},
-									});
-								}
-							},
-						});
-						updateManager.onUpdateFailed(function () {
-							// 新的版本下载失败
-							uni.showModal({
-								title: "已经有新版本了哟~",
-								content: "新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~",
-							});
+							title: "已经有新版本了哟~",
+							content: "新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~",
 						});
 					});
-				}
-			});
-		} else {
-			uni.showModal({
-				title: "提示",
-				content: "当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。",
-			});
-		}
-	};
+				});
+			}
+		});
+	} else {
+		uni.showModal({
+			title: "提示",
+			content: "当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。",
+		});
+	}
+};
 </script>
 
 <style lang="scss">
-	page {
-		background: #F0F2F6 url('https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/index_bg.png') no-repeat top;
-		background-size: 100% auto;
-	}
+page {
+	background: #F0F2F6 url('https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/index_bg.png') no-repeat top;
+	background-size: 100% auto;
+}
 
-	// 字体图标
-	@import "@/styles/fonts.scss";
+// 字体图标
+@import "@/styles/fonts.scss";
 
-	@font-face {
-		font-family: 'Alibaba PuHuiTi 2.0';
-		src: url('https://test.jue-ming.com:8849/api/show?filePath=./webo/font/AlibabaPuHuiTi-2-55-Regular/AlibabaPuHuiTi-2-55-Regular.woff2') format('woff2'),
-			url('https://test.jue-ming.com:8849/api/show?filePath=./webo/font/AlibabaPuHuiTi-2-55-Regular/AlibabaPuHuiTi-2-55-Regular.woff') format('woff'),
-			url('https://test.jue-ming.com:8849/api/show?filePath=./webo/font/AlibabaPuHuiTi-2-55-Regular/AlibabaPuHuiTi-2-55-Regular.ttf') format('truetype');
-		font-weight: normal;
-		font-style: normal;
-		font-display: swap;
-	}
+@font-face {
+	font-family: 'Alibaba PuHuiTi 2.0';
+	src: url('https://test.jue-ming.com:8849/api/show?filePath=./webo/font/AlibabaPuHuiTi-2-55-Regular/AlibabaPuHuiTi-2-55-Regular.woff2') format('woff2'),
+		url('https://test.jue-ming.com:8849/api/show?filePath=./webo/font/AlibabaPuHuiTi-2-55-Regular/AlibabaPuHuiTi-2-55-Regular.woff') format('woff'),
+		url('https://test.jue-ming.com:8849/api/show?filePath=./webo/font/AlibabaPuHuiTi-2-55-Regular/AlibabaPuHuiTi-2-55-Regular.ttf') format('truetype');
+	font-weight: normal;
+	font-style: normal;
+	font-display: swap;
+}
 
-	@font-face {
-		font-family: 'ZhankuKuaiLeTi';
-		src: url('https://test.jue-ming.com:8849/api/show?filePath=./webo/font/ZhankuKuaiLeTi.ttf') format('truetype');
-		font-weight: normal;
-		font-style: normal;
-		font-display: swap;
-	}
+@font-face {
+	font-family: 'ZhankuKuaiLeTi';
+	src: url('https://test.jue-ming.com:8849/api/show?filePath=./webo/font/ZhankuKuaiLeTi.ttf') format('truetype');
+	font-weight: normal;
+	font-style: normal;
+	font-display: swap;
+}
 
-	@font-face {
-		font-family: 'YanShiXieHeiTi';
-		src: url('https://test.jue-ming.com:8849/api/show?filePath=./webo/font/演示斜黑体.otf') format('truetype');
-		font-weight: normal;
-		font-style: normal;
-		font-display: swap;
-	}
+@font-face {
+	font-family: 'YanShiXieHeiTi';
+	src: url('https://test.jue-ming.com:8849/api/show?filePath=./webo/font/演示斜黑体.otf') format('truetype');
+	font-weight: normal;
+	font-style: normal;
+	font-display: swap;
+}
 
-	// view,
-	// navigator,
-	// input,
-	// scroll-view {
-	// 	box-sizing: border-box;
-	// }
+// view,
+// navigator,
+// input,
+// scroll-view {
+// 	box-sizing: border-box;
+// }
 
-	view {
-		box-sizing: border-box;
-	}
+view {
+	box-sizing: border-box;
+}
 
-	button::after {
-		border: none;
-	}
+button::after {
+	border: none;
+}
 
-	swiper,
-	scroll-view {
-		flex: 1;
-		height: 100%;
-		overflow: hidden;
-	}
+swiper,
+scroll-view {
+	flex: 1;
+	height: 100%;
+	overflow: hidden;
+}
 
-	image {
-		width: 100%;
-		height: 100%;
-		vertical-align: middle;
-	}
+image {
+	width: 100%;
+	height: 100%;
+	vertical-align: middle;
+}
 
-	// 两行省略
-	.ellipsis {
-		overflow: hidden;
-		text-overflow: ellipsis;
-		display: -webkit-box;
-		-webkit-line-clamp: 2;
-		-webkit-box-orient: vertical;
-	}
+// 两行省略
+.ellipsis {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	display: -webkit-box;
+	-webkit-line-clamp: 2;
+	-webkit-box-orient: vertical;
+}
 </style>

+ 234 - 0
src/components/PayPackage.vue

@@ -0,0 +1,234 @@
+<script setup lang="ts">
+import { onMounted, ref, reactive } from "vue";
+import { userLoginApi, getUserPhoneApi } from "@/services/home";
+import { useMemberStore } from "@/stores/";
+import type { LoginParams, GetPhoneParams } from "@/types/home";
+import { login } from "@/hooks/useIsLogin";
+const useMember = useMemberStore();
+const packagePopup = ref<any>();
+
+const packageList = reactive<any[]>([
+    { name: '单次卡(税务报告)', desc: '税务报告单次获取', price: '980' },
+    { name: '4次卡(税务报告)', desc: '税务报告4次卡', price: '2680' },
+    { name: '12次卡(税务报告)', desc: '税务报告12次卡', price: '5980' },
+]);
+
+const userInfoMsg = reactive<LoginParams>({
+    code: "",
+});
+
+onMounted(() => {
+    console.log("登录");
+});
+//获取手机号
+const getPhoneNumber = (e: any) => {
+    console.log(e);
+    //获取到动态令牌后将动态令牌传输到后台方法
+    //同时需要将获取到的openId传输给后台
+    const params = {
+        openId: useMember.userInfo.openId,
+        code: e.detail.code,
+    };
+    getUserPhone(params);
+};
+const getUserPhone = async (val: GetPhoneParams) => {
+    const phoneInfo = await getUserPhoneApi(val);
+    useMember.userInfo.phone = phoneInfo.data;
+    login().then((res: any) => {
+        //这时可以查询是否授权
+        if (res.code == "2001") {
+            uni.showToast({
+                title: '暂无权限',
+                icon: "none",
+                duration: 2000
+            });
+        } else {
+            uni.showToast({
+                title: "登录成功",
+                icon: "none",
+                success() {
+                    uni.navigateTo({ url: "/pages/index/inviteUser" });
+                }
+            });
+        }
+    });
+    close();
+    //获取到手机号后
+    //将缓存里的手机号替换为最新的
+};
+
+//拿到code 向后台请求openId   session_key
+
+const open = () => {
+    login().then((res: any) => {
+        userInfoMsg.code = res.code;
+    });
+    packagePopup.value.open("center");
+};
+const close = () => {
+    packagePopup.value.close();
+};
+
+const agree = ref<boolean>(false);
+const radioChange = () => {
+    agree.value = !agree.value;
+};
+
+const stipulate = ref<any>();
+
+const stipulateClose = () => {
+    stipulate.value.close();
+};
+
+const viewDetail = () => {
+    stipulateOpen();
+};
+const stipulateOpen = () => {
+    stipulate.value.open("bottom");
+};
+
+defineExpose({
+    open,
+});
+</script>
+<template>
+    <view>
+        <uni-popup ref="packagePopup">
+            <view class="payPackage">
+                <view class="pay_title">套餐购买</view>
+                <view class="package_list">
+                    <view class="package_item" v-for="item in packageList">
+                        <view class="item_head">
+
+                        </view>
+                        <view class="item_body">
+                            <view class="item_name">
+                                {{ item.name }}
+                            </view>
+                            <view class="item_desc">
+                                {{ item.desc }}
+                            </view>
+                        </view>
+                        <view class="item_price">
+                            {{ item.price }}
+                        </view>
+                    </view>
+                </view>
+                <view class="pay_way">
+                    <view class="pay_way_title">
+                        付款方式
+                    </view>
+                    <view class="way_item">
+                        <view class="way_icon">
+                            <image src="" mode="scaleToFill" />
+                        </view>
+                        <view class="way_title">微信支付</view>
+                        <view class="way_check"></view>
+                    </view>
+                </view>
+                <view class="pay_control">
+                    <view class="pay_info"><text>待支付</text><text class="unit">¥</text><text class="amout">980</text>>
+                    </view>
+                </view>
+            </view>
+        </uni-popup>
+    </view>
+</template>
+<style lang="scss" scoped>
+.payPackage {
+    width: 593rpx;
+    height: 617rpx;
+    background: url(https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/dialog_bg.png) no-repeat top;
+    background-size: cover;
+    border-radius: 40rpx;
+}
+
+.pay_title {
+    font-family: 'Alibaba PuHuiTi 2.0';
+    font-weight: normal;
+    font-size: 32rpx;
+    color: #4A89FB;
+    text-align: center;
+    padding: 28rpx 0 30rpx;
+}
+
+.package_item {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    width: 517rpx;
+    height: 100rpx;
+    background: #FFFFFF;
+    border-radius: 14rpx;
+    border: 1px solid #D6D6D6;
+    margin: 0 auto 14rpx;
+    padding: 14rpx 70rpx;
+}
+
+.package_item.active {
+    background: #0056FF;
+}
+
+.item_body {
+    flex: 1;
+}
+
+.item_name {
+    font-family: Alibaba PuHuiTi 2.0;
+    font-weight: normal;
+    font-size: 28rpx;
+    color: #333333;
+    line-height: 36rpx;
+}
+
+.item_desc {
+    font-family: Alibaba PuHuiTi 2.0;
+    font-weight: normal;
+    font-size: 20rpx;
+    color: #999999;
+    line-height: 36rpx;
+}
+
+.item_price {
+    font-family: Alibaba PuHuiTi 2.0;
+    font-weight: normal;
+    font-size: 28rpx;
+    color: #333333;
+    line-height: 125rpx;
+}
+
+.pay_way_title {
+    font-family: 'Alibaba PuHuiTi 2.0';
+    font-weight: normal;
+    font-size: 32rpx;
+    color: #333333;
+    margin: 35rpx 42rpx 26rpx 0;
+}
+
+.way_item {
+    display: flex;
+}
+
+.pay_info {
+    font-family: 'Alibaba PuHuiTi 2.0';
+    font-weight: normal;
+    font-size: 28rpx;
+    color: #333333;
+    display: flex;
+    align-items: center;
+}
+
+.amout {
+    font-family: Alibaba PuHuiTi 2.0;
+    font-weight: normal;
+    font-size: 28rpx;
+    color: #F20404;
+}
+
+.unit {
+    font-family: Alibaba PuHuiTi 2.0;
+    font-weight: normal;
+    font-size: 20rpx;
+    color: #F20404;
+}
+</style>

+ 128 - 127
src/components/ShuiWuGetPhone.vue

@@ -1,88 +1,89 @@
 <script setup lang="ts">
-	import { onMounted, ref, reactive } from "vue";
-	import { userLoginApi, getUserPhoneApi } from "@/services/home";
-	import { useMemberStore } from "@/stores/";
-	import type { LoginParams, GetPhoneParams } from "@/types/home";
-	import { login } from "@/hooks/useIsLogin";
-	const useMember = useMemberStore();
-	const popup = ref<any>();
-
-	const userInfoMsg = reactive<LoginParams>({
-		code: "",
-	});
-
-	onMounted(() => {
-		console.log("登录");
-	});
-	//获取手机号
-	const getPhoneNumber = (e : any) => {
-		console.log(e);
-		//获取到动态令牌后将动态令牌传输到后台方法
-		//同时需要将获取到的openId传输给后台
-		const params = {
-			openId: useMember.userInfo.openId,
-			code: e.detail.code,
-		};
-		getUserPhone(params);
-	};
-	const getUserPhone = async (val : GetPhoneParams) => {
-		const res = await getUserPhoneApi(val);
-
-		useMember.userInfo.phone = res.data;
-
-		login().then((res) => {
-			//这时可以查询是否授权
-
-			if (res.userInfo.isAuth == "0") {
-				uni.showToast({
-					title: "登录成功,手机未授权",
-					icon: "none",
-				});
-			} else {
-				uni.showToast({
-					title: "登录成功",
-					icon: "none",
-				});
-			}
-		});
-		close();
-		//获取到手机号后
-		//将缓存里的手机号替换为最新的
-	};
-
-	//拿到code 向后台请求openId   session_key
-
-	const open = () => {
-		login().then((res : any) => {
-			userInfoMsg.code = res.code;
-		});
-		popup.value.open("bottom");
-	};
-	const close = () => {
-		popup.value.close();
-	};
-
-	const agree = ref<boolean>(false);
-	const radioChange = () => {
-		agree.value = !agree.value;
-	};
-
-	const stipulate = ref<any>();
-
-	const stipulateClose = () => {
-		stipulate.value.close();
+import { onMounted, ref, reactive } from "vue";
+import { userLoginApi, getUserPhoneApi } from "@/services/home";
+import { useMemberStore } from "@/stores/";
+import type { LoginParams, GetPhoneParams } from "@/types/home";
+import { login } from "@/hooks/useIsLogin";
+const useMember = useMemberStore();
+const popup = ref<any>();
+
+const userInfoMsg = reactive<LoginParams>({
+	code: "",
+});
+
+onMounted(() => {
+	console.log("登录");
+});
+//获取手机号
+const getPhoneNumber = (e: any) => {
+	console.log(e);
+	//获取到动态令牌后将动态令牌传输到后台方法
+	//同时需要将获取到的openId传输给后台
+	const params = {
+		openId: useMember.userInfo.openId,
+		code: e.detail.code,
 	};
+	getUserPhone(params);
+};
+const getUserPhone = async (val: GetPhoneParams) => {
+	const phoneInfo = await getUserPhoneApi(val);
+	useMember.userInfo.phone = phoneInfo.data;
+	login().then((res: any) => {
+		//这时可以查询是否授权
+		if (res.code == "2001") {
+			uni.showToast({
+				title: '暂无权限',
+				icon: "none",
+				duration: 2000
+			});
+		} else {
+			uni.showToast({
+				title: "登录成功",
+				icon: "none",
+				success() {
+					uni.navigateTo({ url: "/pages/index/inviteUser" });
+				}
+			});
+		}
+	});
+	close();
+	//获取到手机号后
+	//将缓存里的手机号替换为最新的
+};
 
-	const viewDetail = () => {
-		stipulateOpen();
-	};
-	const stipulateOpen = () => {
-		stipulate.value.open("bottom");
-	};
+//拿到code 向后台请求openId   session_key
 
-	defineExpose({
-		open,
+const open = () => {
+	login().then((res: any) => {
+		userInfoMsg.code = res.code;
 	});
+	popup.value.open("bottom");
+};
+const close = () => {
+	popup.value.close();
+};
+
+const agree = ref<boolean>(false);
+const radioChange = () => {
+	agree.value = !agree.value;
+};
+
+const stipulate = ref<any>();
+
+const stipulateClose = () => {
+	stipulate.value.close();
+};
+
+const viewDetail = () => {
+	stipulateOpen();
+};
+const stipulateOpen = () => {
+	stipulate.value.open("bottom");
+};
+
+defineExpose({
+	open,
+});
 </script>
 <template>
 	<view>
@@ -122,58 +123,58 @@
 		</uni-popup>
 	</view>
 </template>
-<style lang="scss">
-	.get_phone_out {
-		width: 750rpx;
-		height: 507rpx;
-		padding-top: 69rpx;
-		background: #FFFFFF;
-		border-radius: 40rpx 40rpx 0rpx 0rpx;
-		text-align: center;
-		position: relative;
-
-		.close_btn {
-			position: absolute;
-			right: 20rpx;
-			top: 20rpx;
-		}
+<style lang="scss" scoped>
+.get_phone_out {
+	width: 750rpx;
+	height: 507rpx;
+	padding-top: 69rpx;
+	background: #FFFFFF;
+	border-radius: 40rpx 40rpx 0rpx 0rpx;
+	text-align: center;
+	position: relative;
+
+	.close_btn {
+		position: absolute;
+		right: 20rpx;
+		top: 20rpx;
+	}
 
-		.welcome {
-			font-family: 'Alibaba PuHuiTi 2.0';
-			font-weight: bold;
-			font-size: 36rpx;
-			color: #222222;
-		}
+	.welcome {
+		font-family: 'Alibaba PuHuiTi 2.0';
+		font-weight: bold;
+		font-size: 36rpx;
+		color: #222222;
+	}
 
-		.serve {
-			font-family: 'Alibaba PuHuiTi 2.0';
-			font-weight: normal;
-			font-size: 24rpx;
-			color: #999999;
-			margin: 14rpx 0 100rpx;
-		}
+	.serve {
+		font-family: 'Alibaba PuHuiTi 2.0';
+		font-weight: normal;
+		font-size: 24rpx;
+		color: #999999;
+		margin: 14rpx 0 100rpx;
+	}
 
-		button {
-			width: 263rpx;
-			height: 76rpx;
-			background: linear-gradient(90deg, #BC63F4 0%, #4A89FB 100%);
-			border-radius: 20rpx;
-			font-family: 'Alibaba PuHuiTi 2.0';
-			font-weight: normal;
-			font-size: 32rpx;
-			color: #FFFFFF !important;
-			text-align: center;
-		}
+	button {
+		width: 263rpx;
+		height: 76rpx;
+		background: linear-gradient(90deg, #BC63F4 0%, #4A89FB 100%);
+		border-radius: 20rpx;
+		font-family: 'Alibaba PuHuiTi 2.0';
+		font-weight: normal;
+		font-size: 32rpx;
+		color: #FFFFFF !important;
+		text-align: center;
+	}
 
-		.clause {
-			padding-bottom: 100rpx;
-			padding-top: 40rpx;
-			display: flex;
-			justify-content: center;
+	.clause {
+		padding-bottom: 100rpx;
+		padding-top: 40rpx;
+		display: flex;
+		justify-content: center;
 
-			.agreement {
-				color: blue;
-			}
+		.agreement {
+			color: blue;
 		}
 	}
+}
 </style>

+ 78 - 67
src/components/ShuiWuSH.vue

@@ -1,60 +1,71 @@
 <script setup lang="ts">
-	import { ref, reactive } from "vue";
+import { ref, reactive, defineEmits } from "vue";
 
-	const inputDialog = ref<any>(false);
 
-	//表单所用到的数据绑定
-	//公司名称
-	const name = ref<string>("");
-	//税务编号
-	const swNum = ref<string>("");
-	//联系方式
-	const phone = ref<string>("");
-	//测试类型--渠道测试的话值为1
-	//--个人测试的话值为2
-	const type = ref<string>("1");
-	const dialogInputConfirm = () => {
-		//判断单位是否为空
-		if (name.value == "") {
-			uni.showToast({
-				title: "单位不能为空",
-				icon: "none",
-			});
-			return;
-		}
-		//判断单位税号是不是为空
-		if (swNum.value == "") {
-			uni.showToast({
-				title: "税号不能为空",
-				icon: "none",
-			});
-			return;
-		}
-		//如果都填写了则判断跳转到另一个页面
-		inputDialog.value.close();
-		//跳转到页面  输入信息去查询页面
-		//需要跳转到信息输入界面
-		// uni.navigateTo({
-		// 	url: `/pages/login/login?name=${name.value}&swNum=${swNum.value}&type=${type.value}`,
-		// });
+const inputDialog = ref<any>(false);
 
-		// 刷新查询任务列表
-	};
+//表单所用到的数据绑定
+//公司名称
+const name = ref<string>("");
+//税务编号
+const swNum = ref<string>("");
+//联系方式
+const phone = ref<string>("");
+//测试类型--渠道测试的话值为1
+//--个人测试的话值为2
+const type = ref<string>("1");
 
-	//打开输入税号的弹出框
-	const openSH = () => {
-		name.value = "";
-		swNum.value = "";
-		inputDialog.value.open("center");
-	};
+// 定义要发射的事件
+const emit = defineEmits(['saveReport'])
 
-	//关闭税务弹出框
-	const closeSW = () => {
-		inputDialog.value.close();
-	};
+const dialogInputConfirm = async () => {
+	//判断单位是否为空
+	if (name.value == "") {
+		uni.showToast({
+			title: "单位不能为空",
+			icon: "none",
+		});
+		return;
+	}
+	//判断单位税号是不是为空
+	if (swNum.value == "") {
+		uni.showToast({
+			title: "税号不能为空",
+			icon: "none",
+		});
+		return;
+	}
+
+	// 校验联系方式
+	if (phone.value == "") {
+		uni.showToast({
+			title: "联系方式不能为空",
+			icon: "none",
+		});
+		return;
+	}
+	//如果都填写了则判断跳转到另一个页面
+	inputDialog.value.close();
 
-	//导出方法专供父组件调用
-	defineExpose({ openSH });
+	// 保存报告
+	emit('saveReport', { name: name.value, swNum: swNum.value, phone: phone.value });
+};
+
+//打开输入税号的弹出框
+const openSH = () => {
+	name.value = "";
+	swNum.value = "";
+	phone.value = "";
+	inputDialog.value.open("center");
+};
+
+//关闭税务弹出框
+const closeSW = () => {
+	inputDialog.value.close();
+};
+
+//导出方法专供父组件调用
+defineExpose({ openSH });
 </script>
 <template>
 	<view>
@@ -81,24 +92,24 @@
 	</view>
 </template>
 <style lang="scss" scoped>
-	.form_out {
-		width: 100%;
+.form_out {
+	width: 100%;
 
-		.form_out_name {
-			margin-bottom: 20rpx;
-			font-family: 'Alibaba PuHuiTi 2.0';
-			font-weight: normal;
-			font-size: 28rpx;
-			color: #999999;
-		}
+	.form_out_name {
+		margin-bottom: 20rpx;
+		font-family: 'Alibaba PuHuiTi 2.0';
+		font-weight: normal;
+		font-size: 28rpx;
+		color: #999999;
+	}
 
-		.form_tip {
-			margin-top: 10rpx;
-			font-family: 'Alibaba PuHuiTi 2.0';
-			font-weight: normal;
-			font-size: 24rpx;
-			color: #999999;
-			line-height: 36rpx;
-		}
+	.form_tip {
+		margin-top: 10rpx;
+		font-family: 'Alibaba PuHuiTi 2.0';
+		font-weight: normal;
+		font-size: 24rpx;
+		color: #999999;
+		line-height: 36rpx;
 	}
+}
 </style>

+ 6 - 5
src/hooks/useIsLogin.ts

@@ -16,10 +16,11 @@ export const login = () => {
       provider: 'weixin',
       success: (res) => {
         console.log(res)
-        const re = <LoginParams>{ code: res.code }
-        userLogin(re)
-        console.log('login')
-        resolve(re)
+        // const re = <LoginParams>{ code: res.code }
+        userLogin({ code: res.code }).then((loginRes) => {
+          console.log('loginRes', loginRes)
+          resolve(loginRes)
+        })
       },
       fail: (error) => {
         reject(error)
@@ -38,7 +39,7 @@ const userLogin = async (code: LoginParams) => {
   // }
   useMember.saveUserInfo(res.data.user)
 
-  return code.code
+  return res
 }
 
 //应该再写一个返回用户信息

+ 5 - 0
src/main.ts

@@ -10,3 +10,8 @@ export function createApp() {
     app,
   }
 }
+
+export const BASE_URL = {
+  server: 'https://jinhong-credit.com/',
+  fileServe: 'https://test.jue-ming.com:8849/',
+}

+ 168 - 133
src/pages/index/components/HomeList.vue

@@ -1,164 +1,199 @@
 <script setup lang="ts">
-	import { ref, reactive, onMounted } from "vue";
-	//到顶部多远时触发事件
-	//more  上拉加载更多
-	//loading //加载中
-	//noMore 没有更多
-	const status = ref<string>("more");
-	onMounted(() => { });
-	const scrollLower = () => {
-		//我到底部了
-		console.log("我到底部了");
-	};
+import { ref, reactive, onMounted, defineProps, watchEffect, defineExpose } from "vue";
+import { queryReportListApi, queryReportListByUserApi } from "@/services/home";
+
+const props = defineProps({
+	linkId: {
+		type: String,
+		default: '',
+	},
+	userId: {
+		type: String,
+		default: '',
+	}
+})
+
+const reportList = reactive<any>({});
+
+// 邀约订单查询报告记录
+const queryReportList = async () => {
+	let res = null;
+	if (props.linkId) {
+		res = await queryReportListApi({
+			linkId: props.linkId,
+			pageNum: 1,
+			pageSize: 15
+		});
+	} else if (props.userId) {
+		res = await queryReportListByUserApi(props.userId, {
+			pageNum: 1,
+			pageSize: 15
+		});
+	}
+
+	if (res && res.code == '200' && res.data && res.data.content.length > 0) {
+		reportList.value = res.data.content;
+	}
+}
+
+watchEffect(() => {
+	queryReportList();
+})
+
+const status = ref<string>("more");
+onMounted(() => {
+	// queryReportList();
+});
+const scrollLower = () => {
+	//我到底部了
+	console.log("我到底部了");
+};
+
+const goDetail = (item: any) => {
+	if (item.status == 0) {
+		uni.showToast({
+			title: '报告生成中'
+		})
+		return;
+	}
+	uni.showLoading();
+	uni.downloadFile({
+		url: `${import.meta.env.VITE_SERVE}/file/download/report?filePath=${item.reportPath}`,
+		success: function (res) {
+			console.log(res);
+			var filePath = res.tempFilePath;
+			uni.openDocument({
+				filePath: filePath,
+				fileType: 'pdf',
+				showMenu: true,
+				success: function (res) {
+					console.log('打开文档成功');
+				},
+				fail(err) {
+					console.log('打开文档失败', err);
+				}
+			});
+		},
+		complete() {
+			uni.hideLoading()
+		}
+	});
+}
+
+//导出方法专供父组件调用
+defineExpose({ queryReportList });
 </script>
 <template>
-	<view class="home_list_view">
+	<view class="home_list_view" v-if="reportList.value.length > 0">
+		<view class="home_list_title">
+			<view class="home_list_line"></view>
+			<text>报告记录</text>
+		</view>
 		<view style="height: 100%">
 			<scroll-view scroll-y="true" lower-threshold="30" @scrolltolower="scrollLower">
-				<view class="list_out">
-					<view class="report_status">已生成</view>
+				<view class="list_out" v-for="item in reportList.value" :key="item.id">
+					<view class="report_status">{{ item.status == 1 ? '已生成' : '生成中' }}</view>
 					<view class="list_title">
-						<view class="report_name">河南红朵信息科技有限责任公司</view>
-						<view class="list_time"> 2024-04-15 23:33:05 </view>
+						<view class="report_name">{{ item.companyName }}</view>
+						<view class="list_time">{{ item.createTime }}</view>
 					</view>
 					<view class="list_button">
-						<view> <button class="button_detail" size="mini">查看详情</button></view>
+						<view> <button class="button_detail" size="mini" @click="goDetail(item)">查看详情</button></view>
 					</view>
 				</view>
-				<view class="list_out">
-					<view class="report_status">已生成</view>
-					<view class="list_title">
-						<view class="report_name">河南红朵信息科技有限责任公司</view>
-						<view class="list_time"> 2024-04-15 23:33:05 </view>
-					</view>
-					<view class="list_button">
-						<view> <button class="button_detail" size="mini">查看详情</button></view>
-					</view>
-				</view>
-				<view class="list_out">
-					<view class="report_status">已生成</view>
-					<view class="list_title">
-						<view class="report_name">河南红朵信息科技有限责任公司</view>
-						<view class="list_time"> 2024-04-15 23:33:05 </view>
-					</view>
-					<view class="list_button">
-						<view> <button class="button_detail" size="mini">查看详情</button></view>
-					</view>
-				</view>
-				<view class="list_out">
-					<view class="report_status">已生成</view>
-					<view class="list_title">
-						<view class="report_name">河南红朵信息科技有限责任公司</view>
-						<view class="list_time"> 2024-04-15 23:33:05 </view>
-					</view>
-					<view class="list_button">
-						<view><button class="button_detail" size="mini">查看详情</button></view>
-					</view>
-				</view>
-				<view class="list_out">
-					<view class="report_status">已生成</view>
-					<view class="list_title">
-						<view class="report_name">河南红朵信息科技有限责任公司</view>
-						<view class="list_time"> 2024-04-15 23:33:05 </view>
-					</view>
-					<view class="list_button">
-						<view><button class="button_detail" size="mini">查看详情</button></view>
-					</view>
-				</view>
-				<view class="list_out">
-					<view class="report_status">已生成</view>
-					<view class="list_title">
-						<view class="report_name">河南红朵信息科技有限责任公司</view>
-						<view class="list_time"> 2024-04-15 23:33:05 </view>
-					</view>
-					<view class="list_button">
-						<view> <button class="button_detail" size="mini">查看详情</button></view>
-					</view>
-				</view>
-				<view class="list_out">
-					<view class="report_status">已生成</view>
-					<view class="list_title">
-						<view class="report_name">河南红朵信息科技有限责任公司</view>
-						<view class="list_time"> 2024-04-15 23:33:05 </view>
-					</view>
-					<view class="list_button">
-						<view> <button class="button_detail" size="mini">查看详情</button></view>
-					</view>
-				</view>
-				<uni-load-more iconType="circle" :status="status" />
+				<!-- <uni-load-more iconType="circle" :status="status" /> -->
 			</scroll-view>
 		</view>
 	</view>
 </template>
 
 <style lang="scss" scoped>
-	.home_list_view {
-		flex: 1;
-		display: flex;
-		flex-direction: column;
-		height: 100%;
-		overflow: scroll;
-
-		.list_out {
-			width: 100%;
-			height: 187rpx;
-			background: #FFFFFF;
-			border-radius: 20rpx;
-			border: 1px solid #FFFFFF;
-			margin-top: 20rpx;
-			padding: 36rpx 21rpx 21rpx 34rpx;
-			position: relative;
-
-			.list_title {
-				.report_name {
-					font-family: 'Alibaba PuHuiTi 2.0';
-					font-weight: normal;
-					font-size: 32rpx;
-					color: #333333;
-				}
+.home_list_view {
+	flex: 1;
+	display: flex;
+	flex-direction: column;
+	height: 100%;
+	overflow: scroll;
 
-				.list_time {
-					font-family: 'Alibaba PuHuiTi 2.0';
-					font-weight: normal;
-					font-size: 24rpx;
-					color: #999999;
-				}
+	.list_out {
+		width: 100%;
+		height: 187rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		border: 1px solid #FFFFFF;
+		margin-top: 20rpx;
+		padding: 36rpx 21rpx 21rpx 34rpx;
+		position: relative;
+
+		.list_title {
+			.report_name {
+				font-family: 'Alibaba PuHuiTi 2.0';
+				font-weight: normal;
+				font-size: 32rpx;
+				color: #333333;
 			}
 
-			.report_status {
-				width: 102rpx;
-				line-height: 41rpx;
-				background: url(https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/status_icon.png) no-repeat center;
-				background-size: 100% 100%;
+			.list_time {
 				font-family: 'Alibaba PuHuiTi 2.0';
 				font-weight: normal;
 				font-size: 24rpx;
-				color: #FFFFFF;
-				text-align: center;
-				position: absolute;
-				top: 0;
-				right: 0;
+				color: #999999;
 			}
+		}
+
+		.report_status {
+			width: 102rpx;
+			line-height: 41rpx;
+			background: url(https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/status_icon.png) no-repeat center;
+			background-size: 100% 100%;
+			font-family: 'Alibaba PuHuiTi 2.0';
+			font-weight: normal;
+			font-size: 24rpx;
+			color: #FFFFFF;
+			text-align: center;
+			position: absolute;
+			top: 0;
+			right: 0;
+		}
 
-			.list_button {
-				text-align: right;
-				margin-top: 6rpx;
+		.list_button {
+			text-align: right;
+			margin-top: 6rpx;
 
-				.button_detail {
-					color: #ffffff;
-					background: linear-gradient(90deg, #BC63F4 0%, #4A89FB 100%);
-					border-radius: 20rpx;
-				}
+			.button_detail {
+				color: #ffffff;
+				background: linear-gradient(90deg, #BC63F4 0%, #4A89FB 100%);
+				border-radius: 20rpx;
 			}
 		}
 	}
+}
 
-	.is-input-border {
-		display: flex;
-		box-sizing: border-box;
-		flex-direction: row;
-		align-items: center;
-		border: 10px solid #dcdfe6;
-		border-radius: 400px !important;
+.is-input-border {
+	display: flex;
+	box-sizing: border-box;
+	flex-direction: row;
+	align-items: center;
+	border: 10px solid #dcdfe6;
+	border-radius: 400px !important;
+}
+
+.home_list_title {
+	display: flex;
+	align-items: center;
+
+	text {
+		font-family: 'Alibaba PuHuiTi 2.0';
+		font-weight: normal;
+		font-size: 32rpx;
+		color: #333333;
 	}
+}
+
+.home_list_line {
+	width: 15rpx;
+	height: 35rpx;
+	background: #4A89FB;
+	border-radius: 20rpx;
+}
 </style>

+ 102 - 86
src/pages/index/components/HomeTabs.vue

@@ -1,25 +1,41 @@
 <script setup lang="ts">
-	import { useMemberStore } from "@/stores";
-	const userInfo = useMemberStore();
-	//父组件调用父组件
-	const emit = defineEmits(["jumpInvite", "jumpSW"]);
-	const inviteUserFun = () => {
-		//判断是否是授权了
-		//如果没有授权,点击按钮择跳转授权页面
-		if (userInfo.userInfo.isAuth == "0") {
+import { useMemberStore } from "@/stores";
+import { findByPhoneApi } from "@/services/home";
+
+const useMember = useMemberStore();
+//父组件调用父组件
+const emit = defineEmits(["jumpInvite", "jumpSW"]);
+const inviteUserFun = async () => {
+	//判断是否是授权
+	if (useMember.userInfo.isAuth == "0") {
+		if (useMember.userInfo.phone == 'NaN') {
 			emit("jumpInvite");
 		} else {
-			//跳转到生成海报页面
-			uni.navigateTo({ url: "/pages/index/inviteUser" });
+			const res = await findByPhoneApi(useMember.userInfo.phone);
+			if (res.code == '2001') {
+				uni.showToast({
+					icon: 'none',
+					title: '暂无权限'
+				})
+			} else {
+				useMember.userInfo.isAuth = '1';
+				useMember.saveUserInfo(useMember)
+				//跳转到生成海报页面
+				uni.navigateTo({ url: "/pages/index/inviteUser" });
+			}
 		}
-	};
+	} else {
+		//跳转到生成海报页面
+		uni.navigateTo({ url: "/pages/index/inviteUser" });
+	}
+};
 
-	//点击税务风险检测
-	const swFun = () => {
-		emit("jumpSW");
-		//调用父组件方法--然后让父组件打开弹出框
-		//父组件打开弹出框后表单输入校验后将值传输到这个页面
-	};
+//点击税务风险检测
+const swFun = () => {
+	emit("jumpSW");
+	//调用父组件方法--然后让父组件打开弹出框
+	//父组件打开弹出框后表单输入校验后将值传输到这个页面
+};
 </script>
 <template>
 	<!-- <view class="home_top"> 税务风险检测 </view> -->
@@ -35,92 +51,92 @@
 			</view>
 			<view class="card_btn">点击填写</view>
 		</view>
-		<view class="risk_detection" @click="swFun">
+		<!-- <view class="risk_detection" @click="swFun">
 			<view class="card_title">税务风险检测</view>
 			<view class="card_btn">生成报告</view>
-		</view>
+		</view> -->
 	</view>
 </template>
 <style lang="scss">
-	.home_top {
-		text-align: center;
-		font-size: 40rpx;
-		margin-bottom: 60rpx;
-	}
-
-	.home_tabs {
-		display: flex;
-		justify-content: space-around;
-		flex-direction: row;
+.home_top {
+	text-align: center;
+	font-size: 40rpx;
+	margin-bottom: 60rpx;
+}
 
-		.user_use {
-			width: 342rpx;
-			height: 202rpx;
-			padding: 24rpx 20rpx;
-			color: #333333;
-			background: url('https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/yqyh.png') no-repeat top;
-			background-size: 100%;
-			border-radius: 30rpx;
+.home_tabs {
+	display: flex;
+	// justify-content: space-around;
+	flex-direction: row;
 
-			.card_desc {
-				display: flex;
-				flex-direction: row;
-				align-items: center;
+	.user_use {
+		width: 342rpx;
+		height: 202rpx;
+		padding: 24rpx 20rpx;
+		color: #333333;
+		background: url('https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/yqyh.png') no-repeat top;
+		background-size: 100%;
+		border-radius: 30rpx;
 
-				.tyd {
-					width: 5rpx;
-				}
+		.card_desc {
+			display: flex;
+			flex-direction: row;
+			align-items: center;
 
-				.money {
-					width: 16rpx;
-					margin: 14rpx 8rpx
-				}
+			.tyd {
+				width: 5rpx;
+			}
 
-				text {
-					font-family: Alibaba PuHuiTi 2.0;
-					font-weight: normal;
-					font-size: 20rpx;
-					color: #4A89FB;
-				}
+			.money {
+				width: 16rpx;
+				margin: 14rpx 8rpx
 			}
 
-			.card_btn {
-				width: 121rpx;
-				line-height: 40rpx;
-				background: #FFFFFF;
-				border-radius: 20rpx;
-				border: 1px solid #4A89FB;
-				font-family: DingTalk JinBuTi;
-				font-weight: 400;
-				font-size: 24rpx;
+			text {
+				font-family: Alibaba PuHuiTi 2.0;
+				font-weight: normal;
+				font-size: 20rpx;
 				color: #4A89FB;
-				text-align: center;
-				margin-top: 30rpx;
 			}
 		}
 
-		.risk_detection {
-			width: 342rpx;
-			height: 202rpx;
-			padding: 24rpx 20rpx;
-			color: #333333;
-			background: url('https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/fxjc.png') no-repeat top;
-			background-size: 100%;
-			border-radius: 30rpx;
+		.card_btn {
+			width: 121rpx;
+			line-height: 40rpx;
+			background: #FFFFFF;
+			border-radius: 20rpx;
+			border: 1px solid #4A89FB;
+			font-family: DingTalk JinBuTi;
+			font-weight: 400;
+			font-size: 24rpx;
+			color: #4A89FB;
+			text-align: center;
+			margin-top: 30rpx;
+		}
+	}
 
-			.card_btn {
-				width: 121rpx;
-				line-height: 40rpx;
-				background: #FFFFFF;
-				border-radius: 20rpx;
-				border: 1px solid #BC63F4;
-				font-family: DingTalk JinBuTi;
-				font-weight: 400;
-				font-size: 24rpx;
-				color: #BC63F4;
-				text-align: center;
-				margin-top: 76rpx;
-			}
+	.risk_detection {
+		width: 342rpx;
+		height: 202rpx;
+		padding: 24rpx 20rpx;
+		color: #333333;
+		background: url('https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/fxjc.png') no-repeat top;
+		background-size: 100%;
+		border-radius: 30rpx;
+
+		.card_btn {
+			width: 121rpx;
+			line-height: 40rpx;
+			background: #FFFFFF;
+			border-radius: 20rpx;
+			border: 1px solid #BC63F4;
+			font-family: DingTalk JinBuTi;
+			font-weight: 400;
+			font-size: 24rpx;
+			color: #BC63F4;
+			text-align: center;
+			margin-top: 76rpx;
 		}
 	}
+}
 </style>

+ 86 - 84
src/pages/index/index.vue

@@ -1,42 +1,43 @@
 <script setup lang="ts">
-	import HomeTabs from "./components/HomeTabs.vue";
-	import HomeList from "./components/HomeList.vue";
-	import { ref, reactive, onMounted } from "vue";
-	import { login } from "@/hooks/useIsLogin";
-	import { onShow } from "@dcloudio/uni-app";
-	import ShuiWuSH from "@/components/ShuiWuSH.vue";
-	const companyName = ref<string>("");
+import HomeTabs from "./components/HomeTabs.vue";
+import HomeList from "./components/HomeList.vue";
+import { ref, reactive, onMounted } from "vue";
+import { login } from "@/hooks/useIsLogin";
+import { onLoad } from "@dcloudio/uni-app";
+import ShuiWuSH from "@/components/ShuiWuSH.vue";
+import PayPackage from "@/components/PayPackage.vue";
+const companyName = ref<string>("");
 
-	const phoneGet = ref<any>();
+const phoneGet = ref<any>();
 
-	onMounted(() => {
-		//我来了
+onMounted(() => {
+	//我来了
+});
+onLoad(() => {
+	console.log("onshow");
+	login().then((res) => {
+		//登录调用成功后
+		//判断是否授权了
+		//如果授权了则开始查询列表数据
+		//列表查出来后判断是都可以查看报告
 	});
-	onShow(() => {
-		console.log("onshow");
-		login().then((res) => {
-			//登录调用成功后
-			//判断是否授权了
-			//如果授权了则开始查询列表数据
-			//列表查出来后判断是都可以查看报告
-		});
-	});
-	//调用子组件---获取手机号授权
-	const phoneGetFun = () => {
-		phoneGet.value.open();
-	};
-	const validFun = () => {
-		//判断用户授权登录没有
-		phoneGetFun();
-		//跳转到邀请用户页面
-		// uni.navigateTo({ url: "/pages/index/inviteUser" });
-	};
+});
+//调用子组件---获取手机号授权
+const phoneGetFun = () => {
+	phoneGet.value.open();
+};
+const validFun = () => {
+	//判断用户授权登录没有
+	phoneGetFun();
+	//跳转到邀请用户页面
+	// uni.navigateTo({ url: "/pages/index/inviteUser" });
+};
 
-	//点击税务风险检测--弹出输入税务号的信息
-	const swGet = ref<any>();
-	const openSW = () => {
-		swGet.value.openSH();
-	};
+//点击税务风险检测--弹出输入税务号的信息
+const payPackage = ref<any>();
+const openSW = () => {
+	payPackage.value.open();
+};
 </script>
 <template>
 	<!-- 引入头部安全区域组件 -->
@@ -48,23 +49,24 @@
 		</view>
 		<!-- <ShuiWuTop /> -->
 		<HomeTabs @jumpInvite="validFun" @jumpSW="openSW" />
-		<HomeList class="home_list_com" />
+		<!-- <HomeList class="home_list_com" /> -->
 		<ShuiWuGetPhone ref="phoneGet" />
 		<ShuiWuSH ref="swGet" />
+		<PayPackage ref="payPackage" />
 	</view>
 </template>
 <style>
-	.list_search {
-		width: 702rpx;
-		line-height: 63rpx;
-		background: rgba(255, 255, 255, 0.3);
-		border-radius: 31rpx;
-		border: 1px solid #FFFFFF;
-		margin: 0 auto;
-	}
+.list_search {
+	width: 702rpx;
+	line-height: 63rpx;
+	background: rgba(255, 255, 255, 0.3);
+	border-radius: 31rpx;
+	border: 1px solid #FFFFFF;
+	margin: 0 auto;
+}
 
 
-	/* .list_search>>>.is-input-border {
+/* .list_search>>>.is-input-border {
 		display: flex;
 		box-sizing: border-box;
 		flex-direction: row;
@@ -74,52 +76,52 @@
 	} */
 </style>
 <style lang="scss" scoped>
-	page {
-		height: 100%;
-	}
+page {
+	height: 100%;
+}
 
-	.home_padding {
-		display: flex;
-		flex-direction: column;
-		width: 100%;
-		height: 100%;
-		padding: 0rpx 20rpx;
+.home_padding {
+	display: flex;
+	flex-direction: column;
+	width: 100%;
+	height: 100%;
+	padding: 0rpx 20rpx;
 
-		.home_list_com {
-			flex: 1;
-			overflow: scroll;
-		}
+	.home_list_com {
+		flex: 1;
+		overflow: scroll;
 	}
+}
 
-	.list_search {
-		width: 702rpx;
-		height: 63rpx;
-		background: rgba(255, 255, 255, 0.3);
-		border-radius: 31rpx;
-		border: 1px solid #FFFFFF;
-		margin: 201rpx auto 31rpx;
-		display: flex;
-		align-items: center;
-
-		.search_icon {
-			width: 39rpx;
-			margin-left: 16rpx;
-		}
+.list_search {
+	width: 702rpx;
+	height: 63rpx;
+	background: rgba(255, 255, 255, 0.3);
+	border-radius: 31rpx;
+	border: 1px solid #FFFFFF;
+	margin: 201rpx auto 31rpx;
+	display: flex;
+	align-items: center;
 
-		input {
-			width: 100%;
-			height: 63rpx;
-			line-height: 63rpx;
-			font-family: 'Alibaba PuHuiTi 2.0';
-			font-weight: normal;
-			font-size: 28rpx;
-			color: #FFFFFF;
-			opacity: 0.75;
-		}
+	.search_icon {
+		width: 39rpx;
+		margin-left: 16rpx;
 	}
 
-	::v-deep .uni-popup-dialog {
-		background: url(https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/dialog_bg.png) no-repeat top;
-		background-size: cover;
+	input {
+		width: 100%;
+		height: 63rpx;
+		line-height: 63rpx;
+		font-family: 'Alibaba PuHuiTi 2.0';
+		font-weight: normal;
+		font-size: 28rpx;
+		color: #FFFFFF;
+		opacity: 0.75;
 	}
+}
+
+::v-deep .uni-popup-dialog {
+	background: url(https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/dialog_bg.png) no-repeat top;
+	background-size: cover;
+}
 </style>

+ 18 - 10
src/pages/index/inviteUser.vue

@@ -1,18 +1,18 @@
 <script setup lang="ts">
 	import { imgUrl } from "@/utils/http";
 	import { ref } from "vue";
-	import { useMemberStore } from "@/stores";
+	import { useMemberStore } from "@/stores/";
 	import { createPosterApi } from "@/services/home";
 	import type { CreatePo } from "@/types/home";
 	import ShuiWuNav from "@/components/ShuiWuNav.vue";
-	const userInfo = useMemberStore();
+	const useMember = useMemberStore();
 	const title = ref<string>("");
 	const duration = ref<number>();
 	const price = ref<number>();
 	const num = ref<number>();
 	//海报
 	const placard = ref<string>();
-	placard.value = userInfo.userInfo.posterBackground ? userInfo.userInfo.posterBackground : 'https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/haibao.png';
+	placard.value = useMember.userInfo.posterBackground ? useMember.userInfo.posterBackground : 'https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/haibao.png';
 
 	//是否是新生成的海报带二维码
 	const isCreatePaster = ref<boolean>(false);
@@ -23,7 +23,7 @@
 			success: (chooseImageRes) => {
 				const tempFilePaths = chooseImageRes.tempFilePaths;
 				uni.uploadFile({
-					url: "/file/customUpload", //仅为示例,非真实的接口地址
+					url: "/file/customUpload",
 					filePath: tempFilePaths[0],
 					name: "file",
 					success: (uploadFileRes) => {
@@ -67,7 +67,7 @@
 			});
 			return;
 		}
-		if (num.value == 0 || price.value == 0 || duration.value == 0) {
+		if (num.value == 0 || duration.value == 0) {
 			uni.showToast({
 				title: "时长|价格|次数不能为0",
 				icon: "none",
@@ -75,8 +75,11 @@
 			return;
 		}
 		//判断图片是否改变
+
+
 		createPoster({
-			userId: userInfo.userInfo.id,
+			userId: useMember.userInfo.id,
+			// userId: useMember.userInfo,
 			title: title.value,
 			effectiveDays: duration.value as number,
 			amount: price.value as number,
@@ -86,6 +89,9 @@
 		//调用生成海报的方法
 	};
 	const createPoster = async (val : CreatePo) => {
+		console.log("val")
+		console.log(val)
+
 		const res = await createPosterApi(val);
 		console.log("海报");
 		console.log(res);
@@ -102,9 +108,8 @@
 	};
 	//下载图片
 	const saveLocal = () => {
-		//下载图片
-		// uni.showLoading();
 		let url : string = placard.value as string;
+		uni.showLoading();
 		uni.downloadFile({
 			url: url, //仅为示例,并非真实的资源
 			success: (res) => {
@@ -123,6 +128,9 @@
 					});
 				}
 			},
+			complete() {
+				uni.hideLoading();
+			}
 		});
 	};
 </script>
@@ -160,7 +168,7 @@
 					</view>
 				</uni-col>
 			</uni-row>
-			<uni-row style="margin-top: 100rpx">
+			<!-- <uni-row style="margin-top: 100rpx">
 				<uni-col :span="15">
 					<view class="user_input">
 						<view class="user_font">是否多人:</view>
@@ -173,7 +181,7 @@
 						</view>
 					</view>
 				</uni-col>
-			</uni-row>
+			</uni-row> -->
 		</view>
 		<!-- <button class="mini-btn" size="mini" @click="changeImage">跳转支付</button> -->
 		<view class="button_group">

+ 340 - 328
src/pages/index/pay.vue

@@ -1,268 +1,280 @@
 <!-- eslint-disable no-prototype-builtins -->
 <script setup lang="ts">
-	import { onLoad, onShow, onUnload } from "@dcloudio/uni-app";
-	import { ref, reactive } from "vue";
-	import {
-		createOrderApi,
-		payAppointmentApi,
-		queryOrderStatusApi,
-		queryParamsApi,
-		saveReportApi,
-		queryReportListApi
-	} from "@/services/home";
-	import type { QueryPa } from "@/types/home";
-	import HomeList from "./components/HomeList.vue";
-	import { loginUser } from "@/hooks/useIsLogin";
-	import { useMemberStore } from "@/stores";
-	import ShuiWuSH from "@/components/ShuiWuSH.vue";
-
-	const userInfo = useMemberStore();
-	//1 未支付   --可查看全部信息
-	//2 openId相等  但是状态是支付中  --可查看全部状态
-	//3 openId不相等  状态是别人在支付中 --不可查看任何信息
-	//4 openId 相等  但是已支付  --不再支付可查看生成的报告
-	//5 openId 不相等  别人已支付  --不可查看任何信息
-
-	/**
-	 * 总结  当返回状态是
-	 * 1或2时--按钮是微信支付---且列表显示--全部信息展示
-	 * 3和5时 所有信息不展示
-	 * 4时 按钮为查看风险评估
-	 *
-	 */
-
-	//获取到的传输过来的唯一值
-	const params = reactive<any>({
-		title: "", //标题
-		num: "", //剩余次数
-		time: "", //有效截止日期
-		flag: "", //当前订单的状态
+import { onLoad, onShow, onUnload } from "@dcloudio/uni-app";
+import { ref, reactive } from "vue";
+import {
+	createOrderApi,
+	payAppointmentApi,
+	queryOrderStatusApi,
+	queryParamsApi,
+	saveReportApi,
+} from "@/services/home";
+import type { QueryPa } from "@/types/home";
+import HomeList from "./components/HomeList.vue";
+import { loginUser } from "@/hooks/useIsLogin";
+import { useMemberStore } from "@/stores";
+import ShuiWuSH from "@/components/ShuiWuSH.vue";
+
+const userInfo = useMemberStore();
+//1 未支付   --可查看全部信息
+//2 openId相等  但是状态是支付中  --可查看全部状态
+//3 openId不相等  状态是别人在支付中 --不可查看任何信息
+//4 openId 相等  但是已支付  --不再支付可查看生成的报告
+//5 openId 不相等  别人已支付  --不可查看任何信息
+
+/**
+ * 总结  当返回状态是
+ * 1或2时--按钮是微信支付---且列表显示--全部信息展示
+ * 3和5时 所有信息不展示
+ * 4时 按钮为查看风险评估
+ *
+ */
+
+//获取到的传输过来的唯一值
+const params = reactive<any>({
+	title: "", //标题
+	num: "", //剩余次数
+	time: "", //有效截止日期
+	flag: "", //当前订单的状态
+});
+
+
+let orderParams = reactive<any>({
+	userId: '',
+	linId: '',
+	channelId: '', //渠道id
+	title: '', //标题
+	amount: '',
+	times: '',
+	effectiveDate: '', //天数
+	createDate: '',
+	staffId: '',
+	staffName: '',
+	backGround: '',
+	status: '',
+	flag: ''
+})
+
+// const userId = ref<string>("");
+//调用查询参数需要的入参
+const scene = ref<QueryPa>({ scene: "", userId: "" });
+const orderId = ref<string>("");
+
+//onLoad方法  --在页面初次加载时触发,仅会在页面初次加载时触发一次
+//应该将二维码获取唯一标识放到缓存中--这样即使从其他页面过来就回调用就能记住这个标识--然后根据标识去查询
+onLoad((options) => {
+	//获取的二维码中得到的参数信息
+	// console.log(decodeURIComponent(options?.scene));
+	// scene.value.scene = decodeURIComponent(options?.scene);
+	// userInfo.saveScene(decodeURIComponent(options?.scene));
+
+	//根据页面中的options 获取参数
+	//1判断是否含有这个参数
+
+	//2如果没有则是表明是从另一个页面进来的不是扫码进来的
+	//3则需要调用接口需要看到访问次数和过期时间
+	const option = options as any;
+	console.log(option.hasOwnProperty("scene"));
+	console.log(option.hasOwnProperty("id"));
+	if (option.hasOwnProperty("scene")) {
+		//
+		userInfo.saveScene(option.scene);
+	} else {
+		userInfo.saveScene("");
+		//获取参数接口
+	}
+	//将scene存入缓存中
+
+	// loginUser().then((res) => {
+	//   //这时已经有返回信息了且用户数据已经
+	//   scene.value.userId = res as string;
+	//   //获取到userId了
+	//   queryParams(scene.value);
+	// });
+});
+onShow(() => {
+	//从缓存中取出信息
+	//  scene.value.scene = decodeURIComponent(options?.scene);
+	//将scene存入缓存中
+	//需要判断是否有scene
+	scene.value.scene = userInfo.scene;
+	//不等于空的话就说明是从扫码进来的
+	//如果是空的话就是渠道点击进来的
+	if (scene.value.scene !== "") {
+		loginUser().then((res) => {
+			//这时已经有返回信息了且用户数据已经
+			scene.value.userId = res as string;
+			//获取到userId了
+			queryParams(scene.value);
+		});
+	} else {
+		//如果是渠道点击进来的
+		//则调用渠道接口//然后返回数据
+	}
+});
+
+//查询 根据唯一键值对
+const queryParams = async (val: QueryPa) => {
+	const res = await queryParamsApi(val);
+	params.flag = res.data.flag;
+	if (params.flag == 3 || params.flag == 5) {
+		uni.showToast({
+			icon: 'none',
+			title: '该二维码已被使用'
+		})
+		return;
+	}
+	params.title = res.data.title;
+	params.num = res.data.remainTimes;
+
+	params.time = formatterData(res.data.createDate, res.data.effectiveDays);
+
+	orderParams.userId = userInfo.userInfo.id;
+	orderParams.linId = res.data.id;
+	orderParams.channelId = res.data.channelId;
+	orderParams.title = res.data.title;
+	orderParams.amount = res.data.amount;
+	orderParams.times = res.data.times;
+	orderParams.effectiveDate = res.data.effectiveDays;
+	orderParams.createDate = res.data.createDate;
+	orderParams.staffId = res.data.staffId;
+	orderParams.staffName = res.data.staffName;
+	orderParams.backGround = res.data.backGround;
+	orderParams.status = res.data.status;
+	orderParams.flag = res.data.flag;
+};
+
+const homeList = ref<any>();
+
+// 保存邀约订单
+const saveReportHandle = async (val: any) => {
+	const res = await saveReportApi({
+		companyName: val.name,
+		tax: val.swNum,
+		contactNumber: val.phone,
+		reportType: 1,
+		linkId: orderParams.linId,
+		channelId: orderParams.channelId,
+		userId: orderParams.userId
 	});
-
-	let orderParams = reactive<any>({
-		userId: '',
-		linId: '',
-		channelId: '', //渠道id
-		title: '', //标题
-		amount: '',
-		times: '',
-		effectiveDate: '', //天数
-		createDate: '',
-		staffId: '',
-		staffName: '',
-		backGround: '',
-		status: '',
-		flag: ''
+	homeList.value.queryReportList();
+	queryParams(scene.value);
+	uni.showToast({
+		title: '提交成功'
 	})
-
-	// const userId = ref<string>("");
-	//调用查询参数需要的入参
-	const scene = ref<QueryPa>({ scene: "", userId: "" });
-	const orderId = ref<string>("");
-
-	//onLoad方法  --在页面初次加载时触发,仅会在页面初次加载时触发一次
-	//应该将二维码获取唯一标识放到缓存中--这样即使从其他页面过来就回调用就能记住这个标识--然后根据标识去查询
-	onLoad((options) => {
-		//获取的二维码中得到的参数信息
-		// console.log(decodeURIComponent(options?.scene));
-		// scene.value.scene = decodeURIComponent(options?.scene);
-		// userInfo.saveScene(decodeURIComponent(options?.scene));
-
-		//根据页面中的options 获取参数
-		//1判断是否含有这个参数
-
-		//2如果没有则是表明是从另一个页面进来的不是扫码进来的
-		//3则需要调用接口需要看到访问次数和过期时间
-		const option = options as any;
-		console.log(option.hasOwnProperty("scene"));
-		console.log(option.hasOwnProperty("id"));
-		if (option.hasOwnProperty("scene")) {
-			//
-			userInfo.saveScene(option.scene);
-		} else {
-			userInfo.saveScene("");
-			//获取参数接口
-		}
-		//将scene存入缓存中
-
-		// loginUser().then((res) => {
-		//   //这时已经有返回信息了且用户数据已经
-		//   scene.value.userId = res as string;
-		//   //获取到userId了
-		//   queryParams(scene.value);
-		// });
-	});
-	onShow(() => {
-		//从缓存中取出信息
-		//  scene.value.scene = decodeURIComponent(options?.scene);
-		//将scene存入缓存中
-		//需要判断是否有scene
-		scene.value.scene = userInfo.scene;
-		//不等于空的话就说明是从扫码进来的
-		//如果是空的话就是渠道点击进来的
-		if (scene.value.scene !== "") {
-			loginUser().then((res) => {
-				//这时已经有返回信息了且用户数据已经
-				scene.value.userId = res as string;
-				//获取到userId了
-				queryParams(scene.value);
-			});
-		} else {
-			//如果是渠道点击进来的
-			//则调用渠道接口//然后返回数据
-		}
-	});
-
-	//查询 根据唯一键值对
-	const queryParams = async (val : QueryPa) => {
-		const res = await queryParamsApi(val);
-
-		params.flag = res.data.flag;
-		if (params.flag == 3 || params.flag == 5) {
-			return;
-		}
-		params.title = res.data.title;
-		params.num = res.data.times;
-
-		params.time = formatterData(res.data.createDate, res.data.effectiveDays);
-
-		orderParams.userId = userInfo.userInfo.id;
-		orderParams.linId = res.data.id;
-		orderParams.channelId = res.data.channelId;
-		orderParams.title = res.data.title;
-		orderParams.amount = res.data.amount;
-		orderParams.times = res.data.times;
-		orderParams.effectiveDate = res.data.effectiveDays;
-		orderParams.createDate = res.data.createDate;
-		orderParams.staffId = res.data.staffId;
-		orderParams.staffName = res.data.staffName;
-		orderParams.backGround = res.data.backGround;
-		orderParams.status = res.data.status;
-		orderParams.flag = res.data.flag;
-	};
-
-	// 邀约订单查询报告记录
-	const queryReportList = async (val : any) => {
-		const res = await queryReportListApi({
-			linkId: orderParams.linId,
-			pageNum: 1,
-			pageSize: 6
-		});
+}
+
+//有效日期
+const formatterData = (date: any, day: any) => {
+	//将data日期格式化为初始的毫秒值
+	//将day 日期格式化为day
+
+	let dateF = new Date(date).getTime();
+	let dayF = day * 24 * 60 * 60 * 1000;
+	console.log(dateF);
+	console.log(dayF);
+	let dataN = dateF + dayF;
+	//然后将毫秒值转化为具体时间
+	let dataNew = new Date(dataN);
+	let y = dataNew.getFullYear();
+	let m =
+		dataNew.getMonth() + 1 < 10 ? "0" + (dataNew.getMonth() + 1) : dataNew.getMonth() + 1;
+
+	let d = dataNew.getDate() < 10 ? "0" + dataNew.getDate() : dataNew.getDate();
+	return y + "-" + m + "-" + d;
+};
+
+//1先生成订单号
+//2订单号生成后调用后台获取核心参数  核心参数获取到以后
+//3调用位置支付、、 查看成功与否
+//4如果是成功支付和用户取消了订单
+//5否则循环调用查询支付接口
+//支付完成后进行下边的逻辑--开始查询报告
+
+//点击支付按钮生成的方法
+const payButton = () => {
+	//先调用订单生成
+	creatOrderFun(orderParams)
+};
+//生成订单号
+const creatOrderFun = async (val: any) => {
+	const res = await createOrderApi(val);
+	if (res.code == '200') {
+		uni.showToast({
+			title: '支付成功'
+		})
+		queryParams(scene.value)
 	}
-
-	//有效日期
-	const formatterData = (date : any, day : any) => {
-		//将data日期格式化为初始的毫秒值
-		//将day 日期格式化为day
-
-		let dateF = new Date(date).getTime();
-		let dayF = day * 24 * 60 * 60 * 1000;
-		console.log(dateF);
-		console.log(dayF);
-		let dataN = dateF + dayF;
-		//然后将毫秒值转化为具体时间
-		let dataNew = new Date(dataN);
-		let y = dataNew.getFullYear();
-		let m =
-			dataNew.getMonth() + 1 < 10 ? "0" + (dataNew.getMonth() + 1) : dataNew.getMonth() + 1;
-
-		let d = dataNew.getDate() < 10 ? "0" + dataNew.getDate() : dataNew.getDate();
-		return y + "-" + m + "-" + d;
-	};
-
-	//1先生成订单号
-	//2订单号生成后调用后台获取核心参数  核心参数获取到以后
-	//3调用位置支付、、 查看成功与否
-	//4如果是成功支付和用户取消了订单
-	//5否则循环调用查询支付接口
-	//支付完成后进行下边的逻辑--开始查询报告
-
-	//点击支付按钮生成的方法
-	const payButton = () => {
-		//先调用订单生成
-		creatOrderFun(orderParams)
-	};
-	//生成订单号
-	const creatOrderFun = async (val : any) => {
-		const res = await createOrderApi(val);
-		if (res.code == 200) {
-			uni.showToast({
-				title: '支付成功'
-			})
-			params.flag = 4;
-		}
-		//获取到订单号了
-
-		//然后调用预支付接口后去核心数据
-		//payFun(val)
-	};
-	//支付接口调用
-	//调用后台接口返回订单号
-	//调用后台接口返回  下单核心数据
-	const payFun = async (val : any) => {
-		const res = await payAppointmentApi(val);
-		//核心参数返回后
-		//调用微信支付方法
-		uni.requestPayment({
-			...val,
-			success: (res : any) => {
-				if (res) {
-					console.log(res);
-					if (res.errMsg == "requestPayment:ok") {
-						//
-						console.log("支付成功");
-					}
-				}
-			},
-			fail: (res : any) => {
+	//获取到订单号了
+
+	//然后调用预支付接口后去核心数据
+	//payFun(val)
+};
+//支付接口调用
+//调用后台接口返回订单号
+//调用后台接口返回  下单核心数据
+const payFun = async (val: any) => {
+	const res = await payAppointmentApi(val);
+	//调用微信支付方法
+	uni.requestPayment({
+		...val,
+		success: (res: any) => {
+			if (res) {
 				console.log(res);
-				if (res.errMsg == "requestPayment:fail cancel") {
-					console.log("用户取消了支付");
-				} else {
-					queryOrderFor();
-					//调用支付失败的具体原因
-					//这时是不是就应该定时器调用订单状态
+				if (res.errMsg == "requestPayment:ok") {
+					// console.log("支付成功");
 				}
-			},
-		});
-	};
-
-	//点击税务风险检测--弹出输入税务号的信息
-	const swGet = ref<any>();
-	const openSW = () => {
-		queryReportList();
-		// swGet.value.openSH();
-	};
-
-	const goCheck = () => {
-	}
-
-	//查询订单状态
-	const queryOrderStatus = async (val : any) => {
-		const res = await queryOrderStatusApi(val);
-		//判定返回参数
-		//如果订单完成了
-		//如果是满了返回了
-		//需要去掉定时器
-		clearInterval(timeMe.value);
-	};
-	//定时器参数
-	const timeMe = ref<any>();
-	//创建一个定时器
-	const queryOrderFor = () => {
-		//进来的时候清除定时器
-		clearInterval(timeMe.value);
-		timeMe.value = setInterval(() => {
-			//嗲用方法
-			queryOrderStatus({});
-		}, 3000);
-	};
-
-	//销毁页面
-	onUnload(() => {
-		//来清除定时器
-		clearInterval(timeMe.value);
+			}
+		},
+		fail: (res: any) => {
+			console.log(res);
+			if (res.errMsg == "requestPayment:fail cancel") {
+				console.log("用户取消了支付");
+			} else {
+				queryOrderFor();
+				//调用支付失败的具体原因
+				//这时是不是就应该定时器调用订单状态
+			}
+		},
 	});
+};
+
+//点击税务风险检测--弹出输入税务号的信息
+const swGet = ref<any>();
+const openSW = () => {
+	swGet.value.openSH();
+};
+
+
+const goCheck = () => {
+}
+
+//查询订单状态
+const queryOrderStatus = async (val: any) => {
+	const res = await queryOrderStatusApi(val);
+	//判定返回参数
+	//如果订单完成了
+	//如果是满了返回了
+	//需要去掉定时器
+	clearInterval(timeMe.value);
+};
+//定时器参数
+const timeMe = ref<any>();
+//创建一个定时器
+const queryOrderFor = () => {
+	//进来的时候清除定时器
+	clearInterval(timeMe.value);
+	timeMe.value = setInterval(() => {
+		//嗲用方法
+		queryOrderStatus({});
+	}, 3000);
+};
+
+//销毁页面
+onUnload(() => {
+	//来清除定时器
+	clearInterval(timeMe.value);
+});
 </script>
 <template>
 	<view class="payBg">
@@ -276,87 +288,87 @@
 		</view>
 		<view v-show="params.flag == 1 || params.flag == 2"><button class="pay_button" @click="payButton">立即支付</button>
 		</view>
-		<view v-show="params.flag == 4"><button class="detection_button" @click="openSW">税务风险检测</button></view>
-
-		<view v-show="params.flag == 4">
-			<HomeList class="home_list_com" />
+		<view v-show="params.flag == 4 && params.num > 0"><button class="detection_button"
+				@click="openSW">税务风险检测</button></view>
+		<view>
+			<HomeList v-if="params.flag == 4" ref="homeList" :linkId="orderParams.linId" class="home_list_com" />
 		</view>
-		<ShuiWuSH ref="swGet" />
+		<ShuiWuSH ref="swGet" @saveReport="saveReportHandle" />
 	</view>
 </template>
 <style lang="scss">
-	page {
-		height: 100%;
-	}
-
-	.payBg {
-		width: 750rpx;
-		height: 100%;
-		padding: 0rpx 20rpx;
-
-		.pay_params {
-			width: 703rpx;
-			height: 273rpx;
-			color: #333333;
-			margin-top: 60rpx;
-			padding: 20rpx 40rpx;
-			background: url(https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/pay_card.png) no-repeat top;
-			background-size: cover;
-			display: flex;
-			flex-direction: column;
-
-			.pay_card_title1 {
-				font-family: 'Alibaba PuHuiTi 2.0';
-				font-weight: normal;
-				font-size: 32rpx;
-				color: #0056FF;
-				padding: 20rpx 0 40rpx 20rpx;
-			}
-
-			.pay_card_num {
-				font-family: 'Alibaba PuHuiTi 2.0';
-				font-weight: normal;
-				font-size: 28rpx;
-				color: #333333;
-				padding-left: 20rpx;
-				margin-top: 20rpx;
-			}
-
-			.pay_card_time {
-				font-family: 'Alibaba PuHuiTi 2.0';
-				font-weight: normal;
-				font-size: 28rpx;
-				color: #333333;
-				padding-left: 20rpx;
-				margin-top: 20rpx;
-				margin-bottom: 40rpx;
-			}
+page {
+	height: 100%;
+}
+
+.payBg {
+	width: 750rpx;
+	height: 100%;
+	padding: 0rpx 20rpx;
+
+	.pay_params {
+		width: 703rpx;
+		height: 273rpx;
+		color: #333333;
+		margin-top: 60rpx;
+		padding: 20rpx 40rpx;
+		background: url(https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/pay_card.png) no-repeat top;
+		background-size: cover;
+		display: flex;
+		flex-direction: column;
+
+		.pay_card_title1 {
+			font-family: 'Alibaba PuHuiTi 2.0';
+			font-weight: normal;
+			font-size: 32rpx;
+			color: #0056FF;
+			padding: 20rpx 0 40rpx 20rpx;
 		}
 
-		.pay_button {
-			width: 703rpx;
-			line-height: 77rpx;
-			background: linear-gradient(90deg, #BC63F4 0%, #4A89FB 100%);
-			border-radius: 20rpx;
-			border: 1px solid #FFFFFF;
-			font-family: Alibaba PuHuiTi 2.0;
+		.pay_card_num {
+			font-family: 'Alibaba PuHuiTi 2.0';
 			font-weight: normal;
-			font-size: 32rpx;
-			color: #FFFFFF;
-			margin: 72rpx 0 60rpx;
+			font-size: 28rpx;
+			color: #333333;
+			padding-left: 20rpx;
+			margin-top: 20rpx;
 		}
 
-		.detection_button {
-			width: 703rpx;
-			line-height: 77rpx;
-			background: linear-gradient(90deg, #BC63F4 0%, #4A89FB 100%);
-			border-radius: 20rpx;
-			border: 1px solid #FFFFFF;
-			font-family: Alibaba PuHuiTi 2.0;
+		.pay_card_time {
+			font-family: 'Alibaba PuHuiTi 2.0';
 			font-weight: normal;
-			font-size: 32rpx;
-			color: #FFFFFF;
-			margin: 72rpx 0 60rpx;
+			font-size: 28rpx;
+			color: #333333;
+			padding-left: 20rpx;
+			margin-top: 20rpx;
+			margin-bottom: 40rpx;
 		}
 	}
+
+	.pay_button {
+		width: 703rpx;
+		line-height: 77rpx;
+		background: linear-gradient(90deg, #BC63F4 0%, #4A89FB 100%);
+		border-radius: 20rpx;
+		border: 1px solid #FFFFFF;
+		font-family: Alibaba PuHuiTi 2.0;
+		font-weight: normal;
+		font-size: 32rpx;
+		color: #FFFFFF;
+		margin: 72rpx 0 60rpx;
+	}
+
+	.detection_button {
+		width: 703rpx;
+		line-height: 77rpx;
+		background: linear-gradient(90deg, #BC63F4 0%, #4A89FB 100%);
+		border-radius: 20rpx;
+		border: 1px solid #FFFFFF;
+		font-family: Alibaba PuHuiTi 2.0;
+		font-weight: normal;
+		font-size: 32rpx;
+		color: #FFFFFF;
+		margin: 72rpx 0 60rpx;
+	}
+}
 </style>

+ 26 - 49
src/pages/login/login.vue

@@ -75,80 +75,52 @@ const saveUserSWFun = async (val: any) => {
 <template>
   <view class="login">
     <view class="login_top">
-      <image
-        class="login_image"
-        mode="'scaleToFill'"
-        src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg"
-      ></image>
+      <image class="login_image" mode="'scaleToFill'"
+        src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg"></image>
     </view>
     <view class="login_mid">
-      <view class="login_mid_inner"
-        ><view class="uni-padding-wrap uni-common-mt">
-          <uni-segmented-control
-            :current="current"
-            :values="titleArr"
-            :style-type="styleType"
-            :active-color="activeColor"
-            @clickItem="onClickTitle"
-          />
+      <view class="login_mid_inner">
+        <view class="uni-padding-wrap uni-common-mt">
+          <uni-segmented-control :current="current" :values="titleArr" :style-type="styleType"
+            :active-color="activeColor" @clickItem="onClickTitle" />
         </view>
         <view class="content">
           <view v-if="current === 0">
             <view class="content_info">
               <view class="login_text">纳税人识别号</view>
               <view>
-                <uni-easyinput
-                  :disabled="true"
-                  v-model="swNum"
-                  placeholder="请输入纳税人识别号"
-                ></uni-easyinput
-              ></view>
+                <uni-easyinput :disabled="true" v-model="swNum" placeholder="请输入纳税人识别号"></uni-easyinput>
+              </view>
             </view>
             <view class="content_info">
               <view class="login_text">企业名称</view>
               <view>
-                <uni-easyinput
-                  :disabled="true"
-                  v-model="name"
-                  placeholder="请输入企业名称"
-                ></uni-easyinput
-              ></view>
+                <uni-easyinput :disabled="true" v-model="name" placeholder="请输入企业名称"></uni-easyinput>
+              </view>
             </view>
             <view class="content_info">
               <view class="login_text">电子税务局账号</view>
               <view>
-                <uni-easyinput
-                  :clearable="false"
-                  v-model="swAcount"
-                  placeholder="请输入电子税务局账号"
-                ></uni-easyinput
-              ></view>
+                <uni-easyinput :clearable="false" v-model="swAcount" placeholder="请输入电子税务局账号"></uni-easyinput>
+              </view>
             </view>
             <view class="content_info">
               <view class="login_text">电子税务局密码</view>
               <view>
-                <uni-easyinput
-                  :clearable="false"
-                  type="password"
-                  v-model="swPas"
-                  placeholder="请输入电子税务局密码"
-                ></uni-easyinput
-              ></view>
+                <uni-easyinput :clearable="false" type="password" v-model="swPas"
+                  placeholder="请输入电子税务局密码"></uni-easyinput>
+              </view>
             </view>
             <view>
-              <button
-                @click="authorizedLogin"
-                size="default"
-                style="color: #ffffff; background: #302ebe; margin-top: 90rpx"
-                hover-class="is-hover"
-              >
+              <button @click="authorizedLogin" size="default"
+                style="color: #ffffff; background: #302ebe; margin-top: 90rpx" hover-class="is-hover">
                 授权登录
-              </button></view
-            >
+              </button>
+            </view>
           </view>
           <view v-if="current === 1"><text class="content-text">旧版登录</text></view>
-        </view></view
-      >
+        </view>
+      </view>
     </view>
   </view>
   <ShuiWuAuth ref="auth_next" />
@@ -161,10 +133,12 @@ const saveUserSWFun = async (val: any) => {
       height: 300rpx;
     }
   }
+
   .login_mid {
     width: 750rpx;
     padding: 0rpx 20rpx;
     position: relative;
+
     .login_mid_inner {
       padding: 0px 20rpx;
       width: 710rpx;
@@ -173,6 +147,7 @@ const saveUserSWFun = async (val: any) => {
       border-radius: 40rpx;
       background-color: #ffffff;
       margin-top: -60rpx;
+
       .content {
         .login_text {
           font-size: 30rpx;
@@ -180,9 +155,11 @@ const saveUserSWFun = async (val: any) => {
           margin-bottom: 20rpx;
           margin-top: 20rpx;
         }
+
         .content_info {
           margin-top: 40rpx;
         }
+
         .content_button {
           background: linear-gradient(#302ebe #110981);
         }

+ 20 - 0
src/pages/my/inviteDetail.vue

@@ -0,0 +1,20 @@
+<script setup lang="ts">
+</script>
+
+<template>
+    <view>
+        <view class="invite_info">
+            <view><text>标题:</text><text>价格:</text></view>
+            <view><text>次数:</text><text>次数:</text></view>
+            <view><text>剩余次数:</text><text></text></view>
+        </view>
+        <view class="cover"></view>
+        <view>
+            <image src="" mode="scaleToFill" />
+        </view>
+    </view>
+</template>
+
+<style lang="sass">
+
+</style>

+ 213 - 196
src/pages/my/my.vue

@@ -1,66 +1,83 @@
 <script setup lang="ts">
-	import ShuiWuTop from "@/components/ShuiWuTop.vue";
-	import { useMemberStore } from "@/stores";
-	import { http } from "@/utils/http";
-	const memberStore = useMemberStore();
-	const getData = async () => {
-		const res = await http<string[]>({
-			url: `/home/banner`,
-			method: "GET",
-			header: {},
-		});
-	};
+import ShuiWuTop from "@/components/ShuiWuTop.vue";
+import { useMemberStore } from "@/stores";
+import { http } from "@/utils/http";
+import { onShow } from "@dcloudio/uni-app";
+const memberStore = useMemberStore();
+const getData = async () => {
+	const res = await http<string[]>({
+		url: `/home/banner`,
+		method: "GET",
+		header: {},
+	});
+};
 
-	const editUser = () => {
-		//跳转到编辑页面
-		uni.navigateTo({
-			url: "/pages/my/myEdit",
-		});
-	};
-	const shireFun = () => {
-		uni.share({
-			provider: "weixin",
-			scene: "WXSceneSession",
-			type: 1,
-			summary: "我正在使用HBuilderX开发uni-app,赶紧跟我一起来体验!",
-			success: function (res) {
-				console.log("success:" + JSON.stringify(res));
-			},
-			fail: function (err) {
-				console.log("fail:" + JSON.stringify(err));
-			},
-		});
-	};
-	const myInvite = () => {
-		//跳转到邀请页面
-		uni.navigateTo({
-			url: "/pages/my/myInvite",
-		});
-	};
+const editUser = () => {
+	//跳转到编辑页面
+	uni.navigateTo({
+		url: "/pages/my/myEdit",
+	});
+};
+const shireFun = () => {
+	uni.share({
+		provider: "weixin",
+		scene: "WXSceneSession",
+		type: 1,
+		summary: "我正在使用HBuilderX开发uni-app,赶紧跟我一起来体验!",
+		success: function (res) {
+			console.log("success:" + JSON.stringify(res));
+		},
+		fail: function (err) {
+			console.log("fail:" + JSON.stringify(err));
+		},
+	});
+};
+const myInvite = () => {
+	//跳转到邀请页面
+	uni.navigateTo({
+		url: "/pages/my/myInvite",
+	});
+};
 
-	const aboutMy = () => {
-		//跳转到关于
-		uni.navigateTo({
-			url: "/pages/my/aboutMy",
-		});
-	};
-	const report = () => {
-		//跳转到报告页面
-		uni.navigateTo({
-			url: "/pages/my/reportList",
+const aboutMy = () => {
+	//跳转到关于
+	uni.navigateTo({
+		url: "/pages/my/aboutMy",
+	});
+};
+const report = () => {
+	//跳转到报告页面
+	uni.navigateTo({
+		url: "/pages/my/reportList",
+	});
+};
+
+const exit = () => {
+	uni.showToast({ title: "已退出" });
+	//跳转到报告页面
+
+	setTimeout(() => {
+		uni.switchTab({
+			url: "/pages/index/index",
 		});
-	};
-
-	const exit = () => {
-		uni.showToast({ title: "已退出" });
-		//跳转到报告页面
-
-		setTimeout(() => {
-			uni.switchTab({
-				url: "/pages/index/index",
-			});
-		}, 550);
-	};
+	}, 550);
+};
+
+onShow(() => {
+	if (memberStore.userInfo.isAuth == '0') {
+		uni.switchTab({
+			url: '/pages/index/index',
+			success() {
+				uni.showToast({
+					title: '暂无权限',
+					icon: 'none',
+					duration: 1500
+				})
+			}
+		})
+		return
+	}
+})
 </script>
 
 <template>
@@ -78,12 +95,12 @@
 				<image class="user_image" :src="memberStore.userInfo.photoPath"></image>
 				<view class="user_name">
 					<view class="user_name_detail">{{ memberStore.userInfo.userName }}</view>
-					<view class="user_name_detail">岗位:&nbsp;&nbsp;{{ memberStore.userInfo.job }}</view>
+					<!-- <view class="user_name_detail">岗位:&nbsp;&nbsp;{{ memberStore.userInfo.job }}</view> -->
 				</view>
 			</view>
 			<view class="info_detail">联系电话:&nbsp;&nbsp;{{
-          memberStore.userInfo.phone == "NaN" ? "" : memberStore.userInfo.phone
-        }}
+				memberStore.userInfo.phone == "NaN" ? "" : memberStore.userInfo.phone
+			}}
 			</view>
 			<view class="info_detail">邮箱:&nbsp;&nbsp;{{ memberStore.userInfo.mail }}</view>
 			<view class="info_detail" style="margin-bottom: 15rpx">
@@ -118,7 +135,7 @@
 					<image class="tab_icon"
 						src="https://test.jue-ming.com:8849/api/show?filePath=./jinhong/my/menu_icon2.png" />
 				</view>
-				<view class="tab_des"> 报告记录 </view>
+				<view class="tab_des">报告记录</view>
 				<view>
 					<image class="tab_icon-right" src="../../static/images/right.png" />
 				</view>
@@ -149,169 +166,169 @@
 </template>
 
 <style lang="scss">
-	//
-	page {
-		width: 100%;
-		height: 100%;
-	}
+//
+page {
+	width: 100%;
+	height: 100%;
+}
 
-	.bg {
-		height: 100%;
-		padding: 0rpx 20rpx;
-
-		.home_top {
-			text-align: center;
-			font-family: 'Alibaba PuHuiTi 2.0';
-			font-weight: normal;
-			font-size: 32rpx;
-			color: #FFFFFF;
-			padding: 110rpx 0 60rpx;
-		}
+.bg {
+	height: 100%;
+	padding: 0rpx 20rpx;
 
-		.company_top {
-			margin-bottom: 20rpx;
-			display: flex;
-			justify-content: start;
-			align-items: center;
+	.home_top {
+		text-align: center;
+		font-family: 'Alibaba PuHuiTi 2.0';
+		font-weight: normal;
+		font-size: 32rpx;
+		color: #FFFFFF;
+		padding: 110rpx 0 60rpx;
+	}
 
-			.company_image {
-				width: 60rpx;
-				height: 60rpx;
-				background-color: #eeeeee;
-				border-radius: 50%;
-				margin-right: 20rpx;
-			}
+	.company_top {
+		margin-bottom: 20rpx;
+		display: flex;
+		justify-content: start;
+		align-items: center;
+
+		.company_image {
+			width: 60rpx;
+			height: 60rpx;
+			background-color: #eeeeee;
+			border-radius: 50%;
+			margin-right: 20rpx;
 		}
 	}
+}
 
-	.my_info {
-		width: 703rpx;
-		height: 378rpx;
-		background: url(https://test.jue-ming.com:8849/api/show?filePath=./jinhong/my/user_card.png);
-		background-size: 100% 100%;
-		border-radius: 15rpx;
+.my_info {
+	width: 703rpx;
+	height: 378rpx;
+	background: url(https://test.jue-ming.com:8849/api/show?filePath=./jinhong/my/user_card.png);
+	background-size: 100% 100%;
+	border-radius: 15rpx;
 
-		.info_out {
+	.info_out {
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+		padding: 31rpx 0 18rpx 39rpx;
+
+		.user_name {
+			color: #333333;
 			display: flex;
-			flex-direction: row;
-			align-items: center;
-			padding: 31rpx 0 18rpx 39rpx;
+			flex-direction: column;
+			justify-content: space-between;
 
-			.user_name {
+			.user_name_detail {
+				font-family: 'Alibaba PuHuiTi 2.0';
+				font-weight: normal;
+				font-size: 28rpx;
 				color: #333333;
-				display: flex;
-				flex-direction: column;
-				justify-content: space-between;
-
-				.user_name_detail {
-					font-family: 'Alibaba PuHuiTi 2.0';
-					font-weight: normal;
-					font-size: 28rpx;
-					color: #333333;
-					margin-bottom: 12rpx;
-				}
+				margin-bottom: 12rpx;
 			}
 		}
+	}
 
-		.user_image {
-			width: 68rpx;
-			height: 68rpx;
-			background-color: #eeeeee;
-			margin-right: 20rpx;
-		}
+	.user_image {
+		width: 68rpx;
+		height: 68rpx;
+		background-color: #eeeeee;
+		margin-right: 20rpx;
+	}
 
-		.info_detail {
-			padding: 10rpx 39rpx;
-			font-family: 'Alibaba PuHuiTi 2.0';
-			font-weight: normal;
-			font-size: 28rpx;
-			color: #333333;
-		}
+	.info_detail {
+		padding: 10rpx 39rpx;
+		font-family: 'Alibaba PuHuiTi 2.0';
+		font-weight: normal;
+		font-size: 28rpx;
+		color: #333333;
+	}
 
-		.info_edit {
-			width: 100%;
-			line-height: 76rpx;
+	.info_edit {
+		width: 100%;
+		line-height: 76rpx;
+		display: flex;
+		font-size: 36rpx;
+		align-items: center;
+		margin-top: 21rpx;
+
+		.button_edit {
+			flex: 1;
+			background-color: transparent;
+			font-size: 28rpx;
+			color: #FEFEFE;
 			display: flex;
-			font-size: 36rpx;
+			justify-content: center;
 			align-items: center;
-			margin-top: 21rpx;
 
-			.button_edit {
-				flex: 1;
-				background-color: transparent;
-				font-size: 28rpx;
-				color: #FEFEFE;
-				display: flex;
-				justify-content: center;
-				align-items: center;
-
-				image {
-					width: 34rpx;
-					margin-right: 10rpx;
-				}
-
-				&:active {
-					opacity: 0.8;
-				}
+			image {
+				width: 34rpx;
+				margin-right: 10rpx;
 			}
 
-			.line {
-				width: 1rpx;
-				height: 59rpx;
-				background: #FFFFFF;
+			&:active {
+				opacity: 0.8;
 			}
 		}
 
-		// items-align:center;
+		.line {
+			width: 1rpx;
+			height: 59rpx;
+			background: #FFFFFF;
+		}
 	}
 
-	.user_icon {
-		margin-right: 30rpx;
-		width: 80rpx;
-		height: 80rpx;
-		border-radius: 50%;
-	}
+	// items-align:center;
+}
 
-	.my_tab {
-		background-color: #ffffff;
-		margin-top: 40rpx;
-		border-radius: 30rpx;
-		padding: 10rpx 30rpx;
-	}
+.user_icon {
+	margin-right: 30rpx;
+	width: 80rpx;
+	height: 80rpx;
+	border-radius: 50%;
+}
 
-	.my_tab_detail {
-		margin-top: 42rpx;
-		margin-bottom: 20rpx;
-		display: flex;
-		flex-direction: row;
-		align-items: center;
+.my_tab {
+	background-color: #ffffff;
+	margin-top: 40rpx;
+	border-radius: 30rpx;
+	padding: 10rpx 30rpx;
+}
 
-		justify-content: flex-start;
-	}
+.my_tab_detail {
+	margin-top: 42rpx;
+	margin-bottom: 20rpx;
+	display: flex;
+	flex-direction: row;
+	align-items: center;
 
-	.my_tab_detail_exit {
-		margin-top: 40rpx;
-		margin-bottom: 40rpx;
-		display: flex;
-		flex-direction: row;
-		align-items: center;
-		width: 100%;
-		justify-content: center;
-	}
+	justify-content: flex-start;
+}
 
-	.tab_icon {
-		width: 40rpx;
-		height: 40rpx;
-	}
+.my_tab_detail_exit {
+	margin-top: 40rpx;
+	margin-bottom: 40rpx;
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	width: 100%;
+	justify-content: center;
+}
 
-	.tab_des {
-		font-size: 30rpx;
-		margin-left: 30rpx;
-		flex: 1;
-	}
+.tab_icon {
+	width: 40rpx;
+	height: 40rpx;
+}
 
-	.tab_icon-right {
-		width: 20rpx;
-		height: 30rpx;
-	}
+.tab_des {
+	font-size: 30rpx;
+	margin-left: 30rpx;
+	flex: 1;
+}
+
+.tab_icon-right {
+	width: 20rpx;
+	height: 30rpx;
+}
 </style>

+ 152 - 3
src/pages/my/myInvite.vue

@@ -1,10 +1,159 @@
 <script setup lang="ts">
-import HomeList from "../index/components/HomeList.vue";
+import { reactive, ref } from "vue";
+import { queryMyInviteApi, findStaffByPhoneApi } from '@/services/home'
+import { useMemberStore } from "@/stores";
+import { onLoad } from "@dcloudio/uni-app";
+
+const userMember = useMemberStore()
+const pageNum = ref(1);
+const pageSize = ref(10)
+const staffId = ref('');
+const inviteList = reactive<any>([]);
+
+const queryMyInvite = async () => {
+  let data = {
+    pageNum: pageNum.value,
+    pageSize: pageSize.value,
+    channelId: userMember.userInfo.channel,
+    staffId: staffId.value,
+  };
+  let res = await queryMyInviteApi(data);
+
+  console.log(res.data.content);
+
+  if (res?.code == '200' && res.data?.content?.length > 0) {
+    inviteList.value = res.data.content;
+  }
+}
+
+const getStaffInfo = async () => {
+  let res = await findStaffByPhoneApi(userMember.userInfo.phone);
+  staffId.value = res.data.id;
+  queryMyInvite();
+}
+
+const goDetail = (item: any) => {
+  uni.navigateTo({ url: '/pages/inviteDetail' })
+}
+
+onLoad(() => {
+  getStaffInfo();
+})
+
 </script>
 
 <template>
   <view>
-    <HomeList />
+    <view class="home_list_view" v-if="inviteList.value.length > 0">
+      <view class="home_list_title">
+        <view class="home_list_line"></view>
+        <text>我的邀请</text>
+      </view>
+      <view style="height: 100%">
+        <scroll-view scroll-y="true" lower-threshold="30" @scrolltolower="scrollLower">
+          <view class="list_out" v-for="item in inviteList.value" :key="item.id">
+            <view class="report_status">{{ item.status == 1 ? '已使用' : '待使用' }}</view>
+            <view class="list_title">
+              <view class="report_name">{{ item.title }}</view>
+              <view class="list_time">{{ item.createDate }}</view>
+            </view>
+            <view class="list_button">
+              <view> <button class="button_detail" size="mini" @click="goDetail(item)">查看详情</button></view>
+            </view>
+          </view>
+          <!-- <uni-load-more iconType="circle" :status="status" /> -->
+        </scroll-view>
+      </view>
+    </view>
   </view>
 </template>
-<style lang="scss"></style>
+<style lang="scss" scoped>
+.home_list_view {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  height: 100%;
+  overflow: scroll;
+
+  .list_out {
+    width: 100%;
+    height: 187rpx;
+    background: #FFFFFF;
+    border-radius: 20rpx;
+    border: 1px solid #FFFFFF;
+    margin-top: 20rpx;
+    padding: 36rpx 21rpx 21rpx 34rpx;
+    position: relative;
+
+    .list_title {
+      .report_name {
+        font-family: 'Alibaba PuHuiTi 2.0';
+        font-weight: normal;
+        font-size: 32rpx;
+        color: #333333;
+      }
+
+      .list_time {
+        font-family: 'Alibaba PuHuiTi 2.0';
+        font-weight: normal;
+        font-size: 24rpx;
+        color: #999999;
+      }
+    }
+
+    .report_status {
+      width: 102rpx;
+      line-height: 41rpx;
+      background: url(https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/status_icon.png) no-repeat center;
+      background-size: 100% 100%;
+      font-family: 'Alibaba PuHuiTi 2.0';
+      font-weight: normal;
+      font-size: 24rpx;
+      color: #FFFFFF;
+      text-align: center;
+      position: absolute;
+      top: 0;
+      right: 0;
+    }
+
+    .list_button {
+      text-align: right;
+      margin-top: 6rpx;
+
+      .button_detail {
+        color: #ffffff;
+        background: linear-gradient(90deg, #BC63F4 0%, #4A89FB 100%);
+        border-radius: 20rpx;
+      }
+    }
+  }
+}
+
+.is-input-border {
+  display: flex;
+  box-sizing: border-box;
+  flex-direction: row;
+  align-items: center;
+  border: 10px solid #dcdfe6;
+  border-radius: 400px !important;
+}
+
+.home_list_title {
+  display: flex;
+  align-items: center;
+
+  text {
+    font-family: 'Alibaba PuHuiTi 2.0';
+    font-weight: normal;
+    font-size: 32rpx;
+    color: #333333;
+  }
+}
+
+.home_list_line {
+  width: 15rpx;
+  height: 35rpx;
+  background: #4A89FB;
+  border-radius: 20rpx;
+}
+</style>

+ 13 - 3
src/pages/my/reportList.vue

@@ -1,10 +1,20 @@
 <script setup lang="ts">
 import HomeList from "../index/components/HomeList.vue";
+import ShuiWuNav from "../index/components/HomeList.vue";
+import { useMemberStore } from "@/stores";
+const memberStore = useMemberStore();
+
+const userId = memberStore.userInfo.id;
 </script>
 
 <template>
-  <view>
-    <HomeList />
+  <view class="page">
+    <ShuiWuNav navTitle="报告记录" />
+    <HomeList :userId="userId" />
   </view>
 </template>
-<style lang="scss"></style>
+<style lang="scss" scoped>
+.page {
+  padding: 0 24rpx;
+}
+</style>

+ 126 - 78
src/services/home.ts

@@ -33,123 +33,171 @@ const saveReportUrl = '/report/save'
 // 邀约订单查询报告
 const queryReportListUrl = '/report/find'
 
+// 根据用户查询报告列表
+const queryReportListByUserUrl = '/report/findByUser/'
+
+// 我的邀约
+const queryMyInvitesUrl = '/link/find'
+
 //订单号查询
 const queryOrderStatusUrl = ''
 
 //报错登录用户信息
 const saveUserSWUrl = ''
 
+// 手机号查询用户是否备案
+const findByPhoneUrl = '/staff/findByPhone'
+
+// 手机号查询员工
+const findStaffByPhone = '/staff/findByPhone'
+
 export const getHomeApi = (distributionSite = 1) => {
-	return http<TypeList[]>({
-		method: 'GET',
-		url: home,
-		data: {
-			distributionSite,
-		},
-	})
+  return http<TypeList[]>({
+    method: 'GET',
+    url: home,
+    data: {
+      distributionSite,
+    },
+  })
 }
 
 export const musicTypeApi = () => {
-	return http<TypeList[]>({
-		method: 'GET',
-		url: musicType,
-		data: {},
-	})
+  return http<TypeList[]>({
+    method: 'GET',
+    url: musicType,
+    data: {},
+  })
 }
 
-export const musicFindApi = (id : string) => {
-	return http<MusicFInd[]>({
-		method: 'GET',
-		url: musicFindUrl + `/${id}`,
-	})
+export const musicFindApi = (id: string) => {
+  return http<MusicFInd[]>({
+    method: 'GET',
+    url: musicFindUrl + `/${id}`,
+  })
 }
 
 //用户登录
-export const userLoginApi = (val : LoginParams) => {
-	return http<any>({
-		method: 'POST',
-		url: userLoginUrl,
-		data: { ...val },
-	})
+export const userLoginApi = (val: LoginParams) => {
+  return http<any>({
+    method: 'POST',
+    url: userLoginUrl,
+    data: { ...val },
+  })
 }
 
 //获取用户手机号
-export const getUserPhoneApi = (val : GetPhoneParams) => {
-	return http<any>({
-		method: 'POST',
-		url: getUserPhoneUrl,
-		data: { ...val },
-	})
+export const getUserPhoneApi = (val: GetPhoneParams) => {
+  return http<any>({
+    method: 'POST',
+    url: getUserPhoneUrl,
+    data: { ...val },
+  })
+}
+
+// 手机号查询用户是否备案
+export const findByPhoneApi = (val: string) => {
+  return http<any>({
+    method: 'GET',
+    url: `${findByPhoneUrl}/${val}`,
+    data: {},
+  })
+}
+
+// 根据手机号查询员工信息
+export const findStaffByPhoneApi = (val: string) => {
+  return http<any>({
+    method: 'GET',
+    url: `${findStaffByPhone}/${val}`,
+    data: {},
+  })
 }
 
 //生成海报接口
-export const createPosterApi = (val : CreatePo) => {
-	return http<any>({
-		method: 'POST',
-		url: createPosterUrl,
-		data: { ...val },
-	})
+export const createPosterApi = (val: CreatePo) => {
+  return http<any>({
+    method: 'POST',
+    url: createPosterUrl,
+    data: { ...val },
+  })
 }
 
 //根据查询scene 查询传输参数的 方法
-export const queryParamsApi = (val : any) => {
-	return http<any>({
-		method: 'GET',
-		url: `${queryParamsUrl}/${val.scene}/${val.userId}`,
-		// data: { ...val },
-	})
+export const queryParamsApi = (val: any) => {
+  return http<any>({
+    method: 'GET',
+    url: `${queryParamsUrl}/${val.scene}/${val.userId}`,
+    // data: { ...val },
+  })
 }
 
 //生成订单号
-export const createOrderApi = (val : any) => {
-	return http<any>({
-		method: 'POST',
-		url: createOrderUrl,
-		data: { ...val },
-	})
+export const createOrderApi = (val: any) => {
+  return http<any>({
+    method: 'POST',
+    url: createOrderUrl,
+    data: { ...val },
+  })
 }
 
 //调用后去后台核心参数--预支付
-export const payAppointmentApi = (val : any) => {
-	return http<any>({
-		method: 'POST',
-		url: payAppointmentUrl,
-		data: { ...val },
-	})
+export const payAppointmentApi = (val: any) => {
+  return http<any>({
+    method: 'POST',
+    url: payAppointmentUrl,
+    data: { ...val },
+  })
 }
 
 //保存报告
-export const saveOrderApi = (val : any) => {
-	return http<any>({
-		method: 'POST',
-		url: saveReportUrl,
-		data: { ...val },
-	})
+export const saveReportApi = (val: any) => {
+  return http<any>({
+    method: 'POST',
+    url: saveReportUrl,
+    data: { ...val },
+  })
 }
 
 // 邀约订单查询报告列表
-export const queryReportListApi = (val : any) => {
-	return http<any>({
-		method: 'POST',
-		url: queryReportListUrl,
-		data: { ...val },
-	})
+export const queryReportListApi = (val: any) => {
+  return http<any>({
+    method: 'POST',
+    url: queryReportListUrl,
+    data: { ...val },
+  })
+}
+
+// 根据用户查询报告列表
+export const queryReportListByUserApi = (id: string, val: any) => {
+  return http<any>({
+    method: 'GET',
+    url: `${queryReportListByUserUrl}${id}`,
+    data: { ...val },
+  })
 }
 
 //根据订单号查询用户订单状况
-export const queryOrderStatusApi = (val : any) => {
-	return http<any>({
-		method: 'POST',
-		url: queryOrderStatusUrl,
-		data: { ...val },
-	})
+export const queryOrderStatusApi = (val: any) => {
+  return http<any>({
+    method: 'POST',
+    url: queryOrderStatusUrl,
+    data: { ...val },
+  })
 }
 
 //保存账号信息
-export const saveUserSWApi = (val : any) => {
-	return http<any>({
-		method: 'POST',
-		url: saveUserSWUrl,
-		data: { ...val },
-	})
-}
+export const saveUserSWApi = (val: any) => {
+  return http<any>({
+    method: 'POST',
+    url: saveUserSWUrl,
+    data: { ...val },
+  })
+}
+
+// 查询我的邀请列表
+export const queryMyInviteApi = (val: any) => {
+  return http<any>({
+    method: 'POST',
+    url: queryMyInvitesUrl,
+    data: { ...val },
+  })
+}

BIN
src/static/images/bg.png


BIN
src/static/images/blank_cart.png


BIN
src/static/images/bubble.png


BIN
src/static/images/car.png


BIN
src/static/images/center_bg.png


BIN
src/static/images/locate.png


BIN
src/static/images/logo.png


BIN
src/static/images/logo_icon.png


BIN
src/static/images/navigator_bg.png


BIN
src/static/images/order_bg.png


BIN
src/static/images/stars.png


BIN
src/static/images/start.png


BIN
src/static/images/组 3@3x(2).png


BIN
src/static/images/组 3@3x(3).png


+ 9 - 8
src/utils/http.ts

@@ -4,14 +4,9 @@ import { userLoginApi } from '@/services/home'
 
 //引入 pinia 。。登录后将信息储存到pinia
 
-// const baseUrl = 'https://pcapi-xiaotuxian-front-devtest.itheima.net'
-// const baseUrl = 'https://test.jue-ming.com:8084'
-const baseUrl = 'http://10.113.248.3:8086'
-export const imgUrl = 'http://10.113.248.3:8086/file/show?filePath='
-// export const imgUrl = 'https://test.jue-ming.com:8084/file/show?filePath='
-export const mediaUrl = 'https://test.jue-ming.com:8084/file/show/media?filePath='
-// const baseUrl = 'http://10.113.248.3:8080'
-// export const imgUrl = 'http://10.113.248.3:8080/file/show?filePath='
+const baseUrl = import.meta.env.VITE_SERVE
+export const imgUrl = `${import.meta.env.VITE_SERVE}/file/show?filePath=`
+export const mediaUrl = `${import.meta.env.VITE_MEDIA}/file/show/media?filePath=`
 
 let temp_request: any[] = [],
   is_freshing = false
@@ -60,6 +55,7 @@ interface Data<T> {
 }
 
 export const http = <T>(option: UniApp.RequestOptions) => {
+  uni.showLoading()
   let params_ = option
   // console.log(option?.data)
   return new Promise<Data<T>>((resolve, reject) => {
@@ -117,6 +113,11 @@ export const http = <T>(option: UniApp.RequestOptions) => {
         })
         //网络错误
       },
+      complete() {
+        uni.hideLoading({
+          noConflict: true,
+        })
+      },
     })
   })
 }