@steedos-widgets/amis-lib 1.3.17-beta.2 → 1.3.18
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/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/index.cjs.js +207 -103
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +208 -104
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +56 -45
- package/dist/index.umd.js.map +1 -1
- package/dist/types/lib/converter/amis/toolbar.d.ts +1 -2
- package/dist/types/lib/converter/amis/toolbars/setting_listview/columns.d.ts +0 -1
- package/dist/types/lib/converter/amis/toolbars/setting_listview/copy.d.ts +6 -0
- package/dist/types/lib/converter/amis/toolbars/setting_listview/new.d.ts +19 -0
- package/dist/types/lib/converter/amis/toolbars/setting_listview.d.ts +25 -1
- package/package.json +2 -2
package/dist/index.cjs.js
CHANGED
|
@@ -2013,9 +2013,9 @@ function getFieldWidth(width){
|
|
|
2013
2013
|
const defaultWidth = "unset";//用于使table内的td标签下生成div,实现将快速编辑按钮固定在右侧的效果,并不是为了unset效果
|
|
2014
2014
|
if(typeof width == 'string'){
|
|
2015
2015
|
if(isNaN(width)){
|
|
2016
|
-
return width;
|
|
2016
|
+
return width || defaultWidth;
|
|
2017
2017
|
}else {
|
|
2018
|
-
return Number(width);
|
|
2018
|
+
return Number(width) || defaultWidth;
|
|
2019
2019
|
}
|
|
2020
2020
|
}else if(typeof width == 'number'){
|
|
2021
2021
|
return width;
|
|
@@ -2116,6 +2116,7 @@ async function getTableColumns(fields, options){
|
|
|
2116
2116
|
width: getFieldWidth(field.width),
|
|
2117
2117
|
toggled: field.toggled,
|
|
2118
2118
|
className,
|
|
2119
|
+
inputClassName: "inline",
|
|
2119
2120
|
static: true,
|
|
2120
2121
|
}, field.amis, {name: field.name});
|
|
2121
2122
|
}
|
|
@@ -2153,6 +2154,7 @@ async function getTableColumns(fields, options){
|
|
|
2153
2154
|
tpl: tpl,
|
|
2154
2155
|
toggled: field.toggled,
|
|
2155
2156
|
className,
|
|
2157
|
+
inputClassName: "inline",
|
|
2156
2158
|
static: true,
|
|
2157
2159
|
options: field.type === 'html' ? {html: true} : null
|
|
2158
2160
|
// toggled: true
|
|
@@ -2174,8 +2176,8 @@ async function getTableColumns(fields, options){
|
|
|
2174
2176
|
const href = Router.getObjectDetailPath({
|
|
2175
2177
|
...options, formFactor: options.formFactor, appId: "${appId}", objectName: options.objectName || "${objectName}", recordId: `\${${options.idFieldName}}`
|
|
2176
2178
|
});
|
|
2177
|
-
columns[
|
|
2178
|
-
columns[
|
|
2179
|
+
columns[1].type = "tpl";
|
|
2180
|
+
columns[1].tpl = `<a href="${href}">\${${columns[1].name}}</a>`;
|
|
2179
2181
|
}
|
|
2180
2182
|
return columns;
|
|
2181
2183
|
}
|
|
@@ -2642,19 +2644,25 @@ async function getTableApi(mainObject, fields, options){
|
|
|
2642
2644
|
if(options.isRelated){
|
|
2643
2645
|
api.url += "&recordId=${_master.recordId}";
|
|
2644
2646
|
}
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
+
api.cache = 3000;
|
|
2647
2648
|
api.data.$term = "$term";
|
|
2648
2649
|
api.data.term = "$term";
|
|
2649
2650
|
api.data.$self = "$$";
|
|
2650
2651
|
api.data.self = "$$";
|
|
2651
2652
|
api.data.filter = "$filter";
|
|
2652
|
-
api.data.__filterFormValues = "${__filterFormValues}";
|
|
2653
|
-
api.data.__serachBoxValues = "${__serachBoxValues}";
|
|
2654
2653
|
api.data.loaded = "${loaded}";
|
|
2655
2654
|
api.data.listViewId = "${listViewId}";
|
|
2656
2655
|
api.data.listName = "${listName}";
|
|
2657
2656
|
api.requestAdaptor = `
|
|
2657
|
+
let __changedFilterFormValues = api.data.$self.__changedFilterFormValues || {};
|
|
2658
|
+
let __changedSearchBoxValues = api.data.$self.__changedSearchBoxValues || {};
|
|
2659
|
+
// 把表单搜索和快速搜索中的change事件中记录的过滤条件也拼到$self中,是为解决触发搜索请求时,两边输入的过滤条件都带上,即:
|
|
2660
|
+
// 有时在搜索表单中输入过滤条件事,忘记点击回车键或搜索按钮,而是进一步修改快速搜索框中的关键字点击其中回车键触发搜索
|
|
2661
|
+
// 这种情况下,触发的搜索请求中没有带上搜索表单中输入的过滤条件。
|
|
2662
|
+
// 反过来先在快速搜索框中输入过滤条件却不点击其中回车键触发搜索,而是到搜索表单中触发搜索请求也是一样的。
|
|
2663
|
+
// 这里直接合并到api.data.$self,而不是后面定义的selfData变量,是因为可以省去在接收适配器中写一样的合并逻辑
|
|
2664
|
+
// 如果有问题可以改为合并到selfData变量中,但是要在接收适配器中写上一样的合并逻辑,否则里面的过滤条件不会存入本地存储中
|
|
2665
|
+
Object.assign(api.data.$self, __changedSearchBoxValues, __changedFilterFormValues);
|
|
2658
2666
|
// selfData 中的数据由 CRUD 控制. selfData中,只能获取到 CRUD 给定的data. 无法从数据链中获取数据.
|
|
2659
2667
|
let selfData = JSON.parse(JSON.stringify(api.data.$self));
|
|
2660
2668
|
// 保留一份初始data,以供自定义发送适配器中获取原始数据。
|
|
@@ -2724,11 +2732,7 @@ async function getTableApi(mainObject, fields, options){
|
|
|
2724
2732
|
userFilters = [["${valueField.name}", "=", selfData.value]];
|
|
2725
2733
|
}
|
|
2726
2734
|
|
|
2727
|
-
|
|
2728
|
-
const __serachBoxValues = api.data.__serachBoxValues;
|
|
2729
|
-
// 筛选按钮
|
|
2730
|
-
const filterSelfData = __filterFormValues ? __filterFormValues : selfData;
|
|
2731
|
-
var searchableFilter = SteedosUI.getSearchFilter(filterSelfData) || [];
|
|
2735
|
+
var searchableFilter = SteedosUI.getSearchFilter(selfData) || [];
|
|
2732
2736
|
if(searchableFilter.length > 0){
|
|
2733
2737
|
if(userFilters.length > 0 ){
|
|
2734
2738
|
userFilters = [userFilters, 'and', searchableFilter];
|
|
@@ -2749,8 +2753,7 @@ async function getTableApi(mainObject, fields, options){
|
|
|
2749
2753
|
})
|
|
2750
2754
|
}
|
|
2751
2755
|
|
|
2752
|
-
|
|
2753
|
-
var keywordsFilters = SteedosUI.getKeywordsSearchFilter(keyWords, allowSearchFields);
|
|
2756
|
+
var keywordsFilters = SteedosUI.getKeywordsSearchFilter(selfData.__keywords, allowSearchFields);
|
|
2754
2757
|
if(keywordsFilters && keywordsFilters.length > 0){
|
|
2755
2758
|
userFilters.push(keywordsFilters);
|
|
2756
2759
|
}
|
|
@@ -2870,7 +2873,25 @@ async function getTableApi(mainObject, fields, options){
|
|
|
2870
2873
|
if(enable_tree){
|
|
2871
2874
|
const records = payload.data.rows || [];
|
|
2872
2875
|
const getTreeOptions = SteedosUI.getTreeOptions
|
|
2873
|
-
|
|
2876
|
+
let isTreeOptionsComputed = false;
|
|
2877
|
+
if(records.length === 1 && records[0].children){
|
|
2878
|
+
isTreeOptionsComputed = true;
|
|
2879
|
+
}
|
|
2880
|
+
if(!isTreeOptionsComputed){
|
|
2881
|
+
// 如果api接口设置在缓存,缓存期间并不会重新请求接口,payload.data.rows是上次计算后的结果
|
|
2882
|
+
payload.data.rows = getTreeOptions(records,{"valueField":"_id"});
|
|
2883
|
+
}
|
|
2884
|
+
try{
|
|
2885
|
+
setTimeout(() => {
|
|
2886
|
+
let expandBtn = $('.steedos-object-listview-content .antd-Table-content .antd-Table-table thead .antd-Table-expandBtn');
|
|
2887
|
+
if(expandBtn && expandBtn.length > 0 && !expandBtn.hasClass("is-active")){
|
|
2888
|
+
expandBtn[0].click();
|
|
2889
|
+
}
|
|
2890
|
+
}, 600);
|
|
2891
|
+
}
|
|
2892
|
+
catch(ex){
|
|
2893
|
+
console.error("tree数据格式展开异常:", ex);
|
|
2894
|
+
}
|
|
2874
2895
|
}
|
|
2875
2896
|
|
|
2876
2897
|
|
|
@@ -2903,19 +2924,6 @@ async function getTableApi(mainObject, fields, options){
|
|
|
2903
2924
|
selfData.page = localListViewProps.page || 1;
|
|
2904
2925
|
}
|
|
2905
2926
|
}
|
|
2906
|
-
|
|
2907
|
-
// 列表视图(对象表格)筛选按钮表单输入框输入内容后,如果不按回车键或者搜索按钮,selfData中该输入框是没有最新值的。
|
|
2908
|
-
const __filterFormValues = api.body.__filterFormValues;
|
|
2909
|
-
if(__filterFormValues){
|
|
2910
|
-
let filterFormValues = JSON.parse(JSON.stringify(__filterFormValues)) || {};
|
|
2911
|
-
selfData = Object.assign({}, selfData, filterFormValues);
|
|
2912
|
-
}
|
|
2913
|
-
// “搜索此列表”搜索框同理。
|
|
2914
|
-
const __serachBoxValues = api.body.__serachBoxValues;
|
|
2915
|
-
if(__serachBoxValues){
|
|
2916
|
-
let serachBoxValues = JSON.parse(JSON.stringify(__serachBoxValues)) || {};
|
|
2917
|
-
selfData = Object.assign({}, selfData, serachBoxValues);
|
|
2918
|
-
}
|
|
2919
2927
|
|
|
2920
2928
|
delete selfData.context;
|
|
2921
2929
|
delete selfData.global;
|
|
@@ -5690,6 +5698,7 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
|
|
|
5690
5698
|
const filterFormSchema = await getObjectFieldsFilterFormSchema(ctx);
|
|
5691
5699
|
const keywordsSearchBoxName = ctx.keywordsSearchBoxName || "__keywords";
|
|
5692
5700
|
const onSearchScript = `
|
|
5701
|
+
// console.log("===onSearchScript=form==");
|
|
5693
5702
|
const scope = event.context.scoped;
|
|
5694
5703
|
var filterForm = scope.parent.parent.getComponents().find(function(n){
|
|
5695
5704
|
return n.props.type === "form";
|
|
@@ -5746,25 +5755,13 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
|
|
|
5746
5755
|
crudService && crudService.setData({isFieldsFilterEmpty, showFieldsFilter});
|
|
5747
5756
|
`;
|
|
5748
5757
|
const onCancelScript = `
|
|
5749
|
-
|
|
5750
|
-
{
|
|
5751
|
-
"componentId": 'service_${ctx.crudId}',
|
|
5752
|
-
"actionType": "setValue",
|
|
5753
|
-
"args": {
|
|
5754
|
-
"value": {
|
|
5755
|
-
"__filterFormValues": null
|
|
5756
|
-
}
|
|
5757
|
-
}
|
|
5758
|
-
}
|
|
5759
|
-
)
|
|
5758
|
+
// console.log("===onCancelScript=form==");
|
|
5760
5759
|
const scope = event.context.scoped;
|
|
5761
5760
|
var filterForm = scope.parent.parent.getComponents().find(function(n){
|
|
5762
5761
|
return n.props.type === "form";
|
|
5763
5762
|
});
|
|
5764
5763
|
var filterFormValues = filterForm.getValues();
|
|
5765
|
-
|
|
5766
|
-
return n.props.type === "crud";
|
|
5767
|
-
});
|
|
5764
|
+
let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
|
|
5768
5765
|
const removedValues = {};
|
|
5769
5766
|
for(var k in filterFormValues){
|
|
5770
5767
|
if(/^__searchable__/.test(k)){
|
|
@@ -5779,7 +5776,7 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
|
|
|
5779
5776
|
if(localListViewProps){
|
|
5780
5777
|
localListViewProps = JSON.parse(localListViewProps);
|
|
5781
5778
|
for(var k in localListViewProps){
|
|
5782
|
-
if(k
|
|
5779
|
+
if(/^__searchable__/.test(k)){
|
|
5783
5780
|
removedValues[k] = null;
|
|
5784
5781
|
}
|
|
5785
5782
|
}
|
|
@@ -5790,20 +5787,35 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
|
|
|
5790
5787
|
//lookup字段保留快速搜索条件
|
|
5791
5788
|
removedValues[keywordsSearchBoxName] = filterFormValues[keywordsSearchBoxName];
|
|
5792
5789
|
}
|
|
5793
|
-
filterForm.
|
|
5794
|
-
|
|
5795
|
-
|
|
5796
|
-
|
|
5797
|
-
|
|
5798
|
-
|
|
5799
|
-
|
|
5800
|
-
|
|
5790
|
+
filterForm.setValues(removedValues);//会把表单提交到toolbar的快速搜索区域,造成在快速搜索框中触发搜索时再次把搜索表单中的字段值清除掉的bug,已单独在快速搜索框那边添加搜索事件代码处理过了
|
|
5791
|
+
// 以下方法都无法实现清除表单值
|
|
5792
|
+
// filterForm.setValues({}, true)
|
|
5793
|
+
// filterForm.reset();
|
|
5794
|
+
// filterForm.handleAction({},{
|
|
5795
|
+
// "actionType": "setValue",
|
|
5796
|
+
// "args": {
|
|
5797
|
+
// "value": removedValues
|
|
5798
|
+
// }
|
|
5799
|
+
// });
|
|
5800
|
+
// 下面触发clear动作可以清除表单值,且不会把表单提交到toolbar的快速搜索区域,但是会把金额等范围字段清空成非范围字段
|
|
5801
|
+
// filterForm.handleAction({},{
|
|
5802
|
+
// "actionType": "clear"
|
|
5803
|
+
// });
|
|
5804
|
+
|
|
5805
|
+
// 清除__changedFilterFormValues中的值
|
|
5806
|
+
crud && crud.setData({__changedFilterFormValues: {}});
|
|
5807
|
+
filterForm.handleFormSubmit(event);
|
|
5808
|
+
// crud.handleFilterSubmit(removedValues);
|
|
5809
|
+
|
|
5810
|
+
let filterFormService = SteedosUI.getClosestAmisComponentByType(filterForm.context, "service");
|
|
5811
|
+
filterFormService.setData({showFieldsFilter: !!!filterFormService.props.data.showFieldsFilter});
|
|
5801
5812
|
//触发amis crud 高度重算
|
|
5802
5813
|
setTimeout(()=>{
|
|
5803
5814
|
window.dispatchEvent(new Event("resize"))
|
|
5804
5815
|
}, 100);
|
|
5805
5816
|
// 移除搜索按钮上的红点
|
|
5806
|
-
let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
|
|
5817
|
+
// let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
|
|
5818
|
+
let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
|
|
5807
5819
|
crudService && crudService.setData({isFieldsFilterEmpty: true, showFieldsFilter: false});
|
|
5808
5820
|
`;
|
|
5809
5821
|
const dataProviderInited = `
|
|
@@ -6743,78 +6755,97 @@ function fields$1(){
|
|
|
6743
6755
|
|
|
6744
6756
|
function fieldsExtend$4(){
|
|
6745
6757
|
return {
|
|
6758
|
+
"group": "",
|
|
6746
6759
|
"label": {
|
|
6747
6760
|
"is_wide": true
|
|
6748
6761
|
},
|
|
6749
6762
|
"name": {
|
|
6763
|
+
"group": "",
|
|
6750
6764
|
"amis": {
|
|
6751
6765
|
"hidden": true,
|
|
6752
6766
|
"required": false
|
|
6753
6767
|
}
|
|
6754
6768
|
},
|
|
6755
6769
|
"object_name": {
|
|
6770
|
+
"group": "",
|
|
6756
6771
|
"amis": {
|
|
6757
6772
|
"hidden": true
|
|
6758
6773
|
}
|
|
6759
6774
|
},
|
|
6760
6775
|
"filter_scope": {
|
|
6776
|
+
"group": "",
|
|
6761
6777
|
"amis": {
|
|
6762
6778
|
"hidden": true,
|
|
6763
6779
|
"required": false
|
|
6764
6780
|
}
|
|
6765
6781
|
},
|
|
6766
6782
|
"columns": {
|
|
6783
|
+
"group": "",
|
|
6767
6784
|
"amis": {
|
|
6768
6785
|
"hidden": true,
|
|
6769
6786
|
"required": false
|
|
6770
6787
|
}
|
|
6771
6788
|
},
|
|
6772
6789
|
"mobile_columns":{
|
|
6790
|
+
"group": "",
|
|
6773
6791
|
"amis": {
|
|
6774
6792
|
"hidden": true,
|
|
6775
6793
|
"required": false
|
|
6776
6794
|
}
|
|
6777
6795
|
},
|
|
6778
6796
|
"searchable_fields":{
|
|
6797
|
+
"group": "",
|
|
6779
6798
|
"amis": {
|
|
6780
6799
|
"hidden": true,
|
|
6781
6800
|
"required": false
|
|
6782
6801
|
}
|
|
6783
6802
|
},
|
|
6784
6803
|
"filter_fields": {
|
|
6804
|
+
"group": "",
|
|
6785
6805
|
"amis": {
|
|
6786
6806
|
"hidden": true,
|
|
6787
6807
|
"required": false
|
|
6788
6808
|
}
|
|
6789
6809
|
},
|
|
6790
6810
|
"scrolling_mode": {
|
|
6811
|
+
"group": "",
|
|
6791
6812
|
"amis": {
|
|
6792
6813
|
"hidden": true,
|
|
6793
6814
|
"required": false
|
|
6794
6815
|
}
|
|
6795
6816
|
},
|
|
6796
6817
|
"sort": {
|
|
6818
|
+
"group": "",
|
|
6797
6819
|
"amis": {
|
|
6798
6820
|
"hidden": true,
|
|
6799
6821
|
"required": false
|
|
6800
6822
|
}
|
|
6801
6823
|
},
|
|
6802
6824
|
"show_count": {
|
|
6825
|
+
"group": "",
|
|
6803
6826
|
"amis": {
|
|
6804
6827
|
"hidden": true,
|
|
6805
6828
|
"required": false
|
|
6806
6829
|
}
|
|
6807
6830
|
},
|
|
6808
6831
|
"type": {
|
|
6832
|
+
"group": "",
|
|
6809
6833
|
"amis": {
|
|
6810
6834
|
"hidden": true,
|
|
6811
6835
|
"required": false
|
|
6812
6836
|
}
|
|
6813
6837
|
},
|
|
6814
6838
|
"shared": {
|
|
6839
|
+
"group": "",
|
|
6815
6840
|
"amis": {
|
|
6816
6841
|
"visibleOn": "${global.user.is_space_admin}"
|
|
6817
6842
|
}
|
|
6843
|
+
},
|
|
6844
|
+
"filters": {
|
|
6845
|
+
"group": "",
|
|
6846
|
+
"amis": {
|
|
6847
|
+
"hidden": true
|
|
6848
|
+
}
|
|
6818
6849
|
}
|
|
6819
6850
|
}
|
|
6820
6851
|
}
|
|
@@ -6961,6 +6992,12 @@ function fieldsExtend$3(){
|
|
|
6961
6992
|
"amis": {
|
|
6962
6993
|
"visibleOn": "${global.user.is_space_admin}"
|
|
6963
6994
|
}
|
|
6995
|
+
},
|
|
6996
|
+
"filters": {
|
|
6997
|
+
"group": "",
|
|
6998
|
+
"amis": {
|
|
6999
|
+
"hidden": true
|
|
7000
|
+
}
|
|
6964
7001
|
}
|
|
6965
7002
|
}
|
|
6966
7003
|
}
|
|
@@ -7299,7 +7336,6 @@ function fieldsExtend$1(){
|
|
|
7299
7336
|
}
|
|
7300
7337
|
},
|
|
7301
7338
|
"mobile_columns": {
|
|
7302
|
-
"group": i18next__default["default"].t('frontend_listview_control_columns_mobile_group'),
|
|
7303
7339
|
"amis": {
|
|
7304
7340
|
"type": "transfer",
|
|
7305
7341
|
"sortable": true,
|
|
@@ -7669,7 +7705,8 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
|
|
|
7669
7705
|
// }
|
|
7670
7706
|
`;
|
|
7671
7707
|
|
|
7672
|
-
function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLookup = false, keywordsSearchBoxName = "__keywords", crudId } = {}){
|
|
7708
|
+
// function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLookup = false, keywordsSearchBoxName = "__keywords", crudId } = {}){
|
|
7709
|
+
function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLookup = false, keywordsSearchBoxName = "__keywords" } = {}){
|
|
7673
7710
|
const searchableFieldsLabel = [];
|
|
7674
7711
|
_.each(mainObject.fields, function (field) {
|
|
7675
7712
|
if (isFieldQuickSearchable(field, mainObject.NAME_FIELD_KEY)) {
|
|
@@ -7685,6 +7722,33 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
|
|
|
7685
7722
|
crudKeywords = (localListViewProps && localListViewProps.__keywords) || "";
|
|
7686
7723
|
}
|
|
7687
7724
|
|
|
7725
|
+
const onChangeScript = `
|
|
7726
|
+
const scope = event.context.scoped;
|
|
7727
|
+
let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
|
|
7728
|
+
// let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
|
|
7729
|
+
let __changedSearchBoxValues = {};
|
|
7730
|
+
__changedSearchBoxValues["${keywordsSearchBoxName}"] = event.data["${keywordsSearchBoxName}"];
|
|
7731
|
+
// crudService && crudService.setData({__changedSearchBoxValues: __changedSearchBoxValues});
|
|
7732
|
+
// 这里不用crudService而用crud是因为lookup字段弹出的列表中的crudService中的变量无法传入crud的发送适配器中
|
|
7733
|
+
crud && crud.setData({__changedSearchBoxValues: __changedSearchBoxValues});
|
|
7734
|
+
`;
|
|
7735
|
+
|
|
7736
|
+
// onSearchScript中加上了onChangeScript中的脚本,是因为amis 3.2不能用change事件执行onChangeScript
|
|
7737
|
+
// 而点击回车按键又不会触发blur事件,所以只能每次回车事件中额外再执行一次onChangeScript
|
|
7738
|
+
// 等升级到amis 3.4+,blur事件换成change事件执行onChangeScript,就可以不用在onSearchScript中执行onChangeScript了
|
|
7739
|
+
const onSearchScript = `
|
|
7740
|
+
${onChangeScript}
|
|
7741
|
+
|
|
7742
|
+
// 下面的脚本只为解决点击搜索表单取消按钮,再重新在其中输入过滤条件但是不点击搜索按钮或回车按键触发搜索,此时在快速搜索框输入过滤条件按回车按键会把搜索表单中的过滤条件清空的问题
|
|
7743
|
+
// const scope = event.context.scoped;
|
|
7744
|
+
// 如果点击过顶部搜索栏表单的取消按钮,会把此处event.data.__super.__super.__super中的搜索表单项的所有字段设置为null
|
|
7745
|
+
// 点击取消按钮后继续在表单项中输入过滤条件且最后没有点击回车按键或点击表单项搜索按钮的话,在快速搜索中点击回车按钮提交搜索会所顶部搜索表单中的字段值清空
|
|
7746
|
+
let filterForm = SteedosUI.getClosestAmisComponentByType(scope, "form");
|
|
7747
|
+
setTimeout(function(){
|
|
7748
|
+
filterForm.setValues(event.data.__changedFilterFormValues);
|
|
7749
|
+
}, 500);
|
|
7750
|
+
`;
|
|
7751
|
+
|
|
7688
7752
|
return {
|
|
7689
7753
|
"type": "tooltip-wrapper",
|
|
7690
7754
|
"id": "steedos_crud_toolbar_quick_search",
|
|
@@ -7703,28 +7767,24 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
|
|
|
7703
7767
|
"placeholder": "搜索此列表",
|
|
7704
7768
|
"value": crudKeywords,
|
|
7705
7769
|
"clearable": true,
|
|
7706
|
-
"clearAndSubmit": true
|
|
7770
|
+
// "clearAndSubmit": true,//因为清除并不会触发失去焦点事件,只有禁用,但是它会触发change事件,所以等升级到amis 3.4+后可以重新放开
|
|
7707
7771
|
"searchImediately": false,
|
|
7708
7772
|
"onEvent": {
|
|
7709
|
-
"
|
|
7773
|
+
"search": {
|
|
7710
7774
|
"actions": [
|
|
7711
7775
|
{
|
|
7712
7776
|
"actionType": "custom",
|
|
7713
|
-
"script":
|
|
7714
|
-
doAction(
|
|
7715
|
-
{
|
|
7716
|
-
"componentId": 'service_${crudId}',
|
|
7717
|
-
"actionType": "setValue",
|
|
7718
|
-
"args": {
|
|
7719
|
-
"value": {
|
|
7720
|
-
"__serachBoxValues": event.data
|
|
7721
|
-
}
|
|
7722
|
-
}
|
|
7723
|
-
}
|
|
7724
|
-
)
|
|
7725
|
-
`
|
|
7777
|
+
"script": onSearchScript
|
|
7726
7778
|
}
|
|
7727
7779
|
]
|
|
7780
|
+
},
|
|
7781
|
+
"blur": { //这里把change事件换成blur是因为amis 3.2change事件中setData会卡,升级到3.4+后就可以换回change事件
|
|
7782
|
+
"actions": [
|
|
7783
|
+
{
|
|
7784
|
+
"actionType": "custom",
|
|
7785
|
+
"script": onChangeScript
|
|
7786
|
+
},
|
|
7787
|
+
]
|
|
7728
7788
|
}
|
|
7729
7789
|
}
|
|
7730
7790
|
}
|
|
@@ -7733,7 +7793,7 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
|
|
|
7733
7793
|
}
|
|
7734
7794
|
|
|
7735
7795
|
function getObjectHeaderToolbar(mainObject, fields, formFactor, {
|
|
7736
|
-
showDisplayAs = false, hiddenCount = false, headerToolbarItems,
|
|
7796
|
+
showDisplayAs = false, hiddenCount = false, headerToolbarItems,
|
|
7737
7797
|
filterVisible = true, isLookup = false, keywordsSearchBoxName } = {}){
|
|
7738
7798
|
// console.log(`getObjectHeaderToolbar====>`, filterVisible)
|
|
7739
7799
|
// console.log(`getObjectHeaderToolbar`, mainObject)
|
|
@@ -7837,7 +7897,7 @@ function getObjectHeaderToolbar(mainObject, fields, formFactor, {
|
|
|
7837
7897
|
};
|
|
7838
7898
|
}
|
|
7839
7899
|
let toolbarDisplayAsButton = getDisplayAsButton(mainObject?.name);
|
|
7840
|
-
let toolbarDQuickSearchBox = getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLookup, keywordsSearchBoxName
|
|
7900
|
+
let toolbarDQuickSearchBox = getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLookup, keywordsSearchBoxName });
|
|
7841
7901
|
|
|
7842
7902
|
// toolbars返回的数组元素不可以是空对象{},比如hiddenCount ? {} : {"type": "tpl",...},因为空对象最终还是会生成一个空的.antd-Crud-toolbar-item dom
|
|
7843
7903
|
// 当出现空的.antd-Crud-toolbar-item dom时会影响toolbar元素的maring-right css样式计算,如果有动态需要应该加到动态数组变量toolbars中
|
|
@@ -7985,6 +8045,20 @@ async function getObjectFilter(objectSchema, fields, options) {
|
|
|
7985
8045
|
let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
|
|
7986
8046
|
crudService && crudService.setData({isFieldsFilterEmpty});
|
|
7987
8047
|
`;
|
|
8048
|
+
let onChangeScript = `
|
|
8049
|
+
const scope = event.context.scoped;
|
|
8050
|
+
// let filterFormValues = event.data;
|
|
8051
|
+
let filterForm = SteedosUI.getClosestAmisComponentByType(scope, "form");
|
|
8052
|
+
let filterFormService = SteedosUI.getClosestAmisComponentByType(filterForm.context, "service");
|
|
8053
|
+
// 使用event.data的话,并不能拿到本地存储中的过滤条件,所以需要从filterFormService中取。
|
|
8054
|
+
let filterFormValues = filterFormService.getData();
|
|
8055
|
+
let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
|
|
8056
|
+
const changedFilterFormValues = _.pickBy(filterFormValues, function(n,k){return /^__searchable__/.test(k);});;
|
|
8057
|
+
// let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
|
|
8058
|
+
// crudService && crudService.setData({__changedFilterFormValues: changedFilterFormValues});
|
|
8059
|
+
// 这里不用crudService而用crud是因为lookup字段弹出的列表中的crudService中的变量无法传入crud的发送适配器中
|
|
8060
|
+
crud && crud.setData({__changedFilterFormValues: changedFilterFormValues});
|
|
8061
|
+
`;
|
|
7988
8062
|
return {
|
|
7989
8063
|
"title": "",
|
|
7990
8064
|
"submitText": "",
|
|
@@ -8008,19 +8082,7 @@ async function getObjectFilter(objectSchema, fields, options) {
|
|
|
8008
8082
|
"actions": [
|
|
8009
8083
|
{
|
|
8010
8084
|
"actionType": "custom",
|
|
8011
|
-
"script":
|
|
8012
|
-
doAction(
|
|
8013
|
-
{
|
|
8014
|
-
"componentId": 'service_${options.crudId}',
|
|
8015
|
-
"actionType": "setValue",
|
|
8016
|
-
"args": {
|
|
8017
|
-
"value": {
|
|
8018
|
-
"__filterFormValues": event.data
|
|
8019
|
-
}
|
|
8020
|
-
}
|
|
8021
|
-
}
|
|
8022
|
-
)
|
|
8023
|
-
`
|
|
8085
|
+
"script": onChangeScript
|
|
8024
8086
|
}
|
|
8025
8087
|
]
|
|
8026
8088
|
}
|
|
@@ -8095,7 +8157,6 @@ async function getObjectCRUD(objectSchema, fields, options){
|
|
|
8095
8157
|
const bulkActions = getBulkActions(objectSchema);
|
|
8096
8158
|
const defaults = options.defaults;
|
|
8097
8159
|
const listSchema = (defaults && defaults.listSchema) || {};
|
|
8098
|
-
const id = `listview_${objectSchema.name}`;
|
|
8099
8160
|
|
|
8100
8161
|
const bodyProps = {
|
|
8101
8162
|
// toolbar: getToolbar(),
|
|
@@ -8105,7 +8166,7 @@ async function getObjectCRUD(objectSchema, fields, options){
|
|
|
8105
8166
|
...options,
|
|
8106
8167
|
disableStatistics: options.queryCount === false
|
|
8107
8168
|
}),
|
|
8108
|
-
filter: options.filterVisible !== false && await getObjectFilter(objectSchema, fields,
|
|
8169
|
+
filter: options.filterVisible !== false && await getObjectFilter(objectSchema, fields, options),
|
|
8109
8170
|
};
|
|
8110
8171
|
if(options.formFactor !== 'SMALL' || ["split"].indexOf(options.displayAs) == -1){
|
|
8111
8172
|
if(listSchema.mode !== "cards"){
|
|
@@ -8134,8 +8195,7 @@ async function getObjectCRUD(objectSchema, fields, options){
|
|
|
8134
8195
|
showDisplayAs,
|
|
8135
8196
|
hiddenCount: options.queryCount === false,
|
|
8136
8197
|
headerToolbarItems: options.headerToolbarItems,
|
|
8137
|
-
filterVisible: options.filterVisible
|
|
8138
|
-
crudId: id
|
|
8198
|
+
filterVisible: options.filterVisible
|
|
8139
8199
|
});
|
|
8140
8200
|
|
|
8141
8201
|
options.amisData = createObject(options.amisData, {
|
|
@@ -8148,6 +8208,7 @@ async function getObjectCRUD(objectSchema, fields, options){
|
|
|
8148
8208
|
|
|
8149
8209
|
|
|
8150
8210
|
let body = null;
|
|
8211
|
+
const id = `listview_${objectSchema.name}`;
|
|
8151
8212
|
if(options.formFactor === 'SMALL' && false){
|
|
8152
8213
|
delete bodyProps.bulkActions;
|
|
8153
8214
|
delete bodyProps.headerToolbar;
|
|
@@ -8226,7 +8287,12 @@ async function getObjectCRUD(objectSchema, fields, options){
|
|
|
8226
8287
|
hiddenOn: options.tableHiddenOn,
|
|
8227
8288
|
autoFillHeight,
|
|
8228
8289
|
className: `flex-auto ${crudClassName || ""}`,
|
|
8229
|
-
|
|
8290
|
+
// 这里不可以用动态className,因为它会把样式类加到.antd-Crud和.antd-Table.antd-Crud-body这两层div中,而子表列表中crudClassName中有hidden样式类会造成所有子表都不显示的bug
|
|
8291
|
+
// className: {
|
|
8292
|
+
// [`flex-auto ${crudClassName || ""}`]: "true",
|
|
8293
|
+
// "is-steedos-crud-data-empty": "${!items || COUNT(items) == 0}"
|
|
8294
|
+
// },
|
|
8295
|
+
bodyClassName: "bg-white",//上面className写成动态的class变量对象的话,bodyClassName不会生效,会被上面的className值覆盖
|
|
8230
8296
|
crudClassName: crudClassName,
|
|
8231
8297
|
quickSaveApi: {
|
|
8232
8298
|
url: `\${context.rootUrl}/graphql`,
|
|
@@ -10117,8 +10183,6 @@ async function lookupToAmisTreeSelect(field, readonly, ctx) {
|
|
|
10117
10183
|
return amisSchema;
|
|
10118
10184
|
}
|
|
10119
10185
|
|
|
10120
|
-
const keywordsSearchBoxName = `__keywords_lookup`;
|
|
10121
|
-
|
|
10122
10186
|
const getReferenceToFieldSchema = (field, refObjectConfig)=>{
|
|
10123
10187
|
let referenceTo = field.reference_to;
|
|
10124
10188
|
if(!referenceTo){
|
|
@@ -10377,8 +10441,18 @@ async function lookupToAmisPicker(field, readonly, ctx){
|
|
|
10377
10441
|
|
|
10378
10442
|
source.data.$term = "$term";
|
|
10379
10443
|
source.data.$self = "$$";
|
|
10380
|
-
|
|
10444
|
+
|
|
10445
|
+
// field.name可能是带点的名称,比如审批王中子表字段'instances.instances_submitter',如果不替换掉点,会造成审批王表单中新建子表行时报错
|
|
10446
|
+
let keywordsSearchBoxName = `__keywords_lookup__${field.name.replace(/\./g, "_")}__to__${refObjectConfig.name}`;
|
|
10447
|
+
|
|
10381
10448
|
source.requestAdaptor = `
|
|
10449
|
+
let __changedFilterFormValues = api.data.$self.__changedFilterFormValues || {};
|
|
10450
|
+
let __changedSearchBoxValues = api.data.$self.__changedSearchBoxValues || {};
|
|
10451
|
+
// 把表单搜索和快速搜索中的change事件中记录的过滤条件也拼到$self中,是为解决触发搜索请求时,两边输入的过滤条件都带上,即:
|
|
10452
|
+
// 有时在搜索表单中输入过滤条件事,忘记点击回车键或搜索按钮,而是进一步修改快速搜索框中的关键字点击其中回车键触发搜索
|
|
10453
|
+
// 这种情况下,触发的搜索请求中没有带上搜索表单中输入的过滤条件。
|
|
10454
|
+
// 反过来先在快速搜索框中输入过滤条件却不点击其中回车键触发搜索,而是到搜索表单中触发搜索请求也是一样的。
|
|
10455
|
+
Object.assign(api.data.$self, __changedSearchBoxValues, __changedFilterFormValues);
|
|
10382
10456
|
const selfData = JSON.parse(JSON.stringify(api.data.$self));
|
|
10383
10457
|
var filters = [];
|
|
10384
10458
|
var pageSize = api.data.pageSize || 10;
|
|
@@ -10513,6 +10587,14 @@ async function lookupToAmisPicker(field, readonly, ctx){
|
|
|
10513
10587
|
}
|
|
10514
10588
|
});
|
|
10515
10589
|
payload.data.rows = treeRecords;
|
|
10590
|
+
try{
|
|
10591
|
+
setTimeout(() => {
|
|
10592
|
+
$('.amis-dialog-widget.antd-Modal .antd-Table-content .antd-Table-table thead .antd-Table-expandBtn')[0]?.click();
|
|
10593
|
+
}, 600);
|
|
10594
|
+
}
|
|
10595
|
+
catch(ex){
|
|
10596
|
+
console.error("tree数据格式展开异常:", ex);
|
|
10597
|
+
}
|
|
10516
10598
|
}
|
|
10517
10599
|
return payload;
|
|
10518
10600
|
`;
|
|
@@ -10685,6 +10767,7 @@ async function lookupToAmisPicker(field, readonly, ctx){
|
|
|
10685
10767
|
|
|
10686
10768
|
async function lookupToAmisSelect(field, readonly, ctx){
|
|
10687
10769
|
let referenceTo = await getReferenceTo(field);
|
|
10770
|
+
const isMobile = window.innerWidth <= 768;
|
|
10688
10771
|
const valueFieldKey = referenceTo && referenceTo.valueField?.name || '_id' ;
|
|
10689
10772
|
// const labelFieldKey = referenceTo && referenceTo.labelField?.name || 'name';
|
|
10690
10773
|
|
|
@@ -10865,7 +10948,11 @@ async function lookupToAmisSelect(field, readonly, ctx){
|
|
|
10865
10948
|
</span>
|
|
10866
10949
|
<span class='pl-1.5'>\${label}</span>
|
|
10867
10950
|
</span>`;
|
|
10868
|
-
|
|
10951
|
+
const menuTpl = "${icon ? `"+select_menuTpl+"` : label}";
|
|
10952
|
+
// TODO: 待amis修复了此bug, 就可以撤销添加menuTpl的判断。
|
|
10953
|
+
if(!(isMobile && field.multiple)){
|
|
10954
|
+
data.menuTpl = menuTpl;
|
|
10955
|
+
}
|
|
10869
10956
|
if(field.multiple){
|
|
10870
10957
|
data.multiple = true;
|
|
10871
10958
|
data.extractValue = true;
|
|
@@ -11373,6 +11460,8 @@ function getSelectFieldOptions(field){
|
|
|
11373
11460
|
}
|
|
11374
11461
|
|
|
11375
11462
|
async function convertSFieldToAmisField(field, readonly, ctx) {
|
|
11463
|
+
// console.log('convertSFieldToAmisField====>', field, readonly, ctx)
|
|
11464
|
+
const isMobile = window.innerWidth <= 768;
|
|
11376
11465
|
// 创建人和修改人、创建时间和修改时间不显示
|
|
11377
11466
|
if(___namespace.includes(OMIT_FIELDS, field.name) && ctx.showSystemFields != true){
|
|
11378
11467
|
return;
|
|
@@ -11435,7 +11524,11 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
|
|
|
11435
11524
|
</span>
|
|
11436
11525
|
<span class='pl-1.5'>\${label}</span>
|
|
11437
11526
|
</span>`;
|
|
11438
|
-
|
|
11527
|
+
const menuTpl = "${icon ? `"+select_menuTpl+"` : label}";
|
|
11528
|
+
// TODO: 待amis修复了此bug, 就可以撤销添加menuTpl的判断。
|
|
11529
|
+
if(!(isMobile && field.multiple)){
|
|
11530
|
+
convertData.menuTpl = menuTpl;
|
|
11531
|
+
}
|
|
11439
11532
|
if(field.multiple){
|
|
11440
11533
|
convertData.multiple = true;
|
|
11441
11534
|
convertData.extractValue = true;
|
|
@@ -12022,9 +12115,7 @@ async function getFieldSearchable(perField, permissionFields, ctx){
|
|
|
12022
12115
|
|
|
12023
12116
|
const amisField = await convertSFieldToAmisField(_field, false, Object.assign({}, ctx, {fieldNamePrefix: fieldNamePrefix, required: false, showSystemFields: true, inFilterForm: true}));
|
|
12024
12117
|
if(amisField){
|
|
12025
|
-
return
|
|
12026
|
-
submitOnChange: false
|
|
12027
|
-
});
|
|
12118
|
+
return amisField;
|
|
12028
12119
|
}
|
|
12029
12120
|
}
|
|
12030
12121
|
}
|
|
@@ -12298,7 +12389,7 @@ async function getFormBody(permissionFields, formFields, ctx){
|
|
|
12298
12389
|
* @Author: 殷亮辉 yinlianghui@hotoa.com
|
|
12299
12390
|
* @Date: 2023-11-15 09:50:22
|
|
12300
12391
|
* @LastEditors: 殷亮辉 yinlianghui@hotoa.com
|
|
12301
|
-
* @LastEditTime: 2023-
|
|
12392
|
+
* @LastEditTime: 2023-12-04 17:36:50
|
|
12302
12393
|
*/
|
|
12303
12394
|
|
|
12304
12395
|
/**
|
|
@@ -12417,12 +12508,16 @@ async function getForm(props, mode = "edit") {
|
|
|
12417
12508
|
}
|
|
12418
12509
|
else if (mode === "new") {
|
|
12419
12510
|
let onNewItemSubmitScript = `
|
|
12420
|
-
event.data["${props.name}"]
|
|
12511
|
+
let fieldValue = _.cloneDeep(event.data["${props.name}"]);
|
|
12512
|
+
if(!fieldValue){
|
|
12513
|
+
fieldValue = [];
|
|
12514
|
+
}
|
|
12515
|
+
fieldValue.push(JSON.parse(JSON.stringify(event.data)));
|
|
12421
12516
|
doAction({
|
|
12422
12517
|
"componentId": "${props.id}",
|
|
12423
12518
|
"actionType": "setValue",
|
|
12424
12519
|
"args": {
|
|
12425
|
-
"value":
|
|
12520
|
+
"value": fieldValue
|
|
12426
12521
|
}
|
|
12427
12522
|
});
|
|
12428
12523
|
`;
|
|
@@ -12624,11 +12719,20 @@ const getAmisInputTableSchema = async (props, readonly) => {
|
|
|
12624
12719
|
],
|
|
12625
12720
|
"className": props.className
|
|
12626
12721
|
};
|
|
12722
|
+
let footerToolbar = _$1.clone(props.footerToolbar || []); //这里不clone的话,会造成死循环,应该是因为props属性变更会让组件重新渲染
|
|
12627
12723
|
if (props.addable) {
|
|
12628
|
-
let buttonNewSchema = getButtonNew(props);
|
|
12629
|
-
|
|
12724
|
+
let buttonNewSchema = await getButtonNew(props);
|
|
12725
|
+
footerToolbar.unshift(buttonNewSchema);
|
|
12726
|
+
}
|
|
12727
|
+
if (footerToolbar.length) {
|
|
12728
|
+
schema.body.push({
|
|
12729
|
+
"type": "wrapper",
|
|
12730
|
+
"size": "none",
|
|
12731
|
+
"body": footerToolbar
|
|
12732
|
+
});
|
|
12630
12733
|
}
|
|
12631
12734
|
if (props.amis) {
|
|
12735
|
+
delete props.amis.id;
|
|
12632
12736
|
Object.assign(schema.body[0], props.amis);
|
|
12633
12737
|
}
|
|
12634
12738
|
return schema;
|