swordpass-ui 1.0.0

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 (330) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +37 -0
  3. package/lib/demo.html +10 -0
  4. package/lib/img/icon_found_img.c785c1b7.png +0 -0
  5. package/lib/sword-vue-ui.common.js +61402 -0
  6. package/lib/sword-vue-ui.css +1 -0
  7. package/lib/sword-vue-ui.umd.js +61412 -0
  8. package/lib/sword-vue-ui.umd.min.js +6 -0
  9. package/package.json +109 -0
  10. package/packages/AddQueryStrategy/index.js +7 -0
  11. package/packages/AddQueryStrategy/src/main.vue +236 -0
  12. package/packages/Autocomplete/index.js +7 -0
  13. package/packages/Autocomplete/src/main.vue +192 -0
  14. package/packages/Button/index.js +7 -0
  15. package/packages/Button/src/main.vue +90 -0
  16. package/packages/Cascader/index.js +7 -0
  17. package/packages/Cascader/src/main.vue +210 -0
  18. package/packages/Chart/index.js +7 -0
  19. package/packages/Chart/src/Chart.vue +831 -0
  20. package/packages/Checkbox/index.js +7 -0
  21. package/packages/Checkbox/src/main.vue +200 -0
  22. package/packages/Collapse/index.js +7 -0
  23. package/packages/Collapse/src/ClCollapse.vue +67 -0
  24. package/packages/Collapse/src/ClCollapseItem.vue +21 -0
  25. package/packages/CollapseItem/index.js +7 -0
  26. package/packages/CustomDialog/index.js +7 -0
  27. package/packages/CustomDialog/src/customDialog.js +99 -0
  28. package/packages/CustomDialog/src/main.vue +1944 -0
  29. package/packages/DataView/index.js +7 -0
  30. package/packages/DataView/src/DataView.vue +45 -0
  31. package/packages/Date/index.js +7 -0
  32. package/packages/Date/src/main.vue +180 -0
  33. package/packages/DatePicker/index.js +7 -0
  34. package/packages/DatePicker/src/main.vue +155 -0
  35. package/packages/Demension/index.js +7 -0
  36. package/packages/Demension/src/main.vue +379 -0
  37. package/packages/Dialog/index.js +7 -0
  38. package/packages/Dialog/src/main.vue +160 -0
  39. package/packages/Dictionary/index.js +7 -0
  40. package/packages/Dictionary/src/main.vue +204 -0
  41. package/packages/DimensionSelector/index.js +7 -0
  42. package/packages/DimensionSelector/src/main.vue +359 -0
  43. package/packages/DimensionSelectorInput/index.js +7 -0
  44. package/packages/DimensionSelectorInput/src/main.vue +79 -0
  45. package/packages/Divider/index.js +7 -0
  46. package/packages/Divider/src/main.vue +38 -0
  47. package/packages/Duration/index.js +7 -0
  48. package/packages/Duration/src/main.vue +172 -0
  49. package/packages/Editor/index.js +7 -0
  50. package/packages/Editor/src/main.vue +280 -0
  51. package/packages/Explain/index.js +7 -0
  52. package/packages/Explain/src/main.vue +55 -0
  53. package/packages/FieldTail/index.js +7 -0
  54. package/packages/FieldTail/src/main.vue +163 -0
  55. package/packages/File/index.js +7 -0
  56. package/packages/File/src/FileCard.vue +169 -0
  57. package/packages/File/src/FileList.vue +180 -0
  58. package/packages/File/src/FileTable.vue +223 -0
  59. package/packages/File/src/main.vue +467 -0
  60. package/packages/FileUpload/index.js +7 -0
  61. package/packages/FileUpload/src/main.vue +222 -0
  62. package/packages/FlowChart/index.js +7 -0
  63. package/packages/FlowChart/src/main.vue +386 -0
  64. package/packages/FormItem/index.js +7 -0
  65. package/packages/FormItem/src/main.vue +167 -0
  66. package/packages/Global/index.js +12 -0
  67. package/packages/Global/src/GlobalQuery.vue +200 -0
  68. package/packages/Global/src/GlobalValidate.vue +69 -0
  69. package/packages/Icon/index.js +7 -0
  70. package/packages/Icon/src/icons/ad.js +14 -0
  71. package/packages/Icon/src/icons/address-book.js +14 -0
  72. package/packages/Icon/src/icons/arrow.js +14 -0
  73. package/packages/Icon/src/icons/attachment.js +18 -0
  74. package/packages/Icon/src/icons/balance.js +14 -0
  75. package/packages/Icon/src/icons/ban.js +14 -0
  76. package/packages/Icon/src/icons/bell.js +14 -0
  77. package/packages/Icon/src/icons/block.js +26 -0
  78. package/packages/Icon/src/icons/book.js +14 -0
  79. package/packages/Icon/src/icons/bookmark.js +14 -0
  80. package/packages/Icon/src/icons/bug.js +22 -0
  81. package/packages/Icon/src/icons/bullhorn.js +14 -0
  82. package/packages/Icon/src/icons/calc.js +14 -0
  83. package/packages/Icon/src/icons/checkbox.js +14 -0
  84. package/packages/Icon/src/icons/circle.js +14 -0
  85. package/packages/Icon/src/icons/close.js +14 -0
  86. package/packages/Icon/src/icons/cloud-sun.js +14 -0
  87. package/packages/Icon/src/icons/coffee.js +14 -0
  88. package/packages/Icon/src/icons/component.js +14 -0
  89. package/packages/Icon/src/icons/compress.js +14 -0
  90. package/packages/Icon/src/icons/copyright.js +14 -0
  91. package/packages/Icon/src/icons/dialog.js +14 -0
  92. package/packages/Icon/src/icons/download.js +14 -0
  93. package/packages/Icon/src/icons/duration.js +14 -0
  94. package/packages/Icon/src/icons/excel.js +18 -0
  95. package/packages/Icon/src/icons/expand.js +14 -0
  96. package/packages/Icon/src/icons/export.js +21 -0
  97. package/packages/Icon/src/icons/eye-slash.js +14 -0
  98. package/packages/Icon/src/icons/eye.js +14 -0
  99. package/packages/Icon/src/icons/file.js +18 -0
  100. package/packages/Icon/src/icons/form.js +14 -0
  101. package/packages/Icon/src/icons/ganged.js +14 -0
  102. package/packages/Icon/src/icons/gaode.js +27 -0
  103. package/packages/Icon/src/icons/gift.js +14 -0
  104. package/packages/Icon/src/icons/home.js +14 -0
  105. package/packages/Icon/src/icons/image.js +14 -0
  106. package/packages/Icon/src/icons/import.js +18 -0
  107. package/packages/Icon/src/icons/index.js +67 -0
  108. package/packages/Icon/src/icons/info.js +21 -0
  109. package/packages/Icon/src/icons/laptop.js +14 -0
  110. package/packages/Icon/src/icons/line.js +34 -0
  111. package/packages/Icon/src/icons/lock.js +14 -0
  112. package/packages/Icon/src/icons/map.js +18 -0
  113. package/packages/Icon/src/icons/more.js +19 -0
  114. package/packages/Icon/src/icons/move.js +14 -0
  115. package/packages/Icon/src/icons/org.js +18 -0
  116. package/packages/Icon/src/icons/palette.js +14 -0
  117. package/packages/Icon/src/icons/plan.js +17 -0
  118. package/packages/Icon/src/icons/ppt.js +18 -0
  119. package/packages/Icon/src/icons/question.js +18 -0
  120. package/packages/Icon/src/icons/radio.js +14 -0
  121. package/packages/Icon/src/icons/refresh.js +14 -0
  122. package/packages/Icon/src/icons/search.js +14 -0
  123. package/packages/Icon/src/icons/select.js +14 -0
  124. package/packages/Icon/src/icons/setting.js +18 -0
  125. package/packages/Icon/src/icons/simple-collapse.js +18 -0
  126. package/packages/Icon/src/icons/simple-expand.js +14 -0
  127. package/packages/Icon/src/icons/sort.js +22 -0
  128. package/packages/Icon/src/icons/sword.js +26 -0
  129. package/packages/Icon/src/icons/table.js +14 -0
  130. package/packages/Icon/src/icons/time.js +14 -0
  131. package/packages/Icon/src/icons/tree.js +14 -0
  132. package/packages/Icon/src/icons/typography.js +18 -0
  133. package/packages/Icon/src/icons/upload.js +18 -0
  134. package/packages/Icon/src/icons/user.js +14 -0
  135. package/packages/Icon/src/icons/users.js +30 -0
  136. package/packages/Icon/src/icons/video.js +14 -0
  137. package/packages/Icon/src/icons/word.js +18 -0
  138. package/packages/Icon/src/main.vue +432 -0
  139. package/packages/Image/index.js +7 -0
  140. package/packages/Image/src/main.vue +66 -0
  141. package/packages/Input/index.js +7 -0
  142. package/packages/Input/src/main.vue +552 -0
  143. package/packages/JobSelector/index.js +7 -0
  144. package/packages/JobSelector/src/main.vue +339 -0
  145. package/packages/JobSelectorInput/index.js +7 -0
  146. package/packages/JobSelectorInput/src/main.vue +87 -0
  147. package/packages/Map/index.js +7 -0
  148. package/packages/Map/src/Map.vue +427 -0
  149. package/packages/Milepost/index.js +7 -0
  150. package/packages/Milepost/src/main.vue +45 -0
  151. package/packages/OnlineForm/index.js +7 -0
  152. package/packages/OnlineForm/src/Form.vue +359 -0
  153. package/packages/OrgPostDialog/index.js +7 -0
  154. package/packages/OrgPostDialog/src/main.vue +244 -0
  155. package/packages/OrgSelector/index.js +7 -0
  156. package/packages/OrgSelector/src/main.vue +493 -0
  157. package/packages/OrgSelectorInput/index.js +7 -0
  158. package/packages/OrgSelectorInput/src/OrgSelectorInput.vue +216 -0
  159. package/packages/PostSelector/index.js +7 -0
  160. package/packages/PostSelector/src/main.vue +463 -0
  161. package/packages/PostSelectorInput/index.js +7 -0
  162. package/packages/PostSelectorInput/src/PostSelectorInput.vue +200 -0
  163. package/packages/Preview/index.js +7 -0
  164. package/packages/Preview/src/FillPage.vue +311 -0
  165. package/packages/Preview/src/FrameViewer.vue +135 -0
  166. package/packages/Preview/src/Loading.vue +126 -0
  167. package/packages/Preview/src/PdfViewer.vue +125 -0
  168. package/packages/Preview/src/TextViewer.vue +99 -0
  169. package/packages/Preview/src/main.vue +242 -0
  170. package/packages/Preview/src/watermark.js +124 -0
  171. package/packages/ProcessRecord/index.js +7 -0
  172. package/packages/ProcessRecord/src/main.vue +392 -0
  173. package/packages/Qrcode/index.js +7 -0
  174. package/packages/Qrcode/src/Qrcode.vue +105 -0
  175. package/packages/QuerySqlPreview/index.js +7 -0
  176. package/packages/QuerySqlPreview/src/QuerySqlPreview.vue +163 -0
  177. package/packages/Radio/index.js +7 -0
  178. package/packages/Radio/src/main.vue +172 -0
  179. package/packages/Rate/index.js +7 -0
  180. package/packages/Rate/src/main.vue +89 -0
  181. package/packages/ReadonlyInput/index.js +7 -0
  182. package/packages/ReadonlyInput/src/main.vue +92 -0
  183. package/packages/RelevantFlow/index.js +7 -0
  184. package/packages/RelevantFlow/src/main.vue +547 -0
  185. package/packages/RelevantFlow/src/relevantFlow.js +28 -0
  186. package/packages/RoleSelector/index.js +7 -0
  187. package/packages/RoleSelector/src/main.vue +358 -0
  188. package/packages/RoleSelectorInput/index.js +7 -0
  189. package/packages/RoleSelectorInput/src/main.vue +84 -0
  190. package/packages/SaveButton/index.js +7 -0
  191. package/packages/SaveButton/src/main.vue +73 -0
  192. package/packages/Select/index.js +7 -0
  193. package/packages/Select/src/main.vue +330 -0
  194. package/packages/SelectTree/index.js +7 -0
  195. package/packages/SelectTree/src/SelectTree.vue +352 -0
  196. package/packages/Selector/index.js +7 -0
  197. package/packages/Selector/src/main.vue +617 -0
  198. package/packages/SidebarDialog/index.js +7 -0
  199. package/packages/SidebarDialog/src/main.vue +156 -0
  200. package/packages/Slider/index.js +7 -0
  201. package/packages/Slider/src/main.vue +84 -0
  202. package/packages/Step/index.js +7 -0
  203. package/packages/StepLayout/index.js +7 -0
  204. package/packages/Steps/index.js +7 -0
  205. package/packages/Steps/src/Step.vue +122 -0
  206. package/packages/Steps/src/StepLayout.vue +35 -0
  207. package/packages/Steps/src/Steps.vue +65 -0
  208. package/packages/Subtable/index.js +33 -0
  209. package/packages/Subtable/src/SubDialog.vue +1926 -0
  210. package/packages/Subtable/src/SubExportDialog.vue +115 -0
  211. package/packages/Subtable/src/SubImportDialog.vue +316 -0
  212. package/packages/Subtable/src/SubPagination.vue +112 -0
  213. package/packages/Subtable/src/SubtableBackfill.vue +83 -0
  214. package/packages/Subtable/src/dialog.js +42 -0
  215. package/packages/Switch/index.js +7 -0
  216. package/packages/Switch/src/main.vue +83 -0
  217. package/packages/Table/index.js +7 -0
  218. package/packages/Table/src/CustomColumn.vue +351 -0
  219. package/packages/Table/src/Table.vue +979 -0
  220. package/packages/TableColumn/index.js +7 -0
  221. package/packages/TableColumn/src/main.vue +177 -0
  222. package/packages/TableSearchField/index.js +7 -0
  223. package/packages/TableSearchField/src/main.vue +334 -0
  224. package/packages/TableSearchPanel/index.js +7 -0
  225. package/packages/TableSearchPanel/src/main.vue +149 -0
  226. package/packages/Tabs/index.js +7 -0
  227. package/packages/Tabs/src/Tabs.vue +140 -0
  228. package/packages/Tag/index.js +7 -0
  229. package/packages/Tag/src/main.vue +264 -0
  230. package/packages/TemplateBatchUpdate/index.js +7 -0
  231. package/packages/TemplateBatchUpdate/src/TemplateBatchUpdateDialog.vue +174 -0
  232. package/packages/TemplateForm/index.js +7 -0
  233. package/packages/TemplateForm/src/main.vue +645 -0
  234. package/packages/TemplateFormDialog/index.js +7 -0
  235. package/packages/TemplateFormDialog/src/main.vue +61 -0
  236. package/packages/TemplateImportResult/index.js +7 -0
  237. package/packages/TemplateImportResult/src/main.vue +158 -0
  238. package/packages/TemplatePreview/index.js +19 -0
  239. package/packages/TemplatePreview/src/TemplatePreview.vue +169 -0
  240. package/packages/TemplatePreview/src/TemplatePreviewFile.vue +171 -0
  241. package/packages/TemplatePreview/src/TemplatePreviewImage.vue +83 -0
  242. package/packages/TemplateTaskCirculate/index.js +7 -0
  243. package/packages/TemplateTaskCirculate/src/main.vue +238 -0
  244. package/packages/Text/index.js +7 -0
  245. package/packages/Text/src/main.vue +57 -0
  246. package/packages/TimePicker/index.js +7 -0
  247. package/packages/TimePicker/src/main.vue +139 -0
  248. package/packages/TimeSelect/index.js +7 -0
  249. package/packages/TimeSelect/src/main.vue +96 -0
  250. package/packages/Tree/index.js +7 -0
  251. package/packages/Tree/src/main.vue +439 -0
  252. package/packages/TreeDialog/index.js +7 -0
  253. package/packages/TreeDialog/src/main.vue +293 -0
  254. package/packages/TreeListDialog/index.js +7 -0
  255. package/packages/TreeListDialog/src/main.vue +219 -0
  256. package/packages/Typography/index.js +8 -0
  257. package/packages/Typography/src/create-header.js +72 -0
  258. package/packages/UserDialog/index.js +7 -0
  259. package/packages/UserDialog/src/main.vue +250 -0
  260. package/packages/UserSelector/index.js +7 -0
  261. package/packages/UserSelector/src/main.vue +746 -0
  262. package/packages/UserSelectorInput/index.js +7 -0
  263. package/packages/UserSelectorInput/src/main.vue +319 -0
  264. package/packages/picture/index.js +7 -0
  265. package/packages/picture/src/main.vue +530 -0
  266. package/packages/plugins/Echarts.js +30 -0
  267. package/packages/plugins/Map.js +29 -0
  268. package/packages/plugins/Preview.js +49 -0
  269. package/packages/plugins/Qrcode.js +7 -0
  270. package/packages/plugins/XLSX.js +7 -0
  271. package/packages/plugins/wangeditor.js +19 -0
  272. package/src/assets/icon_found_img.png +0 -0
  273. package/src/assets/table-no-data.png +0 -0
  274. package/src/directive/badge.js +53 -0
  275. package/src/directive/copy.js +47 -0
  276. package/src/directive/ellipsis.js +6 -0
  277. package/src/directive/expandClick.js +23 -0
  278. package/src/directive/express.js +86 -0
  279. package/src/directive/form.js +122 -0
  280. package/src/directive/format.js +24 -0
  281. package/src/directive/formulas.js +708 -0
  282. package/src/directive/index.js +42 -0
  283. package/src/directive/permissionLine.js +59 -0
  284. package/src/directive/permissionLineLable.js +56 -0
  285. package/src/directive/permit.js +23 -0
  286. package/src/directive/popconfirm.js +86 -0
  287. package/src/directive/relatedQuery.js +61 -0
  288. package/src/directive/resize.js +18 -0
  289. package/src/directive/subSort.js +18 -0
  290. package/src/directive/tableDrag.js +25 -0
  291. package/src/directive/tooltip.js +37 -0
  292. package/src/filter/computerSize.js +23 -0
  293. package/src/filter/dateFormat.js +10 -0
  294. package/src/filter/index.js +10 -0
  295. package/src/index.js +267 -0
  296. package/src/locale/format.js +44 -0
  297. package/src/locale/index.js +48 -0
  298. package/src/locale/lang/en.js +59 -0
  299. package/src/locale/lang/zh-CN.js +58 -0
  300. package/src/locale/lang/zh-TW.js +57 -0
  301. package/src/locale/validate/dict.js +223 -0
  302. package/src/math.js +270 -0
  303. package/src/mixins/emitter.js +33 -0
  304. package/src/mixins/form.js +25 -0
  305. package/src/mixins/formDataUpdate.js +32 -0
  306. package/src/mixins/ganged.js +126 -0
  307. package/src/mixins/inputName.js +30 -0
  308. package/src/mixins/linkage.js +403 -0
  309. package/src/mixins/locale.js +9 -0
  310. package/src/mixins/mobileMode.js +27 -0
  311. package/src/mixins/onlineHottable.js +105 -0
  312. package/src/mixins/onlineSubtable.js +468 -0
  313. package/src/mixins/permission.js +84 -0
  314. package/src/mixins/querySqlPreview.js +747 -0
  315. package/src/mixins/regionValidator.js +70 -0
  316. package/src/mixins/script.js +35 -0
  317. package/src/mixins/templatePreview.js +3673 -0
  318. package/src/service.js +336 -0
  319. package/src/services/CustomQuery.js +199 -0
  320. package/src/services/SubPagination.js +132 -0
  321. package/src/styles/index.scss +7 -0
  322. package/src/styles/selector.scss +127 -0
  323. package/src/styles/variables.scss +71 -0
  324. package/src/util/base64.js +21 -0
  325. package/src/util/brower.js +15 -0
  326. package/src/util/clone.js +61 -0
  327. package/src/util/path.js +4 -0
  328. package/src/util/request.js +14 -0
  329. package/src/utils.js +1205 -0
  330. package/src/validate.js +184 -0
@@ -0,0 +1,1944 @@
1
+ <template>
2
+ <div class="inputs">
3
+ <el-tooltip
4
+ :placement="tooltipplacement || defualtTooltipplacement"
5
+ :disabled="inputWriteable && !errors.has('custom-form.' + inputName)"
6
+ >
7
+ <div slot="content">{{ errors.first('custom-form.' + inputName) }}</div>
8
+ <div
9
+ v-if="inputWriteable"
10
+ style="width: 100%"
11
+ class="el-select"
12
+ @click="showDialog"
13
+ >
14
+ <div
15
+ ref="tagSpans"
16
+ class="el-select__tags"
17
+ :style="{ width: 'calc(100% - ' + inputSuffixWidth + 'px)' }"
18
+ >
19
+ <span>
20
+ <span
21
+ v-for="(item, index) in inputVal"
22
+ :key="item.value"
23
+ class="el-tag el-tag--info el-tag--small"
24
+ @click.stop
25
+ >
26
+ <span class="el-select__tags-text">{{ item.value }}</span>
27
+ <i
28
+ class="el-tag__close el-icon-close"
29
+ @click="removeSelectOrg(index)"
30
+ ></i>
31
+ </span>
32
+ </span>
33
+ </div>
34
+ <div class="el-input el-input--suffix">
35
+ <input
36
+ v-model="inputVal"
37
+ v-validate="inputValidate"
38
+ type="text"
39
+ readonly="readonly"
40
+ :name="inputName"
41
+ autocomplete="off"
42
+ class="el-input__inner"
43
+ :placeholder="placeholderBo"
44
+ :style="{ height: inputSuffixHeight + 'px' }"
45
+ />
46
+ <span ref="inputSuffix" class="el-input__suffix">
47
+ <span class="el-input__suffix-inner">
48
+ <el-button slot="append" type="info" size="mini">
49
+ <i
50
+ :class="
51
+ custdialog.icon
52
+ ? 'el-input__icon ' + custdialog.icon
53
+ : 'el-input__icon icon-department'
54
+ "
55
+ :style="{
56
+ fontSize: '17px',
57
+ lineHeight: inputSuffixHeight + 'px',
58
+ }"
59
+ ></i>
60
+ {{ custdialog.name }}
61
+ </el-button>
62
+ </span>
63
+ </span>
64
+ </div>
65
+ </div>
66
+ </el-tooltip>
67
+ <span v-if="!inputWriteable">
68
+ <span
69
+ v-for="item in inputVal"
70
+ :key="item.value"
71
+ class="el-tag el-tag--info el-tag--small"
72
+ style="margin-right: 8px"
73
+ @click.stop
74
+ >
75
+ <span class="el-select__tags-text">{{ item.value }}</span>
76
+ </span>
77
+ </span>
78
+ <el-dialog
79
+ :visible.sync="customDialogShowList"
80
+ :title="customDialog.name"
81
+ :close-on-click-modal="false"
82
+ :before-close="dialogCancel"
83
+ append-to-body
84
+ top="6vh"
85
+ width="60%"
86
+ @opened="afterOpen"
87
+ >
88
+ <el-container :style="style" style="overflow: auto">
89
+ <!-- 组合对话框树 -->
90
+ <el-aside
91
+ v-if="customDialog.style == 2"
92
+ v-show="treeShow"
93
+ style="width: 23%"
94
+ >
95
+ <el-card>
96
+ <div slot="header" class="clearfix">
97
+ <span style="font-size: 16px">{{ leftTreeTitle }}</span>
98
+ </div>
99
+ <el-tree
100
+ ref="combinationTree"
101
+ :data="combinationTreeData"
102
+ :props="defaultProps"
103
+ :node-key="nodeKey"
104
+ highlight-current
105
+ :check-on-click-node="true"
106
+ lazy
107
+ :load="loadTree"
108
+ @node-click="combiTreeClick"
109
+ ></el-tree>
110
+ </el-card>
111
+ </el-aside>
112
+ <el-divider
113
+ v-if="customDialog.style == 2"
114
+ direction="vertical"
115
+ ></el-divider>
116
+ <el-container>
117
+ <el-header v-if="querysShow" class="middle-header">
118
+ <div
119
+ v-for="(condition, index) in conditionBind"
120
+ :key="index"
121
+ class="search-item"
122
+ >
123
+ <p style="font-size: 14px">{{ condition.comment }}:</p>
124
+ <div v-if="condition.controllerType == '1'">
125
+ <el-input
126
+ v-model="queryParams[condition.field]"
127
+ size="small"
128
+ style="width: 180px; padding: 10px 0; margin: 0 5px 0 5px"
129
+ clearable
130
+ :placeholder="placeholders[index]"
131
+ prefix-icon="el-icon-search"
132
+ @keyup.enter.native="searchEnterFun"
133
+ ></el-input>
134
+ </div>
135
+ <div
136
+ v-if="condition.controllerType == '2'"
137
+ style="margin-right: 10px"
138
+ >
139
+ <el-radio
140
+ v-for="(itemR, $index1) in condition.config.options"
141
+ :key="$index1"
142
+ v-model="queryParams[condition.field]"
143
+ :label="itemR.key"
144
+ >
145
+ {{ itemR.value }}
146
+ </el-radio>
147
+ </div>
148
+ <div
149
+ v-if="condition.controllerType == '3'"
150
+ style="margin-right: 10px"
151
+ >
152
+ <cl-select
153
+ v-if="condition.config.choiceType == 'static'"
154
+ v-model="queryParams[condition.field]"
155
+ :placeholder="quickSearch"
156
+ :options="condition.config.options"
157
+ ></cl-select>
158
+ <eip-select-dia
159
+ v-else
160
+ v-model="queryParams[condition.field]"
161
+ :placeholder="quickSearch"
162
+ :ganged="{
163
+ alias: condition.config.customQuery.alias,
164
+ valueBind: condition.config.customQuery.valueBind,
165
+ noInit: '',
166
+ labelBind: condition.config.customQuery.labelBind,
167
+ gangedBind: '{}',
168
+ bind: condition.config.bind,
169
+ }"
170
+ :multiple="false"
171
+ :filterable="false"
172
+ :allow-create="false"
173
+ :selectlist="[]"
174
+ :query-params="queryParams"
175
+ ></eip-select-dia>
176
+ </div>
177
+ <div
178
+ v-if="condition.controllerType == '4'"
179
+ style="margin-right: 10px"
180
+ >
181
+ <eip-tag
182
+ v-model="queryParams[condition.field]"
183
+ :tag-key="condition.config.tag"
184
+ :placeholder="quickSearch"
185
+ :filterable="condition.config.filterable"
186
+ :expand="condition.config.expand"
187
+ ></eip-tag>
188
+ </div>
189
+ </div>
190
+ <div
191
+ v-if="conditionBind && conditionBind.length > 0"
192
+ class="btn-wrap"
193
+ >
194
+ <el-button
195
+ style="margin-left: 20px"
196
+ size="small"
197
+ type="primary"
198
+ icon="el-icon-search"
199
+ @click="search(true)"
200
+ >
201
+ 查询
202
+ </el-button>
203
+ <el-button size="small" icon="el-icon-refresh" @click="reset">
204
+ 重置
205
+ </el-button>
206
+ </div>
207
+ </el-header>
208
+ <el-main style="padding: 0">
209
+ <el-table
210
+ ref="orgTable"
211
+ :data="dialogData"
212
+ stripe
213
+ border
214
+ class="org-table"
215
+ size="medium"
216
+ style="width: 100%"
217
+ @row-click="orgRowClick"
218
+ @selection-change="orgTableSelection"
219
+ @select="onTableSelect"
220
+ @select-all="selectAll"
221
+ >
222
+ <el-table-column
223
+ v-if="customDialog.selectNum != 1"
224
+ type="selection"
225
+ align="center"
226
+ width="55"
227
+ ></el-table-column>
228
+ <el-table-column
229
+ v-if="customDialog.selectNum === 1"
230
+ align="center"
231
+ width="55"
232
+ >
233
+ <template slot-scope="scope">
234
+ <el-radio
235
+ v-model="undefineda"
236
+ :label="scope.$index"
237
+ class="textRadio"
238
+ @selection-change="orgTableSelection"
239
+ >
240
+ &nbsp;
241
+ </el-radio>
242
+ </template>
243
+ </el-table-column>
244
+ <el-table-column
245
+ type="index"
246
+ width="50"
247
+ align="center"
248
+ label="序号"
249
+ ></el-table-column>
250
+ <el-table-column
251
+ v-for="field in displayfield"
252
+ :key="field.field"
253
+ :show-overflow-tooltip="true"
254
+ :prop="field.field"
255
+ :label="field.comment"
256
+ style="width: 100%"
257
+ ></el-table-column>
258
+ </el-table>
259
+ </el-main>
260
+ <el-footer>
261
+ <el-row
262
+ v-if="customDialog.needPage"
263
+ type="flex"
264
+ justify="end"
265
+ style="padding-top: 15px; justify-content: space-between"
266
+ >
267
+ <el-button
268
+ v-if="customDialog.style == 2"
269
+ :icon="toggleBtn"
270
+ size="mini"
271
+ type="default"
272
+ @click="toggleTree"
273
+ ></el-button>
274
+ <el-pagination
275
+ small
276
+ :current-page="pagination.page"
277
+ :page-sizes="[10, 20, 50, 100]"
278
+ :page-size="pagination.pageSize"
279
+ layout="total, sizes, prev, pager, next, jumper"
280
+ :total="total"
281
+ @size-change="handleSizeChange"
282
+ @current-change="handleCurrentChange"
283
+ ></el-pagination>
284
+ </el-row>
285
+ </el-footer>
286
+ </el-container>
287
+ </el-container>
288
+ <span slot="footer" class="dialog-footer" style="text-align: center">
289
+ <el-button size="small" type="primary" @click="dialogConfirm">
290
+ 确认
291
+ </el-button>
292
+ <el-button size="small" @click="dialogCancel">取 消</el-button>
293
+ </span>
294
+ </el-dialog>
295
+
296
+ <!-- 树形对话框 -->
297
+ <el-dialog
298
+ title="动态传入参数查询"
299
+ width="500px"
300
+ :visible.sync="dialogVisible"
301
+ :before-close="handleClose"
302
+ :close-on-click-modal="false"
303
+ top="6vh"
304
+ >
305
+ <!-- 动态传入参数查询树 -->
306
+ <table
307
+ class="form-table"
308
+ style="margin-left: 20px; width: 90%"
309
+ cellspacing="0"
310
+ cellpadding="0"
311
+ border="0"
312
+ >
313
+ <tbody v-for="(item, $index) in conditionfieldTree" :key="$index">
314
+ <tr v-if="item.defaultType == '4'">
315
+ <th width="130px">{{ item.comment }}:</th>
316
+ <td>
317
+ <cl-input
318
+ v-if="item.type != 'date'"
319
+ v-model="item.paramVal"
320
+ type="text"
321
+ style="width: 100%"
322
+ :placeholder="'请输入' + item.comment"
323
+ autocomplete="off"
324
+ ></cl-input>
325
+ <cl-date
326
+ v-if="item.type == 'date'"
327
+ v-model="item.paramVal"
328
+ style="width: 100%"
329
+ :placeholder="'请输入' + item.comment"
330
+ format="yyyy-MM-dd"
331
+ ></cl-date>
332
+ </td>
333
+ </tr>
334
+ </tbody>
335
+ </table>
336
+ <div slot="footer" class="dialog-footer">
337
+ <el-button type="primary" @click="handleSave">确 定</el-button>
338
+ <el-button @click="handleClose">取 消</el-button>
339
+ </div>
340
+ </el-dialog>
341
+ <el-dialog
342
+ :visible.sync="customDialogShowTree"
343
+ :title="customDialog.name"
344
+ :close-on-click-modal="false"
345
+ :before-close="dialogCancelTree"
346
+ append-to-body
347
+ top="6vh"
348
+ width="500px"
349
+ >
350
+ <el-container :style="style" style="overflow: auto">
351
+ <el-tree
352
+ ref="tree"
353
+ :data="props1"
354
+ :props="defaultProps"
355
+ :node-key="nodeKey"
356
+ highlight-current
357
+ :show-checkbox="customDialog.selectNum === -1"
358
+ :check-on-click-node="true"
359
+ :check-strictly="false"
360
+ lazy
361
+ :load="loadTree"
362
+ :default-expanded-keys="defaultExpandedKeys"
363
+ @node-click="treeClick"
364
+ @check-change="getChecked"
365
+ ></el-tree>
366
+ </el-container>
367
+ <span slot="footer" class="dialog-footer" style="text-align: center">
368
+ <el-button size="small" type="primary" @click="dialogTreeConfirm">
369
+ 确认
370
+ </el-button>
371
+ <el-button size="small" @click="dialogCancelTree">取 消</el-button>
372
+ </span>
373
+ </el-dialog>
374
+ <span v-validate style="display: none">
375
+ <slot name="labeldesc">{{ inputName }}</slot>
376
+ </span>
377
+ </div>
378
+ </template>
379
+ <script>
380
+ import $ from 'jquery'
381
+ import utils from '@/utils.js'
382
+ import locale from '@/mixins/locale.js'
383
+ import permission from '@/mixins/permission.js'
384
+ import inputName from '@/mixins/inputName.js'
385
+ import form from '@/mixins/form.js'
386
+ import CustomQuery from '@/services/CustomQuery'
387
+ import dialog from './customDialog.js'
388
+ import _ from 'lodash'
389
+ export default {
390
+ name: 'ClCustomDialog',
391
+ components: {},
392
+ mixins: [dialog, locale, inputName, permission, form],
393
+ props: {
394
+ value: String,
395
+ single: {
396
+ type: Boolean,
397
+ default: false,
398
+ },
399
+ custdialog: Object,
400
+ tooltipplacement: Object,
401
+ subIndex: Number,
402
+ },
403
+ data() {
404
+ return {
405
+ defualtTooltipplacement: 'bottom',
406
+ dialogVisible: false, //打开树形输入动态参数值的对话框
407
+ pageParam: {}, //树形对话框参数
408
+ conditionfieldTree: [], //树形对话框条件字段
409
+ data: {
410
+ qxdd: {},
411
+ },
412
+ inputSuffixWidth: 0,
413
+ placeholderBo: '',
414
+ quickSearch: '', //填写提示
415
+ conditionBind: [], //参数查询字段
416
+ nodeKey: 'ID_', //树形数据父Id
417
+ customDialogShowList: false,
418
+ customDialogShowTree: false,
419
+ selectOrgProps: {
420
+ label: 'name',
421
+ },
422
+ style: '', //对话框宽高
423
+ selectOrgs: [],
424
+ inputSuffixHeight: 33,
425
+ config: null,
426
+ updating: false,
427
+ displayfield: [], //显示字段
428
+ customDialog: {},
429
+ queryParam: '', //查询条件输入的值
430
+ props1: [],
431
+ showData: [],
432
+ checkBoxDataAll: [], //选中对象的集合
433
+ defaultProps: {
434
+ children: 'children',
435
+ label: 'label',
436
+ isLeaf: 'isLeaf',
437
+ },
438
+ propsData: [],
439
+ querysShow: false, //是否显示搜索框
440
+ undefineda: '',
441
+ isCurrentChange: false, //是否不执行 orgTableSelection方法
442
+ param: [], //绑定的表单字段
443
+ treeList: [],
444
+ displayField: {},
445
+ queryParams: [],
446
+ placeholders: [],
447
+ oldselectOrgs: [],
448
+ combinationTreeData: [],
449
+ combiTreeDisplayField: [],
450
+ combinationTreeQuerys: [],
451
+ combinationRule: {},
452
+ toggleBtn: 'el-icon-arrow-left',
453
+ treeShow: true,
454
+ transtionWidth: '25%',
455
+ leftTreeTitle: '',
456
+ writeable: true,
457
+ }
458
+ },
459
+ computed: {
460
+ inputVal: function () {
461
+ if (!this.value || this.value == '||[]') {
462
+ //this.checkBoxDataAll = []
463
+ return null
464
+ } else {
465
+ let nameAry = this.value.split(',')
466
+ if (this.value.indexOf('||') > 0) {
467
+ nameAry = this.value.split('||')[0].split(',')
468
+ }
469
+ let result = []
470
+ nameAry.forEach((m) => {
471
+ let n = { value: m }
472
+ result.push(n)
473
+ })
474
+ return result
475
+ }
476
+ },
477
+ //默认展开的节点的 key 的数组
478
+ defaultExpandedKeys: function () {
479
+ if (
480
+ this.props1 &&
481
+ this.props1.length > 0 &&
482
+ this.props1[0][this.nodeKey]
483
+ ) {
484
+ return [this.props1[0][this.nodeKey]]
485
+ }
486
+ return []
487
+ },
488
+ },
489
+ mounted() {
490
+ const { subScopeEl } = utils.getSubScopeElAndIndex(this.$el)
491
+ if (
492
+ subScopeEl &&
493
+ (subScopeEl.getAttribute('row_readonly') == 'true' ||
494
+ subScopeEl.getAttribute('row_readonly') === true)
495
+ ) {
496
+ this.writeable = false
497
+ }
498
+ //获取对话框按钮名称宽度
499
+ if (this.$refs.inputSuffix) {
500
+ this.inputSuffixWidth = this.$refs.inputSuffix.offsetWidth + 1
501
+ }
502
+ },
503
+ methods: {
504
+ selectAll(selection) {
505
+ if (this.oldselectOrgs != null && selection.length > 0) {
506
+ for (let x = 0; x < selection.length; x++) {
507
+ if (this.indexArray(this.oldselectOrgs, selection[x]) === -1) {
508
+ this.oldselectOrgs.push(selection[x])
509
+ }
510
+ }
511
+ this.selectOrgs = _.cloneDeep(this.oldselectOrgs)
512
+ } else {
513
+ this.selectOrgs = _.cloneDeep(selection)
514
+ }
515
+ },
516
+ checkNode(data, this_, pnode) {
517
+ if (!data.Pid) {
518
+ //不清楚是不是有地方数据返回是Pid,这里做个判断
519
+ data.Pid = data.pid
520
+ }
521
+ if (data.Pid) {
522
+ let node = this_.$refs.tree.getNode(data.Pid)
523
+ node.indeterminate = true
524
+ if (node.data.Pid) {
525
+ this_.$refs.tree.getNode(node.data.Pid).indeterminate = true
526
+ this.checkNode(
527
+ this_.$refs.tree.getNode(node.data.Pid).data,
528
+ this_,
529
+ this_.$refs.tree.getNode(node.data.Pid)
530
+ )
531
+ }
532
+ if (!node.indeterminate) {
533
+ node.indeterminate = true
534
+ }
535
+ } else if (pnode && !pnode.indeterminate) {
536
+ pnode.indeterminate = true
537
+ }
538
+ },
539
+ //回车查询
540
+ searchEnterFun: function (e) {
541
+ var keyCode = window.event ? e.keyCode : e.which
542
+ if (keyCode == 13) {
543
+ this.search()
544
+ }
545
+ },
546
+ handleSizeChange: function (size) {
547
+ this.isCurrentChange = true
548
+ //每页下拉显示数据
549
+ this.pagination.pageSize = size
550
+ this.search()
551
+ },
552
+ handleCurrentChange: function (currentPage) {
553
+ const this_ = this
554
+ if (this.selectOrgs != undefined && this.selectOrgs.length > 0) {
555
+ this.selectOrgs.forEach((row) => {
556
+ let res = this_.indexArray(this_.checkBoxDataAll, row)
557
+ if (res == -1) {
558
+ this_.checkBoxDataAll.push(row)
559
+ }
560
+ })
561
+ }
562
+ this.isCurrentChange = true
563
+ //点击第几页
564
+ this.pagination.page = currentPage
565
+ this.search()
566
+ },
567
+ checkList() {
568
+ const this_ = this
569
+ setTimeout(() => {
570
+ //列表
571
+ if (
572
+ this_.checkBoxDataAll != undefined &&
573
+ this_.checkBoxDataAll.length > 0
574
+ ) {
575
+ this_.checkBoxDataAll.forEach((row) => {
576
+ let res = this_.indexArray(this_.dialogData, row)
577
+ this_.undefineda = res
578
+ if (res != -1) {
579
+ this_.isCurrentChange = true
580
+ this_.toggleRowSelection(res, true)
581
+ }
582
+ })
583
+ }
584
+ }, 300)
585
+ },
586
+ toggleRowSelection(res, val) {
587
+ this.$refs.orgTable.toggleRowSelection(this.dialogData[res], val)
588
+ },
589
+ showDialog() {
590
+ const this_ = this
591
+ var alias = this.custdialog.custDialog.alias
592
+ this.$requestConfig.getCustomDialogByAlias(alias).then((customDialog) => {
593
+ if (!customDialog || !customDialog.alias) {
594
+ this.$message.error('对话框别名【' + alias + '】不存在!')
595
+ return
596
+ }
597
+ if (customDialog.style == 1) {
598
+ var displaylist = JSON.parse(customDialog.displayfield)
599
+ this_.nodeKey = displaylist.id
600
+ }
601
+ //对话框按表单字段查询(参数传入的)
602
+ let bindList = this_.custdialog.custDialog.conditions
603
+ this_.param = [] //绑定的表单字段
604
+ if (bindList.length > 0) {
605
+ bindList.forEach((ele) => {
606
+ //绑定表单字段
607
+ if (
608
+ ele.bind &&
609
+ (ele.defaultType == '3' || ele.bind.startsWith('data.searchForm'))
610
+ ) {
611
+ let obj = {}
612
+ obj.field = ele.field
613
+ obj.bind = ele.bind
614
+ this_.param.push(obj)
615
+ }
616
+ })
617
+ }
618
+
619
+ //判断对话框查询是否有条件
620
+ let userInputList = JSON.parse(customDialog.conditionfield)
621
+ this_.quickSearch = '' //填写提示 placeholder
622
+ this_.conditionBind = []
623
+ let queryParams = []
624
+ let placeholders = []
625
+ if (userInputList.length > 0) {
626
+ userInputList.forEach((ele) => {
627
+ var obj = {}
628
+ //条件查询参数(用户输入的) 文本框输入
629
+ if (ele.defaultType == '1') {
630
+ obj[ele.field] = ''
631
+ queryParams.push(obj)
632
+ // queryParams[ele.field] = "";
633
+ this_.conditionBind.push(ele)
634
+ placeholders.push('请输入' + ele.comment)
635
+ }
636
+ })
637
+ this.$set(this, 'queryParams', queryParams)
638
+ this.$set(this, 'placeholders', placeholders)
639
+ }
640
+ //判断是否显示条件查询输入框
641
+ if (this_.quickSearch != '') {
642
+ this_.querysShow = true
643
+ } else {
644
+ this_.querysShow = true
645
+ }
646
+ this_.quickSearch = '请输入' + this.quickSearch + '查询'
647
+ this_.style = 'height:' + customDialog.height + 'px'
648
+ if (window.screen.height && window.screen.height <= 900) {
649
+ this.style = 'height:440px'
650
+ }
651
+ if (customDialog.style == 0 || customDialog.style == 2) {
652
+ //列表
653
+ this_.customDialogShow({
654
+ alias: alias,
655
+ customDialog: customDialog,
656
+ })
657
+ } else if (customDialog.style == 1) {
658
+ //树形
659
+ this_.pageParam = { alias: alias, customDialog: customDialog }
660
+ this_.customDialog = customDialog
661
+ let param = {}
662
+ this_.conditionfieldTree = []
663
+ //判断是否存在条件
664
+ if (customDialog.conditionfield) {
665
+ this_.conditionfieldTree = JSON.parse(customDialog.conditionfield)
666
+ if (this_.conditionfieldTree.length > 0) {
667
+ for (let i = this_.conditionfieldTree.length - 1; i >= 0; i--) {
668
+ //判断条件字段是否是动态传入(defaultType:4:动态传入,2:固定值 )
669
+ if (this_.conditionfieldTree[i].defaultType == '4') {
670
+ param[this_.conditionfieldTree[i].field] =
671
+ this_.conditionfieldTree[i].comment
672
+ }
673
+ }
674
+ }
675
+ }
676
+ //有动态传入的字段
677
+ if (JSON.stringify(param) != '{}') {
678
+ this_.dialogVisible = true
679
+ } else {
680
+ //无动态传入的字段
681
+ this_.customDialogTreeShow(this_.pageParam)
682
+ }
683
+ }
684
+ })
685
+ },
686
+ //打开树形动态参数输入值的对话框
687
+ handleSave() {
688
+ this.customDialogTreeShow(this.pageParam)
689
+ this.dialogVisible = false
690
+ },
691
+ //关闭树形动态参数输入值的对话框
692
+ handleClose() {
693
+ this.dialogVisible = false
694
+ },
695
+ //判断数据是否包含某个对象,并返回数据包含对象的下标
696
+ indexArray(array, item) {
697
+ if (array.length == 0) {
698
+ return -1
699
+ }
700
+ for (let i = 0; i < array.length; i++) {
701
+ if (JSON.stringify(array[i]) == JSON.stringify(item)) {
702
+ return i
703
+ }
704
+ }
705
+ return -1
706
+ },
707
+ //点击列表某一个复选框时触发
708
+ onTableSelect(rows, row) {
709
+ this.isCurrentChange = false
710
+ //判断点击列表数据时复选框是否勾选 selected:true不勾选,false勾选
711
+ let selected =
712
+ this.selectOrgs &&
713
+ this.selectOrgs.length > 0 &&
714
+ this.indexArray(this.selectOrgs, row) !== -1
715
+ if (selected) {
716
+ this.isCurrentChange = true
717
+ let res = this.indexArray(this.selectOrgs, row)
718
+ this.selectOrgs.splice(res, 1)
719
+ }
720
+ },
721
+ //点击列表某一条数据时触发
722
+ orgRowClick(row, column, event) {
723
+ if (this.customDialog.selectNum === 1) {
724
+ $(event.currentTarget.children[0].children[0].children[0]).trigger(
725
+ 'click'
726
+ )
727
+ this.selectOrgs = []
728
+ this.selectOrgs.push(row)
729
+ } else if (this.customDialog.selectNum != 1) {
730
+ this.isCurrentChange = false
731
+ //判断点击列表数据时复选框是否勾选 selected:true不勾选,false勾选
732
+ let selected =
733
+ this.selectOrgs &&
734
+ this.selectOrgs.length > 0 &&
735
+ this.indexArray(this.selectOrgs, row) !== -1
736
+ if (selected) {
737
+ this.isCurrentChange = true
738
+ let res = this.indexArray(this.selectOrgs, row)
739
+ this.selectOrgs.splice(res, 1)
740
+ }
741
+ this.$refs.orgTable.toggleRowSelection(row)
742
+ }
743
+ },
744
+ //列表复选框有改变时触发
745
+ orgTableSelection(selection) {
746
+ //全选的情况特殊处理(为了与原本功能逻辑不冲突,先复制一份旧的选中数据.然后拿到全选事件中去计算)
747
+ this.oldselectOrgs = _.cloneDeep(this.selectOrgs)
748
+ //多选
749
+ if (this.customDialog.selectNum != 1 && !this.isCurrentChange) {
750
+ if (selection && selection.length > 0) {
751
+ if (
752
+ selection.length == 1 &&
753
+ (!this.selectOrgs || this.selectOrgs.length == 0)
754
+ ) {
755
+ this.selectOrgs = selection
756
+ } else if (
757
+ (!this.selectOrgs || this.selectOrgs.length == 0) &&
758
+ selection.length > 1
759
+ ) {
760
+ if (!this.selectOrgs) {
761
+ this.selectOrgs = []
762
+ }
763
+ for (let i = selection.length - 1; i >= 0; i--) {
764
+ this.selectOrgs.push(selection[i])
765
+ }
766
+ } else if (this.isCurrentChange && selection.length >= 10) {
767
+ if (!this.selectOrgs) {
768
+ this.selectOrgs = []
769
+ } else {
770
+ for (let u = this.selectOrgs.length - 1; u >= 0; u--) {
771
+ let res = this.indexArray(selection, this.selectOrgs[u])
772
+ if (res != -1) {
773
+ this.selectOrgs.splice(res, 1)
774
+ }
775
+ }
776
+ }
777
+ for (let i = 0; i < selection.length; i++) {
778
+ this.selectOrgs.push(selection[i])
779
+ }
780
+ } else {
781
+ for (let i = selection.length - 1; i >= 0; i--) {
782
+ this.selectOrgs.push(selection[i])
783
+ break
784
+ }
785
+ }
786
+ }
787
+ }
788
+ },
789
+ dialogConfirm() {
790
+ this.queryParam = ''
791
+ this.customDialogShowList = false
792
+ this.calacInputSuffixHeight()
793
+ this.syncInputValue()
794
+ },
795
+ //重置
796
+ reset() {
797
+ this.queryParams.forEach((paramObj) => {
798
+ for (let key in paramObj) {
799
+ this.queryParams[key] = ''
800
+ }
801
+ })
802
+ //组合树重置
803
+ let nodes = {}
804
+ if (this.$refs.combinationTree) {
805
+ nodes = this.$refs.combinationTree.store.nodesMap
806
+ }
807
+ for (let key in nodes) {
808
+ nodes[key].expanded = false
809
+ }
810
+ this.combinationTreeQuerys.splice(0)
811
+ this.search(true)
812
+ },
813
+ //查询
814
+ search(resetPagintion) {
815
+ let querys = [] //查询条件
816
+ let queryFilter = {}
817
+ if (JSON.stringify(this.pagination) == '{}') {
818
+ this.pagination = { page: 1, pageSize: 10, showTotal: true }
819
+ }
820
+ let pageBean = { pageBean: this.pagination }
821
+ if (resetPagintion) {
822
+ pageBean.pageBean = { page: 1, pageSize: 10, showTotal: true }
823
+ }
824
+ //用户输入的
825
+ if (this.queryParams.length != 0 && this.queryParams[0] != '') {
826
+ this.conditionBind.forEach((item) => {
827
+ if (this.queryParams[item.field]) {
828
+ querys.push({
829
+ property: item.field,
830
+ value: this.queryParams[item.field],
831
+ group: 'main',
832
+ operation: 'LIKE',
833
+ relation: 'AND',
834
+ })
835
+ }
836
+ })
837
+ }
838
+ //参数传入的查询拼接
839
+ if (this.param) {
840
+ const pInst = utils.getOnlineFormInstance(this)
841
+ this.param.forEach((item) => {
842
+ querys.push({
843
+ property: item.field,
844
+ value: utils.getValueByPath(
845
+ pInst,
846
+ item.bind,
847
+ this.subIndex || this.subIndex === 0 ? this.subIndex : null
848
+ ),
849
+ group: 'main',
850
+ operation: 'LIKE',
851
+ relation: 'AND',
852
+ })
853
+ })
854
+ }
855
+ //来自组合对话框的
856
+ if (
857
+ this.combinationTreeQuerys &&
858
+ this.combinationTreeQuerys.length != 0
859
+ ) {
860
+ for (let i = 0; i < this.combinationTreeQuerys.length; i++) {
861
+ querys.push(this.combinationTreeQuerys[i])
862
+ }
863
+ }
864
+
865
+ // post restful接口,并且配置了post参数。则以post参数作为请求参数
866
+ if (
867
+ this.customDialog.dsType != 'dataSource' &&
868
+ this.customDialog.requestType == 'POST' &&
869
+ this.customDialog.dataParam &&
870
+ this.customDialog.dataParam.constructor == String
871
+ ) {
872
+ let param = this.param
873
+ // 构建上下文数据对象
874
+ let ctx = {}
875
+ //根据路径构建想要的分页属性
876
+ let obj = {}
877
+ this.getLastKeyByPath(
878
+ obj,
879
+ this.customDialog.pageKey,
880
+ pageBean.pageBean.page
881
+ )
882
+ this.getLastKeyByPath(
883
+ obj,
884
+ this.customDialog.pageSizeKey,
885
+ pageBean.pageBean.pageSize
886
+ )
887
+ this.getLastKeyByPath(
888
+ obj,
889
+ this.customDialog.totalKey,
890
+ pageBean.pageBean.total
891
+ )
892
+ param &&
893
+ param.querys &&
894
+ param.querys.forEach((element) => {
895
+ ctx[element.property] = element.value
896
+ })
897
+ const exp = utils.parseExp(this.customDialog.dataParam, ctx)
898
+ try {
899
+ param = JSON.parse(exp)
900
+ param.pageBean = obj
901
+ //构造请求的参数
902
+ let requestParam = {
903
+ pageBean: param,
904
+ queryUrl: this.customDialog.queryUrl,
905
+ requestType: this.customDialog.requestType,
906
+ dsType: this.customDialog.dsType,
907
+ listKey: this.customDialog.listKey,
908
+ pageKey: this.customDialog.pageKey,
909
+ pageSizeKey: this.customDialog.pageSizeKey,
910
+ totalKey: this.customDialog.totalKey,
911
+ }
912
+ this.getDialoglistJson(requestParam).then(() => {
913
+ this.checkList()
914
+ })
915
+ } catch (e) {
916
+ this.$message.error(`POST参数不是有效的JSON格式${param}`)
917
+ }
918
+ } else {
919
+ if (querys.length > 0) {
920
+ queryFilter = this.handlePostData({
921
+ pageBean: pageBean.pageBean,
922
+ querys,
923
+ })
924
+ this.customDialog.pageBean = queryFilter
925
+ this.getDialoglistJson(this.customDialog).then(() => {
926
+ this.checkList()
927
+ })
928
+ } else {
929
+ this.customDialog.pageBean = pageBean
930
+ this.getDialoglistJson(this.customDialog).then(() => {
931
+ this.checkList()
932
+ })
933
+ }
934
+ }
935
+ },
936
+ //
937
+ getLastKeyByPath(obj, path, value) {
938
+ if (!obj || !path || path.constructor != String) {
939
+ return
940
+ }
941
+ if (!/^\w?.*[\w|\]]$/.test(path)) {
942
+ return
943
+ }
944
+ let pathAry = path.split('.')
945
+ if (pathAry.length == 1) {
946
+ obj[path] = value
947
+ } else {
948
+ let length = pathAry.length
949
+ obj[pathAry[length - 1]] = value
950
+ }
951
+ },
952
+ // 处理POST请求时的参数
953
+ handlePostData(queryFilter) {
954
+ if (
955
+ !this.customDialog.dataParam ||
956
+ this.customDialog.dataParam.constructor != String
957
+ ) {
958
+ return queryFilter
959
+ }
960
+ // 构建上下文数据对象
961
+ let ctx = {}
962
+ queryFilter &&
963
+ queryFilter.querys.forEach((element) => {
964
+ ctx[element.property] = element.value
965
+ })
966
+ const exp = utils.parseExp(this.customDialog.dataParam, ctx)
967
+ try {
968
+ return JSON.parse(exp)
969
+ } catch (e) {
970
+ CustomQuery._throwException(
971
+ 'POST参数不是有效的JSON格式:' + this.customDialog.dataParam
972
+ )
973
+ }
974
+ },
975
+ async doQuery(param) {
976
+ let paramLoadData = []
977
+ const pInst = utils.getOnlineFormInstance(this)
978
+ //获取关联查询绑定的表单参数
979
+ for (let i = 0; i < param.conditionfield.length; i++) {
980
+ if (param.conditionfield[i].fieldPath != '') {
981
+ let bindVal = utils.getValueByPath(
982
+ pInst,
983
+ param.conditionfield[i].fieldPath,
984
+ null
985
+ )
986
+ let obj = { key: param.conditionfield[i].field, value: bindVal }
987
+ paramLoadData.push(obj)
988
+ }
989
+ }
990
+
991
+ let queryUrl =
992
+ param.dsType == 'dataSource'
993
+ ? '${form}/form/customQuery/v1/doQuery?alias=' +
994
+ param.alias +
995
+ '&page=1'
996
+ : param.url
997
+ let requestMethod = 'POST'
998
+ //如果关联数据列表查询数据不是数据源则请求方法为restful配置的请求方式
999
+ if (param.dsType != 'dataSource') {
1000
+ requestMethod = param.requestType
1001
+ }
1002
+ //查询数据
1003
+ this.$requestConfig
1004
+ .request({
1005
+ url: queryUrl,
1006
+ method: requestMethod,
1007
+ data: paramLoadData,
1008
+ })
1009
+ .then((res) => {
1010
+ //判断是否有关联查询数据返回
1011
+ if (res.data.rows.length > 0) {
1012
+ //获取关联查询返回的表单参数
1013
+ for (let io = 0; io < param.resultfield.length; io++) {
1014
+ if (param.resultfield[io].fieldPath != '') {
1015
+ let val = ''
1016
+ for (let j = 0; j < res.data.rows.length; j++) {
1017
+ if (res.data.rows[j][param.resultfield[io].field]) {
1018
+ val =
1019
+ val + res.data.rows[j][param.resultfield[io].field] + ','
1020
+ }
1021
+ }
1022
+ val = val.substring(0, val.length - 1)
1023
+ let pathArr = param.resultfield[io].fieldPath.split('.')
1024
+ if (pathArr.length == 3) {
1025
+ //主表
1026
+ utils.setValueByPath(
1027
+ pInst,
1028
+ param.resultfield[io].fieldPath,
1029
+ val,
1030
+ null
1031
+ )
1032
+ } else if (pathArr.length == 4) {
1033
+ //子表
1034
+ let subData = pInst.data[pathArr[1]][pathArr[2]]
1035
+ if (subData.length == 0) {
1036
+ //子表没数据的情况
1037
+ let subTabName = pathArr[2].replace('sub_', '')
1038
+ //得到子表的所有字段
1039
+ let subInitData =
1040
+ pInst.data[pathArr[1]].initData[subTabName] || {}
1041
+ //把数组里面的值为 null 转换为空字符串
1042
+ let str = JSON.stringify(subInitData).replace(/null/g, '""')
1043
+ let subData = JSON.parse(str)
1044
+ for (var key in subData) {
1045
+ //点添加时判断要新增子表记录中的孙表是否有值
1046
+ if (key.indexOf('sub_') == 0 && subData[key].length > 0) {
1047
+ subData[key] = [] //有则清空
1048
+ }
1049
+ //点添加时判断要新增子表记录中的字段是否有值
1050
+ if (subData[key]) {
1051
+ subData[key] = '' //有则清空
1052
+ }
1053
+ }
1054
+ //新增一条数据
1055
+ pInst.data[pathArr[1]][pathArr[2]].push(subData)
1056
+ //对话框关联查询返回的值赋值给绑定的字段
1057
+ utils.setValueByPath(
1058
+ pInst,
1059
+ param.resultfield[io].fieldPath,
1060
+ val,
1061
+ 0
1062
+ )
1063
+ } else {
1064
+ //子表有数据的情况
1065
+ for (let p = 0; p < subData.length; p++) {
1066
+ //对话框关联查询返回的值赋值给绑定的字段
1067
+ utils.setValueByPath(
1068
+ pInst,
1069
+ param.resultfield[io].fieldPath,
1070
+ val,
1071
+ p
1072
+ )
1073
+ }
1074
+ }
1075
+ }
1076
+ }
1077
+ }
1078
+ } else {
1079
+ //没有返回的值则清空
1080
+ //获取关联查询返回的表单参数
1081
+ for (let iop = 0; iop < param.resultfield.length; iop++) {
1082
+ if (param.resultfield[iop].fieldPath != '') {
1083
+ let pathArr = param.resultfield[iop].fieldPath.split('.')
1084
+ if (pathArr.length == 3) {
1085
+ //主表
1086
+ //赋值给绑定的字段
1087
+ utils.setValueByPath(
1088
+ pInst,
1089
+ param.resultfield[iop].fieldPath,
1090
+ '',
1091
+ null
1092
+ )
1093
+ } else if (pathArr.length == 4) {
1094
+ //子表
1095
+ let subData = pInst.data[pathArr[1]][pathArr[2]]
1096
+ for (let p = 0; p < subData.length; p++) {
1097
+ //对话框关联查询返回的值赋值给绑定的字段
1098
+ utils.setValueByPath(
1099
+ pInst,
1100
+ param.resultfield[iop].fieldPath,
1101
+ '',
1102
+ p
1103
+ )
1104
+ }
1105
+ }
1106
+ }
1107
+ }
1108
+ }
1109
+ })
1110
+ },
1111
+ // 同步选择结果
1112
+ syncInputValue() {
1113
+ let thisIndex = null //当前数据所在下标
1114
+ let parentIndex = null //父节点所在下标
1115
+ if (this.$el) {
1116
+ thisIndex = utils.getSubScopeElAndIndex(this.$el).index
1117
+ parentIndex = utils.getSubScopeElAndIndex(this.$parent.$el).index
1118
+ }
1119
+ var returnStr = JSON.parse(this.customDialog.resultfield)
1120
+ //拿到返回的字段
1121
+ var field = new Array([returnStr.length])
1122
+ var comment = new Array([returnStr.length])
1123
+ var str = []
1124
+ for (var i = 0; i < returnStr.length; i++) {
1125
+ field[i] = returnStr[i].field.toLowerCase()
1126
+ comment[i] = returnStr[i].comment.toLowerCase()
1127
+ }
1128
+ var s = this.selectOrgs
1129
+ if (this.selectOrgs) {
1130
+ this.showData = [...this.selectOrgs]
1131
+ this.checkBoxDataAll = [...this.selectOrgs]
1132
+ } else {
1133
+ this.showData = []
1134
+ this.checkBoxDataAll = []
1135
+ }
1136
+ if (this.customDialog.selectNum === 1) {
1137
+ s = this.selectOrgs
1138
+ }
1139
+ if (this.customDialog.selectNum === 1) {
1140
+ var temp = ''
1141
+ // 当 s 存在或 s 的长度不为0时
1142
+ if (s && s.length) {
1143
+ for (var k = 0; k < comment.length; k++) {
1144
+ let sField = s[0][field[k]] === undefined ? '' : s[0][field[k]]
1145
+ let encodeStr = encodeURIComponent(sField)
1146
+ temp += '"' + comment[k] + '":"' + encodeStr + '",'
1147
+ }
1148
+ }
1149
+ if (temp != '') {
1150
+ temp = '{' + temp.substring(0, temp.length - 1) + '}'
1151
+ }
1152
+ str.push(utils.parseToJson(temp))
1153
+ } else {
1154
+ if (s && s.length > 0) {
1155
+ for (var m = 0; m < s.length; m++) {
1156
+ var temp1 = ''
1157
+ for (var j = 0; j < comment.length; j++) {
1158
+ const _m = s[m]
1159
+ const _n = field[j]
1160
+ const _ov = _m[_n] //原始值
1161
+ const _uv = _m[_n.toUpperCase()] //field转大写后取到的值
1162
+ const _lv = _m[_n.toLowerCase()] //field转小写后取到的值
1163
+ const _fv =
1164
+ _ov == null || _ov == undefined
1165
+ ? _uv == null || _uv == undefined
1166
+ ? _lv
1167
+ : _uv
1168
+ : _ov
1169
+ const encodeStr = encodeURIComponent(_fv)
1170
+ temp1 += '"' + comment[j] + '":"' + encodeStr + '",'
1171
+ }
1172
+ if (temp1 != '') {
1173
+ temp1 = '{' + temp1.substring(0, temp1.length - 1) + '}'
1174
+ }
1175
+ str.push(utils.parseToJson(temp1))
1176
+ }
1177
+ }
1178
+ }
1179
+ const pInst = utils.getOnlineFormInstance(this)
1180
+ this.custdialog.custDialog.mappingConf.forEach((con) => {
1181
+ var val = ''
1182
+ var from = con.from.toLowerCase()
1183
+ str.forEach((item) => {
1184
+ if (item) {
1185
+ val += decodeURIComponent(item[from]) + ','
1186
+ }
1187
+ })
1188
+ if (this.modelName == 'data.' + con['target'][0]) {
1189
+ val = val.substring(0, val.length - 1)
1190
+ utils.setValueByPath(
1191
+ pInst,
1192
+ 'data.' + con['target'][0],
1193
+ val,
1194
+ thisIndex
1195
+ )
1196
+ } else if (this.modelName && this.modelName.startsWith('searchForm.')) {
1197
+ let prePath = pInst['searchForm'] ? '' : 'data.'
1198
+ utils.setValueByPath(
1199
+ pInst,
1200
+ prePath + 'searchForm.' + con['target'][0],
1201
+ val.substring(0, val.length - 1),
1202
+ thisIndex
1203
+ )
1204
+ } else {
1205
+ let configAttr = con['target'][0].split('.')
1206
+ let path = con['target'][0]
1207
+ if (configAttr.length == 4 && parentIndex >= 0) {
1208
+ //孙表数据赋值
1209
+ path =
1210
+ configAttr[0] +
1211
+ '.' +
1212
+ configAttr[1] +
1213
+ '[' +
1214
+ parentIndex +
1215
+ '].' +
1216
+ configAttr[2] +
1217
+ '.' +
1218
+ configAttr[3]
1219
+ }
1220
+ const _val = val.substring(0, val.length - 1)
1221
+ if (path) {
1222
+ if (this.modelName && this.modelName.endsWith(path)) {
1223
+ this.$emit('input', _val)
1224
+ }
1225
+ utils.setValueByPath(
1226
+ pInst,
1227
+ `${pInst.data ? 'data.' : 'model.'}${path}`,
1228
+ _val,
1229
+ thisIndex
1230
+ )
1231
+ }
1232
+ }
1233
+ })
1234
+ //判断对话框是否绑定了关联查询
1235
+ let custQueryJson = this.custdialog.custDialog.custQueryJson
1236
+ if (custQueryJson.length > 0) {
1237
+ for (let i = 0; i < custQueryJson.length; i++) {
1238
+ if (custQueryJson[i].conditionfield.length > 0) {
1239
+ this.doQuery(custQueryJson[i])
1240
+ } else {
1241
+ console.error(
1242
+ '[' + custQueryJson[i].comment + ']关联查询取值参数未绑定表单字段'
1243
+ )
1244
+ }
1245
+ }
1246
+ }
1247
+ },
1248
+ //取消按钮
1249
+ dialogCancel() {
1250
+ const this_ = this
1251
+ this_.queryParam = ''
1252
+ this.setDialogData([])
1253
+ this_.customDialogShowList = false
1254
+ //判断是否是点击了确认再点击取消的 inputVal没有值则表示直接点击的取消
1255
+ if (!this_.inputVal) {
1256
+ this_.selectOrgs = []
1257
+ } else {
1258
+ this_.selectOrgs = this_.showData ? [...this_.showData] : ''
1259
+ this.checkBoxDataAll = [...this_.selectOrgs]
1260
+ }
1261
+ },
1262
+ dialogTreeConfirm() {
1263
+ this.calacInputSuffixHeight()
1264
+ let thisIndex = null //当前数据所在下标
1265
+ let parentIndex = null //父节点所在下标
1266
+ if (this.$el) {
1267
+ thisIndex = utils.getSomeAttributeFromParentElement(
1268
+ this.$el,
1269
+ 'data-index'
1270
+ )
1271
+ parentIndex = utils.getSomeAttributeFromParentElement(
1272
+ this.$parent.$el,
1273
+ 'data-index'
1274
+ )
1275
+ }
1276
+ this.setDialogData([])
1277
+ var returnStr = JSON.parse(this.customDialog.resultfield)
1278
+ var field = new Array([returnStr.length])
1279
+ var comment = new Array([returnStr.length])
1280
+ var str = []
1281
+ for (var i = 0; i < returnStr.length; i++) {
1282
+ field[i] = returnStr[i].field
1283
+ comment[i] = returnStr[i].comment
1284
+ }
1285
+ var nodes = this.propsData
1286
+ if (this.customDialog.selectNum === 1) {
1287
+ nodes = this.propsData[0]
1288
+ var temp = ''
1289
+ for (var j = 0; j < comment.length; j++) {
1290
+ temp += '"' + comment[j] + '":"' + nodes[field[j]] + '",'
1291
+ }
1292
+ if (temp != '') {
1293
+ temp = '{' + temp.substring(0, temp.length - 1) + '}'
1294
+ }
1295
+ str.push(utils.parseToJson(temp))
1296
+ } else {
1297
+ nodes.forEach((item, k) => {
1298
+ var temp = ''
1299
+ for (var i = 0; i < comment.length; i++) {
1300
+ temp += '"' + comment[i] + '":"' + nodes[field[i]] + '",'
1301
+ temp += '"' + comment[i] + '":"' + nodes[k][field[i]] + '",'
1302
+ }
1303
+ if (temp != '') {
1304
+ temp = '{' + temp.substring(0, temp.length - 1) + '}'
1305
+ }
1306
+ str.push(utils.parseToJson(temp))
1307
+ })
1308
+ }
1309
+ const pInst = utils.getOnlineFormInstance(this)
1310
+ this.selectOrgs = this.convertComment2Field(str, field)
1311
+ this.custdialog.custDialog.mappingConf.forEach((con) => {
1312
+ var val = ''
1313
+ str.forEach((item) => {
1314
+ val += item[con.from] + ','
1315
+ })
1316
+ if (this.modelName == 'data.' + con['target'][0]) {
1317
+ utils.setValueByPath(
1318
+ pInst,
1319
+ 'data.' + con['target'][0],
1320
+ val.substring(0, val.length - 1),
1321
+ thisIndex
1322
+ )
1323
+ } else if (this.modelName == 'searchForm.' + con['target'][0]) {
1324
+ utils.setValueByPath(
1325
+ pInst,
1326
+ 'searchForm.' + con['target'][0],
1327
+ val.substring(0, val.length - 1),
1328
+ thisIndex
1329
+ )
1330
+ } else {
1331
+ let configAttr = con['target'][0].split('.')
1332
+ let path = con['target'][0]
1333
+ if (configAttr.length == 4 && parentIndex >= 0) {
1334
+ //孙表数据赋值
1335
+ path =
1336
+ configAttr[0] +
1337
+ '.' +
1338
+ configAttr[1] +
1339
+ '[' +
1340
+ parentIndex +
1341
+ '].' +
1342
+ configAttr[2] +
1343
+ '.' +
1344
+ configAttr[3]
1345
+ }
1346
+ const _val = val.substring(0, val.length - 1)
1347
+ if (path) {
1348
+ if (this.modelName && this.modelName.endsWith(path)) {
1349
+ this.$emit('input', _val)
1350
+ }
1351
+ utils.setValueByPath(
1352
+ pInst,
1353
+ `${pInst.data ? 'data.' : 'model.'}${path}`,
1354
+ _val,
1355
+ thisIndex
1356
+ )
1357
+ }
1358
+ }
1359
+ })
1360
+ //回显的值
1361
+ this.showData = this.propsData ? [...this.propsData] : ''
1362
+ this.customDialogShowTree = false
1363
+ },
1364
+ // 将以comment为key的数组改造为以field为key的数组
1365
+ convertComment2Field(ary, fields) {
1366
+ const result = []
1367
+ if (!ary || ary.length == 0) {
1368
+ return result
1369
+ }
1370
+ ary.forEach((s) => {
1371
+ const r = {}
1372
+ Object.entries(s).forEach((kv, index) => {
1373
+ const f = fields[index]
1374
+ if (f) {
1375
+ r[f] = kv[1]
1376
+ }
1377
+ })
1378
+ result.push(r)
1379
+ })
1380
+ return result
1381
+ },
1382
+ dialogCancelTree() {
1383
+ this.setDialogData([])
1384
+ this.customDialogShowTree = false
1385
+ },
1386
+ getChecked() {
1387
+ // 多选
1388
+ if (this.customDialog.selectNum === -1) {
1389
+ this.propsData = this.$refs.tree.getCheckedNodes()
1390
+ }
1391
+ // if (this.customDialog.selectNum === 1) {
1392
+ // this.propsData = []
1393
+ // this.propsData.push(data)
1394
+ // } else {
1395
+ // this.propsData = this.$refs.tree.getCheckedNodes()
1396
+ // }
1397
+ },
1398
+ treeClick(data) {
1399
+ // 单选
1400
+ if (this.customDialog.selectNum === 1) {
1401
+ this.propsData = []
1402
+ this.propsData.push(data)
1403
+ }
1404
+ },
1405
+ clearAllSelectOrgs() {
1406
+ this.selectOrgs = []
1407
+ this.$refs.orgTable.clearSelection()
1408
+ },
1409
+ removeSelectOrg(item) {
1410
+ if (this.customDialog.selectNum === 1) {
1411
+ this.$emit('input', '')
1412
+ this.selectOrgs.splice(item, 1)
1413
+ this.showData.splice(item, 1)
1414
+ } else {
1415
+ this.inputVal.splice(item, 1)
1416
+ // let removeId = this.showData[item];
1417
+ //树形
1418
+ if (this.propsData.length > 0) {
1419
+ this.propsData.splice(item, 1)
1420
+ }
1421
+ if (this.showData.length > 0) {
1422
+ this.showData.splice(item, 1)
1423
+ }
1424
+ //列表
1425
+ if (this.selectOrgs != null) {
1426
+ this.selectOrgs.splice(item, 1)
1427
+ this.checkBoxDataAll.splice(item, 1)
1428
+ // this.selectOrgs.forEach((row) => {
1429
+ // // if(item.id ==removeId ){
1430
+ // this.isCurrentChange = true
1431
+ // this.toggleRowSelection(row, false)
1432
+ // // }
1433
+ // })
1434
+ }
1435
+ this.calacInputSuffixHeight()
1436
+ let value = ''
1437
+ this.inputVal.forEach((val) => {
1438
+ value += val.value + ','
1439
+ })
1440
+ if (value.length > 0) {
1441
+ value = value.substring(0, value.length - 1)
1442
+ }
1443
+ // if (value != '') {
1444
+ // value = value + '||' + JSON.stringify(this.showData)
1445
+ // }
1446
+ this.$emit('input', value)
1447
+ }
1448
+ this.syncInputValue()
1449
+ },
1450
+ calacInputSuffixHeight() {
1451
+ setTimeout(() => {
1452
+ if (!this.$refs.tagSpans) return
1453
+ if (this.$refs.tagSpans.offsetHeight) {
1454
+ this.inputSuffixHeight = this.$refs.tagSpans.offsetHeight + 5
1455
+ } else {
1456
+ this.inputSuffixHeight = 30
1457
+ }
1458
+ // 触发验证
1459
+ this.$validator.validate()
1460
+ }, 0)
1461
+ },
1462
+ customDialogShow(pageParam) {
1463
+ this.customDialogShowList = true
1464
+ this.customDialog = pageParam.customDialog
1465
+ this.customDialog.queryUrl =
1466
+ this.customDialog.dsType == 'dataSource'
1467
+ ? '${form}/form/customDialog/v1/getListData?alias=' +
1468
+ this.customDialog.alias +
1469
+ '&mapParam=' +
1470
+ (this.customDialog.mapParam ? this.customDialog.mapParam : '')
1471
+ : this.customDialog.url
1472
+ if (this.dialogData.length < 1) {
1473
+ this.search()
1474
+ this.displayfield = JSON.parse(pageParam.customDialog.displayfield)
1475
+ if (this.customDialog.dsType == 'dataSource') {
1476
+ for (var i = 0; i < this.displayfield.length; i++) {
1477
+ this.displayfield[i].field =
1478
+ this.displayfield[i].field.toLowerCase()
1479
+ }
1480
+ }
1481
+ } else if (this.dialogData.length > 1) {
1482
+ this.search()
1483
+ }
1484
+ if (this.dialogData.length > 0 && this.displayfield.length == 0) {
1485
+ this.search()
1486
+ this.displayfield = JSON.parse(pageParam.customDialog.displayfield)
1487
+ if (this.customDialog.dsType == 'dataSource') {
1488
+ for (var j = 0; i < this.displayfield.length; j++) {
1489
+ this.displayfield[j].field =
1490
+ this.displayfield[j].field.toLowerCase()
1491
+ }
1492
+ }
1493
+ }
1494
+ },
1495
+ customDialogTreeShow(pageParam) {
1496
+ var customDialog = this.customDialog
1497
+ let mapParamObj = {} //数据来源是数据源,且有动态参数传入时调用
1498
+ let mapParam = ''
1499
+ let defaultPValue = '' //父ID值
1500
+ if (this.conditionfieldTree.length > 0) {
1501
+ for (let i = 0; i < this.conditionfieldTree.length; i++) {
1502
+ if (this.conditionfieldTree[i].defaultType == '4') {
1503
+ //动态传入
1504
+ //得到输入的条件字段值
1505
+ let val = this.conditionfieldTree[i].paramVal
1506
+ if (!val) {
1507
+ continue
1508
+ }
1509
+ //得到条件字段KEY
1510
+ let key = this.conditionfieldTree[i].field
1511
+ mapParamObj[key] = val
1512
+ } else if (this.conditionfieldTree[i].defaultType == '2') {
1513
+ //固定值
1514
+ //得到输入的条件字段值
1515
+ let val = this.conditionfieldTree[i].defaultValue
1516
+ if (!val) {
1517
+ continue
1518
+ }
1519
+ //得到条件字段KEY
1520
+ let key = this.conditionfieldTree[i].field
1521
+ mapParamObj[key] = val
1522
+ }
1523
+ }
1524
+ if (this.param) {
1525
+ const pInst = utils.getOnlineFormInstance(this)
1526
+ this.param.forEach((item) => {
1527
+ let val = utils.getValueByPath(pInst, item.bind)
1528
+ val && (mapParamObj[item.field] = val)
1529
+ })
1530
+ }
1531
+ if (JSON.stringify(mapParamObj) != '{}') {
1532
+ //获取对话框配置的父ID字段
1533
+ let pid = JSON.parse(this.customDialog.displayfield).pid
1534
+ for (let m in mapParamObj) {
1535
+ if (pid == m) {
1536
+ defaultPValue = mapParamObj[m]
1537
+ break
1538
+ }
1539
+ }
1540
+ mapParam = JSON.stringify(mapParamObj)
1541
+ mapParam = mapParam.substring(1, mapParam.length - 1)
1542
+ }
1543
+ }
1544
+ var requestType =
1545
+ customDialog.dsType == 'dataSource'
1546
+ ? 'GET'
1547
+ : customDialog.requestType
1548
+ ? customDialog.requestType
1549
+ : 'POST'
1550
+ var url =
1551
+ '${form}/form/customDialog/v1/getTreeData?alias=' +
1552
+ pageParam.alias +
1553
+ '&mapParam=' +
1554
+ mapParam
1555
+ var paramsObj = {}
1556
+ if (customDialog.dsType != 'dataSource') {
1557
+ url = customDialog.url
1558
+ var templatePa = customDialog.dataParam
1559
+ if (customDialog.conditionfield) {
1560
+ var conditions = JSON.parse(customDialog.conditionfield)
1561
+ for (var i = 0; i < conditions.length; i++) {
1562
+ var con = conditions[i]
1563
+ if (requestType == 'POST') {
1564
+ if (templatePa) {
1565
+ templatePa = templatePa.replace(
1566
+ new RegExp('\\{' + con.field + '\\}', 'g'),
1567
+ con.defaultValue
1568
+ )
1569
+ } else {
1570
+ paramsObj[con.field] = con.defaultValue
1571
+ }
1572
+ } else {
1573
+ var ljChar = url.indexOf('?') == -1 ? '?' : '&'
1574
+ url = url + ljChar + con.field + '=' + con.defaultValue
1575
+ }
1576
+ }
1577
+ if (templatePa) {
1578
+ paramsObj = JSON.parse(templatePa)
1579
+ }
1580
+ }
1581
+ }
1582
+ var requestParams = {}
1583
+ requestParams.requestType = requestType
1584
+ requestParams.url = url
1585
+ requestParams.paramsObj = paramsObj
1586
+ this.searchTree(requestParams, defaultPValue)
1587
+ this.customDialogShowTree = true
1588
+ },
1589
+ //树形查询
1590
+ searchTree(requestParams, defaultPValue) {
1591
+ const this_ = this
1592
+ let query = this.$requestConfig.request({
1593
+ url: requestParams.url,
1594
+ method: requestParams.requestType == 'POST' ? 'post' : 'get',
1595
+ data: requestParams.paramsObj,
1596
+ })
1597
+ query.then(function (response) {
1598
+ //显示字段配置
1599
+ let displayfield = JSON.parse(this_.customDialog.displayfield)
1600
+ this_.displayField = displayfield
1601
+ //把对话框配置的显示字段显示名称赋值给树形的显示值
1602
+ this_.defaultProps.label = displayfield.displayName
1603
+ this_.treeList = response
1604
+ //得到要加载树的信息
1605
+ if (defaultPValue) {
1606
+ displayfield.pvalue = defaultPValue
1607
+ }
1608
+ this_.props1 = this_.toTreeData(
1609
+ response,
1610
+ displayfield.id,
1611
+ displayfield.pid,
1612
+ displayfield.displayName,
1613
+ displayfield.pvalue ? displayfield.pvalue : 0
1614
+ )
1615
+ })
1616
+ },
1617
+ //加载树的信息
1618
+ toTreeData(data, id, pid, name, pvalue) {
1619
+ // 建立个树形结构,需要定义个最顶层的父节点,pvalue是0
1620
+ return this.translateDataToTree(data, pid, id, name, pvalue)
1621
+ },
1622
+ translateDataToTree(data, pid, id) {
1623
+ //把树数据有子节点的数据全部过滤掉(只留父节点的数据)
1624
+ let tile2nest = utils.tile2nest(data, id, pid)
1625
+ return tile2nest || []
1626
+ },
1627
+ loadTree(node, resolve) {
1628
+ if (node) {
1629
+ let this_ = this
1630
+ let displayField =
1631
+ this_.customDialog.style == 2
1632
+ ? this_.combiTreeDisplayField
1633
+ : this_.displayField
1634
+ resolve(
1635
+ this.treeList.filter(
1636
+ (value) => value[displayField.pid] === node.data[displayField.id]
1637
+ )
1638
+ )
1639
+ if (this.showData && this.showData.length > 0) {
1640
+ setTimeout(() => {
1641
+ this.showData.forEach((v) => {
1642
+ if (!v.Pid) {
1643
+ //不清楚是不是有地方数据返回是Pid,这里做个判断
1644
+ v.Pid = v.pid
1645
+ }
1646
+ if (v.Pid == node.key) {
1647
+ this_.$refs.tree.setChecked(v, true)
1648
+ } else {
1649
+ this_.checkNode(v, this_)
1650
+ }
1651
+ })
1652
+ }, 400)
1653
+ }
1654
+ }
1655
+ },
1656
+
1657
+ afterOpen() {
1658
+ //打开对话框之后加载树
1659
+ this.loadCombinationTree()
1660
+ },
1661
+ loadCombinationTree() {
1662
+ if (this.customDialog.style != 2) {
1663
+ return
1664
+ }
1665
+ let combinationRule = JSON.parse(this.customDialog.combinationRule)
1666
+ this.combinationRule = combinationRule
1667
+ let treeAlias = combinationRule.leftTree
1668
+ //获取对话框数据
1669
+ this.$requestConfig.getCustomDialogByAlias(treeAlias).then((resp) => {
1670
+ let treeDialog = resp
1671
+ this.leftTreeTitle = treeDialog.name
1672
+ let requestType =
1673
+ treeDialog.dsType == 'dataSource'
1674
+ ? 'get'
1675
+ : treeDialog.requestType
1676
+ ? treeDialog.requestType
1677
+ : 'post'
1678
+ let url =
1679
+ '${form}/form/customDialog/v1/getTreeData?alias=' +
1680
+ treeAlias +
1681
+ '&mapParam='
1682
+ let paramsObj = {}
1683
+ if (treeDialog.dsType != 'dataSource') {
1684
+ url = treeDialog.url
1685
+ let templatePa = treeDialog.dataParam
1686
+ if (treeDialog.conditionfield) {
1687
+ let conditions = JSON.parse(treeDialog.conditionfield)
1688
+ for (let i = 0; i < conditions.length; i++) {
1689
+ let con = conditions[i]
1690
+ if (requestType == 'POST') {
1691
+ if (templatePa) {
1692
+ templatePa = templatePa.replace(
1693
+ new RegExp('\\{' + con.field + '\\}', 'g'),
1694
+ con.defaultValue
1695
+ )
1696
+ } else {
1697
+ paramsObj[con.field] = con.defaultValue
1698
+ }
1699
+ } else {
1700
+ let ljChar = url.indexOf('?') == -1 ? '?' : '&'
1701
+ url = url + ljChar + con.field + '=' + con.defaultValue
1702
+ }
1703
+ }
1704
+ if (templatePa) {
1705
+ paramsObj = JSON.parse(templatePa)
1706
+ }
1707
+ }
1708
+ }
1709
+ let requestParams = {}
1710
+ requestParams.requestType = requestType
1711
+ requestParams.url = url
1712
+ requestParams.paramsObj = paramsObj
1713
+
1714
+ this.$requestConfig
1715
+ .request({
1716
+ url: requestParams.url,
1717
+ method: 'get',
1718
+ })
1719
+ .then((resp) => {
1720
+ if (treeDialog.displayfield && treeDialog.resultfield) {
1721
+ let displayField = JSON.parse(treeDialog.displayfield)
1722
+ let resultfield = JSON.parse(treeDialog.resultfield)
1723
+ this.defaultProps.label = displayField.displayName
1724
+ this.treeList = resp
1725
+ this.combiTreeDisplayField = displayField
1726
+ this.combinationTreeData = this.toTreeData(
1727
+ resp,
1728
+ displayField.id,
1729
+ displayField.pid,
1730
+ displayField.displayName,
1731
+ displayField.pvalue ? displayField.pvalue : '0',
1732
+ resultfield
1733
+ )
1734
+ }
1735
+ })
1736
+ })
1737
+ },
1738
+ combiTreeClick(paramObj) {
1739
+ //组合对话框点击左树
1740
+ //清空旧的
1741
+ this.combinationTreeQuerys.splice(0)
1742
+ let combinationRule = JSON.parse(this.customDialog.combinationRule)
1743
+ if (!combinationRule.rules || combinationRule.rules.length == 0) {
1744
+ return
1745
+ }
1746
+ let rules = combinationRule.rules
1747
+ for (let i = 0; i < rules.length; i++) {
1748
+ let value = paramObj[rules[i].treeField]
1749
+ let property = rules[i].listField
1750
+ this.combinationTreeQuerys.push({
1751
+ property: property,
1752
+ value: value,
1753
+ group: 'treeGroup',
1754
+ operation: this.getOperation(rules[i].condition),
1755
+ relation: 'AND',
1756
+ })
1757
+ }
1758
+ this.search(true)
1759
+ },
1760
+ //获取运算符号
1761
+ getOperation(old) {
1762
+ if (!old) {
1763
+ return ''
1764
+ }
1765
+ if (old == 'EQ') {
1766
+ return 'EQUAL'
1767
+ }
1768
+ if (old == 'LK') {
1769
+ return 'LIKE'
1770
+ }
1771
+ if (old == 'LFK') {
1772
+ return 'LIKE'
1773
+ }
1774
+ if (old == 'IN') {
1775
+ return 'IN'
1776
+ }
1777
+ },
1778
+ toggleTree() {
1779
+ if (this.treeShow) {
1780
+ this.treeShow = false
1781
+ this.transtionWidth = '0%'
1782
+ this.toggleBtn = 'el-icon-arrow-right'
1783
+ } else {
1784
+ this.treeShow = true
1785
+ this.transtionWidth = '25%'
1786
+ this.toggleBtn = 'el-icon-arrow-left'
1787
+ }
1788
+ },
1789
+ },
1790
+ }
1791
+ </script>
1792
+ <style lang="scss" scoped>
1793
+ ::v-deep {
1794
+ .el-button--mini {
1795
+ padding: 0px 15px;
1796
+ font-size: 12px;
1797
+ border-radius: 3px;
1798
+ height: 100%;
1799
+ border-top-left-radius: 0;
1800
+ border-bottom-left-radius: 0;
1801
+ }
1802
+ .el-button--info {
1803
+ background-color: #f5f7fa;
1804
+ border-color: #e4e7ed;
1805
+ color: #c0c4cc;
1806
+ }
1807
+ .el-input__suffix {
1808
+ position: absolute;
1809
+ height: 100%;
1810
+ right: 0px !important;
1811
+ top: 0;
1812
+ text-align: center;
1813
+ color: #c0c4cc;
1814
+ -webkit-transition: all 0.3s;
1815
+ transition: all 0.3s;
1816
+ pointer-events: none;
1817
+ }
1818
+ .el-dialog__body {
1819
+ padding: 0;
1820
+ height: calc(100% - 120px);
1821
+ overflow-y: auto;
1822
+ }
1823
+ @media (max-width: 1280px) {
1824
+ .el-dialog {
1825
+ width: 96% !important;
1826
+ margin-top: 2vh !important;
1827
+ }
1828
+ }
1829
+ .el-dialog__wrapper {
1830
+ overflow: unset !important;
1831
+ &::-webkit-scrollbar {
1832
+ width: 0;
1833
+ background-color: transparent;
1834
+ }
1835
+ }
1836
+
1837
+ .el-dialog {
1838
+ height: 90%;
1839
+ min-height: 400px;
1840
+ }
1841
+ @media (max-height: 960px) {
1842
+ .el-dialog__body .el-container {
1843
+ height: 100% !important;
1844
+ }
1845
+ }
1846
+ .el-divider--vertical {
1847
+ height: 100%;
1848
+ }
1849
+ }
1850
+ .el-input__inner[aria-invalid='true'] {
1851
+ border-color: #f56c6c;
1852
+ }
1853
+
1854
+ .el-select__tags {
1855
+ background: #fff;
1856
+ margin-left: 1px;
1857
+ }
1858
+
1859
+ .left-aside {
1860
+ border-right: 1px solid #eee;
1861
+ padding: 10px;
1862
+ }
1863
+
1864
+ .org-tree {
1865
+ height: 440px;
1866
+ margin-top: 10px;
1867
+ }
1868
+
1869
+ .middle-header {
1870
+ height: unset !important;
1871
+ display: flex;
1872
+ flex-direction: row;
1873
+ flex-wrap: wrap;
1874
+ .search-item {
1875
+ display: flex;
1876
+ // width: 33.33%;
1877
+ margin-right: 12px;
1878
+ }
1879
+ .btn-wrap {
1880
+ line-height: 50px;
1881
+ }
1882
+ }
1883
+
1884
+ .org-table {
1885
+ width: 100%;
1886
+ }
1887
+
1888
+ .right-aside {
1889
+ border-left: 1px solid #eee;
1890
+ }
1891
+
1892
+ .select-aside {
1893
+ border-left: 1px solid #eee;
1894
+ }
1895
+
1896
+ .select-header {
1897
+ border-bottom: 1px solid #eee;
1898
+ height: 52px !important;
1899
+ }
1900
+
1901
+ .select-header > span {
1902
+ padding: 10px 0;
1903
+ line-height: 53px;
1904
+ }
1905
+ .select-tree-div {
1906
+ height: calc(100% - 60px);
1907
+ overflow-y: auto;
1908
+ min-height: unset;
1909
+ }
1910
+
1911
+ >>> .el-card__header {
1912
+ padding: 10px;
1913
+ }
1914
+
1915
+ >>> .el-card__body {
1916
+ padding: 10px;
1917
+ }
1918
+
1919
+ .org-find-card >>> .el-card__header {
1920
+ background: #f5f7fa;
1921
+ }
1922
+
1923
+ >>> .el-main {
1924
+ padding: 0 20px !important;
1925
+ }
1926
+
1927
+ .button-group {
1928
+ width: 70px;
1929
+ height: 170px;
1930
+ margin: 0px auto;
1931
+ position: relative;
1932
+ top: 50%;
1933
+ -webkit-transform: translateY(-50%);
1934
+ -moz-transform: translateY(-50%);
1935
+ -ms-transform: translateY(-50%);
1936
+ -o-transform: translateY(-50%);
1937
+ transform: translateY(-50%);
1938
+ }
1939
+
1940
+ .button-group > button {
1941
+ display: block;
1942
+ margin: 8px 0;
1943
+ }
1944
+ </style>