ソースを参照

feat:海选报名改版完成

zhubo 3 年 前
コミット
36889ec5d5

+ 3 - 3
src/api/districtGarden.js

@@ -1,7 +1,7 @@
 import { request } from '../utils/request'
 
-// districtGarden列表
-export function getDistrictGarden (parmas) {
+// 我的地区园所列表
+export function getDistrictGarden(parmas) {
     return request({
         url: `/agent/miniprogram/school`,
         method: 'GET',
@@ -9,7 +9,7 @@ export function getDistrictGarden (parmas) {
     })
 }
 // 模糊搜索
-export function dimSearch (parmas) {
+export function dimSearch(parmas) {
     return request({
         url: `/agent/miniprogram/school/name`,
         method: 'GET',

+ 11 - 9
src/pages.json

@@ -32,7 +32,7 @@
 			"path": "pages/index/index",
 			"style": {
 				"navigationBarTitleText": "代理商",
-				"disableScroll": true, // 禁止苹果手机滑动
+				"disableScroll": true, 
 				"navigationStyle": "custom",
 				"usingComponents": {
 					"van-button": "/wxcomponents/button/index"
@@ -43,7 +43,7 @@
 			"path": "pages/districtGarden/index",
 			"style": {
 				"navigationBarTitleText": "我的地区园所",
-				"disableScroll": true, // 禁止苹果手机滑动
+				"disableScroll": true, 
 				"navigationStyle": "custom",
 				"usingComponents": {
 					"van-button": "/wxcomponents/button/index",
@@ -57,7 +57,7 @@
 			"path": "pages/audit/index",
 			"style": {
 				"navigationBarTitleText": "开园审核",
-				"disableScroll": true, // 禁止苹果手机滑动
+				"disableScroll": true, 
 				"navigationStyle": "custom",
 				"usingComponents": {
 					"van-button": "/wxcomponents/button/index",
@@ -73,7 +73,7 @@
 			"path": "pages/search/index",
 			"style": {
 				"navigationBarTitleText": "搜索园所",
-				"disableScroll": true, // 禁止苹果手机滑动
+				"disableScroll": true, 
 				"navigationStyle": "custom",
 				"usingComponents": {
 					"van-search": "/wxcomponents/search/index"
@@ -83,11 +83,7 @@
 		{
 			"path": "pages/invitePage/index",
 			"style": {
-				"navigationBarTitleText": "园长开园邀请码",
-				"disableScroll": true, // 禁止苹果手机滑动
-				"usingComponents": {
-					"van-search": "/wxcomponents/search/index"
-				}
+				"navigationBarTitleText": "园长开园邀请码"
 			}
 		},
 		{
@@ -164,6 +160,12 @@
 				"navigationBarTitleText": "添加参赛园所"
 			}
 		},
+		{
+			"path": "pages/competitionRegister/selectSchool",
+			"style": {
+				"navigationBarTitleText": "选择幼儿园"
+			}
+		},
 		{
 			"path": "pages/competitionRegister/schoolInformation",
 			"style": {

+ 32 - 44
src/pages/competition/index.vue

@@ -6,13 +6,9 @@
       :key="item.id"
       @click="goPage(item)"
     >
-      <view class="overlay"></view>
       <image class="activity-img" mode="aspectFill" :src="item.imgUrl" />
       <view class="activity-text">
-        <view class="text">
-          <view>{{ item.name }}</view>
-          <van-icon class="right-arrow" name="arrow" color="#FFFFFF" />
-        </view>
+        <view class="text">{{ item.name }}</view>
         <text class="date"> {{ item.startTime }}-{{ item.endTime }} </text>
       </view>
     </view>
@@ -85,53 +81,45 @@ export default {
 
 <style lang="less" scoped>
 .competition {
-  padding-bottom: 200px;
+  padding-top: 20px;
+  width: 100vw;
+  height: 100vh;
+  box-sizing: border-box;
+  background: linear-gradient(145deg, #bfd6ff 0%, #fefefe 100%);
+  overflow-y: auto;
   .avtivity-item {
     position: relative;
-    width: 100vw;
-    height: 358rpx;
-    .overlay {
-      width: 100vw;
-      height: 358rpx;
-      background-color: #000;
-      opacity: 0.3;
-      position: absolute;
-      top: 0;
-      left: 0;
-    }
+    margin: 40rpx auto 0;
+    width: 686rpx;
+    min-height: 442rpx;
+    background: #ffffff;
+    box-shadow: 0px 4rpx 40rpx 0px rgba(191, 216, 255, 0.7);
+    border-radius: 40rpx;
+    overflow: hidden;
     .activity-img {
-      width: 100vw;
-      height: 358rpx;
+      display: block;
+      width: 100%;
+      height: 292rpx;
+      object-fit: cover;
     }
     .activity-text {
-      width: 100vw;
-      display: flex;
-      flex-direction: column;
-      justify-content: center;
-      align-items: center;
-      font-size: 30rpx;
-      font-family: PingFangSC-Medium, PingFang SC;
-      font-weight: 500;
-      color: #ffffff;
-      position: absolute;
-      z-index: 1;
-      top: 50%;
-      left: 50%;
-      transform: translate(-50%, -50%);
+      margin: 26rpx 24rpx;
       .text {
-        display: flex;
-        align-items: center;
-        width: 100vw;
-        display: flex;
-        justify-content: center;
-        .right-arrow {
-          display: block;
-          width: 30rpx;
-          height: 30rpx;
-        }
+        min-height: 46rpx;
+        font-size: 30rpx;
+        font-family: PingFangSC-Medium, PingFang SC;
+        font-weight: 500;
+        color: #333333;
+        line-height: 46rpx;
       }
       .date {
-        margin-top: 8rpx;
+        margin-top: 4rpx;
+        height: 40rpx;
+        font-size: 24rpx;
+        font-family: PingFangSC-Regular, PingFang SC;
+        font-weight: 400;
+        color: #999999;
+        line-height: 40rpx;
       }
     }
   }

+ 157 - 74
src/pages/competitionRegister/addSchool.vue

@@ -1,5 +1,18 @@
 <template>
   <view class="add-school">
+    <!-- 顶部的邀请入园 -->
+    <view class="toInvite">
+      <view class="toInviteContent">
+        *未加入我的地区幼儿园,可【分享专属邀请-园长注册-地区负责人审核通过】
+      </view>
+      <view class="toInviteBtn" @click="toInvite">去邀请</view>
+    </view>
+
+    <view class="selectSchoolBtn" @click="selectMySchool">
+      <image class="selectBtn" :src="staticImg.selectBtn" />
+      <text>选择我的地区幼儿园</text>
+    </view>
+
     <view class="school-card-list">
       <view
         class="school-card"
@@ -21,56 +34,40 @@
           <view class="school-information-item">
             <view class="school-label">参赛园所名称</view>
             <view class="school-content">
-              <view v-if="!isEdit" class="school-content-input">{{
+              <text class="school-content-school-name">{{
                 item.schoolName
-              }}</view>
-              <input
-                v-else
-                class="school-content-input"
-                placeholder="请选择/输入园所名称"
-                :placeholder-style="placeholderStyle"
-                :value="item.schoolName"
-                @input="changeForm($event, index, 'schoolName')"
-              />
-              <image
-                class="close-icon"
-                :src="staticImg.closeIcon"
-                v-if="item.schoolName && isEdit"
-                @click="restForm(index, 'schoolName')"
-              />
-              <van-icon
-                v-if="!item.schoolName && isEdit"
-                color="#999999"
-                name="arrow-down"
-              />
+              }}</text>
             </view>
           </view>
           <view class="school-information-item">
             <view class="school-label">初赛人数预估</view>
             <view class="school-content">
-              <view v-if="!isEdit" class="school-content-input">{{
+              <text v-if="!isEdit" class="school-content-school-name">{{
                 item.totalPerson
-              }}</view>
+              }}</text>
               <input
                 v-else
+                type="number"
                 class="school-content-input"
-                placeholder="请输入参赛人员数"
-                :placeholder-style="placeholderStyle"
                 :value="item.totalPerson"
                 @input="changeForm($event, index, 'totalPerson')"
               />
+              <text
+                :class="['endText', isEdit ? '' : 'school-content-school-name']"
+                >人</text
+              >
             </view>
           </view>
         </view>
       </view>
     </view>
-    <view class="add-school-button" v-if="isEdit" @click="addSchool">
+    <!-- <view class="add-school-button" v-if="isEdit" @click="addSchool">
       <view class="school-add-button">
         <image class="plus-icon" :src="staticImg.plusIcon" />
         <text>添加参赛园所</text>
         <van-icon color="#4679FF" name="arrow" />
       </view>
-    </view>
+    </view> -->
 
     <!-- 编辑与保存按钮 -->
     <view class="opration-buttons">
@@ -86,10 +83,13 @@
 </template>
 
 <script>
+import Tip from "@/utils/tip.js";
+
 const staticImg = {
   closeIcon: require("@/static/competitionRegister/common/close-icon.png"),
   deleteIcon: require("@/static/competitionRegister/common/delete-icon.png"),
   plusIcon: require("@/static/competitionRegister/common/plus-icon.png"),
+  selectBtn: require("@/static/competitionRegister/common/selectBtn.png"),
 };
 export default {
   name: "add-school",
@@ -110,63 +110,78 @@ export default {
         schoolName: "",
         totalPerson: "",
       },
+      formData: {},
     };
   },
-  onLoad() {
+  onLoad(options) {
     uni.getStorage({
-      key: "schoolList",
+      key: "formData",
       success: (res) => {
-        this.schoolList = res.data;
+        this.formData = res.data;
+        this.schoolList = res.data.schoolList;
       },
       fail: (res) => {
         console.log(res, "fail");
-        this.addSchool();
       },
     });
+    this.$nextTick(() => {
+      if (options.schoolList) {
+        const schoolList = JSON.parse(decodeURIComponent(options.schoolList));
+        schoolList.forEach((item) => {
+          if (
+            this.schoolList.findIndex((i) => i.schoolId === item.schoolId) !==
+            -1
+          ) {
+            item.totalPerson = this.schoolList.filter(
+              (i) => i.schoolId === item.schoolId
+            )[0].totalPerson;
+          }
+        });
+        this.schoolList = schoolList;
+      }
+    });
   },
   methods: {
+    toInvite() {
+      uni.navigateTo({
+        url: "/pages/invitePage/index",
+      });
+    },
+    selectMySchool() {
+      uni.redirectTo({
+        url: `/pages/competitionRegister/selectSchool?schoolList=${encodeURIComponent(
+          JSON.stringify(this.schoolList)
+        )}`,
+      });
+    },
     handleDelete(index) {
       this.schoolList.splice(index, 1);
     },
     cancelOpration() {
-      uni.navigateBack({
-        delta: 1,
+      uni.redirectTo({
+        url: `/pages/competitionRegister/collectInformation`,
       });
-      // uni.getStorage({
-      //   key: "schoolList",
-      //   success: (res) => {
-      //     this.schoolList = res.data;
-      //   },
-      //   fail: (res) => {
-      //     console.log(res, "fail");
-      //     this.schoolList = [];
-      //   },
-      // });
     },
     changeOprationState() {
+      if (
+        this.schoolList.findIndex(
+          (item) => item.totalPerson === undefined || item.totalPerson * 1 < 1
+        ) !== -1
+      ) {
+        Tip.error("请填写初赛预估人数!");
+        return;
+      }
       this.isEdit = !this.isEdit;
       if (!this.isEdit) {
         uni.setStorage({
-          key: "schoolList",
-          data: this.schoolList,
+          key: "formData",
+          data: { ...this.formData, schoolList: this.schoolList },
           success: () => {
-            console.log("schoolList保存成功");
+            console.log("formData保存成功");
           },
         });
       }
     },
-    addSchool() {
-      const time = new Date().getTime();
-      console.log(time, "time");
-      this.schoolList.push(
-        JSON.parse(
-          JSON.stringify({
-            ...this.form,
-            code: time,
-          })
-        )
-      );
-    },
     restForm(index, key) {
       this.schoolList[index][key] = "";
     },
@@ -180,34 +195,95 @@ export default {
 
 <style lang="less" scoped>
 .add-school {
-  padding-top: 48rpx;
+  min-height: 100vh;
+  background-color: #fff;
   box-sizing: border-box;
-  padding-bottom: 1000rpx;
-  .school-card-list {
+  overflow: hidden;
+
+  .toInvite {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
     padding: 0 32rpx;
+    height: 88rpx;
+    background: #ffe7e9;
+    .toInviteContent {
+      width: 514rpx;
+      height: 64rpx;
+      font-size: 22rpx;
+      font-family: PingFangSC-Regular, PingFang SC;
+      font-weight: 400;
+      color: #ff808c;
+      line-height: 32rpx;
+    }
+    .toInviteBtn {
+      width: 152rpx;
+      height: 60rpx;
+      line-height: 60rpx;
+      background: #ff7e8a;
+      border-radius: 30rpx;
+      font-size: 26rpx;
+      font-family: PingFangSC-Medium, PingFang SC;
+      font-weight: 500;
+      color: #ffffff;
+      text-align: center;
+      box-sizing: border-box;
+    }
+  }
+
+  .selectSchoolBtn {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    margin: 40rpx auto 0;
+    width: 686rpx;
+    height: 108rpx;
+    background: #507bfc;
+    box-shadow: 0px 0px 44rpx 0px rgba(226, 226, 226, 0.58);
+    border-radius: 20rpx;
+    .selectBtn {
+      display: block;
+      width: 40rpx;
+      height: 40rpx;
+      object-fit: cover;
+    }
+    text {
+      margin-left: 22rpx;
+      width: 308rpx;
+      height: 48rpx;
+      font-size: 34rpx;
+      font-family: PingFangSC-Regular, PingFang SC;
+      font-weight: 400;
+      color: #ffffff;
+      line-height: 48rpx;
+    }
+  }
+  .school-card-list {
+    padding: 0 32rpx 258rpx;
     box-sizing: border-box;
     .school-card {
+      margin-top: 48rpx;
+      padding: 40rpx 32rpx;
       width: 686rpx;
       background: #ffffff;
       box-shadow: 0rpx 0rpx 44rpx 0rpx rgba(226, 226, 226, 0.58);
       border-radius: 20rpx;
-      margin-bottom: 48rpx;
       box-sizing: border-box;
-      padding: 40rpx 32rpx;
       .card-header {
-        width: 100%;
-        height: 68rpx;
         display: flex;
         justify-content: flex-end;
         align-items: center;
-        border-bottom: 2px solid #eee;
+        margin-bottom: 24rpx;
+        width: 100%;
+        height: 68rpx;
+        border-bottom: 2rpx solid #eee;
         .delete-icon {
+          display: block;
           width: 24rpx;
           height: 24rpx;
         }
       }
       .school-information {
-        padding-top: 24rpx;
         .school-information-item:last-child {
           margin-bottom: 0;
         }
@@ -226,16 +302,23 @@ export default {
           .school-content {
             width: 393rpx;
             display: flex;
-            justify-content: space-between;
             align-items: center;
+            .school-content-school-name {
+              color: #999999 !important;
+            }
             .school-content-input {
-              width: 286rpx;
-              text-align: left;
+              width: 124rpx;
+              height: 64rpx;
+              border-radius: 10rpx;
+              border: 2rpx solid #e3e3e3;
+              text-align: center;
             }
-            .close-icon {
-              width: 26rpx;
-              height: 28rpx;
-              display: block;
+            .endText {
+              margin-left: 20rpx;
+              font-size: 30rpx;
+              font-family: PingFangSC-Regular, PingFang SC;
+              font-weight: 400;
+              color: #333333;
             }
           }
         }

+ 47 - 23
src/pages/competitionRegister/collectInformation.vue

@@ -129,7 +129,7 @@
               type="number"
               :min="50"
               :value="material.number"
-              @blur="handleInputBlur(material, $event.target.value)"
+              @change="changeMaterialNumber(material, $event.target.value)"
             />
           </view>
@@ -204,18 +204,18 @@ export default {
       staticImg,
       areaList: Object.freeze(areaList),
       form: {
+        competitionChildId: "",
         district: "请选择所在地区",
         detailAddress: "",
         unit: "",
         unitPrincipal: "",
         materialList: [
-          { id: 1, materialName: "小班", number: 50, isShow: true },
-          { id: 2, materialName: "中班", number: 50, isShow: true },
-          { id: 3, materialName: "大班", number: 50, isShow: true },
+          { id: 1, materialName: "小班", number: 0, isShow: true },
+          { id: 2, materialName: "中班", number: 0, isShow: true },
+          { id: 3, materialName: "大班", number: 0, isShow: true },
         ],
         schoolList: [],
       },
-      competitionId: "",
     };
   },
   computed: {
@@ -243,13 +243,14 @@ export default {
     },
   },
   onLoad(options) {
-    this.competitionId = options.competitionId;
+    this.form.competitionChildId = options.competitionId;
   },
   onShow() {
     uni.getStorage({
-      key: "schoolList",
+      key: "formData",
       success: (res) => {
-        this.$set(this.form, "schoolList", res.data);
+        console.log("success", res.data);
+        this.form = res.data;
       },
       fail: (res) => {
         console.log(res, "fail");
@@ -257,23 +258,34 @@ export default {
     });
   },
   methods: {
+    changeMaterialNumber(key, value) {
+      key.number = value;
+      this.$forceUpdate();
+    },
     // 去添加园所
     handleGoSchoolInfo() {
-      uni.navigateTo({
+      uni.setStorage({
+        key: "formData",
+        data: this.form,
+        success: () => {
+          console.log("form保存成功");
+        },
+      });
+      uni.redirectTo({
         url: `/pages/competitionRegister/addSchool`,
       });
     },
-    // 预料包数量小于50时,强制改成50
-    handleInputBlur(material, value) {
-      if (value * 1 < 50) {
-        // this.$set(this.form.materialList[material.id - 1], "number", 50);
-        this.form.materialList[material.id - 1].number = 50;
-        this.form.materialList[material.id - 1].isShow = false;
-        this.$nextTick(() => {
-          this.form.materialList[material.id - 1].isShow = true;
-        });
-      }
-    },
+    // 预料包数量小于50时,强制改成50  @blur="handleInputBlur(material, $event.target.value)"
+    // handleInputBlur(material, value) {
+    //   if (value * 1 < 50) {
+    //     // this.$set(this.form.materialList[material.id - 1], "number", 50);
+    //     this.form.materialList[material.id - 1].number = 50;
+    //     this.form.materialList[material.id - 1].isShow = false;
+    //     this.$nextTick(() => {
+    //       this.form.materialList[material.id - 1].isShow = true;
+    //     });
+    //   }
+    // },
     // 返回首页
     handleReturnHome() {
       uni.reLaunch({
@@ -286,8 +298,21 @@ export default {
         if (item.materialName === val) item.isShow = !item.isShow;
       });
     },
+    beforeSubmit() {
+      let total = 0;
+      this.form.materialList.map((item) => {
+        if (item.isShow) total += item.number * 1;
+      });
+      if (total < 50) {
+        Tip.error("预定物料包数量总和不得低于50套");
+        return false;
+      } else {
+        return true;
+      }
+    },
     // 提交海选报名
     async submitAgentRegister() {
+      if (!this.beforeSubmit()) return;
       const materialList = this.form.materialList.filter((item) => {
         if (item.isShow) {
           return item;
@@ -296,13 +321,12 @@ export default {
       const params = {
         ...this.form,
         materialList,
-        competitionChildId: this.competitionId,
       };
       const { data, msg, status } = await submitAgentRegister(params);
       if (status === 200) {
         this.show = true;
         uni.removeStorage({
-          key: "schoolList",
+          key: "formData",
           success: function (res) {
             console.log("已经移除内存中的schoolList");
           },
@@ -339,7 +363,7 @@ export default {
 };
 </script>
 
-<style lang="less">
+<style lang="less" scoped>
 @import "@/utils/utils.less";
 
 .collect-information {

+ 3 - 3
src/pages/competitionRegister/component/step-tabbar.vue

@@ -68,14 +68,14 @@ export default {
     // 返回上一步
     handleReturn() {
       if (!this.isStepOne) {
-        uni.navigateBack({
-          delta: 1,
+        uni.redirectTo({
+          url: `/pages/competitionRegister/index?competitionId=${this.competitionId}`,
         });
       }
     },
     // 下一步
     handleNext() {
-      uni.navigateTo({
+      uni.redirectTo({
         url: `/pages/competitionRegister/collectInformation?competitionId=${this.competitionId}`,
       });
     },

+ 292 - 20
src/pages/competitionRegister/index.vue

@@ -6,7 +6,7 @@
     <view class="program-text">
       <view class="program-title"> 签署纲领 </view>
       <view class="program-content">
-        联系在线客服,下载第17届“逻辑狗杯”全国儿童思维魔法嘉年华《共同行动纲领》,在线下载-打印-签署、盖章-邮寄。
+        第17届“逻辑狗杯”全国儿童思维魔法嘉年华《共同行动纲领》,在线下载-打印-签署、盖章-邮寄。
       </view>
     </view>
 
@@ -22,23 +22,171 @@
       <view class="express-adress-content">
         <view class="express-adress-content-item">
           <view class="title">收件人:</view>
-          <view class="content">{{ addressInfo["收件人:"] }}</view>
+          <view class="content">{{ addressInfo.recipient }}</view>
         </view>
         <view class="express-adress-content-item">
           <view class="title">联系电话:</view>
-          <view class="content">{{ addressInfo["联系电话:"] }}</view>
+          <view class="content">{{ addressInfo.phone }}</view>
         </view>
         <view class="express-adress-content-item">
           <view class="title">收货地址:</view>
-          <view class="content">{{ addressInfo["收货地址:"] }}</view>
+          <view class="content">{{ addressInfo.address }}</view>
         </view>
       </view>
     </view>
-    <view class="customer-service" @click="handlePickUp"
-      >下载《共同行动纲领》
+    <view class="customer-service" @click="handleOpenFile">
+      下载《共同行动纲领》
     </view>
 
     <step-tabbar isStepOne submitIsShow :competitionId="competitionId" />
+
+    <!-- 纲领弹窗 -->
+    <van-overlay :show="programShow">
+      <view class="wrapper">
+        <view class="block">
+          <image
+            :src="staticImg.closeBtn"
+            class="closeBtn"
+            @click="handleReturnHome"
+          />
+          <view class="programContent">
+            <view class="programTitle">
+              第17届“逻辑狗杯”全国儿童思维魔法嘉年华 《共同行动纲领》
+            </view>
+            <scroll-view scroll-y="true" class="programText">
+              <view>甲方:第17届“逻辑狗杯”全国儿童思维魔法嘉年华组委会</view>
+              <view>乙方:________________________________________</view>
+              <view
+                >本协议一经甲乙双方签署,乙方即成为甲方‘第17届“逻辑狗杯”全国儿童思维魔法嘉年华’2022年4月1日至7月1日_______赛区承办单位,负责组织、运营赛事在该地区的园所海选赛,表明双方同意本协议所列全部内容。本协议签署之前双方的任何口头或书面交流及沟通与本协议不一致的,均以本协议为准。</view
+              >
+              <view>参赛资格:</view>
+              <view
+                >1、乙方须为甲方签约合作教育机构,以此共同行动纲领为赛事准则,负责当地赛区初赛与复赛组织工作;</view
+              >
+              <view>2、参赛选手须为甲方出品的所有产品的直接使用用户;</view>
+              <view>3、当地参赛选手人数须200人起。</view>
+              <view
+                >为明确甲乙双方在赛事运营上的责任权利和义务关系,在自愿、平等、互利的基础上,甲乙双方本着精诚合作、共同发展的原则,特制定本协议,以期甲乙双方共同遵守:</view
+              >
+              <view>一、本届赛事统一名称</view>
+              <view>统一名称:</view>
+              <view>第17届“逻辑狗杯”全国儿童思维魔法嘉年华</view>
+              <view>地区名称:</view>
+              <view>第17届“逻辑狗杯”全国儿童思维魔法嘉年华——XXX地区·分站</view>
+              <view>二、本届赛事主办单位:</view>
+              <view>中国儿童思维训练网 www.zaojiao.net</view>
+              <view>逻辑狗·一起成长APP</view>
+              <view>逻辑狗·家园共育APP</view>
+              <view>三、本届赛事承办单位:</view>
+              <view>北京中德智慧教育文化有限公司</view>
+              <view>北京思维魔法教育科技有限公司</view>
+              <view>四、本届赛事协办单位:</view>
+              <view>全国各地签约合作教育机构</view>
+              <view>五、双方权利与义务</view>
+              <view>(一)甲方的权利与义务</view>
+              <view
+                >1、甲方拥有与赛事相关的一切权利,并有权通过合法程序将其中的部分或全部权利授权给其他单位、团体或个人。</view
+              >
+              <view
+                >2、甲方负责赛事整体方案的制定和赛事的监督、管理与指导。</view
+              >
+              <view
+                >3、甲方拥有对赛事合作单位与所承办赛事有关一切活动的管理监督权。</view
+              >
+              <view>4、甲方负责制定赛事招标方案、竞赛规程等相关规定。</view>
+              <view
+                >5、甲方可根据实际情况决定比赛项目设置;指定比赛奖励形式。</view
+              >
+              <view
+                >6、甲方负责赛事组织物料的设计、制作和各授权赛区的赛事物料配发。</view
+              >
+              <view>7、甲方负责全国总决赛的组织和承办。</view>
+              <view
+                >8、甲方负责赛事商业宣传、推广,有义务通过商业活动、公益活动、广告宣传提高赛事的知名度和美誉度,维护赛事品牌形象。</view
+              >
+              <view
+                >9、甲方拥有第17届“逻辑狗杯”全国儿童思维魔法嘉年华的最终解释权。</view
+              >
+              <view>(二)乙方的权利与义务</view>
+              <view
+                >1、乙方尽全力组织本届比赛,积极发动3~7岁儿童广泛参与,每个参赛地区组织一定规模的赛事,掀起儿童思维训练的热潮,传播国际化思维教育科学理念及其教育内容。
+              </view>
+              <view
+                >2、乙方自行负责当地比赛的宣传、组织、实施、赛事安全等,并有义务告知参赛家庭相关法律责任由参赛家庭全权负责。</view
+              >
+              <view
+                >3、乙方对当地的赛事结果负全责,参加全国总决赛,须派领队一名带队来京参赛,参加总决赛地区选手及陪同家长的一应事宜,由领队负责管理,同时,选手家长负责参赛人员及家长在来京路途和比赛现场之外的一切安全问题。</view
+              >
+              <view
+                >4、乙方地区海选比赛于2022年4月1日—7月1日举行,赛事结束后向组织单位提交详细的赛事工作总结,并将比赛结果在三日内告知甲方;2022年7月底在北京举行全国总决赛,乙方派出各年龄组冠军1名参加在北京的全国总决赛及参加全国赛事的相关活动。</view
+              >
+              <view
+                >5、乙方区域参赛选手需在甲方提供的全国统一报名通道进行线上登记报名,获得官方认可的唯一选手识别码,并凭此编码参加区域海选赛、区域决赛和全国总决赛。</view
+              >
+              <view
+                >6、乙方组织的区域海选赛和区域决赛需按照甲方制定的赛制进行,具体赛制要求请查阅附件。如有特殊情况需调整赛制需以书面形式向甲方呈报,经甲方审议通过后方可执行。</view
+              >
+              <view
+                >7、乙方决选出参加全国总决赛赛事的幼儿,须提供符合参赛岁段的户口簿证明,同时出具该选手在区域决赛中最终排名的公示证明材料,如排名第一的选手主动放弃参加全国总决赛资格,则需该选手监护人出具书面弃赛证明。</view
+              >
+              <view
+                >8、乙方分赛区的赛事费用由社会赞助或乙方自筹解决。全国总决赛收取相应赛务费用(包含每位参赛小选手的赛务费和一名监护人的会务费),由甲方统一提供的唯一指定报名入口缴纳。</view
+              >
+              <view
+                >9、乙方征集的赛事各级赞助商企业及品牌不得与组织单位赞助商相冲突,征集前需将潜在赞助商名称和赞助意向书面报组织单位批准,获得组织单位批准后方可与赞助商签订赞助协议。</view
+              >
+              <view
+                >10、在本届赛事整体活动中,如乙方未与甲方沟通擅自改动本纲领中规定的相关规定,则甲方有权取消本年度乙方呈报选手参赛资格并取消下一年度乙方在所在地区承办赛事的权利。</view
+              >
+              <view>六、双方赛事承诺</view>
+              <view
+                >本着公平、公正、公开原则,绝不在赛事中参杂任何营私舞弊行为,保证全国赛事的透明性与公正性,给每个孩子一个平等的挑战自我的机会。
+              </view>
+              <view>七、协议的变更与解除</view>
+              <view
+                >(一)甲、乙双方经协商一致的,可以变更或者解除本协议。</view
+              >
+              <view
+                >(二)乙方违反本协议约定的任何一项义务,甲方有权单方解除本协议,甲方所收参赛费和赛务费不予退还。因此造成的损失,有权继续向乙方追偿。
+              </view>
+              <view>八、争议解决</view>
+              <view
+                >因本合同引起的或与本合同有关的任何争议,双方应友好协商解决,如协商不成,可向北京市朝阳区人民法院法院提起诉讼。</view
+              >
+              <view>九、协议生效、终止及续约</view>
+              <view
+                >本协议自甲乙双方加盖公章(自然人须签字),且乙方按照协议签署之日起生效,本协议约定期限届满之日终止。</view
+              >
+              <view
+                >本协议一式三份,甲方执两份,乙方执一份,双方所执具有同等法律效力,本协议未尽事宜双方另订补充协议,补充协议与本协议具有同等法律效力。</view
+              >
+              <view>甲方:</view>
+              <view>乙方:</view>
+              <view>第17届“逻辑狗杯”全国儿童思维魔法嘉年华组委会 </view>
+              <view>法人签字:</view>
+              <view>2022年____月____日</view>
+            </scroll-view>
+            <view class="programCondition">
+              <image
+                class="programConditionBtn"
+                :src="agreeOrNot ? staticImg.selectBtn : staticImg.noSelectBtn"
+                @click.stop="handleChangeAgreeImg"
+              />
+              <view class="programConditionContent">
+                我已阅读第17届“逻辑狗杯”全国儿童思维魔法嘉年华
+                <view>《共同行动纲领》</view>
+              </view>
+            </view>
+            <view
+              :class="['agreeAndGoBtn', agreeOrNot ? '' : 'op3']"
+              @click.stop="handleAgree"
+            >
+              同意并继续
+            </view>
+          </view>
+        </view>
+      </view>
+    </van-overlay>
   </view>
 </template>
 
@@ -48,7 +196,10 @@ import Tip from "@/utils/tip.js";
 import StepRegister from "./component/step-register.vue";
 import StepTabbar from "./component/step-tabbar.vue";
 const staticImg = {
+  closeBtn: require("@/static/competitionRegister/common/closeBtn.png"),
   copyIcon: require("@/static/competitionRegister/index/copy-button.png"),
+  selectBtn: require("@/static/competitionRegister/index/selectBtn.png"),
+  noSelectBtn: require("@/static/competitionRegister/index/noSelectBtn.png"),
 };
 
 export default {
@@ -59,30 +210,66 @@ export default {
   },
   data() {
     return {
-      addressInfo: {
-        "收件人:": "第17届“逻辑狗杯”全国儿童思维魔法嘉年华组委会",
-        "联系电话:": "17800151521",
-        "收货地址:": "北京市朝阳区高碑店西店记忆中德智慧教育E6102室",
-      },
+      // 这个信息是从接口获取的
+      addressInfo: {},
       staticImg,
       competitionId: "",
+      programShow: true,
+      agreeOrNot: false,
     };
   },
   onLoad(options) {
     this.competitionId = options.competitionId;
     this.getAgentProgramAddress();
+    uni.removeStorage({
+      key: "formData",
+      success: function (res) {
+        console.log("已经移除内存中的schoolList");
+      },
+    });
   },
   methods: {
+    handleChangeAgreeImg() {
+      this.agreeOrNot = !this.agreeOrNot;
+    },
+    // 同意并继续
+    handleAgree() {
+      if (!this.agreeOrNot) return;
+      this.programShow = false;
+    },
+    // 返回首页
+    handleReturnHome() {
+      uni.reLaunch({
+        url: "/pages/user/index",
+      });
+      this.programShow = false;
+    },
+    // 打开纲领文件
+    handleOpenFile() {
+      uni.downloadFile({
+        url: this.addressInfo.program,
+        success: function (res) {
+          const filePath = res.tempFilePath;
+          uni.openDocument({
+            filePath: filePath,
+            showMenu: true,
+            success: function (res) {
+              console.log("打开文档成功");
+            },
+          });
+        },
+      });
+    },
+    // 获取纲领地址
     async getAgentProgramAddress() {
       const { data, msg, status } = await getAgentProgramAddress();
       if (status == 200) {
-        this.addressInfo["收件人:"] = data.recipient;
-        this.addressInfo["联系电话:"] = data.phone;
-        this.addressInfo["收货地址:"] = data.address;
+        this.addressInfo = data;
       } else {
         Tip.error(msg);
       }
     },
+    // 打开逻辑狗商城小程序
     handlePickUp() {
       uni.navigateToMiniProgram({
         appId: "wx01e79cb36b9436ee",
@@ -96,12 +283,7 @@ export default {
     },
     // 复制内容到剪切板
     setClipboardData() {
-      let address = "";
-      for (let k in this.addressInfo) {
-        if (address !== "") address += ",";
-        address += k;
-        address += this.addressInfo[k];
-      }
+      const address = `邮寄地址:收件人:${this.addressInfo.recipient},联系电话:${this.addressInfo.phone},收货地址:${this.addressInfo.address}。`;
       uni.setClipboardData({
         data: address,
         success: function () {
@@ -219,4 +401,94 @@ export default {
     color: #ffffff;
   }
 }
+
+.wrapper {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  height: 100vh;
+}
+
+.block {
+  position: relative;
+  background: #ffffff;
+  border-radius: 20rpx;
+  .closeBtn {
+    position: absolute;
+    top: 40rpx;
+    right: 40rpx;
+    z-index: 999;
+    width: 24rpx;
+    height: 24rpx;
+    object-fit: cover;
+  }
+  .programContent {
+    width: 686rpx;
+    // height: 1154rpx;
+    background: #ffffff;
+    border-radius: 24rpx;
+    box-sizing: border-box;
+    .programTitle {
+      margin: 74rpx auto 0;
+      width: 614rpx;
+      font-size: 38rpx;
+      font-family: PingFangSC-Medium, PingFang SC;
+      font-weight: 550;
+      color: #333333;
+      line-height: 52rpx;
+      text-align: center;
+    }
+    .programText {
+      margin: 26rpx auto 32rpx;
+      width: 590rpx;
+      height: 672rpx;
+      font-size: 26rpx;
+      font-family: PingFangSC-Medium, PingFang SC;
+      font-weight: 500;
+      color: #181818;
+      line-height: 48rpx;
+    }
+    .programCondition {
+      display: flex;
+      justify-content: space-between;
+      margin: 0 auto;
+      width: 590rpx;
+      .programConditionBtn {
+        width: 32rpx;
+        height: 32rpx;
+        object-fit: cover;
+      }
+      .programConditionContent {
+        width: 542rpx;
+        height: 68rpx;
+        font-size: 24rpx;
+        font-family: PingFangSC-Regular, PingFang SC;
+        font-weight: 400;
+        color: #666666;
+        line-height: 34rpx;
+        text-align: center;
+        view {
+          display: inline;
+          color: #547ffc;
+        }
+      }
+    }
+    .agreeAndGoBtn {
+      margin: 34rpx auto 56rpx;
+      width: 282rpx;
+      height: 76rpx;
+      line-height: 76rpx;
+      background: linear-gradient(130deg, #466efc 0%, #84bdfc 100%);
+      border-radius: 42rpx;
+      font-size: 30rpx;
+      font-family: PingFangSC-Regular, PingFang SC;
+      font-weight: 400;
+      color: #ffffff;
+      text-align: center;
+    }
+    .op3 {
+      opacity: 0.3;
+    }
+  }
+}
 </style>  

+ 279 - 0
src/pages/competitionRegister/selectSchool.vue

@@ -0,0 +1,279 @@
+<template>
+  <view class="selectSchool">
+    <view class="schoolList">
+      <view class="schoolItem" v-for="item in schoolList" :key="item.id">
+        <image
+          :src="item.isSelect ? staticImg.selectBtn : staticImg.noSelectBtn"
+          class="selectBtn"
+          @click="changeSelectState(item)"
+        />
+        <view class="schoolItemContent">
+          <view class="schoolItemName">
+            <view class="label">园所名称</view>
+            <view class="value">{{ item.schoolName }}</view>
+          </view>
+          <view class="schoolItemName">
+            <view class="label">园长姓名</view>
+            <view class="value">{{ item.principalName }}</view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <view class="selectSchoolFooter">
+      <div class="footerContent">
+        <image
+          :src="allIsSelect ? staticImg.allSelectBtn : staticImg.allNoSelectBtn"
+          class="allSelectBtn"
+          @click="allSelect"
+        />
+        <view class="allSelectText" @click="allSelect">全选</view>
+        <view class="toInvite" @click="toInvite">邀请幼儿园加入</view>
+        <view class="confirmBtn" @click="confirm">
+          <view>确定</view>
+          <view v-if="selectNum > 0" class="selectNum">
+            (已选择:{{ selectNum }})
+          </view>
+        </view>
+      </div>
+    </view>
+  </view>
+</template>
+
+<script>
+import Tip from "@/utils/tip.js";
+import { getDistrictGarden } from "@/api/districtGarden.js";
+const staticImg = {
+  selectBtn: require("@/static/competitionRegister/index/selectBtn.png"),
+  noSelectBtn: require("@/static/competitionRegister/index/noSelectBtn.png"),
+  allNoSelectBtn: require("@/static/competitionRegister/index/allNoSelectBtn.png"),
+  allSelectBtn: require("@/static/competitionRegister/index/allSelectBtn.png"),
+};
+export default {
+  name: "SelectSchool", // 选择幼儿L园
+  data() {
+    return {
+      staticImg,
+      schoolList: [],
+      allIsSelect: false,
+      selectNum: 0,
+      selectSchoolList: [],
+    };
+  },
+  async onLoad(options) {
+    await this.getDistrictGarden();
+    if (options.schoolList) {
+      const schoolList = JSON.parse(decodeURIComponent(options.schoolList));
+      schoolList.map((item) => {
+        const index = this.schoolList.findIndex((i) => i.id === item.schoolId);
+        this.changeSelectState(this.schoolList[index]);
+      });
+      this.selectSchoolList = schoolList;
+    }
+  },
+  methods: {
+    toInvite() {
+      uni.reLaunch({
+        url: "/pages/invitePage/index",
+      });
+    },
+    confirm() {
+      uni.redirectTo({
+        url: `/pages/competitionRegister/addSchool?schoolList=${encodeURIComponent(
+          JSON.stringify(this.selectSchoolList)
+        )}`,
+      });
+    },
+    setSelectSchoolList() {
+      let list = this.schoolList.map((item) => {
+        if (item.isSelect)
+          return {
+            schoolId: item.id,
+            schoolName: item.schoolName,
+          };
+      });
+      list = list.filter((item) => item);
+      list.forEach((item) => {
+        const index = this.selectSchoolList.findIndex(
+          (i) => i.schoolId === item.schoolId
+        );
+        if (index !== -1) {
+          item.totalPerson = this.selectSchoolList[index].totalPerson;
+        }
+      });
+      this.selectSchoolList = list;
+    },
+    // 全选
+    allSelect() {
+      this.allIsSelect = !this.allIsSelect;
+      this.addSchoolIsSelect(this.allIsSelect);
+      if (this.allIsSelect) {
+        this.selectNum = this.schoolList.length;
+      } else {
+        this.selectNum = 0;
+      }
+    },
+    // 改变选中状态
+    changeSelectState(val) {
+      val.isSelect = !val.isSelect;
+      if (val.isSelect) {
+        this.selectNum++;
+      } else {
+        this.selectNum--;
+      }
+      if (this.selectNum === this.schoolList.length) {
+        this.allIsSelect = true;
+      } else {
+        this.allIsSelect = false;
+      }
+      this.setSelectSchoolList();
+      this.$forceUpdate();
+    },
+    // 给每个幼儿园添加选中状态
+    addSchoolIsSelect(state) {
+      this.schoolList.forEach((item) => {
+        item.isSelect = state;
+      });
+      this.setSelectSchoolList();
+      this.$forceUpdate();
+    },
+    // 获取幼儿园列表
+    async getDistrictGarden() {
+      Tip.loading("加载中");
+      const params = {
+        page: 1,
+        pageSize: 10000,
+      };
+      const { data, status, msg } = await getDistrictGarden(params);
+      Tip.loaded();
+      if (status === 200) {
+        const { entityList } = data;
+        this.schoolList = entityList;
+        this.addSchoolIsSelect(false);
+      } else {
+        Tip.error(msg);
+      }
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.selectSchool {
+  min-height: 100vh;
+  .schoolList {
+    padding-bottom: 240rpx;
+    .schoolItem {
+      display: flex;
+      align-items: center;
+      padding: 0 36rpx;
+      margin: 28rpx auto 0;
+      width: 686rpx;
+      height: 198rpx;
+      background: #ffffff;
+      box-shadow: 0px 0px 44rpx 0px rgba(226, 226, 226, 0.58);
+      border-radius: 20rpx;
+      box-sizing: border-box;
+      .selectBtn {
+        display: block;
+        width: 44rpx;
+        height: 44rpx;
+        object-fit: cover;
+      }
+      .schoolItemContent {
+        display: flex;
+        flex-direction: column;
+        justify-content: space-between;
+        margin-left: 38rpx;
+        height: 118rpx;
+        .schoolItemName {
+          display: flex;
+          .label {
+            width: 120rpx;
+            height: 44rpx;
+            font-size: 30rpx;
+            font-family: PingFangSC-Medium, PingFang SC;
+            font-weight: 500;
+            color: #777777;
+            line-height: 44rpx;
+          }
+          .value {
+            margin-left: 48rpx;
+            height: 44rpx;
+            font-size: 30rpx;
+            font-family: PingFangSC-Regular, PingFang SC;
+            font-weight: 400;
+            color: #333333;
+            line-height: 44rpx;
+          }
+        }
+      }
+    }
+  }
+  .selectSchoolFooter {
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    width: 100vw;
+    height: 212rpx;
+    background: #ffffff;
+    box-shadow: 0px -14rpx 20rpx 0px rgba(152, 152, 152, 0.05);
+    border-radius: 40rpx 40rpx 0px 0px;
+    .footerContent {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      width: 100vw;
+      height: 146rpx;
+      .allSelectBtn {
+        display: block;
+        width: 38rpx;
+        height: 38rpx;
+        object-fit: cover;
+      }
+      .allSelectText {
+        padding-left: 12rpx;
+        margin-right: 24rpx;
+        width: 72rpx;
+        height: 42rpx;
+        font-size: 30rpx;
+        font-family: PingFangSC-Regular, PingFang SC;
+        font-weight: 400;
+        color: #666666;
+        line-height: 42rpx;
+        box-sizing: border-box;
+      }
+      .toInvite {
+        width: 260rpx;
+        height: 90rpx;
+        line-height: 90rpx;
+        border-radius: 46rpx;
+        border: 2rpx solid #507bfc;
+        font-size: 30rpx;
+        font-family: PingFangSC-Regular, PingFang SC;
+        font-weight: 400;
+        color: #507bfc;
+        text-align: center;
+      }
+      .confirmBtn {
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        margin-left: 20rpx;
+        width: 260rpx;
+        height: 90rpx;
+        background: #507bfc;
+        border-radius: 46rpx;
+        font-size: 30rpx;
+        color: #ffffff;
+        text-align: center;
+        .selectNum {
+          font-size: 22rpx;
+          font-family: PingFangSC-Medium, PingFang SC;
+          font-weight: 500;
+          color: #ffffff;
+        }
+      }
+    }
+  }
+}
+</style>

+ 142 - 144
src/pages/districtGarden/index.vue

@@ -1,174 +1,172 @@
 <template>
-    <view class="DistrictGarden">
-        <custom-navbar title="我的地区园所" id="custom-navbar"/>
-        <!-- search -->
-        <view class="search">
-            <view class="search-btn" @click="jumpSearchPage">
-                搜索园所名称/园长姓名
-            </view>
-        </view>
-        <!-- 园所列表 -->
-          <!-- refresher-enabled -->
-        <scroll-view 
-            :scroll-y="true" 
-            class="scroll-view"
-            :style="{height: scrollViewHeight}"
-         
-            enable-back-to-top
-            @scrolltolower="scrolltolower"
-            >
-            <view class="garden-list">
-                 <garden-card :districtGardenData='districtGardenData'  />
-            </view>
-        </scroll-view>
+  <view class="DistrictGarden">
+    <custom-navbar title="我的地区园所" id="custom-navbar" />
+    <!-- search -->
+    <view class="search">
+      <view class="search-btn" @click="jumpSearchPage">
+        搜索园所名称/园长姓名
+      </view>
     </view>
+    <!-- 园所列表 -->
+    <!-- refresher-enabled -->
+    <scroll-view
+      :scroll-y="true"
+      class="scroll-view"
+      :style="{ height: scrollViewHeight }"
+      enable-back-to-top
+      @scrolltolower="scrolltolower"
+    >
+      <view class="garden-list">
+        <garden-card :districtGardenData="districtGardenData" />
+      </view>
+    </scroll-view>
+  </view>
 </template>
 
 <script>
-import CustomNavbar from '@/components/CustomNavbar'
-import { getNodeInfo } from '@/utils/wxTool.js'
-import { getDistrictGarden } from '@/api/districtGarden.js'
-import Tip from '@/utils/tip.js'
+import CustomNavbar from "@/components/CustomNavbar";
+import { getNodeInfo } from "@/utils/wxTool.js";
+import { getDistrictGarden } from "@/api/districtGarden.js";
+import Tip from "@/utils/tip.js";
 const districtGardenData = Object.freeze([
-    {
-        id: 1,
-        createTime: '2020-09-09',
-        name: '流程帅哥21321',
-        label: '中德智慧幼儿圆',
-        city: '河北省唐山市朝阳区似的县',
-        classCount: 10,
-        staffCount: 20,
-        studentCount: 30,
-        phone: 18811361102
-    },
-    {
-        id: 2,
-        createTime: '2020-09-09',
-        name: '流程帅哥',
-        label: '中德智慧幼儿圆',
-        city: '河北省唐山市朝阳区似的县',
-        classCount: 10,
-        staffCount: 20,
-        studentCount: 30,
-        phone: 18811361102
-    },
-    {
-        id: 3,
-        createTime: '2020-09-09',
-        name: '流程帅哥',
-        label: '中德智慧幼儿圆',
-        city: '河北省唐山市朝阳区似的县',
-        classCount: 10,
-        staffCount: 20,
-        studentCount: 30,
-        phone: 18811361102
-    },
-])
+  {
+    id: 1,
+    createTime: "2020-09-09",
+    name: "流程帅哥21321",
+    label: "中德智慧幼儿圆",
+    city: "河北省唐山市朝阳区似的县",
+    classCount: 10,
+    staffCount: 20,
+    studentCount: 30,
+    phone: 18811361102,
+  },
+  {
+    id: 2,
+    createTime: "2020-09-09",
+    name: "流程帅哥",
+    label: "中德智慧幼儿圆",
+    city: "河北省唐山市朝阳区似的县",
+    classCount: 10,
+    staffCount: 20,
+    studentCount: 30,
+    phone: 18811361102,
+  },
+  {
+    id: 3,
+    createTime: "2020-09-09",
+    name: "流程帅哥",
+    label: "中德智慧幼儿圆",
+    city: "河北省唐山市朝阳区似的县",
+    classCount: 10,
+    staffCount: 20,
+    studentCount: 30,
+    phone: 18811361102,
+  },
+]);
 export default {
-  name: 'DistrictGarden',
+  name: "DistrictGarden",
   components: {
-      CustomNavbar
+    CustomNavbar,
   },
   computed: {
-    scrollViewHeight  () {
-      return  this.$store.state.systemInfo.windowHeight - this.height - 44 + 'px'
-    }
+    scrollViewHeight() {
+      return (
+        this.$store.state.systemInfo.windowHeight - this.height - 44 + "px"
+      );
+    },
   },
 
-  onLoad (options) {
-      this.getNodeInfo()
-    
-      const { name } = options
-        console.log(name, 'namenamename');
-        if (name) {
-          this.pegation.name = name
-        }
-        this.getDistrictGarden()
+  onLoad(options) {
+    this.getNodeInfo();
+
+    const { name } = options;
+    console.log(name, "namenamename");
+    if (name) {
+      this.pegation.name = name;
+    }
+    this.getDistrictGarden();
   },
-  data () {
-      return {
-          districtGardenData: [],
-          height: '',
-          pegation: {
-              page: 1,
-              name: ''
-          }
-      }
+  data() {
+    return {
+      districtGardenData: [],
+      height: "",
+      pegation: {
+        page: 1,
+        name: "",
+      },
+    };
   },
   methods: {
-      scrolltolower (item) {
-          this.pegation.page ++
-          this.getDistrictGarden()
-      },
+    scrolltolower(item) {
+      this.pegation.page++;
+      this.getDistrictGarden();
+    },
     //   getDistrictGarden数据
-    async getDistrictGarden () {
-        Tip.loading('加载中')
-        const {data, status} = await getDistrictGarden({...this.pegation})
-        Tip.loaded()
-        // console.log('?????', data);
-        if (status === 200) {
-            const { entityList } = data
-            if (entityList.length === 0) {
-                this.pegation.page--
-                Tip.error('没有更多了')
-                return
-            }
-            this.districtGardenData.push(...Object.freeze(entityList))
+    async getDistrictGarden() {
+      Tip.loading("加载中");
+      const { data, status } = await getDistrictGarden({ ...this.pegation });
+      Tip.loaded();
+      // console.log('?????', data);
+      if (status === 200) {
+        const { entityList } = data;
+        if (entityList.length === 0) {
+          this.pegation.page--;
+          Tip.error("没有更多了");
+          return;
         }
+        this.districtGardenData.push(...Object.freeze(entityList));
+      }
     },
     // 跳转到search页面
-    jumpSearchPage () {
-        uni.navigateTo({
-            url: '/pages/search/index'
-        })
+    jumpSearchPage() {
+      uni.navigateTo({
+        url: "/pages/search/index",
+      });
     },
     //  获取节点高度
-    async getNodeInfo () {
-      const res =  await getNodeInfo('#custom-navbar', 'single')
-    
-      this.height = res.height
-    }
-  }
-}
+    async getNodeInfo() {
+      const res = await getNodeInfo("#custom-navbar", "single");
+
+      this.height = res.height;
+    },
+  },
+};
 </script>
 <style scoped lang="less">
 .DistrictGarden {
-    height: 100vh;
-    background: #F5F6FA;
-    .search {
-        width: 100%;
-        height: 102rpx;
-        background-color: #fff;
-        display: flex;
-        justify-content: center;
-        align-items: center;
-        &-btn {
-            width: 670rpx;
-            height: 70rpx;
-            background: #F7F7F7;
-            border-radius: 35rpx;
-            margin: 0 auto;
-            padding-left: 36rpx;
-            box-sizing: border-box;
-            font-size: 28rpx;
-            font-family: PingFangSC-Regular, PingFang SC;
-            font-weight: 400;
-            color: #999999;
-            line-height: 70rpx;
-        }
-    }
-    // 园所列表
-    .garden-list {
-         width: 686rpx;
-         margin: 0 auto;
-         padding-bottom: 200rpx;
+  height: 100vh;
+  background: #f5f6fa;
+  .search {
+    width: 100%;
+    height: 102rpx;
+    background-color: #fff;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    &-btn {
+      width: 670rpx;
+      height: 70rpx;
+      background: #f7f7f7;
+      border-radius: 35rpx;
+      margin: 0 auto;
+      padding-left: 36rpx;
+      box-sizing: border-box;
+      font-size: 28rpx;
+      font-family: PingFangSC-Regular, PingFang SC;
+      font-weight: 400;
+      color: #999999;
+      line-height: 70rpx;
     }
+  }
+  // 园所列表
+  .garden-list {
+    width: 686rpx;
+    margin: 0 auto;
+    padding-bottom: 200rpx;
+  }
 }
 
 .scroll-view {
-    
-    // -webkit-overflow-scrolling: touch;
+  // -webkit-overflow-scrolling: touch;
 }
-
-
 </style>

+ 20 - 22
src/pages/invitePage/index.vue

@@ -1,32 +1,30 @@
 <template>
   <view class="invite-page">
-      <web-view :src="URL" />
-      <!-- <web-view :src="`http://localhost:8081/#/agent?customParam=${customParam}`" /> -->
+    <web-view :src="URL"></web-view>
+    <!-- <web-view :src="`http://localhost:8081/#/agent?customParam=${customParam}`" /> -->
   </view>
 </template>
 
 <script>
 export default {
-    name: 'invite-page',
-    onLoad () {
-      const userInfo = uni.getStorageSync('userInfo')
-      console.log(userInfo, 'userInfouserInfo');
-      const customParam = encodeURIComponent(JSON.stringify(userInfo))
-      const timestamp = new Date().getTime()
-      this.URL = `https://api.zaojiao.net/agentQrcode/#/agent?customParam=${customParam}&timestamp=${timestamp}`
-      // this.URL = `http://localhost:8081/#/agent?customParam=${customParam}&timestamp=${timestamp}`
-    },
-    data () {
-      return {
-        URL: '',
-      }
-    },
-    methods: {
-
-    }
-}
+  name: "invite-page",
+  onLoad() {
+    const userInfo = uni.getStorageSync("userInfo");
+    console.log(userInfo, "userInfouserInfo");
+    const customParam = encodeURIComponent(JSON.stringify(userInfo));
+    const timestamp = new Date().getTime();
+    this.URL = `https://api.zaojiao.net/agentQrcode/#/agent?customParam=${customParam}&timestamp=${timestamp}`;
+    console.log(this.URL, "URL");
+    // this.URL = `http://localhost:8081/#/agent?customParam=${customParam}&timestamp=${timestamp}`
+  },
+  data() {
+    return {
+      URL: "",
+    };
+  },
+  methods: {},
+};
 </script>
 
-<style lang="scss" scoped>
-
+<style lang="less" scoped>
 </style>

+ 0 - 5
src/pages/user/index.vue

@@ -119,7 +119,6 @@
     </view>
 
     <!-- 邀请码弹出层 -->
-    <!-- class="overlay" -->
     <view
       class="overlay"
       v-show="inviteCodeOverlay"
@@ -195,13 +194,9 @@ export default {
       return this.$store.state.systemInfo.statusBarHeight;
     },
   },
-  onLoad() {},
   onReady() {},
   onShow() {
     this.waitCheckCount();
-    // if (uni.getStorageSync('userInfo')) {
-    // 	this.userInfo = uni.getStorageSync('userInfo')
-    // }
     this.getUserInfo();
   },
   data() {

BIN
src/static/competitionRegister/common/selectBtn.png


BIN
src/static/competitionRegister/index/allNoSelectBtn.png


BIN
src/static/competitionRegister/index/allSelectBtn.png


BIN
src/static/competitionRegister/index/noSelectBtn.png


BIN
src/static/competitionRegister/index/selectBtn.png


BIN
src/static/image/returnHome.png


+ 4 - 12
src/wxcomponents/image/index.vue

@@ -1,15 +1,7 @@
 <template>
 <uni-shadow-root class="image-index"><view :style="computed.rootStyle({ width, height, radius })" :class="'custom-class '+(utils.bem('image', { round }))" @click="onClick">
-  <image 
-    v-if="(!error)" 
-    :src="src" 
-    :mode="computed.mode(fit)" 
-    :lazy-load="lazyLoad" 
-    class="image-class van-image__img" 
-    :show-menu-by-longpress="showMenuByLongpress" 
-    @load="onLoad" 
-    @error="onError"
-  ></image>
+  <image v-if="(!error)" :src="src" :mode="computed.mode(fit)" :lazy-load="lazyLoad" class="image-class van-image__img" :show-menu-by-longpress="showMenuByLongpress" @load="onImageLoad" @error="onImageError"></image>
+
   <view v-if="loading && showLoading" class="loading-class van-image__loading">
     <slot v-if="useLoadingSlot" name="loading"></slot>
     <van-icon v-else name="photo" custom-class="van-image__loading-icon"></van-icon>
@@ -70,13 +62,13 @@ VantComponent({
     viewStyle: '',
   },
   methods: {
-    onLoad(event) {
+    onImageLoad(event) {
       this.setData({
         loading: false,
       });
       this.$emit('load', event.detail);
     },
-    onError(event) {
+    onImageError(event) {
       this.setData({
         loading: false,
         error: true,

+ 1 - 2
src/wxcomponents/notify/index.vue

@@ -1,5 +1,5 @@
 <template>
-<uni-shadow-root class="notify-index"><van-transition name="slide-down" :show="showNotify" custom-class="van-notify__container" :custom-style="computed.rootStyle({ zIndex, top })" @click.native="onTap">
+<uni-shadow-root class="notify-index"><van-transition name="slide-down" :show="show" custom-class="van-notify__container" :custom-style="computed.rootStyle({ zIndex, top })" @click.native="onTap">
   <view :class="'van-notify van-notify--'+(type)" :style="computed.notifyStyle({ background, color })">
     <view v-if="safeAreaInsetTop" :style="'height: '+(statusBarHeight)+'px'"></view>
     <text>{{ message }}</text>
@@ -30,7 +30,6 @@ VantComponent({
     duration: {
       type: Number,
       value: 3000,
-      
     },
     zIndex: {
       type: Number,