@cloudbase/weda-ui-mp 3.20.0 → 3.20.2

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.
@@ -47,7 +47,7 @@ Component({
47
47
  type: Boolean,
48
48
  value: true,
49
49
  },
50
- defauleShowLocation: {
50
+ defaultShowLocation: {
51
51
  type: Boolean,
52
52
  value: true,
53
53
  },
@@ -107,9 +107,7 @@ Component({
107
107
  const { locationType, dataSource } = this.properties;
108
108
  const getReverseGeocoder = async (location) => {
109
109
  const { isApikeyStatus } = this.data;
110
- let key = isApikeyStatus.apiKey
111
- ? isApikeyStatus.apiKey
112
- : await this.getApikey(dataSource.name, 'get');
110
+ let key = isApikeyStatus.apiKey ? isApikeyStatus.apiKey : await this.getApikey(dataSource.name, 'get');
113
111
  if (key) {
114
112
  qqmapsdk = new QQMapWX({
115
113
  key: key,
@@ -123,9 +121,7 @@ Component({
123
121
  poiname: result?.formatted_addresses?.recommend,
124
122
  detailedAddress: result?.address,
125
123
  };
126
- let isCustomLocation = this.checkCustomLocation(
127
- this.properties.value
128
- );
124
+ let isCustomLocation = this.checkCustomLocation(this.properties.value);
129
125
  if (isCustomLocation) {
130
126
  this.setData({
131
127
  currentLocations: detailLocation,
@@ -156,16 +152,10 @@ Component({
156
152
  detailedAddress: '',
157
153
  };
158
154
  // 表单为新增时回传点位信息
159
- let isCustomLocation = this.checkCustomLocation(
160
- this.properties.value
161
- );
155
+ let isCustomLocation = this.checkCustomLocation(this.properties.value);
162
156
  let customLocation = {
163
- latitude: isCustomLocation
164
- ? this.properties.value?.geopoint?.coordinates[1]
165
- : '',
166
- longitude: isCustomLocation
167
- ? this.properties.value?.geopoint?.coordinates[0]
168
- : '',
157
+ latitude: isCustomLocation ? this.properties.value?.geopoint?.coordinates[1] : '',
158
+ longitude: isCustomLocation ? this.properties.value?.geopoint?.coordinates[0] : '',
169
159
  poiname: this.properties.value?.address,
170
160
  detailedAddress: this.properties.value?.detailedAddress,
171
161
  };
@@ -176,10 +166,7 @@ Component({
176
166
  message: '',
177
167
  },
178
168
  });
179
- this.setLocation(
180
- isCustomLocation ? customLocation : location,
181
- isCustomLocation
182
- );
169
+ this.setLocation(isCustomLocation ? customLocation : location, isCustomLocation);
183
170
  if (!isCustomLocation) {
184
171
  locationType !== 1 && this.setData({ isAddrShow: true });
185
172
  } else {
@@ -199,10 +186,7 @@ Component({
199
186
  };
200
187
  const getCustomInfoLocation = () => {
201
188
  let customInfoLocation = customInfo.getCurrentLocation();
202
- if (
203
- !!customInfoLocation &&
204
- typeof customInfoLocation.then === 'function'
205
- ) {
189
+ if (!!customInfoLocation && typeof customInfoLocation.then === 'function') {
206
190
  customInfoLocation
207
191
  .then((res) => {
208
192
  drowMapMarks(res);
@@ -410,10 +394,7 @@ Component({
410
394
  this.changeValueFormat(location);
411
395
  },
412
396
  checkCustomLocation(params) {
413
- if (
414
- !params?.address ||
415
- (params?.geopoint?.type && params?.geopoint?.type != 'Point')
416
- ) {
397
+ if (!params?.address || (params?.geopoint?.type && params?.geopoint?.type != 'Point')) {
417
398
  return false;
418
399
  }
419
400
  return true;
@@ -465,11 +446,7 @@ Component({
465
446
  value: function (value) {
466
447
  const currentLocations = this.data.currentLocations;
467
448
  if (value || !currentLocations.latitude) {
468
- const {
469
- geopoint: { coordinates } = {},
470
- address: poiname,
471
- detailedAddress,
472
- } = value || {};
449
+ const { geopoint: { coordinates } = {}, address: poiname, detailedAddress } = value || {};
473
450
 
474
451
  if (!coordinates?.[0]) return;
475
452
 
@@ -512,7 +489,7 @@ Component({
512
489
  {
513
490
  'weui-flex': isFlex,
514
491
  [className]: className,
515
- }
492
+ },
516
493
  );
517
494
  this.setData({ cls });
518
495
  },
@@ -272,7 +272,7 @@ export default Behavior({
272
272
  type: Boolean,
273
273
  value: false,
274
274
  },
275
- defauleShowLocation: {
275
+ defaultShowLocation: {
276
276
  type: Boolean,
277
277
  value: true,
278
278
  },
@@ -31,7 +31,7 @@ Component({
31
31
  type: Boolean,
32
32
  value: true,
33
33
  },
34
- defauleShowLocation: {
34
+ defaultShowLocation: {
35
35
  type: Boolean,
36
36
  value: true,
37
37
  },
@@ -14,7 +14,7 @@
14
14
  customLocation="{{customLocation}}"
15
15
  customRange="{{customRange}}"
16
16
  dataSource="{{dataSource}}"
17
- defauleShowLocation="{{defauleShowLocation}}"
17
+ defaultShowLocation="{{defaultShowLocation}}"
18
18
  drag="{{drag}}"
19
19
  locationType="{{locationType}}"
20
20
  locationRange="{{locationRange}}"
@@ -1,11 +1,6 @@
1
1
  /* eslint-disable @typescript-eslint/no-magic-numbers */
2
2
  import { commonCompBehavior } from '../../utils/common-behavior';
3
- import {
4
- getStartMoment,
5
- convertValueToDateItem,
6
- getYMD,
7
- convertMethodParam,
8
- } from '../../utils/getFormLegacy';
3
+ import { getStartMoment, convertValueToDateItem, getYMD, convertMethodParam } from '../../utils/getFormLegacy';
9
4
  import { WEEKS, getConfigDataObj, convertWeeks } from './weeks';
10
5
 
11
6
  Component({
@@ -41,6 +36,12 @@ Component({
41
36
  type: Array,
42
37
  value: [],
43
38
  },
39
+ start: {
40
+ type: null,
41
+ },
42
+ end: {
43
+ type: null,
44
+ },
44
45
  },
45
46
  data: {
46
47
  currentValue: null, // 时间戳
@@ -114,10 +115,7 @@ Component({
114
115
  const { _oldCurrentValue, _oldCurrentMonthValue } = this.data;
115
116
  const currentValue = getStartMoment('day', value, false)?.valueOf();
116
117
  const currentMonthValue = getStartMoment('month', initMonth)?.valueOf();
117
- if (
118
- currentValue !== _oldCurrentValue ||
119
- currentMonthValue !== _oldCurrentMonthValue
120
- ) {
118
+ if (currentValue !== _oldCurrentValue || currentMonthValue !== _oldCurrentMonthValue) {
121
119
  this.setData({
122
120
  currentValue,
123
121
  currentMonthValue,
@@ -136,12 +134,14 @@ Component({
136
134
  const checkedDay = getYMD(dateItem);
137
135
  this.setData({ checkedDay });
138
136
  },
139
- 'currentMonthValue,configDataObj': function (
140
- currentMonthValue,
141
- configDataObj
142
- ) {
143
- const { year, month } = convertValueToDateItem(currentMonthValue);
144
- const weeks = convertWeeks(year, month, configDataObj);
137
+ 'currentMonthValue,configDataObj,start,end': function (currentMonthValue, configDataObj, start, end) {
138
+ const dateItem = convertValueToDateItem(currentMonthValue);
139
+ if (!dateItem) {
140
+ console.error('Invalid date item returned from convertValueToDateItem');
141
+ return;
142
+ }
143
+ const { year, month } = dateItem;
144
+ const weeks = convertWeeks(year, month, configDataObj, [start, end]);
145
145
  const yearMonthDisplay = `${year}年${month + 1}月`;
146
146
  this.setData({ weeks, yearMonthDisplay });
147
147
  },
@@ -1,9 +1,4 @@
1
- import {
2
- getStartMoment,
3
- convertValueToDateItem,
4
- getYMD,
5
- convertYearMonthToWeeks,
6
- } from '../../utils/getFormLegacy';
1
+ import { getStartMoment, convertValueToDateItem, getYMD, convertYearMonthToWeeks } from '../../utils/getFormLegacy';
7
2
 
8
3
  export const WEEKS = ['日', '一', '二', '三', '四', '五', '六'];
9
4
  export const BLOCK_NAME = 'weda-calendar';
@@ -25,8 +20,8 @@ export const getConfigDataObj = (configData) => {
25
20
  };
26
21
 
27
22
  // 带上外部配置,转星期
28
- export const convertWeeks = (year, month, configDataObj) => {
29
- const weeks = convertYearMonthToWeeks(year, month, null, {
23
+ export const convertWeeks = (year, month, configDataObj, range) => {
24
+ const weeks = convertYearMonthToWeeks(year, month, range, {
30
25
  isPreNext: true,
31
26
  isDynamic: true,
32
27
  });
@@ -72,9 +72,9 @@ Component({
72
72
  * 用于同步子组件的默认值
73
73
  * @param params
74
74
  */
75
- // __setValueImmediate__(params) {
76
- // that.changeByChildFormObj(params);
77
- // },
75
+ __setValueImmediate__(params) {
76
+ that.changeByChildFormObj(params);
77
+ },
78
78
  /**
79
79
  * 嵌套表单内部子组件值改变时,触发嵌套表单组件的值更新
80
80
  * @param params.name 子组件名称
@@ -269,16 +269,16 @@ Component({
269
269
  parentForm?.updateFormContext();
270
270
  }
271
271
 
272
- // if (params.name) {
273
- // // 触发父级嵌套表单值更新
274
- // parentFormObj?.__setValueImmediate__?.({
275
- // name: params.name,
276
- // value: params.value,
277
- // });
278
- // } else if (parentFormObj?.formObjName) {
279
- // // 外部直接调用formObj.setValue的情况下,触发父级嵌套表单值更新
280
- // parentFormObj?.__setValueImmediate__?.({ name, value });
281
- // }
272
+ if (params.name) {
273
+ // 触发父级嵌套表单值更新
274
+ parentFormObj?.__setValueImmediate__?.({
275
+ name: params.name,
276
+ value: params.value,
277
+ });
278
+ } else if (parentFormObj?.formObjName) {
279
+ // 外部直接调用formObj.setValue的情况下,触发父级嵌套表单值更新
280
+ parentFormObj?.__setValueImmediate__?.({ name, value });
281
+ }
282
282
  },
283
283
  /**
284
284
  * 子组件默认值变更,触发嵌套表单值更新
@@ -286,36 +286,41 @@ Component({
286
286
  * @param params.value
287
287
  */
288
288
  changeByChildFormObj(params) {
289
- // const { objValue, name } = this.data;
290
- // const value = deepClone(objValue);
291
- // lodashSet(value, getValueName(params.name, name), params.value);
292
- // const tempValue = this.getTempValue(value);
293
- // const tempObjValue = this.getTempValue(objValue);
294
- // if (equal(tempValue, tempObjValue)) {
295
- // return;
296
- // }
297
- // this.setData({ objValue: value || [] });
298
- // const parentFormObj = this.getParentFormObj();
299
- // const parentForm = this.getParentForm();
300
- // if (params.name) {
301
- // // 判断是否将当前的name前缀加上,以便父级嵌套表单更新值
302
- // const nameTemp = `${!params.name.startsWith(name) && name ? `${name}.` : ''}${params.name}`;
303
- // // 将值同步给父级嵌套表单
304
- // parentFormObj?.__setValueImmediate__?.({
305
- // name: nameTemp,
306
- // value: params.value,
307
- // });
308
- // } else if (parentFormObj?.formObjName) {
309
- // // 外部直接调用formObj.setValue的情况下,触发父级嵌套表单值更新
310
- // parentFormObj?.__setValueImmediate__?.({ name, value });
311
- // }
312
- // if (!parentFormObj && parentForm) {
313
- // // 触发父级普通表单值更新
314
- // // 子组件向上同步值,不调用setValue
315
- // // parentForm?.setValue?.({ [name]: value }, false, true);
316
- // // 刷新父级普通表单的formData
317
- // parentForm?.updateFormContext();
318
- // }
289
+ const { objValue, name } = this.data;
290
+ const value = deepClone(objValue);
291
+ lodashSet(value, getValueName(params.name, name), params.value);
292
+
293
+ const tempValue = this.getTempValue(value);
294
+
295
+ const tempObjValue = this.getTempValue(objValue);
296
+ if (equal(tempValue, tempObjValue)) {
297
+ return;
298
+ }
299
+ this.setData({ objValue: value || [] });
300
+
301
+ const parentFormObj = this.getParentFormObj();
302
+ const parentForm = this.getParentForm();
303
+
304
+ if (params.name) {
305
+ // 判断是否将当前的name前缀加上,以便父级嵌套表单更新值
306
+ const nameTemp = `${!params.name.startsWith(name) && name ? `${name}.` : ''}${params.name}`;
307
+ // 将值同步给父级嵌套表单
308
+ parentFormObj?.__setValueImmediate__?.({
309
+ name: nameTemp,
310
+ value: params.value,
311
+ });
312
+ } else if (parentFormObj?.formObjName) {
313
+ // 外部直接调用formObj.setValue的情况下,触发父级嵌套表单值更新
314
+ parentFormObj?.__setValueImmediate__?.({ name, value });
315
+ }
316
+
317
+ if (!parentFormObj && parentForm) {
318
+ // 触发父级普通表单值更新
319
+ // 子组件向上同步值,不调用setValue
320
+ // parentForm?.setValue?.({ [name]: value }, false, true);
321
+ // 刷新父级普通表单的formData
322
+ parentForm?.updateFormContext();
323
+ }
319
324
  },
320
325
  },
321
326
  observers: {
@@ -61,9 +61,9 @@ Component({
61
61
  * 用于同步子组件的默认值
62
62
  * @param params
63
63
  */
64
- // __setValueImmediate__(params) {
65
- // that.changeByChildFormObj(params);
66
- // },
64
+ __setValueImmediate__(params) {
65
+ that.changeByChildFormObj(params);
66
+ },
67
67
  /**
68
68
  * 嵌套表单内部子组件值改变时,触发嵌套表单组件的值更新
69
69
  * @param params.name 子组件名称
@@ -213,16 +213,16 @@ Component({
213
213
  parentForm?.updateFormContext();
214
214
  }
215
215
 
216
- // if (params.name) {
217
- // // 触发父级嵌套表单值更新
218
- // parentFormObj?.__setValueImmediate__?.({
219
- // name: params.name,
220
- // value: params.value,
221
- // });
222
- // } else if (parentFormObj?.formObjName) {
223
- // // 外部直接调用formObj.setValue的情况下,触发父级嵌套表单值更新
224
- // parentFormObj?.__setValueImmediate__?.({ name, value });
225
- // }
216
+ if (params.name) {
217
+ // 触发父级嵌套表单值更新
218
+ parentFormObj?.__setValueImmediate__?.({
219
+ name: params.name,
220
+ value: params.value,
221
+ });
222
+ } else if (parentFormObj?.formObjName) {
223
+ // 外部直接调用formObj.setValue的情况下,触发父级嵌套表单值更新
224
+ parentFormObj?.__setValueImmediate__?.({ name, value });
225
+ }
226
226
 
227
227
  this.triggerOnDataChange(value);
228
228
  },
@@ -231,42 +231,42 @@ Component({
231
231
  * @param params.name
232
232
  * @param params.value
233
233
  */
234
- // changeByChildFormObj(params) {
235
- // const { objValue, name } = this.data;
236
- // const value = deepClone(objValue);
237
- // lodashSet(value, getValueName(params.name, name), params.value);
234
+ changeByChildFormObj(params) {
235
+ const { objValue, name } = this.data;
236
+ const value = deepClone(objValue);
237
+ lodashSet(value, getValueName(params.name, name), params.value);
238
238
 
239
- // if (equal(value, objValue)) {
240
- // return;
241
- // }
239
+ if (equal(value, objValue)) {
240
+ return;
241
+ }
242
242
 
243
- // const parentFormObj = this.getParentFormObj();
244
- // const parentForm = this.getParentForm();
243
+ const parentFormObj = this.getParentFormObj();
244
+ const parentForm = this.getParentForm();
245
245
 
246
- // if (params.name) {
247
- // // 判断是否将当前的name前缀加上,以便父级嵌套表单更新值
248
- // const nameTemp = `${!params.name.startsWith(name) && name ? `${name}.` : ''}${params.name}`;
249
- // // 将值同步给父级嵌套表单
250
- // parentFormObj?.__setValueImmediate__?.({
251
- // name: nameTemp,
252
- // value: params.value,
253
- // });
254
- // } else if (parentFormObj?.formObjName) {
255
- // // 外部直接调用formObj.setValue的情况下,触发父级嵌套表单值更新
256
- // parentFormObj?.__setValueImmediate__?.({ name, value });
257
- // }
246
+ if (params.name) {
247
+ // 判断是否将当前的name前缀加上,以便父级嵌套表单更新值
248
+ const nameTemp = `${!params.name.startsWith(name) && name ? `${name}.` : ''}${params.name}`;
249
+ // 将值同步给父级嵌套表单
250
+ parentFormObj?.__setValueImmediate__?.({
251
+ name: nameTemp,
252
+ value: params.value,
253
+ });
254
+ } else if (parentFormObj?.formObjName) {
255
+ // 外部直接调用formObj.setValue的情况下,触发父级嵌套表单值更新
256
+ parentFormObj?.__setValueImmediate__?.({ name, value });
257
+ }
258
258
 
259
- // if (!parentFormObj && parentForm) {
260
- // // 触发父级普通表单值更新
261
- // // 子组件向上同步值,不调用setValue
262
- // // parentForm?.setValue?.({ [name]: value }, false, true);
263
- // // 刷新父级普通表单的formData
264
- // parentForm?.updateFormContext();
265
- // }
259
+ if (!parentFormObj && parentForm) {
260
+ // 触发父级普通表单值更新
261
+ // 子组件向上同步值,不调用setValue
262
+ // parentForm?.setValue?.({ [name]: value }, false, true);
263
+ // 刷新父级普通表单的formData
264
+ parentForm?.updateFormContext();
265
+ }
266
266
 
267
- // this.setData({ objValue: value || {} });
268
- // this.updateWidgetAPI();
269
- // },
267
+ this.setData({ objValue: value || {} });
268
+ this.updateWidgetAPI();
269
+ },
270
270
  },
271
271
  observers: {
272
272
  'disabled, readOnly': function (disabled, readOnly) {
@@ -14,6 +14,7 @@
14
14
 
15
15
  .wd-image {
16
16
  max-width: 100%;
17
+ vertical-align: middle;
17
18
  }
18
19
 
19
20
  @media screen and (max-width: 768px) {
@@ -35,7 +35,7 @@ Component({
35
35
  placeholderCls: `${WD_PREFIX}-form-input-wrap__placeholder weui-input__placeholder`,
36
36
  cls: '',
37
37
  currentInputValue: '',
38
- hasClearIcon: false,
38
+ _hasClearIcon: false,
39
39
  isFocus: false,
40
40
  counter: 0,
41
41
 
@@ -102,9 +102,9 @@ Component({
102
102
  },
103
103
  observers: {
104
104
  'disabled,clearable,isFocus,currentInputValue': function (disabled, clearable, isFocus, currentInputValue) {
105
- const hasClearIcon = clearable && isFocus && !disabled && currentInputValue?.length > 0;
105
+ const _hasClearIcon = clearable && isFocus && !disabled && currentInputValue?.length > 0;
106
106
  const counter = typeof currentInputValue === 'string' ? currentInputValue.length : 0;
107
- this.setData({ hasClearIcon, counter });
107
+ this.setData({ _hasClearIcon, counter });
108
108
  },
109
109
  'disabled,size,classRoot,wrapClassName,before,after': function (
110
110
  disabled,
@@ -56,14 +56,14 @@
56
56
  </view>
57
57
 
58
58
  <!-- 清除按钮 -->
59
- <block wx:if="{{hasClearIcon}}">
60
- <view class="{{inputWrap}}__after">
59
+ <block wx:if="{{_hasClearIcon}}">
60
+ <view class="{{inputWrap}}__after" >
61
61
  <wd-icon className="{{classPrefix}}-icon__trigger" name="td:close-circle-filled" size="{{iconSize}}" bind:touchstart="handleClear"></wd-icon>
62
62
  </view>
63
63
  </block>
64
64
 
65
65
  <!-- 后缀图标 -->
66
- <block wx:if="{{!hasClearIcon && suffixType}}">
66
+ <block wx:if="{{!_hasClearIcon && suffixType}}">
67
67
  <view class="{{inputWrap}}__after" data-type="suffix" bind:tap="inputAdornmentClick">
68
68
  <wd-icon name="{{suffixIcon}}" type="{{suffixType}}" src="{{suffixSrc}}" size="{{iconSize}}" className="{{root}}__icon-after"></wd-icon>
69
69
  </view>
@@ -31,7 +31,7 @@
31
31
  customLocation="{{customLocation}}"
32
32
  customRange="{{customRange}}"
33
33
  dataSource="{{dataSource}}"
34
- defauleShowLocation="{{defauleShowLocation}}"
34
+ defaultShowLocation="{{defaultShowLocation}}"
35
35
  drag="{{drag}}"
36
36
  locationType="{{locationType}}"
37
37
  locationRange="{{locationRange}}"
@@ -76,7 +76,7 @@ Component({
76
76
  * 控制弹窗打开/关闭
77
77
  * @param {Boolean} isOpen
78
78
  */
79
- dealShow(isOpen, params) {
79
+ dealShow(isOpen, params, isTrigger = true) {
80
80
  let setImmediately = {
81
81
  maskPreToShow: true,
82
82
  isMaskShow: !isOpen,
@@ -92,8 +92,9 @@ Component({
92
92
  }
93
93
 
94
94
  this.setData(setImmediately);
95
-
96
- this.triggerEvent(isOpen ? 'open' : 'close', params);
95
+ if (isTrigger) {
96
+ this.triggerEvent(isOpen ? 'open' : 'close', params);
97
+ }
97
98
  },
98
99
  /**
99
100
  * 关闭弹窗
@@ -162,6 +163,9 @@ Component({
162
163
  modalBdClasses,
163
164
  });
164
165
  },
166
+ defaultShow: function (defaultShow) {
167
+ this.dealShow(defaultShow, {}, false);
168
+ },
165
169
  'isBdShow,openInfo,closeInfo': function () {
166
170
  this.updateWidgetAPI();
167
171
  },
@@ -2,7 +2,7 @@
2
2
  <view class="{{classPrefix + '-tabs__header'}}">
3
3
  <view class="{{classPrefix + '-tabs__header-item-wrap' }}">
4
4
  <view class="{{classPrefix + '-tabs__header-item-content'}}">
5
- <scroll-view scroll-x="true" scroll-into-view="{{scrollId}}" class="{{classPrefix + '-tabs__scroll'}}" enable-flex="true" wx:if="{{direction!=='vertical'}}">
5
+ <scroll-view scroll-x="true" scroll-into-view="{{scrollId}}" class="{{classPrefix + '-tabs__scroll'}}" enable-flex="true" enhanced="{{true}}" show-scrollbar="{{false}}" wx:if="{{direction!=='vertical'}}" >
6
6
  <view wx:for="{{list}}" class="{{classPrefix + '-tabs__item'}} {{item.selected?'is-selected':''}} {{item.isDisabled?'is-disabled':''}}" wx:for-index="index" wx:for-item="item" wx:key="index" id="{{'cell-'+index}}" bindtap="onItemClick" data-value="{{index}}" data-item="{{item}}">
7
7
  <view wx-if="{{item.iconType !== 'none' && item.iconPosition === 'prefix'}}" class="{{classPrefix + '-tabs__item-icon'}}">
8
8
  <wd-icon type="{{item.iconType}}" name="{{ item.iconType === 'inner' ? item.innerIcon : item.outerImage}}" src="{{item.iconType === 'custom' ? item.outerImage : ''}}" size="xs" />
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "miniprogram": "./",
4
4
  "packageManager": "yarn@3.0.2",
5
5
  "dependencies": {},
6
- "version": "3.20.0",
6
+ "version": "3.20.2",
7
7
  "main": "./",
8
8
  "publishConfig": {
9
9
  "access": "public"
package/utils/enum.js CHANGED
@@ -1051,6 +1051,7 @@ export const PROPS_WHERE_REL_MEMBER = [].concat(PROPS_WHERE_REL, [
1051
1051
  export const WD_LOCATION_TYPE = [
1052
1052
  { label: '无', value: 1 },
1053
1053
  { label: '用户当前位置', value: 2 },
1054
+ { label: '自定义位置', value: 3 },
1054
1055
  ];
1055
1056
 
1056
1057
  export const WD_LOCATION_RANGE = [