Advertisement
Guest User

DokterAdd.vue

a guest
Mar 29th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.66 KB | None | 0 0
  1. <template>
  2. <div>
  3. <div align="left">
  4. <label class="obligatory">Keterangan: Isian bertanda * harus diisi</label>
  5. </div>
  6. </br>
  7.  
  8. <div class="columns">
  9. <div class="column">
  10.  
  11. <div class="control is-horizontal">
  12. <div class="control-label">
  13. <label class="label">Nama Dokter*</label>
  14. </div>
  15. <div class="control is-grouped">
  16. <div class="control">
  17. <input class="input" :class="{'is-danger' : errors.nama}"
  18. type="text" v-model="cmd.nama" placeholder="Nama Dokter"
  19. @blur="keyName(cmd.nama)" @input="keyName(cmd.nama)" />
  20. </div>
  21. <div class="control" v-if="errors.nama">

  22. <span class="help is-danger">{{errors.nama}}</span>

  23. </div>
  24. </div>
  25. </div>
  26.  
  27. <div class="control is-horizontal">
  28. <div class="control-label">
  29. <label class="label">NIP*</label>
  30. </div>
  31. <div class="control is-grouped">
  32. <div class="control">
  33. <input class="input" :class="{'is-danger' : errors.nip}"
  34. type="text" v-model="cmd.nip" placeholder="NIP"
  35. @blur="validateNip(cmd.nip)" @input="validateNip(cmd.nip)" />
  36. </div>
  37. <div class="control" v-if="errors.nip">

  38. <span class="help is-danger">{{errors.nip}}</span>

  39. </div>
  40. </div>
  41. </div>
  42.  
  43. <div class="control is-horizontal">
  44. <div class="control-label">
  45. <label class="label">Jenis Kelamin*</label>
  46. </div>
  47. <div class="control is-grouped">
  48. <div class="control">
  49. <input class="radio" :class="{'is-danger' : errors.jenisKelamin}"
  50. type="radio" v-model="cmd.jenisKelamin" :value="man" /> {{ man }}
  51. <input class="radio" :class="{'is-danger' : errors.jenisKelamin}"
  52. type="radio" v-model="cmd.jenisKelamin" :value="woman" /> {{ woman }}
  53. </div>
  54. <div class="control" v-if="errors.jenisKelamin">

  55. <span class="help is-danger">{{errors.jenisKelamin}}</span>

  56. </div>
  57. </div>
  58. </div>
  59.  
  60. <div class="control is-horizontal">
  61. <div class="control-label">
  62. <label class="label">No Telepon*</label>
  63. </div>
  64. <div class="control is-grouped">
  65. <div class="control">
  66. <input class="input" :class="{'is-danger' : errors.noTelp}"
  67. type="text" v-model="cmd.noTelp" placeholder="No Telepon"
  68. @blur="validateTelepon(cmd.noTelp)" @input="validateTelepon(cmd.noTelp)"/>
  69. </div>
  70. <div class="control" v-if="errors.noTelp">

  71. <span class="help is-danger">{{errors.noTelp}}</span>

  72. </div>
  73. </div>
  74. </div>
  75.  
  76. <div class="control is-horizontal">
  77. <div class="control-label">
  78. <label class="label">Jalan/No. Rumah*</label>
  79. </div>
  80. <div class="control is-grouped is-two-thirds">
  81. <div class="control">
  82. <textarea class="textarea" :class="{'is-danger' : errors.alamat}"
  83. type="text" v-model="cmd.alamat" placeholder="Alamat"
  84. @blur="keyAlamat(cmd.alamat)" @input="keyAlamat(cmd.alamat)"></textarea>
  85. </div>
  86. <div class="control" v-if="errors.alamat">

  87. <span class="help is-danger">{{ errors.alamat }}</span>

  88. </div>
  89. </div>
  90. </div>
  91.  
  92. <div class="control is-horizontal">
  93. <div class="control-label">
  94. <label class="label">Provinsi*</label>
  95. </div>
  96. <div class="control is-grouped">
  97. <div class="control">
  98. <p class="control">
  99. <span class="select">
  100. <select v-model="cmd.provinsiId" :class="{'is-danger' : errors.provinsiId}">
  101. <option value="" disabled cmd.provinsiID hidden>Pilih</option>
  102. <option v-for="prov in provinsi" :value="prov.provinsiId">{{ prov.nama }}</option>
  103. </select>
  104. </span>
  105. </p>
  106. </div>
  107. <div class="control" v-if="errors.provinsiId">

  108. <span class="help is-danger">{{errors.provinsiId}}</span>

  109. </div>
  110. </div>
  111. </div>
  112.  
  113. <div class="control is-horizontal">
  114. <div class="control-label">
  115. <label class="label">Kota/Kabupaten*</label>
  116. </div>
  117. <div class="control is-grouped">
  118. <div class="control">
  119. <p class="control">
  120. <span class="select">
  121. <select v-model="cmd.kabupatenId" :class="{'is-danger' : errors.kabupatenId}">
  122. <option value="" disabled cmd.kabupatenId hidden>Pilih</option>
  123. <option v-for="kab in kabupaten" :value="kab.kotaKabupatenId">{{ kab.nama }}</option>
  124. </select>
  125. </span>
  126. </p>
  127. </div>
  128. <div class="control" v-if="errors.kabupatenId">

  129. <span class="help is-danger">{{errors.kabupatenId}}</span>

  130. </div>
  131. </div>
  132. </div>
  133.  
  134. <div class="control is-horizontal">
  135. <div class="control-label">
  136. <label class="label">Kecamatan*</label>
  137. </div>
  138. <div class="control is-grouped">
  139. <div class="control">
  140. <p class="control">
  141. <span class="select">
  142. <select v-model="cmd.kecamatanId" :class="{'is-danger' : errors.kecamatanId}">
  143. <option value="" disabled cmd.kecamatanId hidden>Pilih</option>
  144. <option v-for="kec in kecamatan" :value="kec.kecamatanId">{{ kec.nama }}</option>
  145. </select>
  146. </span>
  147. </p>
  148. </div>
  149. <div class="control" v-if="errors.kecamatanId">

  150. <span class="help is-danger">{{errors.kecamatanId}}</span>

  151. </div>
  152. </div>
  153. </div>
  154.  
  155. <div class="control is-horizontal">
  156. <div class="control-label">
  157. <label class="label">Kelurahan*</label>
  158. </div>
  159. <div class="control is-grouped">
  160. <div class="control">
  161. <p class="control">
  162. <span class="select">
  163. <select v-model="cmd.kelurahanId" :class="{'is-danger' : errors.kelurahanId}">
  164. <option value="" disabled cmd.kelurahanId hidden>Pilih</option>
  165. <option v-for="kel in kelurahan" :value="kel.kelurahanId">{{ kel.nama }}</option>
  166. </select>
  167. </span>
  168. </p>
  169. </div>
  170. <div class="control" v-if="errors.kelurahanId">

  171. <span class="help is-danger">{{errors.kelurahanId}}</span>

  172. </div>
  173. </div>
  174. </div>
  175. </div>
  176. </div>
  177.  
  178. <div class="control is-horizontal">
  179. <div class="control-label">
  180. <label class="label">Spesialisasi*</label>
  181. </div>
  182. <div class="control is-grouped">
  183. <div class="control">
  184. <p class="control">
  185. <span class="select">
  186. <select v-model="spesialId" :class="{'is-danger' : errors.spesialId}">
  187. <option value="" disabled spesialId hidden>Pilih</option>
  188. <option v-for="sps in spesials" :value="sps.enumValue"> {{ sps.enumValue }} </option>
  189. </select>
  190. </span>
  191. <button class="button is-primary" @click="addSpesial()">Tambah</button>
  192. </p>
  193. </div>
  194. <div class="control" v-if="errors.spesialisasi">

  195. <span class="help is-danger">{{errors.spesialisasi}}</span>

  196. </div>
  197. </div>
  198. </div>
  199. <div class="control is-horizontal">
  200. <div class="control-label">
  201. <label class="label"></label>
  202. </div>
  203. <div class="control is-grouped">
  204. <div class="control">
  205. <p class="control">
  206. <table v-if="spsDokter.length > 0" class="vuetable ui blue selectable celled stackable attached table">
  207. <th>Nama Spesialis</th>
  208. <th>Aksi</th>
  209. <tr v-for="spesial in spsDokter">
  210. <td> {{ spesial }} </td>
  211. <td><a href="#" @click.prevent="deleteSpesial(spesial)">Hapus</a></td>
  212. </tr>
  213. </table>
  214. </p>
  215. </div>
  216. </div>
  217. </div>
  218.  
  219. <div class="columns level-right">
  220. <div class="control is-horizontal">
  221. <div class="control-label">
  222. <label class="label"></label>
  223. </div>
  224. <div class="control is-grouped">
  225. <div class="control">

  226. <button class="button is-primary" @click="submit()">Simpan</button>
  227. </div>
  228. <div class="control">
  229. <button class="button is-light" @click="back()">Batal</button>
  230. </div>
  231. </div>
  232. </div>
  233. </div>
  234.  
  235. </div>
  236. </template>
  237.  
  238. <script>
  239. import axios from 'axios'
  240. import {router, bus} from '../../../index'
  241. import _ from 'lodash'
  242.  
  243. export default {
  244. data () {
  245. return {
  246. cmd: {
  247. nama: null,
  248. nip: null,
  249. noTelp: null,
  250. jenisKelamin: '',
  251. alamat: '',
  252. provinsiId: '',
  253. kabupatenId: '',
  254. kecamatanId: '',
  255. kelurahanId: '',
  256. spesialisasi: []
  257. },
  258. spesialId: '',
  259. spesialisasi: {
  260. spesialisasi: '',
  261. dokterId: '',
  262. spsDokterId: ''
  263. },
  264. showSpesial: false,
  265. spesials: [],
  266. spsDokter: [],
  267. provinsi: [],
  268. kabupaten: [],
  269. kecamatan: [],
  270. kelurahan: [],
  271. loading: false,
  272. errors: {},
  273. man: 'Laki-laki',
  274. woman: 'Perempuan'
  275. }
  276. },
  277.  
  278. watch: {
  279. '$route': 'fetchData',
  280. 'cmd.provinsiId': (val) => {
  281. this.errors.provinsiId = null
  282. console.log('[SELECTED PROVINSI] VAL : ', val)
  283. axios.get('/alamat/daftarkabupaten/' + val)
  284. .then((resp) => {
  285. this.kabupaten = resp.data
  286. this.cmd.kabupatenId = ''
  287. this.kecamatan = []
  288. this.cmd.kecamatanId = ''
  289. this.kelurahan = []
  290. this.cmd.kelurahanId = ''
  291. console.log('DATA KABUPATEN : ', this.kabupaten)
  292. })
  293. },
  294.  
  295. 'cmd.kabupatenId': (val) => {
  296. this.errors.kabupatenId = null
  297. console.log('[SELECTED KABUPATEN] VAL : ', val)
  298. axios.get('/alamat/daftarkecamatan/' + val)
  299. .then((resp) => {
  300. this.kecamatan = resp.data
  301. this.cmd.kecamatanId = ''
  302. this.kelurahan = []
  303. this.cmd.kelurahanId = ''
  304. console.log('DATA KECAMATAN : ', resp.data)
  305. })
  306. },
  307.  
  308. 'cmd.kecamatanId': (val) => {
  309. this.errors.kecamatanId = null
  310. console.log('[SELECTED KECAMATAN] VAL : ', val)
  311. axios.get('/alamat/daftarkelurahan/' + val)
  312. .then((resp) => {
  313. this.kelurahan = resp.data
  314. this.cmd.kelurahanId = ''
  315. console.log('DATA KELURAHAN : ', resp.data)
  316. })
  317. },
  318.  
  319. 'cmd.kelurahanId': (val) => {
  320. this.errors.kelurahanId = null
  321. },
  322.  
  323. 'cmd.jenisKelamin': (val) => {
  324. console.log('ISI VALUE :', val)
  325. if (val === null || val === '') {
  326. this.$set(this.errors, 'jenisKelamin', 'Tidak boleh kosong')
  327. } else {
  328. this.errors.jenisKelamin = null
  329. }
  330. }
  331. },
  332.  
  333. created () {
  334. console.log('ADD DOCTOR CREATED')
  335. console.log('element', this.$element)
  336. this.fetchData()
  337. },
  338.  
  339. methods: {
  340. fetchData () {
  341. console.log('FETCH DOCTOR DATA')
  342.  
  343. axios.get('/dokter/daftarspesial')
  344. .then((resp) => {
  345. console.log('BERHASIL FETCH DAFTAR SPESIALISASI DOKTER')
  346. this.spesials = resp.data
  347. console.log(this.spesials)
  348. })
  349. .catch((errors) => {
  350. console.log('ERROR FETCH SPESIAL : ', errors)
  351. })
  352.  
  353. axios.get('/alamat/daftarprovinsi')
  354. .then((resp) => {
  355. console.log('BERHASIL FETCH DAFTAR PROVINSI')
  356. this.provinsi = resp.data
  357. console.log(this.provinsi)
  358. })
  359. },
  360.  
  361. back () {
  362. router.replace('/master-data/dokter/daftar')
  363. },
  364.  
  365. submit () {
  366. for (var field in this.errors) {
  367. if (this.errors[field] !== null) return
  368. }
  369.  
  370. console.log('PRE CMD : ', this.cmd)
  371. axios.post('/dokter/tambahsubmit', this.cmd)
  372. .then((resp) => {
  373. console.log('BERHASIL INSERT DOKTER, ALAMAT DAN SPESIALISASI')
  374. console.log('ID DOKTER : ', resp.data)
  375. router.replace('/master-data/dokter/detail/' + resp.data)
  376. bus.$emit('NOTIFY', 'success', 'Data Dokter berhasil ditambah.')
  377. })
  378. .catch((error) => {
  379. console.log('ERROR')
  380. console.log(error.response)
  381.  
  382. _.each(error.response.data.errors, (value) => {
  383. this.$set(this.errors, value.field, value.message)
  384.  
  385. if (this.cmd.nama === '') {
  386. this.$set(this.errors, 'nama', 'Tidak boleh kosong')
  387. }
  388. })
  389. this.$forceUpdate()
  390. })
  391. },
  392.  
  393. addSpesial () {
  394. if (this.spesialId !== '') {
  395. this.spsDokter.push(this.spesialId)
  396. this.cmd.spesialisasi.push(this.spesialId)
  397. _.remove(this.spesials, (obj) => {
  398. return obj.enumValue === this.spesialId
  399. })
  400. this.spesialId = ''
  401. }
  402. },
  403.  
  404. deleteSpesial (spesial) {
  405. _.remove(this.spsDokter, (delsps) => {
  406. return delsps === spesial
  407. })
  408. _.remove(this.cmd.spesialisasi, (delIdSps) => {
  409. return delIdSps === spesial
  410. })
  411. let obj = { enumValue: spesial }
  412. this.spesials.push(obj)
  413. console.log('isi hapus', spesial)
  414. },
  415.  
  416. keyName (nama) {
  417. console.log('isi nama : ', nama)
  418. if (nama === null || nama === '') {
  419. this.$set(this.errors, 'nama', 'Tidak boleh kosong')
  420. } else {
  421. this.errors.nama = null
  422. }
  423. },
  424.  
  425. keyNip (nip) {
  426. console.log('isi nip : ', nip)
  427. if (nip === null || nip === '') {
  428. this.$set(this.errors, 'nip', 'Tidak boleh kosong')
  429. } else {
  430. this.errors.nip = null
  431. }
  432. },
  433.  
  434. keyAlamat (alamat) {
  435. console.log('isi alamat : ', alamat)
  436. if (alamat === null || alamat === '') {
  437. this.$set(this.errors, 'alamat', 'Tidak boleh kosong')
  438. } else {
  439. this.errors.alamat = null
  440. }
  441. },
  442.  
  443. validateNip: _.debounce(
  444. (nip) => {
  445. if (nip === null || nip === '') {
  446. this.$set(this.errors, 'nip', 'Tidak boleh kosong')
  447. } else {
  448. this.errors.nip = null
  449. console.log('MASUK VALIDASI')
  450. axios.post('/dokter/validate/nip', this.cmd)
  451. .then((resp) => {
  452. this.errors.nip = null
  453. this.$forceUpdate()
  454. })
  455. .catch((error) => {
  456. console.log('ERROR :', error.response)
  457. _.each(error.response.data.errors, (val) => {
  458. this.$set(this.errors, val.field, val.message)
  459. })
  460. this.$forceUpdate()
  461. })
  462. }
  463. },
  464. 500
  465. ),
  466.  
  467. validateTelepon: _.debounce(
  468. (noTelp) => {
  469. if (noTelp === null || noTelp === '') {
  470. this.$set(this.errors, 'noTelp', 'Tidak boleh kosong')
  471. } else {
  472. this.errors.noTelp = null
  473. console.log('MASUK VALIDASI')
  474. axios.post('/dokter/validate/telepon', this.cmd)
  475. .then((resp) => {
  476. this.errors.noTelp = null
  477. this.$forceUpdate()
  478. })
  479. .catch((error) => {
  480. console.log('ERROR :', error.response)
  481. _.each(error.response.data.errors, (val) => {
  482. this.$set(this.errors, val.field, val.message)
  483. })
  484. this.$forceUpdate()
  485. })
  486. }
  487. },
  488. 500
  489. )
  490. }
  491. }
  492. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement