Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 5 13.67 KB | None | 0 0
  1. <script>
  2. import Vue from 'vue';
  3. import SidebarConversion from './Sidebar/SidebarItemConversion.vue';
  4.  
  5. export default {
  6.     data: function() {
  7.         return {
  8.             options: {
  9.               category: [],
  10.               unit: []
  11.             },
  12.             data: {},
  13.             sidebarConversion: SidebarConversion,
  14.             conversion: {},
  15.             list: [],
  16.             sync: [false, false]
  17.         };
  18.     },
  19.     created: function() {
  20.         this.$sidebar.setComponent(SidebarConversion);
  21.     },
  22.     mounted: function() {
  23.         var vm = this;
  24.  
  25.         console.log('mounted', this.sync);
  26.  
  27.         vm.load();
  28.     },
  29.     computed: {
  30.         // Create units thats selected
  31.         cAvailUnits: function() {
  32.             // Selected unit
  33.             var unitsId = this.data.units;
  34.             // List units
  35.             var units = this.options.unit;
  36.  
  37.             var temp = [];
  38.             if(unitsId && unitsId.length > 0) {
  39.                temp = _.filter(units, function(x) {
  40.                    var found = _.contains(unitsId, x.id);
  41.  
  42.                     /*
  43.                     if(found)
  44.                         console.log('found', found, unitsId, x);
  45.                     */
  46.  
  47.                     return found;
  48.                 });
  49.             }
  50.  
  51.             // console.log('computed xx', temp, unitsId);
  52.  
  53.             return temp;
  54.         },
  55.         cShow: function() {
  56.             return _.every(this.sync, function(x) { return x; });
  57.         }
  58.     },
  59.     watch: {
  60.         $route: function(to, from){
  61.           var vm = this;
  62.  
  63.           vm.load();
  64.         },
  65.  
  66.         'data.units': function() {
  67.             console.log('data.units', this.data.units);
  68.         }
  69.     },
  70.     methods: {
  71.         load: function() {
  72.             //this method for formatting data based on route to avoid undefined
  73.             var vm = this;
  74.  
  75.             if (vm.$route.params.id) {
  76.                 vm.create();
  77.             } else {
  78.                 vm.createEmptyData();
  79.             }
  80.  
  81.             vm.newConversion();
  82.             vm.loadCategory();
  83.         },
  84.         createEmptyData: function() {
  85.             var vm = this;
  86.  
  87.             var data = {
  88.                 id: null,
  89.                 item_category_id: null,
  90.                 ref_no: null,
  91.                 name: null,
  92.  
  93.                 conversion: [],
  94.                 _delete_conversion: [],
  95.  
  96.                 units: []
  97.             };
  98.  
  99.             vm.data = Object.assign({}, data);
  100.         },
  101.         create: function() {
  102.             var vm = this;
  103.             vm.createEmptyData();
  104.  
  105.             vm.$loading.on('loading');
  106.             vm.$api.Category.all({page: 'all', group_by: 'unit'}).then(function(resp) {
  107.                 var data = resp.data.data;
  108.  
  109.                 var unit = _.map(data, function(row) {
  110.                             return { id: row.id, text: row.label };
  111.                           });
  112.  
  113.                 vm.options.unit = unit;
  114.  
  115.                 Vue.set(vm.sync, 1, true);
  116.  
  117.             vm.$api.Item.get(vm.$route.params.id).then(function(resp) {
  118.                 if (!resp.data.is_error) {
  119.                     var data = resp.data.data;
  120.  
  121.                     data.item_category_id = String(data.item_category_id);
  122.  
  123.                     for (var i = 0; i < data.conversion.length; i++) {
  124.                        data.conversion[i]._hash = Math.getRandomHash();
  125.                        data.conversion[i].unit_id_from = String(data.conversion[i].unit_id_from);
  126.                        data.conversion[i].unit_id_to = String(data.conversion[i].unit_id_to);
  127.                    }
  128.  
  129.                    for (var i = 0; i < data.units.length; i++) {
  130.                        // data.units[i] = data.units[i];
  131.                    }
  132.  
  133.                    data._delete_conversion = [];
  134.  
  135.                    vm.data = Object.assign({}, data);
  136.                    console.log('create', vm.data);
  137.                } else {
  138.                    vm.$flash.error(resp.data.message);
  139.                }
  140.  
  141.                vm.$loading.off('loading');
  142.            });
  143.            });
  144.        },
  145.        submit: function() {
  146.            var vm = this;
  147.  
  148.            vm.$loading.on('loading');
  149.  
  150.            var data = vm._createPostData(vm.data);
  151.            console.log(data);
  152.            vm.$api.Item.create(data).then(function(resp) {
  153.                if(!resp.data.is_error) {
  154.                    if (vm.$route.params.id) {
  155.                        vm.create();
  156.                    } else {
  157.                        vm.$router.push({ name: 'item-detail', params: { id: resp.data.data } });
  158.                    }
  159.  
  160.                    vm.$flash.success(resp.data.message);
  161.                } else {
  162.                    vm.$flash.error(resp.data.message);
  163.                }
  164.  
  165.                vm.$loading.off('loading');
  166.            });
  167.        },
  168.        _createPostData: function(data) {
  169.            var vm = this;
  170.  
  171.            return data;
  172.        },
  173.        newConversion: function() {
  174.            var vm = this;
  175.  
  176.            var conversion = {
  177.                id: null,
  178.                item_id: null,
  179.                unit_id_from: null,
  180.                unit_id_to: null,
  181.                qty: 1,
  182.  
  183.                _hash: Math.getRandomHash()
  184.            };
  185.  
  186.            vm.conversion = Object.assign({}, conversion);
  187.        },
  188.        addConversion: function(conversion) {
  189.            var vm = this;
  190.  
  191.            var isNew = true;
  192.  
  193.            // Check if this job update
  194.            for(var i=0; i<vm.data.conversion.length; i++) {
  195.                if(vm.data.conversion[i]._hash === conversion._hash) {
  196.                    isNew = false;
  197.                    conversion.id = vm.data.conversion[i].id;
  198.                    vm.data.conversion[i] = conversion;
  199.                }
  200.            }
  201.  
  202.            if(isNew)
  203.                // If new just push to conversion
  204.                vm.data.conversion.push(conversion);
  205.  
  206.            vm.newConversion();
  207.        },
  208.        editConversion: function(conversion) {
  209.            var vm = this;
  210.  
  211.            vm.conversion = Object.assign({}, conversion);
  212.            vm.$sidebar.show();
  213.        },
  214.        deleteConversion: function(conversion) {
  215.            var vm = this;
  216.  
  217.            if(conversion.id)
  218.                vm.data._delete_conversion.push(conversion.id);
  219.  
  220.            for (var i = 0; i < vm.data.conversion.length; i++) {
  221.              if (vm.data.conversion[i]._hash === conversion._hash) {
  222.                vm.data.conversion.splice(i, 1);
  223.              }
  224.            }
  225.        },
  226.        loadCategory: function() {
  227.            var vm = this;
  228.  
  229.            vm.$api.Category.item().then(function(resp) {
  230.                var data = resp.data.data;
  231.  
  232.                var item = data;
  233.  
  234.                var category = _.map(item, function(row) {
  235.                    return { id: row.id, text: row.label };
  236.                });
  237.  
  238.                vm.options.category = category;
  239.                Vue.set(vm.sync, 0, true);
  240.            });
  241.  
  242.            setTimeout(function() {
  243.  
  244.            }, 3000);
  245.  
  246.            /*
  247.            vm.options.unit = [
  248.                { id: 1, text: 'Satu'},
  249.                { id: 2, text: 'Dua'},
  250.            ];
  251.            */
  252.  
  253.        }
  254.    }
  255. }
  256. </script>
  257. <template>
  258.     <section class="content">
  259.       <div class="container-fluid">
  260.         <div class="row">
  261.           <div class="col-md-12">
  262.             <div class="card card-primary card-outline card-tabs">
  263.               <box-overlay v-if="$loading.get('loading')" />
  264.                 <div class="card-header p-0 pt-1 border-bottom-0">
  265.                   <ul class="nav nav-tabs" id="custom-tabs-two-tab" role="tablist">
  266.                     <li class="nav-item">
  267.                       <a class="nav-link active" id="custom-tabs-two-home-tab" data-toggle="pill" href="#custom-tabs-two-home" role="tab" aria-controls="custom-tabs-two-home" aria-selected="true">Detail</a>
  268.                     </li>
  269.                     <li class="nav-item" v-if="$route.params.id">
  270.                       <a class="nav-link" id="custom-tabs-two-profile-tab" data-toggle="pill" href="#custom-tabs-two-profile" role="tab" aria-controls="custom-tabs-two-profile" aria-selected="false">Rumus Konversi</a>
  271.                     </li>
  272.                   </ul>
  273.                 </div>
  274.                 <div class="card-body">
  275.                 <div class="tab-content" id="custom-tabs-two-tabContent">
  276.                   <div class="tab-pane fade show active" id="custom-tabs-two-home" role="tabpanel" aria-labelledby="custom-tabs-two-home-tab">
  277.                     <form action="#" role="form" v-on:submit.prevent="submit()">
  278.                       <div class="row">
  279.                         <div class="form-group col-sm-2">
  280.                           <label>No. Ref</label>
  281.                           <input type="text" class="form-control" id="ref_no" placeholder="Masukkan No. Ref" v-model="data.ref_no"/>
  282.                         </div>
  283.                         <div class="form-group col-sm-5">
  284.                           <label>Kategori</label>
  285.                           <select2 v-bind:options="options.category"
  286.                                   v-model="data.item_category_id"
  287.                                   placeholder="Pilih kategori"
  288.                                   name="category">
  289.                           </select2>
  290.                         </div>
  291.                         <div class="form-group col-sm-5">
  292.                           <label>Satuan</label>
  293.                           <!-- Render when data.units is ready -->
  294.                           <select2 v-bind:options="options.unit"
  295.                                   v-model="data.units"
  296.                                   placeholder="Pilih Satuan"
  297.                                   v-bind:tags="true"
  298.                                   castTo="integer"
  299.                                   name="satuan">
  300.                           </select2>
  301.                         </div>
  302.                         <div class="form-group col-sm-12">
  303.                           <label>Nama</label>
  304.                           <input type="text" class="form-control" id="name" placeholder="Masukkan Nama" v-model="data.name"/>
  305.                         </div>
  306.                         <div class="col-sm-12">
  307.                           <div class="text-right">
  308.                             <button type="button" class="btn btn-default" @click="load()">Batal</button>
  309.                             <button type="submit" class="btn btn-primary">Simpan</button>
  310.                           </div>
  311.                         </div>
  312.                     </div>
  313.                   </form>
  314.                   </div>
  315.                   <div class="tab-pane fade" id="custom-tabs-two-profile" role="tabpanel" aria-labelledby="custom-tabs-two-profile-tab" v-if="$route.params.id">
  316.                     <div class="row">
  317.                       <div class="col-sm-12">
  318.                           <table class="table table-bordered">
  319.                             <thead>
  320.                               <tr>
  321.                                 <th style="width: 10px" rowspan="2" class="align-top">No.</th>
  322.                                 <th colspan="2">Unit</th>
  323.                                 <th rowspan="2" class="align-top">Action</th>
  324.                               </tr>
  325.                               <tr>
  326.                                 <th>Satuan(Dari)</th>
  327.                                 <th>Satuan(Ke)</th>
  328.                               </tr>
  329.                             </thead>
  330.                             <tbody>
  331.                               <tr v-for="(tr, $index) in data.conversion">
  332.                                 <td>{{ $index + 1 }}</td>
  333.                                 <td>1 {{ tr.unit_from }}</td>
  334.                                 <td>= {{ tr.qty }} {{ tr.unit_to }}</td>
  335.                                 <td>
  336.                                     <sidebar-button class="btn-warning"
  337.                                          v-bind:sidebar="sidebarConversion"
  338.                                          v-bind:conversions="data.conversion"
  339.                                          v-model="data.conversion[$index]"
  340.                                          v-bind:success="addConversion"
  341.                                          v-bind:data="{ units: cAvailUnits }"><i class="fas fa-pencil-alt"></i></sidebar-button>
  342.  
  343.                                   <button type="button" class="btn btn-danger" @click="deleteConversion(tr)"><i class="fas fa-trash-alt"></i></button>
  344.                                 </td>
  345.                               </tr>
  346.                             </tbody>
  347.                           </table>
  348.                         </div>
  349.                         <div class="col-sm-12">
  350.                           <sidebar-button class="btn-primary"
  351.                                          v-bind:sidebar="sidebarConversion"
  352.                                          v-model="conversion"
  353.                                          v-bind:success="addConversion"
  354.                                          v-bind:data="{ units: cAvailUnits }">Tambah Konversi</sidebar-button>
  355.                         </div>
  356.                         <div class="col-sm-12">
  357.                           <div class="text-right">
  358.                             <button type="button" class="btn btn-default" @click="load()">Batal</button>
  359.                             <button type="button" class="btn btn-primary" @click="submit()">Simpan</button>
  360.                           </div>
  361.                         </div>
  362.                     </div>
  363.                   </div>
  364.                 </div>
  365.               </div>
  366.             </div>
  367.           </div>
  368.         </div>
  369.       </div>
  370.     </section>
  371. </template>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement