xs-common-plugins 1.0.6 → 1.0.10

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 (141) hide show
  1. package/README.md +19 -1
  2. package/package.json +1 -1
  3. package/src/App.vue +11 -11
  4. package/src/common/createMenuId.js +7 -7
  5. package/src/common/uploadImgToBase64.js +12 -12
  6. package/src/common/utils.js +95 -95
  7. package/src/components/Breadcrumb/index.vue +81 -81
  8. package/src/components/Col_TableCell/data.js +4 -4
  9. package/src/components/Col_TableCell/index.scss +77 -77
  10. package/src/components/Col_TableCell/index.vue +43 -43
  11. package/src/components/Col_TableCell/methods.js +19 -19
  12. package/src/components/Hamburger/index.vue +44 -44
  13. package/src/components/ReportCmp/data.js +3 -3
  14. package/src/components/ReportCmp/index.scss +29 -29
  15. package/src/components/ReportCmp/index.vue +76 -76
  16. package/src/components/ReportCmp/methods.js +30 -30
  17. package/src/components/Search/cascader/data.js +3 -3
  18. package/src/components/Search/cascader/index.scss +17 -17
  19. package/src/components/Search/cascader/index.vue +96 -96
  20. package/src/components/Search/cascader/methods.js +41 -41
  21. package/src/components/Search/data.js +5 -5
  22. package/src/components/Search/hk_cascader/index.vue +104 -104
  23. package/src/components/Search/hk_cascader_qudao/index.vue +94 -94
  24. package/src/components/Search/index.vue +406 -404
  25. package/src/components/Search/methods.js +86 -86
  26. package/src/components/Search/product_option/data.js +3 -3
  27. package/src/components/Search/product_option/index.scss +68 -68
  28. package/src/components/Search/product_option/index.vue +419 -419
  29. package/src/components/Search/product_option/methods.js +46 -46
  30. package/src/components/Search/select/data.js +3 -3
  31. package/src/components/Search/select/index.scss +2 -2
  32. package/src/components/Search/select/index.vue +114 -114
  33. package/src/components/Search/select/methods.js +51 -51
  34. package/src/components/Search_filter/data.js +5 -5
  35. package/src/components/Search_filter/index.vue +88 -88
  36. package/src/components/Search_filter/methods.js +43 -43
  37. package/src/components/TableCmp/data.js +3 -3
  38. package/src/components/TableCmp/index.scss +22 -22
  39. package/src/components/TableCmp/index.vue +98 -98
  40. package/src/components/TableCmp/methods.js +35 -35
  41. package/src/components/home/BarChart.vue +118 -118
  42. package/src/components/home/LineChart.vue +146 -146
  43. package/src/components/home/Panel.vue +135 -135
  44. package/src/components/home/PanelGroup.vue +146 -146
  45. package/src/components/home/PieChart.vue +81 -81
  46. package/src/components/home/RaddarChart.vue +119 -119
  47. package/src/components/home/TabLayout.vue +88 -88
  48. package/src/components/home/TableList.vue +158 -158
  49. package/src/components/home/Teng.vue +248 -248
  50. package/src/components/home/TransactionTable.vue +49 -49
  51. package/src/components/home/mixins/resize.js +55 -55
  52. package/src/components/im/index.vue +155 -156
  53. package/src/components/im/methods.js +25 -25
  54. package/src/components/image-singleUpload/data.js +3 -3
  55. package/src/components/image-singleUpload/index.scss +26 -26
  56. package/src/components/image-singleUpload/index.vue +56 -56
  57. package/src/components/image-singleUpload/methods.js +30 -30
  58. package/src/components/image-upload/data.js +7 -7
  59. package/src/components/image-upload/index.vue +41 -41
  60. package/src/components/image-upload/methods.js +80 -80
  61. package/src/components/multiple-image-upload/data.js +11 -11
  62. package/src/components/multiple-image-upload/index.scss +8 -8
  63. package/src/components/multiple-image-upload/index.vue +63 -63
  64. package/src/components/multiple-image-upload/methods.js +45 -45
  65. package/src/components/pro-upload/data.js +3 -3
  66. package/src/components/pro-upload/index.scss +4 -4
  67. package/src/components/pro-upload/index.vue +89 -89
  68. package/src/components/pro-upload/methods.js +86 -86
  69. package/src/components/report_set/index.scss +44 -44
  70. package/src/components/report_set/index.vue +153 -153
  71. package/src/components/search-page/src/index.scss +5 -5
  72. package/src/components/search-page/src/index.vue +76 -76
  73. package/src/components/search-page/src/methods.js +36 -36
  74. package/src/mixin/dialog.js +31 -31
  75. package/src/mixin/dlg.js +46 -46
  76. package/src/mixin/newDialog.js +19 -19
  77. package/src/mixin/report.js +82 -82
  78. package/src/mixin/table.js +93 -93
  79. package/src/mixin/tableCell/colTableCell_analysis.js +103 -103
  80. package/src/mixin/upload.js +22 -22
  81. package/src/mixin/vmodel.js +26 -26
  82. package/src/plugins/im/components/chat/index.vue +1 -0
  83. package/src/plugins/im/components/chat/methods.js +1 -1
  84. package/src/plugins/im/components/conversation-list/index.css +91 -91
  85. package/src/plugins/im/components/conversation-list/index.json +3 -3
  86. package/src/plugins/im/components/conversation-list/index.vue +89 -89
  87. package/src/plugins/im/components/loading/loading.css +69 -69
  88. package/src/plugins/im/components/loading/loading.json +3 -3
  89. package/src/plugins/im/components/loading/loading.vue +14 -14
  90. package/src/plugins/im/components/msg-image/index.json +3 -3
  91. package/src/plugins/im/components/msg-text/index.json +3 -3
  92. package/src/plugins/im/components/msg-text/index.vue +24 -24
  93. package/src/plugins/im/im-plug-in/Protobuf-2.3.7.min.js +1 -1
  94. package/src/plugins/im/im-plug-in/RongCallLib-3.1.5.min.js +74 -74
  95. package/src/plugins/im/im-plug-in/RongIMLib-4.1.0.js +17420 -17420
  96. package/src/plugins/im/im-plug-in/init.js +216 -216
  97. package/src/plugins/im/im-plug-in/qiniu.js +266 -266
  98. package/src/plugins/im/im-plug-in/send-data.js +431 -431
  99. package/src/plugins/im/im-plug-in/upload.js +232 -232
  100. package/src/plugins/im/lib/RongIMEmoji-2.2.6.js +332 -332
  101. package/src/plugins/im/lib/RongIMLib-3.0.7.2-dev.js +11635 -11635
  102. package/src/plugins/im/lib/RongIMLib-3.0.7.2-dev.min.js +6 -6
  103. package/src/plugins/im/utils/underscore-1.8.3.js +1531 -1531
  104. package/src/plugins/im/utils/utils.js +149 -149
  105. package/src/plugins/row-col-cmp/colCmp/data.js +3 -3
  106. package/src/plugins/row-col-cmp/colCmp/index.scss +50 -50
  107. package/src/plugins/row-col-cmp/colCmp/index.vue +53 -53
  108. package/src/plugins/row-col-cmp/colCmp/methods.js +25 -25
  109. package/src/plugins/row-col-cmp/rowCmp/data.js +3 -3
  110. package/src/plugins/row-col-cmp/rowCmp/index.scss +3 -3
  111. package/src/plugins/row-col-cmp/rowCmp/index.vue +43 -43
  112. package/src/plugins/row-col-cmp/rowCmp/methods.js +29 -29
  113. package/src/router/index.js +43 -43
  114. package/src/store/getters.js +13 -13
  115. package/src/store/index.js +58 -58
  116. package/src/store/modules/app.js +55 -55
  117. package/src/store/modules/settings.js +28 -28
  118. package/src/store/modules/user.js +94 -94
  119. package/src/store/modules/widgetdata.js +42 -42
  120. package/src/styles/element-ui.scss +49 -49
  121. package/src/styles/index.scss +0 -1
  122. package/src/styles/mixin.scss +28 -28
  123. package/src/styles/sidebar.scss +210 -210
  124. package/src/styles/table.scss +7 -8
  125. package/src/styles/transition.scss +48 -48
  126. package/src/styles/variables.scss +25 -25
  127. package/src/utils/get-page-title.js +10 -10
  128. package/src/utils/global-config.js +15 -15
  129. package/src/utils/index.js +332 -332
  130. package/src/utils/localStorage.js +21 -21
  131. package/src/utils/validate.js +20 -20
  132. package/src/views/layout/components/AllSearch/index.vue +44 -44
  133. package/src/views/layout/components/AppMain.vue +50 -50
  134. package/src/views/layout/components/Sidebar/FixiOSBug.js +26 -26
  135. package/src/views/layout/components/Sidebar/Item.vue +28 -28
  136. package/src/views/layout/components/Sidebar/Link.vue +34 -34
  137. package/src/views/layout/components/Sidebar/Logo.vue +79 -79
  138. package/src/views/layout/components/Sidebar/SidebarItem.vue +67 -67
  139. package/src/views/layout/components/Sidebar/index.vue +114 -114
  140. package/src/views/layout/components/index.js +3 -3
  141. package/src/views/layout/index.vue +105 -105
@@ -1,404 +1,406 @@
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"></el-input>
55
- </el-form-item>
56
- <!--下拉单选通过接口-->
57
- <el-form-item :label="optionItem.displayName"
58
- v-else-if="optionItem.conditionType == $enum.conditionType.select"
59
- :style="{ width: optionItem.itemWidth }">
60
- <search-select-cmp :option="optionItem" v-model="inputValue[optionItem.fieldName]">
61
- </search-select-cmp>
62
- </el-form-item>
63
- <el-form-item :label="optionItem.displayName" v-else-if="optionItem.conditionType == 9"
64
- :style="{ width: optionItem.itemWidth }">
65
- <search-cascader-cmp :option="optionItem" v-model="inputValue[optionItem.fieldName]">
66
- </search-cascader-cmp>
67
- </el-form-item>
68
-
69
- <el-form-item :label="optionItem.displayName"
70
- v-if="optionItem.conditionType == $enum.conditionType.mixedSelect"
71
- :style="{ width: optionItem.itemWidth }">
72
- <!-- <select-cmp :selectType="optionItem.selectType" v-model="inputValue[optionItem.fieldName]" ></select-cmp> -->
73
- <el-select :multiple="optionItem.dataSourceType == 4" clearable collapse-tags popper-class="select-popper"
74
- class="select-style" v-model="inputValue[optionItem.fieldName]" :placeholder="optionItem.defaultValue">
75
- <div class="shortcut" v-for="(item, index) in $orgEnum[optionItem.url].slice(-1)" :key="index">
76
- <div class="tabs" v-for="(items, indexs) in item" :key="items.id">
77
- <el-button @click="toSelect(items, optionItem.fieldName)">{{
78
- indexs
79
- }}</el-button>
80
- </div>
81
- </div>
82
- <div class="option">
83
- <el-option v-for="item in $orgEnum[optionItem.url].slice(0, -1)" :key="item.Id" :label="item.Text"
84
- :value="item.Id">
85
- <div class="item">{{ item.Text }}</div>
86
- </el-option>
87
- </div>
88
- </el-select>
89
- </el-form-item>
90
-
91
- <el-form-item :label="optionItem.displayName"
92
- v-if="optionItem.conditionType == $enum.conditionType.cascader" :style="{ width: optionItem.itemWidth }">
93
- <product-option-cmp v-model="inputValue[optionItem.fieldName]" :optionItem="optionItem">
94
- </product-option-cmp>
95
- </el-form-item>
96
- <!--单选联级选择-->
97
- <el-form-item :label="optionItem.displayName" v-if="
98
- optionItem.conditionType == $enum.conditionType.radioCascader
99
- ">
100
- <el-cascader ref="radiocascader" class="radiocascader" v-model="inputValue[optionItem.fieldName]"
101
- :props="{ checkStrictly: true }" clearable :options="brandModelList"
102
- @visible-change="cascaderData($event, optionItem.url)"></el-cascader>
103
- </el-form-item>
104
- <!--单选联级选择-->
105
- <el-form-item :label="optionItem.displayName"
106
- v-if="optionItem.conditionType === $enum.conditionType.datePicker"
107
- :style="{ width: optionItem.itemWidth }" class="dateRange">
108
- <el-date-picker clearable v-model="inputValue[optionItem.fieldName]" v-if="optionItem.dataSourceType == 0"
109
- type="date" align="right" unlink-panels :placeholder="optionItem.defaultValue"
110
- value-format="yyyy-MM-dd">
111
- </el-date-picker>
112
- <!-- 时间选择器-->
113
- <el-date-picker v-else clearable v-model="inputValue[optionItem.fieldName]" type="daterange" align="right"
114
- unlink-panels range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
115
- :picker-options="pickerOptions" value-format="yyyy-MM-dd" style="position:relative;top:-1px">
116
- </el-date-picker>
117
- <!-- :value-format="optionItem.config?optionItem.config.timeFrom:'yyyy-MM-DD'" -->
118
- </el-form-item>
119
-
120
- <!-- -->
121
- <el-form-item :label="optionItem.displayName"
122
- v-if="optionItem.conditionType == $enum.conditionType.reportSet" :style="{ width: optionItem.itemWidth }"
123
- class="report-class">
124
- <!-- v-model="inputValue[optionItem.fieldName]" -->
125
- <el-dropdown @command="handlerSelReport" @click="clickReportBtn(optionItem.url, optionItem.params)">
126
- <el-button type="primary">{{ selReportName }}</el-button>
127
- <el-dropdown-menu slot="dropdown" v-if="reportList.length > 0">
128
- <el-dropdown-item v-for="report in reportList" :key="report.id" :command="report">
129
- {{ report.title }}
130
- </el-dropdown-item>
131
- </el-dropdown-menu>
132
- </el-dropdown>
133
- <el-popover placement="bottom" width="560" trigger="click" v-if="selReportName !== '选择报表'">
134
- <report-set v-if="reloadReportForm" v-model="inputValue[optionItem.fieldName]" model-type="Object"
135
- :jsonCfg="reportDefs"></report-set>
136
- <el-button slot="reference" type="primary" class="set-class" icon="el-icon-s-tools">
137
- </el-button>
138
- </el-popover>
139
- </el-form-item>
140
- <!--多选联级选择可动态查询-->
141
- <el-form-item :label="optionItem.displayName" v-if="optionItem.conditionType == $enum.conditionType.hkqudao"
142
- :style="{ width: optionItem.itemWidth }" class="dateRange">
143
- <HKQudao v-model="inputValue[optionItem.fieldName]" :placeholder="optionItem.defaultValue"
144
- :style="{ width: optionItem.itemWidth }" :optionItem="optionItem"></HKQudao>
145
- </el-form-item>
146
- <el-form-item :label="optionItem.displayName" v-if="optionItem.conditionType == $enum.conditionType.hkarea"
147
- :style="{ width: optionItem.itemWidth }" class="dateRange">
148
- <HKCascader v-model="inputValue[optionItem.fieldName]" :placeholder="optionItem.defaultValue"
149
- :style="{ width: optionItem.itemWidth }" :optionItem="optionItem"></HKCascader>
150
- </el-form-item>
151
- </div>
152
-
153
- <el-form-item v-if="!!getBtnContentIsOut().length">
154
- <el-dropdown trigger="click" @command="handleCommand" split-button type="primary" @click="toSearch()">
155
- 查询
156
- <el-dropdown-menu slot="dropdown">
157
- <el-dropdown-item v-for="item in getBtnContentIsOut()" :key="item.id" :command="item">
158
- {{ item.actionText }}
159
- </el-dropdown-item>
160
- </el-dropdown-menu>
161
- </el-dropdown>
162
- </el-form-item>
163
- <el-form-item v-else>
164
- <el-button @command="handleCommand" split-button type="primary" @click="toSearch()">查询</el-button>
165
- </el-form-item>
166
- <div class="isOut-btn">
167
- <el-button v-for="(item, i) in getBtnContentIsOut('isOut')" :key="i" size="small"
168
- @click="handleCommand(item)" type="primary">{{ item.actionText }}
169
- </el-button>
170
- </div>
171
- </div>
172
- <slot name="search_custemBtn" />
173
- <!-- <div class="buttonBox">
174
-
175
- <el-form-item v-if="!!getBtnContentIsOut().length">
176
- <el-dropdown
177
- trigger="click"
178
- @command="handleCommand"
179
- split-button
180
- type="primary"
181
- @click="toSearch()"
182
- >
183
- 查询
184
- <el-dropdown-menu slot="dropdown">
185
- <el-dropdown-item
186
- v-for="item in getBtnContentIsOut()"
187
- :key="item.id"
188
- :command="item"
189
- >
190
- {{ item.actionText }}
191
- </el-dropdown-item>
192
- </el-dropdown-menu>
193
- </el-dropdown>
194
- </el-form-item>
195
- <el-form-item v-else>
196
- <el-button
197
- @command="handleCommand"
198
- split-button
199
- type="primary"
200
- @click="toSearch()"
201
- >查询</el-button
202
- >
203
- </el-form-item>
204
- <el-form-item style="margin-left:4px" v-for="(item,i) in getBtnContentIsOut('isOut')" :key="i">
205
- <el-button @command="handleCommand" type="primary">{{item.actionText}} </el-button>
206
- </el-form-item>
207
- </div> -->
208
- </div>
209
- </el-form>
210
- </div>
211
- </template>
212
- <script>
213
- import methods from "./methods";
214
- import { isArray } from "@/common/utils";
215
-
216
- import reportSet from "@/components/report_set";
217
- // 组件分离 2020-10-10 10:00
218
- // 下拉框组件升级
219
- import SearchSelectCmp from "./select";
220
- import SearchCascaderCmp from "./cascader";
221
-
222
- import ProductOptionCmp from "./product_option";
223
- import HKQudao from "./hk_cascader_qudao";
224
- import HKCascader from "./hk_cascader";
225
-
226
- const EVENT_INPUT = "input";
227
- let id = 0;
228
-
229
- export default {
230
- name: "Search",
231
-
232
- components: {
233
- reportSet,
234
- SearchSelectCmp,
235
- SearchCascaderCmp,
236
- ProductOptionCmp,
237
- HKQudao,
238
- HKCascader,
239
- },
240
- props: {
241
- //搜索内容集合
242
- formContent: {
243
- type: [Object, Array],
244
- },
245
- btnContent: {
246
- type: [Object, Array],
247
- },
248
- placeholder: {
249
- type: String,
250
- default: "",
251
- },
252
- value: {
253
- type: Object,
254
- default: () => {},
255
- },
256
- },
257
- data() {
258
- return {
259
- brandModelList: [],
260
- keys: [],
261
- inputValue: this.value,
262
- pickerOptions: {
263
- shortcuts: [
264
- {
265
- text: "最近一周",
266
- onClick(picker) {
267
- const end = new Date();
268
- const start = new Date();
269
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
270
- picker.$emit("pick", [start, end]);
271
- },
272
- },
273
- {
274
- text: "最近一个月",
275
- onClick(picker) {
276
- const end = new Date();
277
- const start = new Date();
278
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
279
- picker.$emit("pick", [start, end]);
280
- },
281
- },
282
- {
283
- text: "最近三个月",
284
- onClick(picker) {
285
- const end = new Date();
286
- const start = new Date();
287
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
288
- picker.$emit("pick", [start, end]);
289
- },
290
- },
291
- {
292
- text: "本月",
293
- onClick(picker) {
294
- const end = new Date();
295
- var d = new Date();
296
- d.setDate(1);
297
- const start = d;
298
- picker.$emit("pick", [start, end]);
299
- },
300
- },
301
- {
302
- text: "本周",
303
- onClick(picker) {
304
- const date = new Date();
305
- const weekday = date.getDay() || 7;
306
- const end = new Date();
307
- date.setDate(date.getDate() - weekday + 1);
308
- const start = date;
309
- picker.$emit("pick", [start, end]);
310
- },
311
- },
312
- {
313
- text: "最近半年",
314
- onClick(picker) {
315
- const end = new Date();
316
- const start = new Date();
317
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 180);
318
- picker.$emit("pick", [start, end]);
319
- },
320
- },
321
- {
322
- text: "最近一年",
323
- onClick(picker) {
324
- const end = new Date();
325
- const start = new Date();
326
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 365);
327
- picker.$emit("pick", [start, end]);
328
- },
329
- },
330
- ],
331
- },
332
- // 报表相关属性
333
- reportList: [], // 报表集合
334
- selReportName: "选择报表",
335
- reportDefs: "",
336
- reportParamStr: "",
337
- reloadReportForm: false,
338
- };
339
- },
340
- methods,
341
- mixins: [],
342
- watch: {
343
- value: {
344
- handler(newValue) {
345
- this.inputValue = newValue;
346
- },
347
- deep: true,
348
- },
349
- inputValue: {
350
- handler(newValue) {
351
- this.$emit(EVENT_INPUT, newValue);
352
- },
353
- deep: true,
354
- },
355
- formContent: {
356
- handler(newValue) {
357
- if (isArray(newValue)) {
358
- const reportObj = newValue.find((item) => {
359
- return item.conditionType == this.$enum.conditionType.reportSet;
360
- });
361
- if (reportObj) {
362
- this.clickReportBtn(reportObj.url, reportObj.params);
363
- }
364
- }
365
- },
366
- deep: true,
367
- immediate: true,
368
- },
369
- },
370
- computed: {
371
- getItem() {
372
- return function (val) {
373
- setTimeout(() => {
374
- const result = this.$http.get(val);
375
- }, 1000);
376
- };
377
- },
378
- // getBtnContentIsOut() {
379
- // let arr = Array.isArray(this.btnContent)&&this.btnContent.filter((item) => item.isOut);
380
- // console.log('xxx',arr)
381
- // return arr
382
- // },
383
- },
384
- // ------------------------------------------------------------------
385
- // pragma mark - Life Cycle(生命周期)
386
- // ------------------------------------------------------------------
387
- created() {
388
- this.createdInit();
389
- },
390
- mounted() {
391
- //点击文本自动点击前面的input触发选择
392
- setInterval(function () {
393
- document.querySelectorAll(".el-cascader-node__label").forEach((el) => {
394
- el.onclick = function () {
395
- if (this.previousElementSibling) this.previousElementSibling.click();
396
- };
397
- });
398
- }, 1000);
399
-
400
- this.mountedInit();
401
- },
402
- };
403
- </script>
404
- <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
+ </div>
154
+
155
+ <el-form-item v-if="!!getBtnContentIsOut().length">
156
+ <el-dropdown trigger="click" @command="handleCommand" split-button type="primary" @click="toSearch()">
157
+ 查询
158
+ <el-dropdown-menu slot="dropdown">
159
+ <el-dropdown-item v-for="item in getBtnContentIsOut()" :key="item.id" :command="item">
160
+ {{ item.actionText }}
161
+ </el-dropdown-item>
162
+ </el-dropdown-menu>
163
+ </el-dropdown>
164
+ </el-form-item>
165
+ <el-form-item v-else>
166
+ <el-button @command="handleCommand" split-button type="primary" @click="toSearch()">查询</el-button>
167
+ </el-form-item>
168
+ <div class="isOut-btn">
169
+ <el-button v-for="(item, i) in getBtnContentIsOut('isOut')" :key="i" size="small"
170
+ @click="handleCommand(item)" type="primary">{{ item.actionText }}
171
+ </el-button>
172
+ </div>
173
+ </div>
174
+ <slot name="search_custemBtn" />
175
+ <!-- <div class="buttonBox">
176
+
177
+ <el-form-item v-if="!!getBtnContentIsOut().length">
178
+ <el-dropdown
179
+ trigger="click"
180
+ @command="handleCommand"
181
+ split-button
182
+ type="primary"
183
+ @click="toSearch()"
184
+ >
185
+ 查询
186
+ <el-dropdown-menu slot="dropdown">
187
+ <el-dropdown-item
188
+ v-for="item in getBtnContentIsOut()"
189
+ :key="item.id"
190
+ :command="item"
191
+ >
192
+ {{ item.actionText }}
193
+ </el-dropdown-item>
194
+ </el-dropdown-menu>
195
+ </el-dropdown>
196
+ </el-form-item>
197
+ <el-form-item v-else>
198
+ <el-button
199
+ @command="handleCommand"
200
+ split-button
201
+ type="primary"
202
+ @click="toSearch()"
203
+ >查询</el-button
204
+ >
205
+ </el-form-item>
206
+ <el-form-item style="margin-left:4px" v-for="(item,i) in getBtnContentIsOut('isOut')" :key="i">
207
+ <el-button @command="handleCommand" type="primary">{{item.actionText}} </el-button>
208
+ </el-form-item>
209
+ </div> -->
210
+ </div>
211
+ </el-form>
212
+ </div>
213
+ </template>
214
+ <script>
215
+ import methods from "./methods";
216
+ import { isArray } from "@/common/utils";
217
+
218
+ import reportSet from "@/components/report_set";
219
+ // 组件分离 2020-10-10 10:00
220
+ // 下拉框组件升级
221
+ import SearchSelectCmp from "./select";
222
+ import SearchCascaderCmp from "./cascader";
223
+
224
+ import ProductOptionCmp from "./product_option";
225
+ import HKQudao from "./hk_cascader_qudao";
226
+ import HKCascader from "./hk_cascader";
227
+
228
+ const EVENT_INPUT = "input";
229
+ let id = 0;
230
+
231
+ export default {
232
+ name: "Search",
233
+
234
+ components: {
235
+ reportSet,
236
+ SearchSelectCmp,
237
+ SearchCascaderCmp,
238
+ ProductOptionCmp,
239
+ HKQudao,
240
+ HKCascader,
241
+ },
242
+ props: {
243
+ //搜索内容集合
244
+ formContent: {
245
+ type: [Object, Array],
246
+ },
247
+ btnContent: {
248
+ type: [Object, Array],
249
+ },
250
+ placeholder: {
251
+ type: String,
252
+ default: "",
253
+ },
254
+ value: {
255
+ type: Object,
256
+ default: () => {},
257
+ },
258
+ },
259
+ data() {
260
+ return {
261
+ brandModelList: [],
262
+ keys: [],
263
+ inputValue: this.value,
264
+ pickerOptions: {
265
+ shortcuts: [
266
+ {
267
+ text: "最近一周",
268
+ onClick(picker) {
269
+ const end = new Date();
270
+ const start = new Date();
271
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
272
+ picker.$emit("pick", [start, end]);
273
+ },
274
+ },
275
+ {
276
+ text: "最近一个月",
277
+ onClick(picker) {
278
+ const end = new Date();
279
+ const start = new Date();
280
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
281
+ picker.$emit("pick", [start, end]);
282
+ },
283
+ },
284
+ {
285
+ text: "最近三个月",
286
+ onClick(picker) {
287
+ const end = new Date();
288
+ const start = new Date();
289
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
290
+ picker.$emit("pick", [start, end]);
291
+ },
292
+ },
293
+ {
294
+ text: "本月",
295
+ onClick(picker) {
296
+ const end = new Date();
297
+ var d = new Date();
298
+ d.setDate(1);
299
+ const start = d;
300
+ picker.$emit("pick", [start, end]);
301
+ },
302
+ },
303
+ {
304
+ text: "本周",
305
+ onClick(picker) {
306
+ const date = new Date();
307
+ const weekday = date.getDay() || 7;
308
+ const end = new Date();
309
+ date.setDate(date.getDate() - weekday + 1);
310
+ const start = date;
311
+ picker.$emit("pick", [start, end]);
312
+ },
313
+ },
314
+ {
315
+ text: "最近半年",
316
+ onClick(picker) {
317
+ const end = new Date();
318
+ const start = new Date();
319
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 180);
320
+ picker.$emit("pick", [start, end]);
321
+ },
322
+ },
323
+ {
324
+ text: "最近一年",
325
+ onClick(picker) {
326
+ const end = new Date();
327
+ const start = new Date();
328
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 365);
329
+ picker.$emit("pick", [start, end]);
330
+ },
331
+ },
332
+ ],
333
+ },
334
+ // 报表相关属性
335
+ reportList: [], // 报表集合
336
+ selReportName: "选择报表",
337
+ reportDefs: "",
338
+ reportParamStr: "",
339
+ reloadReportForm: false,
340
+ };
341
+ },
342
+ methods,
343
+ mixins: [],
344
+ watch: {
345
+ value: {
346
+ handler(newValue) {
347
+ this.inputValue = newValue;
348
+ },
349
+ deep: true,
350
+ },
351
+ inputValue: {
352
+ handler(newValue) {
353
+ this.$emit(EVENT_INPUT, newValue);
354
+ },
355
+ deep: true,
356
+ },
357
+ formContent: {
358
+ handler(newValue) {
359
+ if (isArray(newValue)) {
360
+ const reportObj = newValue.find((item) => {
361
+ return item.conditionType == this.$enum.conditionType.reportSet;
362
+ });
363
+ if (reportObj) {
364
+ this.clickReportBtn(reportObj.url, reportObj.params);
365
+ }
366
+ }
367
+ },
368
+ deep: true,
369
+ immediate: true,
370
+ },
371
+ },
372
+ computed: {
373
+ getItem() {
374
+ return function (val) {
375
+ setTimeout(() => {
376
+ const result = this.$http.get(val);
377
+ }, 1000);
378
+ };
379
+ },
380
+ // getBtnContentIsOut() {
381
+ // let arr = Array.isArray(this.btnContent)&&this.btnContent.filter((item) => item.isOut);
382
+ // console.log('xxx',arr)
383
+ // return arr
384
+ // },
385
+ },
386
+ // ------------------------------------------------------------------
387
+ // pragma mark - Life Cycle(生命周期)
388
+ // ------------------------------------------------------------------
389
+ created() {
390
+ this.createdInit();
391
+ },
392
+ mounted() {
393
+ //点击文本自动点击前面的input触发选择
394
+ setInterval(function () {
395
+ document.querySelectorAll(".el-cascader-node__label").forEach((el) => {
396
+ el.onclick = function () {
397
+ if (this.previousElementSibling) this.previousElementSibling.click();
398
+ };
399
+ });
400
+ }, 1000);
401
+
402
+ this.mountedInit();
403
+ },
404
+ };
405
+ </script>
406
+ <style lang="scss" src="./index.scss" scoped></style>