liyongli 1 тиждень тому
батько
коміт
638bae6ad6
2 змінених файлів з 136 додано та 90 видалено
  1. 116 68
      src/view/fenghui/index.vue
  2. 20 22
      src/view/fenghui/lang.js

+ 116 - 68
src/view/fenghui/index.vue

@@ -33,19 +33,44 @@
                     <!-- 姓名 -->
                     <van-field label-width="7em" size="large"
                         :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].nameContent }]" required
-                        v-model="from.name" :label="lang[langType].name" :placeholder="lang[langType].nameContent" />
+                        v-model="from.name" :placeholder="lang[langType].nameContent">
+                        <template #label>
+                            <span v-html="lang[langType].name"></span>
+                        </template>
+                    </van-field>
 
                     <!-- 拼音 -->
                     <van-field label-width="7em" size="large"
                         :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].pinyinContent }]"
-                        v-model="from.pinyin" :label="lang[langType].pinyin" required
-                        :placeholder="lang[langType].pinyinContent" />
+                        v-model="from.pinyin" required :placeholder="lang[langType].pinyinContent">
+                        <template #label>
+                            <span v-html="lang[langType].pinyin"></span>
+                        </template>
+                    </van-field>
 
                     <!-- 性别 -->
                     <van-field label-width="7em" size="large"
                         :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].genderContent }]"
-                        v-model="from.gender" :label="lang[langType].gender" required
-                        :placeholder="lang[langType].genderContent" />
+                        v-model="from.gender" required :placeholder="lang[langType].genderContent">
+                        <template #label>
+                            <span v-html="lang[langType].gender"></span>
+                        </template>
+                    </van-field>
+
+                    <!-- 照片 -->
+                    <van-field label-width="7em" size="large" :placeholder="lang[langType].photoContent" required
+                        :rules="[{ required: true, trigger: 'onChange', message: lang[langType].photoContent }]"
+                        v-model="from.fileUrl">
+                        <template #label>
+                            <span v-html="lang[langType].photo"></span>
+                        </template>
+                        <template #input>
+                            <van-uploader :preview-full-image="false" accept="image/*" v-model="photo" :max-count="1"
+                                :max-size="524288000" @oversize="filesize" :after-read="beforeRead" result-type="file">
+                            </van-uploader>
+                            <p style="font-size: 12px;" v-text="lang[langType].photoSubContent"> </p>
+                        </template>
+                    </van-field>
 
                     <!-- 手机号 -->
                     <van-field label-width="7em" size="large"
@@ -56,24 +81,33 @@
                     <!-- 邮箱 -->
                     <van-field label-width="7em" size="large"
                         :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].emailContent }]" required
-                        v-model="from.email" :label="lang[langType].email" :placeholder="lang[langType].emailContent" />
-
-                    <!-- 工作单位 -->
-                    <van-field label-width="7em" size="large"
-                        :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].workUnit }]" required
-                        v-model="from.workUnit" :label="lang[langType].company"
-                        :placeholder="lang[langType].companyContent" />
+                        v-model="from.email" :placeholder="lang[langType].emailContent">
+                        <template #label>
+                            <span v-html="lang[langType].email"></span>
+                        </template>
+                    </van-field>
 
                     <!-- 生日 -->
                     <van-field label-width="7em" size="large"
                         :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].birthdayContent }]"
                         is-link readonly @click="showBirthday = true" v-model="from.birthday" required
-                        :label="lang[langType].birthday" :placeholder="lang[langType].birthdayContent" />
+                        :placeholder="lang[langType].birthdayContent">
+                        <template #label>
+                            <span v-html="lang[langType].birthday"></span>
+                        </template>
+                    </van-field>
                     <van-popup v-model:show="showBirthday" destroy-on-close round position="bottom">
                         <van-date-picker @confirm="packerConfirm" :title="lang[langType].birthday"
                             @cancal="showBirthday = false" :min-date="new Date(1970, 0, 1)" :max-date="new Date()" />
                     </van-popup>
 
+                    <!-- 工作单位 -->
+                    <van-field label-width="7em" size="large"
+                        :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].workUnit }]" required
+                        v-model="from.workUnit" :label="lang[langType].company"
+                        :placeholder="lang[langType].companyContent" />
+
+
                     <!-- 国家/地区 -->
                     <van-field label-width="7em" size="large"
                         :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].CountryOrRegionContent }]"
@@ -83,8 +117,11 @@
                     <!-- 省市 -->
                     <van-field label-width="7em" size="large"
                         :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].provinceCityContent }]"
-                        v-model="from.provinceCity" :label="lang[langType].provinceCity" required
-                        :placeholder="lang[langType].provinceCityContent" />
+                        v-model="from.provinceCity" required :placeholder="lang[langType].provinceCityContent">
+                        <template #label>
+                            <span v-html="lang[langType].provinceCity"></span>
+                        </template>
+                    </van-field>
 
                     <!-- 单位类型 -->
                     <van-field label-width="7em" size="large"
@@ -101,7 +138,11 @@
                     <!-- title 称谓 -->
                     <van-field label-width="7em" size="large" required
                         :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].titleContent }]"
-                        v-model="from.title" :label="lang[langType].title" :placeholder="lang[langType].titleContent" />
+                        v-model="from.title" :placeholder="lang[langType].titleContent">
+                        <template #label>
+                            <span v-html="lang[langType].title"></span>
+                        </template>
+                    </van-field>
 
                     <!-- otherTitle 其他称谓 -->
                     <van-field label-width="7em" size="large" required
@@ -116,12 +157,21 @@
                         :placeholder="lang[langType].chineseNameContent" />
 
                     <!-- 身份证 -->
-                    <van-field label-width="7em" size="large"
+                    <!-- <van-field label-width="7em" size="large"
                         :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].idCardContent }]"
                         v-model="from.idCard" :label="lang[langType].idCard" required
-                        :placeholder="lang[langType].idCardContent" />
+                        :placeholder="lang[langType].idCardContent" /> -->
+
+                    <!-- 证件类型 -->
+                    <van-field label-width="7em" size="large" v-model="from.cardTypeName" is-link readonly
+                        :label="lang[langType].conferenceType" :placeholder="lang[langType].conferenceTypeContent"
+                        @click="showCardType = true" required />
+                    <van-popup v-model:show="showCardType" destroy-on-close round position="bottom">
+                        <van-picker :model-value="from.cardType" :columns="cardTypeList" @cancel="showCardType = false"
+                            @confirm="onConfirm" />
+                    </van-popup>
 
-                    <!-- 护照 -->
+                    <!-- 证件 -->
                     <van-field label-width="7em" size="large"
                         :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].passportContent }]"
                         v-model="from.passport" :label="lang[langType].passport" required
@@ -140,16 +190,20 @@
                         :placeholder="lang[langType].diplomaticRankContent" />
 
                     <!-- 主要成就 -->
-                    <van-field label-width="7em" size="large" v-model="from.mainAchievements" rows="3" autosize
+                    <van-field label-width="7em" size="large" v-model="from.mainAchievements"
                         :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].mainAchievementsContent }]"
-                        :label="lang[langType].mainAchievements" type="textarea" required
+                        :label="lang[langType].mainAchievements" required
                         :placeholder="lang[langType].mainAchievementsContent" />
 
                     <!-- 职务 -->
-                    <van-field label-width="7em" size="large" v-model="from.career" :label="lang[langType].career"
+                    <van-field label-width="7em" size="large" v-model="from.career"
                         :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].careerContent }]" required
-                        :placeholder="lang[langType].careerContent" />
-
+                        :placeholder="lang[langType].careerContent">
+                        <template #label>
+                            <span v-html="lang[langType].career"></span>
+                        </template>
+                    </van-field>
+                    <div style="background-color: #F7F7F7;height: 10px;"></div>
                     <!-- 固话 -->
                     <van-field label-width="7em" size="large"
                         :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].fixedLineContent }]"
@@ -159,8 +213,11 @@
                     <!-- 传真 -->
                     <van-field label-width="7em" size="large"
                         :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].faxContent }]"
-                        v-model="from.fax" :label="lang[langType].fax" type="number" required
-                        :placeholder="lang[langType].faxContent" />
+                        v-model="from.fax" type="number" required :placeholder="lang[langType].faxContent">
+                        <template #label>
+                            <span v-html="lang[langType].fax"></span>
+                        </template>
+                    </van-field>
 
                     <!-- 办公地址 -->
                     <van-field label-width="7em" size="large" v-model="from.officeAddress" rows="3" autosize required
@@ -168,24 +225,18 @@
                         :label="lang[langType].officeAddress" type="textarea"
                         :placeholder="lang[langType].officeAddressContent" />
 
-                    <!-- 照片 -->
-                    <van-field label-width="7em" size="large" :placeholder="lang[langType].photoContent" required
-                        :rules="[{ required: true, trigger: 'onChange', message: lang[langType].photoContent }]"
-                        v-model="from.fileUrl" :label="lang[langType].photo">
-                        <template #input>
-                            <van-uploader :preview-full-image="false" accept="image/*" v-model="photo" :max-count="1"
-                                :max-size="524288000" @oversize="filesize" :after-read="beforeRead" result-type="file">
-                            </van-uploader>
-                            <p style="font-size: 12px;" v-text="lang[langType].photoSubContent"> </p>
-                        </template>
-                    </van-field>
-
                     <!-- 饮食要求 -->
                     <van-field label-width="7em" size="large" v-model="from.catering" rows="3" autosize
                         :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].cateringContent }]"
                         :label="lang[langType].catering" type="textarea" required
                         :placeholder="lang[langType].cateringContent" />
 
+                    <!-- 过敏源 -->
+                    <van-field label-width="7em" size="large" v-model="from.allergen" rows="3" autosize
+                        :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].allergenContent }]"
+                        :label="lang[langType].allergen" type="textarea" required
+                        :placeholder="lang[langType].allergenContent" />
+
                     <!-- 紧急联系人 -->
                     <van-field label-width="7em" size="large" v-model="from.emergencyContact"
                         :rules="[{ required: true, trigger: 'onBlur', message: lang[langType].emergencyContactContent }]"
@@ -214,6 +265,7 @@
                     <!-- 媒体类别 -->
                     <van-field label-width="7em" size="large" v-model="from.media" :label="lang[langType].media"
                         :placeholder="lang[langType].mediaContent" />
+                    <div style="background-color: #F7F7F7;height: 10px;"></div>
 
                     <!-- 抵达中国航班 -->
                     <van-field label-width="7em" size="large" v-model="from.flight" :label="lang[langType].flight"
@@ -314,13 +366,6 @@
                     </van-popup>
                     <!-- <br /> -->
                     <!-- <h4 class="title" v-text="lang[langType].conference"></h4> -->
-                    <!-- <van-field label-width="7em" size="large" v-model="from.cardTypeName" is-link readonly
-                        :label="lang[langType].conferenceType" :placeholder="lang[langType].conferenceTypeContent"
-                        @click="showCardType = true" /> -->
-                    <!-- <van-popup v-model:show="showCardType" destroy-on-close round position="bottom">
-                        <van-picker :model-value="from.cardType" :columns="cardTypeList" @cancel="showCardType = false"
-                            @confirm="onConfirm" />
-                    </van-popup> -->
                     <!-- <br /> -->
                     <!-- <h4 class="title" v-text="lang[langType].orther"></h4> -->
                     <van-field label-width="7em" size="large" v-model="from.message" rows="3" autosize
@@ -345,14 +390,14 @@ import axios from 'axios';
 import config from '@/config/index.js';
 import soundbyteJpg from '../../assets/img/2025lameifenghui.png';
 
-import { getJoinType, saveData } from '@/api/2025.js';
+import { saveData } from '@/api/2025.js';
 
 import langpkg from './lang.js';
 
 let arrivalTime = []
 const dateTimeColumns = computed(() => {
     const now = new Date();
-    const years = Array.from({ length: now.getFullYear() - 1970 }, (_, i) => {
+    const years = Array.from({ length: Number(now.getFullYear()) + 1 - 1970 }, (_, i) => {
         const t = 1970 + i + ''
         return {
             text: t,
@@ -423,7 +468,7 @@ const langObjT = {
 const lang = ref(langpkg);
 const langType = ref(localStorage.getItem('langType') || 'zh');
 // const showLange = ref(false);
-// const showCardType = ref(false);
+const showCardType = ref(false);
 const showArrivalTime = ref(false);
 const showTransferTime = ref(false);
 const showReachTime = ref(false);
@@ -433,9 +478,14 @@ const showCheckInTime = ref(false);
 const showCheckOutTime = ref(false);
 
 // 展示表单
-const showForm = ref(false);
-
-const cardTypeList = ref([])
+const showForm = ref(true);
+
+const cardTypeList = ref([
+    { text: '身份证', value: '1' },
+    { text: '护照', value: '2' },
+    { text: '港澳居民通行证', value: '3' },
+    { text: '台湾居民通行证', value: '4' },
+])
 const photo = ref([])
 const isFile = () => {
     return photo.value && photo.value.length;
@@ -461,14 +511,14 @@ const from = reactive({
 
 onBeforeUpdate(() => { });
 
-getJoinType().then((res) => {
-    cardTypeList.value = res.map((item) => {
-        return {
-            text: item.dictLabel,
-            value: item.dictValue,
-        }
-    })
-})
+// getJoinType().then((res) => {
+//     cardTypeList.value = res.map((item) => {
+//         return {
+//             text: item.dictLabel,
+//             value: item.dictValue,
+//         }
+//     })
+// })
 
 const filesize = () => showToast(lang.value[langType.value].fileSize);
 
@@ -501,13 +551,12 @@ const checkOutTimeConfirm = ({ selectedValues }) => {
     showCheckOutTime.value = false;
     from.checkOutTime = selectedValues.slice(0, 3).join('-') + ' ' + selectedValues.slice(3).join(':');
 }
-
 // 选择证件类型
-// const onConfirm = ({ selectedValues, selectedOptions }) => {
-//     showCardType.value = false;
-//     from.cardType = selectedValues;
-//     from.cardTypeName = selectedOptions[0].text;
-// };
+const onConfirm = ({ selectedValues, selectedOptions }) => {
+    showCardType.value = false;
+    from.cardType = selectedValues;
+    from.cardTypeName = selectedOptions[0].text;
+};
 
 const beforeRead = () => {
     if (!isFile()) showToast(lang.value[langType.value].changePhono);
@@ -545,8 +594,6 @@ const onSubmit = () => {
         showForm.value = true;
         return;
     }
-
-
     if (!isFile()) showToast(lang.value[langType.value].selectFile);
     saveData({
         name: from.name,
@@ -595,7 +642,8 @@ const onSubmit = () => {
         departureTime: from.leavingTime,
         checkInTime: from.checkInTime,
         checkOutTime: from.checkOutTime,
-        remarks: from.message
+        remarks: from.message,
+        cardType: from.cardType,
     }).then(() => {
         showToast(lang.value[langType.value].registration);
         // 清空表单内容 from

+ 20 - 22
src/view/fenghui/lang.js

@@ -13,32 +13,32 @@ export default {
         "scale": "活动规模",
         "scaleContent": "拟邀请中国及拉美和加勒⽐国家政府部门代表、驻华使节,国际组织、⽹信企业、智库、媒体及机构代表等,论坛参会论坛规模约300⼈。其中外宾约150⼈,包含拉美国家⽹络安全研修班30余名外籍学员。",
         "basicInformation": "个人基本信息",
-        "name": "姓名",
+        "name": "姓&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;名",
         "nameContent": "请输入姓名(中英文名称,必填)",
         "idCard": "身份证",
         "idCardContent": "请输入身份证",
-        "career": "职务",
+        "career": "职&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;务",
         "careerContent": "请输入职务",
-        "contact": "手机号",
+        "contact": "手机号",
         "contactContent": "请输入手机号",
-        "company": "单位/机构",
-        "companyContent": "请输入单位/机构",
-        "photo": "照片",
+        "company": "工作单位",
+        "companyContent": "请输入工作单位",
+        "photo": "照&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;片",
         "photoContent": "请选择照片",
         "photoSubContent": "支持上传jpg,png等格式的图片,大小100M以内",
         "conference": "参会信息",
-        "conferenceType": "参会类型",
-        "conferenceTypeContent": "请选择参会类型",
+        "conferenceType": "证件类型",
+        "conferenceTypeContent": "请选择证件类型",
         "unitType": "单位类型",
         "unitTypeContent": "请选择单位类型",
         "jobLevel": "职务级别",
         "jobLevelContent": "请选择职务级别",
         "otherTitle": "其他称谓",
         "otherTitleContent": "请输入其他称谓",
-        "chineseName": "中文名",
+        "chineseName": "中文名",
         "chineseNameContent": "请输入中文名",
         "orther": "其他材料",
-        "ortherNotes": "备注",
+        "ortherNotes": "备&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注",
         "ortherNotesContent": "特殊需求",
         "submit": "提交申请",
         "copyright": "由陕西广电融媒体集团技术研究院提供计算服务",
@@ -49,25 +49,25 @@ export default {
         "selectFile": "请选择照片",
         "registration": "报名成功",
         "registrationError": "报名失败",
-
-        
-        "pinyin": "拼音",
+        "pinyin": "拼&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;音",
         "pinyinContent": "请输入拼音",
-        "gender": "性别",
+        "gender": "性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;别",
         "genderContent": "请输入性别",
-        "email": "邮箱",
+        "email": "邮&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;箱",
         "emailContent": "请输入邮箱",
-        "birthday": "生日",
+        "birthday": "生日",
         "birthdayContent": "请输入生日",
         "CountryOrRegion": "国家/地区",
         "CountryOrRegionContent": "请输入国家/地区",
-        "provinceCity": "省市",
+        "provinceCity": "省&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;市",
         "provinceCityContent": "请输入省市",
         "passportContent": "证件号码不能为空",
-        "passport": "护照号码/港澳居民通行证号码/台湾居民通行证号码",
+        "passport": "证件号码",
         "belief": "宗教信仰",
         "beliefContent": "请输入宗教信仰",
-        "title": "称谓",
+        "cardTyep": "证件类型",
+        "cardTyepContent": "请选择证件类型",
+        "title": "称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;谓",
         "titleContent": "请输入称谓",
         "diplomaticRank": "外交职衔 ",
         "diplomaticRankContent": "请输入外交职衔",
@@ -75,7 +75,7 @@ export default {
         "mainAchievementsContent": "请输入主要成就",
         "fixedLine": "固定电话",
         "fixedLineContent": "请输入固定电话",
-        "fax": "传真",
+        "fax": "传&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;真",
         "faxContent": "请输入传真",
         "officeAddress": "办公地址",
         "officeAddressContent": "请输入办公地址",
@@ -151,8 +151,6 @@ export default {
         "photoContent": "Upload photo",
         "photoSubContent": "Supports JPG/PNG (max 100MB)",
         "conference": "Conference Info",
-        "conferenceType": "Participation Type",
-        "conferenceTypeContent": "Select participation type",
         "orther": "Other Materials",
         "ortherNotes": "Notes",
         "ortherNotesContent": "Special requests",