cloudpivot-sheet-filter 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,228 @@
1
+ # cloudpivot-sheet-filter
2
+
3
+ 子表筛选工具,支持多字段、多条件、不同逻辑的筛选操作。
4
+
5
+ ## 适用云枢版本
6
+
7
+ 云枢版本 6.14,应该6版本都兼容。其他版本需自行测试。
8
+
9
+ ## 安装
10
+
11
+ ### 通过 CDN 使用
12
+
13
+ #### ES 模块方式
14
+ ```javascript
15
+ import sheetFilter, { FilterOperators } from 'https://cdn.example.com/cloudpivot-sheet-filter/dist/index.esm.js';
16
+ ```
17
+
18
+ #### IIFE 方式
19
+ ```html
20
+ <script src="https://cdn.example.com/cloudpivot-sheet-filter/dist/index.iife.js"></script>
21
+ <script>
22
+ // 使用全局变量 sheetFilter 和 sheetFilter.FilterOperators
23
+ </script>
24
+ ```
25
+
26
+ ## 基本使用
27
+
28
+ ```javascript
29
+ // 导入模块
30
+ import sheetFilter, { FilterOperators } from 'cloudpivot-sheet-filter';
31
+
32
+ // 子表筛选定义
33
+ var sheetF = null;
34
+
35
+ // 子表筛选类实例化
36
+ sheetF = new sheetFilter();
37
+
38
+ // 添加筛选条件:检结果等于NG
39
+ // 第一个参数 'Radio1719304490857' 是子表内的控件的编码
40
+ sheetF.addFilter('Radio1719304490857', FilterOperators.EQ, 'NG');
41
+
42
+ // 启用筛选
43
+ // 第一个参数 this.Sheet1719303475853 是子表的对象
44
+ sheetF.filter(this.Sheet1719303475853, true);
45
+
46
+ // 关闭筛选
47
+ // sheetF.filter(this.Sheet1719303475853, false);
48
+ ```
49
+
50
+ ## 高级用法
51
+
52
+ ### 预筛选与应用筛选
53
+
54
+ 使用预筛选方法可以在不修改子表的情况下检查筛选结果,适合用于控制UI元素的显示状态。
55
+
56
+ ```javascript
57
+ // 添加筛选条件
58
+ sheetF.addFilter('Radio1719304490857', FilterOperators.EQ, 'NG');
59
+
60
+ // 预筛选,获取筛选结果但不修改子表
61
+ const previewResult = sheetF.previewFilter(this.Sheet1719303475853);
62
+
63
+ // 根据预筛选结果控制switch开关的可见性
64
+ if (previewResult !== null) {
65
+ // 有筛选结果,显示switch开关
66
+ showFilterSwitch(true);
67
+
68
+ // 用户点击switch开关时应用筛选
69
+ applyFilterButton.onclick = () => {
70
+ sheetF.applyFilter(this.Sheet1719303475853, previewResult);
71
+ };
72
+ } else {
73
+ // 无筛选结果,隐藏switch开关或禁用
74
+ showFilterSwitch(false);
75
+ alert('当前筛选条件无匹配结果,无法进行筛选操作');
76
+ }
77
+ ```
78
+
79
+ ### 多条件筛选
80
+
81
+ ```javascript
82
+ // 链式调用添加多个筛选条件
83
+ // 每个 addFilter 的第一个参数都是子表内的控件的编码
84
+ sheetF
85
+ .addFilter('Radio1719304490857', FilterOperators.EQ, 'NG') // 控件编码:Radio1719304490857
86
+ .addFilter('Number1719304500123', FilterOperators.GT, 100) // 控件编码:Number1719304500123
87
+ .addFilter('Date1719304510456', FilterOperators.LTE, new Date()); // 控件编码:Date1719304510456
88
+ ```
89
+
90
+ ### 设置筛选逻辑
91
+
92
+ ```javascript
93
+ // 设置 AND 逻辑(默认)
94
+ sheetF.setAndLogic();
95
+
96
+ // 设置 OR 逻辑
97
+ sheetF.setOrLogic();
98
+
99
+ // 获取当前筛选逻辑
100
+ const logic = sheetF.getLogic();
101
+ console.log('当前筛选逻辑:', logic); // 'AND' 或 'OR'
102
+ ```
103
+
104
+ ### 清除筛选条件
105
+
106
+ ```javascript
107
+ // 清除所有筛选条件
108
+ sheetF.clearFilters();
109
+ ```
110
+
111
+ ### 检查筛选状态
112
+
113
+ ```javascript
114
+ // 检查是否已筛选
115
+ const isFiltered = sheetF.isFiltered();
116
+ console.log('是否已筛选:', isFiltered); // true 或 false
117
+ ```
118
+
119
+ ## 操作符说明
120
+
121
+ | 操作符 | 描述 | 值 |
122
+ |-------|------|----|
123
+ | FilterOperators.EQ | 等于 | 'eq' |
124
+ | FilterOperators.NEQ | 不等于 | 'neq' |
125
+ | FilterOperators.LT | 小于 | 'lt' |
126
+ | FilterOperators.LTE | 小于等于 | 'lte' |
127
+ | FilterOperators.GT | 大于 | 'gt' |
128
+ | FilterOperators.GTE | 大于等于 | 'gte' |
129
+
130
+ ## API 文档
131
+
132
+ ### sheetFilter 类
133
+
134
+ #### 构造函数
135
+ ```javascript
136
+ const sheetF = new sheetFilter();
137
+ ```
138
+
139
+ #### 方法
140
+
141
+ ##### setAndLogic()
142
+ 设置筛选逻辑为 AND(默认)。
143
+
144
+ ##### setOrLogic()
145
+ 设置筛选逻辑为 OR。
146
+
147
+ ##### getLogic()
148
+ 返回当前筛选逻辑,'AND' 或 'OR'。
149
+
150
+ ##### isFiltered()
151
+ 返回筛选状态,true 表示已筛选,false 表示未筛选。
152
+
153
+ ##### clearFilters()
154
+ 清除所有筛选条件。
155
+
156
+ ##### addFilter(columnKey, operator, value)
157
+ 添加筛选条件。
158
+ - `columnKey`: 子表内的控件的编码(字符串)
159
+ - `operator`: 操作符(字符串或 FilterOperators 常量)
160
+ - `value`: 筛选值(任意类型)
161
+ - 返回值:当前实例,支持链式调用
162
+
163
+ ##### filter(key, enable)
164
+ 执行筛选操作。
165
+ - `key`: 子表的对象
166
+ - `enable`: true 启用筛选,false 关闭筛选
167
+
168
+ ##### previewFilter(key)
169
+ 预筛选子表,获取筛选结果但不修改子表对象。
170
+ - `key`: 子表的对象
171
+ - 返回值:筛选结果 `{ index: [], value: [] }` 或 `null`(无匹配结果)
172
+
173
+ ##### applyFilter(key, filteredList)
174
+ 应用筛选,根据预筛选结果修改子表对象。
175
+ - `key`: 子表的对象
176
+ - `filteredList`: 预筛选结果(可选,如果不提供则自动执行预筛选)
177
+ - 返回值:`true` 成功应用筛选,`false` 筛选失败
178
+
179
+ ##### cancelFilter(key)
180
+ 取消筛选,恢复原始子表数据。
181
+ - `key`: 子表的对象
182
+ - 返回值:`true` 成功取消筛选,`false` 取消失败
183
+
184
+ ## 完整示例
185
+
186
+ ```javascript
187
+ // 导入模块
188
+ import sheetFilter, { FilterOperators } from 'cloudpivot-sheet-filter';
189
+
190
+ // 实例化
191
+ const sheetF = new sheetFilter();
192
+
193
+ // 设置筛选逻辑为 OR
194
+ sheetF.setOrLogic();
195
+
196
+ // 添加多个筛选条件
197
+ // 第一个参数都是子表内的控件的编码
198
+ sheetF
199
+ .addFilter('Radio1719304490857', FilterOperators.EQ, 'NG') // 控件编码:Radio1719304490857
200
+ .addFilter('Number1719304500123', FilterOperators.GT, 100); // 控件编码:Number1719304500123
201
+
202
+ // 启用筛选
203
+ // 第一个参数 this.Sheet1719303475853 是子表的对象
204
+ sheetF.filter(this.Sheet1719303475853, true);
205
+
206
+ // 检查筛选状态
207
+ console.log('是否已筛选:', sheetF.isFiltered());
208
+
209
+ // 稍后关闭筛选
210
+ setTimeout(() => {
211
+ // 第一个参数 this.Sheet1719303475853 是子表的对象
212
+ sheetF.filter(this.Sheet1719303475853, false);
213
+ console.log('筛选已关闭');
214
+ }, 5000);
215
+ ```
216
+
217
+ ## 注意事项
218
+
219
+ 1. 筛选操作会修改原始子表数据,关闭筛选时会恢复原始数据。
220
+ 2. 支持的数据类型包括字符串、数字、日期等。
221
+ 3. 操作符大小写敏感,但建议使用 FilterOperators 常量以确保正确性。
222
+ 4. 当筛选逻辑为 AND 时,所有条件必须同时满足;当筛选逻辑为 OR 时,只要满足任一条件即可。
223
+
224
+ ## 浏览器兼容性
225
+
226
+ - 支持所有现代浏览器
227
+ - 支持 ES6+ 环境
228
+ - 支持通过 CDN 直接使用
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ var n=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var d=(o,e)=>{for(var t in e)n(o,t,{get:e[t],enumerable:!0})},p=(o,e,t,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of g(e))!v.call(o,s)&&s!==t&&n(o,s,{get:()=>e[s],enumerable:!(l=c(e,s))||l.enumerable});return o};var b=o=>p(n({},"__esModule",{value:!0}),o);var L={};d(L,{FilterOperators:()=>w,default:()=>F});module.exports=b(L);var f=class{#t;#e;#l;#i;#s;constructor(){this.#t=[],this.#e={index:[],value:[]},this.#l=[],this.setAndLogic(),this.#s=!1}setAndLogic(){this.#i="AND"}setOrLogic(){this.#i="OR"}getLogic(){return this.#i}isFiltered(){return this.#s}clearFilters(){this.#l=[]}addFilter(e,t,l){return this.#l.push({columnKey:e,operator:t,value:l}),this}#r(e){let t={index:[],value:[]};for(let l=0;l<e.value.length;l++){let s=e.rows[l].value,i=!0;for(let h=0;h<this.#l.length;h++){let{columnKey:r,operator:u,value:a}=this.#l[h];switch(u){case"eq":s[r]!=a&&(i=!1);break;case"neq":s[r]==a&&(i=!1);break;case"lt":s[r]<a||(i=!1);break;case"lte":s[r]<=a||(i=!1);break;case"gt":s[r]>a||(i=!1);break;case"gte":s[r]>=a||(i=!1);break;default:throw new Error(`Unsupported operator: ${u}`)}if(!i)break}i&&(t.index.push(l),t.value.push(s))}return t.value.length>0?t:null}#a(e){console.log("filterOr");let t={index:[],value:[]};for(let l=0;l<e.value.length;l++){let s=e.rows[l].value,i=!1;for(let h=0;h<this.#l.length;h++){let{columnKey:r,operator:u,value:a}=this.#l[h];switch(u){case"eq":s[r]==a&&(i=!0);break;case"neq":s[r]!=a&&(i=!0);break;case"lt":s[r]<a&&(i=!0);break;case"lte":s[r]<=a&&(i=!0);break;case"gt":s[r]>a&&(i=!0);break;case"gte":s[r]>=a&&(i=!0);break;default:throw new Error(`Unsupported operator: ${u}`)}if(i)break}i&&(t.index.push(l),t.value.push(s))}return t.value.length>0?t:null}previewFilter(e){return this.getLogic()=="AND"?this.#r(e):this.#a(e)}applyFilter(e,t=null){return this.isFiltered()||(t===null&&(t=this.previewFilter(e)),t===null)?!1:(console.log("applyFilter enable"),this.#t=this.sheetValueSafeCopy(e.value),console.log("this.#beforeList",this.#t),this.#e=t,console.log("this.#filteredList",this.#e),e.removeAllRow(),e.value=this.#e.value,this.#s=!0,console.log("key.value",e.value),!0)}cancelFilter(e){if(!this.isFiltered())return!1;if(this.#e.value.length>0){console.log("cancelFilter disable"),console.log("this.#beforeList",this.#t),console.log("before key.value",e.value);let t=this.sheetValueSafeCopy(e.value);for(let l=0;l<t.length;l++)l+1<=this.#e.value.length?this.#t[this.#e.index[l]]=t[l]:this.#t.push(t[l]);return e.removeAllRow(),e.value=this.#t,this.#s=!1,console.log("after key.value",e.value),!0}return!1}filter(e,t){debugger;if(t){if(this.isFiltered())return;console.log("filter enable"),this.#t=this.sheetValueSafeCopy(e.value),console.log("this.#beforeList",this.#t),this.#e=this.getLogic()=="AND"?this.#r(e):this.#a(e),console.log("this.#filteredList",this.#e),this.#e!=null&&(e.removeAllRow(),e.value=this.#e.value,this.#s=!0),console.log("key.value",e.value)}else{if(!this.isFiltered())return;if(this.#e.value.length>0){console.log("filter disable"),console.log("this.#beforeList",this.#t),console.log("before key.value",e.value);let l=this.sheetValueSafeCopy(e.value);for(let s=0;s<l.length;s++)s+1<=this.#e.value.length?this.#t[this.#e.index[s]]=l[s]:this.#t.push(l[s]);e.removeAllRow(),e.value=this.#t,this.#s=!1,console.log("after key.value",e.value)}}}sheetValueSafeCopy(e){let t=e;for(let l=0;l<t.length;l++)delete t[l].rowStatus,delete t[l].id;return t}},w={EQ:"eq",NEQ:"neq",LT:"lt",LTE:"lte",GT:"gt",GTE:"gte"},F=f;
@@ -0,0 +1 @@
1
+ var u=class{#t;#e;#l;#i;#s;constructor(){this.#t=[],this.#e={index:[],value:[]},this.#l=[],this.setAndLogic(),this.#s=!1}setAndLogic(){this.#i="AND"}setOrLogic(){this.#i="OR"}getLogic(){return this.#i}isFiltered(){return this.#s}clearFilters(){this.#l=[]}addFilter(e,t,l){return this.#l.push({columnKey:e,operator:t,value:l}),this}#r(e){let t={index:[],value:[]};for(let l=0;l<e.value.length;l++){let s=e.rows[l].value,i=!0;for(let o=0;o<this.#l.length;o++){let{columnKey:r,operator:h,value:a}=this.#l[o];switch(h){case"eq":s[r]!=a&&(i=!1);break;case"neq":s[r]==a&&(i=!1);break;case"lt":s[r]<a||(i=!1);break;case"lte":s[r]<=a||(i=!1);break;case"gt":s[r]>a||(i=!1);break;case"gte":s[r]>=a||(i=!1);break;default:throw new Error(`Unsupported operator: ${h}`)}if(!i)break}i&&(t.index.push(l),t.value.push(s))}return t.value.length>0?t:null}#a(e){console.log("filterOr");let t={index:[],value:[]};for(let l=0;l<e.value.length;l++){let s=e.rows[l].value,i=!1;for(let o=0;o<this.#l.length;o++){let{columnKey:r,operator:h,value:a}=this.#l[o];switch(h){case"eq":s[r]==a&&(i=!0);break;case"neq":s[r]!=a&&(i=!0);break;case"lt":s[r]<a&&(i=!0);break;case"lte":s[r]<=a&&(i=!0);break;case"gt":s[r]>a&&(i=!0);break;case"gte":s[r]>=a&&(i=!0);break;default:throw new Error(`Unsupported operator: ${h}`)}if(i)break}i&&(t.index.push(l),t.value.push(s))}return t.value.length>0?t:null}previewFilter(e){return this.getLogic()=="AND"?this.#r(e):this.#a(e)}applyFilter(e,t=null){return this.isFiltered()||(t===null&&(t=this.previewFilter(e)),t===null)?!1:(console.log("applyFilter enable"),this.#t=this.sheetValueSafeCopy(e.value),console.log("this.#beforeList",this.#t),this.#e=t,console.log("this.#filteredList",this.#e),e.removeAllRow(),e.value=this.#e.value,this.#s=!0,console.log("key.value",e.value),!0)}cancelFilter(e){if(!this.isFiltered())return!1;if(this.#e.value.length>0){console.log("cancelFilter disable"),console.log("this.#beforeList",this.#t),console.log("before key.value",e.value);let t=this.sheetValueSafeCopy(e.value);for(let l=0;l<t.length;l++)l+1<=this.#e.value.length?this.#t[this.#e.index[l]]=t[l]:this.#t.push(t[l]);return e.removeAllRow(),e.value=this.#t,this.#s=!1,console.log("after key.value",e.value),!0}return!1}filter(e,t){debugger;if(t){if(this.isFiltered())return;console.log("filter enable"),this.#t=this.sheetValueSafeCopy(e.value),console.log("this.#beforeList",this.#t),this.#e=this.getLogic()=="AND"?this.#r(e):this.#a(e),console.log("this.#filteredList",this.#e),this.#e!=null&&(e.removeAllRow(),e.value=this.#e.value,this.#s=!0),console.log("key.value",e.value)}else{if(!this.isFiltered())return;if(this.#e.value.length>0){console.log("filter disable"),console.log("this.#beforeList",this.#t),console.log("before key.value",e.value);let l=this.sheetValueSafeCopy(e.value);for(let s=0;s<l.length;s++)s+1<=this.#e.value.length?this.#t[this.#e.index[s]]=l[s]:this.#t.push(l[s]);e.removeAllRow(),e.value=this.#t,this.#s=!1,console.log("after key.value",e.value)}}}sheetValueSafeCopy(e){let t=e;for(let l=0;l<t.length;l++)delete t[l].rowStatus,delete t[l].id;return t}},f={EQ:"eq",NEQ:"neq",LT:"lt",LTE:"lte",GT:"gt",GTE:"gte"},c=u;export{f as FilterOperators,c as default};
@@ -0,0 +1 @@
1
+ var sheetFilter=(()=>{var n=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var d=(o,e)=>{for(var t in e)n(o,t,{get:e[t],enumerable:!0})},p=(o,e,t,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of g(e))!v.call(o,s)&&s!==t&&n(o,s,{get:()=>e[s],enumerable:!(l=c(e,s))||l.enumerable});return o};var b=o=>p(n({},"__esModule",{value:!0}),o);var L={};d(L,{FilterOperators:()=>w,default:()=>F});var f=class{#t;#e;#l;#i;#s;constructor(){this.#t=[],this.#e={index:[],value:[]},this.#l=[],this.setAndLogic(),this.#s=!1}setAndLogic(){this.#i="AND"}setOrLogic(){this.#i="OR"}getLogic(){return this.#i}isFiltered(){return this.#s}clearFilters(){this.#l=[]}addFilter(e,t,l){return this.#l.push({columnKey:e,operator:t,value:l}),this}#r(e){let t={index:[],value:[]};for(let l=0;l<e.value.length;l++){let s=e.rows[l].value,i=!0;for(let h=0;h<this.#l.length;h++){let{columnKey:r,operator:u,value:a}=this.#l[h];switch(u){case"eq":s[r]!=a&&(i=!1);break;case"neq":s[r]==a&&(i=!1);break;case"lt":s[r]<a||(i=!1);break;case"lte":s[r]<=a||(i=!1);break;case"gt":s[r]>a||(i=!1);break;case"gte":s[r]>=a||(i=!1);break;default:throw new Error(`Unsupported operator: ${u}`)}if(!i)break}i&&(t.index.push(l),t.value.push(s))}return t.value.length>0?t:null}#a(e){console.log("filterOr");let t={index:[],value:[]};for(let l=0;l<e.value.length;l++){let s=e.rows[l].value,i=!1;for(let h=0;h<this.#l.length;h++){let{columnKey:r,operator:u,value:a}=this.#l[h];switch(u){case"eq":s[r]==a&&(i=!0);break;case"neq":s[r]!=a&&(i=!0);break;case"lt":s[r]<a&&(i=!0);break;case"lte":s[r]<=a&&(i=!0);break;case"gt":s[r]>a&&(i=!0);break;case"gte":s[r]>=a&&(i=!0);break;default:throw new Error(`Unsupported operator: ${u}`)}if(i)break}i&&(t.index.push(l),t.value.push(s))}return t.value.length>0?t:null}previewFilter(e){return this.getLogic()=="AND"?this.#r(e):this.#a(e)}applyFilter(e,t=null){return this.isFiltered()||(t===null&&(t=this.previewFilter(e)),t===null)?!1:(console.log("applyFilter enable"),this.#t=this.sheetValueSafeCopy(e.value),console.log("this.#beforeList",this.#t),this.#e=t,console.log("this.#filteredList",this.#e),e.removeAllRow(),e.value=this.#e.value,this.#s=!0,console.log("key.value",e.value),!0)}cancelFilter(e){if(!this.isFiltered())return!1;if(this.#e.value.length>0){console.log("cancelFilter disable"),console.log("this.#beforeList",this.#t),console.log("before key.value",e.value);let t=this.sheetValueSafeCopy(e.value);for(let l=0;l<t.length;l++)l+1<=this.#e.value.length?this.#t[this.#e.index[l]]=t[l]:this.#t.push(t[l]);return e.removeAllRow(),e.value=this.#t,this.#s=!1,console.log("after key.value",e.value),!0}return!1}filter(e,t){debugger;if(t){if(this.isFiltered())return;console.log("filter enable"),this.#t=this.sheetValueSafeCopy(e.value),console.log("this.#beforeList",this.#t),this.#e=this.getLogic()=="AND"?this.#r(e):this.#a(e),console.log("this.#filteredList",this.#e),this.#e!=null&&(e.removeAllRow(),e.value=this.#e.value,this.#s=!0),console.log("key.value",e.value)}else{if(!this.isFiltered())return;if(this.#e.value.length>0){console.log("filter disable"),console.log("this.#beforeList",this.#t),console.log("before key.value",e.value);let l=this.sheetValueSafeCopy(e.value);for(let s=0;s<l.length;s++)s+1<=this.#e.value.length?this.#t[this.#e.index[s]]=l[s]:this.#t.push(l[s]);e.removeAllRow(),e.value=this.#t,this.#s=!1,console.log("after key.value",e.value)}}}sheetValueSafeCopy(e){let t=e;for(let l=0;l<t.length;l++)delete t[l].rowStatus,delete t[l].id;return t}},w={EQ:"eq",NEQ:"neq",LT:"lt",LTE:"lte",GT:"gt",GTE:"gte"},F=f;return b(L);})();
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "cloudpivot-sheet-filter",
3
+ "version": "1.0.0",
4
+ "description": "子表筛选工具 - Cloudpivot子表筛选解决方案",
5
+ "main": "dist/index.cjs",
6
+ "module": "dist/index.esm.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.esm.js",
11
+ "require": "./dist/index.cjs",
12
+ "default": "./dist/index.esm.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "build": "esbuild src/index.js --bundle --outfile=dist/index.cjs --format=cjs --minify && esbuild src/index.js --bundle --outfile=dist/index.esm.js --format=esm --minify && esbuild src/index.js --bundle --outfile=dist/index.iife.js --format=iife --global-name=sheetFilter --minify",
20
+ "test": "echo \"Error: no test specified\" && exit 1"
21
+ },
22
+ "keywords": ["cloudpivot", "sheet", "filter", "esm"],
23
+ "author": "",
24
+ "license": "MIT",
25
+ "devDependencies": {
26
+ "esbuild": "^0.20.0"
27
+ }
28
+ }