xs-common-plugins 1.2.1 → 1.2.4

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.
Files changed (56) hide show
  1. package/README.md +298 -294
  2. package/common.js +110 -110
  3. package/index.js +1 -1
  4. package/package.json +16 -16
  5. package/src/common/common.js +548 -548
  6. package/src/components/CheckBox_Cmp/index.vue +62 -62
  7. package/src/components/FormItem/index.vue +92 -92
  8. package/src/components/ReportCmp/index.vue +76 -76
  9. package/src/components/Search/index.scss +219 -219
  10. package/src/components/Search/index.vue +410 -410
  11. package/src/components/Search/product_option/index.scss +1 -1
  12. package/src/components/Search_filter/index.scss +104 -104
  13. package/src/components/TableItem/TableItem.vue +55 -55
  14. package/src/components/TextOVer/index.vue +55 -55
  15. package/src/components/UploadImg/index.vue +177 -177
  16. package/src/components/im/index.vue +155 -155
  17. package/src/components/im/pages/chatList/index.vue +45 -45
  18. package/src/components/im/pages/chatRoom/index.vue +159 -159
  19. package/src/components/xsSelect/index.vue +125 -125
  20. package/src/mixin/keepAlive.js +53 -0
  21. package/src/plugins/im/components/chat/index.scss +163 -163
  22. package/src/plugins/im/components/chat/index.vue +144 -144
  23. package/src/plugins/im/components/chat/methods.js +149 -149
  24. package/src/plugins/im/components/msg-image/index.vue +40 -40
  25. package/src/plugins/im/components/send-msg/index.scss +164 -164
  26. package/src/plugins/im/components/send-msg/index.vue +107 -107
  27. package/src/plugins/im/components/send-msg/methods.js +125 -125
  28. package/src/plugins/im/components/template-message/index.vue +76 -76
  29. package/src/plugins/im/components/without.vue +19 -19
  30. package/src/plugins/im/index.js +31 -31
  31. package/src/plugins/im/utils/services.js +625 -625
  32. package/src/plugins/index.js +60 -60
  33. package/src/plugins/row-col-cmp/index.js +20 -20
  34. package/src/router/permission.js +126 -126
  35. package/src/store/modules/dic.js +74 -74
  36. package/src/store/modules/oss.js +40 -40
  37. package/src/styles/index.scss +91 -91
  38. package/src/styles/table.scss +90 -90
  39. package/src/utils/api.js +54 -54
  40. package/src/utils/auth.js +38 -38
  41. package/src/utils/concat_batch_btns.js +88 -88
  42. package/src/utils/enum.js +150 -150
  43. package/src/utils/filter.js +5 -5
  44. package/src/utils/filterRules.js +55 -55
  45. package/src/utils/getMenu.js +82 -82
  46. package/src/utils/global_directive.js +10 -0
  47. package/src/utils/ossService.js +55 -55
  48. package/src/utils/prototype.js +46 -46
  49. package/src/utils/search.js +33 -33
  50. package/src/utils/signalR.js +24 -24
  51. package/src/views/callback/index.vue +35 -35
  52. package/src/views/home/index.vue +25 -25
  53. package/src/views/layout/components/AppMain.vue +21 -5
  54. package/src/views/layout/components/Navbar.vue +20 -13
  55. package/src/views/layout/components/TagsView/index.vue +130 -91
  56. package/src/views/slienceAuth/index.vue +42 -42
@@ -1,410 +1,410 @@
1
- <!--@click添加点击事件;可设置背景色,字体颜色,字体大小,按钮宽,高;props分别为:bgcolor,fontColor,fontSize,width,height-->
2
- <!-- {
3
- displayName: "", // 搜索框 label 名称
4
- fieldName: "datepic", // 表单属性名称
5
- defaultValue: "时间控件", // placeholder 提示内容
6
- [{"Id":0,"Name":"input","Text":"输入框"},
7
- {"Id":3,"Name":"select","Text":"下拉框"},
8
- {"Id":4,"Name":"datePicker","Text":"时间选择框"},
9
- {"Id":5,"Name":"mixedSelect","Text":"混合选择框"},
10
- {"Id":6,"Name":"cascader","Text":"联级选择器"},
11
- {"Id":7,"Name":"radioCascader","Text":"单选联级选择器"},
12
- {"Id":8,"Name":"reportSet","Text":"报表配置"}
13
- {"Id":10,"Name":"HKQudao","Text":";联级多选可动静态"}
14
- ]
15
- conditionType: 4,
16
- config: {
17
- method: "lazy",
18
- props: {
19
- multiple: true, // 支持多选
20
- checkStrictly: true // 是否支持任意一级
21
- },
22
- source: [
23
- {
24
- url: "api.service.select.getbrandlist",
25
- param: { pageSize: 0 }
26
- },
27
- {
28
- url: "api.service.select.getmodellist",
29
- param: { pageSize: 0 },
30
- searchKey: "brandId"
31
- }
32
- ]
33
- },
34
- url: "", // 下拉框集合 api or enumName
35
- param:{xxx:aa},
36
- searchKey:'searchKey',
37
- dataSource: "", // 下拉框集合自定义
38
- dataSourceType: 1, // 0:api 单选+数据源格式是 {label:value} , 1:单选+自定义 , 2:枚举名称($orgEnum[optionItem.url]) 4:枚举数据源+多选
39
- 10:api 单选+格式是 [value:xxx,label:xxx], 21:多选+自定义 41: 枚举数据源 + 单选
40
- 20:api 多选+数据源格式是 {label:value},
41
- 30:api 多选+格式是 [{value:xxx,label:xxx}],
42
- sort: 0,
43
- isIndex: true,
44
- defaultTime: true
45
- }-->
46
- <template>
47
- <div class="search-wrapper formClass" ref="formClass">
48
- <el-form :model="inputValue" :inline="true" fit size="small" ref="formContent" label-position="left" class="form" @submit.native.prevent>
49
- <div class="contentBox" ref="contentBox">
50
- <div class="searchBox">
51
- <div v-for="(optionItem, indexs) in formContent" :key="indexs">
52
- <el-form-item :label="optionItem.displayName" v-if="optionItem.conditionType == $enum.conditionType.input"
53
- :style="{ width: optionItem.itemWidth }">
54
- <el-input v-model="inputValue[optionItem.fieldName]" :placeholder="optionItem.defaultValue" @change="(value)=>{
55
- optionItem.change&&optionItem.change(value)
56
- }"></el-input>
57
- </el-form-item>
58
- <!--下拉单选通过接口-->
59
- <el-form-item :label="optionItem.displayName"
60
- v-else-if="optionItem.conditionType == $enum.conditionType.select"
61
- :style="{ width: optionItem.itemWidth }">
62
- <search-select-cmp :option="optionItem" v-model="inputValue[optionItem.fieldName]">
63
- </search-select-cmp>
64
- </el-form-item>
65
- <el-form-item :label="optionItem.displayName" v-else-if="optionItem.conditionType == 9"
66
- :style="{ width: optionItem.itemWidth }">
67
- <search-cascader-cmp :option="optionItem" v-model="inputValue[optionItem.fieldName]">
68
- </search-cascader-cmp>
69
- </el-form-item>
70
-
71
- <el-form-item :label="optionItem.displayName"
72
- v-if="optionItem.conditionType == $enum.conditionType.mixedSelect"
73
- :style="{ width: optionItem.itemWidth }">
74
- <!-- <select-cmp :selectType="optionItem.selectType" v-model="inputValue[optionItem.fieldName]" ></select-cmp> -->
75
- <el-select :multiple="optionItem.dataSourceType == 4" clearable collapse-tags popper-class="select-popper"
76
- class="select-style" v-model="inputValue[optionItem.fieldName]" :placeholder="optionItem.defaultValue">
77
- <div class="shortcut" v-for="(item, index) in $orgEnum[optionItem.url].slice(-1)" :key="index">
78
- <div class="tabs" v-for="(items, indexs) in item" :key="items.id">
79
- <el-button @click="toSelect(items, optionItem.fieldName)">{{
80
- indexs
81
- }}</el-button>
82
- </div>
83
- </div>
84
- <div class="option">
85
- <el-option v-for="item in $orgEnum[optionItem.url].slice(0, -1)" :key="item.Id" :label="item.Text"
86
- :value="item.Id">
87
- <div class="item">{{ item.Text }}</div>
88
- </el-option>
89
- </div>
90
- </el-select>
91
- </el-form-item>
92
-
93
- <el-form-item :label="optionItem.displayName"
94
- v-if="optionItem.conditionType == $enum.conditionType.cascader" :style="{ width: optionItem.itemWidth }">
95
- <product-option-cmp v-model="inputValue[optionItem.fieldName]" :optionItem="optionItem">
96
- </product-option-cmp>
97
- </el-form-item>
98
- <!--单选联级选择-->
99
- <el-form-item :label="optionItem.displayName" v-if="
100
- optionItem.conditionType == $enum.conditionType.radioCascader
101
- ">
102
- <el-cascader ref="radiocascader" class="radiocascader" v-model="inputValue[optionItem.fieldName]"
103
- :props="{ checkStrictly: true }" clearable :options="brandModelList"
104
- @visible-change="cascaderData($event, optionItem.url)"></el-cascader>
105
- </el-form-item>
106
- <!--单选联级选择-->
107
- <el-form-item :label="optionItem.displayName"
108
- v-if="optionItem.conditionType === $enum.conditionType.datePicker"
109
- :style="{ width: optionItem.itemWidth }" class="dateRange">
110
- <el-date-picker clearable v-model="inputValue[optionItem.fieldName]" v-if="optionItem.dataSourceType == 0"
111
- type="date" align="right" unlink-panels :placeholder="optionItem.defaultValue"
112
- value-format="yyyy-MM-dd">
113
- </el-date-picker>
114
- <!-- 时间选择器-->
115
- <el-date-picker v-else clearable v-model="inputValue[optionItem.fieldName]" type="daterange" align="right"
116
- unlink-panels range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
117
- :picker-options="pickerOptions" value-format="yyyy-MM-dd" style="position:relative;top:-1px">
118
- </el-date-picker>
119
- <!-- :value-format="optionItem.config?optionItem.config.timeFrom:'yyyy-MM-DD'" -->
120
- </el-form-item>
121
-
122
- <!-- -->
123
- <el-form-item :label="optionItem.displayName"
124
- v-if="optionItem.conditionType == $enum.conditionType.reportSet" :style="{ width: optionItem.itemWidth }"
125
- class="report-class">
126
- <!-- v-model="inputValue[optionItem.fieldName]" -->
127
- <el-dropdown @command="handlerSelReport" @click="clickReportBtn(optionItem.url, optionItem.params)">
128
- <el-button type="primary">{{ selReportName }}</el-button>
129
- <el-dropdown-menu slot="dropdown" v-if="reportList.length > 0">
130
- <el-dropdown-item v-for="report in reportList" :key="report.id" :command="report">
131
- {{ report.title }}
132
- </el-dropdown-item>
133
- </el-dropdown-menu>
134
- </el-dropdown>
135
- <el-popover placement="bottom" width="560" trigger="click" v-if="selReportName !== '选择报表'">
136
- <report-set v-if="reloadReportForm" v-model="inputValue[optionItem.fieldName]" model-type="Object"
137
- :jsonCfg="reportDefs"></report-set>
138
- <el-button slot="reference" type="primary" class="set-class" icon="el-icon-s-tools">
139
- </el-button>
140
- </el-popover>
141
- </el-form-item>
142
- <!--多选联级选择可动态查询-->
143
- <el-form-item :label="optionItem.displayName" v-if="optionItem.conditionType == $enum.conditionType.hkqudao"
144
- :style="{ width: optionItem.itemWidth }" class="dateRange">
145
- <HKQudao v-model="inputValue[optionItem.fieldName]" :placeholder="optionItem.defaultValue"
146
- :style="{ width: optionItem.itemWidth }" :optionItem="optionItem"></HKQudao>
147
- </el-form-item>
148
- <el-form-item :label="optionItem.displayName" v-if="optionItem.conditionType == $enum.conditionType.hkarea"
149
- :style="{ width: optionItem.itemWidth }" class="dateRange">
150
- <HKCascader v-model="inputValue[optionItem.fieldName]" :placeholder="optionItem.defaultValue"
151
- :style="{ width: optionItem.itemWidth }" :optionItem="optionItem"></HKCascader>
152
- </el-form-item>
153
- <el-form-item :label="optionItem.displayName" v-if="optionItem.component "
154
- :style="{ width: optionItem.itemWidth }" class="dateRange">
155
- <component :is="optionItem.component" v-model="inputValue[optionItem.fieldName]" :placeholder="optionItem.defaultValue" v-bind="optionItem" />
156
- </el-form-item>
157
- </div>
158
-
159
- <el-form-item v-if="!!getBtnContentIsOut().length">
160
- <el-dropdown trigger="click" @command="handleCommand" split-button type="primary" @click="toSearch()">
161
- 查询
162
- <el-dropdown-menu slot="dropdown">
163
- <el-dropdown-item v-for="item in getBtnContentIsOut()" :key="item.id" :command="item">
164
- {{ item.actionText }}
165
- </el-dropdown-item>
166
- </el-dropdown-menu>
167
- </el-dropdown>
168
- </el-form-item>
169
- <el-form-item v-else>
170
- <el-button @command="handleCommand" split-button type="primary" @click="toSearch()">查询</el-button>
171
- </el-form-item>
172
- <div class="isOut-btn">
173
- <el-button v-for="(item, i) in getBtnContentIsOut('isOut')" :key="i" size="small"
174
- @click="handleCommand(item)" type="primary">{{ item.actionText }}
175
- </el-button>
176
- </div>
177
- </div>
178
- <slot name="search_custemBtn" />
179
- <!-- <div class="buttonBox">
180
-
181
- <el-form-item v-if="!!getBtnContentIsOut().length">
182
- <el-dropdown
183
- trigger="click"
184
- @command="handleCommand"
185
- split-button
186
- type="primary"
187
- @click="toSearch()"
188
- >
189
- 查询
190
- <el-dropdown-menu slot="dropdown">
191
- <el-dropdown-item
192
- v-for="item in getBtnContentIsOut()"
193
- :key="item.id"
194
- :command="item"
195
- >
196
- {{ item.actionText }}
197
- </el-dropdown-item>
198
- </el-dropdown-menu>
199
- </el-dropdown>
200
- </el-form-item>
201
- <el-form-item v-else>
202
- <el-button
203
- @command="handleCommand"
204
- split-button
205
- type="primary"
206
- @click="toSearch()"
207
- >查询</el-button
208
- >
209
- </el-form-item>
210
- <el-form-item style="margin-left:4px" v-for="(item,i) in getBtnContentIsOut('isOut')" :key="i">
211
- <el-button @command="handleCommand" type="primary">{{item.actionText}} </el-button>
212
- </el-form-item>
213
- </div> -->
214
- </div>
215
- </el-form>
216
- </div>
217
- </template>
218
- <script>
219
- import methods from "./methods";
220
- import { isArray } from "@/common/utils";
221
-
222
- import reportSet from "@/components/report_set";
223
- // 组件分离 2020-10-10 10:00
224
- // 下拉框组件升级
225
- import SearchSelectCmp from "./select";
226
- import SearchCascaderCmp from "./cascader";
227
-
228
- import ProductOptionCmp from "./product_option";
229
- import HKQudao from "./hk_cascader_qudao";
230
- import HKCascader from "./hk_cascader";
231
-
232
- const EVENT_INPUT = "input";
233
- let id = 0;
234
-
235
- export default {
236
- name: "Search",
237
-
238
- components: {
239
- reportSet,
240
- SearchSelectCmp,
241
- SearchCascaderCmp,
242
- ProductOptionCmp,
243
- HKQudao,
244
- HKCascader,
245
- },
246
- props: {
247
- //搜索内容集合
248
- formContent: {
249
- type: [Object, Array],
250
- },
251
- btnContent: {
252
- type: [Object, Array],
253
- },
254
- placeholder: {
255
- type: String,
256
- default: "",
257
- },
258
- value: {
259
- type: Object,
260
- default: () => {},
261
- },
262
- },
263
- data() {
264
- return {
265
- brandModelList: [],
266
- keys: [],
267
- inputValue: this.value,
268
- pickerOptions: {
269
- shortcuts: [
270
- {
271
- text: "最近一周",
272
- onClick(picker) {
273
- const end = new Date();
274
- const start = new Date();
275
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
276
- picker.$emit("pick", [start, end]);
277
- },
278
- },
279
- {
280
- text: "最近一个月",
281
- onClick(picker) {
282
- const end = new Date();
283
- const start = new Date();
284
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
285
- picker.$emit("pick", [start, end]);
286
- },
287
- },
288
- {
289
- text: "最近三个月",
290
- onClick(picker) {
291
- const end = new Date();
292
- const start = new Date();
293
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
294
- picker.$emit("pick", [start, end]);
295
- },
296
- },
297
- {
298
- text: "本月",
299
- onClick(picker) {
300
- const end = new Date();
301
- var d = new Date();
302
- d.setDate(1);
303
- const start = d;
304
- picker.$emit("pick", [start, end]);
305
- },
306
- },
307
- {
308
- text: "本周",
309
- onClick(picker) {
310
- const date = new Date();
311
- const weekday = date.getDay() || 7;
312
- const end = new Date();
313
- date.setDate(date.getDate() - weekday + 1);
314
- const start = date;
315
- picker.$emit("pick", [start, end]);
316
- },
317
- },
318
- {
319
- text: "最近半年",
320
- onClick(picker) {
321
- const end = new Date();
322
- const start = new Date();
323
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 180);
324
- picker.$emit("pick", [start, end]);
325
- },
326
- },
327
- {
328
- text: "最近一年",
329
- onClick(picker) {
330
- const end = new Date();
331
- const start = new Date();
332
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 365);
333
- picker.$emit("pick", [start, end]);
334
- },
335
- },
336
- ],
337
- },
338
- // 报表相关属性
339
- reportList: [], // 报表集合
340
- selReportName: "选择报表",
341
- reportDefs: "",
342
- reportParamStr: "",
343
- reloadReportForm: false,
344
- };
345
- },
346
- methods,
347
- mixins: [],
348
- watch: {
349
- value: {
350
- handler(newValue) {
351
- this.inputValue = newValue;
352
- },
353
- deep: true,
354
- },
355
- inputValue: {
356
- handler(newValue) {
357
- this.$emit(EVENT_INPUT, newValue);
358
- },
359
- deep: true,
360
- },
361
- formContent: {
362
- handler(newValue) {
363
- if (isArray(newValue)) {
364
- const reportObj = newValue.find((item) => {
365
- return item.conditionType == this.$enum.conditionType.reportSet;
366
- });
367
- if (reportObj) {
368
- this.clickReportBtn(reportObj.url, reportObj.params);
369
- }
370
- }
371
- },
372
- deep: true,
373
- immediate: true,
374
- },
375
- },
376
- computed: {
377
- getItem() {
378
- return function (val) {
379
- setTimeout(() => {
380
- const result = this.$http.get(val);
381
- }, 1000);
382
- };
383
- },
384
- // getBtnContentIsOut() {
385
- // let arr = Array.isArray(this.btnContent)&&this.btnContent.filter((item) => item.isOut);
386
- // console.log('xxx',arr)
387
- // return arr
388
- // },
389
- },
390
- // ------------------------------------------------------------------
391
- // pragma mark - Life Cycle(生命周期)
392
- // ------------------------------------------------------------------
393
- created() {
394
- this.createdInit();
395
- },
396
- mounted() {
397
- //点击文本自动点击前面的input触发选择
398
- setInterval(function () {
399
- document.querySelectorAll(".el-cascader-node__label").forEach((el) => {
400
- el.onclick = function () {
401
- if (this.previousElementSibling) this.previousElementSibling.click();
402
- };
403
- });
404
- }, 1000);
405
-
406
- this.mountedInit();
407
- },
408
- };
409
- </script>
410
- <style lang="scss" src="./index.scss" scoped></style>
1
+ <!--@click添加点击事件;可设置背景色,字体颜色,字体大小,按钮宽,高;props分别为:bgcolor,fontColor,fontSize,width,height-->
2
+ <!-- {
3
+ displayName: "", // 搜索框 label 名称
4
+ fieldName: "datepic", // 表单属性名称
5
+ defaultValue: "时间控件", // placeholder 提示内容
6
+ [{"Id":0,"Name":"input","Text":"输入框"},
7
+ {"Id":3,"Name":"select","Text":"下拉框"},
8
+ {"Id":4,"Name":"datePicker","Text":"时间选择框"},
9
+ {"Id":5,"Name":"mixedSelect","Text":"混合选择框"},
10
+ {"Id":6,"Name":"cascader","Text":"联级选择器"},
11
+ {"Id":7,"Name":"radioCascader","Text":"单选联级选择器"},
12
+ {"Id":8,"Name":"reportSet","Text":"报表配置"}
13
+ {"Id":10,"Name":"HKQudao","Text":";联级多选可动静态"}
14
+ ]
15
+ conditionType: 4,
16
+ config: {
17
+ method: "lazy",
18
+ props: {
19
+ multiple: true, // 支持多选
20
+ checkStrictly: true // 是否支持任意一级
21
+ },
22
+ source: [
23
+ {
24
+ url: "api.service.select.getbrandlist",
25
+ param: { pageSize: 0 }
26
+ },
27
+ {
28
+ url: "api.service.select.getmodellist",
29
+ param: { pageSize: 0 },
30
+ searchKey: "brandId"
31
+ }
32
+ ]
33
+ },
34
+ url: "", // 下拉框集合 api or enumName
35
+ param:{xxx:aa},
36
+ searchKey:'searchKey',
37
+ dataSource: "", // 下拉框集合自定义
38
+ dataSourceType: 1, // 0:api 单选+数据源格式是 {label:value} , 1:单选+自定义 , 2:枚举名称($orgEnum[optionItem.url]) 4:枚举数据源+多选
39
+ 10:api 单选+格式是 [value:xxx,label:xxx], 21:多选+自定义 41: 枚举数据源 + 单选
40
+ 20:api 多选+数据源格式是 {label:value},
41
+ 30:api 多选+格式是 [{value:xxx,label:xxx}],
42
+ sort: 0,
43
+ isIndex: true,
44
+ defaultTime: true
45
+ }-->
46
+ <template>
47
+ <div class="search-wrapper formClass" ref="formClass">
48
+ <el-form :model="inputValue" :inline="true" fit size="small" ref="formContent" label-position="left" class="form" @submit.native.prevent>
49
+ <div class="contentBox" ref="contentBox">
50
+ <div class="searchBox">
51
+ <div v-for="(optionItem, indexs) in formContent" :key="indexs">
52
+ <el-form-item :label="optionItem.displayName" v-if="optionItem.conditionType == $enum.conditionType.input"
53
+ :style="{ width: optionItem.itemWidth }">
54
+ <el-input v-model="inputValue[optionItem.fieldName]" :placeholder="optionItem.defaultValue" @change="(value)=>{
55
+ optionItem.change&&optionItem.change(value)
56
+ }"></el-input>
57
+ </el-form-item>
58
+ <!--下拉单选通过接口-->
59
+ <el-form-item :label="optionItem.displayName"
60
+ v-else-if="optionItem.conditionType == $enum.conditionType.select"
61
+ :style="{ width: optionItem.itemWidth }">
62
+ <search-select-cmp :option="optionItem" v-model="inputValue[optionItem.fieldName]">
63
+ </search-select-cmp>
64
+ </el-form-item>
65
+ <el-form-item :label="optionItem.displayName" v-else-if="optionItem.conditionType == 9"
66
+ :style="{ width: optionItem.itemWidth }">
67
+ <search-cascader-cmp :option="optionItem" v-model="inputValue[optionItem.fieldName]">
68
+ </search-cascader-cmp>
69
+ </el-form-item>
70
+
71
+ <el-form-item :label="optionItem.displayName"
72
+ v-if="optionItem.conditionType == $enum.conditionType.mixedSelect"
73
+ :style="{ width: optionItem.itemWidth }">
74
+ <!-- <select-cmp :selectType="optionItem.selectType" v-model="inputValue[optionItem.fieldName]" ></select-cmp> -->
75
+ <el-select :multiple="optionItem.dataSourceType == 4" clearable collapse-tags popper-class="select-popper"
76
+ class="select-style" v-model="inputValue[optionItem.fieldName]" :placeholder="optionItem.defaultValue">
77
+ <div class="shortcut" v-for="(item, index) in $orgEnum[optionItem.url].slice(-1)" :key="index">
78
+ <div class="tabs" v-for="(items, indexs) in item" :key="items.id">
79
+ <el-button @click="toSelect(items, optionItem.fieldName)">{{
80
+ indexs
81
+ }}</el-button>
82
+ </div>
83
+ </div>
84
+ <div class="option">
85
+ <el-option v-for="item in $orgEnum[optionItem.url].slice(0, -1)" :key="item.Id" :label="item.Text"
86
+ :value="item.Id">
87
+ <div class="item">{{ item.Text }}</div>
88
+ </el-option>
89
+ </div>
90
+ </el-select>
91
+ </el-form-item>
92
+
93
+ <el-form-item :label="optionItem.displayName"
94
+ v-if="optionItem.conditionType == $enum.conditionType.cascader" :style="{ width: optionItem.itemWidth }">
95
+ <product-option-cmp v-model="inputValue[optionItem.fieldName]" :optionItem="optionItem">
96
+ </product-option-cmp>
97
+ </el-form-item>
98
+ <!--单选联级选择-->
99
+ <el-form-item :label="optionItem.displayName" v-if="
100
+ optionItem.conditionType == $enum.conditionType.radioCascader
101
+ ">
102
+ <el-cascader ref="radiocascader" class="radiocascader" v-model="inputValue[optionItem.fieldName]"
103
+ :props="{ checkStrictly: true }" clearable :options="brandModelList"
104
+ @visible-change="cascaderData($event, optionItem.url)"></el-cascader>
105
+ </el-form-item>
106
+ <!--单选联级选择-->
107
+ <el-form-item :label="optionItem.displayName"
108
+ v-if="optionItem.conditionType === $enum.conditionType.datePicker"
109
+ :style="{ width: optionItem.itemWidth }" class="dateRange">
110
+ <el-date-picker clearable v-model="inputValue[optionItem.fieldName]" v-if="optionItem.dataSourceType == 0"
111
+ type="date" align="right" unlink-panels :placeholder="optionItem.defaultValue"
112
+ value-format="yyyy-MM-dd">
113
+ </el-date-picker>
114
+ <!-- 时间选择器-->
115
+ <el-date-picker v-else clearable v-model="inputValue[optionItem.fieldName]" type="daterange" align="right"
116
+ unlink-panels range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
117
+ :picker-options="pickerOptions" value-format="yyyy-MM-dd" style="position:relative;top:-1px">
118
+ </el-date-picker>
119
+ <!-- :value-format="optionItem.config?optionItem.config.timeFrom:'yyyy-MM-DD'" -->
120
+ </el-form-item>
121
+
122
+ <!-- -->
123
+ <el-form-item :label="optionItem.displayName"
124
+ v-if="optionItem.conditionType == $enum.conditionType.reportSet" :style="{ width: optionItem.itemWidth }"
125
+ class="report-class">
126
+ <!-- v-model="inputValue[optionItem.fieldName]" -->
127
+ <el-dropdown @command="handlerSelReport" @click="clickReportBtn(optionItem.url, optionItem.params)">
128
+ <el-button type="primary">{{ selReportName }}</el-button>
129
+ <el-dropdown-menu slot="dropdown" v-if="reportList.length > 0">
130
+ <el-dropdown-item v-for="report in reportList" :key="report.id" :command="report">
131
+ {{ report.title }}
132
+ </el-dropdown-item>
133
+ </el-dropdown-menu>
134
+ </el-dropdown>
135
+ <el-popover placement="bottom" width="560" trigger="click" v-if="selReportName !== '选择报表'">
136
+ <report-set v-if="reloadReportForm" v-model="inputValue[optionItem.fieldName]" model-type="Object"
137
+ :jsonCfg="reportDefs"></report-set>
138
+ <el-button slot="reference" type="primary" class="set-class" icon="el-icon-s-tools">
139
+ </el-button>
140
+ </el-popover>
141
+ </el-form-item>
142
+ <!--多选联级选择可动态查询-->
143
+ <el-form-item :label="optionItem.displayName" v-if="optionItem.conditionType == $enum.conditionType.hkqudao"
144
+ :style="{ width: optionItem.itemWidth }" class="dateRange">
145
+ <HKQudao v-model="inputValue[optionItem.fieldName]" :placeholder="optionItem.defaultValue"
146
+ :style="{ width: optionItem.itemWidth }" :optionItem="optionItem"></HKQudao>
147
+ </el-form-item>
148
+ <el-form-item :label="optionItem.displayName" v-if="optionItem.conditionType == $enum.conditionType.hkarea"
149
+ :style="{ width: optionItem.itemWidth }" class="dateRange">
150
+ <HKCascader v-model="inputValue[optionItem.fieldName]" :placeholder="optionItem.defaultValue"
151
+ :style="{ width: optionItem.itemWidth }" :optionItem="optionItem"></HKCascader>
152
+ </el-form-item>
153
+ <el-form-item :label="optionItem.displayName" v-if="optionItem.component "
154
+ :style="{ width: optionItem.itemWidth }" class="dateRange">
155
+ <component :is="optionItem.component" v-model="inputValue[optionItem.fieldName]" :placeholder="optionItem.defaultValue" v-bind="optionItem" />
156
+ </el-form-item>
157
+ </div>
158
+
159
+ <el-form-item v-if="!!getBtnContentIsOut().length">
160
+ <el-dropdown trigger="click" @command="handleCommand" split-button type="primary" @click="toSearch()">
161
+ 查询
162
+ <el-dropdown-menu slot="dropdown">
163
+ <el-dropdown-item v-for="item in getBtnContentIsOut()" :key="item.id" :command="item">
164
+ {{ item.actionText }}
165
+ </el-dropdown-item>
166
+ </el-dropdown-menu>
167
+ </el-dropdown>
168
+ </el-form-item>
169
+ <el-form-item v-else>
170
+ <el-button @command="handleCommand" split-button type="primary" @click="toSearch()">查询</el-button>
171
+ </el-form-item>
172
+ <div class="isOut-btn">
173
+ <el-button v-for="(item, i) in getBtnContentIsOut('isOut')" :key="i" size="small"
174
+ @click="handleCommand(item)" type="primary">{{ item.actionText }}
175
+ </el-button>
176
+ </div>
177
+ </div>
178
+ <slot name="search_custemBtn" />
179
+ <!-- <div class="buttonBox">
180
+
181
+ <el-form-item v-if="!!getBtnContentIsOut().length">
182
+ <el-dropdown
183
+ trigger="click"
184
+ @command="handleCommand"
185
+ split-button
186
+ type="primary"
187
+ @click="toSearch()"
188
+ >
189
+ 查询
190
+ <el-dropdown-menu slot="dropdown">
191
+ <el-dropdown-item
192
+ v-for="item in getBtnContentIsOut()"
193
+ :key="item.id"
194
+ :command="item"
195
+ >
196
+ {{ item.actionText }}
197
+ </el-dropdown-item>
198
+ </el-dropdown-menu>
199
+ </el-dropdown>
200
+ </el-form-item>
201
+ <el-form-item v-else>
202
+ <el-button
203
+ @command="handleCommand"
204
+ split-button
205
+ type="primary"
206
+ @click="toSearch()"
207
+ >查询</el-button
208
+ >
209
+ </el-form-item>
210
+ <el-form-item style="margin-left:4px" v-for="(item,i) in getBtnContentIsOut('isOut')" :key="i">
211
+ <el-button @command="handleCommand" type="primary">{{item.actionText}} </el-button>
212
+ </el-form-item>
213
+ </div> -->
214
+ </div>
215
+ </el-form>
216
+ </div>
217
+ </template>
218
+ <script>
219
+ import methods from "./methods";
220
+ import { isArray } from "@/common/utils";
221
+
222
+ import reportSet from "@/components/report_set";
223
+ // 组件分离 2020-10-10 10:00
224
+ // 下拉框组件升级
225
+ import SearchSelectCmp from "./select";
226
+ import SearchCascaderCmp from "./cascader";
227
+
228
+ import ProductOptionCmp from "./product_option";
229
+ import HKQudao from "./hk_cascader_qudao";
230
+ import HKCascader from "./hk_cascader";
231
+
232
+ const EVENT_INPUT = "input";
233
+ let id = 0;
234
+
235
+ export default {
236
+ name: "Search",
237
+
238
+ components: {
239
+ reportSet,
240
+ SearchSelectCmp,
241
+ SearchCascaderCmp,
242
+ ProductOptionCmp,
243
+ HKQudao,
244
+ HKCascader,
245
+ },
246
+ props: {
247
+ //搜索内容集合
248
+ formContent: {
249
+ type: [Object, Array],
250
+ },
251
+ btnContent: {
252
+ type: [Object, Array],
253
+ },
254
+ placeholder: {
255
+ type: String,
256
+ default: "",
257
+ },
258
+ value: {
259
+ type: Object,
260
+ default: () => {},
261
+ },
262
+ },
263
+ data() {
264
+ return {
265
+ brandModelList: [],
266
+ keys: [],
267
+ inputValue: this.value,
268
+ pickerOptions: {
269
+ shortcuts: [
270
+ {
271
+ text: "最近一周",
272
+ onClick(picker) {
273
+ const end = new Date();
274
+ const start = new Date();
275
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
276
+ picker.$emit("pick", [start, end]);
277
+ },
278
+ },
279
+ {
280
+ text: "最近一个月",
281
+ onClick(picker) {
282
+ const end = new Date();
283
+ const start = new Date();
284
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
285
+ picker.$emit("pick", [start, end]);
286
+ },
287
+ },
288
+ {
289
+ text: "最近三个月",
290
+ onClick(picker) {
291
+ const end = new Date();
292
+ const start = new Date();
293
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
294
+ picker.$emit("pick", [start, end]);
295
+ },
296
+ },
297
+ {
298
+ text: "本月",
299
+ onClick(picker) {
300
+ const end = new Date();
301
+ var d = new Date();
302
+ d.setDate(1);
303
+ const start = d;
304
+ picker.$emit("pick", [start, end]);
305
+ },
306
+ },
307
+ {
308
+ text: "本周",
309
+ onClick(picker) {
310
+ const date = new Date();
311
+ const weekday = date.getDay() || 7;
312
+ const end = new Date();
313
+ date.setDate(date.getDate() - weekday + 1);
314
+ const start = date;
315
+ picker.$emit("pick", [start, end]);
316
+ },
317
+ },
318
+ {
319
+ text: "最近半年",
320
+ onClick(picker) {
321
+ const end = new Date();
322
+ const start = new Date();
323
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 180);
324
+ picker.$emit("pick", [start, end]);
325
+ },
326
+ },
327
+ {
328
+ text: "最近一年",
329
+ onClick(picker) {
330
+ const end = new Date();
331
+ const start = new Date();
332
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 365);
333
+ picker.$emit("pick", [start, end]);
334
+ },
335
+ },
336
+ ],
337
+ },
338
+ // 报表相关属性
339
+ reportList: [], // 报表集合
340
+ selReportName: "选择报表",
341
+ reportDefs: "",
342
+ reportParamStr: "",
343
+ reloadReportForm: false,
344
+ };
345
+ },
346
+ methods,
347
+ mixins: [],
348
+ watch: {
349
+ value: {
350
+ handler(newValue) {
351
+ this.inputValue = newValue;
352
+ },
353
+ deep: true,
354
+ },
355
+ inputValue: {
356
+ handler(newValue) {
357
+ this.$emit(EVENT_INPUT, newValue);
358
+ },
359
+ deep: true,
360
+ },
361
+ formContent: {
362
+ handler(newValue) {
363
+ if (isArray(newValue)) {
364
+ const reportObj = newValue.find((item) => {
365
+ return item.conditionType == this.$enum.conditionType.reportSet;
366
+ });
367
+ if (reportObj) {
368
+ this.clickReportBtn(reportObj.url, reportObj.params);
369
+ }
370
+ }
371
+ },
372
+ deep: true,
373
+ immediate: true,
374
+ },
375
+ },
376
+ computed: {
377
+ getItem() {
378
+ return function (val) {
379
+ setTimeout(() => {
380
+ const result = this.$http.get(val);
381
+ }, 1000);
382
+ };
383
+ },
384
+ // getBtnContentIsOut() {
385
+ // let arr = Array.isArray(this.btnContent)&&this.btnContent.filter((item) => item.isOut);
386
+ // console.log('xxx',arr)
387
+ // return arr
388
+ // },
389
+ },
390
+ // ------------------------------------------------------------------
391
+ // pragma mark - Life Cycle(生命周期)
392
+ // ------------------------------------------------------------------
393
+ created() {
394
+ this.createdInit();
395
+ },
396
+ mounted() {
397
+ //点击文本自动点击前面的input触发选择
398
+ setInterval(function () {
399
+ document.querySelectorAll(".el-cascader-node__label").forEach((el) => {
400
+ el.onclick = function () {
401
+ if (this.previousElementSibling) this.previousElementSibling.click();
402
+ };
403
+ });
404
+ }, 1000);
405
+
406
+ this.mountedInit();
407
+ },
408
+ };
409
+ </script>
410
+ <style lang="scss" src="./index.scss" scoped></style>