ConferenceNetworkNewEn.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757
  1. <template>
  2. <div class="autoBox container-box">
  3. <div class="bread-crumb">
  4. <el-breadcrumb separator="/" style="float: left; margin: 15px">
  5. <el-breadcrumb-item :to="{ path: 'home' }">{{
  6. $i18n.locale == "en" ? "Home" : "首页"
  7. }}</el-breadcrumb-item>
  8. <el-breadcrumb-item :to="{ path: 'ConferenceServices' }">{{
  9. $i18n.locale == "en" ? "Conferences" : "会议"
  10. }}</el-breadcrumb-item>
  11. <el-breadcrumb-item>{{
  12. $i18n.locale == "en" ? "The information provided" : "信息填报"
  13. }}</el-breadcrumb-item>
  14. </el-breadcrumb>
  15. </div>
  16. <div class="content-box" v-if="$i18n.locale == 'en'">
  17. <div class="content-item">
  18. <div class="category-body">
  19. <el-form
  20. :model="meetingApply"
  21. :rules="rulesEn"
  22. ref="meetingApplyEn"
  23. label-width="260px"
  24. key="1"
  25. >
  26. <!-- 邀请码 -->
  27. <el-form-item label="Invitation Code" prop="invitationCode">
  28. <el-input
  29. v-model="meetingApply.invitationCode"
  30. placeholder=""
  31. ></el-input>
  32. </el-form-item>
  33. <!-- 名 -->
  34. <el-form-item label="Given Name" prop="givenName">
  35. <el-input
  36. v-model="meetingApply.givenName"
  37. placeholder=""
  38. ></el-input>
  39. </el-form-item>
  40. <!-- 中间名 -->
  41. <el-form-item label="Middle Name">
  42. <el-input
  43. v-model="meetingApply.middleName"
  44. placeholder=""
  45. ></el-input>
  46. </el-form-item>
  47. <!-- 姓 -->
  48. <el-form-item label="Surname" prop="sumame">
  49. <el-input v-model="meetingApply.sumame" placeholder=""></el-input>
  50. </el-form-item>
  51. <!-- 所在国家 -->
  52. <el-form-item label="Country/Region" prop="unitCountryDcit">
  53. <el-select
  54. v-model="meetingApply.unitCountryDcit"
  55. filterable
  56. placeholder=""
  57. style="width: 100%"
  58. >
  59. <el-option
  60. :label="item.label"
  61. :value="item.value"
  62. v-for="item in unitCountryDictEns"
  63. ></el-option>
  64. </el-select>
  65. </el-form-item>
  66. <!-- 单位名称 -->
  67. <el-form-item label="Name of Company/Organization" prop="filmName">
  68. <el-input
  69. v-model="meetingApply.filmName"
  70. placeholder=""
  71. ></el-input>
  72. </el-form-item>
  73. <!-- 单位类型 -->
  74. <el-form-item label="Company/Organization Type" prop="filmTypeDict">
  75. <el-select
  76. v-model="meetingApply.filmTypeDict"
  77. placeholder=""
  78. style="width: 100%"
  79. >
  80. <el-option
  81. :label="item.label"
  82. :value="item.value"
  83. v-for="(item, i) in meetingUnitTypeDictEns"
  84. :key="i"
  85. ></el-option>
  86. </el-select>
  87. </el-form-item>
  88. <!-- 职务 -->
  89. <el-form-item label="Title" prop="title">
  90. <el-input v-model="meetingApply.title" placeholder=""></el-input>
  91. </el-form-item>
  92. <!-- 邮箱 -->
  93. <el-form-item label="E-mail" prop="mail">
  94. <el-input v-model="meetingApply.mail" placeholder=""></el-input>
  95. </el-form-item>
  96. <el-form-item
  97. label-width="198px"
  98. v-if="
  99. gridData.length && intentions.isShowEnOnlineIntention == 'Yes'
  100. "
  101. >
  102. <p style="font-size: 16px">
  103. Among multiple events of our conference, please kindly choose
  104. your preferable events to attend to(Multiple choice).
  105. </p>
  106. <el-table
  107. :data="gridData"
  108. :border="false"
  109. @selection-change="checkRow"
  110. @row-click="setSelectEn"
  111. size="small"
  112. ref="multipleTableEn"
  113. :empty-text="'Sorry no date.'"
  114. class="active-grid"
  115. >
  116. <el-table-column type="selection" width="50"></el-table-column>
  117. <el-table-column property="activityName" label="ALL">
  118. <template slot-scope="scope">
  119. <p style="font-weight: bold">
  120. {{ momentDate(scope.row.activityStartTime) }} ~
  121. {{ momentDate(scope.row.activityEndTime) }}
  122. </p>
  123. <p>{{ scope.row.activityNameEn }}</p>
  124. </template>
  125. </el-table-column>
  126. </el-table>
  127. </el-form-item>
  128. <el-form-item style="text-align: center" label-width="0">
  129. <el-button
  130. type="primary"
  131. @click="submitFormEn('meetingApplyEn')"
  132. :key="btnKey"
  133. >Submit</el-button
  134. >
  135. </el-form-item>
  136. </el-form>
  137. </div>
  138. </div>
  139. </div>
  140. <div class="content-box" v-else>
  141. <div class="content-item">
  142. <div class="category-body">
  143. <el-form
  144. :model="meetingApply"
  145. :rules="rulesZh"
  146. ref="meetingApplyZh"
  147. label-width="100px"
  148. key="2"
  149. >
  150. <el-form-item label="邀请码" prop="invitationCode">
  151. <el-input
  152. v-model="meetingApply.invitationCode"
  153. placeholder=""
  154. ></el-input>
  155. </el-form-item>
  156. <el-form-item label="姓名" prop="name">
  157. <el-input v-model="meetingApply.name" placeholder=""></el-input>
  158. </el-form-item>
  159. <el-form-item label="国家" prop="unitCountryDcit">
  160. <el-select
  161. v-model="meetingApply.unitCountryDcit"
  162. filterable
  163. placeholder="请选择"
  164. style="width: 100%"
  165. >
  166. <el-option
  167. :label="item.label"
  168. :value="item.value"
  169. v-for="item in unitCountryDicts"
  170. ></el-option>
  171. </el-select>
  172. </el-form-item>
  173. <el-form-item label="单位名称" prop="filmName">
  174. <el-input
  175. v-model="meetingApply.filmName"
  176. placeholder=""
  177. ></el-input>
  178. </el-form-item>
  179. <el-form-item label="单位类型" prop="filmTypeDict">
  180. <el-select
  181. v-model="meetingApply.filmTypeDict"
  182. placeholder=""
  183. style="width: 100%"
  184. >
  185. <el-option
  186. :label="item.label"
  187. :value="item.value"
  188. v-for="(item, i) in meetingUnitTypeDicts"
  189. :key="i"
  190. ></el-option>
  191. </el-select>
  192. </el-form-item>
  193. <el-form-item label="职务" prop="title">
  194. <el-input v-model="meetingApply.title" placeholder=""></el-input>
  195. </el-form-item>
  196. <el-form-item label="邮箱" prop="mail">
  197. <el-input v-model="meetingApply.mail" placeholder=""></el-input>
  198. </el-form-item>
  199. <el-form-item
  200. label-width="36px"
  201. v-if="
  202. gridData.length && intentions.isShowZhOnlineIntention == 'Yes'
  203. "
  204. >
  205. <p style="font-size: 16px">
  206. 此次大会包括多场会议活动,请勾选您希望参加的场次(可多选)。
  207. </p>
  208. <el-table
  209. :data="gridData"
  210. :border="false"
  211. @selection-change="checkRow"
  212. @row-click="setSelect"
  213. size="small"
  214. ref="multipleTable"
  215. class="active-grid"
  216. >
  217. <el-table-column type="selection" width="50"></el-table-column>
  218. <el-table-column property="activityName" label="全选">
  219. <template slot-scope="scope">
  220. <p style="font-weight: bold">
  221. {{ momentDate(scope.row.activityStartTime) }} ~
  222. {{ momentDate(scope.row.activityEndTime) }}
  223. </p>
  224. <p>{{ scope.row.activityName }}</p>
  225. </template>
  226. </el-table-column>
  227. </el-table>
  228. </el-form-item>
  229. <el-form-item style="text-align: center" label-width="0">
  230. <el-button type="primary" @click="submitForm('meetingApplyZh')"
  231. >提交</el-button
  232. >
  233. </el-form-item>
  234. </el-form>
  235. </div>
  236. </div>
  237. </div>
  238. <el-dialog :show-close="false" :visible.sync="dialogVisible" width="600px">
  239. <div class="category-body submit-success">
  240. <p>
  241. <img
  242. src="@/assets/img/conference/submit-success.png"
  243. alt=""
  244. width="200"
  245. />
  246. </p>
  247. <p style="font-size: 24px; color: #666; margin-bottom: 20px">
  248. {{ $i18n.locale == "en" ? "Registered!" : "报名成功!" }}
  249. </p>
  250. <p>
  251. <el-button
  252. style="background: #2c558a; color: #fff"
  253. @click="toView('ConferenceDetail', $route.query.key)"
  254. >
  255. {{ $i18n.locale == "en" ? "Back" : "返回" }}({{ num }}s)
  256. </el-button>
  257. <el-button @click="ContinueRegister">{{
  258. $i18n.locale == "en" ? "Continue" : "继续报名"
  259. }}</el-button>
  260. </p>
  261. </div>
  262. </el-dialog>
  263. <div class="apply-history" v-if="applyHistoryInfo.length">
  264. <span style="font-size: 14px; margin-right: 20px">{{
  265. $i18n.locale == "en" ? "Registration History" : "报名历史"
  266. }}</span>
  267. <el-select
  268. v-model="applyHistorySelected"
  269. @change="applyHistoryChanged"
  270. :placeholder="$i18n.locale == 'en' ? 'Please Select' : '请选择'"
  271. >
  272. <el-option
  273. v-for="(item, i) in applyHistoryInfo"
  274. :key="i"
  275. :label="item.name"
  276. :value="i"
  277. >
  278. <span style="float: left">{{ item.name }}</span>
  279. </el-option>
  280. </el-select>
  281. </div>
  282. <loginTopEn ref="loginTopEn"></loginTopEn>
  283. </div>
  284. </template>
  285. <script>
  286. import Base from "@/views/base/Base";
  287. import {
  288. registerOnline,
  289. getMeetingApplyActivityInfos,
  290. getOlApplyHistoryInfosByLoginAccount,
  291. } from "@/api/meeting/meetingApply";
  292. import { getConfrenceDetail } from "@/api/meeting/meetingOutInfo";
  293. import { getToken } from "@/utils/auth";
  294. import { getDicts } from "@/api/dict";
  295. import moment from "moment-timezone";
  296. import { addIntegral, addGrowth } from "@/utils/toCompleteTask";
  297. import loginTopEn from './loginTopEn'
  298. export default {
  299. components:{
  300. loginTopEn
  301. },
  302. extends: Base,
  303. data() {
  304. var checkInvitationCode = (rule, value, callback) => {
  305. if (!value) {
  306. let errorTxt ="Please enter Invitation Code.";
  307. callback(new Error(errorTxt));
  308. } else if (!this.invitationCodeArr.includes(value)) {
  309. let errorTxt ="Please enter the correct Invitation Code. If not, please enter 000000.";
  310. callback(new Error(errorTxt));
  311. } else {
  312. callback();
  313. }
  314. };
  315. var checkEmail = (rule, value, callback) => {
  316. let reg = /^\w+.*\w+@[a-zA-Z0-9]+.*[a-zA-Z0-9]+\.[a-zA-Z]{2,4}$/gm;
  317. if (!value) {
  318. let errorTxt ="Please enter E-mail." ;
  319. return callback(new Error(errorTxt));
  320. } else if (!reg.test(value)) {
  321. let errorTxt = "Please enter the correct E-mail address.";
  322. callback(new Error(errorTxt));
  323. } else {
  324. callback();
  325. }
  326. };
  327. return {
  328. newChecked:[],
  329. applyHistorySelected: "", //被选择的报名历史
  330. applyHistoryInfo: [], //报名历史信息
  331. btnKey: 1,
  332. dialogVisible: false,
  333. num: 5,
  334. timer: "",
  335. meetingUnitTypeDictEns: [],
  336. meetingUnitTypeDicts: [],
  337. invitationCodePrefix: [],
  338. invitationCodeArr: ["000000"],
  339. unitCountryDicts: [],
  340. unitCountryDictEns: [],
  341. gridData: [],
  342. checkedIds: [],
  343. baseInfo: {},
  344. intentions: {},
  345. meetingApply: {
  346. // meetingId: window.localStorage.getItem('conferenceId'),
  347. meetingId: this.$route.query.key,
  348. invitationCode: "",
  349. name: "",
  350. middleName: "",
  351. givenName: "",
  352. sumame: "",
  353. filmName: "",
  354. filmType: "",
  355. filmTypeDict: "",
  356. title: "",
  357. mail: "",
  358. unitCountryDcit: "",
  359. applyWay: "",
  360. isSendNotice: "No",
  361. },
  362. rulesEn: {
  363. invitationCode: [
  364. { required: true, validator: checkInvitationCode, trigger: "blur" },
  365. ],
  366. givenName: [
  367. {
  368. required: true,
  369. message: "Please enter Given Name.",
  370. trigger: "blur",
  371. },
  372. ],
  373. sumame: [
  374. { required: true, message: "Please enter Surname.", trigger: "blur" },
  375. ],
  376. mail: [{ required: true, validator: checkEmail, trigger: "blur" }],
  377. unitCountryDcit: [
  378. {
  379. required: true,
  380. message: "Please select Country/Region.",
  381. trigger: "change",
  382. },
  383. ],
  384. filmName: [
  385. {
  386. required: true,
  387. message: "Please enter Name of Company/Organization.",
  388. trigger: "blur",
  389. },
  390. ],
  391. filmTypeDict: [
  392. {
  393. required: true,
  394. message: "Company/Organization Type.",
  395. trigger: "change",
  396. },
  397. ],
  398. title: [
  399. { required: true, message: "Please enter Title.", trigger: "blur" },
  400. ],
  401. },
  402. rulesZh: {
  403. invitationCode: [
  404. { required: true, validator: checkInvitationCode, trigger: "blur" },
  405. ],
  406. name: [{ required: true, message: "请输入姓名", trigger: "blur" }],
  407. unitCountryDcit: [
  408. { required: true, message: "请选择国家", trigger: "change" },
  409. ],
  410. mail: [{ required: true, validator: checkEmail, trigger: "blur" }],
  411. filmName: [
  412. { required: true, message: "请输入单位名称", trigger: "blur" },
  413. ],
  414. filmTypeDict: [
  415. { required: true, message: "请选择单位类型", trigger: "change" },
  416. ],
  417. title: [{ required: true, message: "请输入职务", trigger: "blur" }],
  418. },
  419. user: {
  420. umsUser: {},
  421. },
  422. };
  423. },
  424. watch: {
  425. "$i18n.locale"(val) {
  426. this.meetingApply.unitCountryDcit = "";
  427. this.getApplyHistoryInfos();
  428. },
  429. dialogVisible() {
  430. if (this.dialogVisible == true) {
  431. this.loginTipsChange();
  432. }
  433. },
  434. },
  435. mounted() {
  436. //localStorage.setItem('aaa','false')
  437. this.$i18n.locale='en'
  438. localStorage.setItem('locale', 'en');
  439. var url = window.location.href;
  440. var temp1 = url.split('=')[1].split('&')[0];
  441. let rpath = { path: 'NewConferenceNetworkEn', query: { key: temp1,}};
  442. sessionStorage.setItem('pathReminder', JSON.stringify(rpath));
  443. if (this.$route.query) {
  444. localStorage.setItem("conferenceId", this.$route.query.key);
  445. }else{
  446. localStorage.setItem("conferenceId", temp1);
  447. }
  448. //验证用户是否登录
  449. this.$refs.loginTopEn.activeChange('NewConferenceNetworkEn',temp1);
  450. this.initData();
  451. this.getIntentions();
  452. this.meetingApply.unitCountryDcit = "";
  453. getDicts(
  454. "meeting_unit_type_dict_en, meeting_unit_type_dict, geidco_dept_dict, unit_country_dict, unit_country_dict_en"
  455. )
  456. .then((result) => {
  457. var data = result.data;
  458. if (data) {
  459. this.meetingUnitTypeDictEns = result.data[0] || [];
  460. this.meetingUnitTypeDicts = result.data[1] || [];
  461. this.invitationCodePrefix = result.data[2] || [];
  462. this.unitCountryDicts = result.data[3] || [];
  463. this.unitCountryDictEns = result.data[4] || [];
  464. if (this.unitCountryDictEns.length) {
  465. this.unitCountryDictEns.sort(function (a, b) {
  466. return a.value.charCodeAt() - b.value.charCodeAt();
  467. });
  468. }
  469. }
  470. })
  471. .then((res) => {
  472. getConfrenceDetail(localStorage.getItem("conferenceId")).then((res) => {
  473. this.baseInfo = res.data.basicInfo;
  474. // console.log('会议数据', res)
  475. // 邀请码集合
  476. this.invitationCodePrefix.forEach((item) => {
  477. this.invitationCodeArr.push(
  478. `${item.value}${res.data.basicInfo.meetingRand}`
  479. );
  480. });
  481. // console.log('邀请码集合', this.invitationCodeArr)
  482. });
  483. getMeetingApplyActivityInfos(localStorage.getItem("conferenceId"))
  484. .then((_res) => {
  485. console.log("_res", _res);
  486. this.gridData = _res.data.allMeetingActivitys || [];
  487. })
  488. .catch((err) => {
  489. this.gridData = [];
  490. });
  491. });
  492. this.getApplyHistoryInfos();
  493. },
  494. methods: {
  495. initData() {
  496. this.user = JSON.parse(window.localStorage.getItem("user"));
  497. },
  498. applyHistoryChanged(i) {
  499. Object.keys(this.applyHistoryInfo[i]).forEach((key) => {
  500. this.meetingApply[key] = this.applyHistoryInfo[i][key];
  501. });
  502. },
  503. //获取报名历史信息
  504. getApplyHistoryInfos() {
  505. this.applyHistorySelected = "";
  506. getOlApplyHistoryInfosByLoginAccount(this.$i18n.locale).then((res) => {
  507. this.applyHistoryInfo = res.data.olApplyHistoryInfos;
  508. console.log("ApplyHistoryInfos", res);
  509. });
  510. },
  511. getIntentions() {
  512. this.intentions ={
  513. isShowEnOnlineIntention: "Yes",
  514. isShowEnOnsiteIntention: "Yes",
  515. isShowZhOnlineIntention: "Yes",
  516. isShowZhOnsiteIntention: "Yes",
  517. };
  518. },
  519. momentDate(date) {
  520. // if (this.$i18n.locale == "zh") {
  521. // moment.locale("zh-cn");
  522. // return moment(date).format("YYYY MM DD, H:mm");
  523. // } else {
  524. moment.locale("en");
  525. return moment(date).format("lll");
  526. // }
  527. },
  528. checkRow(checkedData) {
  529. this.checkedIds = [];
  530. this.newChecked = [];
  531. const date = []
  532. checkedData.forEach((item) => {
  533. date.find(i=>{
  534. if(i===this.momentDate(item.activityStartTime)){
  535. let msgTxt = 'Kind Reminder: participants can only register for one parallel session. Hope you enjoy the conference.';
  536. this.$message({
  537. message: msgTxt,
  538. type:'error'
  539. })
  540. }
  541. })
  542. date.push(this.momentDate(item.activityStartTime))
  543. this.checkedIds.push(item.id)
  544. this.newChecked.push(item.activityStartTime)
  545. });
  546. },
  547. setSelect(row) {
  548. this.$refs.multipleTable.toggleRowSelection(row);
  549. },
  550. setSelectEn(row) {
  551. this.$refs.multipleTableEn.toggleRowSelection(row);
  552. },
  553. ContinueRegister() {
  554. clearInterval(this.timer);
  555. this.dialogVisible = false;
  556. this.btnKey = Math.random();
  557. // this.$refs.meetingApplyEn.resetFields();
  558. },
  559. loginTipsChange() {
  560. const that = this;
  561. this.num = 5;
  562. this.timer = setInterval(function () {
  563. if (that.num > 0) {
  564. that.num--;
  565. } else {
  566. clearInterval(that.timer);
  567. that.dialogVisible = false;
  568. that.toView("ConferenceDetail", that.$route.query.key);
  569. }
  570. }, 1000);
  571. },
  572. toView(router, json) {
  573. this.$router.push({ path: router, query: { key: json } });
  574. },
  575. formatDate(t) {
  576. if (!t) {
  577. return "";
  578. } else {
  579. var original = new Date(t);
  580. var year = original.getFullYear();
  581. var month = original.getMonth() + 1;
  582. var date = original.getDate();
  583. return year + "-" + month + "-" + date;
  584. }
  585. },
  586. submitForm(formName) {
  587. this.$refs[formName].validate((valid) => {
  588. if (!valid) {
  589. this.$message.error("请填写完整信息");
  590. return false;
  591. }
  592. this.save();
  593. });
  594. },
  595. submitFormEn(formName) {
  596. // alert(this.$route.params.key)
  597. this.$refs[formName].validate((valid) => {
  598. if (!valid) {
  599. this.$message.error("Please fill in the complete information");
  600. return false;
  601. }
  602. this.meetingApply.name = `${this.meetingApply.givenName} ${this.meetingApply.middleName} ${this.meetingApply.sumame}`;
  603. this.save();
  604. });
  605. },
  606. save: function () {
  607. var arr1=this.newChecked
  608. var arr2=arr1.sort()
  609. for(var i=0;i<arr2.length-1;i++){
  610. if(arr2[i]==arr2[i+1]){
  611. let msgTxt = 'Kind Reminder: participants can only register for one parallel session. Hope you enjoy the conference.';
  612. this.$message.error(msgTxt)
  613. return false
  614. }else{
  615. console.log('hello');
  616. }
  617. }
  618. // console.log("filmName:", this.meetingApply.filmName)
  619. this.meetingApply.applyWay = 'en';
  620. // console.log('this.meetingApply', this.meetingApply);
  621. // return
  622. this.submitHandler((token) => {
  623. registerOnline(
  624. JSON.stringify(this.meetingApply),
  625. token,
  626. this.checkedIds.join(",")
  627. )
  628. .then((result) => {
  629. console.log("result", result);
  630. if (result.status == "200") {
  631. if (this.user.umsUser.userUsertypeDict !== "2") {
  632. addIntegral("meeting_registration_successful", "10");
  633. addGrowth("meeting_registration_successful");
  634. }
  635. if (result.data.isRepeat) {
  636. let errorMsg = "The guest has registered, please do not fill in again.";
  637. this.$message.error(errorMsg);
  638. this.resetToken();
  639. } else {
  640. this.dialogVisible = true;
  641. this.resetToken();
  642. }
  643. }
  644. console.log("result", result);
  645. })
  646. .catch((error) => {
  647. this.resetToken();
  648. });
  649. });
  650. },
  651. },
  652. };
  653. </script>
  654. <style scoped>
  655. * {
  656. box-sizing: border-box;
  657. }
  658. .container-box {
  659. width: 1200px;
  660. margin: 10px auto;
  661. position: relative;
  662. }
  663. .bread-crumb {
  664. height: 40px;
  665. background: #fff;
  666. margin: 10px 0;
  667. }
  668. .content-box {
  669. width: 100%;
  670. box-sizing: border-box;
  671. padding: 60px 150px 20px 150px;
  672. background: #fff;
  673. }
  674. .content-item {
  675. padding-bottom: 20px;
  676. border-radius: 12px;
  677. overflow: hidden;
  678. }
  679. /deep/ .content-box .el-input__inner {
  680. border-top: none;
  681. border-left: none;
  682. border-right: none;
  683. border-radius: 0;
  684. }
  685. .submit-success {
  686. text-align: center;
  687. font-size: 20px;
  688. color: #999;
  689. }
  690. .submit-success p {
  691. margin: 0;
  692. }
  693. .submit-success .el-button {
  694. width: 150px;
  695. font-size: 20px;
  696. margin: 10px;
  697. }
  698. .down-load a {
  699. font-size: 28px;
  700. color: #49a2f2;
  701. text-decoration: none;
  702. }
  703. .down-load a:hover {
  704. color: #de551a;
  705. }
  706. /deep/ .el-dialog {
  707. display: flex;
  708. flex-direction: column;
  709. margin: 0 !important;
  710. position: absolute;
  711. top: 50%;
  712. left: 50%;
  713. transform: translate(-50%, -50%);
  714. max-height: calc(100% - 30px);
  715. max-width: calc(100% - 30px);
  716. }
  717. /deep/ .el-dialog .el-dialog__body {
  718. flex: 1;
  719. overflow: auto;
  720. }
  721. .active-grid p {
  722. margin: 0;
  723. }
  724. /deep/ .el-table th > .cell {
  725. padding-left: 14px;
  726. }
  727. .apply-history {
  728. position: absolute;
  729. top: 60px;
  730. right: 20px;
  731. }
  732. .apply-history .el-select {
  733. width: 300px;
  734. }
  735. </style>