chen.cheng 10 months ago
parent
commit
913652fb1b

+ 5 - 0
common/EnumConst.js

@@ -154,3 +154,8 @@ export const TFC_INFO = {
     value: 3,
   },
 };
+
+export const FORM_MOD = {
+  add: 'add',
+  modify: 'mod',
+};

+ 26 - 3
components/RegistForm/index.vue

@@ -176,6 +176,7 @@
         >
           <u-radio
               v-for="way in tfcDic"
+              :key="way.value"
               :style="{
                   marginRight: '20rpx'
                 }"
@@ -216,6 +217,7 @@
         >
           <u-radio
               v-for="way in tfcDic"
+              :key="`dic_${way.value}`"
               :style="{
                   marginRight: '20rpx'
                 }"
@@ -252,9 +254,11 @@
         ></u--textarea>
       </u-form-item>
     </u--form>
+    <slot name="footer"></slot>
     <u-button
         type="primary"
         text="提交"
+        style="margin-top: 20px;"
         :disabled="loading"
         :loading="loading"
         loadingText="正在提交..."
@@ -281,6 +285,24 @@ export default {
       type: Function,
       default: function () {},
     },
+    registInfo: {
+      type: Object,
+      default: function () {
+        return {};
+      },
+    },
+  },
+  watch: {
+    registInfo: {
+      handler(newVal) {
+        if (newVal) {
+          debugger
+          this.model1.userInfo = newVal;
+          console.log(newVal);
+        }
+      },
+      immediate: true,
+    },
   },
   data() {
     return {
@@ -299,23 +321,24 @@ export default {
     };
   },
   created() {
-
+    this.initUser();
   },
   onLoad() {
-
   },
   onReady() {
     this.setFormRules();
   },
 
   methods: {
-    setFormRules() {
+    initUser() {
       const user = getUserInfo();
       if (user) {
         this.model1.userInfo.usrName = user.usrName;
         this.model1.userInfo.tel = user.tel;
       }
       this.init();
+    },
+    setFormRules() {
       //如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
       this.$refs.uForm.setRules(this.rules);
     },

+ 1 - 0
pasb/pages/myApply/index.vue

@@ -51,6 +51,7 @@ export default {
     };
   },
   onLoad() {
+    debugger
     this.$refs.authWrap.reloadPage();
     this.loadmore();
   },

+ 25 - 9
pasb/pages/regist/index.vue

@@ -2,7 +2,14 @@
   <view class="register-bg">
     <auth-wrap class="register-container" ref="authWrap">
       <view class="form-content" slot="content">
-        <RegistForm v-if="rules" :rules="rules" ref="registForm" @onSubmitHandle="onFormSubmit"></RegistForm>
+        <RegistForm
+            v-if="rules"
+            :rules="rules"
+            ref="registForm"
+            @onSubmitHandle="onFormSubmit"
+            :regist-info="model1.userInfo">
+
+        </RegistForm>
       </view>
     </auth-wrap>
   </view>
@@ -10,8 +17,8 @@
 
 <script>
 
-import { fetchUsrInfo, formCfg, putUsrRegist } from '@/common/api';
-import { ICON_CFG, MEETING_TYPE, USR_TYPE_LIST } from '@/common/EnumConst';
+import { fetchUsrApplyDetail, fetchUsrInfo, formCfg, putUsrRegist } from '@/common/api';
+import { FORM_MOD, ICON_CFG, MEETING_TYPE, USR_TYPE_LIST } from '@/common/EnumConst';
 import AuthWrap from '@/components/AuthComp/index.vue';
 import RegistForm from '@/components/RegistForm';
 import SingleDropList from '@/components/SingleDropList/index.vue';
@@ -48,7 +55,7 @@ export default {
   created() {
 
   },
-  async onLoad() {
+  async onLoad(res) {
     const { msg } = await formCfg('meet_form_cfg');
     if (msg) {
       const cfgJson = JSON.parse(msg);
@@ -62,6 +69,9 @@ export default {
     //如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
     this.$refs.authWrap.reloadPage();
     this.$refs.registForm?.setFormRules();
+    if (res.mode === FORM_MOD.modify) {
+      await this.getUsrMeetingInfo(res.apply);
+    }
   },
   onReady() {
 
@@ -80,17 +90,23 @@ export default {
         title: '报名完成',
         icon: 'success',
         success: async () => {
-          const user = getUserInfo();
-          const newUsr = await fetchUsrInfo(user.id);
-          if (newUsr.code === 200) {
-            setUserInfo(newUsr.data);
-          }
+          let pages = getCurrentPages();  //获取当前页面
+          let beforePage = pages[pages.length - 2];  //获取上一个页面的实例
+          //1、调用上一个页面onLoad
+          beforePage.onLoad();
           uni.navigateBack({
             delta: 1,
           });
         },
       });
     },
+    async getUsrMeetingInfo(id) {
+      const { data } = await fetchUsrApplyDetail(id);
+      if (!data) {
+        return;
+      }
+      this.model1.userInfo = data;
+    },
   },
 };
 </script>

+ 24 - 1
pasbrg/pages/regmeeting/index.vue

@@ -104,6 +104,7 @@
             text="重新申请"
             size="normal"
             type="primary"
+            @click="onRegistClick"
         ></u-button>
       </view>
     </view>
@@ -112,9 +113,10 @@
 
 <script>
 import { fetchMeetingTips, fetchUsrApplyDetail } from '@/common/api';
-import { MEETING_TYPE, REVIEW_STATUS, SYS_YES_NO, TFC_INFO, TFC_TYPE, USR_TYPE } from '@/common/EnumConst';
+import { FORM_MOD, MEETING_TYPE, REVIEW_STATUS, SYS_YES_NO, TFC_INFO, TFC_TYPE, USR_TYPE } from '@/common/EnumConst';
 import AuthWrap from '@/components/AuthComp/index.vue';
 import RichText from '@/components/RichText/index.vue';
+import { setStorageObj, storageKey } from '@/util';
 
 export default {
   name: 'content',
@@ -145,6 +147,11 @@ export default {
     this.getUsrMeetingInfo();
     this.getTips();
   },
+  onUnload() {
+    let pages = getCurrentPages();//获取所有界面栈的实例列表
+    let prePage = pages[pages.length - 2];//上一个界面的实例
+    prePage.onLoad();
+  },
   methods: {
     async getUsrMeetingInfo() {
       const { data } = await fetchUsrApplyDetail(this.queryParams.id);
@@ -164,6 +171,22 @@ export default {
       });
       this.tips = result;
     },
+    onRegistClick() {
+      if (this.meetingInfo.applyType == MEETING_TYPE.meeting.value) {
+        uni.navigateTo({
+          url: `/pasb/pages/regist/index?mode=${FORM_MOD.modify}&apply=${this.meetingInfo.id}`,
+        });
+        return;
+      }
+      setStorageObj(storageKey.regtheme, {
+        id: this.meetingInfo.contentId,
+        mode: 'mod',
+        apply: this.meetingInfo.id,
+      });
+      uni.navigateTo({
+        url: `/pasbrg/pages/regtheme/index?mode=${FORM_MOD.modify}&apply=${this.meetingInfo.id}`,
+      });
+    },
   },
 };
 </script>

+ 22 - 5
pasbrg/pages/regtheme/index.vue

@@ -7,7 +7,13 @@
     <rich-text :content="content"></rich-text>
     <u-popup :show="show" :round="5" mode="bottom" :closeOnClickOverlay="true" :overlay="true" @close="popClose">
       <view class="pop-form-content">
-        <RegistForm v-if="rules" :rules="rules" ref="registForm" @onSubmitHandle="onSubmit"></RegistForm>
+        <RegistForm
+            v-if="rules"
+            :rules="rules"
+            ref="registForm"
+            @onSubmitHandle="onSubmit"
+            :regist-info="model1.userInfo"
+        ></RegistForm>
       </view>
     </u-popup>
     <view class="regist-btn">
@@ -22,8 +28,8 @@
 </template>
 
 <script>
-import { fetchContentDetail, formCfg, putUsrRegist } from '@/common/api';
-import { CONTENT_TYPE, USR_TYPE_LIST } from '@/common/EnumConst';
+import { fetchContentDetail, fetchUsrApplyDetail, formCfg, putUsrRegist } from '@/common/api';
+import { CONTENT_TYPE, FORM_MOD, USR_TYPE_LIST } from '@/common/EnumConst';
 import RegistForm from '@/components/RegistForm';
 import RichText from '@/components/RichText/index.vue';
 import { authLogin, getStorageObj, storageKey } from '@/util';
@@ -79,6 +85,10 @@ export default {
         this.rules = cfgJson;
       }
       this.$refs.registForm?.setFormRules();
+      if (this.queryParams.mode === FORM_MOD.modify) {
+        this.getUsrMeetingInfo(this.queryParams.apply);
+        this.show = true;
+      }
     });
   },
   methods: {
@@ -130,10 +140,17 @@ export default {
     onRegistClick() {
       authLogin(async (usr) => {
         this.show = true;
-        this.$refs.registForm?.restForm();
-        this.$refs.registForm?.clearValidate();
+        // this.$refs.registForm?.restForm();
+        // this.$refs.registForm?.clearValidate();
       });
     },
+    async getUsrMeetingInfo(id) {
+      const { data } = await fetchUsrApplyDetail(id);
+      if (!data) {
+        return;
+      }
+      this.model1.userInfo = data;
+    },
   },
 };
 </script>

+ 44 - 165
pasbrg/pages/regtheme/mytheme.vue

@@ -14,112 +14,24 @@
       <rich-text :content="content"></rich-text>
       <u-popup :show="show" :round="5" mode="bottom" :closeOnClickOverlay="true" :overlay="true" @close="popClose">
         <view class="pop-form-content">
-          <u--form
-              labelPosition="left"
-              :model="model1"
+          <RegistForm
+              v-if="rules"
               :rules="rules"
-              ref="uForm"
-              @submit="onSubmit"
+              ref="registForm"
+              @onSubmitHandle="onFormSubmit"
+              :regist-info="model1.userInfo"
           >
-            <u-form-item
-                label="姓名"
-                prop="userInfo.usrName"
-                borderBottom
-            >
-              <u--input
-                  placeholder="输入姓名"
-                  v-model="model1.userInfo.usrName"
-                  border="none"
-              ></u--input>
-            </u-form-item>
-            <u-form-item
-                label="单位名称"
-                prop="userInfo.orgUnitName"
-                borderBottom
-            >
-              <u--input
-                  placeholder="输入单位名称"
-                  v-model="model1.userInfo.orgUnitName"
-                  border="none"
-              ></u--input>
-            </u-form-item>
-            <u-form-item
-                label="职务"
-                prop="userInfo.uniLevel"
-                borderBottom
-            >
-              <u--input
-                  placeholder="输入职务"
-                  v-model="model1.userInfo.uniLevel"
-                  border="none"
-              ></u--input>
-            </u-form-item>
-            <u-form-item
-                label="联系电话"
-                prop="userInfo.tel"
-                borderBottom
-            >
-              <u--input
-                  placeholder="输入联系电话"
-                  border="none"
-                  type="number"
-                  maxlength="11"
-                  v-model="model1.userInfo.tel"
-              ></u--input>
-            </u-form-item>
-            <u-form-item
-                label="邮箱"
-                prop="userInfo.email"
-                borderBottom
-            >
-              <u--input
-                  placeholder="输入邮箱"
-                  border="none"
-                  v-model="model1.userInfo.email"
-              ></u--input>
-            </u-form-item>
-            <u-form-item
-                label="人员类型"
-                prop="userInfo.usrType"
-                borderBottom
-            >
-              <u-radio-group
-                  v-model="model1.userInfo.usrType"
-                  placement="row"
-              >
-                <u-radio
-                    :style="{
-                  marginRight: '20rpx'
-                }"
-                    v-for="(item, index) in USR_TYPE_LIST"
-                    :key="index"
-                    :label="item.name"
-                    :name="item.value"
-                >
-                </u-radio>
-              </u-radio-group>
-            </u-form-item>
-          </u--form>
-          <view class="review-msg" v-if="REVIEW_STATUS.noPass.value === model1.userInfo.reviewState">
-            审核备注:{{ model1.userInfo.reviewMsg }}
-          </view>
-          <u-button
-              :style="{
-              marginTop: 'auto',
-             marginBottom: '80rpx'
-            }"
-              type="primary"
-              text="提交"
-              :disabled="loading"
-              :loading="loading"
-              loadingText="正在提交..."
-              @click="onSubmit"
-          >
-          </u-button>
+            <template v-slot:footer>
+              <view class="review-msg" v-if="REVIEW_STATUS.noPass.value === model1.userInfo.reviewState">
+                审核信息:{{ model1.userInfo.reviewMsg }}
+              </view>
+            </template>
+          </RegistForm>
         </view>
       </u-popup>
       <view class="regist-btn">
         <u-button
+            v-if="REVIEW_STATUS[model1.userInfo.reviewState]"
             :text="REVIEW_STATUS[model1.userInfo.reviewState].name"
             size="normal"
             type="primary"
@@ -141,12 +53,18 @@
 </template>
 
 <script>
-import { fetchUsrThemeMeetingInfo, putUsrRegist } from '@/common/api';
+import { fetchUsrThemeMeetingInfo, formCfg, putUsrRegist } from '@/common/api';
 import { CONTENT_TYPE, MEETING_TYPE, REVIEW_STATUS, USR_TYPE_LIST } from '@/common/EnumConst';
+import RegistForm from '@/components/RegistForm/index.vue';
 import RichText from '@/components/RichText/index.vue';
 import SingleDropList from '@/components/SingleDropList/index.vue';
 import { authLogin, getStorageObj, storageKey } from '@/util';
 
+const staticRules = {
+  'userInfo.email': {
+    pattern: /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/,
+  },
+};
 export default {
   name: 'content',
   computed: {
@@ -157,6 +75,7 @@ export default {
   components: {
     SingleDropList,
     RichText,
+    RegistForm,
   },
   props: {},
   data() {
@@ -178,79 +97,39 @@ export default {
           conferenceFlag: '1',
         },
       },
-      rules: {
-        'userInfo.usrName': {
-          type: 'string',
-          required: true,
-          message: '请填写姓名',
-          trigger: ['blur', 'change'],
-        },
-        'userInfo.tel': {
-          type: 'string',
-          len: 11,
-          required: true,
-          message: '请填写11位手机号',
-          trigger: ['blur', 'change'],
-        },
-        'userInfo.email': {
-          type: 'string',
-          required: true,
-          message: '请填写邮箱',
-          pattern: /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/,
-          trigger: ['blur', 'change'],
-        },
-        'userInfo.orgUnitName': {
-          type: 'string',
-          required: true,
-          message: '请填写单位名称',
-          trigger: ['blur', 'change'],
-        },
-        'userInfo.uniLevel': {
-          type: 'string',
-          required: true,
-          message: '请填写职务',
-          trigger: ['blur', 'change'],
-        },
-        'userInfo.usrType': {
-          type: 'string',
-          required: true,
-          message: '请填写人员类型',
-          trigger: ['blur', 'change'],
-        },
-      },
+      rules: null,
     };
   },
   created() {
   },
-  onLoad(res) {
+  async onLoad(res) {
     // 登录返回之后的页面
     this.queryParams = getStorageObj(storageKey.regtheme);
     this.getUsrContent();
+
+    const { msg } = await formCfg('theme_form_cfg');
+    if (msg) {
+      const cfgJson = JSON.parse(msg);
+      Object.keys(staticRules).forEach(item => {
+        if (!cfgJson[item]) {
+          Object.assign(cfgJson[item], staticRules[item]);
+        }
+      });
+      this.rules = cfgJson;
+    }
     //如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
-    this.$refs.uForm.setRules(this.rules);
+    this.$refs.registForm?.setFormRules();
   },
   methods: {
-    onSubmit() {
-      this.loading = true;
-      this.$refs.uForm.validate().then(async (res) => {
-        const { code } = await putUsrRegist({
-          ...this.model1.userInfo,
-          contentId: this.id,
-        }, this.queryParams.type);
-        this.loading = false;
-        if (code !== 200) {
-          return;
-        }
-        uni.showToast({
-          mask: true,
-          title: '报名完成',
-          icon: 'success',
-          success: async () => {
-            this.show = false;
-          },
-        });
-      }).catch(errors => {
-        this.loading = false;
+    async onFormSubmit(usrInfo) {
+      await putUsrRegist({
+        ...usrInfo,
+        contentId: this.id,
+      }, this.queryParams.type);
+      uni.showToast({
+        mask: true,
+        title: '报名完成',
+        icon: 'success',
       });
     },
     popClose() {
@@ -289,7 +168,7 @@ export default {
     onRegistClick() {
       authLogin(async (usr) => {
         this.show = true;
-        this.$refs.uForm.clearValidate();
+        this.$refs.registForm?.clearValidate();
       });
     },
     toRegistClick() {

+ 1 - 0
util/index.js

@@ -153,6 +153,7 @@ export const storageKey = {
   USER_INFO: 'userInfo',
   TOKEN: 'token',
   regtheme: 'regtheme',
+  regmeet: 'regmeet',
 };
 
 export const getUrlParams = (url) => {