n20-common-lib 1.3.29 → 1.3.30

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.
@@ -5,13 +5,8 @@
5
5
  :width="width"
6
6
  title="筛选"
7
7
  placement="bottom-end"
8
- @show="showPopC = true"
9
- @after-leave="
10
- () => {
11
- showPopC = false
12
- showMore = false
13
- }
14
- "
8
+ @show="show"
9
+ @after-leave="leave"
15
10
  >
16
11
  <template slot="reference">
17
12
  <el-button
@@ -30,240 +25,75 @@
30
25
  :label-width="labelWidth"
31
26
  @submit.native.prevent
32
27
  >
33
- <el-form-item
34
- v-for="(item, i) in minList"
35
- :key="i"
36
- class="m-b"
37
- :label="item.label"
38
- >
39
- <slot v-if="item.slotName" :name="item.slotName"></slot>
40
- <el-input
41
- v-else-if="item.type === 'text' || item.type === undefined"
42
- v-model="form[item.value]"
43
- :clearable="item | clearableF"
44
- style="width: 100%"
45
- v-bind="item.props"
46
- v-on="item.on"
47
- />
48
- <el-select
49
- v-else-if="item.type === 'select'"
50
- v-model="form[item.value]"
51
- :clearable="item | clearableF"
52
- :multiple="item.multiple"
53
- style="width: 100%"
54
- v-bind="item.props"
55
- v-on="item.on"
56
- >
57
- <template
58
- v-if="item.props && item.props.labelKey && item.props.valueKey"
59
- >
60
- <el-option
61
- v-for="(c, i) in item.options"
62
- :key="i"
63
- :label="c[item.props.labelKey]"
64
- :value="c[item.props.valueKey]"
65
- :disabled="c.disabled"
66
- />
67
- </template>
68
- <template v-else>
69
- <el-option
70
- v-for="c in item.options"
71
- :key="c.value + '_' + c.label"
72
- :label="c.label"
73
- :value="c.value"
74
- :disabled="c.disabled"
75
- />
76
- </template>
77
- </el-select>
78
- <inputNumber
79
- v-else-if="item.type === 'number'"
80
- v-model="form[item.value]"
81
- style="width: 100%"
82
- v-bind="item.props"
83
- v-on="item.on"
84
- />
85
- <inputNumberRange
86
- v-else-if="item.type === 'numberrange'"
87
- :start-value.sync="form[item.startValue]"
88
- :end-value.sync="form[item.endValue]"
89
- style="width: 100%"
90
- v-bind="item.props"
91
- v-on="item.on"
92
- />
93
- <datePickerPor
94
- v-else-if="item.type === 'date'"
95
- v-model="form[item.value]"
96
- type="date"
97
- :clearable="item | clearableF"
98
- style="width: 100%"
99
- v-bind="item.props"
100
- v-on="item.on"
101
- />
102
- <datePickerPor
103
- v-else-if="item.type === 'daterange'"
104
- type="daterange"
105
- :start-date.sync="form[item.startDate]"
106
- :end-date.sync="form[item.endDate]"
107
- :clearable="item | clearableF"
108
- style="width: 100%"
109
- v-bind="item.props"
110
- v-on="item.on"
111
- />
112
- <el-checkbox-group
113
- v-else-if="item.type === 'checkbox'"
114
- v-model="form[item.value]"
115
- v-bind="item.props"
116
- v-on="item.on"
28
+ <template v-if="!type">
29
+ <el-form-item
30
+ v-for="(item, i) in minList"
31
+ :key="i"
32
+ class="m-b"
33
+ :label="item.label"
117
34
  >
118
- <el-checkbox
119
- v-for="c in item.options"
120
- :key="c.value"
121
- :label="c.value"
122
- :disabled="c.disabled"
123
- >{{ c.label }}</el-checkbox
124
- >
125
- </el-checkbox-group>
126
- <el-radio-group
127
- v-else-if="item.type === 'radio'"
128
- v-model="form[item.value]"
129
- v-bind="item.props"
130
- v-on="item.on"
35
+ <slot v-if="item.slotName" :name="item.slotName"></slot>
36
+ <form-item-input v-else :form="form" :item="item" />
37
+ </el-form-item>
38
+ <template v-if="filterList.length > defaultShow">
39
+ <div :style="{ paddingLeft: labelWidth }">
40
+ <el-button
41
+ class="p-t-0 m-b-s color-primary"
42
+ type="text"
43
+ @click="showMore = !showMore"
44
+ ><span>更多条件</span
45
+ ><i
46
+ :class="showMore ? 'el-icon-arrow-up' : 'el-icon-arrow-down'"
47
+ ></i
48
+ ></el-button>
49
+ </div>
50
+ <el-collapse-transition>
51
+ <div v-if="showMore">
52
+ <el-form-item
53
+ v-for="(item, i) in moreList"
54
+ :key="i"
55
+ class="m-b"
56
+ :label="item.label"
57
+ >
58
+ <slot v-if="item.slotName" :name="item.slotName"></slot>
59
+ <form-item-input v-else :form="form" :item="item" />
60
+ </el-form-item>
61
+ </div>
62
+ </el-collapse-transition>
63
+ </template>
64
+ </template>
65
+ <template v-else-if="type === 'remote'">
66
+ <!-- 服务端保存筛选条件组 -->
67
+ <el-form-item
68
+ v-for="(item, i) in remoteList"
69
+ :key="i"
70
+ class="m-b"
71
+ :label="item.label"
131
72
  >
132
- <el-radio
133
- v-for="c in item.options"
134
- :key="c.value"
135
- :label="c.value"
136
- :disabled="c.disabled"
137
- >{{ c.label }}</el-radio
138
- >
139
- </el-radio-group>
140
- </el-form-item>
141
- <template v-if="filterList.length > defaultShow">
73
+ <slot v-if="item.slotName" :name="item.slotName"></slot>
74
+ <form-item-input v-else :form="form" :item="item" />
75
+ </el-form-item>
142
76
  <div :style="{ paddingLeft: labelWidth }">
143
77
  <el-button
144
78
  class="p-t-0 m-b-s color-primary"
145
79
  type="text"
146
- @click="showMore = !showMore"
80
+ @click="setRemoteV = true"
147
81
  ><span>更多条件</span
148
82
  ><i
149
83
  :class="showMore ? 'el-icon-arrow-up' : 'el-icon-arrow-down'"
150
84
  ></i
151
85
  ></el-button>
152
86
  </div>
153
- <el-collapse-transition>
154
- <div v-if="showMore">
155
- <el-form-item
156
- v-for="(item, i) in moreList"
157
- :key="i"
158
- class="m-b"
159
- :label="item.label"
160
- >
161
- <slot v-if="item.slotName" :name="item.slotName"></slot>
162
- <el-input
163
- v-else-if="item.type === 'text' || item.type === undefined"
164
- v-model="form[item.value]"
165
- :clearable="item | clearableF"
166
- style="width: 100%"
167
- v-bind="item.props"
168
- v-on="item.on"
169
- />
170
- <el-select
171
- v-else-if="item.type === 'select'"
172
- v-model="form[item.value]"
173
- :clearable="item | clearableF"
174
- :multiple="item.multiple"
175
- style="width: 100%"
176
- v-bind="item.props"
177
- v-on="item.on"
178
- >
179
- <template
180
- v-if="
181
- item.props && item.props.labelKey && item.props.valueKey
182
- "
183
- >
184
- <el-option
185
- v-for="(c, i) in item.options"
186
- :key="i"
187
- :label="c[item.props.labelKey]"
188
- :value="c[item.props.valueKey]"
189
- :disabled="c.disabled"
190
- />
191
- </template>
192
- <template v-else>
193
- <el-option
194
- v-for="c in item.options"
195
- :key="c.value + '_' + c.label"
196
- :label="c.label"
197
- :value="c.value"
198
- :disabled="c.disabled"
199
- />
200
- </template>
201
- </el-select>
202
- <inputNumber
203
- v-else-if="item.type === 'number'"
204
- v-model="form[item.value]"
205
- style="width: 100%"
206
- v-bind="item.props"
207
- v-on="item.on"
208
- />
209
- <inputNumberRange
210
- v-else-if="item.type === 'numberrange'"
211
- :start-value.sync="form[item.startValue]"
212
- :end-value.sync="form[item.endValue]"
213
- style="width: 100%"
214
- v-bind="item.props"
215
- v-on="item.on"
216
- />
217
- <datePickerPor
218
- v-else-if="item.type === 'date'"
219
- v-model="form[item.value]"
220
- type="date"
221
- :clearable="item | clearableF"
222
- style="width: 100%"
223
- v-bind="item.props"
224
- v-on="item.on"
225
- />
226
- <datePickerPor
227
- v-else-if="item.type === 'daterange'"
228
- type="daterange"
229
- :start-date.sync="form[item.startDate]"
230
- :end-date.sync="form[item.endDate]"
231
- :clearable="item | clearableF"
232
- style="width: 100%"
233
- v-bind="item.props"
234
- v-on="item.on"
235
- />
236
- <el-checkbox-group
237
- v-else-if="item.type === 'checkbox'"
238
- v-model="form[item.value]"
239
- v-bind="item.props"
240
- v-on="item.on"
241
- >
242
- <el-checkbox
243
- v-for="c in item.options"
244
- :key="c.value"
245
- :label="c.value"
246
- :disabled="c.disabled"
247
- >{{ c.label }}</el-checkbox
248
- >
249
- </el-checkbox-group>
250
- <el-radio-group
251
- v-else-if="item.type === 'radio'"
252
- v-model="form[item.value]"
253
- v-bind="item.props"
254
- v-on="item.on"
255
- >
256
- <el-radio
257
- v-for="c in item.options"
258
- :key="c.value"
259
- :label="c.value"
260
- :disabled="c.disabled"
261
- >{{ c.label }}</el-radio
262
- >
263
- </el-radio-group>
264
- </el-form-item>
265
- </div>
266
- </el-collapse-transition>
87
+ <showColumn
88
+ ref="setRemote"
89
+ :dialog-visible.sync="setRemoteV"
90
+ :check-columns="remoteList"
91
+ :columns="filterList"
92
+ :is-filter="true"
93
+ :auto-save="true"
94
+ page-id="filterId"
95
+ @setColumns="setRemoteChange"
96
+ />
267
97
  </template>
268
98
  <footerBox class="text-c">
269
99
  <el-button type="primary" @click="filter">确认</el-button>
@@ -274,26 +104,15 @@
274
104
  </template>
275
105
 
276
106
  <script>
277
- import inputNumber from '../InputNumber/index.vue'
278
- import inputNumberRange from '../InputNumber/numberRange.vue'
279
- import datePickerPor from '../DatePicker/por.vue'
107
+ import formItemInput from './form-item-input.vue'
280
108
  import footerBox from '../FooterBox/index.vue'
109
+ import showColumn from '../ShowColumn/index.vue'
281
110
  export default {
282
111
  name: 'Filters',
283
112
  components: {
284
- inputNumber,
285
- inputNumberRange,
286
- datePickerPor,
287
- footerBox
288
- },
289
- filters: {
290
- clearableF(item) {
291
- if (item.props && item.props.clearable === false) {
292
- return false
293
- } else {
294
- return true
295
- }
296
- }
113
+ formItemInput,
114
+ footerBox,
115
+ showColumn
297
116
  },
298
117
  props: {
299
118
  width: {
@@ -315,13 +134,23 @@ export default {
315
134
  labelWidth: {
316
135
  type: [String, Number],
317
136
  default: '5em'
137
+ },
138
+ type: {
139
+ type: String,
140
+ default: undefined
141
+ },
142
+ filterId: {
143
+ type: String,
144
+ default: undefined
318
145
  }
319
146
  },
320
147
  data() {
321
148
  return {
322
149
  showPop: false,
323
150
  showPopC: false,
324
- showMore: false
151
+ showMore: false,
152
+ remoteList: [],
153
+ setRemoteV: false
325
154
  }
326
155
  },
327
156
  computed: {
@@ -333,6 +162,18 @@ export default {
333
162
  }
334
163
  },
335
164
  methods: {
165
+ show() {
166
+ this.showPopC = true
167
+ this.$nextTick(() => {
168
+ if (this.type === 'remote' && !this.remoteList.length) {
169
+ this.getRemote()
170
+ }
171
+ })
172
+ },
173
+ leave() {
174
+ this.showPopC = false
175
+ this.showMore = false
176
+ },
336
177
  clear() {
337
178
  this.$emit('clear')
338
179
  },
@@ -366,6 +207,14 @@ export default {
366
207
  if (item) {
367
208
  item.options = opts || []
368
209
  }
210
+ },
211
+ getRemote() {
212
+ this.$refs['setRemote'].getColumns().then((list) => {
213
+ this.remoteList = list || this.filterList
214
+ })
215
+ },
216
+ setRemoteChange(list) {
217
+ this.remoteList = list
369
218
  }
370
219
  }
371
220
  }
@@ -8,6 +8,7 @@
8
8
  :disabled="disabled"
9
9
  :placeholder="phd"
10
10
  @focus="focusFn"
11
+ @blur.native.capture.stop
11
12
  />
12
13
  <el-input-number
13
14
  v-else
@@ -5,14 +5,14 @@
5
5
  v-bind="$attrs"
6
6
  :visible.sync="visible"
7
7
  :width="width"
8
- :title="isExport ? '导出' : '设置显示列'"
8
+ :title="title"
9
9
  @open="popOpen"
10
10
  >
11
11
  <div class="dialog-view">
12
12
  <div class="flex-box">
13
13
  <div class="left-c flex-column p-t-m bd-r">
14
14
  <div class="flex-box flex-v p-r m-b">
15
- <span>{{ isExport ? '导出' : '显示列' }}</span>
15
+ <span>{{ header }}</span>
16
16
  <span class="m-l-m color-999">
17
17
  已选
18
18
  <span class="color-main">{{ dragList.length }}</span>
@@ -87,6 +87,10 @@ export default {
87
87
  type: Boolean,
88
88
  default: false
89
89
  },
90
+ isFilter: {
91
+ type: Boolean,
92
+ default: false
93
+ },
90
94
  labelKey: {
91
95
  type: String,
92
96
  default: 'label'
@@ -111,6 +115,24 @@ export default {
111
115
  }
112
116
  },
113
117
  computed: {
118
+ title() {
119
+ if (this.isExport) {
120
+ return '导出'
121
+ } else if (this.isFilter) {
122
+ return '筛选'
123
+ } else {
124
+ return '设置显示列'
125
+ }
126
+ },
127
+ header() {
128
+ if (this.isExport) {
129
+ return '导出'
130
+ } else if (this.isFilter) {
131
+ return '筛选'
132
+ } else {
133
+ return '显示列'
134
+ }
135
+ },
114
136
  visible: {
115
137
  get() {
116
138
  return this.dialogVisible
@@ -154,32 +176,37 @@ export default {
154
176
  },
155
177
  setChange() {
156
178
  if (this.dragList.length < 1) {
157
- this.$message.error('至少设置显示一列!')
179
+ this.$message.error(
180
+ `至少设置${
181
+ this.isExport
182
+ ? '一列导出数据'
183
+ : this.isFilter
184
+ ? '一个筛选条件'
185
+ : '一列显示列'
186
+ }!`
187
+ )
158
188
  return
159
189
  }
160
- // 自动保存设置的显示列
161
- !this.isExport && this.autoSave && this.saveColumns()
162
190
 
163
191
  let list = []
164
192
  let preCols = this.columns.filter((col) => col.static === 'pre')
165
193
  let nextCols = this.columns.filter((col) => col.static === 'next')
166
194
  list.push(...preCols, ...this.dragList, ...nextCols)
167
195
 
196
+ // 自动保存设置的显示列
197
+ !this.isExport && this.autoSave && this.saveColumns(list)
198
+
168
199
  this.$emit('setColumns', list)
169
200
  this.visible = false
170
201
  },
171
- saveColumns() {
172
- let list = []
173
- let preCols = this.columns.filter((col) => col.static === 'pre')
174
- let nextCols = this.columns.filter((col) => col.static === 'next')
175
- list.push(...preCols, ...this.dragList, ...nextCols)
176
-
202
+ saveColumns(list) {
203
+ let labels = list.map((c) => c[this.labelKey] || c)
177
204
  axios.post(
178
205
  '/bems/prod_1.0/user/pageHabit',
179
206
  {
180
207
  userNo: this.userNo,
181
208
  pageId: this.pageId,
182
- showStructure: JSON.stringify(list)
209
+ showStructure: JSON.stringify(labels)
183
210
  },
184
211
  { loading: false }
185
212
  )
@@ -198,10 +225,22 @@ export default {
198
225
  .then(({ data }) => {
199
226
  if (data) {
200
227
  let _data = JSON.parse(data)
201
- resolve(_data.length ? _data : null)
202
- } else {
203
- resolve(null)
228
+ if (_data && _data.length > 0) {
229
+ let columns = []
230
+ _data.forEach((d) => {
231
+ if (typeof d === 'string') {
232
+ let column = this.columns.find(
233
+ (c) => c[this.labelKey] === d
234
+ )
235
+ column && columns.push(column)
236
+ } else if (typeof d === 'object') {
237
+ columns.push(d)
238
+ }
239
+ })
240
+ return resolve(columns)
241
+ }
204
242
  }
243
+ return resolve(undefined)
205
244
  })
206
245
  .catch((err) => {
207
246
  reject(err)
@@ -23,7 +23,7 @@
23
23
  v-model="checkbox"
24
24
  :indeterminate="isIndeterminate"
25
25
  @change="checkboxChange"
26
- >{{ '全部' + '(' + this.thIndex.length + ')' }}</el-checkbox
26
+ >{{ '全部' + '(' + dataList.length + ')' }}</el-checkbox
27
27
  >
28
28
  <el-checkbox-group
29
29
  v-model="checkLists"
@@ -63,7 +63,7 @@ export default {
63
63
  return {}
64
64
  }
65
65
  },
66
- thIndex: {
66
+ dataList: {
67
67
  type: Array,
68
68
  default: () => {
69
69
  return []
@@ -108,8 +108,8 @@ export default {
108
108
  })
109
109
  },
110
110
  countNum(res) {
111
- var newArrays = this.thIndex.filter((item) => {
112
- return item[this.property] == res
111
+ var newArrays = this.dataList.filter((item) => {
112
+ return item[this.property] === res
113
113
  })
114
114
  return newArrays.length
115
115
  },
@@ -125,4 +125,4 @@ export default {
125
125
  }
126
126
  }
127
127
  }
128
- </script>
128
+ </script>