Skip to content

Commit 787d18d

Browse files
author
hikki
committed
1.9
1 parent 03e6fb5 commit 787d18d

File tree

3 files changed

+93
-4
lines changed

3 files changed

+93
-4
lines changed

resources/assets/component.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class ComponentDot {
8484
constructor(name, selected, select) {
8585
this.name = name;
8686
this.DOM = document.getElementById(name);
87-
if (!Array.isArray(selected)) {
87+
if (!Array.isArray(selected) || !Array.isArray(select)) {
8888
console.error('Dot param selected is not array!');
8989
return;
9090
}
@@ -218,10 +218,10 @@ class ComponentCascadeDot {
218218
delete: 'delete'
219219
};
220220

221-
constructor(name, selected, select, options) {
221+
constructor(name, selected, select) {
222222
this.name = name;
223223
this.DOM = document.getElementById(name);
224-
if (!Array.isArray(selected)) {
224+
if (!Array.isArray(selected) || !Array.isArray(select)) {
225225
console.error('CascadeDot param selected is not array!');
226226
return;
227227
}

src/DLPHelper.php

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,61 @@
99
*/
1010
class DLPHelper
1111
{
12+
/**
13+
* dot增减计算
14+
* @param array $selected 过去已经选择
15+
* @param array $select 已选择
16+
* @return array [insert,delete]
17+
*/
18+
public static function dotCalculate(array $selected,array $select)
19+
{
20+
$insert = [];
21+
$delete = [];
22+
$intersect = array_intersect($selected,$select);
23+
$intersect_count = count($intersect);
24+
$selected_count = count($selected);
25+
$select_count = count($select);
26+
if($intersect_count == $selected_count && $intersect_count == $select_count){
27+
return [$insert,$delete];
28+
}
29+
if($intersect_count == $selected_count && $intersect_count < $select_count){
30+
$insert = array_diff($select,$intersect);
31+
return [$insert,$delete];
32+
}
33+
if($intersect_count < $selected_count && $intersect_count == $select_count){
34+
$delete = array_diff($selected,$intersect);
35+
return [$insert,$delete];
36+
}
37+
if($intersect_count < $selected_count && $intersect_count < $select_count){
38+
$insert = array_diff($select,$intersect);
39+
$delete = array_diff($selected,$intersect);
40+
return [$insert,$delete];
41+
}
42+
}
43+
44+
/**
45+
* 维度结构数据
46+
* [[key=>integer,val=>string,par=>integer],...]
47+
* @param array $data
48+
*/
49+
public static function dimensionCalculate(array &$data)
50+
{
51+
foreach ($data as $key=>&$d){
52+
$parent_node = $d['par'];
53+
unset($d['par']);
54+
foreach ($data as &$val){
55+
if($val['key'] == $parent_node){
56+
if(!isset($val['nodes'])){
57+
$val['nodes'] = [];
58+
}
59+
$val['nodes'][] = $d;
60+
unset($data[$key]);
61+
}
62+
}
63+
}
64+
$data = array_values($data);
65+
}
66+
1267
/**
1368
* @param array $data
1469
* @return false|string

src/DLPViewer.php

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class DLPViewer
2121
* @param string $column 数据字段名
2222
* @param string $title 名称
2323
* @param array $selected 已选择选项 [value1,value2,...]
24-
* @param array $select 全部选项 [[value=>text],[value=>text]...]
24+
* @param array $select 全部选项 [[value1=>text1],[value2=>text2]...]
2525
* @param array $settings 配置项[setting,...]
2626
* settings.strict boolean json严格模式消除json敏感字符问题
2727
* settings.width string 容器宽度设置
@@ -46,6 +46,40 @@ public static function makeComponentDot(Form $form, string $column, string $titl
4646
$form->html("<div id='{$column}' style='width:{$width};height: {$height};'></div>", $title);
4747
}
4848

49+
/**
50+
* 维度.点
51+
* @param Form $form
52+
* @param string $column 数据字段名
53+
* @param string $title 名称
54+
* @param array $selected 已选择选项 [value1,value2,...]
55+
* @param array $select 全部选项 [[key=>key1,val=>value1,nodes=>[...]],...]
56+
* select.node.key integer 键
57+
* select.node.val string 值
58+
* select.node.nodes array 子节点[node,node,...]
59+
* @param array $settings 配置项[setting,...]
60+
* settings.strict boolean json严格模式消除json敏感字符问题
61+
* settings.width string 容器宽度设置
62+
* settings.height string 容器高度设置
63+
*/
64+
public static function makeComponentCascadeDot(Form $form, string $column, string $title, array $selected = [], array $select = [], array $settings = [])
65+
{
66+
$strict = isset($settings['strict']) && $settings['strict'] ? true : false;
67+
$width = isset($settings['width']) ? $settings['width'] : '100%';
68+
$height = isset($settings['height']) ? $settings['height'] : '200px';
69+
if ($strict) {
70+
$selected = DLPHelper::safeJson($selected);
71+
$select = DLPHelper::safeJson($select);
72+
} else {
73+
$selected = json_encode($selected, JSON_UNESCAPED_UNICODE | JSON_HEX_QUOT | JSON_HEX_APOS);
74+
$select = json_encode($select, JSON_UNESCAPED_UNICODE | JSON_HEX_QUOT | JSON_HEX_APOS);
75+
}
76+
Admin::script(<<<EOF
77+
new ComponentCascadeDot("{$column}",JSON.parse('{$selected}'),JSON.parse('{$select}'));
78+
EOF
79+
);
80+
$form->html("<div id='{$column}' style='width:{$width};height: {$height};'></div>", $title);
81+
}
82+
4983
/**
5084
* 线
5185
* @param Form $form

0 commit comments

Comments
 (0)