Browse Source

* 增加报名信息

chen.cheng 10 months ago
parent
commit
fa79688703
4 changed files with 276 additions and 217 deletions
  1. 4 0
      common/api.js
  2. 2 2
      package.json
  3. 258 0
      pasb/pages/regist/RegistForm.vue
  4. 12 215
      pasb/pages/regist/index.vue

+ 4 - 0
common/api.js

@@ -129,3 +129,7 @@ export const formCfg = (key) => {
   return http.get(
     `/system/config/configKey/${key}`);
 };
+
+export function getDicts(dictType) {
+  return http.get(`/system/dict/data/type/${dictType}`);
+}

+ 2 - 2
package.json

@@ -38,8 +38,8 @@
 				"title": "微信开发版",
 				"env": {
 					"UNI_PLATFORM": "mp-weixin",
-					"UNI_FILE_PREFIX": "http://172.192.13.80:18080/tfc",
-					"UNI_API_PREFIX": "http://172.192.13.80:18080/tfc"
+					"UNI_FILE_PREFIX": "http://127.0.0.1:18080/tfc",
+					"UNI_API_PREFIX": "http://127.0.0.1:18080/tfc"
 				},
 				"define": {
 					"MP-WEIXIN": true

+ 258 - 0
pasb/pages/regist/RegistForm.vue

@@ -0,0 +1,258 @@
+<template>
+  <view>
+    <u--form
+        labelPosition="left"
+        :model="model1"
+        :rules="rules"
+        ref="uForm"
+        @submit="onSubmit"
+    >
+      <u-form-item
+          label="姓名"
+          prop="userInfo.usrName"
+          borderBottom
+          :class="{
+                'require': rules['userInfo.usrName'].required
+              }"
+      >
+        <u--input
+            placeholder="输入姓名"
+            v-model="model1.userInfo.usrName"
+            border="none"
+        ></u--input>
+      </u-form-item>
+      <u-form-item
+          label="单位名称"
+          prop="userInfo.orgUnitName"
+          borderBottom
+          class="require"
+      >
+        <u--input
+            placeholder="输入单位名称"
+            v-model="model1.userInfo.orgUnitName"
+            border="none"
+        ></u--input>
+      </u-form-item>
+      <u-form-item
+          label="职务"
+          prop="userInfo.uniLevel"
+          borderBottom
+          class="require"
+      >
+        <u--input
+            placeholder="输入职务"
+            v-model="model1.userInfo.uniLevel"
+            border="none"
+        ></u--input>
+      </u-form-item>
+      <u-form-item
+          label="联系电话"
+          prop="userInfo.tel"
+          borderBottom
+          class="require"
+      >
+        <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-item
+          label="是否参加现场调研"
+          prop="userInfo.conferenceFlag"
+          borderBottom
+      >
+        <u-radio-group
+            v-model="model1.userInfo.conferenceFlag"
+            placement="row"
+        >
+          <u-radio
+              :style="{
+                  marginRight: '20rpx'
+                }"
+              label="是"
+              name="0"
+          >
+          </u-radio>
+          <u-radio
+              :style="{
+                  marginRight: '20rpx'
+                }"
+              label="否"
+              name="1"
+          >
+          </u-radio>
+        </u-radio-group>
+      </u-form-item>
+      <u-form-item
+          label="调研会场"
+          prop="userInfo.contentId"
+          borderBottom
+          v-if="model1.userInfo.conferenceFlag === '0'"
+      >
+        <SingleDropList
+            :style="{
+                marginLeft: '20rpx'
+              }"
+            :defaultValue="model1.userInfo.contentId"
+            :src="conferenceHall"
+            placeholder="请选择会场"
+            @onChange="conferenceSelect"
+        >
+        </SingleDropList>
+      </u-form-item>
+    </u--form>
+    <u-button
+        :style="{
+             marginTop: '120rpx'
+            }"
+        type="primary"
+        text="提交"
+        :disabled="loading"
+        :loading="loading"
+        loadingText="正在提交..."
+        @click="onSubmit"
+    >
+    </u-button>
+  </view>
+</template>
+
+<script>
+
+import { fetchContentInfo, fetchUsrInfo, getDicts, putUsrRegist } from '@/common/api';
+import { CONTENT_TYPE, MEETING_TYPE, USR_TYPE_LIST } from '@/common/EnumConst';
+import SingleDropList from '@/components/SingleDropList/index.vue';
+import { getImageUrl, getUserInfo, setUserInfo } from '@/util';
+
+export default {
+  components: {
+    SingleDropList,
+  },
+  props: {
+    rules: {},
+  },
+  data() {
+    return {
+      USR_TYPE_LIST,
+      loading: false,
+      model1: {
+        userInfo: {
+          usrName: '',
+          conferenceFlag: '1',
+        },
+      },
+      conferenceHall: [],
+    };
+  },
+  created() {
+
+  },
+  onLoad() {
+
+  },
+  onReady() {
+    this.setFormRules();
+  },
+
+  methods: {
+    setFormRules() {
+      const user = getUserInfo();
+      if (user) {
+        this.model1.userInfo.usrName = user.usrName;
+        this.model1.userInfo.tel = user.tel;
+      }
+      this.init();
+      //如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
+      this.$refs.uForm.setRules(this.rules);
+    },
+    getImageUrl,
+    conferenceSelect(item) {
+      this.model1.userInfo.contentId = item.value;
+      this.$refs.uForm.clearValidate('userInfo.contentId');
+    },
+    async init() {
+      const {
+        code: conferenceCode,
+        rows: conferenceData,
+      } = await fetchContentInfo({
+        pageNum: 1,
+        pageSize: 99,
+        contentType: CONTENT_TYPE.conference,
+        title: this.keyword,
+      });
+      this.conferenceHall = conferenceData.map(item => {
+        return {
+          name: item.title,
+          value: item.id,
+        };
+      });
+      const { msg } = await getDicts('tfc_type');
+    },
+    onSubmit() {
+      this.loading = true;
+      this.$refs.uForm.validate().then(async (res) => {
+        const { code } = await putUsrRegist(this.model1.userInfo, MEETING_TYPE.meeting.value);
+        this.loading = false;
+        if (code !== 200) {
+          return;
+        }
+        uni.showToast({
+          mask: true,
+          title: '报名完成',
+          icon: 'success',
+          success: async () => {
+            const user = getUserInfo();
+            const newUsr = await fetchUsrInfo(user.id);
+            if (newUsr.code === 200) {
+              setUserInfo(newUsr.data);
+            }
+            uni.navigateBack({
+              delta: 1,
+            });
+          },
+        });
+      }).catch(errors => {
+        this.loading = false;
+      });
+    },
+    hideKeyboard() {
+      uni.hideKeyboard();
+    },
+  },
+};
+</script>
+<style lang="scss" src="./index.scss" />;

+ 12 - 215
pasb/pages/regist/index.vue

@@ -5,152 +5,7 @@
     </view>
     <auth-wrap class="register-container" ref="authWrap">
       <view class="form-content" slot="content">
-        <u--form
-            labelPosition="left"
-            :model="model1"
-            :rules="rules"
-            ref="uForm"
-            @submit="onSubmit"
-        >
-          <u-form-item
-              label="姓名"
-              prop="userInfo.usrName"
-              borderBottom
-              class="require"
-          >
-            <u--input
-                placeholder="输入姓名"
-                v-model="model1.userInfo.usrName"
-                border="none"
-            ></u--input>
-          </u-form-item>
-          <u-form-item
-              label="单位名称"
-              prop="userInfo.orgUnitName"
-              borderBottom
-              class="require"
-          >
-            <u--input
-                placeholder="输入单位名称"
-                v-model="model1.userInfo.orgUnitName"
-                border="none"
-            ></u--input>
-          </u-form-item>
-          <u-form-item
-              label="职务"
-              prop="userInfo.uniLevel"
-              borderBottom
-              class="require"
-          >
-            <u--input
-                placeholder="输入职务"
-                v-model="model1.userInfo.uniLevel"
-                border="none"
-            ></u--input>
-          </u-form-item>
-          <u-form-item
-              label="联系电话"
-              prop="userInfo.tel"
-              borderBottom
-              class="require"
-          >
-            <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-item
-              label="是否参加现场调研"
-              prop="userInfo.conferenceFlag"
-              borderBottom
-          >
-            <u-radio-group
-                v-model="model1.userInfo.conferenceFlag"
-                placement="row"
-            >
-              <u-radio
-                  :style="{
-                  marginRight: '20rpx'
-                }"
-                  label="是"
-                  name="0"
-              >
-              </u-radio>
-              <u-radio
-                  :style="{
-                  marginRight: '20rpx'
-                }"
-                  label="否"
-                  name="1"
-              >
-              </u-radio>
-            </u-radio-group>
-          </u-form-item>
-          <u-form-item
-              label="调研会场"
-              prop="userInfo.contentId"
-              borderBottom
-              v-if="model1.userInfo.conferenceFlag === '0'"
-          >
-            <SingleDropList
-                :style="{
-                marginLeft: '20rpx'
-              }"
-                :defaultValue="model1.userInfo.contentId"
-                :src="conferenceHall"
-                placeholder="请选择会场"
-                @onChange="conferenceSelect"
-            >
-            </SingleDropList>
-          </u-form-item>
-        </u--form>
-        <u-button
-            :style="{
-             marginTop: '120rpx'
-            }"
-            type="primary"
-            text="提交"
-            :disabled="loading"
-            :loading="loading"
-            loadingText="正在提交..."
-            @click="onSubmit"
-        >
-        </u-button>
+        <RegistForm v-if="rules" :rules="rules" ref="registForm"></RegistForm>
       </view>
     </auth-wrap>
   </view>
@@ -158,11 +13,11 @@
 
 <script>
 
-import { fetchContentInfo, fetchUsrInfo, formCfg, putUsrRegist } from '@/common/api';
-import { CONTENT_TYPE, ICON_CFG, MEETING_TYPE, USR_TYPE_LIST } from '@/common/EnumConst';
+import { formCfg } from '@/common/api';
+import { ICON_CFG, USR_TYPE_LIST } from '@/common/EnumConst';
 import AuthWrap from '@/components/AuthComp/index.vue';
 import SingleDropList from '@/components/SingleDropList/index.vue';
-import { getImageUrl, getUserInfo, setUserInfo } from '@/util';
+import RegistForm from '@/pasb/pages/regist/RegistForm.vue';
 
 const staticRules = {
   'userInfo.email': {
@@ -172,6 +27,7 @@ const staticRules = {
 export default {
   name: 'login',
   components: {
+    RegistForm,
     AuthWrap,
     SingleDropList,
   },
@@ -188,88 +44,29 @@ export default {
           conferenceFlag: '1',
         },
       },
-      conferenceHall: [],
-      tripList: [],
-      rules: {},
+      rules: null,
     };
   },
   created() {
 
   },
-  onLoad() {
-    formCfg('meet_form_cfg').then(res => {
-      if (res.data.cfgJson) {
-        const cfgJson = JSON.parse(res.data.cfgJson);
+  async onLoad() {
+    const { msg } = await formCfg('meet_form_cfg');
+    if (msg) {
+      const cfgJson = JSON.parse(msg);
         Object.keys(staticRules).forEach(item => {
           Object.assign(cfgJson[item], staticRules[item]);
         });
         this.rules = cfgJson;
-        this.$refs.uForm.setRules(this.rules);
       }
-    });
     //如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
     this.$refs.authWrap.reloadPage();
-    const user = getUserInfo();
-    if (user) {
-      this.model1.userInfo.usrName = user.usrName;
-      this.model1.userInfo.tel = user.tel;
-    }
-    this.init();
+    this.$refs.registForm?.setFormRules();
   },
   onReady() {
-    //如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
-    this.$refs.uForm.setRules(this.rules);
+
   },
   methods: {
-    getImageUrl,
-    conferenceSelect(item) {
-      this.model1.userInfo.contentId = item.value;
-      this.$refs.uForm.clearValidate('userInfo.contentId');
-    },
-    async init() {
-      const {
-        code: conferenceCode,
-        rows: conferenceData,
-      } = await fetchContentInfo({
-        pageNum: 1,
-        pageSize: 99,
-        contentType: CONTENT_TYPE.conference,
-        title: this.keyword,
-      });
-      this.conferenceHall = conferenceData.map(item => {
-        return {
-          name: item.title,
-          value: item.id,
-        };
-      });
-    },
-    onSubmit() {
-      this.loading = true;
-      this.$refs.uForm.validate().then(async (res) => {
-        const { code } = await putUsrRegist(this.model1.userInfo, MEETING_TYPE.meeting.value);
-        this.loading = false;
-        if (code !== 200) {
-          return;
-        }
-        uni.showToast({
-          mask: true,
-          title: '报名完成',
-          icon: 'success',
-          success: async () => {
-            const user = getUserInfo();
-            const newUsr = await fetchUsrInfo(user.id);
-            if (newUsr.code === 200) {
-              setUserInfo(newUsr.data);
-            }
-            uni.navigateBack({
-              delta: 1,
-            });
-          },
-        });
-      }).catch(errors => {
-        this.loading = false;
-      });
-    },
     hideKeyboard() {
       uni.hideKeyboard();
     },