device-select.blade.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. ?>
  3. <style type="text/css">
  4. #sg-device-select-app {
  5. display: inline;
  6. }
  7. </style>
  8. <div id="sg-device-select-app">
  9. <div class="layui-inline">
  10. <div class="layui-input-inline">
  11. <select name="device_id" lay-filter="device_id">
  12. @foreach($options as $option)
  13. <option value="{{$option->value}}" {{$option->value == $device_id ? 'selected' : ''}}>{{$option->text}}</option>
  14. @endforeach
  15. </select>
  16. </div>
  17. </div>
  18. <div class="layui-inline">
  19. <div class="layui-input-inline">
  20. <select name="device_name_id" lay-filter="device_name_id">
  21. </select>
  22. </div>
  23. </div>
  24. @if(!isset($hide_spec))
  25. <div class="layui-inline">
  26. <div class="layui-input-inline">
  27. <select name="spec_id" lay-filter="spec_id">
  28. </select>
  29. </div>
  30. </div>
  31. @endif
  32. </div>
  33. <script>
  34. $(function() {
  35. layui.use(['form'], function() {
  36. let form = layui.form;
  37. let data = JSON.parse('{!! $options !!}');
  38. let device_names = [];
  39. let specs = [];
  40. let device_id = '{{ $device_id }}';
  41. let device_name_id = '{{ $device_name_id }}';
  42. let hide_spec = '{{ isset($hide_spec) ? "yes" : "no" }}';
  43. form.on('select(device_id)', function(data) {
  44. device_id = data.value;
  45. device_name_id = '';
  46. updateDeviceName()
  47. });
  48. form.on('select(device_name_id)', function(data) {
  49. device_name_id = data.value;
  50. updateSpec()
  51. });
  52. updateDeviceName();
  53. function updateDeviceName() {
  54. let device_index = getIndex(data, device_id);
  55. device_names = data[device_index].names;
  56. let options = '';
  57. for(let i = 0; i < device_names.length; ++i) {
  58. options += '<option value=' + device_names[i].value + '>' + device_names[i].text + '</option>'
  59. }
  60. $("select[name='device_name_id']").html(options);
  61. form.render('select');
  62. if(hide_spec === 'no') updateSpec()
  63. }
  64. function updateSpec() {
  65. let name_index = getIndex(device_names, device_name_id);
  66. specs = device_names[name_index].specs;
  67. let options = '';
  68. for(let i = 0; i < specs.length; ++i) {
  69. options += '<option value=' + specs[i].value + '>' + specs[i].text + '</option>'
  70. }
  71. $("select[name='spec_id']").html(options);
  72. form.render('select');
  73. }
  74. function getIndex(list, id) {
  75. id = parseInt(id);
  76. for(var i = 0; i < list.length; ++i) {
  77. if(list[i].value === id) return i;
  78. }
  79. return 0;
  80. }
  81. })
  82. })
  83. </script>