Register.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856
  1. <script setup lang="ts">
  2. //引入MD5
  3. import { md5 } from 'js-md5'
  4. import { getPositionApi, userGroupApi, userRegisterApi } from '@/api/login';
  5. import CpmdHeader from '@/components/CpmdHeader.vue';
  6. import CpmdFooter from '@/components/CpmdFooter.vue'
  7. import { ElMessage } from 'element-plus';
  8. import { onMounted, onUnmounted, reactive, ref } from 'vue'
  9. import { useRoute, useRouter } from 'vue-router'
  10. // 加一个锁表示不能重复点击
  11. const isLock = ref<boolean>(false)
  12. //账号角色
  13. const roleType = ref<string>('2')
  14. //定义账号
  15. const account = ref<string>('')
  16. //定义密码
  17. const password = ref<string>('')
  18. //定义确认密码
  19. const comPassword = ref<string>('')
  20. //定义所选组织架构ID
  21. const group = ref<string>('')
  22. //定义组织架构的名字
  23. const groupName = ref<string>('')
  24. //定义用户姓名
  25. const name = ref('')
  26. const position = ref('')
  27. //选择性别
  28. const sex = ref('')
  29. //定义所选组织架构的数据
  30. const groupData = ref([])
  31. //定义临时变量保存平铺的数据
  32. const ppData = ref<any>([])
  33. const listPosition = ref<any>([])
  34. //此处应该是唯一的报告ID
  35. const id = ref<string>('')
  36. //持久化设置 菜单状态
  37. //刚进入页面就将高度设置为页面需要的
  38. onMounted(() => {
  39. userGroupFun()
  40. getPosition()
  41. })
  42. //调用查询接口职务的接口
  43. const getPosition = async () => {
  44. let res: any = await getPositionApi()
  45. listPosition.value = res.data
  46. }
  47. //跳转到注册页面的方法
  48. const router = useRouter()
  49. const loginFun = () => {
  50. router.push({ name: 'login' })
  51. }
  52. const validatePassword = (password: string) => {
  53. const regex = /^[a-zA-Z0-9!@#~$%^&*(),.?":{}|<>]+$/;
  54. return regex.test(password);
  55. }
  56. //注册方法
  57. const registerFun = async () => {
  58. if (isLock.value) {
  59. return
  60. }
  61. isLock.value = true
  62. //点击注册的方法
  63. //判断各个字段是否都在---或是否都为空
  64. if (group.value == '') {
  65. ElMessage({
  66. message: '请选择组织架构',
  67. type: 'warning'
  68. })
  69. isLock.value = false
  70. return
  71. }
  72. if (roleType.value == '1') {
  73. if (position.value == '') {
  74. ElMessage({
  75. message: '请选择职务',
  76. type: 'warning'
  77. })
  78. isLock.value = false
  79. return
  80. }
  81. }
  82. if (account.value == '') {
  83. ElMessage({
  84. message: '请输入工号',
  85. type: 'warning'
  86. })
  87. isLock.value = false
  88. return
  89. }
  90. if (!/^[A-Za-z0-9]{3,18}$/.test(account.value)) {
  91. ElMessage({
  92. message: '工号只允许输入数字和英文且长度为3到18位',
  93. type: 'warning'
  94. })
  95. isLock.value = false
  96. return
  97. }
  98. if (name.value == '') {
  99. ElMessage({
  100. message: '请填写姓名',
  101. type: 'warning'
  102. })
  103. isLock.value = false
  104. return
  105. }
  106. if (name.value.length > 20) {
  107. ElMessage({
  108. message: '姓名不能超过20位',
  109. type: 'warning'
  110. })
  111. isLock.value = false
  112. return
  113. }
  114. if (sex.value == '') {
  115. ElMessage({
  116. message: '请选择性别',
  117. type: 'warning'
  118. })
  119. isLock.value = false
  120. return
  121. }
  122. if (password.value == '') {
  123. ElMessage({
  124. message: '请填写密码',
  125. type: 'warning'
  126. })
  127. isLock.value = false
  128. return
  129. }
  130. if (!validatePassword(password.value)) {
  131. ElMessage({
  132. message: '密码规则为数字或英文或字符(@#~$%.,),可任意组合。',
  133. type: 'warning'
  134. })
  135. isLock.value = false
  136. return
  137. }
  138. if (password.value.length < 6 || password.value.length > 18) {
  139. ElMessage({
  140. message: '密码为6到18位',
  141. type: 'warning'
  142. })
  143. isLock.value = false
  144. return
  145. }
  146. if (comPassword.value == '') {
  147. ElMessage({
  148. message: '请填写确认密码',
  149. type: 'warning'
  150. })
  151. isLock.value = false
  152. return
  153. }
  154. if (!validatePassword(comPassword.value)) {
  155. ElMessage({
  156. message: '密码规则为数字或英文或字符(@#~$%.,),可任意组合。',
  157. type: 'warning'
  158. })
  159. isLock.value = false
  160. return
  161. }
  162. if (comPassword.value != password.value) {
  163. ElMessage({
  164. message: '两次密码输入不一致',
  165. type: 'warning'
  166. })
  167. isLock.value = false
  168. return
  169. }
  170. queryOrgName()
  171. //开始组织参数
  172. let params = {
  173. orgNo: group.value,
  174. orgName: groupName.value,
  175. userNo: account.value,
  176. userName: name.value,
  177. gender: sex.value,
  178. password: md5(password.value),
  179. position: roleType.value == '2' ? -1 : parseInt(position.value),
  180. roleType: roleType.value
  181. }
  182. //如果都通过开始调用方法注册的方法
  183. const res: any = await userRegisterApi(params)
  184. isLock.value = false
  185. if (res.code == 200) {
  186. ElMessage({
  187. message: res.msg,
  188. type: 'success'
  189. })
  190. // 跳转到登录页面吧
  191. router.push({ name: 'login' })
  192. //如果注册成功过得话
  193. } else {
  194. ElMessage({
  195. message: res.msg,
  196. type: 'error'
  197. })
  198. }
  199. }
  200. //根据id查询组织架构名字的方法
  201. const queryOrgName = () => {
  202. for (let i = 0; i < ppData.value.length; i++) {
  203. if (group.value == ppData.value[i].orgNo) {
  204. groupName.value = ppData.value[i].orgName
  205. }
  206. }
  207. }
  208. //-----------------组织架构处理方法start---------------------
  209. //获取组织架构list
  210. const userGroupFun = async () => {
  211. let res: any = await userGroupApi()
  212. //数据的得到后新增数据格式的value字段 和id一样 新增数据格式的label 与name一致
  213. //增加字段的方法
  214. //先判断返回的是否有数据
  215. if (res.data.length > 0) {
  216. //判断当前是 教师还是学生
  217. let list = roleTypeFilter(res.data)
  218. let resAdd = addPro(list)
  219. ppData.value = JSON.parse(JSON.stringify(resAdd))
  220. let forRes = arrToTree(resAdd)
  221. let resultRes = deleteChildren(forRes)
  222. groupData.value = resultRes
  223. } else {
  224. groupData.value = []
  225. }
  226. //修改数据的字段
  227. //只取当前的id字段
  228. //得到值后开始组装数据
  229. }
  230. //过滤数据进行测试
  231. const roleTypeFilter = (val: any) => {
  232. let data = JSON.parse(JSON.stringify(val))
  233. let list = []
  234. if (roleType.value == '1') {
  235. list = data.filter((item: any) => {
  236. return item.orgNo.length != 12 || (item.orgNo.length == 12 && item.extend != '-1')
  237. })
  238. } else
  239. if (roleType.value == '2') {
  240. list = data.filter((item: any) => {
  241. return (item.orgNo.length != 12) || item.orgNo.length == 12 && item.extend == '-1'
  242. })
  243. }
  244. return list
  245. }
  246. //给数据增加两个字段的方法
  247. const addPro = (val: any) => {
  248. let data = JSON.parse(JSON.stringify(val))
  249. for (let i = 0; i < val.length; i++) {
  250. data[i].value = val[i].orgNo
  251. data[i].label = val[i].orgName
  252. }
  253. return data
  254. }
  255. //非递归方式:将平铺数据转换为树形结构数据
  256. const arrToTree = (arr: any) => {
  257. let data = arr.filter((item: any) => {
  258. item.children = arr.filter((e: any) => {
  259. return item.orgNo === e.parentOrgNo
  260. })
  261. return !item.parentOrgNo
  262. })
  263. return data;
  264. }
  265. //去除转换树形结构数据后存在的空children
  266. const deleteChildren = (arr: any) => {
  267. let childs = arr;
  268. for (let i = childs.length; i--; i > 0) {
  269. if (childs[i].children) {
  270. if (childs[i].children.length) {
  271. deleteChildren(childs[i].children);
  272. } else {
  273. delete childs[i].children;
  274. }
  275. }
  276. }
  277. return arr;
  278. }
  279. //-----------------组织架构处理方法结束---------------------
  280. //轮旋切换页面的方法
  281. //退出页面销毁 方法
  282. onUnmounted(() => {
  283. })
  284. const roleTypeChange = (val: string) => {
  285. //切换角色时
  286. //当角色是2时要筛选角色是教师的组织架构
  287. //当角色是1时要筛选角色是学生的组织架构
  288. //清空选项
  289. group.value = ''
  290. userGroupFun()
  291. }
  292. </script>
  293. <template>
  294. <div class="home_header_out">
  295. <div class=" home_header_inner">
  296. <CpmdHeader />
  297. </div>
  298. <div class="leave_message">
  299. <!-- <img class="img" src="../assets/zs/community.png" alt=""> -->
  300. <div class="font_blue"> 用户注册 </div>
  301. <img width="80px" style="position: absolute;left: 100px;bottom: 0;z-index: 11;"
  302. src="../assets/scale/guo.png" alt="">
  303. </div>
  304. <div class="kply">
  305. <div class="kply_inner">
  306. <div class="login_top">
  307. <span class="des">用户注册</span>
  308. </div>
  309. <div style="padding: 10px 50px;">
  310. <!-- <div style="margin-top:20px;display: flex;">
  311. <div style="flex: 1;">
  312. <div class="user_account" style="width: 100%;">用户类型:</div>
  313. <div class="input_cus" style="width: 100%;"> <el-radio-group size="large"
  314. @change="roleTypeChange" v-model="roleType">
  315. <el-radio value="2" size="large">我是教师</el-radio>
  316. <el-radio value="1" size="large">我是学生</el-radio>
  317. </el-radio-group>
  318. </div>
  319. </div>
  320. </div> -->
  321. <div style="margin-top:20px">
  322. <div class="user_account">所属组织架构:</div>
  323. <div class="input_cus">
  324. <el-tree-select v-model="group" placeholder="请选择组织架构" :data="groupData" filterable
  325. style="width:100%" />
  326. </div>
  327. </div>
  328. <div style="margin-top:20px;display: flex;">
  329. <div style="flex: 1;" v-show="roleType == '1'">
  330. <div class="user_account">职务:</div>
  331. <div class="input_cus">
  332. <el-select v-model="position" placeholder="请选择职务" size="large">
  333. <el-option v-for="item in listPosition" :key="item.paramValue"
  334. :label="item.paramName" :value="item.paramValue" />
  335. </el-select>
  336. </div>
  337. </div>
  338. <div style="flex: 1;display: flex;flex-direction: column;justify-content: end;">
  339. <div class="user_account"
  340. :style="{ width: roleType == '1' ? '90%' : '100%', marginLeft: roleType == '1' ? '10%' : '0%' }">
  341. 工号:</div>
  342. <div class="input_cus"> <el-input v-model="account"
  343. :style="{ width: roleType == '1' ? '90%' : '100%', marginLeft: roleType == '1' ? '10%' : '0%' }"
  344. placeholder="请输入工号" />
  345. </div>
  346. </div>
  347. </div>
  348. <div style="margin-top:20px;display: flex;">
  349. <div style="flex: 1;">
  350. <div class="user_account">姓名:</div>
  351. <div class="input_cus"> <el-input v-model="name" style="width: 90%;" placeholder="请输入姓名" />
  352. </div>
  353. </div>
  354. <div style="flex: 1;">
  355. <div class="user_account" style="width: 90%;margin-left:10%">性别:</div>
  356. <div class="input_cus" style="width: 90%;margin-left:10%"> <el-radio-group size="large"
  357. v-model="sex">
  358. <el-radio value="1" size="large">男</el-radio>
  359. <el-radio value="0" size="large">女</el-radio>
  360. </el-radio-group>
  361. </div>
  362. </div>
  363. </div>
  364. <div style="margin-top:20px">
  365. <div class="user_account">密码:</div>
  366. <div><el-input v-model="password" type="password" style="width: 100%" placeholder="请输入密码"
  367. show-password />
  368. </div>
  369. </div>
  370. <div style="margin-top:20px">
  371. <div class="user_account">确认密码:</div>
  372. <div><el-input v-model="comPassword" type="password" style="width: 100%" placeholder="请输入密码"
  373. show-password />
  374. </div>
  375. </div>
  376. <div class="go_register">
  377. <span @click="loginFun">
  378. 已有账号,去登录
  379. </span>
  380. </div>
  381. <div class="start_button_out">
  382. <div @click="registerFun" class="start_button_self">注册</div>
  383. </div>
  384. </div>
  385. </div>
  386. </div>
  387. </div>
  388. <div class="home_footer_out">
  389. <CpmdFooter />
  390. </div>
  391. </template>
  392. <style></style>
  393. <style lang="scss" scoped>
  394. .home_footer_out {
  395. width: 100%;
  396. background-color: #1F2761;
  397. }
  398. :deep(.el-input__wrapper) {
  399. align-items: center;
  400. border-radius: 0px !important;
  401. border: 1px solid #4D6AD5 !important;
  402. padding-left: 20px;
  403. box-shadow: none
  404. }
  405. :deep(.el-input__wrapper .is-focus) {
  406. box-shadow: none
  407. }
  408. :deep(.el-input__inner) {
  409. height: 36px;
  410. font-size: 16px;
  411. }
  412. :deep(.el-select__wrapper.is-hovering:not(.is-focused)) {
  413. box-shadow: none !important
  414. }
  415. :deep(.el-select__placeholder) {
  416. color: var(--el-input-text-color, var(--el-text-color-regular));
  417. position: absolute;
  418. top: 50%;
  419. transform: translateY(-50%);
  420. width: 100%;
  421. line-height: 30px;
  422. font-size: 16px;
  423. }
  424. :deep(.el-select__selection) {
  425. align-items: center;
  426. display: flex;
  427. flex: 1;
  428. flex-wrap: wrap;
  429. gap: 6px;
  430. min-width: 0;
  431. position: relative;
  432. height: 30px;
  433. }
  434. :deep(.el-select__wrapper) {
  435. border-radius: 0px;
  436. border: 1px solid #4D6AD5;
  437. padding-left: 20px;
  438. height: 40px;
  439. box-shadow: none;
  440. }
  441. :deep(.el-select__input) {
  442. -webkit-appearance: none;
  443. -moz-appearance: none;
  444. appearance: none;
  445. background-color: transparent;
  446. border: none;
  447. color: var(--el-select-multiple-input-color);
  448. font-family: inherit;
  449. font-size: 20px;
  450. height: 36px;
  451. max-width: 100%;
  452. width: 100% !important;
  453. outline: none;
  454. padding: 0;
  455. }
  456. :deep(.el-tree) {
  457. --el-tree-node-content-height: 53px;
  458. --el-tree-node-hover-bg-color: var(--el-fill-color-light);
  459. --el-tree-text-color: var(--el-text-color-regular);
  460. --el-tree-expand-icon-color: var(--el-text-color-placeholder);
  461. background: var(--el-fill-color-blank);
  462. color: var(--el-tree-text-color);
  463. cursor: default;
  464. font-size: 27px !important;
  465. position: relative;
  466. }
  467. :deep(.el-radio.el-radio--large .el-radio__inner) {
  468. height: 20px;
  469. width: 20px;
  470. }
  471. :deep(.el-radio.el-radio--large .el-radio__label) {
  472. font-size: 16px;
  473. }
  474. :deep(.el-radio.el-radio--large) {
  475. height: 36px;
  476. }
  477. :deep(.el-radio__input.is-checked .el-radio__inner) {
  478. background: #4D6AD5;
  479. border-color: #B2F2D2;
  480. }
  481. :deep(.el-radio__input.is-checked+.el-radio__label) {
  482. // color: #48D68E;
  483. }
  484. .home_header_out {
  485. flex: 1;
  486. // position: relative;
  487. padding-bottom: 60px;
  488. width: 100%;
  489. min-width: 1200px;
  490. // background-image: url('../assets/home/bg_ty.png');
  491. background-repeat: no-repeat;
  492. background-size: contain;
  493. // background-color: #B3F1DA; //估计是需要动态
  494. // scroll-snap-align: start;
  495. //获取屏幕宽度home_header_out 这个div的宽度--然后宽度*1000再除1920即为当前div的宽度
  496. .home_header_inner {
  497. min-height: 1;
  498. left: 0;
  499. right: 0;
  500. margin: auto;
  501. // height: 100px;
  502. width: 100%;
  503. .report_top {
  504. width: 650px;
  505. // width: 860px; 210
  506. margin-left: 285px;
  507. margin-top: 20px;
  508. display: flex;
  509. flex-direction: row;
  510. justify-content: space-between;
  511. align-items: center;
  512. margin: auto;
  513. .xlts_img {
  514. width: 200px;
  515. }
  516. .report_jt {
  517. display: flex;
  518. flex-direction: column;
  519. font-size: 20px;
  520. font-weight: 700;
  521. letter-spacing: 3px;
  522. }
  523. }
  524. }
  525. .leave_message {
  526. position: relative;
  527. left: 0;
  528. right: 0;
  529. margin: auto;
  530. width: 650px;
  531. margin-bottom: 20px;
  532. margin-top: 20px;
  533. .font_blue {
  534. position: relative;
  535. color: #D31E1B;
  536. font-weight: 700;
  537. font-size: 22px;
  538. font-family: 'Rammetto One-Regular';
  539. padding-top: 30px;
  540. z-index: 10;
  541. background: url(../assets/zs/register1.png) no-repeat;
  542. background-size: auto 50px;
  543. }
  544. }
  545. .kply {
  546. width: 100%;
  547. margin-top: 20px;
  548. // background-color: #FAFAFA;
  549. .kply_inner {
  550. // padding: 20px 20px;
  551. left: 0;
  552. right: 0;
  553. margin: auto;
  554. width: 650px;
  555. min-height: 500px;
  556. background-color: #ffffff;
  557. border-radius: 5px;
  558. box-shadow: 0px 4px 32px 0px rgba(0, 0, 0, 0.17);
  559. .login_top {
  560. background-color: #4D6AD5;
  561. line-height: 50px;
  562. .des {
  563. color: #ffffff;
  564. font-weight: 700;
  565. margin-left: 50px;
  566. // background-image: url('../assets/zs/login_line.png');
  567. background-repeat: no-repeat;
  568. background-size: contain;
  569. padding-bottom: 6px;
  570. background-position: bottom;
  571. }
  572. }
  573. .user_account {
  574. font-size: 18px;
  575. // line-height: 70px;
  576. margin-bottom: 10px;
  577. letter-spacing: 5px;
  578. }
  579. .start_button_out {
  580. margin-top: 40px;
  581. margin-bottom: 20px;
  582. display: flex;
  583. flex-direction: row;
  584. justify-content: center;
  585. .start_button_self {
  586. cursor: pointer;
  587. // width: 100px;
  588. border-radius: 4px;
  589. border: 1px solid;
  590. color: #ffffff;
  591. background-color: #4D6AD5;
  592. margin-right: 20px;
  593. padding: 10px 50px;
  594. cursor: pointer;
  595. display: flex;
  596. align-items: center;
  597. font-size: 16px;
  598. }
  599. }
  600. }
  601. .go_register {
  602. text-align: right;
  603. margin-top: 20px;
  604. span {
  605. font-weight: 700;
  606. color: #4D6AD5;
  607. cursor: pointer;
  608. font-size: 16px;
  609. }
  610. }
  611. }
  612. }
  613. .home_mid {
  614. // background-color: blanchedalmond;
  615. width: 1200px;
  616. left: 0;
  617. right: 0;
  618. margin: auto;
  619. margin-top: 40px;
  620. // position: relative;
  621. .kepu_title {
  622. text-align: center;
  623. font-size: 50px;
  624. color: #111111;
  625. line-height: 95px;
  626. // width: 100%;
  627. // left: 0;
  628. // right: 0;
  629. // margin: auto
  630. }
  631. .kepu_title_sub {
  632. margin-top: 30px;
  633. text-align: center;
  634. font-size: 28px;
  635. color: #48D68E;
  636. line-height: 26px;
  637. }
  638. .man1_group {
  639. margin-top: 60px;
  640. height: 100%;
  641. display: flex;
  642. .man1 {
  643. position: relative;
  644. width: 327px;
  645. // height: 100%;
  646. // height: 100%
  647. .man1_img {
  648. position: absolute;
  649. bottom: 0;
  650. /* bottom: 0px; */
  651. /* height: auto; */
  652. width: 100%;
  653. left: 100px
  654. }
  655. }
  656. .des {
  657. border: #48D68E solid 5px;
  658. border-radius: 40px;
  659. padding: 20px;
  660. letter-spacing: 6px;
  661. flex: 1;
  662. .des_inner {
  663. border: 1px dashed #48D68E;
  664. border-radius: 40px;
  665. padding-bottom: 40px;
  666. padding-top: 30px;
  667. padding-left: 100px;
  668. padding-right: 20px;
  669. letter-spacing: 6px;
  670. font-weight: normal;
  671. font-size: 24px;
  672. color: #333333;
  673. line-height: 40px;
  674. }
  675. }
  676. }
  677. .man2_group {
  678. margin-top: 60px;
  679. height: 100%;
  680. display: flex;
  681. .man2 {
  682. position: relative;
  683. width: 327px;
  684. // height: 100%;
  685. // height: 100%
  686. .man2_img {
  687. position: absolute;
  688. bottom: 0;
  689. /* bottom: 0px; */
  690. /* height: auto; */
  691. width: 100%;
  692. left: -100px
  693. }
  694. }
  695. .des2 {
  696. border: #48D68E solid 5px;
  697. border-radius: 40px;
  698. padding: 20px;
  699. letter-spacing: 6px;
  700. flex: 1;
  701. .des2_inner {
  702. border: 1px dashed #48D68E;
  703. border-radius: 40px;
  704. padding-bottom: 40px;
  705. padding-top: 30px;
  706. padding-left: 20px;
  707. padding-right: 100px;
  708. letter-spacing: 6px;
  709. font-weight: normal;
  710. font-size: 24px;
  711. color: #333333;
  712. line-height: 40px;
  713. }
  714. }
  715. }
  716. .get_more {
  717. text-align: center;
  718. img {
  719. width: 300px;
  720. margin-top: 60px;
  721. margin-bottom: 60px;
  722. }
  723. }
  724. }
  725. // .home_footer_out {
  726. // width: 100%;
  727. // background-color: #000000;
  728. // }</style>