baoMing2.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938
  1. <!--
  2. 临时页面
  3. -->
  4. <template>
  5. <view class="box">
  6. <u-navbar :autoBack="true" title="志愿报名" bgColor="rgba(255,255,255,0)" :placeholder="true" titleStyle="font-weight:bold;color:#000000"></u-navbar>
  7. <view class="ban_box">
  8. <view class="ban_item2">
  9. <image class="top_img" src="https://huli-app.wenlvti.net/app_static/WenWuGuanJia/image/bm_top.png"></image>
  10. </view>
  11. <view class="ban_item1">
  12. <image class="top_img" src="https://huli-app.wenlvti.net/app_static/WenWuGuanJia/image/dt_ban2.png"></image>
  13. </view>
  14. </view>
  15. <!-- 表单 -->
  16. <view class="example">
  17. <uni-forms style="padding: 0 20rpx 0 20rpx" label-position="top" ref="valiForm" :rules="rules" :modelValue="valiFormData">
  18. <uni-forms-item v-if="shouldShowCrSelector" label="服务区域" label-width="100px" required>
  19. <view v-if="isDistrictEntry" class="service-area-trigger" @click="openServiceAreaPicker">
  20. <text :class="selectedServiceAreaTitle ? 'service-area-value' : 'service-area-placeholder'">
  21. {{ selectedServiceAreaTitle || `请选择服务区域` }}
  22. </text>
  23. <uni-icons type="bottom" size="16" color="#6a412c"></uni-icons>
  24. </view>
  25. <view v-else class="service-area-readonly">
  26. {{ selectedServiceAreaTitle || '暂无文物信息' }}
  27. </view>
  28. </uni-forms-item>
  29. <uni-forms-item label="您的姓名" label-width="80px" required name="name">
  30. <uni-easyinput v-model="valiFormData.name" placeholder="请输入姓名" />
  31. </uni-forms-item>
  32. <uni-forms-item label="您的联系电话" label-width="100px" required name="mobile">
  33. <uni-easyinput type="number" v-model="valiFormData.mobile" placeholder="请输入联系电话" />
  34. </uni-forms-item>
  35. <uni-forms-item label="您的身份证" label-width="100px" required name="id_card">
  36. <uni-easyinput type="idcard" v-model="valiFormData.id_card" placeholder="请输入身份证号" />
  37. </uni-forms-item>
  38. <uni-forms-item label="住址" label-width="100px" required name="address">
  39. <uni-easyinput v-model="valiFormData.address" placeholder="请输入住址" />
  40. </uni-forms-item>
  41. <uni-forms-item label="单位" label-width="80px" required name="unit_name">
  42. <uni-easyinput v-model="valiFormData.unit_name" placeholder="请输入单位名称" />
  43. </uni-forms-item>
  44. <!-- <uni-forms-item label="备注" label-width="80px" required name="notesVal">
  45. <uni-easyinput v-model="valiFormData.notesVal" placeholder="请输入申请类型(个人、家庭、机构)" />
  46. </uni-forms-item> -->
  47. <uni-forms-item label="相关特长" label-width="80px" required name="intro">
  48. <uni-easyinput type="textarea" v-model="valiFormData.intro" placeholder="请输入相关特长或个人介绍(可上传个人优秀证明、奖项)" />
  49. <view @click="chooseFile" class="scfj">
  50. <view>上传文件</view>
  51. <view>
  52. <uni-icons type="wallet" size="18"></uni-icons>
  53. </view>
  54. </view>
  55. </uni-forms-item>
  56. <!-- 政治面貌 -->
  57. <uni-forms-item label="政治面貌" label-width="100px" required name="political_status">
  58. <uni-data-select v-model="valiFormData.political_status" :localdata="politicalStatusList" placeholder="请选择政治面貌" />
  59. </uni-forms-item>
  60. <!-- 联系邮箱 -->
  61. <uni-forms-item label="联系邮箱" label-width="100px" name="email">
  62. <uni-easyinput type="email" v-model="valiFormData.email" placeholder="请输入联系邮箱" />
  63. </uni-forms-item>
  64. <uni-forms-item label="您的选择" label-width="100px" required v-if="valiFormData.type === 'volunteer'">
  65. <uni-data-picker v-model="region_id" :localdata="regionList" placeholder="请选择地区" popup-title="请选择所在地区" @change="onchange" @nodeclick="onnodeclick"></uni-data-picker>
  66. </uni-forms-item>
  67. <!-- 本人承诺 -->
  68. <uni-forms-item label="本人承诺" label-width="100px" required name="commitment" >
  69. <view class="commitment-text">
  70. 本人保证以上所填信息真实、有效,如有虚假,由此产生的一切后果由本人承担。
  71. </view>
  72. <view style="background-color: #fdfaf6;">
  73. <uni-data-checkbox v-model="valiFormData.commitment" :localdata="[
  74. {value: 1, text: '我已阅读并同意以上承诺'},
  75. {value: 0, text: '不同意'}
  76. ]" />
  77. </view>
  78. </uni-forms-item>
  79. </uni-forms>
  80. </view>
  81. <view class="text-wrapper_3" @click="submit('valiForm')">
  82. <view class="bm_tit">报名</view>
  83. </view>
  84. <u-picker
  85. keyName="title"
  86. :show="showServiceAreaPicker"
  87. :columns="serviceAreaColumns"
  88. :defaultIndex="serviceAreaDefaultIndex"
  89. @cancel="showServiceAreaPicker = false"
  90. @close="closeServiceAreaPicker"
  91. :closeOnClickOverlay="true"
  92. @confirm="confirmServiceArea"
  93. ></u-picker>
  94. <!-- 对话框 -->
  95. <uni-popup ref="popup" type="center">
  96. <view class="modal-container">
  97. <text class="modal-title">{{ modalTitle }}</text>
  98. <view class="modal-content">
  99. <u-parse :content="modalContent"></u-parse>
  100. </view>
  101. <view class="modal-footer">
  102. <view class="modal-btn" @click="$refs.popup.close()">关闭</view>
  103. </view>
  104. </view>
  105. </uni-popup>
  106. </view>
  107. </template>
  108. <script>
  109. import { mapGetters } from 'vuex';
  110. let that;
  111. export default {
  112. data() {
  113. return {
  114. regionList: [],
  115. region_id: null,
  116. entryRegionId: '',
  117. pendingRegionId: '',
  118. pendingRegionName: '',
  119. volunteerCrInfo: {},
  120. showServiceAreaPicker: false,
  121. selectedServiceAreaTitle: '',
  122. cr_id: '' /* 文物id */,
  123. modifyId: '' /* 修改资料的文物id */,
  124. volunteer_id: '' /* 志愿者id */,
  125. // 对话框相关变量
  126. showModal: false,
  127. modalContent: '' /* 对话框富文本内容 */,
  128. modalTitle: '' /* 对话框标题 */,
  129. // 性别列表
  130. genderList: [
  131. { value: '男', text: '男' },
  132. { value: '女', text: '女' }
  133. ],
  134. // 政治面貌列表
  135. politicalStatusList: [
  136. { value: '中共党员', text: '中共党员' },
  137. { value: '中共预备党员', text: '中共预备党员' },
  138. { value: '共青团员', text: '共青团员' },
  139. { value: '民主党派', text: '民主党派' },
  140. { value: '群众', text: '群众' }
  141. ],
  142. typeOptions: [
  143. { value: 'volunteer', text: '巡查守护' },
  144. { value: 'xuanjiang', text: '宣讲' },
  145. { value: 'publicize', text: '传播' }
  146. ],
  147. /* 表单数据 */
  148. valiFormData: {
  149. name: '',
  150. mobile: '',
  151. address: '',
  152. id_card: '',
  153. unit_name: '',
  154. fullurl: '',
  155. intro: '',
  156. political_status: '',
  157. email: '',
  158. type: '',
  159. },
  160. /* 校验规则 */
  161. rules: {
  162. // 对name字段进行必填验证
  163. name: {
  164. // name 字段的校验规则
  165. rules: [
  166. // 校验 name 不能为空
  167. {
  168. required: true,
  169. errorMessage: '请输入姓名'
  170. },
  171. // 对name字段进行长度验证
  172. {
  173. minLength: 1,
  174. maxLength: 6,
  175. errorMessage: '{label}长度在 {minLength} 到 {maxLength} 个字符'
  176. }
  177. ],
  178. // 当前表单域的字段中文名,可不输入
  179. label: '姓名',
  180. validateTrigger: 'submit'
  181. },
  182. /* 手机号校验 */
  183. mobile: {
  184. // mobile 字段的校验规则
  185. rules: [
  186. // 校验 mobile 不能为空
  187. {
  188. required: true,
  189. errorMessage: '请输入联系电话'
  190. },
  191. // 对mobile字段进行长度验证
  192. {
  193. minLength: 11,
  194. maxLength: 11,
  195. errorMessage: '{label}长度为 {minLength} 个字符'
  196. }
  197. ],
  198. // 当前表单域的字段中文名,可不输入
  199. label: '手机号',
  200. validateTrigger: 'submit'
  201. },
  202. /* 身份证校验 */
  203. id_card: {
  204. // idCard 字段的校验规则
  205. rules: [
  206. // 校验 idCard 不能为空
  207. {
  208. required: true,
  209. errorMessage: '请输入身份证号'
  210. }
  211. // 对idCard字段进行长度验证
  212. // {
  213. // minLength: 18,
  214. // maxLength: 18,
  215. // errorMessage: '{label}长度为 {minLength} 个字符'
  216. // }
  217. ],
  218. // 当前表单域的字段中文名,可不输入
  219. label: '身份证号',
  220. validateTrigger: 'submit'
  221. },
  222. /* 单位 */
  223. unit_name: {
  224. rules: [
  225. // 校验 unit 不能为空
  226. {
  227. required: true,
  228. errorMessage: '请输入单位名称'
  229. }
  230. ]
  231. },
  232. address: {
  233. rules: [
  234. // 校验 住址 不能为空
  235. {
  236. required: true,
  237. errorMessage: '请输入单位名称'
  238. }
  239. ]
  240. },
  241. // notesVal: {
  242. // rules: [
  243. // // 校验 申请类型 不能为空
  244. // {
  245. // required: true,
  246. // errorMessage: '请输入申请类型'
  247. // }
  248. // ]
  249. // },
  250. intro: {
  251. rules: [
  252. {
  253. required: true,
  254. errorMessage: '请输入认领原因或个人介绍'
  255. }
  256. ]
  257. },
  258. // 政治面貌校验
  259. political_status: {
  260. rules: [
  261. {
  262. required: true,
  263. errorMessage: '请选择政治面貌'
  264. }
  265. ],
  266. label: '政治面貌',
  267. validateTrigger: 'submit'
  268. },
  269. // 联系邮箱校验
  270. email: {
  271. rules: [
  272. {
  273. required: false,
  274. errorMessage: '请输入联系邮箱'
  275. },
  276. {
  277. pattern: /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/,
  278. errorMessage: '请输入正确的邮箱格式'
  279. }
  280. ],
  281. label: '联系邮箱',
  282. validateTrigger: 'submit'
  283. },
  284. // 本人承诺校验
  285. commitment: {
  286. rules: [
  287. {
  288. required: true,
  289. errorMessage: '请阅读并同意本人承诺'
  290. },
  291. {
  292. type: 'boolean',
  293. enum: [true],
  294. errorMessage: '请阅读并同意本人承诺'
  295. }
  296. ],
  297. label: '本人承诺',
  298. validateTrigger: 'submit'
  299. }
  300. }
  301. };
  302. },
  303. onLoad(o) {
  304. that = this;
  305. this.user = this.$common.userInfo();
  306. this.cr_id = o.id;
  307. this.volunteer_id = o.volunteer_id;
  308. this.modifyId = o.modifyId;
  309. this.pendingRegionId = o.region_id ? decodeURIComponent(o.region_id) : '';
  310. this.entryRegionId = this.pendingRegionId;
  311. this.pendingRegionName = o.regionName ? decodeURIComponent(o.regionName) : '';
  312. if (o.type && this.typeOptions.some((item) => item.value === o.type)) {
  313. this.valiFormData.type = o.type;
  314. }
  315. this.initSelectedCrInfo();
  316. this.fetchVolunteerCrInfo();
  317. this.getCategoryCascadeList();
  318. if (this.isLogin) {
  319. setTimeout(() => {
  320. // 调用API获取对话框内容并显示
  321. this.$api.getVolunteerNotify({}, function (res) {
  322. if (res.data.status === 1) {
  323. that.modalContent = res.data.introduce;
  324. that.modalTitle = res.data.title;
  325. that.$refs.popup.open();
  326. }
  327. });
  328. }, 200);
  329. }
  330. },
  331. computed: {
  332. ...mapGetters(['isLogin']),
  333. isDistrictEntry() {
  334. return !!this.entryRegionId;
  335. },
  336. isVolunteerType() {
  337. return this.valiFormData.type === 'volunteer';
  338. },
  339. serviceAreaOptions() {
  340. const serviceAreas = this.volunteerCrInfo && Array.isArray(this.volunteerCrInfo.service_areas)
  341. ? this.volunteerCrInfo.service_areas
  342. : [];
  343. const optionMap = {};
  344. const optionList = [];
  345. serviceAreas.forEach((item, index) => {
  346. const optionId = item && item.id !== undefined && item.id !== null ? item.id : '';
  347. const optionTitle = item && item.title ? item.title : '';
  348. const optionKey = `${optionId}_${optionTitle}`;
  349. if (!optionMap[optionKey]) {
  350. const optionItem = {
  351. ...item,
  352. optionKey: `service_area_${index}`
  353. };
  354. optionMap[optionKey] = optionItem;
  355. optionList.push(optionItem);
  356. }
  357. });
  358. return optionList;
  359. },
  360. serviceAreaColumns() {
  361. return [this.serviceAreaOptions];
  362. },
  363. serviceAreaDefaultIndex() {
  364. const matchedIndex = this.serviceAreaOptions.findIndex((item) => String(item.id) === String(this.cr_id));
  365. return [matchedIndex >= 0 ? matchedIndex : 0];
  366. },
  367. shouldShowCrSelector() {
  368. return this.isDistrictEntry || (!this.isDistrictEntry && !!this.cr_id);
  369. }
  370. },
  371. methods: {
  372. onchange(e) {
  373. const value = e.detail.value;
  374. },
  375. onnodeclick(node) {
  376. this.region_id = node.value;
  377. console.log(node);
  378. },
  379. openServiceAreaPicker() {
  380. if (!this.serviceAreaOptions.length) {
  381. this.$common.errorToShow('暂无可选文物');
  382. return;
  383. }
  384. this.showServiceAreaPicker = true;
  385. },
  386. closeServiceAreaPicker() {
  387. this.showServiceAreaPicker = false;
  388. },
  389. confirmServiceArea(e) {
  390. const selectedItem = e && Array.isArray(e.value) ? e.value[0] : null;
  391. this.showServiceAreaPicker = false;
  392. if (!selectedItem) {
  393. return;
  394. }
  395. this.cr_id = selectedItem.id !== undefined && selectedItem.id !== null ? selectedItem.id : '';
  396. this.selectedServiceAreaTitle = selectedItem.title || '';
  397. },
  398. initSelectedCrInfo() {
  399. if (this.isDistrictEntry || !this.cr_id) {
  400. return;
  401. }
  402. this.$api.getContentDetail(
  403. {
  404. main_body_id: 1,
  405. id: this.cr_id
  406. },
  407. (res) => {
  408. const detail = res && res.data ? res.data : {};
  409. this.selectedServiceAreaTitle = detail.title || detail.name || '';
  410. }
  411. );
  412. },
  413. getRegionValue(item = {}) {
  414. if (item.value !== undefined && item.value !== null && item.value !== '') {
  415. return item.value;
  416. }
  417. if (item.id !== undefined && item.id !== null && item.id !== '') {
  418. return item.id;
  419. }
  420. return '';
  421. },
  422. getRegionText(item = {}) {
  423. return item.text || item.title || item.label || item.name || '';
  424. },
  425. findRegionById(list = [], regionId = '') {
  426. for (let index = 0; index < list.length; index++) {
  427. const item = list[index];
  428. if (String(this.getRegionValue(item)) === String(regionId)) {
  429. return item;
  430. }
  431. if (Array.isArray(item.children) && item.children.length) {
  432. const matchedChild = this.findRegionById(item.children, regionId);
  433. if (matchedChild) {
  434. return matchedChild;
  435. }
  436. }
  437. }
  438. return null;
  439. },
  440. findRegionByName(list = [], regionName = '') {
  441. for (let index = 0; index < list.length; index++) {
  442. const item = list[index];
  443. if (this.getRegionText(item) === regionName) {
  444. return item;
  445. }
  446. if (Array.isArray(item.children) && item.children.length) {
  447. const matchedChild = this.findRegionByName(item.children, regionName);
  448. if (matchedChild) {
  449. return matchedChild;
  450. }
  451. }
  452. }
  453. return null;
  454. },
  455. applyPendingRegion() {
  456. if (!Array.isArray(this.regionList) || !this.regionList.length) {
  457. return;
  458. }
  459. let matchedRegion = null;
  460. if (this.pendingRegionId !== '' && this.pendingRegionId !== null && this.pendingRegionId !== undefined) {
  461. matchedRegion = this.findRegionById(this.regionList, this.pendingRegionId);
  462. }
  463. if (!matchedRegion && this.pendingRegionName) {
  464. matchedRegion = this.findRegionByName(this.regionList, this.pendingRegionName);
  465. }
  466. if (matchedRegion) {
  467. this.region_id = this.getRegionValue(matchedRegion);
  468. }
  469. },
  470. getVolunteerCrInfoParams() {
  471. if (!this.entryRegionId || !this.valiFormData.type) {
  472. return null;
  473. }
  474. return {
  475. main_body_id: 1,
  476. id: this.entryRegionId,
  477. type: this.valiFormData.type
  478. };
  479. },
  480. fetchVolunteerCrInfo() {
  481. const params = this.getVolunteerCrInfoParams();
  482. if (!params) {
  483. return;
  484. }
  485. this.$api.getVolunteerCrInfo(params, (res) => {
  486. this.volunteerCrInfo = res && res.data ? res.data : {};
  487. const matchedItem = this.serviceAreaOptions.find((item) => String(item.id) === String(this.cr_id));
  488. if (matchedItem) {
  489. this.selectedServiceAreaTitle = matchedItem.title || '';
  490. }
  491. });
  492. },
  493. validateSelectedCr() {
  494. if (!this.cr_id) {
  495. this.$common.errorToShow(`请选择${this.volunteerCrLabel}`);
  496. return false;
  497. }
  498. return true;
  499. },
  500. // 区域
  501. getCategoryCascadeList() {
  502. this.$api.getCategoryCascadeList({ main_body_id: 1, pid: 5, level: 2 }, function (res) {
  503. that.regionList = res.data;
  504. that.applyPendingRegion();
  505. });
  506. },
  507. // 测试上传文件
  508. chooseFile() {
  509. let userToken = '';
  510. let auth = this.$db.get('auth');
  511. userToken = auth.token;
  512. wx.chooseMessageFile({
  513. count: 1,
  514. type: 'file', // 修改为支持的文档类型
  515. // 配置后导致读取不到聊天文件
  516. // extension: ['.doc', '.xlsx', '.docx', '.ppt'],
  517. success(res) {
  518. const tempFilePaths = res.tempFiles;
  519. uni.uploadFile({
  520. url: that.$config.baseUrl + 'api/common/upload?token=' + userToken,
  521. filePath: tempFilePaths[0].path,
  522. name: 'file',
  523. header: {
  524. 'content-type': 'multipart/form-data' // 根据实际情况设置请求头
  525. },
  526. formData: {}, // 如果需要,添加额外的form数据
  527. success: (res) => {
  528. console.log('上传成功,服务器响应数据:', res.data);
  529. let url = JSON.parse(res.data);
  530. that.valiFormData.fullurl = url.data.fullurl;
  531. // console.log('生成的链接', that.valiFormData.fullurl);
  532. that.$common.errorToShow('上传成功');
  533. },
  534. fail: (err) => {
  535. console.error('文件上传失败:', err);
  536. }
  537. });
  538. }
  539. });
  540. },
  541. submit() {
  542. this.$refs.valiForm.validate(['id'], async (err, valiFormData) => {
  543. console.log('this.valiFormData.commitment', this.valiFormData.commitment);
  544. if (this.valiFormData.commitment !== 1) {
  545. that.$common.errorToShow('请先阅读并同意本人承诺');
  546. return;
  547. }
  548. if (!this.valiFormData.type) {
  549. that.$common.errorToShow('缺少报名类型,请从对应入口重新进入');
  550. return;
  551. }
  552. if (!this.validateSelectedCr()) {
  553. return;
  554. }
  555. if (!err) {
  556. console.log('校验成功');
  557. /* 检验成功 */
  558. const {
  559. name, mobile, address, id_card,
  560. political_status,
  561. unit_name, intro, fullurl,
  562. email,
  563. } = this.valiFormData;
  564. const params = {
  565. main_body_id: 1,
  566. name: name,
  567. mobile: mobile,
  568. address: address,
  569. unit_name: unit_name,
  570. id_card: id_card,
  571. intro: intro,
  572. file: fullurl,
  573. politics_status: political_status,
  574. email: email,
  575. type: this.valiFormData.type,
  576. region_id: this.region_id,
  577. };
  578. if (this.cr_id) {
  579. params.cr_id = this.cr_id;
  580. }
  581. if (this.isDistrictEntry && this.selectedServiceAreaTitle) {
  582. params.service_area = this.selectedServiceAreaTitle;
  583. }
  584. this.$api.scanApplyVolunteer(
  585. params,
  586. function (res) {
  587. if (res.code === 1) {
  588. that.$common.errorToShow(res.msg);
  589. setTimeout(() => {
  590. uni.switchTab({
  591. url: '/pages/shouhu/shouhu'
  592. });
  593. }, 1000);
  594. } else {
  595. if (res.data) {
  596. setTimeout(() => {
  597. uni.switchTab({
  598. url: '/pages/shouhu/shouhu'
  599. });
  600. }, 1000);
  601. }
  602. that.$common.errorToShow(res.msg);
  603. }
  604. }
  605. );
  606. } else {
  607. that.$common.errorToShow('请完善信息');
  608. }
  609. });
  610. },
  611. }
  612. };
  613. </script>
  614. <style>
  615. .box {
  616. width: 100%;
  617. padding-bottom: 50rpx;
  618. background-image: url('https://huli-app.wenlvti.net/app_static/WenWuGuanJia/image/xy_bgt.png');
  619. background-size: 100% 100%;
  620. background-repeat: repeat-y;
  621. height: auto;
  622. }
  623. .ban_box {
  624. position: relative;
  625. margin-top: 40rpx;
  626. }
  627. .top_img {
  628. width: 100%;
  629. height: 100%;
  630. }
  631. .ban_item1 {
  632. position: absolute;
  633. top: -20rpx;
  634. left: 233rpx;
  635. width: 290rpx;
  636. height: 290rpx;
  637. margin: auto;
  638. }
  639. .ban_item2 {
  640. width: 250rpx;
  641. height: 250rpx;
  642. margin: auto;
  643. }
  644. ::v-deep .uni-forms-item__error {
  645. color: red !important;
  646. }
  647. ::v-deep .uni-stat__select {
  648. padding: 0!important;
  649. }
  650. .is-input-border {
  651. background-color: #f7dfc0 !important;
  652. }
  653. .uni-forms-item__label {
  654. color: #000000 !important;
  655. }
  656. .text-wrapper_3 {
  657. margin: auto;
  658. margin-top: 50rpx;
  659. height: 80rpx;
  660. flex-direction: column;
  661. width: 240rpx;
  662. background: url('/static/img/dt_bg2.png') no-repeat;
  663. background-size: 100% 100%;
  664. }
  665. .bm_tit {
  666. text-align: center;
  667. font-size: 36rpx;
  668. line-height: 80rpx;
  669. letter-spacing: 6rpx;
  670. text-align: center;
  671. font-weight: 700;
  672. background: linear-gradient(180deg, #af7e44 0%, #934b36 100%);
  673. background-clip: text;
  674. -webkit-background-clip: text;
  675. -webkit-text-fill-color: transparent;
  676. }
  677. .example {
  678. height: 87%;
  679. margin: 20rpx 32rpx 0 32rpx;
  680. }
  681. .uni-forms {
  682. padding: 0 20rpx 0 20rpx;
  683. }
  684. .uni-forms-item {
  685. margin-bottom: 30rpx !important;
  686. }
  687. .active {
  688. border: 6rpx solid #efb57a;
  689. border-radius: 10rpx;
  690. }
  691. .img {
  692. width: 230rpx;
  693. height: 250rpx;
  694. border: 6rpx solid #efb57a;
  695. border-radius: 10rpx;
  696. }
  697. .map_tit {
  698. display: flex;
  699. align-items: center;
  700. margin-left: 60rpx;
  701. margin-top: 40rpx;
  702. font-size: 40rpx;
  703. font-family: Songti SC, Songti SC;
  704. font-weight: 900;
  705. line-height: 52rpx;
  706. color: #444444;
  707. }
  708. .scarch_box {
  709. width: 430rpx;
  710. height: 82rpx;
  711. padding: 15rpx 0 0 30rpx;
  712. /* background-image: url('/static/img/search_bg1.png');
  713. background-size: 100% 100%; */
  714. }
  715. .rl_box {
  716. width: 90%;
  717. margin: auto;
  718. margin-top: 40rpx;
  719. display: flex;
  720. justify-content: space-between;
  721. }
  722. .rl_item {
  723. width: 188rpx;
  724. height: 102rpx;
  725. background-image: url('/static/img/rl_bg.png');
  726. background-size: 100% 100%;
  727. }
  728. .tit {
  729. text-align: center;
  730. line-height: 102rpx;
  731. font-weight: 700;
  732. font-size: 36rpx;
  733. letter-spacing: 6rpx;
  734. background: linear-gradient(180deg, #af7e44 0%, #934b36 100%);
  735. background-clip: text;
  736. -webkit-background-clip: text;
  737. -webkit-text-fill-color: transparent;
  738. }
  739. .scfj {
  740. width: 170rpx;
  741. height: 50rpc;
  742. line-height: 50rpx;
  743. align-items: center;
  744. display: flex;
  745. background-color: #f7dfc0;
  746. position: absolute;
  747. top: -60rpx;
  748. right: 2rpx;
  749. border-radius: 5rpx;
  750. justify-content: space-around;
  751. }
  752. .tit2 {
  753. text-align: center;
  754. line-height: 66rpx;
  755. font-weight: 700;
  756. font-size: 32rpx;
  757. letter-spacing: 6rpx;
  758. background: linear-gradient(180deg, #af7e44 0%, #934b36 100%);
  759. background-clip: text;
  760. -webkit-background-clip: text;
  761. -webkit-text-fill-color: transparent;
  762. }
  763. .is-input-error-border {
  764. border: none !important;
  765. }
  766. .xx_box {
  767. padding: 20rpx;
  768. background-color: #e1bf9a;
  769. width: 660rpx;
  770. height: 560rpx;
  771. padding-top: 80rpx;
  772. }
  773. .xx_tit {
  774. height: 360rpx;
  775. font-size: 30rpx;
  776. padding: 20rpx;
  777. text-indent: 2em;
  778. background-color: #f3e3d3;
  779. overflow: scroll;
  780. }
  781. /* 性别选择样式 */
  782. .gender-select {
  783. display: flex;
  784. align-items: center;
  785. }
  786. /* 政治面貌选择样式 */
  787. .political-status-select {
  788. width: 100%;
  789. }
  790. /* 报名选项多选框样式 */
  791. .checkbox-group {
  792. display: flex;
  793. flex-direction: column;
  794. gap: 20rpx;
  795. }
  796. .checkbox-item {
  797. display: flex;
  798. align-items: center;
  799. gap: 10rpx;
  800. }
  801. .checkbox-item text {
  802. font-size: 32rpx;
  803. color: #333;
  804. }
  805. .service-area-readonly {
  806. display: flex;
  807. align-items: center;
  808. box-sizing: border-box;
  809. height: 70rpx;
  810. padding: 0 20rpx;
  811. background-color: #f7dfc0;
  812. border-radius: 8rpx;
  813. color: #6a412c;
  814. font-size: 28rpx;
  815. line-height: 1;
  816. }
  817. .service-area-trigger {
  818. display: flex;
  819. align-items: center;
  820. justify-content: space-between;
  821. box-sizing: border-box;
  822. height: 70rpx;
  823. padding: 0 20rpx;
  824. background-color: #f7dfc0;
  825. border-radius: 8rpx;
  826. }
  827. .service-area-placeholder {
  828. font-size: 24rpx;
  829. color: #999999;
  830. line-height: 1;
  831. }
  832. .service-area-value {
  833. font-size: 24rpx;
  834. line-height: 1;
  835. }
  836. /* 本人承诺样式 */
  837. .commitment-text {
  838. font-size: 28rpx;
  839. color: #666;
  840. line-height: 44rpx;
  841. padding-bottom: 20rpx;
  842. text-indent: 2em;
  843. background-color: #fdfaf6;
  844. }
  845. .commitment-agree {
  846. font-size: 30rpx;
  847. color: #333;
  848. margin-left: 10rpx;
  849. }
  850. /* 对话框样式 */
  851. .modal-container {
  852. width: 80%;
  853. background-color: #ffffff;
  854. border-radius: 12rpx;
  855. overflow: hidden;
  856. margin-left: 10%;
  857. }
  858. .modal-title {
  859. display: block;
  860. font-size: 36rpx;
  861. font-weight: 700;
  862. color: #444444;
  863. text-align: center;
  864. padding: 20rpx 0;
  865. }
  866. .modal-content {
  867. padding: 30rpx;
  868. max-height: 500rpx;
  869. overflow-y: auto;
  870. }
  871. .modal-footer {
  872. padding: 20rpx;
  873. text-align: center;
  874. border-top: 1rpx solid #e5e5e5;
  875. }
  876. .modal-btn {
  877. width: 200rpx;
  878. height: 70rpx;
  879. line-height: 70rpx;
  880. background-color: #af7e44;
  881. color: #ffffff;
  882. border-radius: 35rpx;
  883. text-align: center;
  884. margin: 0 auto;
  885. font-size: 30rpx;
  886. font-weight: 500;
  887. }
  888. </style>