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,468 @@
1
+ import SubPagination from '../services/SubPagination.js'
2
+
3
+ export default {
4
+ data() {
5
+ return {
6
+ fillOrg: {},
7
+ fillOrgConfMap: {},
8
+ transitionIndex: -1,
9
+ left_image: '',
10
+ right_image: '',
11
+ }
12
+ },
13
+ computed: {
14
+ // 子表前端分页过滤器
15
+ pagingSubData() {
16
+ const me = this
17
+ return function(datapath) {
18
+ // 通过子表数据路径获取分页数据
19
+ return SubPagination.pagingByPath(datapath, me)
20
+ }
21
+ },
22
+ // 获取子表分页 offset
23
+ getPageOffset() {
24
+ return (datapath) => {
25
+ return SubPagination.getPageOffset(datapath, this)
26
+ }
27
+ },
28
+ },
29
+ mounted() {
30
+ // 如果当前表单的element为Comment说明表单加载失败了。
31
+ if (this.$el && this.$el.constructor == Comment) {
32
+ this.$emit('load-fail')
33
+ return
34
+ }
35
+ this.$validator = this.$root.$validator
36
+ if (this.permission.table) {
37
+ for (let subTableName in this.permission.table) {
38
+ if (this.permission.table[subTableName].required) {
39
+ this.addSubTableByName(subTableName)
40
+ }
41
+ }
42
+ }
43
+ this.$emit('load-success', true)
44
+ if (this.isPrint) {
45
+ this.printDetail()
46
+ }
47
+ },
48
+ methods: {
49
+ printDetail() {
50
+ window.print()
51
+ if (this.isPrint) {
52
+ this.$router.go(-1)
53
+ }
54
+ setTimeout(function() {
55
+ location.reload()
56
+ }, 200)
57
+ },
58
+ //子表上移
59
+ up(index, data) {
60
+ if (index === 0) {
61
+ this.$message({
62
+ message: '已经是列表中第一位',
63
+ type: 'warning',
64
+ })
65
+ } else {
66
+ let temp = data[index - 1]
67
+ this.$set(data, index - 1, data[index])
68
+ this.$set(data, index, temp)
69
+ }
70
+ },
71
+ //子表下移
72
+ down(index, data) {
73
+ if (index === data.length - 1) {
74
+ this.$message({
75
+ message: '已经是列表中最后一位',
76
+ type: 'warning',
77
+ })
78
+ } else {
79
+ this.isTransition = true
80
+ let i = data[index + 1]
81
+ this.$set(data, index + 1, data[index])
82
+ this.$set(data, index, i)
83
+ }
84
+ },
85
+ //子表复制数据
86
+ copy(obj, item) {
87
+ let newOne = JSON.parse(JSON.stringify(item))
88
+ //把id置空以免走的修改方法
89
+ if (newOne.id_) {
90
+ delete newOne.id_
91
+ }
92
+ if (newOne.sub_row_readonly) {
93
+ delete newOne.sub_row_readonly
94
+ }
95
+ newOne.sub_guid = this.guid()
96
+ obj.push(newOne)
97
+ this.$forceUpdate()
98
+ },
99
+ //子表默认值回填
100
+ addSubTab(subTabPath) {
101
+ let pathArr = subTabPath.split('.')
102
+ if (pathArr.length < 3) {
103
+ this.$message({
104
+ message: '子表路径有误',
105
+ type: 'warning',
106
+ })
107
+ } else {
108
+ let subTabName = pathArr[2].replace('sub_', '')
109
+ let subInitData = this.data[pathArr[1]].initData[subTabName] || {}
110
+ //判断当前子表是否存有回显值
111
+ if (
112
+ this.$parent.subBackfill &&
113
+ this.$parent.subBackfill.has(subTabPath)
114
+ ) {
115
+ subInitData = this.$parent.subBackfill.get(subTabPath)
116
+ }
117
+ //把数组里面的值为 null 转换为空字符串
118
+ let str = JSON.stringify(subInitData).replace(/null/g, '""')
119
+ let subData = JSON.parse(str)
120
+ const subDataArr = this.data[pathArr[1]][pathArr[2]]
121
+ //子表添加后的长度,因为在nextTick中,子表已经添加完毕。
122
+ const nextIndex = subDataArr.length
123
+ for (var key in subData) {
124
+ //点添加时判断要新增子表记录中的孙表是否有值
125
+ if (key.indexOf('sub_') == 0) {
126
+ if (subData[key].length > 0) {
127
+ subData[key] = [] //有则清空
128
+ }
129
+ const sunTabName = key.replace('sub_', '')
130
+ if (
131
+ this.permission.table[sunTabName] &&
132
+ (this.permission.table[sunTabName].required == true ||
133
+ this.permission.table[sunTabName].required == 'true')
134
+ ) {
135
+ this.$nextTick(() => {
136
+ this.addSunTab(`${subTabPath}.${key}`, nextIndex)
137
+ })
138
+ }
139
+ }
140
+ }
141
+ let fillObj = this.toFillOrg(pathArr[1] + '.' + pathArr[2], subData)
142
+ fillObj.sub_guid = this.guid()
143
+ subDataArr.push(fillObj)
144
+ }
145
+ },
146
+ //子表添加头部样式
147
+ handleCellStyle({ column }) {
148
+ let ColBgColor
149
+ if (column.className) {
150
+ ColBgColor = column.className.split('__')[1]
151
+ }
152
+ return ColBgColor ? { background: ColBgColor } : {}
153
+ },
154
+ //子表表头颜色
155
+ handleRowStyle(color) {
156
+ return { '--headerBgColor': color ? color : '#f4f4f4' }
157
+ },
158
+ guid() {
159
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(
160
+ c
161
+ ) {
162
+ var r = (Math.random() * 16) | 0,
163
+ v = c == 'x' ? r : (r & 0x3) | 0x8
164
+ return v.toString(16)
165
+ })
166
+ },
167
+ //孙表默认值回填
168
+ addSunTab(subTabPath, subIndex) {
169
+ let pathArr = subTabPath.split('.')
170
+ if (pathArr.length < 4) {
171
+ this.$message({
172
+ message: '孙表路径有误',
173
+ type: 'warning',
174
+ })
175
+ } else {
176
+ let subTabName = pathArr[2].replace('sub_', '')
177
+ let sunTabName = pathArr[3].replace('sub_', '')
178
+ let subTable = this.data[pathArr[1]][pathArr[2]][subIndex]
179
+ if (!subTable.hasOwnProperty(pathArr[3])) {
180
+ this.$set(subTable, pathArr[3], new Array())
181
+ }
182
+ let subInitData =
183
+ this.data[pathArr[1]].initData[subTabName].initData[sunTabName] || {}
184
+ //判断当前孙表是否存有回显值
185
+ if (
186
+ this.$parent.subBackfill &&
187
+ this.$parent.subBackfill.has(subTabPath)
188
+ ) {
189
+ //this.data[pathArr[1]][pathArr[2]].push(this.$parent.subBackfill.get(subTabPath));
190
+ subInitData = this.$parent.subBackfill.get(subTabPath)
191
+ }
192
+ //把数组里面的值为 null 转换为空字符串
193
+ let str = JSON.stringify(subInitData).replace(/null/g, '""')
194
+ if (!this.data[pathArr[1]][pathArr[2]][subIndex][pathArr[3]]) {
195
+ let key = [pathArr[3]]
196
+ let value = new Array()
197
+ this.data[pathArr[1]][pathArr[2]][subIndex][key] = value
198
+ }
199
+ let sunBodata = JSON.parse(str)
200
+ sunBodata.sub_guid = this.guid()
201
+ this.data[pathArr[1]][pathArr[2]][subIndex][pathArr[3]].push(sunBodata)
202
+ this.$forceUpdate() //迫使 Vue 实例重新渲染
203
+ }
204
+ },
205
+ addSubTableByName(subTableName) {
206
+ for (let boAlias in this.data) {
207
+ let subInitData = JSON.parse(
208
+ JSON.stringify(this.data[boAlias].initData[subTableName] || {})
209
+ )
210
+ if (
211
+ this.data[boAlias]['sub_' + subTableName] &&
212
+ this.data[boAlias]['sub_' + subTableName].length < 1
213
+ ) {
214
+ this.data[boAlias]['sub_' + subTableName].push(
215
+ JSON.parse(JSON.stringify(subInitData))
216
+ )
217
+ // 孙表必填 默认添加一条
218
+ if (this.permission.table) {
219
+ for (let tableName in this.permission.table) {
220
+ if (this.permission.table[tableName].required) {
221
+ if (
222
+ this.data[boAlias]['sub_' + subTableName][0].hasOwnProperty(
223
+ 'sub_' + tableName
224
+ ) &&
225
+ this.data[boAlias]['sub_' + subTableName][0][
226
+ 'sub_' + tableName
227
+ ] &&
228
+ this.data[boAlias]['sub_' + subTableName][0][
229
+ 'sub_' + tableName
230
+ ].length < 1
231
+ ) {
232
+ this.data[boAlias]['sub_' + subTableName][0][
233
+ 'sub_' + tableName
234
+ ].push(
235
+ JSON.parse(JSON.stringify(subInitData.initData[tableName]))
236
+ )
237
+ } else if (
238
+ this.data[boAlias]['sub_' + subTableName][0].hasOwnProperty(
239
+ 'sub_' + tableName
240
+ ) &&
241
+ !this.data[boAlias]['sub_' + subTableName][0][
242
+ 'sub_' + tableName
243
+ ]
244
+ ) {
245
+ this.data[boAlias]['sub_' + subTableName][0][
246
+ 'sub_' + tableName
247
+ ] = []
248
+ this.data[boAlias]['sub_' + subTableName][0][
249
+ 'sub_' + tableName
250
+ ].push(subInitData.initData[tableName])
251
+ }
252
+ }
253
+ }
254
+ }
255
+ }
256
+ }
257
+ },
258
+ deleteRow(subTablePath, item) {
259
+ let pathArr = subTablePath.split('.')
260
+ if (pathArr.length < 2) {
261
+ this.$message({
262
+ message: '子表路径有误',
263
+ type: 'warning',
264
+ })
265
+ } else {
266
+ let subTabName = pathArr[1].replace('sub_', '')
267
+ if (
268
+ this.data[pathArr[0]][pathArr[1]].length == 1 &&
269
+ (this.permission.table[subTabName].required == true ||
270
+ this.permission.table[subTabName].required == 'true')
271
+ ) {
272
+ this.$message({
273
+ message: '子表必填一条记录',
274
+ type: 'warning',
275
+ })
276
+ return
277
+ }
278
+ this.data[pathArr[0]][pathArr[1]].remove(item)
279
+ }
280
+ },
281
+ deleteSunRow(subTablePath, item, subIndex) {
282
+ let pathArr = subTablePath.split('.')
283
+ if (pathArr.length < 3) {
284
+ this.$message({
285
+ message: '孙表路径有误',
286
+ type: 'warning',
287
+ })
288
+ } else {
289
+ let subTabName = pathArr[1].replace('sub_', '')
290
+ let sunTabName = pathArr[2].replace('sub_', '')
291
+ if (
292
+ this.data[pathArr[0]][pathArr[1]][subIndex][pathArr[2]].length == 1 &&
293
+ (this.permission.table[sunTabName].required == true ||
294
+ this.permission.table[subTabName].required == 'true')
295
+ ) {
296
+ this.$message({
297
+ message: '孙表必填一条记录',
298
+ type: 'warning',
299
+ })
300
+ return
301
+ }
302
+ this.data[pathArr[0]][pathArr[1]][subIndex][pathArr[2]].remove(item)
303
+ }
304
+ },
305
+ clearAll(args) {
306
+ const { subTablePath, isHot, index } = args
307
+ let pathArr
308
+ if (!subTablePath) {
309
+ pathArr = args.split('.')
310
+ } else {
311
+ pathArr = subTablePath.split('.')
312
+ }
313
+
314
+ if (pathArr.length < 2) {
315
+ this.$message({
316
+ message: '子表路径有误',
317
+ type: 'warning',
318
+ })
319
+ //孙表
320
+ } else if ((index || index === 0) && pathArr.length == 3) {
321
+ const sunTabName = pathArr[2].replace('sub_', '')
322
+ if (
323
+ this.permission.table[sunTabName].required == true ||
324
+ this.permission.table[sunTabName] == 'true'
325
+ ) {
326
+ this.$message.warning('孙表必填,至少保留一条记录')
327
+ return
328
+ }
329
+ const ary = this.data[pathArr[0]][pathArr[1]][index][pathArr[2]]
330
+ ary.splice(0, ary.length)
331
+ } else {
332
+ const subTabName = pathArr[1].replace('sub_', '')
333
+ if (
334
+ this.data[pathArr[0]][pathArr[1]].length == 1 &&
335
+ (this.permission.table[subTabName].required == true ||
336
+ this.permission.table[subTabName].required == 'true')
337
+ ) {
338
+ this.$message({
339
+ message: '子表必填,至少保留一条记录。',
340
+ type: 'warning',
341
+ })
342
+ return
343
+ }
344
+ const ary = this.data[pathArr[0]][pathArr[1]]
345
+ ary.splice(0, ary.length)
346
+ if (isHot) {
347
+ const hotTableRef = 'hottable.' + subTablePath
348
+ this.$refs[hotTableRef].fillbackHotTableData(null)
349
+ }
350
+ }
351
+ },
352
+ toFillOrg(path, row) {
353
+ const fillOrgConf = this.fillOrgConfMap[path]
354
+ let fillObj = {}
355
+ if (fillOrgConf && this.fillOrg) {
356
+ if (fillOrgConf.name) {
357
+ const namePath = fillOrgConf.name.split('.')
358
+ fillObj[namePath[namePath.length - 1]] = this.fillOrg.name
359
+ }
360
+ if (fillOrgConf.id) {
361
+ const idPath = fillOrgConf.id.split('.')
362
+ fillObj[idPath[idPath.length - 1]] = this.fillOrg.id
363
+ }
364
+ if (fillOrgConf.code) {
365
+ const codePath = fillOrgConf.code.split('.')
366
+ fillObj[codePath[codePath.length - 1]] = this.fillOrg.code
367
+ }
368
+ if (fillOrgConf.instId) {
369
+ const instIdPath = fillOrgConf.instId.split('.')
370
+ fillObj[instIdPath[instIdPath.length - 1]] = this.$parent.$parent
371
+ .instId
372
+ ? this.$parent.$parent.instId
373
+ : ''
374
+ }
375
+ return { ...row, ...fillObj }
376
+ }
377
+ return row
378
+ },
379
+ initFill(path, conf) {
380
+ //收集自动回填信息
381
+ if (path && conf) {
382
+ try {
383
+ const confJson = this.fillOrgConfMap[path]
384
+ ? this.fillOrgConfMap[path]
385
+ : JSON.parse(conf)
386
+ if (
387
+ confJson.id ||
388
+ confJson.code ||
389
+ confJson.name ||
390
+ confJson.instId
391
+ ) {
392
+ this.fillOrgConfMap[path] = confJson
393
+ this.initFirstFill(path, confJson)
394
+ }
395
+ } catch (error) {
396
+ error
397
+ }
398
+ }
399
+ },
400
+ initFirstFill(path, conf) {
401
+ //处理第一行的回填
402
+ const paths = path.split('.')
403
+ if (
404
+ this.data[paths[0]][paths[1]] &&
405
+ this.data[paths[0]][paths[1]].length == 1 &&
406
+ this.fillOrg.id
407
+ ) {
408
+ if (conf.id) {
409
+ const idPath = conf.id.split('.')
410
+ if (!this.data[paths[0]][paths[1]][0][idPath[2]]) {
411
+ this.data[paths[0]][paths[1]][0][idPath[2]] = this.fillOrg.id
412
+ if (conf.code) {
413
+ const codePath = conf.code.split('.')
414
+ if (!this.data[paths[0]][paths[1]][0][codePath[2]]) {
415
+ this.data[paths[0]][paths[1]][0][
416
+ codePath[2]
417
+ ] = this.fillOrg.code
418
+ }
419
+ }
420
+ if (conf.name) {
421
+ const namePath = conf.name.split('.')
422
+ if (!this.data[paths[0]][paths[1]][0][namePath[2]]) {
423
+ this.data[paths[0]][paths[1]][0][
424
+ namePath[2]
425
+ ] = this.fillOrg.name
426
+ }
427
+ }
428
+ }
429
+ }
430
+ if (conf.instId) {
431
+ const instIdPath = conf.instId.split('.')
432
+ if (!this.data[paths[0]][paths[1]][0][instIdPath[2]]) {
433
+ this.data[paths[0]][paths[1]][0][instIdPath[2]] = this.$parent
434
+ .$parent.instId
435
+ ? this.$parent.$parent.instId
436
+ : ''
437
+ }
438
+ }
439
+ }
440
+ },
441
+ isShowAddButton(path, maxRow, subIndex) {
442
+ if (maxRow === 0) return false
443
+ let pathArr = path.split('.')
444
+ if (subIndex >= 0) {
445
+ if (pathArr.length < 4) {
446
+ this.$message({
447
+ message: '子表路径有误',
448
+ type: 'warning',
449
+ })
450
+ } else {
451
+ let data = this.data[pathArr[1]][pathArr[2]][subIndex][pathArr[3]]
452
+ return data.length >= maxRow
453
+ }
454
+ } else {
455
+ if (pathArr.length < 3) {
456
+ this.$message({
457
+ message: '子表路径有误',
458
+ type: 'warning',
459
+ })
460
+ } else {
461
+ let data = this.data[pathArr[1]][pathArr[2]]
462
+ return data.length >= maxRow
463
+ }
464
+ }
465
+ return false
466
+ },
467
+ },
468
+ }
@@ -0,0 +1,84 @@
1
+ import _ from 'lodash'
2
+ import utils from '@/utils.js'
3
+
4
+ // 组件权限和校验规则
5
+ export default {
6
+ props: {
7
+ validate: [Object, String],
8
+ permission: {
9
+ type: String,
10
+ default: 'w',
11
+ validator: function(value) {
12
+ return ['b', 'w', 'r', 'n'].indexOf(value) !== -1
13
+ },
14
+ },
15
+ },
16
+ data() {
17
+ return {
18
+ // 控件的权限(兼容子表)
19
+ permission_sub: null,
20
+ // 是否在子表中
21
+ sub_work: false,
22
+ writeable: true,
23
+ formIsView: false,
24
+ }
25
+ },
26
+ computed: {
27
+ inputWriteable: function() {
28
+ return this.writeable
29
+ ? utils.getWriteable(this.permission_sub)
30
+ : this.writeable
31
+ },
32
+ inputValidate: function() {
33
+ return utils.addRequiredOrNot(this.permission_sub, this.validate, this)
34
+ },
35
+ },
36
+ watch: {
37
+ permission: {
38
+ handler(newVal) {
39
+ if (!this.sub_work) {
40
+ this.permission_sub = _.cloneDeep(newVal)
41
+ }
42
+ },
43
+ },
44
+ formIsView: {
45
+ handler(newVal) {
46
+ if (
47
+ newVal &&
48
+ (this.permission_sub == 'w' || this.permission_sub == 'b')
49
+ ) {
50
+ this.writeable = false
51
+ }
52
+ },
53
+ },
54
+ },
55
+ created() {
56
+ this.permission_sub = _.cloneDeep(this.permission)
57
+ this.$validator = this.$root.$validator
58
+
59
+ let parent = this.$parent || this.$root
60
+ let name = parent.$options.componentName
61
+
62
+ while (parent && (!name || name !== 'ClRuntimeTemplate')) {
63
+ parent = parent.$parent
64
+
65
+ if (parent) {
66
+ name = parent.$options.componentName
67
+ }
68
+ }
69
+ if (parent) {
70
+ this.formIsView = parent.$options.propsData.isView
71
+ }
72
+ },
73
+ mounted() {
74
+ const { subScopeEl } = utils.getSubScopeElAndIndex(this.$el)
75
+ // 当前控件在子表行中,且配置了该行为只读
76
+ if (
77
+ subScopeEl &&
78
+ (subScopeEl.getAttribute('row_readonly') == 'true' ||
79
+ subScopeEl.getAttribute('row_readonly') === true)
80
+ ) {
81
+ this.writeable = false
82
+ }
83
+ },
84
+ }