Advertisement
Guest User

paidholidaycalculation

a guest
Jun 28th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.82 KB | None | 0 0
  1. <template>
  2. <b-container fluid>
  3. <b-row>
  4. <b-col md='12' align='right'>
  5. <b-button variant="success" v-b-modal.registerModal class="ActionBtn"><icon class="icons" name="plus"></icon> 登録</b-button>
  6. </b-col>
  7. <b-col md='6' class='p-0' align="left">
  8. <b-col md='6' class='p-0'>
  9. <b-input-group class='mt-2 mb-5'>
  10. <b-form-input v-model="filter" placeholder="検索" />
  11. <b-input-group-append>
  12. <b-btn disabled><icon name="search" scale="1"> </icon></b-btn>
  13. </b-input-group-append>
  14. </b-input-group>
  15. </b-col>
  16. </b-col>
  17. <b-col md='6' align="right" class='p-0'>
  18. <b-form-group horizontal label="ページ" class="mb-5 mt-2">
  19. <b-form-select :options="pageOptions" v-model="perPage" />
  20. </b-form-group>
  21. </b-col>
  22. <b-table hover outlined responsive bordered
  23. v-bind:items="datas"
  24. :fields="header"
  25. :per-page="perPage"
  26. :filter="filter"
  27. @filtered="onFiltered"
  28. :current-page="currentPage">
  29. <template slot="name" slot-scope="data">
  30. {{data.value.first}} {{data.value.last}}
  31. </template>
  32. <template slot="actions" slot-scope="row">
  33. <b-button v-b-modal.properties
  34. size="sm"
  35. @click.stop="info(row.item, row.index, $event.target)"
  36. class="ActionBtn" variant="primary"><icon class="icons" name="search"></icon>
  37. 見る
  38. </b-button>
  39.  
  40. <b-button v-b-modal.DisableModal size="sm"
  41. @click.stop="info(row.item, row.index, $event.target);"
  42. class="ActionBtn (row.item.deleted)"
  43. v-bind:variant="row.item.deleted? 'success' : 'danger'">
  44. <icon class="icons" v-bind:name="row.item.deleted? 'check' : 'times'"></icon> {{ (row.item.deleted) ? "Enable" : "削除" }}
  45. </b-button>
  46. </template>
  47. </b-table>
  48. <b-col md="6">
  49. <p>合計: {{totalRows}} 行</p>
  50. </b-col>
  51. <b-col md="6" class="">
  52. <b-pagination :total-rows="totalRows"
  53. :per-page="perPage"
  54. v-model="currentPage"
  55. class="my-0"
  56. align='right'/>
  57. </b-col>
  58. </b-row>
  59.  
  60. <!-- EMPLOYEE REGISTRATION FORM MODAL -->
  61. <b-modal id="registerModal"
  62. title="新規登録"
  63. v-model="showRegistrationModal"
  64. @show="clearRegistrationDatas"
  65. @hide="clearRegistrationErrors"
  66. centered>
  67. <b-form-group
  68. horizontal
  69. :label-cols="3"
  70. breakpoint="md"
  71. label="Eメール:">
  72. <b-form-input :class="{errorInput: errorInput.emailError}"
  73. v-model="registerDatas.email" name="email" type="email"></b-form-input>
  74. <p class="ErrorMessage">{{ errorMessages.emailError }}</p>
  75. </b-form-group>
  76. <b-form-group
  77. horizontal
  78. :label-cols="3"
  79. breakpoint="md"
  80. label="パスワード:">
  81. <b-form-input :class="{errorInput: errorInput.passwordError}"
  82. v-model="registerDatas.password" name="password" type="password"></b-form-input>
  83. <p class="ErrorMessage">{{ errorMessages.passwordError }}</p>
  84. </b-form-group>
  85. <b-form-group
  86. horizontal
  87. :label-cols="3"
  88. breakpoint="md"
  89. label="パスワード 2:">
  90. <b-form-input :class="{errorInput: errorInput.password2Error}"
  91. v-model="registerDatas.confirmPassword" name="password" type="password"></b-form-input>
  92. <p class="ErrorMessage">{{ errorMessages.password2Error }}</p>
  93. </b-form-group>
  94. <b-form-group
  95. horizontal
  96. :label-cols="3"
  97. breakpoint="md"
  98. label="役割:">
  99. <b-form-select v-model="registerDatas.roles.id"
  100. :class="{errorInput: errorInput.roleError}">
  101. <option :value="null" selected disabled>-- Select role --</option>
  102. <option v-for="item in items" :value="item.id">{{item.name}}</option>
  103. </b-form-select>
  104. <p class="ErrorMessage">{{ errorMessages.roleError }}</p>
  105. </b-form-group>
  106. <div class="" slot="modal-footer">
  107. <div>
  108. <b-btn class="float-right ml-2 w-100px"
  109. size="sm"
  110. variant="danger"
  111. @click="closeRegistrationModal"><icon class="icons" name="times"></icon> キャンセル
  112. </b-btn>
  113. <router-link @click.native="register" :to="goto">
  114. <b-btn class="float-right w-100px"
  115. variant="success"
  116. size="sm">
  117. <icon class="icons" name="check"></icon> 登録
  118. </b-btn>
  119. </router-link>
  120. </div>
  121. </div>
  122. </b-modal>
  123.  
  124. <!-- EMPLOYEE FULL VIEW MODAL -->
  125. <b-modal size="md"
  126. id="properties"
  127. itle="Information"
  128. v-model="showInformationModal"
  129. centered>
  130. <div id="propertiesBody">
  131. <b-form>
  132. <div class="imageInfo">
  133. <b-row class="imageInfoIn">
  134. <b-img class="mb-4 mt-4"
  135. fluid
  136. center
  137. rounded="circle"
  138. src="http://www.kkmm.gov.my/images/icon_copy_copy.png" />
  139. </b-row>
  140. </div>
  141. <div class="bodyInfo pt-3 pb-4">
  142. <div class="bodyInfoIn">
  143. <b-row>
  144. <h4 class="mb-4">{{ this.properties.username }}</h4>
  145. </b-row>
  146. </div>
  147. </div>
  148. </b-form>
  149. </div>
  150. <div slot="modal-footer"
  151. class="w-100">
  152. <div class="p-1">
  153. <b-btn v-b-modal.DisableModal size="sm"
  154. class="float-right w-200px"
  155. @click="disable(); closeViewInfoModal()" variant="danger">
  156. 管理システム使用不可
  157. </b-btn>
  158. <b-btn size="sm" class="float-right mr-2 w-200px" variant="primary" v-on:click.once="getDataByEmail(properties.username)">
  159. 従業員情報詳細
  160. </b-btn>
  161. </div>
  162. </div>
  163. </b-modal>
  164. <b-modal id="DisableModal"
  165. v-model="DisableModal"
  166. hide-footer
  167. no-close-on-backdrop
  168. title="使用不可">
  169. <div align="centered">
  170. <b-row>
  171. <b-col md='12' align="center">
  172. <p>{{ this.properties.username }}を{{ (this.properties.disable == true) ? "有効" : "無効" }}にします、よろしいですか?</p>
  173. </b-col>
  174. <b-col md='12' align="center">
  175. <p>Yesを押すと、当該ユーザはこの管理システムが使用できなくなります。</p>
  176. </b-col>
  177. </b-row>
  178. <b-row>
  179. <b-col md='12' align="center">
  180. <b-btn variant="success" class="ActionBtn" @click="disable();"><icon class="icons" name="check"></icon> はい</b-btn>
  181. <b-btn variant="danger" @click="hideModal"><icon class="icons" name="times"></icon> いいえ</b-btn>
  182. </b-col>
  183. </b-row>
  184. </div>
  185. </b-modal>
  186. </b-container>
  187. </template>
  188.  
  189. <script>
  190. import User from '../assets/script/User'
  191. import Role from '../assets/script/Roles'
  192. import date from '../assets/fte/FTEDate'
  193.  
  194. export default{
  195. props:{
  196. userdata: {
  197. type: String,
  198. default(){
  199. return null
  200. }
  201. },
  202. },
  203. data(){
  204. return{
  205. header:[
  206. {key:'username',label:'ログイン名',sortable: true},
  207. {key:'personalInfo.lastname_kanji',label:'姓',sortable: true},
  208. {key:'personalInfo.firstname_kanji',label:'名',sortable: true},
  209. {key:'created_at', formatter: (value, key, item) => { return date.getInstance(item.created_at).toISOString() }, label:'登録日',sortable: true},
  210. {key:'updated_at', formatter: (value, key, item) => { return date.getInstance(item.updated_at).toISOString() }, label:'更新日',sortable: false},
  211. { key: 'actions', label: 'アクション' }
  212. ],
  213. datas: [],
  214. perPage: 10,
  215. currentPage: 1,
  216. pageOptions:[10,25,50,100],
  217. totalRows: 0,
  218. filter: null,
  219. enableDisabled: "削除",
  220.  
  221. items: [],
  222.  
  223. registerDatas: { email: '',
  224. password: '',
  225. confirmPassword: '',
  226. roles: [ { id: '' } ]
  227. },
  228. properties: {
  229. index: '',
  230. id: '',
  231. created_at: '',
  232. created_by: '',
  233. updated_at: '',
  234. updated_by: '',
  235. password: '',
  236. username: '',
  237. disabled: false,
  238. },
  239. errorMessages: { emailError: '',
  240. passwordError: '',
  241. password2Error: '',
  242. roleError: ''
  243. },
  244. errorInput: { emailError: false,
  245. passwordError: false,
  246. password2Error: false,
  247. roleError: false
  248. },
  249.  
  250. showRegistrationModal: false,
  251. showInformationModal: false,
  252. DisableModal: false,
  253.  
  254. goto: ''
  255. }
  256. },
  257. methods:{
  258. get () {
  259. User.get(response => {
  260. this.datas = response.data.results;
  261. this.totalRows = this.datas.length;
  262. console.log(this.datas)
  263. }, error => {
  264. console.log(error)
  265. })
  266. },
  267.  
  268. getRoles () {
  269. Role.get(response => {
  270. this.items = response.data.results;
  271. }, error => {
  272. console.log(error)
  273. })
  274. },
  275.  
  276. register () {
  277. this.clearRegistrationErrors()
  278.  
  279. User.getInstance({
  280. username : this.registerDatas.email,
  281. password: this.registerDatas.password,
  282. password2: this.registerDatas.confirmPassword,
  283. created_by: "0",
  284. updated_by: "0",
  285. roles: [{
  286. id: this.registerDatas.roles.id
  287. }]
  288. }).validate().validation(response => {
  289. if(!response.has) {
  290. response.class.register(regs => {
  291. //if(regs.data.code != undefined)
  292. if (regs.data[0].code != undefined) {
  293. this.errorMessages.emailError = "Email already taken."
  294. this.errorInput.emailError = (regs.data[0].code != undefined) ? true : false
  295. } else {
  296. this.get()
  297. this.addToaster();
  298. this.getDataByEmail(this.registerDatas.email)
  299. this.clearRegistrationDatas()
  300. //
  301. }
  302. }, error => {
  303. console.log(error)
  304. });
  305. } else {
  306. this.errorMessages.emailError = response.errors.email
  307. this.errorMessages.passwordError = response.errors.password
  308. this.errorMessages.password2Error = response.errors.password2
  309. this.errorMessages.roleError = response.errors.role
  310.  
  311. this.errorInput.emailError = (response.errors.email != undefined) ? true : false
  312. this.errorInput.passwordError = (response.errors.password != undefined) ? true : false
  313. this.errorInput.password2Error = (response.errors.password2 != undefined) ? true : false
  314. this.errorInput.roleError = (response.errors.role != undefined) ? true : false
  315. this.FailedToaster();
  316.  
  317. }
  318. })
  319. },
  320.  
  321.  
  322. disable () {
  323. User.getInstance({
  324. id: this.properties.id,
  325. disable: !this.properties.disable
  326. }).disable(response => {
  327. this.updateInTable()
  328. this.hideModal();
  329. }, error => {
  330. this.disable = false;
  331. console.log(error)
  332. })
  333. },
  334.  
  335. updateInTable () {
  336. for (var x = 0; x < this.datas.length; x++) {
  337. if (this.datas[x].id == this.properties.id) {
  338. //alert(!this.properties.deleted)
  339. this.datas[x].deleted = !this.properties.disable
  340. return;
  341. }
  342. }
  343. },
  344.  
  345. getDataByEmail(email){
  346. User.getInstance({ "username": email})
  347. .getUserByEmail(success => {
  348. this.$router.push({
  349. name: 'personal-info',
  350. params: {
  351. items: success.data
  352. }
  353. })
  354. console.log(success.data);
  355. }, failed => {
  356. console.log(failed);
  357. })
  358. },
  359.  
  360. clearRegistrationDatas() {
  361. this.registerDatas.email = "",
  362. this.registerDatas.password = "",
  363. this.registerDatas.confirmPassword = "",
  364. this.registerDatas.roles.id = null;
  365. },
  366. clearRegistrationErrors() {
  367. this.errorMessages.emailError = ""
  368. this.errorMessages.passwordError = ""
  369. this.errorMessages.password2Error = ""
  370. this.errorMessages.roleError = ""
  371.  
  372. this.errorInput.emailError = false
  373. this.errorInput.passwordError = false
  374. this.errorInput.password2Error = false
  375. this.errorInput.roleError = false
  376. },
  377.  
  378. info (item, index, button) {
  379. this.properties.index = index
  380. this.properties.id = item.id
  381. this.properties.created_at = item.created_at
  382. this.properties.created_by = item.created_by
  383. this.properties.updated_at = item.updated_at
  384. this.properties.updated_by = item.updated_by
  385. this.properties.password = item.password
  386. this.properties.username = item.username
  387. //alert(item.deleted)
  388. this.properties.disable = item.deleted
  389. },
  390.  
  391. onFiltered (filteredItems) {
  392. this.totalRows = filteredItems.length,
  393. this.currentPage = 1
  394. },
  395.  
  396. closeViewInfoModal () {
  397. this.showInformationModal = false
  398. },
  399.  
  400. closeRegistrationModal () {
  401. this.showRegistrationModal = false
  402. },
  403.  
  404. hideModal (){
  405. this.DisableModal = false;
  406. },
  407. addToaster (){
  408. this.$toaster.info('Successfully Added!')
  409. },
  410. FailedToaster (){
  411. this.$toaster.error('Failed')
  412. },
  413. },
  414. computed: {
  415. test:function(){if(this.$userdata != null){
  416. return this.userdata;
  417. }},
  418. sortOptions () {
  419.  
  420. return this.fields
  421. .filter(f => f.sortable)
  422. .map(f => { return { text: f.label, value: f.key } })
  423. }
  424. },
  425. mounted () {
  426.  
  427. this.get();
  428. this.getRoles()
  429. }
  430. }
  431.  
  432. </script>
  433.  
  434. <style lang="scss">
  435.  
  436. @import "@/assets/scss/employee.scss";
  437.  
  438. </style>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement