You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

registerAgencySection.vue 17KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519
  1. <template>
  2. <main id="main" style="padding-top: 10px; padding-bottom: 50px;">
  3. <div class="form">
  4. <div v-if="boolMessage" class="row">
  5. <div class="col">
  6. <alert :text="'Register Success!'" :type="'SUCCESS'" />
  7. </div>
  8. </div>
  9. <div v-if="boolValidationError" class="row">
  10. <div class="col">
  11. <alert :text="errorMessage" :type="errorOccurred" />
  12. </div>
  13. </div>
  14. <h3 class="card-title text-center">Agency Details</h3>
  15. <div class="row my-3">
  16. <div class="col-sm-12 col-md-6">
  17. <div class="form-group">
  18. <float-label label="Agency Name" style="width: 100%;">
  19. <input
  20. type="text"
  21. id="inputAgencyName"
  22. v-model="registerAgency.name"
  23. class="form-control uniInput"
  24. v-bind:class="{
  25. 'is-valid': registerAgency.name,
  26. 'is-invalid':
  27. !requiredField(registerAgency.name) && agencyNameLoad,
  28. }"
  29. v-on:keyup="agencyNameLoad = true"
  30. v-on:blur="agencyNameLoad = true"
  31. placeholder="Agency Name"
  32. />
  33. <div class="invalid-feedback">Agency Name is required!</div>
  34. </float-label>
  35. </div>
  36. </div>
  37. <div class="col-sm-12 col-md-6">
  38. <div class="form-group">
  39. <float-label label="EAAB FFC Number" style="width: 100%;">
  40. <input
  41. type="text"
  42. id="inputAgencyNumber"
  43. v-model="registerAgency.eaabeffcNumber"
  44. class="form-control uniInput"
  45. v-bind:class="{
  46. 'is-valid': registerAgency.eaabeffcNumber,
  47. 'is-invalid':
  48. !requiredField(registerAgency.eaabeffcNumber) &&
  49. agencyNumberLoad,
  50. }"
  51. v-on:keyup="agencyNumberLoad = true"
  52. v-on:blur="agencyNumberLoad = true"
  53. placeholder="EAAB FFC Number"
  54. />
  55. <div class="invalid-feedback">Agency Number is required!</div>
  56. </float-label>
  57. </div>
  58. </div>
  59. </div>
  60. <div class="row my-3">
  61. <div class="col-sm-12">
  62. <div class="form-group">
  63. <float-label
  64. label="Company Registration Number"
  65. style="width: 100%;"
  66. >
  67. <input
  68. type="text"
  69. id="inputAgencyCompanyRegistration"
  70. v-model="registerAgency.companyRegNumber"
  71. class="form-control uniInput"
  72. v-bind:class="{
  73. 'is-valid': registerAgency.companyRegNumber,
  74. 'is-invalid':
  75. !requiredField(registerAgency.companyRegNumber) &&
  76. companyRegNumberLoad,
  77. }"
  78. v-on:keyup="companyRegNumberLoad = true"
  79. v-on:blur="companyRegNumberLoad = true"
  80. placeholder="Company Registration Number"
  81. />
  82. <div class="invalid-feedback">
  83. Company Registration Number is required!
  84. </div>
  85. </float-label>
  86. </div>
  87. </div>
  88. </div>
  89. <h3 class="card-title text-center">Agency Administrator</h3>
  90. <hr />
  91. <div class="row my-3">
  92. <div class="col-sm-12 col-md-6">
  93. <div class="form-group">
  94. <float-label label="Name" style="width: 100%;">
  95. <input
  96. type="text"
  97. id="inputAgencyAdmin"
  98. v-model="registerAgency.user.name"
  99. class="form-control uniInput my-3"
  100. v-bind:class="{
  101. 'is-valid': registerAgency.user.name,
  102. 'is-invalid':
  103. !requiredField(registerAgency.user.name) &&
  104. agencyAdminNameLoad,
  105. }"
  106. v-on:keyup="agencyAdminNameLoad = true"
  107. v-on:blur="agencyAdminNameLoad = true"
  108. placeholder="Name"
  109. />
  110. <div class="invalid-feedback">
  111. Administrator Name is required!
  112. </div>
  113. </float-label>
  114. </div>
  115. <div class="form-group">
  116. <float-label label="Surname" style="width: 100%;">
  117. <input
  118. type="text"
  119. id="inputAgencySurname"
  120. v-model="registerAgency.user.surname"
  121. class="form-control uniInput my-3"
  122. v-bind:class="{
  123. 'is-valid': registerAgency.user.surname,
  124. 'is-invalid':
  125. !requiredField(registerAgency.user.surname) &&
  126. agencySurnameLoad,
  127. }"
  128. v-on:keyup="agencySurnameLoad = true"
  129. v-on:blur="agencySurnameLoad = true"
  130. placeholder="Surname"
  131. />
  132. <div class="invalid-feedback">
  133. Administrator Surname is required!
  134. </div>
  135. </float-label>
  136. </div>
  137. <div class="form-group">
  138. <float-label label="Email" style="width: 100%;">
  139. <input
  140. type="email"
  141. id="inputAgencyEmail"
  142. v-model="registerAgency.user.email"
  143. v-bind:class="{
  144. 'is-valid': registerAgency.user.email,
  145. 'is-invalid':
  146. !validEmail(registerAgency.user.email) && agencyEmailLoad,
  147. }"
  148. v-on:keyup="agencyEmailLoad = true"
  149. v-on:blur="agencyEmailLoad = true"
  150. class="form-control uniInput my-3"
  151. placeholder="Email"
  152. />
  153. <div class="invalid-feedback">Valid email is required!</div>
  154. </float-label>
  155. </div>
  156. </div>
  157. <div class="col-sm-12 col-md-6">
  158. <div class="form-group">
  159. <float-label label="Cellphone Number" style="width: 100%;">
  160. <input
  161. type="text"
  162. id="inputAgencyCellphone"
  163. v-model="registerAgency.user.cellNumber"
  164. class="form-control uniInput my-3"
  165. v-bind:class="{
  166. 'is-valid': registerAgency.user.cellNumber,
  167. 'is-invalid':
  168. !requiredField(
  169. validPhoneNumber(registerAgency.user.cellNumber),
  170. ) && cellNumberLoad,
  171. }"
  172. v-on:keyup="agencyCellNumberLoad = true"
  173. v-on:blur="agencyCellNumberLoad = true"
  174. placeholder="Cellphone Number"
  175. />
  176. <div class="invalid-feedback">Cell number is required!</div>
  177. </float-label>
  178. </div>
  179. <div class="form-group">
  180. <float-label label="Landline Number" style="width: 100%;">
  181. <input
  182. type="text"
  183. id="inputAgencyLandLine"
  184. v-model="registerAgency.user.telephone"
  185. class="form-control uniInput"
  186. v-bind:class="{
  187. 'is-valid':
  188. registerAgency.user.telephone &&
  189. validPhoneNumber(registerAgency.user.telephone),
  190. 'is-invalid':
  191. registerAgency.user.telephone &&
  192. !validPhoneNumber(registerAgency.user.telephone),
  193. }"
  194. placeholder="Landline Number"
  195. />
  196. </float-label>
  197. </div>
  198. </div>
  199. </div>
  200. <hr />
  201. <div class="row my-3">
  202. <div class="col-sm-12">
  203. <div class="form-group">
  204. <float-label label="Username" style="width: 100%;">
  205. <input
  206. type="text"
  207. id="inputAgencyUsername"
  208. v-model="registerAgency.user.username"
  209. class="form-control uniInput"
  210. v-bind:class="{
  211. 'is-valid': registerAgency.user.username,
  212. 'is-invalid':
  213. !requiredField(registerAgency.user.username) &&
  214. agencyusernameLoad,
  215. }"
  216. v-on:keyup="agencyusernameLoad = true"
  217. v-on:blur="agencyusernameLoad = true"
  218. placeholder="Username"
  219. />
  220. <div class="invalid-feedback">Username is required!</div>
  221. </float-label>
  222. </div>
  223. </div>
  224. </div>
  225. <div class="row my-3">
  226. <div class="col-sm-12 col-md-6">
  227. <div class="form-group">
  228. <float-label label="Password" style="width: 100%;">
  229. <input
  230. type="password"
  231. placeholder="Password"
  232. v-model="registerAgency.user.password"
  233. id="inputAgencyPassword uniInput"
  234. class="form-control uniInput"
  235. v-bind:class="{
  236. 'is-valid': registerAgency.user.password,
  237. 'is-invalid':
  238. !requiredField(registerAgency.user.password) &&
  239. agencypasswordLoad,
  240. }"
  241. v-on:keyup="agencypasswordLoad = true"
  242. v-on:blur="agencypasswordLoad = true"
  243. />
  244. <div class="invalid-feedback">Password is required!</div>
  245. </float-label>
  246. </div>
  247. </div>
  248. <div class="col">
  249. <div class="form-group">
  250. <float-label label="Confirm Password" style="width: 100%;">
  251. <input
  252. type="password"
  253. placeholder="Confirm Password"
  254. v-model="registerAgency.user.confirm"
  255. id="inputAgencyPasswordConfirm"
  256. class="form-control uniInput"
  257. v-bind:class="{
  258. 'is-valid': registerAgency.user.confirm,
  259. 'is-invalid':
  260. !validConfirm(registerAgency.user.confirm) &&
  261. agencyconfirmLoad,
  262. }"
  263. v-on:keyup="agencyconfirmLoad = true"
  264. v-on:blur="agencyconfirmLoad = true"
  265. />
  266. <div class="invalid-feedback">
  267. Password and Confirm password must be the same!
  268. </div>
  269. </float-label>
  270. </div>
  271. </div>
  272. </div>
  273. <div class="row">
  274. <div class="col">
  275. <label for="agencytc">
  276. <router-link to="/termsConditionsView">
  277. Terms & Conditions
  278. </router-link>
  279. </label>
  280. <input
  281. name="agencytc"
  282. type="checkbox"
  283. class="ml-3 mt-2"
  284. v-model="registerAgency.user.acceptedTerms"
  285. />
  286. </div>
  287. </div>
  288. <button
  289. v-if="registerAgency.user.acceptedTerms"
  290. class="btn-white-border"
  291. v-on:click="SubmitData()"
  292. type="submit"
  293. >
  294. SUBMIT
  295. </button>
  296. <button
  297. :data-target="'#myModalAgency'"
  298. data-toggle="modal"
  299. @click="navigate()"
  300. class="btn-white-border mb-5"
  301. style="float: right;"
  302. type="submit"
  303. >
  304. Cancel
  305. </button>
  306. <button
  307. hidden
  308. :data-target="'#myModalAgency'"
  309. data-toggle="modal"
  310. ref="dataToggle"
  311. ></button>
  312. </div>
  313. </main>
  314. </template>
  315. <script>
  316. /* eslint-disable */
  317. import { mapState, mapActions } from 'vuex'
  318. import carousel from 'vue-owl-carousel'
  319. import alert from '../shared/alert'
  320. import Log from '../../assets/Log'
  321. export default {
  322. components: {
  323. carousel,
  324. alert,
  325. },
  326. props: {
  327. RegisterHeader: { type: String, default: undefined },
  328. },
  329. name: 'Agency',
  330. data() {
  331. return {
  332. isPasswordShown: 'password',
  333. selectItems: [{ text: 'password', value: 0 }],
  334. boolMessage: false,
  335. boolValidationError: false,
  336. showPassword: false,
  337. agencyNameLoad: false,
  338. agencyNumberLoad: false,
  339. companyRegNumberLoad: false,
  340. agencyAdminNameLoad: false,
  341. agencySurnameLoad: false,
  342. agencyEmailLoad: false,
  343. agencyCellNumberLoad: false,
  344. agencyusernameLoad: false,
  345. agencypasswordLoad: false,
  346. agencyconfirmLoad: false,
  347. errorOccurred: '',
  348. errorMessage: '',
  349. }
  350. },
  351. computed: {
  352. ...mapState('register', ['registerAgency']),
  353. Header() {
  354. return this.RegisterHeader
  355. ? 'Agency Administrator Details'
  356. : 'Private Individual'
  357. },
  358. },
  359. methods: {
  360. ...mapActions('register', [
  361. 'getAgency',
  362. 'saveAgency',
  363. 'updateAgency',
  364. 'clearAgency',
  365. ]),
  366. navigate() {
  367. if (Log.getUser().role !== 'Super Admin') {
  368. this.$router.push('/user/login')
  369. }
  370. },
  371. togglePassword() {
  372. this.showPassword = true
  373. this.isPasswordShown = 'text'
  374. },
  375. passwordToggled() {
  376. this.showPassword = false
  377. this.isPasswordShown = 'password'
  378. },
  379. SubmitData() {
  380. this.boolValidationError = false
  381. this.boolMessage = false
  382. if (this.validatePage()) {
  383. this.saveAgency(this.registerAgency)
  384. .then(() => {
  385. this.boolMessage = true
  386. console.log('registerAgency true')
  387. console.log(Log.getUser().role)
  388. setTimeout(() => {
  389. if (Log.getUser().role !== 'Super Admin') {
  390. this.$router.push('/user/login')
  391. } else {
  392. this.$refs.dataToggle.click()
  393. this.$router.go()
  394. }
  395. }, 500)
  396. })
  397. .catch((err) => {
  398. this.boolValidationError = true
  399. this.errorOccurred = 'ERROR'
  400. this.errorMessage = 'Server Error: CONNECTION_REFUSED'
  401. if (err) {
  402. if (err.data.message) {
  403. this.errorMessage = err.data.message
  404. } else {
  405. this.errorMessage = 'Error.'
  406. }
  407. }
  408. })
  409. }
  410. },
  411. Close() {
  412. this.$router.push('/user/login')
  413. },
  414. validatePage: function () {
  415. console.log('validatePage')
  416. if (
  417. this.registerAgency.name &&
  418. this.registerAgency.eaabeffcNumber &&
  419. this.registerAgency.companyRegNumber &&
  420. this.registerAgency.user.name &&
  421. this.registerAgency.user.surname &&
  422. this.registerAgency.user.email &&
  423. this.registerAgency.user.cellNumber &&
  424. this.registerAgency.user.username &&
  425. this.registerAgency.user.password &&
  426. this.registerAgency.user.password ===
  427. this.registerAgency.user.confirm &&
  428. this.validEmail(this.registerAgency.user.email) &&
  429. this.validPhoneNumber(this.registerAgency.user.cellNumber) &&
  430. this.validPhoneNumber(this.registerAgency.user.telephone)
  431. ) {
  432. console.log('passed')
  433. this.errorOccurred = ''
  434. this.errorMessage = ''
  435. this.boolValidationError = true
  436. return true
  437. } else {
  438. console.log('failed')
  439. this.boolValidationError = true
  440. ;(this.agencyNameLoad = true),
  441. (this.agencyNumberLoad = true),
  442. (this.companyRegNumberLoad = true),
  443. (this.agencyAdminNameLoad = true),
  444. (this.agencySurnameLoad = true),
  445. (this.agencyEmailLoad = true),
  446. (this.agencyCellNumberLoad = true),
  447. (this.agencyusernameLoad = true),
  448. (this.agencypasswordLoad = true),
  449. (this.agencyconfirmLoad = true),
  450. (this.errorOccurred = 'ERROR')
  451. this.errorMessage = 'Please check form and correct all input fields!'
  452. return false
  453. }
  454. },
  455. requiredField: function (tfield) {
  456. if (tfield) {
  457. return true
  458. } else {
  459. return false
  460. }
  461. },
  462. validPhoneNumber(number) {
  463. if (number) {
  464. const rx = /^\(?\d{3}\)?[-\s]?\d{3}[-\s]?\d{4}$/
  465. // const rx = /^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im
  466. return rx.test(String(number))
  467. } else {
  468. return true
  469. }
  470. },
  471. validEmail: function (email) {
  472. var re = /(.+)@(.+){2,}\.(.+){2,}/
  473. if (email) {
  474. return re.test(email.toLowerCase())
  475. } else {
  476. return re.test(email)
  477. }
  478. },
  479. validConfirm: function (tfield) {
  480. //console.log(tfield);
  481. if (this.requiredField(tfield)) {
  482. if (tfield === this.registerAgency.user.password) {
  483. return true
  484. } else {
  485. return false
  486. }
  487. } else {
  488. return false
  489. }
  490. },
  491. },
  492. }
  493. </script>
  494. <style lang="scss" scoped>
  495. .btn-disabled {
  496. font-family: 'Muli';
  497. font-size: 15px;
  498. letter-spacing: 1px;
  499. display: inline-block;
  500. padding: 10px 32px;
  501. border-radius: 2px;
  502. transition: 0.5s;
  503. margin: 10px;
  504. color: #fff;
  505. background: grey;
  506. border-color: black;
  507. color: black;
  508. cursor: not-allowed;
  509. }
  510. .btn-disabled :hover {
  511. background: grey;
  512. border-color: black;
  513. color: black;
  514. cursor: not-allowed;
  515. }
  516. </style>