v1.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace zin;
  3. require_once dirname(__DIR__) . DS . 'panel' . DS . 'v1.php';
  4. require_once dirname(__DIR__) . DS . 'checklist' . DS . 'v1.php';
  5. class fieldSelectPanel extends wg
  6. {
  7. /**
  8. * @var mixed[]
  9. */
  10. protected static $defineProps = array(
  11. 'table?: string', // 表名。
  12. 'alias?: string', // 表别名。
  13. 'fields?: array', // 表字段列表。
  14. 'values?: array', // 选中值。
  15. 'col?: int', // 列数。
  16. 'onChange?: function',
  17. 'onSelectAll?: function'
  18. );
  19. public static function getPageCSS()
  20. {
  21. return file_get_contents(__DIR__ . DS . 'css' . DS . 'v1.css');
  22. }
  23. protected function getFieldList()
  24. {
  25. list($alias, $fields, $values) = $this->prop(array('alias', 'fields', 'values'));
  26. $fieldList = array();
  27. foreach($fields as $key => $text)
  28. {
  29. $field = array('text' => "$text({$key})", 'value' => $key, 'data-alias' => $alias);
  30. $field['checked'] = in_array($key, $values);
  31. $field['class'] = 'select-field-checkbox';
  32. $fieldList[] = $field;
  33. }
  34. return $fieldList;
  35. }
  36. protected function build()
  37. {
  38. global $lang;
  39. list($table, $alias, $fields, $values, $col, $onChange, $onSelectAll) = $this->prop(array('table', 'alias', 'fields', 'values', 'col', 'onChange', 'onSelectAll'));
  40. $isCheckedAll = count($fields) == count($values);
  41. $panelClass = $col == 1 ? "w-full" : 'w-1/' . min($col, 6) . '-gap-4';
  42. $checkClass = 'checkbox-col-' . max(floor(6 / $col), 1);
  43. return panel
  44. (
  45. setID("selectFields$alias"),
  46. setClass("h-full $panelClass flex-none"),
  47. set::title("$table({$alias})"),
  48. set::headingClass('bg-gray-100 relative'),
  49. set::bodyClass('h-70 overflow-y-auto'),
  50. to::heading
  51. (
  52. div
  53. (
  54. setClass('absolute right-4 flex gap-x-2'),
  55. btn
  56. (
  57. setClass('p-0 check-all'),
  58. set('data-alias', $alias),
  59. set('data-checked', $isCheckedAll),
  60. set::type('ghost'),
  61. $isCheckedAll ? $lang->bi->cancelAll : $lang->bi->checkAll,
  62. on::click()->do($onSelectAll)
  63. )
  64. )
  65. ),
  66. checkList
  67. (
  68. setClass("flex justify-start gap-x-0 checkbox-col $checkClass"),
  69. set::primary(true),
  70. set::inline(true),
  71. set::name($alias),
  72. set::title('text'),
  73. set::items($this->getFieldList()),
  74. on::change()->do($onChange)
  75. )
  76. );
  77. }
  78. }