Advertisement
lamhotsimamora

Untitled

May 8th, 2024
511
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 9.88 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>Laravel 10</title>
  7.     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
  8.     <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
  9.     <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
  10.     <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  11. </head>
  12. <body>
  13. <nav class="navbar navbar-expand-lg bg-body-tertiary">
  14.   <div class="container-fluid">
  15.     <a class="navbar-brand" href=".">Home</a>
  16.     <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
  17.       <span class="navbar-toggler-icon"></span>
  18.     </button>
  19.     <div class="collapse navbar-collapse" id="navbarSupportedContent">
  20.       <ul class="navbar-nav me-auto mb-2 mb-lg-0">
  21.        
  22.         <li class="nav-item">
  23.           <a class="nav-link" href="#">Profile</a>
  24.         </li>
  25.        
  26.        
  27.       </ul>
  28.       <form id="search" class="d-flex" role="search">
  29.         <input class="form-control me-2" v-model="search" ref="search" type="search" placeholder="Search" aria-label="Search">
  30.         <button class="btn btn-outline-success" @click="searchData" type="button">Search</button>
  31.       </form>
  32.     </div>
  33.   </div>
  34. </nav>
  35. <br>
  36. <div class="container" id="app">
  37.  
  38. <div class="card">
  39.   <div class="card-body">
  40.   <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#modal_add">Add</button>
  41.     <div class="table-responsive">
  42.     <table class="table table-striped">
  43.     <thead>
  44.     <tr>
  45.       <th scope="col">#</th>
  46.       <th scope="col">Name</th>
  47.       <th scope="col">Cover</th>
  48.       <th scope="col">Price</th>
  49.       <th scope="col">Action</th>
  50.     </tr>
  51.   </thead>
  52.   <tbody>
  53.     <tr v-for="(book,i) in books">
  54.       <th scope="row">@{{ i=i+1 }}</th>
  55.       <td>@{{book.name}}</td>
  56.       <td>
  57.         <img :src="loadImage(book.cover)" width="50" height="50" alt="">
  58.       </td>
  59.       <td>@{{book.price}}</td>
  60.       <td>
  61.         <button type="button" @click="updateData(book)" data-bs-toggle="modal" data-bs-target="#modal_edit" class="btn btn-warning btn-sm">Update</button>
  62.         <button type="button" @click="deleteData(book.id)" class="btn btn-danger btn-sm">x</button>
  63.       </td>
  64.     </tr>
  65.   </tbody>
  66.  
  67.     </table>
  68.     </div>
  69.  
  70.   </div>
  71. </div>
  72. </div>
  73.  
  74. <!-- Modal -->
  75. <div class="modal fade" id="modal_add" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
  76.   <div class="modal-dialog">
  77.     <div class="modal-content">
  78.       <div class="modal-header">
  79.         <h1 class="modal-title fs-5" id="exampleModalLabel">Modal title</h1>
  80.         <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  81.       </div>
  82.       <div class="modal-body">
  83.         <div class="input-group mb-3">
  84.           <span class="input-group-text" id="basic-addon1">Name</span>
  85.           <input type="text" class="form-control" v-model="name" placeholder="Name" ref="name" aria-label="Name"
  86.           aria-describedby="basic-addon1">
  87.         </div>
  88.         <div class="input-group mb-3">
  89.           <span class="input-group-text" id="basic-addon1">Cover</span>
  90.           <input type="text" class="form-control" v-model="cover" placeholder="Cover" ref="cover" aria-label="Name"
  91.           aria-describedby="basic-addon1">
  92.         </div>
  93.         <div class="input-group mb-3">
  94.           <span class="input-group-text" id="basic-addon1">Price</span>
  95.           <input type="number" class="form-control" v-model="price" placeholder="Price" ref="price" aria-label="Name"
  96.           aria-describedby="basic-addon1">
  97.         </div>
  98.       </div>
  99.       <div class="modal-footer">
  100.         <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
  101.         <button type="button" class="btn btn-primary" @click="addData">Save</button>
  102.       </div>
  103.     </div>
  104.   </div>
  105. </div>
  106.  
  107. <!-- Modal -->
  108. <div class="modal fade" id="modal_edit" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
  109.   <div class="modal-dialog">
  110.     <div class="modal-content">
  111.       <div class="modal-header">
  112.         <h1 class="modal-title fs-5" id="exampleModalLabel">Modal title</h1>
  113.         <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  114.       </div>
  115.       <div class="modal-body">
  116.         <div class="input-group mb-3">
  117.           <span class="input-group-text" id="basic-addon1">Name</span>
  118.           <input type="text" class="form-control" v-model="name" placeholder="Name" ref="name" aria-label="Name" aria-describedby="basic-addon1">
  119.         </div>
  120.         <div class="input-group mb-3">
  121.           <span class="input-group-text" id="basic-addon1">Cover</span>
  122.           <input type="text" class="form-control" v-model="cover" placeholder="Cover" ref="cover" aria-label="Name" aria-describedby="basic-addon1">
  123.         </div>
  124.         <div class="input-group mb-3">
  125.           <span class="input-group-text" id="basic-addon1">Price</span>
  126.           <input type="number" class="form-control" v-model="price" placeholder="Price" ref="price" aria-label="Name" aria-describedby="basic-addon1">
  127.         </div>
  128.       </div>
  129.       <div class="modal-footer">
  130.         <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
  131.         <button type="button" class="btn btn-primary" @click="updateData">Save</button>
  132.       </div>
  133.     </div>
  134.   </div>
  135. </div>
  136.  
  137. <script>
  138.  const _TOKEN_ = "<?= csrf_token() ?>";
  139.   var app=  new Vue({
  140.         el : "#app",
  141.         data : {
  142.             books: null
  143.         },
  144.         methods: {
  145.             loadImage: function(image){
  146.               return 'storage/'+image
  147.             },
  148.             updateData : function(data){
  149.               edit.name = data.name;
  150.               edit.cover = data.cover;
  151.               edit.price = data.price;
  152.               edit.id = data.id;
  153.             },
  154.             loadData: async function(){
  155.              
  156.                 try {
  157.                     const response = await axios.get('/books');
  158.                     this.books = response.data;
  159.                 } catch (error) {
  160.                      console.error(error);
  161.                 }
  162.             },
  163.             deleteData: function(id){
  164.                 axios.post('/book-delete', {
  165.                     id: id,
  166.                     _token : _TOKEN_
  167.                 })
  168.                 .then(function (response) {
  169.                     alert("success delete data")
  170.                     window.location.href="."
  171.                 })
  172.                 .catch(function (error) {
  173.                     console.log(error);
  174.                 });
  175.             }
  176.         },
  177.         mounted() {
  178.             this.loadData();
  179.         },
  180.     })
  181.  
  182.  
  183.     new Vue({
  184.       el : "#modal_add",
  185.       data: {
  186.         name: null,
  187.         cover: null,
  188.         price: null
  189.       },
  190.       methods: {
  191.         addData: function(){
  192.             if (this.name==null){
  193.                 this.$refs.name.focus();
  194.                 return;
  195.             }
  196.             if (this.cover==null){
  197.                 this.$refs.cover.focus();
  198.                 return;
  199.             }
  200.             if (this.price==null){
  201.                 this.$refs.price.focus();
  202.                 return;
  203.             }
  204.             axios.post('/book-add', {
  205.                     name: this.name,
  206.                     cover:this.cover,
  207.                     price:this.price,
  208.                     _token : _TOKEN_
  209.                 })
  210.             .then(function (response) {
  211.                 alert("success add data")
  212.                 app.loadData();
  213.             })
  214.             .catch(function (error) {
  215.                 console.log(error);
  216.             });
  217.         }
  218.       },
  219.     })
  220.  
  221.  
  222.     new Vue({
  223.       el : "#search",
  224.       data : {
  225.         search :null
  226.       },
  227.       methods: {
  228.         searchData: function(){
  229.           if (this.search==null){
  230.               this.$refs.search.focus();
  231.               return;
  232.           }
  233.  
  234.           axios.post('/book-search', {
  235.                 search: this.search,
  236.                     _token : _TOKEN_
  237.             })
  238.           .then(function (response) {
  239.              var obj = response.data;
  240.              app.books = obj;
  241.           })
  242.           .catch(function (error) {
  243.               console.log(error);
  244.           });
  245.         }
  246.       },
  247.     })
  248.  
  249.   var edit=  new Vue({
  250.       el : "#modal_edit",
  251.       data : {
  252.         name: null,
  253.         cover : null,
  254.         price : null,
  255.         id: null
  256.       },
  257.       methods: {
  258.         updateData: function(){
  259.            if (this.name==null){
  260.                 this.$refs.name.focus();
  261.                 return;
  262.             }
  263.             if (this.cover==null){
  264.                 this.$refs.cover.focus();
  265.                 return;
  266.             }
  267.             if (this.price==null){
  268.                 this.$refs.price.focus();
  269.                 return;
  270.             }
  271.  
  272.             axios.post('/book-update', {
  273.                     id:this.id,
  274.                     name: this.name,
  275.                     cover:this.cover,
  276.                     price:this.price,
  277.                     _token : _TOKEN_
  278.                 })
  279.             .then(function (response) {
  280.                 alert("success update data")
  281.                 app.loadData();
  282.             })
  283.             .catch(function (error) {
  284.                 console.log(error);
  285.             });
  286.         }
  287.       },
  288.     })
  289. </script>
  290.  
  291. </body>
  292. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement