浏览代码

Merge branch 'master' of http://101.43.129.26:10880/psychological_camera/jhsw_xiaochengxu

plg 4 月之前
父节点
当前提交
b873870f37
共有 53 个文件被更改,包括 2718 次插入1685 次删除
  1. 9 0
      .env
  2. 18 14
      .hbuilderx/launch.json
  3. 245 184
      package-lock.json
  4. 104 69
      src/App.vue
  5. 234 0
      src/components/PayPackage.vue
  6. 127 118
      src/components/ShuiWuGetPhone.vue
  7. 55 0
      src/components/ShuiWuNav.vue
  8. 85 79
      src/components/ShuiWuSH.vue
  9. 19 19
      src/components/ShuiWuTop.vue
  10. 6 5
      src/hooks/useIsLogin.ts
  11. 5 0
      src/main.ts
  12. 120 120
      src/pages.json
  13. 185 129
      src/pages/index/components/HomeList.vue
  14. 125 46
      src/pages/index/components/HomeTabs.vue
  15. 95 50
      src/pages/index/index.vue
  16. 331 284
      src/pages/index/inviteUser.vue
  17. 283 187
      src/pages/index/pay.vue
  18. 26 49
      src/pages/login/login.vue
  19. 20 0
      src/pages/my/inviteDetail.vue
  20. 274 214
      src/pages/my/my.vue
  21. 152 3
      src/pages/my/myInvite.vue
  22. 13 3
      src/pages/my/reportList.vue
  23. 75 1
      src/services/home.ts
  24. 二进制
      src/static/images/bg.png
  25. 二进制
      src/static/images/blank_cart.png
  26. 二进制
      src/static/images/bubble.png
  27. 二进制
      src/static/images/car.png
  28. 二进制
      src/static/images/center_bg.png
  29. 二进制
      src/static/images/fxjc.png
  30. 二进制
      src/static/images/index_bg.png
  31. 二进制
      src/static/images/left.png
  32. 二进制
      src/static/images/locate.png
  33. 二进制
      src/static/images/logo.png
  34. 二进制
      src/static/images/logo_icon.png
  35. 二进制
      src/static/images/money.png
  36. 二进制
      src/static/images/navigator_bg.png
  37. 二进制
      src/static/images/order_bg.png
  38. 二进制
      src/static/images/right.png
  39. 二进制
      src/static/images/search_icon.png
  40. 二进制
      src/static/images/stars.png
  41. 二进制
      src/static/images/start.png
  42. 二进制
      src/static/images/tyd.png
  43. 二进制
      src/static/images/yqyh.png
  44. 二进制
      src/static/tabs/home_default.png
  45. 二进制
      src/static/tabs/home_default2.png
  46. 二进制
      src/static/tabs/home_selected.png
  47. 二进制
      src/static/tabs/home_selected2.png
  48. 二进制
      src/static/tabs/user_default.png
  49. 二进制
      src/static/tabs/user_default2.png
  50. 二进制
      src/static/tabs/user_selected.png
  51. 二进制
      src/static/tabs/user_selected2.png
  52. 103 103
      src/stores/modules/member.ts
  53. 9 8
      src/utils/http.ts

+ 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"
+        }
     ]
 }

文件差异内容过多而无法显示
+ 245 - 184
package-lock.json


+ 104 - 69
src/App.vue

@@ -6,98 +6,133 @@ import { onLaunch, onShow, onHide } from "@dcloudio/uni-app";
 //   console.log("App Launch");
 // });
 onShow(() => {
-  console.log("App Show");
-  //调用  版本更新
+	console.log("App Show");
+	//调用  版本更新
 });
 onHide(() => {
-  console.log("App Hide");
+	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: "新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~",
-            });
-          });
-        });
-      }
-    });
-  } else {
-    uni.showModal({
-      title: "提示",
-      content: "当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。",
-    });
-  }
+	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: "新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~",
+						});
+					});
+				});
+			}
+		});
+	} 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;
+}
+
 // 字体图标
 @import "@/styles/fonts.scss";
 
-view,
-navigator,
-input,
-scroll-view {
-  box-sizing: border-box;
+@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: '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 {
+	box-sizing: border-box;
 }
 
 button::after {
-  border: none;
+	border: none;
 }
 
 swiper,
 scroll-view {
-  flex: 1;
-  height: 100%;
-  overflow: hidden;
+	flex: 1;
+	height: 100%;
+	overflow: hidden;
 }
 
 image {
-  width: 100%;
-  height: 100%;
-  vertical-align: middle;
+	width: 100%;
+	height: 100%;
+	vertical-align: middle;
 }
 
 // 两行省略
 .ellipsis {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  display: -webkit-box;
-  -webkit-line-clamp: 2;
-  -webkit-box-orient: vertical;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	display: -webkit-box;
+	-webkit-line-clamp: 2;
+	-webkit-box-orient: vertical;
 }
-</style>
+</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>

+ 127 - 118
src/components/ShuiWuGetPhone.vue

@@ -8,164 +8,173 @@ const useMember = useMemberStore();
 const popup = ref<any>();
 
 const userInfoMsg = reactive<LoginParams>({
-  code: "",
+	code: "",
 });
 
 onMounted(() => {
-  console.log("登录");
+	console.log("登录");
 });
 //获取手机号
 const getPhoneNumber = (e: any) => {
-  console.log(e);
-  //获取到动态令牌后将动态令牌传输到后台方法
-  //同时需要将获取到的openId传输给后台
-  const params = {
-    openId: useMember.userInfo.openId,
-    code: e.detail.code,
-  };
-  getUserPhone(params);
+	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 (useMember.userInfo.isAuth == "0") {
-      uni.showToast({
-        title: "登录成功,手机未授权",
-        icon: "none",
-      });
-    }
-  });
-  close();
-  //获取到手机号后
-  //将缓存里的手机号替换为最新的
+	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;
-  });
-  popup.value.open("bottom");
+	login().then((res: any) => {
+		userInfoMsg.code = res.code;
+	});
+	popup.value.open("bottom");
 };
 const close = () => {
-  popup.value.close();
+	popup.value.close();
 };
 
 const agree = ref<boolean>(false);
 const radioChange = () => {
-  agree.value = !agree.value;
+	agree.value = !agree.value;
 };
 
 const stipulate = ref<any>();
 
 const stipulateClose = () => {
-  stipulate.value.close();
+	stipulate.value.close();
 };
 
 const viewDetail = () => {
-  stipulateOpen();
+	stipulateOpen();
 };
 const stipulateOpen = () => {
-  stipulate.value.open("bottom");
+	stipulate.value.open("bottom");
 };
 
 defineExpose({
-  open,
+	open,
 });
 </script>
 <template>
-  <view>
-    <uni-popup ref="popup" :mask-click="false">
-      <view class="get_phone_out">
-        <view
-          style="
+	<view>
+		<uni-popup ref="popup" type="bottom" :mask-click="false">
+			<view class="get_phone_out">
+				<view class="close_btn">
+					<image src="" mode="widthFix"></image>
+				</view>
+
+				<view class="welcome">欢迎登陆锦泓企业财税综合评估系统</view>
+				<view class="serve">登陆后可享受更好的服务体验</view>
+				<button :disabled="!agree" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
+					点击登录
+				</button>
+				<view class="clause">
+					<label class="radio">
+						<radio value="r1" :checked="agree" @click="radioChange" />点击即表示同意
+					</label>
+					<view class="agreement" @click="viewDetail">《授权协议及条款》</view>
+				</view>
+			</view>
+		</uni-popup>
+
+		<uni-popup ref="stipulate" :mask-click="false">
+			<view class="get_phone_out">
+				<view style="
             text-align: right;
             width: 100%;
             color: #000000;
             margin-right: 20rpx;
             font-size: 40rpx;
-          "
-          ><text @click="close">X</text></view
-        >
-
-        <view class="welcome">欢迎登录税务风险检测</view>
-        <view class="serve">登录后可享受更好的服务</view>
-        <button
-          :disabled="!agree"
-          open-type="getPhoneNumber"
-          @getphonenumber="getPhoneNumber"
-        >
-          点击登录
-        </button>
-        <view class="clause">
-          <label class="radio">
-            <radio value="r1" :checked="agree" @click="radioChange" />点击即表示同意
-          </label>
-          <view class="agreement" @click="viewDetail">《授权协议及条款》</view>
-        </view>
-      </view>
-    </uni-popup>
-
-    <uni-popup ref="stipulate" :mask-click="false">
-      <view class="get_phone_out">
-        <view
-          style="
-            text-align: right;
-            width: 100%;
-            color: #000000;
-            margin-right: 20rpx;
-            font-size: 40rpx;
-          "
-          ><text @click="stipulateClose">X</text></view
-        >
-        <view>
-          我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款
-        </view>
-      </view>
-    </uni-popup>
-  </view>
+          "><text @click="stipulateClose">X</text></view>
+				<view>
+					我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款我是长条款
+				</view>
+			</view>
+		</uni-popup>
+	</view>
 </template>
-<style lang="scss">
+<style lang="scss" scoped>
 .get_phone_out {
-  background: #ffffff;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-
-  .welcome {
-    font-size: 40rpx;
-    font-weight: 700;
-    padding-top: 40rpx;
-  }
-
-  .serve {
-    font-size: 30rpx;
-    font-weight: 100;
-    color: #000000;
-    padding-top: 20rpx;
-  }
-
-  button {
-    background: rgb(132, 132, 226);
-    color: #ffffff;
-    border-radius: 40rpx;
-    margin-top: 60rpx;
-    padding: 0rpx 60rpx;
-  }
-
-  .clause {
-    padding-bottom: 100rpx;
-    padding-top: 40rpx;
-    display: flex;
-    .agreement {
-      color: blue;
-    }
-  }
+	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;
+	}
+
+	.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;
+	}
+
+	.clause {
+		padding-bottom: 100rpx;
+		padding-top: 40rpx;
+		display: flex;
+		justify-content: center;
+
+		.agreement {
+			color: blue;
+		}
+	}
 }
-</style>
+</style>

+ 55 - 0
src/components/ShuiWuNav.vue

@@ -0,0 +1,55 @@
+<template>
+	<view class="nav_bar">
+		<view class="nav_back" @click="goBack">
+			<image src="../static/images/left.png" mode="widthFix"></image>
+		</view>
+		<view class="nav_title">{{navTitle}}</view>
+		<view class="nav_right"></view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "ShuiWuNav",
+		props: [
+			'navTitle'
+		],
+		data() {
+			return {
+
+			};
+		},
+		methods: {
+			goBack() {
+				uni.navigateBack();
+			}
+		}
+	}
+</script>
+
+<style>
+	.nav_bar {
+		box-sizing: border-box;
+		width: 100%;
+		padding: 0 17rpx;
+		line-height: 58rpx;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		margin-top: 89rpx;
+	}
+
+	.nav_back {
+		font-size: 32rpx;
+		color: #ffffff;
+	}
+
+	.nav_back image {
+		width: 23rpx;
+	}
+
+	.nav_title {
+		font-size: 32rpx;
+		color: #ffffff;
+	}
+</style>

+ 85 - 79
src/components/ShuiWuSH.vue

@@ -1,5 +1,6 @@
 <script setup lang="ts">
-import { ref, reactive } from "vue";
+import { ref, reactive, defineEmits } from "vue";
+
 
 const inputDialog = ref<any>(false);
 
@@ -8,102 +9,107 @@ 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 emit = defineEmits(['saveReport'])
+
+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();
+
+	// 保存报告
+	emit('saveReport', { name: name.value, swNum: swNum.value, phone: phone.value });
 };
 
 //打开输入税号的弹出框
 const openSH = () => {
-  name.value = "";
-  swNum.value = "";
-  inputDialog.value.open("center");
+	name.value = "";
+	swNum.value = "";
+	phone.value = "";
+	inputDialog.value.open("center");
 };
 
 //关闭税务弹出框
 const closeSW = () => {
-  inputDialog.value.close();
+	inputDialog.value.close();
 };
 
 //导出方法专供父组件调用
 defineExpose({ openSH });
 </script>
 <template>
-  <view>
-    <view>
-      <!-- 输入框示例 -->
-      <uni-popup ref="inputDialog" type="dialog" :mask-click="false">
-        <uni-popup-dialog
-          :before-close="false"
-          ref="inputClose"
-          mode="input"
-          title="输入内容"
-          value="对话框预置提示内容!"
-          placeholder="请输入内容"
-          @close="closeSW"
-          @confirm="dialogInputConfirm"
-        >
-          <view class="form_out">
-            <view class="form_out_name">
-              <uni-easyinput
-                v-model="name"
-                :clearable="false"
-                type="text"
-                style="margin-bottom: 30rpx"
-                placeholder="请输入检测单位名称"
-            /></view>
-            <view>
-              <uni-easyinput
-                v-model="swNum"
-                :clearable="false"
-                type="text"
-                placeholder="请输入检测单位的税号"
-              />
-            </view>
-            <view class="form_tip"
-              >请检查税号是否正确,输入错误无法获取报告请联系客服</view
-            >
-          </view>
-        </uni-popup-dialog>
-      </uni-popup>
-    </view>
-  </view>
+	<view>
+		<view>
+			<!-- 输入框示例 -->
+			<uni-popup ref="inputDialog" type="dialog" :mask-click="false">
+				<uni-popup-dialog :before-close="false" ref="inputClose" mode="input" title="提示" value="对话框预置提示内容!"
+					placeholder="请输入内容" @close="closeSW" @confirm="dialogInputConfirm">
+					<view class="form_out">
+						<view class="form_out_name">
+							<uni-easyinput v-model="name" :clearable="false" type="text" placeholder="请输入检测单位名称" />
+						</view>
+						<view class="form_out_name">
+							<uni-easyinput v-model="swNum" :clearable="false" type="text" placeholder="请输入检测单位的税号" />
+						</view>
+						<view>
+							<uni-easyinput v-model="phone" :clearable="false" type="text" placeholder="请输入联系方式" />
+						</view>
+						<view class="form_tip">请检查税号是否正确,输入错误无法获取报告请联系客服</view>
+					</view>
+				</uni-popup-dialog>
+			</uni-popup>
+		</view>
+	</view>
 </template>
 <style lang="scss" scoped>
 .form_out {
-  width: 100%;
-  .form_out_name {
-    margin-bottom: 20rpx;
-  }
-  .form_tip {
-    margin-top: 10rpx;
-    font-size: 20rpx;
-    color: #000000;
-    opacity: 0.4;
-  }
+	width: 100%;
+
+	.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;
+	}
 }
-</style>
+</style>

+ 19 - 19
src/components/ShuiWuTop.vue

@@ -1,26 +1,26 @@
 <script setup lang="ts">
-const prop = defineProps({
-  des: {},
-});
-const safe = uni.getSystemInfoSync().safeArea?.top as number;
-console.log(safe);
-// const saftTop = safe.top
-//获取安全距离
+	const prop = defineProps({
+		des: {},
+	});
+	const safe = uni.getSystemInfoSync().safeArea?.top as number;
+	console.log(safe);
+	// const saftTop = safe.top
+	//获取安全距离
 </script>
 
 <template>
-  <view class="view-top" :style="{ paddingTop: safe + 40 + 'rpx' }">
-    {{ des }}
-  </view>
+	<view class="view-top" :style="{ paddingTop: safe + 40 + 'rpx' }">
+		{{ des }}
+	</view>
 </template>
 
 <style>
-.view-top {
-  text-align: center;
-  color: #8ebfc7;
-  font-size: 40rpx;
-  background-color: rgb(243, 250, 248);
-  padding-bottom: 40rpx;
-  font-weight: 700;
-}
-</style>
+	.view-top {
+		text-align: center;
+		color: #8ebfc7;
+		font-size: 40rpx;
+		/* background-color: rgb(243, 250, 248); */
+		padding-bottom: 40rpx;
+		font-weight: 700;
+	}
+</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/',
+}

+ 120 - 120
src/pages.json

@@ -1,130 +1,130 @@
 {
-  "easycom": {
-    "autoscan": true,
-    "custom": {
-      // uni-ui 规则如下配置
-      "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue",
-      "^LaiTing(.*)": "@/components/LaiTing$1.vue",
-      "^ShuiWu(.*)": "@/components/ShuiWu$1.vue"
-    }
-  },
-  "pages": [
-    //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
-    {
+	"easycom": {
+		"autoscan": true,
+		"custom": {
+			// uni-ui 规则如下配置
+			"^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue",
+			"^LaiTing(.*)": "@/components/LaiTing$1.vue",
+			"^ShuiWu(.*)": "@/components/ShuiWu$1.vue"
+		}
+	},
+	"pages": [
+		//pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+		{
 
-      "path": "pages/index/index",
-      "style": {
-        "navigationBarTitleText": "首页",
-        "navigationStyle": "custom"
-      }
+			"path": "pages/index/index",
+			"style": {
+				"navigationBarTitleText": "首页",
+				"navigationStyle": "custom"
+			}
 
-    },
-    {
+		},
+		{
 
-      "path": "pages/index/inviteUser",
-      "style": {
-        "navigationBarTitleText": "邀请用户",
-        // "navigationStyle": "custom"
-      }
+			"path": "pages/index/inviteUser",
+			"style": {
+				"navigationBarTitleText": "邀请用户",
+				"navigationStyle": "custom"
+			}
 
-    },
-    // {
+		},
+		// {
 
-    //   "path": "pages/index/inviteUser",
-    //   "style": {
-    //     "navigationBarTitleText": "信息填写",
-    //     // "navigationStyle": "custom"
-    //   }
+		//   "path": "pages/index/inviteUser",
+		//   "style": {
+		//     "navigationBarTitleText": "信息填写",
+		//     // "navigationStyle": "custom"
+		//   }
 
-    // },
-    {
-      "path": "pages/index/pay",
-      "style": {
-        "navigationBarTitleText": "用户支付",
-        "navigationStyle": "custom"
-      }
+		// },
+		{
+			"path": "pages/index/pay",
+			"style": {
+				"navigationBarTitleText": "用户支付",
+				"navigationStyle": "custom"
+			}
 
-    },
-    {
-      "path": "pages/my/my",
-      "style": {
-        "navigationBarTitleText": "我的",
-        "navigationStyle": "custom"
-      }
-    },
-    {
-      "path": "pages/my/myEdit",
-      "style": {
-        "navigationBarTitleText": "编辑资料"
-        // "navigationStyle": "custom"
-      }
-    },
-    {
-      "path": "pages/my/myInvite",
-      "style": {
-        "navigationBarTitleText": "我的邀请"
-        // "navigationStyle": "custom"
-      }
-    },
-    {
-      "path": "pages/my/reportList",
-      "style": {
-        "navigationBarTitleText": "报告记录"
-        // "navigationStyle": "custom"
-      }
-    },
-    {
-      "path": "pages/my/aboutMy",
-      "style": {
-        "navigationBarTitleText": "关于我们"
-        // "navigationStyle": "custom"
-      }
-    },
+		},
+		{
+			"path": "pages/my/my",
+			"style": {
+				"navigationBarTitleText": "我的",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/my/myEdit",
+			"style": {
+				"navigationBarTitleText": "编辑资料"
+				// "navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/my/myInvite",
+			"style": {
+				"navigationBarTitleText": "我的邀请"
+				// "navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/my/reportList",
+			"style": {
+				"navigationBarTitleText": "报告记录"
+				// "navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/my/aboutMy",
+			"style": {
+				"navigationBarTitleText": "关于我们"
+				// "navigationStyle": "custom"
+			}
+		},
 
 
-    {
-      "path": "pages/login/login",
-      "style": {
-        "navigationBarTitleText": "锦泓征信"      }
-    }
-  ],
-  "globalStyle": {
-    "navigationBarTextStyle": "black",
-    "navigationBarTitleText": "",
-    "navigationBarBackgroundColor": "#F8F8F8",
-    "backgroundColor": "#F8F8F8"
-  },
-  // 设置 TabBar
-  "tabBar": {
-    "color": "#333",
-    "selectedColor": "#27ba9b",
-    "backgroundColor": "#fff",
-    "borderStyle": "white",
-    "list": [
-      {
-        "text": "首页",
-        "pagePath": "pages/index/index",
-        "iconPath": "static/tabs/home_default.png",
-        "selectedIconPath": "static/tabs/home_selected.png"
-      },
-      // {
-      //   "text": "收藏",
-      //   "pagePath": "pages/category/category",
-      //   "iconPath": "static/tabs/collect.png",
-      //   "selectedIconPath": "static/tabs/collect_active.png"
-      // },
-      // {
-      //   "text": "购物车",
-      //   "pagePath": "pages/cart/cart",
-      //   "iconPath": "static/tabs/cart_default.png",
-      //   "selectedIconPath": "static/tabs/cart_selected.png"
-      // },
-      {
-        "text": "我的",
-        "pagePath": "pages/my/my",
-        "iconPath": "static/tabs/user_default.png",
-        "selectedIconPath": "static/tabs/user_selected.png"
-      }
-    ]
-  }
-}
+		{
+			"path": "pages/login/login",
+			"style": {
+				"navigationBarTitleText": "锦泓征信"
+			}
+		}
+	],
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "",
+		"navigationBarBackgroundColor": "#F8F8F8",
+		"backgroundColor": "#F8F8F8"
+	},
+	// 设置 TabBar
+	"tabBar": {
+		"color": "#333",
+		"selectedColor": "#4A89FB",
+		"backgroundColor": "#fff",
+		"borderStyle": "white",
+		"list": [{
+				"text": "首页",
+				"pagePath": "pages/index/index",
+				"iconPath": "static/tabs/home_default.png",
+				"selectedIconPath": "static/tabs/home_selected.png"
+			},
+			// {
+			//   "text": "收藏",
+			//   "pagePath": "pages/category/category",
+			//   "iconPath": "static/tabs/collect.png",
+			//   "selectedIconPath": "static/tabs/collect_active.png"
+			// },
+			// {
+			//   "text": "购物车",
+			//   "pagePath": "pages/cart/cart",
+			//   "iconPath": "static/tabs/cart_default.png",
+			//   "selectedIconPath": "static/tabs/cart_selected.png"
+			// },
+			{
+				"text": "我的",
+				"pagePath": "pages/my/my",
+				"iconPath": "static/tabs/user_default.png",
+				"selectedIconPath": "static/tabs/user_selected.png"
+			}
+		]
+	}
+}

+ 185 - 129
src/pages/index/components/HomeList.vue

@@ -1,143 +1,199 @@
 <script setup lang="ts">
-import { ref, reactive, onMounted } from "vue";
-//到顶部多远时触发事件
-//more  上拉加载更多
-//loading //加载中
-//noMore 没有更多
+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(() => {});
+onMounted(() => {
+	// queryReportList();
+});
 const scrollLower = () => {
-  //我到底部了
-  console.log("我到底部了");
+	//我到底部了
+	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 style="height: 100%">
-      <scroll-view scroll-y="true" lower-threshold="30" @scrolltolower="scrollLower">
-        <view class="list_out">
-          <view class="list_title">
-            <view class="report_name">测试报告</view>
-            <view class="report_status">已生成</view>
-          </view>
-          <view class="list_button">
-            <view class="list_time"> 2024-04-15 23:33:05 </view>
-            <view> <button class="button_detail" size="mini">查看详情</button></view>
-          </view>
-        </view>
-        <view class="list_out">
-          <view class="list_title">
-            <view class="report_name">测试报告</view>
-            <view class="report_status">已生成</view>
-          </view>
-          <view class="list_button">
-            <view class="list_time"> 2024-04-15 23:33:05 </view>
-            <view> <button class="button_detail" size="mini">查看详情</button></view>
-          </view>
-        </view>
-        <view class="list_out">
-          <view class="list_title">
-            <view class="report_name">测试报告</view>
-            <view class="report_status">已生成</view>
-          </view>
-          <view class="list_button">
-            <view class="list_time"> 2024-04-15 23:33:05 </view>
-            <view> <button class="button_detail" size="mini">查看详情</button></view>
-          </view>
-        </view>
-        <view class="list_out">
-          <view class="list_title">
-            <view class="report_name">测试报告</view>
-            <view class="report_status">已生成</view>
-          </view>
-          <view class="list_button">
-            <view class="list_time"> 2024-04-15 23:33:05 </view>
-            <view> <button class="button_detail" size="mini">查看详情</button></view>
-          </view>
-        </view>
-        <view class="list_out">
-          <view class="list_title">
-            <view class="report_name">测试报告</view>
-            <view class="report_status">已生成</view>
-          </view>
-          <view class="list_button">
-            <view class="list_time"> 2024-04-15 23:33:05 </view>
-            <view> <button class="button_detail" size="mini">查看详情</button></view>
-          </view>
-        </view>
-        <view class="list_out">
-          <view class="list_title">
-            <view class="report_name">测试报告</view>
-            <view class="report_status">已生成</view>
-          </view>
-          <view class="list_button">
-            <view class="list_time"> 2024-04-15 23:33:05 </view>
-            <view> <button class="button_detail" size="mini">查看详情</button></view>
-          </view>
-        </view>
-        <uni-load-more iconType="circle" :status="status" />
-      </scroll-view>
-    </view>
-  </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" 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">{{ item.companyName }}</view>
+						<view class="list_time">{{ item.createTime }}</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>
 </template>
 
 <style lang="scss" scoped>
 .home_list_view {
-  flex: 1;
-  display: flex;
-  flex-direction: column;
-  height: 100%;
-  overflow: scroll;
-  .list_out {
-    margin-top: 20rpx;
-    border-radius: 40rpx;
-    background-color: #ffffff;
-    display: flex;
-    flex-direction: column;
-    .list_title {
-      display: flex;
-      flex-direction: row;
-      justify-content: space-between;
-      .report_name {
-        font-size: 30rpx;
-        font-weight: 700;
-        padding-left: 20rpx;
-        padding-top: 30rpx;
-      }
-      .report_status {
-        height: 40rpx;
-        border-top-right-radius: 40rpx;
-        border-bottom-left-radius: 40rpx;
-        font-size: 20rpx;
-        background-color: yellow;
-        display: flex;
-        align-items: center;
-        padding: 10rpx 20rpx;
-      }
-    }
-    .list_button {
-      display: flex;
-      flex-direction: row;
-      justify-content: space-between;
-      align-items: center;
-      padding: 30rpx 20rpx 20rpx;
-      .list_time {
-        color: #c4c4c4;
-      }
-      .button_detail {
-        color: #ffffff;
-        background: linear-gradient(rgb(198, 198, 243), rgb(94, 91, 247));
-      }
-    }
-  }
+	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;
+	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>
+</style>

+ 125 - 46
src/pages/index/components/HomeTabs.vue

@@ -1,63 +1,142 @@
 <script setup lang="ts">
 import { useMemberStore } from "@/stores";
-const userInfo = useMemberStore();
+import { findByPhoneApi } from "@/services/home";
+
+const useMember = useMemberStore();
 //父组件调用父组件
 const emit = defineEmits(["jumpInvite", "jumpSW"]);
-const inviteUserFun = () => {
-  //判断是否是授权了
-  //如果没有授权,点击按钮择跳转授权页面
-  if (userInfo.userInfo.isAuth == "0") {
-    emit("jumpInvite");
-  } else {
-    //跳转到生成海报页面
-    uni.navigateTo({ url: "/pages/index/inviteUser" });
-  }
+const inviteUserFun = async () => {
+	//判断是否是授权
+	if (useMember.userInfo.isAuth == "0") {
+		if (useMember.userInfo.phone == 'NaN') {
+			emit("jumpInvite");
+		} else {
+			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");
-  //调用父组件方法--然后让父组件打开弹出框
-  //父组件打开弹出框后表单输入校验后将值传输到这个页面
+	emit("jumpSW");
+	//调用父组件方法--然后让父组件打开弹出框
+	//父组件打开弹出框后表单输入校验后将值传输到这个页面
 };
 </script>
 <template>
-  <view class="home_top"> 税务风险检测 </view>
-  <view class="home_tabs">
-    <view class="user_use" @click="inviteUserFun">邀请用户使用</view>
-    <view class="risk_detection" @click="swFun">税务风险检测</view>
-  </view>
+	<!-- <view class="home_top"> 税务风险检测 </view> -->
+	<view class="home_tabs">
+		<view class="user_use" @click="inviteUserFun">
+			<view class="card_title">邀请用户使用</view>
+			<view class="card_desc">
+				<image class="tyd" src="https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/tyd.png"
+					mode="widthFix"></image>
+				<image class="money" src="https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/money.png"
+					mode="widthFix"></image>
+				<text>使用风险</text>
+			</view>
+			<view class="card_btn">点击填写</view>
+		</view>
+		<!-- <view class="risk_detection" @click="swFun">
+			<view class="card_title">税务风险检测</view>
+			<view class="card_btn">生成报告</view>
+		</view> -->
+	</view>
 </template>
 <style lang="scss">
 .home_top {
-  text-align: center;
-  font-size: 40rpx;
-  margin-bottom: 60rpx;
+	text-align: center;
+	font-size: 40rpx;
+	margin-bottom: 60rpx;
 }
+
 .home_tabs {
-  display: flex;
-  justify-content: space-around;
-  flex-direction: row;
-
-  .user_use {
-    color: #fff;
-    background: linear-gradient(blue, rgb(193, 192, 255));
-    flex: 1;
-    margin-right: 10rpx;
-    padding-left: 20rpx;
-    padding-top: 20rpx;
-    height: 200rpx;
-    border-radius: 30rpx;
-  }
-  .risk_detection {
-    color: #fff;
-    padding-left: 20rpx;
-    flex: 1;
-    background: linear-gradient(rgb(0, 255, 21), rgb(212, 255, 192));
-    padding-top: 20rpx;
-    height: 200rpx;
-    margin-left: 10rpx;
-    border-radius: 30rpx;
-  }
+	display: flex;
+	// justify-content: space-around;
+	flex-direction: row;
+
+	.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;
+
+		.card_desc {
+			display: flex;
+			flex-direction: row;
+			align-items: center;
+
+			.tyd {
+				width: 5rpx;
+			}
+
+			.money {
+				width: 16rpx;
+				margin: 14rpx 8rpx
+			}
+
+			text {
+				font-family: Alibaba PuHuiTi 2.0;
+				font-weight: normal;
+				font-size: 20rpx;
+				color: #4A89FB;
+			}
+		}
+
+		.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;
+		}
+	}
+
+	.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>
+</style>

+ 95 - 50
src/pages/index/index.vue

@@ -3,80 +3,125 @@ 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 { 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>();
 
 onMounted(() => {
-  //我来了
+	//我来了
 });
-onShow(() => {
-  console.log("onshow");
-  login().then((res) => {
-    //登录调用成功后
-    //判断是否授权了
-    //如果授权了则开始查询列表数据
-    //列表查出来后判断是都可以查看报告
-  });
+onLoad(() => {
+	console.log("onshow");
+	login().then((res) => {
+		//登录调用成功后
+		//判断是否授权了
+		//如果授权了则开始查询列表数据
+		//列表查出来后判断是都可以查看报告
+	});
 });
 //调用子组件---获取手机号授权
 const phoneGetFun = () => {
-  phoneGet.value.open();
+	phoneGet.value.open();
 };
 const validFun = () => {
-  //判断用户授权登录没有
-  phoneGetFun();
-  //跳转到邀请用户页面
-  // uni.navigateTo({ url: "/pages/index/inviteUser" });
+	//判断用户授权登录没有
+	phoneGetFun();
+	//跳转到邀请用户页面
+	// uni.navigateTo({ url: "/pages/index/inviteUser" });
 };
 
 //点击税务风险检测--弹出输入税务号的信息
-const swGet = ref<any>();
+const payPackage = ref<any>();
 const openSW = () => {
-  swGet.value.openSH();
+	payPackage.value.open();
 };
 </script>
 <template>
-  <!-- 引入头部安全区域组件 -->
-  <view class="home_padding">
-    <ShuiWuTop />
-    <HomeTabs @jumpInvite="validFun" @jumpSW="openSW" />
-    <view class="list_search">
-      <uni-easyinput type="text" v-model="companyName" placeholder="请输入公司名称" />
-    </view>
-    <HomeList class="home_list_com" />
-    <ShuiWuGetPhone ref="phoneGet" />
-    <ShuiWuSH ref="swGet" />
-  </view>
+	<!-- 引入头部安全区域组件 -->
+	<view class="home_padding">
+		<view class="list_search">
+			<image class="search_icon"
+				src="https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/search_icon.png" mode="widthFix">
+			</image> <input type="text" v-model="companyName" placeholder="请输入公司名称" />
+		</view>
+		<!-- <ShuiWuTop /> -->
+		<HomeTabs @jumpInvite="validFun" @jumpSW="openSW" />
+		<!-- <HomeList class="home_list_com" /> -->
+		<ShuiWuGetPhone ref="phoneGet" />
+		<ShuiWuSH ref="swGet" />
+		<PayPackage ref="payPackage" />
+	</view>
 </template>
 <style>
-.list_search >>> .is-input-border {
-  display: flex;
-  box-sizing: border-box;
-  flex-direction: row;
-  align-items: center;
-  border: 1px solid #dcdfe6;
-  border-radius: 400px !important;
+.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 {
+		display: flex;
+		box-sizing: border-box;
+		flex-direction: row;
+		align-items: center;
+		border: 1px solid #dcdfe6;
+		border-radius: 400px !important;
+	} */
 </style>
-<style lang="scss">
+<style lang="scss" scoped>
 page {
-  height: 100%;
-  background-color: rgb(243, 250, 248);
+	height: 100%;
 }
+
 .home_padding {
-  display: flex;
-  flex-direction: column;
-  height: 100%;
-  padding: 0rpx 20rpx;
-  .home_list_com {
-    flex: 1;
-    overflow: scroll;
-  }
-  .list_search {
-    margin-top: 40rpx;
-  }
+	display: flex;
+	flex-direction: column;
+	width: 100%;
+	height: 100%;
+	padding: 0rpx 20rpx;
+
+	.home_list_com {
+		flex: 1;
+		overflow: scroll;
+	}
 }
-</style>
+
+.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;
+	}
+
+	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>

+ 331 - 284
src/pages/index/inviteUser.vue

@@ -1,291 +1,338 @@
 <script setup lang="ts">
-import { imgUrl } from "@/utils/http";
-import { ref } from "vue";
-import { useMemberStore } from "@/stores";
-import { createPosterApi } from "@/services/home";
-import type { CreatePo } from "@/types/home";
-const userInfo = 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;
+	import { imgUrl } from "@/utils/http";
+	import { ref } from "vue";
+	import { useMemberStore } from "@/stores/";
+	import { createPosterApi } from "@/services/home";
+	import type { CreatePo } from "@/types/home";
+	import ShuiWuNav from "@/components/ShuiWuNav.vue";
+	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 = useMember.userInfo.posterBackground ? useMember.userInfo.posterBackground : 'https://test.jue-ming.com:8849/api/show?filePath=./jinhong/index/haibao.png';
 
-//是否是新生成的海报带二维码
-const isCreatePaster = ref<boolean>(false);
-//调用接口得到图片海报路径
-//更换壁纸
-const changeImage = () => {
-  uni.chooseImage({
-    success: (chooseImageRes) => {
-      const tempFilePaths = chooseImageRes.tempFilePaths;
-      uni.uploadFile({
-        url: "/file/customUpload", //仅为示例,非真实的接口地址
-        filePath: tempFilePaths[0],
-        name: "file",
-        success: (uploadFileRes) => {
-          let photo = `${imgUrl}${JSON.parse(uploadFileRes.data).data}`;
-          placard.value = photo;
-          isCreatePaster.value = false;
-        },
-      });
-    },
-  });
-};
-//生成海报
-const createPlacard = () => {
-  console.log(duration.value);
-  if (title.value == "") {
-    uni.showToast({
-      title: "请填写标题",
-      icon: "none",
-    });
-    return;
-  }
-  if (typeof duration.value == "undefined") {
-    uni.showToast({
-      title: "请填写时长",
-      icon: "none",
-    });
-    return;
-  }
+	//是否是新生成的海报带二维码
+	const isCreatePaster = ref<boolean>(false);
+	//调用接口得到图片海报路径
+	//更换壁纸
+	const changeImage = () => {
+		uni.chooseImage({
+			success: (chooseImageRes) => {
+				const tempFilePaths = chooseImageRes.tempFilePaths;
+				uni.uploadFile({
+					url: "/file/customUpload",
+					filePath: tempFilePaths[0],
+					name: "file",
+					success: (uploadFileRes) => {
+						let photo = `${imgUrl}${JSON.parse(uploadFileRes.data).data}`;
+						placard.value = photo;
+						isCreatePaster.value = false;
+					},
+				});
+			},
+		});
+	};
+	//生成海报
+	const createPlacard = () => {
+		console.log(duration.value);
+		if (title.value == "") {
+			uni.showToast({
+				title: "请填写标题",
+				icon: "none",
+			});
+			return;
+		}
+		if (typeof duration.value == "undefined") {
+			uni.showToast({
+				title: "请填写时长",
+				icon: "none",
+			});
+			return;
+		}
 
-  if (typeof price.value == "undefined") {
-    uni.showToast({
-      title: "请填写价格",
-      icon: "none",
-    });
-    return;
-  }
-  if (typeof num.value == "undefined") {
-    uni.showToast({
-      title: "请填写次数",
-      icon: "none",
-    });
-    return;
-  }
-  if (num.value == 0 || price.value == 0 || duration.value == 0) {
-    uni.showToast({
-      title: "时长|价格|次数不能为0",
-      icon: "none",
-    });
-    return;
-  }
-  //判断图片是否改变
-  createPoster({
-    userId: userInfo.userInfo.id,
-    title: title.value,
-    effectiveDays: duration.value as number,
-    amount: price.value as number,
-    times: num.value as number,
-    background: placard.value,
-  });
-  //调用生成海报的方法
-};
-const createPoster = async (val: CreatePo) => {
-  const res = await createPosterApi(val);
-  console.log("海报");
-  console.log(res);
-  if (res.data == "2001") {
-    uni.showToast({
-      title: res.msg,
-      icon: "fail",
-    });
-  } else {
-    // console.log(res.data);
-    placard.value = `${imgUrl}${res.data}`;
-    isCreatePaster.value = true;
-  }
-};
-//下载图片
-const saveLocal = () => {
-  //下载图片
-  // uni.showLoading();
-  let url: string = placard.value as string;
-  uni.downloadFile({
-    url: url, //仅为示例,并非真实的资源
-    success: (res) => {
-      console.log(res);
-      if (res.statusCode === 200) {
-        uni.saveImageToPhotosAlbum({
-          // 然后调用这个方法
-          filePath: res.tempFilePath,
-          success: (res) => {
-            // uni.hideLoading();
-            uni.showToast({
-              title: "已保存至相册",
-              icon: "success",
-            });
-          },
-        });
-      }
-    },
-  });
-};
+		if (typeof price.value == "undefined") {
+			uni.showToast({
+				title: "请填写价格",
+				icon: "none",
+			});
+			return;
+		}
+		if (typeof num.value == "undefined") {
+			uni.showToast({
+				title: "请填写次数",
+				icon: "none",
+			});
+			return;
+		}
+		if (num.value == 0 || duration.value == 0) {
+			uni.showToast({
+				title: "时长|价格|次数不能为0",
+				icon: "none",
+			});
+			return;
+		}
+		//判断图片是否改变
+
+
+		createPoster({
+			userId: useMember.userInfo.id,
+			// userId: useMember.userInfo,
+			title: title.value,
+			effectiveDays: duration.value as number,
+			amount: price.value as number,
+			times: num.value as number,
+			background: placard.value,
+		});
+		//调用生成海报的方法
+	};
+	const createPoster = async (val : CreatePo) => {
+		console.log("val")
+		console.log(val)
+
+		const res = await createPosterApi(val);
+		console.log("海报");
+		console.log(res);
+		if (res.data == "2001") {
+			uni.showToast({
+				title: res.msg,
+				icon: "fail",
+			});
+		} else {
+			// console.log(res.data);
+			placard.value = `${imgUrl}${res.data}`;
+			isCreatePaster.value = true;
+		}
+	};
+	//下载图片
+	const saveLocal = () => {
+		let url : string = placard.value as string;
+		uni.showLoading();
+		uni.downloadFile({
+			url: url, //仅为示例,并非真实的资源
+			success: (res) => {
+				console.log(res);
+				if (res.statusCode === 200) {
+					uni.saveImageToPhotosAlbum({
+						// 然后调用这个方法
+						filePath: res.tempFilePath,
+						success: (res) => {
+							// uni.hideLoading();
+							uni.showToast({
+								title: "已保存至相册",
+								icon: "success",
+							});
+						},
+					});
+				}
+			},
+			complete() {
+				uni.hideLoading();
+			}
+		});
+	};
 </script>
 <template>
-  <view class="invite_user">
-    <uni-row class="demo-uni-row">
-      <uni-col :span="12">
-        <view class="user_input">
-          <view class="user_font">标题</view>
-          <view
-            ><uni-easyinput
-              type="text"
-              :inputBorder="false"
-              :clearable="false"
-              v-model="title"
-              placeholder="请输入标题"
-            ></uni-easyinput
-          ></view>
-        </view>
-      </uni-col>
-      <uni-col :span="12">
-        <view class="user_input">
-          <view class="user_font">时长</view>
-          <view
-            ><uni-easyinput
-              type="number"
-              :clearable="false"
-              :inputBorder="false"
-              v-model="duration"
-              placeholder="请输入时长(天)"
-            ></uni-easyinput
-          ></view>
-        </view>
-      </uni-col>
-    </uni-row>
-    <uni-row style="margin-top: 100rpx">
-      <uni-col :span="12">
-        <view class="user_input">
-          <view class="user_font">价格</view>
-          <view
-            ><uni-easyinput
-              type="number"
-              :clearable="false"
-              :inputBorder="false"
-              v-model="price"
-              placeholder="请输入价格(元)"
-            ></uni-easyinput
-          ></view>
-        </view>
-      </uni-col>
-      <uni-col :span="12">
-        <view class="user_input">
-          <view class="user_font">次数</view>
-          <view
-            ><uni-easyinput
-              type="number"
-              :clearable="false"
-              :inputBorder="false"
-              v-model="num"
-              placeholder="请输入次数"
-            ></uni-easyinput
-          ></view>
-        </view>
-      </uni-col>
-    </uni-row>
-    <button class="mini-btn" size="mini" @click="changeImage">跳转支付</button>
-    <view class="button_group">
-      <button class="mini-btn" size="mini" @click="changeImage">更换壁纸</button>
-      <button class="mini-btn" size="mini" @click="createPlacard">生成海报</button>
-    </view>
-    <view class="remark_user">备注:更换壁纸请上传720*1280分辨率的壁纸,大小在3M以下</view>
-    <view>
-      <image
-        :show-menu-by-longpress="isCreatePaster"
-        mode="aspectFill"
-        style="width: 720rpx; height: 1280rpx"
-        :src="placard"
-      ></image
-    ></view>
-    <view class="remark_eweima"
-      >备注:可以长按分享二维码,或点击你保存至手机,请保管好二维码以防他人使用</view
-    >
-    <view style="text-align: center; padding: 0rpx 100rpx">
-      <button class="save_button" size="mini" @click="saveLocal">保存至本地</button>
-    </view>
-  </view>
+	<view class="invite_user">
+		<ShuiWuNav navTitle="邀请用户" />
+		<view class="set_params">
+			<uni-row class="demo-uni-row">
+				<uni-col :span="12">
+					<view class="user_input">
+						<view class="user_font">标题:</view>
+						<view><input v-model="title" placeholder="请输入标题" type="text"></view>
+					</view>
+				</uni-col>
+				<uni-col :span="12">
+					<view class="user_input">
+						<view class="user_font">时长:</view>
+						<view><input v-model="duration" placeholder="请输入时长" type="text"></view>
+						<view class="unit">天</view>
+					</view>
+				</uni-col>
+			</uni-row>
+			<uni-row style="margin-top: 100rpx">
+				<uni-col :span="12">
+					<view class="user_input">
+						<view class="user_font">价格:</view>
+						<view><input v-model="price" placeholder="请输入价格" type="text"></view>
+						<view class="unit">元</view>
+					</view>
+				</uni-col>
+				<uni-col :span="12">
+					<view class="user_input">
+						<view class="user_font">次数:</view>
+						<view><input v-model="num" placeholder="请输入次数" type="text"></view>
+					</view>
+				</uni-col>
+			</uni-row>
+			<!-- <uni-row style="margin-top: 100rpx">
+				<uni-col :span="15">
+					<view class="user_input">
+						<view class="user_font">是否多人:</view>
+						<view><label class="radio">
+								<radio value="r1" checked="true" />是
+							</label>
+							<label class="radio" style="margin-left: 20rpx">
+								<radio value="r2" />否
+							</label>
+						</view>
+					</view>
+				</uni-col>
+			</uni-row> -->
+		</view>
+		<!-- <button class="mini-btn" size="mini" @click="changeImage">跳转支付</button> -->
+		<view class="button_group">
+			<button class="mini-btn" size="mini" @click="changeImage">更换壁纸</button>
+			<button class="mini-btn" size="mini" @click="createPlacard">生成海报</button>
+		</view>
+		<view class="remark_user">备注:更换壁纸请上传720*1080分辨率的壁纸,大小在3M以下</view>
+		<view>
+			<image class="cover" :show-menu-by-longpress="isCreatePaster" mode="widthFix" :src="placard"></image>
+		</view>
+		<view class="remark_eweima">备注:可以长按分享二维码,或点击你保存至手机,请保管好二维码以防他人使用</view>
+		<view style="text-align: center; padding: 0rpx 100rpx">
+			<button class="save_button" size="mini" @click="saveLocal">保存至本地</button>
+		</view>
+	</view>
 </template>
 <style lang="scss" scoped>
-page {
-  height: 100%;
-}
-.invite_user {
-  height: 100%;
-  width: 100%;
-  padding: 10rpx 15rpx;
-  background: rgb(243, 250, 248);
-  .remark_user {
-    color: #000000;
-    opacity: 0.4;
-    font-size: 26rpx;
-    margin-top: 20rpx;
-    margin-bottom: 10rpx;
-  }
-  .remark_eweima {
-    text-align: center;
-    color: #000000;
-    opacity: 0.4;
-    font-size: 26rpx;
-    margin-top: 20rpx;
-    margin-bottom: 10rpx;
-    padding: 0rpx 40rpx;
-  }
-  .save_button {
-    text-align: center;
-    background: linear-gradient(#ffffff, rgb(125, 123, 226));
-    color: #ffffff;
-    width: 100%;
-    font-size: 36rpx;
-    margin-top: 40rpx;
-    margin-bottom: 100rpx;
-  }
-  .button_group {
-    display: flex;
-    flex-direction: row;
-    justify-content: space-around;
-    align-items: center;
-    padding: 20rpx 0rpx;
-    button {
-      background: linear-gradient(#ffffff, blue);
-      color: #ffffff;
-      font-size: 36rpx;
-    }
-  }
-  .user_input_time {
-    padding: 20rpx 20rpx;
-    display: flex;
-    flex-direction: row;
-    justify-content: start;
-    align-items: center;
-    .user_font {
-      width: 100rpx;
-    }
-  }
-  .user_input {
-    padding: 20rpx 20rpx;
-    display: flex;
-    flex-direction: row;
-    justify-content: space-between;
-    align-items: center;
-    .user_out {
-      display: flex;
-      flex-direction: row;
-      justify-content: start;
-      align-items: center;
-      .user_font {
-        width: 100rpx;
-      }
-    }
-    .user_font {
-      width: 100rpx;
-    }
-    .user_font_unit {
-      color: blue;
-    }
-  }
-}
-</style>
+	page {
+		height: 100%;
+		background: #F0F2F6;
+	}
+
+	.invite_user {
+		height: 100%;
+		width: 100%;
+		padding: 10rpx 15rpx;
+
+		.set_params {
+			width: 721rpx;
+			height: 320rpx;
+			background: #FFFFFF;
+			border-radius: 20rpx;
+			border: 1px solid #FFFFFF;
+			margin-top: 40rpx;
+		}
+
+		.remark_user {
+			font-family: 'Alibaba PuHuiTi 2.0';
+			font-weight: normal;
+			font-size: 24rpx;
+			color: #999999;
+			line-height: 36rpx;
+			text-align: center;
+			letter-spacing: 3rpx;
+			margin-bottom: 18rpx;
+
+			.cover {
+				width: 720rpx;
+				height: 1080rpx;
+				border-radius: 38rpx;
+			}
+		}
+
+		.remark_eweima {
+			text-align: center;
+			color: #000000;
+			opacity: 0.4;
+			font-size: 26rpx;
+			margin-top: 20rpx;
+			margin-bottom: 10rpx;
+			padding: 0rpx 40rpx;
+		}
+
+		.save_button {
+			width: 263rpx;
+			line-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;
+			text-align: center;
+			margin: 28rpx 0 28rpx;
+		}
+
+		.button_group {
+			width: 100%;
+			display: flex;
+			flex-direction: row;
+			justify-content: center;
+			align-items: center;
+			padding: 35rpx 0rpx;
+
+			button {
+				width: 263rpx;
+				line-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;
+				text-align: center;
+				margin: 0 50rpx;
+
+			}
+		}
+
+		.user_input_time {
+			padding: 20rpx 20rpx;
+			display: flex;
+			flex-direction: row;
+			justify-content: start;
+			align-items: center;
+
+			.user_font {
+				min-width: 100rpx;
+			}
+		}
+
+		.user_input {
+			padding: 20rpx 20rpx;
+			display: flex;
+			flex-direction: row;
+			align-items: center;
+			font-family: 'Alibaba PuHuiTi 2.0';
+			font-weight: normal;
+
+			.user_out {
+				display: flex;
+				flex-direction: row;
+				justify-content: start;
+				align-items: center;
+
+				.user_font {
+					width: 100rpx;
+				}
+			}
+
+			.user_font {
+				width: 140rpx;
+				font-size: 28rpx;
+				color: #333333;
+			}
+
+			.user_font_unit {
+				color: blue;
+			}
+
+			input {
+				padding: 12rpx 16rpx;
+				border-bottom: 1px solid #D6D6D6;
+				box-sizing: content-box;
+				font-size: 24rpx;
+			}
+
+			.unit {
+				font-size: 28rpx;
+				color: #4A89FB;
+			}
+		}
+	}
+</style>

+ 283 - 187
src/pages/index/pay.vue

@@ -3,15 +3,18 @@
 import { onLoad, onShow, onUnload } from "@dcloudio/uni-app";
 import { ref, reactive } from "vue";
 import {
-  createOrderApi,
-  payAppointmentApi,
-  queryOrderStatusApi,
-  queryParamsApi,
+	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相等  但是状态是支付中  --可查看全部状态
@@ -29,12 +32,29 @@ const userInfo = useMemberStore();
 
 //获取到的传输过来的唯一值
 const params = reactive<any>({
-  title: "", //标题
-  num: "", //剩余次数
-  time: "", //有效截止日期
-  flag: "", //当前订单的状态
+	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: "" });
@@ -43,89 +63,125 @@ 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);
-  // });
+	//获取的二维码中得到的参数信息
+	// 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;
-  debugger;
-  //不等于空的话就说明是从扫码进来的
-  //如果是空的话就是渠道点击进来的
-  if (scene.value.scene !== "") {
-    loginUser().then((res) => {
-      //这时已经有返回信息了且用户数据已经
-      scene.value.userId = res as string;
-      //获取到userId了
-      queryParams(scene.value);
-    });
-  } else {
-    //如果是渠道点击进来的
-    //则调用渠道接口//然后返回数据
-  }
+	//从缓存中取出信息
+	//  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);
+	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.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);
 
-  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
+	});
+	homeList.value.queryReportList();
+	queryParams(scene.value);
+	uni.showToast({
+		title: '提交成功'
+	})
+}
+
 //有效日期
 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;
+	//将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先生成订单号
@@ -137,142 +193,182 @@ const formatterData = (date: any, day: any) => {
 
 //点击支付按钮生成的方法
 const payButton = () => {
-  //先调用订单生成
-  //creatOrderFun()
+	//先调用订单生成
+	creatOrderFun(orderParams)
 };
 //生成订单号
 const creatOrderFun = async (val: any) => {
-  const res = await createOrderApi(val);
-  //获取到订单号了
+	const res = await createOrderApi(val);
+	if (res.code == '200') {
+		uni.showToast({
+			title: '支付成功'
+		})
+		queryParams(scene.value)
+	}
+	//获取到订单号了
 
-  //然后调用预支付接口后去核心数据
-  //payFun(val)
+	//然后调用预支付接口后去核心数据
+	//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) => {
-      console.log(res);
-      if (res.errMsg == "requestPayment:fail cancel") {
-        console.log("用户取消了支付");
-      } else {
-        queryOrderFor();
-        //调用支付失败的具体原因
-        //这时是不是就应该定时器调用订单状态
-      }
-    },
-  });
+	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) => {
+			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 res = await queryOrderStatusApi(val);
+	//判定返回参数
+	//如果订单完成了
+	//如果是满了返回了
+	//需要去掉定时器
+	clearInterval(timeMe.value);
 };
 //定时器参数
 const timeMe = ref<any>();
 //创建一个定时器
 const queryOrderFor = () => {
-  //进来的时候清除定时器
-  clearInterval(timeMe.value);
-  timeMe.value = setInterval(() => {
-    //嗲用方法
-    queryOrderStatus({});
-  }, 3000);
+	//进来的时候清除定时器
+	clearInterval(timeMe.value);
+	timeMe.value = setInterval(() => {
+		//嗲用方法
+		queryOrderStatus({});
+	}, 3000);
 };
 
 //销毁页面
 onUnload(() => {
-  //来清除定时器
-  clearInterval(timeMe.value);
+	//来清除定时器
+	clearInterval(timeMe.value);
 });
 </script>
 <template>
-  <view class="payBg">
-    <ShuiWuTop />
-    <view class="pay_params">
-      <view class="pay_card_title1">
-        {{ params.title }}
-      </view>
-      <view class="pay_card_num"> 剩余生成次数:{{ params.num }} </view>
-      <view class="pay_card_time"> 有效日期:{{ params.time }} </view>
-    </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">税务风险检测</button></view
-    >
-
-    <view v-show="params.flag == 4"><HomeList class="home_list_com" /></view>
-  </view>
+	<view class="payBg">
+		<ShuiWuTop />
+		<view class="pay_params">
+			<view class="pay_card_title1">
+				{{ params.title }}
+			</view>
+			<view class="pay_card_num"> 剩余生成次数:{{ params.num }} </view>
+			<view class="pay_card_time"> 有效日期:{{ params.time }} </view>
+		</view>
+		<view v-show="params.flag == 1 || params.flag == 2"><button class="pay_button" @click="payButton">立即支付</button>
+		</view>
+		<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" @saveReport="saveReportHandle" />
+	</view>
 </template>
 <style lang="scss">
 page {
-  height: 100%;
+	height: 100%;
 }
+
 .payBg {
-  background-color: rgb(243, 250, 248);
-  width: 750rpx;
-  height: 100%;
-  padding: 0rpx 20rpx;
-  .pay_params {
-    border-radius: 20rpx;
-    color: #ffffff;
-    margin-top: 60rpx;
-    padding: 20rpx 40rpx;
-    background: linear-gradient(#bbc0ee, #55459e);
-    display: flex;
-    flex-direction: column;
-    .pay_card_title1 {
-      font-size: 40rpx;
-      padding-top: 20rpx;
-      padding-bottom: 40rpx;
-      padding-left: 20rpx;
-    }
-    .pay_card_num {
-      font-size: 26rpx;
-      padding-left: 20rpx;
-      margin-top: 20rpx;
-    }
-    .pay_card_time {
-      font-size: 26rpx;
-      padding-left: 20rpx;
-      margin-top: 20rpx;
-      margin-bottom: 40rpx;
-    }
-  }
-  .pay_button {
-    color: #ffffff;
-    border-radius: 20rpx;
-    margin-top: 40rpx;
-    width: 100%;
-    background: linear-gradient(#bbc0ee, #55459e);
-  }
-  .detection_button {
-    border-radius: 20rpx;
-    color: #ffffff;
-    width: 100%;
-    background: linear-gradient(#bb8e2d, #c7ca11);
-  }
+	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;
+		}
+	}
+
+	.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>
+</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>

+ 274 - 214
src/pages/my/my.vue

@@ -2,273 +2,333 @@
 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 res = await http<string[]>({
+		url: `/home/banner`,
+		method: "GET",
+		header: {},
+	});
 };
 
 const editUser = () => {
-  //跳转到编辑页面
-  uni.navigateTo({
-    url: "/pages/my/myEdit",
-  });
+	//跳转到编辑页面
+	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));
-    },
-  });
+	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",
-  });
+	//跳转到邀请页面
+	uni.navigateTo({
+		url: "/pages/my/myInvite",
+	});
 };
 
 const aboutMy = () => {
-  //跳转到关于
-  uni.navigateTo({
-    url: "/pages/my/aboutMy",
-  });
+	//跳转到关于
+	uni.navigateTo({
+		url: "/pages/my/aboutMy",
+	});
 };
 const report = () => {
-  //跳转到报告页面
-  uni.navigateTo({
-    url: "/pages/my/reportList",
-  });
+	//跳转到报告页面
+	uni.navigateTo({
+		url: "/pages/my/reportList",
+	});
 };
 
 const exit = () => {
-  uni.showToast({ title: "已退出" });
-  //跳转到报告页面
-
-  setTimeout(() => {
-    uni.switchTab({
-      url: "/pages/index/index",
-    });
-  }, 550);
+	uni.showToast({ title: "已退出" });
+	//跳转到报告页面
+
+	setTimeout(() => {
+		uni.switchTab({
+			url: "/pages/index/index",
+		});
+	}, 550);
 };
+
+onShow(() => {
+	if (memberStore.userInfo.isAuth == '0') {
+		uni.switchTab({
+			url: '/pages/index/index',
+			success() {
+				uni.showToast({
+					title: '暂无权限',
+					icon: 'none',
+					duration: 1500
+				})
+			}
+		})
+		return
+	}
+})
 </script>
 
 <template>
-  <view class="bg">
-    <ShuiWuTop />
-    <view class="home_top"> 我的 </view>
-    <view class="company_top"
-      ><image class="company_image" :src="memberStore.userInfo.channelAvatar"></image>
-      <view>{{
+	<view class="bg">
+		<!-- <ShuiWuTop /> -->
+		<view class="home_top"> 我的 </view>
+		<!-- <view class="company_top">
+			<image class="company_image" :src="memberStore.userInfo.channelAvatar"></image>
+			<view>{{
         memberStore.userInfo.channelName == null ? "" : memberStore.userInfo.channelName
       }}</view>
-    </view>
-    <view class="my_info">
-      <view class="info_out">
-        <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>
-      </view>
-      <view class="info_detail" style="margin-top: 25rpx"
-        >联系电话:&nbsp;&nbsp;{{
-          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"
-        >公司地址:&nbsp;&nbsp;{{ memberStore.userInfo.compAddress }}</view
-      >
-      <view class="info_edit">
-        <button class="button_edit" @click="editUser">编辑</button>
-        <button class="button_edit" @click="shireFun" open-type="share">分享</button>
-      </view>
-    </view>
-
-    <view class="my_tab">
-      <view class="my_tab_detail" @click="myInvite">
-        <view>
-          <image class="tab_icon" src="../../static/images/shequ.png" />
-        </view>
-        <view class="tab_des"> 我的邀请 </view>
-        <view>
-          <image class="tab_icon-right" src="../../static/images/right.png" />
-        </view>
-      </view>
-      <ShuiWuLine />
-      <view class="my_tab_detail" @click="report">
-        <view>
-          <image class="tab_icon" src="../../static/images/fankui.png" />
-        </view>
-        <view class="tab_des"> 报告记录 </view>
-        <view>
-          <image class="tab_icon-right" src="../../static/images/right.png" />
-        </view>
-      </view>
-      <ShuiWuLine />
-      <view class="my_tab_detail" @click="aboutMy">
-        <view>
-          <image class="tab_icon" src="../../static/images/about.png" />
-        </view>
-        <view class="tab_des"> 关于我们 </view>
-        <view>
-          <image class="tab_icon-right" src="../../static/images/right.png" />
-        </view>
-      </view>
-      <ShuiWuLine />
-      <view class="my_tab_detail_exit" @click="exit">
-        <view>
-          <image class="tab_icon" src="../../static/images/exit.png" />
-        </view>
-        <view class="tab_des"> 退出登录 </view>
-      </view>
-    </view>
-    <view> </view>
-    <view> </view>
-  </view>
+		</view> -->
+		<view class="my_info">
+			<view class="info_out">
+				<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>
+			</view>
+			<view class="info_detail">联系电话:&nbsp;&nbsp;{{
+				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">
+				公司地址:&nbsp;&nbsp;{{ memberStore.userInfo.compAddress }}</view>
+			<view class="info_edit">
+				<view class="button_edit" @click="editUser">
+					<image src="https://test.jue-ming.com:8849/api/show?filePath=./jinhong/my/edit_icon.png"
+						mode="widthFix"></image><text>编辑</text>
+				</view>
+				<view class="line"></view>
+				<view class="button_edit" @click="shireFun" open-type="share">
+					<image src="https://test.jue-ming.com:8849/api/show?filePath=./jinhong/my/share_icon.png"
+						mode="widthFix"></image><text>分享</text>
+				</view>
+			</view>
+		</view>
+
+		<view class="my_tab">
+			<view class="my_tab_detail" @click="myInvite">
+				<view>
+					<image class="tab_icon"
+						src="https://test.jue-ming.com:8849/api/show?filePath=./jinhong/my/menu_icon1.png" />
+				</view>
+				<view class="tab_des"> 我的邀请 </view>
+				<view>
+					<image class="tab_icon-right" src="../../static/images/right.png" />
+				</view>
+			</view>
+			<ShuiWuLine />
+			<view class="my_tab_detail" @click="report">
+				<view>
+					<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>
+					<image class="tab_icon-right" src="../../static/images/right.png" />
+				</view>
+			</view>
+			<ShuiWuLine />
+			<view class="my_tab_detail" @click="aboutMy">
+				<view>
+					<image class="tab_icon"
+						src="https://test.jue-ming.com:8849/api/show?filePath=./jinhong/my/menu_icon3.png" />
+				</view>
+				<view class="tab_des"> 关于我们 </view>
+				<view>
+					<image class="tab_icon-right" src="../../static/images/right.png" />
+				</view>
+			</view>
+			<ShuiWuLine />
+			<view class="my_tab_detail_exit" @click="exit">
+				<view>
+					<image class="tab_icon"
+						src="https://test.jue-ming.com:8849/api/show?filePath=./jinhong/my/menu_icon4.png" />
+				</view>
+				<view class="tab_des"> 退出登录 </view>
+			</view>
+		</view>
+		<view> </view>
+		<view> </view>
+	</view>
 </template>
 
 <style lang="scss">
 //
 page {
-  height: 100%;
+	width: 100%;
+	height: 100%;
 }
 
 .bg {
-  height: 100%;
-  padding: 0rpx 20rpx;
-  background: rgb(243, 250, 248);
-  .home_top {
-    text-align: center;
-    font-size: 40rpx;
-    margin-bottom: 60rpx;
-  }
-  .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;
-    }
-  }
+	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;
+	}
+
+	.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 {
-  display: flex;
-  flex-direction: column;
-  justify-content: flex-start;
-  background: linear-gradient(rgb(191, 191, 243), rgb(98, 95, 240));
-  padding-top: 15rpx;
-  border-radius: 15rpx;
-  .info_out {
-    padding: 0rpx 20rpx;
-    display: flex;
-    flex-direction: row;
-    .user_name {
-      color: #ffffff;
-      display: flex;
-      flex-direction: column;
-      justify-content: space-between;
-      .user_name_detail {
-        font-size: 36rpx;
-      }
-    }
-  }
-  .user_image {
-    width: 100rpx;
-    height: 100rpx;
-    background-color: #eeeeee;
-    border-radius: 50%;
-    margin-right: 20rpx;
-  }
-  .info_detail {
-    color: #ffffff;
-    padding: 10rpx 20rpx;
-    font-size: 36rpx;
-    font-weight: 100;
-  }
-  .info_edit {
-    line-height: 100rpx;
-    background-color: #ffffff;
-    color: #000000;
-    display: flex;
-    font-size: 36rpx;
-    flex-direction: row;
-    justify-content: space-around;
-    border-bottom-left-radius: 15rpx;
-    border-bottom-right-radius: 15rpx;
-    .button_edit {
-      background-color: transparent;
-    }
-  }
-
-  // items-align:center;
+	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 {
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+		padding: 31rpx 0 18rpx 39rpx;
+
+		.user_name {
+			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;
+			}
+		}
+	}
+
+	.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_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;
+			justify-content: center;
+			align-items: center;
+
+			image {
+				width: 34rpx;
+				margin-right: 10rpx;
+			}
+
+			&:active {
+				opacity: 0.8;
+			}
+		}
+
+		.line {
+			width: 1rpx;
+			height: 59rpx;
+			background: #FFFFFF;
+		}
+	}
+
+	// items-align:center;
 }
 
 .user_icon {
-  margin-right: 30rpx;
-  width: 80rpx;
-  height: 80rpx;
-  border-radius: 50%;
+	margin-right: 30rpx;
+	width: 80rpx;
+	height: 80rpx;
+	border-radius: 50%;
 }
 
 .my_tab {
-  background-color: #ffffff;
-  margin-top: 40rpx;
-  border-radius: 30rpx;
-  padding: 10rpx 30rpx;
+	background-color: #ffffff;
+	margin-top: 40rpx;
+	border-radius: 30rpx;
+	padding: 10rpx 30rpx;
 }
 
 .my_tab_detail {
-  margin-top: 42rpx;
-  margin-bottom: 20rpx;
-  display: flex;
-  flex-direction: row;
-  align-items: center;
+	margin-top: 42rpx;
+	margin-bottom: 20rpx;
+	display: flex;
+	flex-direction: row;
+	align-items: center;
 
-  justify-content: flex-start;
+	justify-content: flex-start;
 }
+
 .my_tab_detail_exit {
-  margin-top: 40rpx;
-  margin-bottom: 40rpx;
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  width: 100%;
-  justify-content: center;
+	margin-top: 40rpx;
+	margin-bottom: 40rpx;
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	width: 100%;
+	justify-content: center;
 }
 
 .tab_icon {
-  width: 40rpx;
-  height: 40rpx;
+	width: 40rpx;
+	height: 40rpx;
 }
 
 .tab_des {
-  font-size: 30rpx;
-  margin-left: 30rpx;
-  flex: 1;
+	font-size: 30rpx;
+	margin-left: 30rpx;
+	flex: 1;
 }
 
 .tab_icon-right {
-  width: 20rpx;
-  height: 30rpx;
+	width: 20rpx;
+	height: 30rpx;
 }
-</style>
+</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>

+ 75 - 1
src/services/home.ts

@@ -22,16 +22,35 @@ const createPosterUrl = '/link/save'
 const queryParamsUrl = '/link/check'
 
 //生成订单号
-const createOrderUrl = ''
+const createOrderUrl = '/order/save'
+
 //预支付接口
 const payAppointmentUrl = ''
 
+// 保存报告
+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',
@@ -75,6 +94,24 @@ export const getUserPhoneApi = (val: GetPhoneParams) => {
   })
 }
 
+// 手机号查询用户是否备案
+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>({
@@ -111,6 +148,33 @@ export const payAppointmentApi = (val: any) => {
   })
 }
 
+//保存报告
+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 queryReportListByUserApi = (id: string, val: any) => {
+  return http<any>({
+    method: 'GET',
+    url: `${queryReportListByUserUrl}${id}`,
+    data: { ...val },
+  })
+}
+
 //根据订单号查询用户订单状况
 export const queryOrderStatusApi = (val: any) => {
   return http<any>({
@@ -119,6 +183,7 @@ export const queryOrderStatusApi = (val: any) => {
     data: { ...val },
   })
 }
+
 //保存账号信息
 export const saveUserSWApi = (val: any) => {
   return http<any>({
@@ -127,3 +192,12 @@ export const saveUserSWApi = (val: any) => {
     data: { ...val },
   })
 }
+
+// 查询我的邀请列表
+export const queryMyInviteApi = (val: any) => {
+  return http<any>({
+    method: 'POST',
+    url: queryMyInvitesUrl,
+    data: { ...val },
+  })
+}

二进制
src/static/images/bg.png


二进制
src/static/images/blank_cart.png


二进制
src/static/images/bubble.png


二进制
src/static/images/car.png


二进制
src/static/images/center_bg.png


二进制
src/static/images/fxjc.png


二进制
src/static/images/index_bg.png


二进制
src/static/images/left.png


二进制
src/static/images/locate.png


二进制
src/static/images/logo.png


二进制
src/static/images/logo_icon.png


二进制
src/static/images/money.png


二进制
src/static/images/navigator_bg.png


二进制
src/static/images/order_bg.png


二进制
src/static/images/right.png


二进制
src/static/images/search_icon.png


二进制
src/static/images/stars.png


二进制
src/static/images/start.png


二进制
src/static/images/tyd.png


二进制
src/static/images/yqyh.png


二进制
src/static/tabs/home_default.png


二进制
src/static/tabs/home_default2.png


二进制
src/static/tabs/home_selected.png


二进制
src/static/tabs/home_selected2.png


二进制
src/static/tabs/user_default.png


二进制
src/static/tabs/user_default2.png


二进制
src/static/tabs/user_selected.png


二进制
src/static/tabs/user_selected2.png


+ 103 - 103
src/stores/modules/member.ts

@@ -3,109 +3,109 @@ import { reactive, ref } from 'vue'
 
 // 定义 Store
 export const useMemberStore = defineStore(
-  'member',
-  () => {
-    // 会员信息
-    const profile = ref<any>()
-    const token = ref<any>()
-    const userInfo = ref<any>({
-      //用户ID
-      id: '',
-      //渠道ID
-      channelId: '',
-      //手机号
-      phone: '',
-      //微信用户
-      name: '',
-      //昵称
-      userName: '',
-      //openId
-      openId: '',
-      //Miami
-      //用户类型
-      type: '',
-      //密码
-      password: '',
-      //用户状态
-      state: '',
-      //用户头像
-      photoPath: '',
-      //是否授权
-      isAuth: '',
-      //渠道名字
-      channelName: '',
-      //邮箱
-      mail: '',
-      //岗位
-      job: '',
-      //公司名称
-      compAddress: '',
-      //公司头像
-      channelAvatar: '',
-      //海报
-      posterBackground: '',
-    })
+	'member',
+	() => {
+		// 会员信息
+		const profile = ref<any>()
+		const token = ref<any>()
+		const userInfo = ref<any>({
+			//用户ID
+			id: '',
+			//渠道ID
+			channelId: '',
+			//手机号
+			phone: '',
+			//微信用户
+			name: '',
+			//昵称
+			userName: '',
+			//openId
+			openId: '',
+			//Miami
+			//用户类型
+			type: '',
+			//密码
+			password: '',
+			//用户状态
+			state: '',
+			//用户头像
+			photoPath: 'https://test.jue-ming.com:8849/api/show?filePath=./jinhong/my/user_default.png',
+			//是否授权
+			isAuth: '',
+			//渠道名字
+			channelName: '',
+			//邮箱
+			mail: '',
+			//岗位
+			job: '',
+			//公司名称
+			compAddress: '',
+			//公司头像
+			channelAvatar: '',
+			//海报
+			posterBackground: '',
+		})
 
-    //用户scene唯一标识保存
-    const scene = ref<string>('')
-    //保存scene唯一标识信息
-    const saveScene = (val: string) => {
-      scene.value = val
-    }
-    //保存用户信息
-    const saveUserInfo = (val: any) => {
-      userInfo.value = val
-    }
-    //清除用户信息
-    const clearUserInfo = () => {
-      userInfo.value = {}
-    }
-    //保存token  token校验时使用
-    const saveToken = (val: string) => {
-      token.value = val
-    }
-    //清除token
-    const clearToken = () => {
-      token.value = ''
-    }
-    // 保存会员信息,登录时使用
-    const setProfile = (val: any) => {
-      profile.value = val
-    }
+		//用户scene唯一标识保存
+		const scene = ref<string>('')
+		//保存scene唯一标识信息
+		const saveScene = (val : string) => {
+			scene.value = val
+		}
+		//保存用户信息
+		const saveUserInfo = (val : any) => {
+			userInfo.value = val
+		}
+		//清除用户信息
+		const clearUserInfo = () => {
+			userInfo.value = {}
+		}
+		//保存token  token校验时使用
+		const saveToken = (val : string) => {
+			token.value = val
+		}
+		//清除token
+		const clearToken = () => {
+			token.value = ''
+		}
+		// 保存会员信息,登录时使用
+		const setProfile = (val : any) => {
+			profile.value = val
+		}
 
-    // 清理会员信息,退出时使用
-    const clearProfile = () => {
-      profile.value = undefined
-    }
+		// 清理会员信息,退出时使用
+		const clearProfile = () => {
+			profile.value = undefined
+		}
 
-    // 记得 return
-    return {
-      profile,
-      token,
-      userInfo,
-      scene,
-      saveScene,
-      saveToken,
-      clearToken,
-      setProfile,
-      clearProfile,
-      saveUserInfo,
-      clearUserInfo,
-    }
-  },
-  // TODO: 持久化
-  {
-    //网页版是这样设置
-    // persist: true,
-    persist: {
-      storage: {
-        getItem(key) {
-          return uni.getStorageSync(key)
-        },
-        setItem(key, value) {
-          uni.setStorageSync(key, value)
-        },
-      },
-    },
-  },
-)
+		// 记得 return
+		return {
+			profile,
+			token,
+			userInfo,
+			scene,
+			saveScene,
+			saveToken,
+			clearToken,
+			setProfile,
+			clearProfile,
+			saveUserInfo,
+			clearUserInfo,
+		}
+	},
+	// TODO: 持久化
+	{
+		//网页版是这样设置
+		// persist: true,
+		persist: {
+			storage: {
+				getItem(key) {
+					return uni.getStorageSync(key)
+				},
+				setItem(key, value) {
+					uni.setStorageSync(key, value)
+				},
+			},
+		},
+	},
+)

+ 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,
+        })
+      },
     })
   })
 }

部分文件因为文件数量过多而无法显示