qgb-process 0.2.3 → 0.2.7

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 (502) hide show
  1. package/.env +2 -2
  2. package/.env.development +70 -70
  3. package/.env.pre +60 -60
  4. package/.env.production +48 -48
  5. package/.env.test +48 -48
  6. package/.eslintignore +4 -4
  7. package/.eslintrc.js +302 -302
  8. package/README.md +66 -66
  9. package/babel.config.js +5 -5
  10. package/commitlint.config.js +30 -30
  11. package/config/dev.env.js +7 -7
  12. package/config/index.js +82 -82
  13. package/config/prod.env.js +4 -4
  14. package/debug.log +4 -4
  15. package/index.js +6 -6
  16. package/jsconfig.json +9 -9
  17. package/lib/qgb-process.common.js +7666 -5069
  18. package/lib/qgb-process.umd.js +7666 -5069
  19. package/lib/qgb-process.umd.min.js +108 -108
  20. package/package.json +148 -148
  21. package/packages/index.js +26 -26
  22. package/public/index.html +47 -47
  23. package/public/js/qykf.js +21 -21
  24. package/src/App.vue +37 -37
  25. package/src/api/ApiExAndapp.js +24 -24
  26. package/src/api/EnterpriseAssociation.js +8 -8
  27. package/src/api/Notice.js +31 -31
  28. package/src/api/apiAcceptance/apiAcceptance.js +37 -37
  29. package/src/api/apiAddress.js +9 -9
  30. package/src/api/apiApprovalConfig.js +13 -13
  31. package/src/api/apiApprove.js +18 -18
  32. package/src/api/apiArrears/apiArrears.js +41 -41
  33. package/src/api/apiArrears/apiProjectArrears.js +16 -16
  34. package/src/api/apiArrears/index.js +15 -15
  35. package/src/api/apiAssets.js +19 -19
  36. package/src/api/apiAssociate.js +42 -42
  37. package/src/api/apiAudit/apiAudit.js +32 -32
  38. package/src/api/apiAuth.js +25 -25
  39. package/src/api/apiAuthentication.js +35 -35
  40. package/src/api/apiBankAccount/index.js +12 -12
  41. package/src/api/apiBudget/apiBudget.js +30 -30
  42. package/src/api/apiBudget/apiBudgets.js +105 -105
  43. package/src/api/apiCarRecord.js +48 -48
  44. package/src/api/apiCart.js +202 -202
  45. package/src/api/apiChangeTel.js +13 -13
  46. package/src/api/apiCheckingIn.js +95 -95
  47. package/src/api/apiCollection/index.js +13 -13
  48. package/src/api/apiContract/apiContract.js +21 -21
  49. package/src/api/apiContract/index.js +3 -3
  50. package/src/api/apiContract/quill-config.js +122 -122
  51. package/src/api/apiContractManage/apiContractManage.js +57 -57
  52. package/src/api/apiContractManage/index.js +2 -2
  53. package/src/api/apiContractManage/quill-config.js +121 -121
  54. package/src/api/apiCoping.js +22 -22
  55. package/src/api/apiCost/index.js +31 -31
  56. package/src/api/apiCreditManagement.js +16 -16
  57. package/src/api/apiCustomer/apiCustomer.js +12 -12
  58. package/src/api/apiDivisional.js +9 -9
  59. package/src/api/apiDivisionalManagementList.js +17 -17
  60. package/src/api/apiEmployeeRegularization.js +73 -73
  61. package/src/api/apiEquipmentRental.js +50 -50
  62. package/src/api/apiFormBuilder/menu.js +65 -65
  63. package/src/api/apiFormBuilder/reissueRule.js +15 -15
  64. package/src/api/apiFund/index.js +16 -16
  65. package/src/api/apiHelp.js +43 -43
  66. package/src/api/apiHome.js +24 -24
  67. package/src/api/apiIminfo.js +39 -39
  68. package/src/api/apiInventory.js +52 -52
  69. package/src/api/apiInventorySetting.js +9 -9
  70. package/src/api/apiInvoice.js +29 -29
  71. package/src/api/apiJobManage.js +15 -15
  72. package/src/api/apiLease/apiLease.js +12 -12
  73. package/src/api/apiLogisticsTransportation/apiLogisticsTransportation.js +34 -34
  74. package/src/api/apiLostPassword.js +9 -9
  75. package/src/api/apiMachine/api.js +3 -3
  76. package/src/api/apiMachine/apiCategory.js +18 -18
  77. package/src/api/apiMachine/apiHire.js +19 -19
  78. package/src/api/apiMachine/apiLease.js +27 -27
  79. package/src/api/apiMachine/apiLocation.js +4 -4
  80. package/src/api/apiMachine/apiRentInfo.js +107 -107
  81. package/src/api/apiMachine/apiRentPublish.js +14 -14
  82. package/src/api/apiMachine/apiStore.js +15 -15
  83. package/src/api/apiMachine/index.js +3 -3
  84. package/src/api/apiManagementStore/api.js +3 -3
  85. package/src/api/apiManagementStore/apiManagementStore.js +25 -25
  86. package/src/api/apiMaterCheckAndAccept/apiMaterCheckAndAccept.js +47 -47
  87. package/src/api/apiMaterCheckAndAccept/apiMechanicalSourcing.js +16 -16
  88. package/src/api/apiMaterCheckAndAccept/index.js +3 -3
  89. package/src/api/apiMaterials/aaaaaaaaaaaaaa.js +9 -9
  90. package/src/api/apiMaterials/api.js +3 -3
  91. package/src/api/apiMaterials/apiAddress.js +116 -116
  92. package/src/api/apiMaterials/apiBalanceData.js +188 -188
  93. package/src/api/apiMaterials/apiCommercialConcrete.js +36 -36
  94. package/src/api/apiMaterials/apiCommodity.js +70 -70
  95. package/src/api/apiMaterials/apiDownload.js +26 -26
  96. package/src/api/apiMaterials/apiHome.js +44 -44
  97. package/src/api/apiMaterials/apiItemBrand.js +9 -9
  98. package/src/api/apiMaterials/apiLogistics.js +72 -72
  99. package/src/api/apiMaterials/apiLogisticsReceipt.js +94 -94
  100. package/src/api/apiMaterials/apiMaterials.js +8 -8
  101. package/src/api/apiMaterials/apiMySalesOrder.js +21 -21
  102. package/src/api/apiMaterials/apiOfflineOrder.js +18 -18
  103. package/src/api/apiMaterials/apiOrder.js +183 -183
  104. package/src/api/apiMaterials/apiReceipt.js +45 -45
  105. package/src/api/apiMaterials/quill-config.js +122 -122
  106. package/src/api/apiMemberSelection.js +39 -39
  107. package/src/api/apiMessage.js +10 -10
  108. package/src/api/apiMock/mockOrder.js +98 -98
  109. package/src/api/apiMonthPlan/apiMonthPlan.js +47 -47
  110. package/src/api/apiMyBidding.js +8 -8
  111. package/src/api/apiMyMember/apiComInfo.js +17 -17
  112. package/src/api/apiMyMember/apiInviteJoin.js +24 -24
  113. package/src/api/apiMyMember/apiMember.js +24 -24
  114. package/src/api/apiMyMember/apiMemberApply.js +36 -36
  115. package/src/api/apiMyMember/apiMemberChance.js +40 -40
  116. package/src/api/apiOffer.js +40 -40
  117. package/src/api/apiOffice.js +19 -19
  118. package/src/api/apiPact.js +26 -26
  119. package/src/api/apiPassword.js +7 -7
  120. package/src/api/apiPay/apiPay.js +25 -25
  121. package/src/api/apiPaying.js +21 -21
  122. package/src/api/apiPayment/apiPayment.js +13 -13
  123. package/src/api/apiPayment/apiProjectPayment.js +13 -13
  124. package/src/api/apiPrint.js +23 -0
  125. package/src/api/apiProcess.js +65 -65
  126. package/src/api/apiProject/apiBaseList.js +29 -29
  127. package/src/api/apiProject/apiGoodsOffer.js +11 -11
  128. package/src/api/apiProject/apiInventory.js +116 -116
  129. package/src/api/apiProject/apiOfferOrder.js +12 -12
  130. package/src/api/apiProject/apiOfferQuery.js +18 -18
  131. package/src/api/apiProject/apiPlan.js +21 -21
  132. package/src/api/apiProject/apiProject.js +158 -158
  133. package/src/api/apiProjectProcurement/apiProjectProcurement.js +88 -88
  134. package/src/api/apiPurchase/apiPurchase.js +67 -67
  135. package/src/api/apiPurchaseApply.js +15 -15
  136. package/src/api/apiPurchasePay.js +16 -16
  137. package/src/api/apiRankManagement.js +24 -24
  138. package/src/api/apiRecruit.js +37 -37
  139. package/src/api/apiReimbursement/apiReimbursement.js +15 -15
  140. package/src/api/apiRisk/index.js +11 -11
  141. package/src/api/apiRoleManagement.js +15 -15
  142. package/src/api/apiRules/apiRules.js +11 -11
  143. package/src/api/apiSchedule/apiSchedule.js +17 -17
  144. package/src/api/apiSealRecord.js +52 -52
  145. package/src/api/apiSign.js +8 -8
  146. package/src/api/apiSolution/apiSolution.js +9 -9
  147. package/src/api/apiSubcontract.js +35 -35
  148. package/src/api/apiSystem/index.js +40 -40
  149. package/src/api/apiTask.js +76 -76
  150. package/src/api/apiTeam/api.js +3 -3
  151. package/src/api/apiTeam/apiUtils.js +11 -11
  152. package/src/api/apiTender.js +127 -127
  153. package/src/api/apiUser.js +24 -24
  154. package/src/api/apiUserEnterprise/api.js +3 -3
  155. package/src/api/apiUserEnterprise/apiUserEn.js +15 -15
  156. package/src/api/apiVolunteerTeam.js +11 -11
  157. package/src/api/apiWorkarea.js +33 -33
  158. package/src/api/apiXzqh.js +8 -8
  159. package/src/api/common/api.js +3 -3
  160. package/src/api/common/apiUtils.js +9 -9
  161. package/src/api/customer.js +21 -21
  162. package/src/api/evection.js +19 -19
  163. package/src/api/guide.js +9 -9
  164. package/src/api/sociaManageApi.js +30 -30
  165. package/src/assets/Area.json +1773 -1773
  166. package/src/assets/css/quill.bubble.css +952 -952
  167. package/src/assets/css/quill.core.css +397 -397
  168. package/src/assets/css/quill.snow.css +945 -945
  169. package/src/assets/data.js +284 -284
  170. package/src/assets/fonts/Read Me.txt +7 -7
  171. package/src/assets/fonts/demo-files/demo.css +155 -155
  172. package/src/assets/fonts/demo-files/demo.js +30 -30
  173. package/src/assets/fonts/demo.html +951 -951
  174. package/src/assets/fonts/fonts/icomoon.svg +130 -130
  175. package/src/assets/fonts/style.css +563 -563
  176. package/src/assets/icons/checkbox.svg +12 -12
  177. package/src/assets/icons/columns-3.svg +12 -12
  178. package/src/assets/icons/columns.svg +12 -12
  179. package/src/assets/icons/custom-table.svg +12 -12
  180. package/src/assets/icons/date.svg +19 -19
  181. package/src/assets/icons/daterange.svg +12 -12
  182. package/src/assets/icons/fuzhi.svg +11 -11
  183. package/src/assets/icons/fuzhi_03.svg +5 -5
  184. package/src/assets/icons/gaojizujian.svg +12 -12
  185. package/src/assets/icons/groupSummary.svg +12 -12
  186. package/src/assets/icons/groupTitle.svg +12 -12
  187. package/src/assets/icons/image-uploader.svg +12 -12
  188. package/src/assets/icons/input-number.svg +12 -12
  189. package/src/assets/icons/input.svg +12 -12
  190. package/src/assets/icons/quill-editor.svg +12 -12
  191. package/src/assets/icons/radio.svg +12 -12
  192. package/src/assets/icons/select.svg +12 -12
  193. package/src/assets/icons/switch.svg +12 -12
  194. package/src/assets/icons/textarea.svg +12 -12
  195. package/src/assets/icons/upload-file.svg +12 -12
  196. package/src/assets/marketplace.js +289 -289
  197. package/src/components/ComAduitNew.vue +477 -477
  198. package/src/components/CommonAduit.vue +512 -512
  199. package/src/components/CommonAduitNew.vue +906 -906
  200. package/src/components/CommonAduitNews.vue +753 -753
  201. package/src/components/CommonUEditer.vue +63 -63
  202. package/src/components/PersonCenter/Mess.vue +59 -59
  203. package/src/components/PersonCenter/Title.vue +80 -80
  204. package/src/components/SvgIcon.vue +57 -57
  205. package/src/components/XmCommonAduit.vue +761 -761
  206. package/src/components/feiyCommon.vue +713 -713
  207. package/src/components/form/card.js +5 -5
  208. package/src/components/form/chinese.js +6 -6
  209. package/src/components/form/chinessstring.js +5 -5
  210. package/src/components/form/hunhe.js +8 -8
  211. package/src/components/form/hunhecq.js +8 -8
  212. package/src/components/form/hunheh.js +8 -8
  213. package/src/components/form/num.js +12 -12
  214. package/src/components/form/numstring.js +5 -5
  215. package/src/components/form/user.js +7 -7
  216. package/src/components/form/validate.js +42 -42
  217. package/src/components/form/validcredit.js +5 -5
  218. package/src/components/fundCommonAduit.vue +661 -661
  219. package/src/components/public/BaseCustomTable.vue +71 -71
  220. package/src/components/public/BaseDialog.vue +144 -144
  221. package/src/components/public/BaseEmptyData.vue +73 -73
  222. package/src/components/public/BaseFormTitle.vue +39 -39
  223. package/src/components/public/BasePagination.vue +55 -55
  224. package/src/components/public/BaseRouter.vue +14 -14
  225. package/src/components/public/BaseUpload.vue +185 -185
  226. package/src/components/public/Bottom.vue +62 -62
  227. package/src/components/public/Footer.vue +412 -412
  228. package/src/components/public/Header.vue +30 -30
  229. package/src/components/public/LeftMenu.vue +170 -170
  230. package/src/components/public/MemberSelection coby.vue +444 -444
  231. package/src/components/public/MemberSelection.vue +487 -487
  232. package/src/components/public/NewLeftMenu.vue +418 -418
  233. package/src/components/public/PicturesPreview.vue +62 -62
  234. package/src/components/public/Popout.vue +147 -147
  235. package/src/components/public/TagLine.vue +353 -353
  236. package/src/components/public/components/BaseImageUploadDrag.vue +320 -320
  237. package/src/components/public/components/HeadBar.vue +315 -315
  238. package/src/components/public/components/MenuList.vue +110 -110
  239. package/src/components/public/components/NewHeadBar.vue +936 -936
  240. package/src/components/public/components/QuickGoods.vue +273 -273
  241. package/src/components/public/components/Search.vue +164 -164
  242. package/src/components/public/components/Userinfo.vue +383 -383
  243. package/src/components/utils/pdf.js +254 -254
  244. package/src/components/xmfyCommonAduit.vue +752 -752
  245. package/src/filters/index.js +619 -619
  246. package/src/fnc/arr.js +102 -102
  247. package/src/fnc/quill-config.js +121 -121
  248. package/src/fnc/unit.js +102 -102
  249. package/src/fnc/verify.js +187 -187
  250. package/src/fnc/verifyStatus.js +24 -24
  251. package/src/formBuilder/apiBusiness.js +67 -67
  252. package/src/formBuilder/business.js +1039 -1039
  253. package/src/formBuilder/component/components/data.js +719 -719
  254. package/src/formBuilder/component/components/purchaseIndex.vue +1109 -1109
  255. package/src/formBuilder/component/purchase.vue +35 -35
  256. package/src/formBuilder/components/app-main/components/components/GroupSummary.vue +33 -33
  257. package/src/formBuilder/components/app-main/components/components/GroupTitle.vue +33 -33
  258. package/src/formBuilder/components/app-main/components/components/bank.vue +226 -226
  259. package/src/formBuilder/components/app-main/components/components/bankFormHeard.vue +298 -298
  260. package/src/formBuilder/components/app-main/components/components/builder.vue +718 -718
  261. package/src/formBuilder/components/app-main/components/components/columns.vue +393 -393
  262. package/src/formBuilder/components/app-main/components/components/customTable.vue +1758 -1758
  263. package/src/formBuilder/components/app-main/components/components/formDep.vue +105 -105
  264. package/src/formBuilder/components/app-main/components/components/handleCode.vue +39 -39
  265. package/src/formBuilder/components/app-main/components/components/itemOption.vue +116 -116
  266. package/src/formBuilder/components/app-main/components/components/linkForm.vue +116 -116
  267. package/src/formBuilder/components/app-main/components/components/listDesign.vue +772 -772
  268. package/src/formBuilder/components/app-main/components/components/optionSolt.js +78 -78
  269. package/src/formBuilder/components/app-main/components/components/person.vue +104 -104
  270. package/src/formBuilder/components/app-main/components/components/postman.vue +40 -40
  271. package/src/formBuilder/components/app-main/components/components/previewDialog.vue +391 -391
  272. package/src/formBuilder/components/app-main/components/components/tableIndex.vue +51 -51
  273. package/src/formBuilder/components/app-main/components/components/tableList.vue +561 -561
  274. package/src/formBuilder/components/app-main/components/components/twoColumns.vue +52 -52
  275. package/src/formBuilder/components/app-main/components/main-center.vue +187 -187
  276. package/src/formBuilder/components/app-main/components/main-header.vue +351 -351
  277. package/src/formBuilder/components/app-main/components/main-left.vue +179 -179
  278. package/src/formBuilder/components/app-main/components/main-right/components/components/calculateDialog.vue +914 -914
  279. package/src/formBuilder/components/app-main/components/main-right/components/components/curTextArea.vue +338 -338
  280. package/src/formBuilder/components/app-main/components/main-right/components/components/form-item-rules.vue +190 -190
  281. package/src/formBuilder/components/app-main/components/main-right/components/components/linkageDialog.vue +25 -25
  282. package/src/formBuilder/components/app-main/components/main-right/components/components/searchMixin.js +26 -26
  283. package/src/formBuilder/components/app-main/components/main-right/components/form-config.vue +284 -284
  284. package/src/formBuilder/components/app-main/components/main-right/components/form-item-attrs.vue +407 -407
  285. package/src/formBuilder/components/app-main/components/main-right/components/form-item-config.vue +478 -478
  286. package/src/formBuilder/components/app-main/components/main-right/index.vue +203 -203
  287. package/src/formBuilder/components/app-main/index.vue +329 -329
  288. package/src/formBuilder/comps.js +283 -283
  289. package/src/formBuilder/config/button.js +63 -63
  290. package/src/formBuilder/config/cascader-panel.js +224 -224
  291. package/src/formBuilder/config/cascader.js +306 -306
  292. package/src/formBuilder/config/checkbox.js +67 -67
  293. package/src/formBuilder/config/color.js +42 -42
  294. package/src/formBuilder/config/columns.js +30 -30
  295. package/src/formBuilder/config/custom-table.js +49 -49
  296. package/src/formBuilder/config/date.js +107 -107
  297. package/src/formBuilder/config/daterange.js +47 -47
  298. package/src/formBuilder/config/datetime.js +78 -78
  299. package/src/formBuilder/config/datetimerange.js +111 -111
  300. package/src/formBuilder/config/formDep.js +37 -37
  301. package/src/formBuilder/config/groupSummary.js +23 -23
  302. package/src/formBuilder/config/groupTitle.js +23 -23
  303. package/src/formBuilder/config/handleCode.js +23 -23
  304. package/src/formBuilder/config/image-uploader.js +113 -113
  305. package/src/formBuilder/config/input.js +162 -162
  306. package/src/formBuilder/config/json-editor.js +31 -31
  307. package/src/formBuilder/config/linkForm.js +69 -69
  308. package/src/formBuilder/config/number.js +49 -49
  309. package/src/formBuilder/config/password.js +82 -82
  310. package/src/formBuilder/config/person.js +37 -37
  311. package/src/formBuilder/config/postman.js +23 -23
  312. package/src/formBuilder/config/purchase.js +19 -19
  313. package/src/formBuilder/config/quill-editor.js +66 -66
  314. package/src/formBuilder/config/radio-button.js +44 -44
  315. package/src/formBuilder/config/radio.js +69 -69
  316. package/src/formBuilder/config/rate.js +93 -93
  317. package/src/formBuilder/config/select.js +105 -105
  318. package/src/formBuilder/config/slider.js +92 -92
  319. package/src/formBuilder/config/switch.js +35 -35
  320. package/src/formBuilder/config/tag.js +79 -79
  321. package/src/formBuilder/config/text.js +18 -18
  322. package/src/formBuilder/config/textarea.js +129 -129
  323. package/src/formBuilder/config/time.js +60 -60
  324. package/src/formBuilder/config/timerange.js +94 -94
  325. package/src/formBuilder/config/tree-select.js +100 -100
  326. package/src/formBuilder/config/upload-file.js +100 -100
  327. package/src/formBuilder/config/yesno.js +39 -39
  328. package/src/formBuilder/config.js +16 -16
  329. package/src/formBuilder/extend/index.js +20 -20
  330. package/src/formBuilder/index.js +39 -39
  331. package/src/formBuilder/menuConfig.js +36 -36
  332. package/src/formBuilder/mixins/index.js +215 -215
  333. package/src/formBuilder/tool.js +101 -101
  334. package/src/function/base.js +13 -13
  335. package/src/function/findCompanyTree.js +94 -94
  336. package/src/function/formulaAnalysis.js +44 -44
  337. package/src/function/verify.js +23 -23
  338. package/src/http/index.js +219 -219
  339. package/src/http/type.js +82 -82
  340. package/src/library/AddType/Index.js +17 -17
  341. package/src/library/AddType/Index.vue +201 -201
  342. package/src/library/AreaChange/regionCascader/regionCascader.vue +155 -155
  343. package/src/library/BigImg/BigImage1/Index.js +17 -17
  344. package/src/library/BigImg/BigImage1/Index.vue +125 -125
  345. package/src/library/Button/Button1/Index.js +17 -17
  346. package/src/library/Button/Button1/Index.vue +60 -60
  347. package/src/library/Button/Button2/Index.js +17 -17
  348. package/src/library/Button/Button2/Index.vue +52 -52
  349. package/src/library/Button/Button3/Index.js +17 -17
  350. package/src/library/Button/Button3/Index.vue +56 -56
  351. package/src/library/Button/Button4/Index.js +17 -17
  352. package/src/library/Button/Button4/Index.vue +56 -56
  353. package/src/library/Button/Button5/Index.js +17 -17
  354. package/src/library/Button/Button5/Index.vue +55 -55
  355. package/src/library/Button/Button6/Index.js +17 -17
  356. package/src/library/Button/Button6/Index.vue +74 -74
  357. package/src/library/Button/Button7/Index.js +17 -17
  358. package/src/library/Button/Button7/Index.vue +56 -56
  359. package/src/library/ConfirmPlaugin/ConfirmPlaugin1/Index.js +17 -17
  360. package/src/library/ConfirmPlaugin/ConfirmPlaugin1/Index.vue +147 -147
  361. package/src/library/ConfirmPlaugin/ConfirmPlaugin2/Index.js +17 -17
  362. package/src/library/ConfirmPlaugin/ConfirmPlaugin2/Index.vue +137 -137
  363. package/src/library/ConfirmPlaugin/ConfirmPlaugin3/Index.vue +142 -142
  364. package/src/library/ConfirmPlaugin/ConfirmPlaugin4/Index.vue +141 -141
  365. package/src/library/ConfirmPlaugin/ConfirmPlaugin5/Index.vue +121 -121
  366. package/src/library/ConfirmPlaugin/ConfirmPlaugin6/Index.vue +142 -142
  367. package/src/library/Input/Input1/Index.js +17 -17
  368. package/src/library/Input/Input1/Index.vue +66 -66
  369. package/src/library/NoMessage/NoMessage0/Index.js +17 -17
  370. package/src/library/NoMessage/NoMessage0/Index.vue +60 -60
  371. package/src/library/NoMessage/NoMessage1/Index.js +17 -17
  372. package/src/library/NoMessage/NoMessage1/Index.vue +66 -66
  373. package/src/library/NoMessage/NoMessage2/Index.js +17 -17
  374. package/src/library/NoMessage/NoMessage2/Index.vue +66 -66
  375. package/src/library/Tab/Tab1/TabBox1/Index.vue +36 -36
  376. package/src/library/Tab/Tab1/TabInner1/Index.vue +70 -70
  377. package/src/library/Tab/Tab2/TabBox2/Index.vue +36 -36
  378. package/src/library/Tab/Tab2/TabInner2/Index.vue +66 -66
  379. package/src/library/Table/Table1/Td1/Index.js +17 -17
  380. package/src/library/Table/Table1/Td1/Index.vue +110 -110
  381. package/src/library/Table/Table1/Tr1/Index.js +17 -17
  382. package/src/library/Table/Table1/Tr1/Index.vue +53 -53
  383. package/src/library/Table/Table2/Td2/Index.js +17 -17
  384. package/src/library/Table/Table2/Td2/Index.vue +90 -90
  385. package/src/library/Table/Table2/Tr2/Index.js +17 -17
  386. package/src/library/Table/Table2/Tr2/Index.vue +66 -66
  387. package/src/library/Table/Table3/Td3/Index.js +17 -17
  388. package/src/library/Table/Table3/Td3/Index.vue +109 -109
  389. package/src/library/Table/Table3/Tr3/Index.js +17 -17
  390. package/src/library/Table/Table3/Tr3/Index.vue +128 -128
  391. package/src/library/Table/Table4/Td4/Index.js +17 -17
  392. package/src/library/Table/Table4/Td4/Index.vue +114 -114
  393. package/src/library/Table/Table4/Tr4/Index.js +17 -17
  394. package/src/library/Table/Table4/Tr4/Index.vue +53 -53
  395. package/src/library/Title/Title1/Index.js +17 -17
  396. package/src/library/Title/Title1/Index.vue +80 -80
  397. package/src/library/toast/Index.js +17 -17
  398. package/src/library/toast/Index.vue +86 -86
  399. package/src/main.js +161 -161
  400. package/src/mixins/Export2Excel.js +207 -207
  401. package/src/mixins/chartOption.js +110 -110
  402. package/src/mixins/companyMixins.js +84 -84
  403. package/src/mixins/quillOptions.js +15 -15
  404. package/src/mixins/validate/deviceManage.js +211 -211
  405. package/src/mixins/validate/systemConfig.js +117 -117
  406. package/src/mixins/validate/validate.js +25 -25
  407. package/src/public/apiUser/apiUser.js +10 -10
  408. package/src/public/areaFunction.js +26 -26
  409. package/src/public/link.js +91 -91
  410. package/src/public/stageData.js +495 -495
  411. package/src/public/topmenu.js +68 -68
  412. package/src/router/index.js +225 -225
  413. package/src/router/setting/BaseRoutes.js +1639 -1639
  414. package/src/router/setting/MenuDevMock.js +1570 -1570
  415. package/src/router/setting/modules/login.js +45 -45
  416. package/src/router/setting/noAuthRouter.js +109 -109
  417. package/src/router/setting/routes.js +55 -55
  418. package/src/static/css/flex.css +75 -75
  419. package/src/static/css/switch.scss +31 -31
  420. package/src/storage/cookies.js +37 -37
  421. package/src/storage/localStorage.js +36 -36
  422. package/src/storage/sessionStorage.js +25 -25
  423. package/src/store/formBuilder/formAttrDefault.js +28 -28
  424. package/src/store/formBuilder/index.js +40 -40
  425. package/src/store/index.js +553 -553
  426. package/src/styles/color.scss +24 -24
  427. package/src/styles/offer.scss +39 -39
  428. package/src/styles/s-reset.scss +52 -52
  429. package/src/styles/static-style.scss +797 -797
  430. package/src/styles/talent.scss +26 -26
  431. package/src/styles/variable.scss +69 -69
  432. package/src/styles/workflow/workflow.css +1308 -1308
  433. package/src/utils/TableFormTypeList.js +26 -26
  434. package/src/utils/allRouter.js +5579 -5579
  435. package/src/utils/auditUtil.js +535 -535
  436. package/src/utils/commonComponents.js +34 -34
  437. package/src/utils/commonFunc.js +213 -213
  438. package/src/utils/deepCopyArray.js +9 -9
  439. package/src/utils/dict.js +49 -49
  440. package/src/utils/directive.js +26 -26
  441. package/src/utils/emoji.js +16 -16
  442. package/src/utils/flator.js +18 -18
  443. package/src/utils/imMeeting.js +1180 -1180
  444. package/src/utils/index.js +105 -105
  445. package/src/utils/initRouter.js +94 -94
  446. package/src/utils/map.js +23 -23
  447. package/src/utils/passwordStrength.js +177 -177
  448. package/src/utils/style.js +30 -30
  449. package/src/utils/validate.js +30 -30
  450. package/src/views/404.vue +53 -53
  451. package/src/views/Login/Login.vue +50 -50
  452. package/src/views/Login/Passfind.vue +347 -347
  453. package/src/views/Login/Passfindnext.vue +146 -146
  454. package/src/views/Login/Sign.vue +55 -55
  455. package/src/views/Login/SignSuccessfully.vue +132 -132
  456. package/src/views/Login/appDownload.vue +224 -224
  457. package/src/views/Login/clientDownload.vue +201 -201
  458. package/src/views/Login/components/Background.vue +153 -153
  459. package/src/views/Login/components/FormLogin.vue +1001 -1001
  460. package/src/views/Login/components/FormPassFind.vue +395 -395
  461. package/src/views/Login/components/FormSign.vue +493 -493
  462. package/src/views/Login/components/Title.vue +301 -301
  463. package/src/views/Login/components/agreeMent.vue +111 -111
  464. package/src/views/Login/components/companysign.vue +1296 -1296
  465. package/src/views/Login/components/guideLogin.vue +984 -984
  466. package/src/views/formBuilder/components/addNode.vue +119 -119
  467. package/src/views/formBuilder/components/approverSelector.vue +493 -493
  468. package/src/views/formBuilder/components/baseRoute.vue +315 -315
  469. package/src/views/formBuilder/components/builderHeader.vue +106 -106
  470. package/src/views/formBuilder/components/conditionConfig.js +588 -588
  471. package/src/views/formBuilder/components/conditionNode.vue +191 -191
  472. package/src/views/formBuilder/components/dataDefault.js +147 -147
  473. package/src/views/formBuilder/components/depFormNode.vue +583 -583
  474. package/src/views/formBuilder/components/linkForm.vue +566 -566
  475. package/src/views/formBuilder/components/linkFormList.vue +821 -821
  476. package/src/views/formBuilder/components/menuConfig.vue +1752 -1752
  477. package/src/views/formBuilder/components/newNodeForm.vue +426 -426
  478. package/src/views/formBuilder/components/newsection.vue +424 -424
  479. package/src/views/formBuilder/components/nodeConditionConfig cody.vue +376 -376
  480. package/src/views/formBuilder/components/nodeConditionConfig.vue +603 -603
  481. package/src/views/formBuilder/components/nodeForm.vue +355 -355
  482. package/src/views/formBuilder/components/nodeMenu.vue +147 -147
  483. package/src/views/formBuilder/components/personNode.vue +566 -566
  484. package/src/views/formBuilder/components/planNode.vue +269 -269
  485. package/src/views/formBuilder/designListPage.vue +457 -457
  486. package/src/views/formBuilder/formDataDetail.vue +565 -565
  487. package/src/views/formBuilder/formGeneration.vue +904 -904
  488. package/src/views/formBuilder/index.vue +242 -242
  489. package/src/views/formBuilder/process-1.vue +976 -976
  490. package/src/views/formBuilder/process-2.vue +1323 -1323
  491. package/src/views/formBuilder/process.vue +662 -431
  492. package/src/views/formBuilder/processList.vue +877 -877
  493. package/src/views/formBuilder/service/ProcessBuilder.js +136 -136
  494. package/src/views/formBuilder/service/RsxzFieldCollection.js +199 -0
  495. package/src/views/formBuilder/workflow/addNode.vue +95 -95
  496. package/src/views/formBuilder/workflow/initData.js +205 -205
  497. package/src/views/formBuilder/workflow/nodeWrap.vue +731 -731
  498. package/src/views/guide.vue +227 -227
  499. package/src/views/guideIndex.vue +284 -284
  500. package/tests/unit/.eslintrc.js +5 -5
  501. package/tests/unit/example.spec.js +13 -13
  502. package/vue.config.js +287 -287
@@ -1,914 +1,914 @@
1
- <template>
2
- <div class="calculate">
3
- <el-dialog
4
- title="计算公式"
5
- :visible.sync="dialogVisible"
6
- width="50%"
7
- :modal="false"
8
- :before-close="handleClose"
9
- >
10
- <div class="cal-content">
11
- <div class="cal-desc">
12
- <h4>当前表单</h4>
13
- <ul v-if="desc && desc.length > 0">
14
- <template v-for="(item,index) in desc">
15
- <li
16
- :key="index"
17
- v-if="item.field != currentFormItem.field && item.field!='business' && item.type!='custom-table'"
18
- @click="addNotes(item)"
19
- >{{item.label}}</li>
20
- <template v-if="item.type=='custom-table' && item.treeData">
21
- <el-tree
22
- :data="item.treeData"
23
- :props="defaultProps"
24
- @node-click="handleNodeClick2"
25
- ></el-tree>
26
- </template>
27
- </template>
28
- </ul>
29
- </div>
30
- <div class="cal-desc">
31
- <h4>运算符/布尔值</h4>
32
- <el-tree
33
- :data="treeData"
34
- :props="defaultProps"
35
- @node-click="handleNodeClick"
36
- ></el-tree>
37
- </div>
38
- <div class="cal-mode">
39
- <!-- <h4>{{currentFormItem && currentFormItem.label ? currentFormItem.label : ''}}控件的值=</h4> -->
40
- <h4>公式=</h4>
41
- <div class="text-area">
42
- <curTextArea
43
- id="textArea"
44
- ref="textArea"
45
- v-model="notes"
46
- @blurFunc="blurHighLight"
47
- ></curTextArea>
48
- <!-- <div class="btn">
49
- <el-button
50
- size="mini"
51
- @click="addNotes(false)"
52
- >插入计算符</el-button>
53
- <el-button size="mini">插入函数</el-button>
54
- </div> -->
55
- </div>
56
- <div class="notes">
57
- <p>• 请从左侧面板选择字段或选项</p>
58
- <!-- <p>• 可根据业务需要选择运算符(+、-、*、/、>、<、==、!=、<=、>=)及函数</p> -->
59
- <p>• 参考场景:</p>
60
- <p class="text-indet">根据输入的数量和单价,自动计算出金额,则可将计算公式设置为:数量*单价</p>
61
- </div>
62
- </div>
63
- </div>
64
- <div
65
- style="display:none"
66
- ref="container"
67
- ></div>
68
- <span
69
- slot="footer"
70
- class="dialog-footer"
71
- >
72
- <el-button @click="handleClose">取 消</el-button>
73
- <el-button
74
- type="primary"
75
- @click="setCustomValue"
76
- >确 定</el-button>
77
- </span>
78
- </el-dialog>
79
- </div>
80
- </template>
81
-
82
- <script>
83
- import { mapGetters, mapMutations } from "vuex";
84
- import html2Canvas from "html2canvas";
85
- import { chi2Eng, isLeaglBrackets } from "@/fnc/arr.js";
86
- import _ from "lodash-es";
87
-
88
- const strReg = new RegExp(
89
- /(\{key_[0-9]+\}|[\+\-\*/]+)|\>\=|\=\=|\!\=|\<\=|\>|\<|AND|OR|NOT|\(|\)|TRUE|FALSE/g
90
- );
91
- const strRegNoG = new RegExp(
92
- /(\{key_[0-9]+\}|[\+\-\*/]+)|\>\=|\=\=|\!\=|\<\=|\>|\<|AND|OR|NOT|\(|\)|TRUE|FALSE/
93
- );
94
- const strReg1 = new RegExp(/\{key_[0-9]+\}/g);
95
- const strReg2 = new RegExp(/^\{key_[0-9]+\}$/);
96
- const engReg = new RegExp(/^[a-zA-Z]+$/);
97
- const cnReg = new RegExp(/^[\u4e00-\u9fa5]+$/);
98
- const strReg3 = new RegExp(
99
- /(\{key_[0-9]+\}[\+\-\*\/]|\>\=|\=\=|\!\=|\<\=|\>|\<|\)|AND|OR|NOT)|(\(|\>\=|\=\=|\!\=|\<\=|\>|\<|AND|OR|NOT\{key_[0-9]+\})/
100
- );
101
- const mackReg = new RegExp(
102
- /[\+\-\*\/]|[<=]+|[>=]+|[!=]+|[==]+|AND|OR|NOT|\(|\)|TRUE|FALSE/g
103
- );
104
- const mackReg1 = new RegExp(
105
- /[\+\-\*\/\(\)]+|[<=]+|[>=]+|[!=]+|[==]+|AND|OR|NOT|TRUE|FALSE/
106
- );
107
- const mackReg1_$ = new RegExp(/(^\+$|^\-$|^\*$|^\/$|^\($|^\)$)/);
108
- const mackReg1_count = new RegExp(
109
- /\{key_[0-9]+\}|[<=]+|[>=]+|[!=]+|[==]+|AND|OR|NOT|TRUE|FALSE/
110
- );
111
- const mackReg2 = /\>\=|\=\=|\!\=|\<\=|\>|\</;
112
- const mackReg3 = /AND|OR|NOT/;
113
- const logicReg = new RegExp(/(AND|OR|NOT)*/g);
114
- const mackReg4 = /\=\=|\!\=/;
115
- const flagReg = new RegExp(/[\{\}]/g);
116
- const dotReg = new RegExp(/\'(.*)\'/g);
117
- const dotReg2 = new RegExp(/\'[\s\S]*\' | \"[\s\S]*\"/g); // 匹配字符串
118
- const numReg = new RegExp(/^([0-9]{1,})$|^([0-9]{1,}[.][0-9]*)$/);
119
- export default {
120
- name: "",
121
- mixins: [],
122
- extends: {},
123
- components: {
124
- curTextArea: () => import("./curTextArea")
125
- },
126
- props: {
127
- dialogVisible: {
128
- type: Boolean,
129
- default: false
130
- }
131
- },
132
- data() {
133
- return {
134
- notes: "",
135
- // calMark: ["+", "-", "*", "/", ">", "<", "==", "!=", "<=", ">="]
136
- calMark: ["+", "-", "*", "/"],
137
- defaultProps: {
138
- children: "children",
139
- label: "label"
140
- },
141
- treeData: [
142
- {
143
- label: "算术运算符",
144
- children: [
145
- {
146
- label: "+",
147
- value: "+"
148
- },
149
- {
150
- label: "-",
151
- value: "-"
152
- },
153
- {
154
- label: "*",
155
- value: "*"
156
- },
157
- {
158
- label: "/",
159
- value: "/"
160
- },
161
- {
162
- label: "(",
163
- value: "("
164
- },
165
- {
166
- label: ")",
167
- value: ")"
168
- }
169
- ]
170
- },
171
- {
172
- label: "逻辑运算符",
173
- children: [
174
- {
175
- label: "AND",
176
- value: "AND"
177
- },
178
- {
179
- label: "OR",
180
- value: "OR"
181
- }
182
- // {
183
- // label: "NOT",
184
- // value: "NOT"
185
- // }
186
- ]
187
- },
188
- {
189
- label: "比较运算符",
190
- children: [
191
- {
192
- label: ">",
193
- value: ">"
194
- },
195
- {
196
- label: ">=",
197
- value: ">="
198
- },
199
- {
200
- label: "<",
201
- value: "<"
202
- },
203
- {
204
- label: "<=",
205
- value: "<="
206
- },
207
- {
208
- label: "==",
209
- value: "=="
210
- },
211
- {
212
- label: "!=",
213
- value: "!="
214
- }
215
- ]
216
- },
217
- {
218
- label: "布尔值",
219
- children: [
220
- {
221
- label: "TRUE",
222
- value: true
223
- },
224
- {
225
- label: "FALSE",
226
- value: false
227
- }
228
- ]
229
- }
230
- ]
231
- };
232
- },
233
- watch: {
234
- currentFormItem: {
235
- immediate: true,
236
- deep: true,
237
- handler: function(newVal) {
238
- if (newVal && newVal.customValue) {
239
- this.setNotes(newVal.customValue, newVal);
240
- }
241
- }
242
- }
243
- },
244
- computed: {
245
- ...mapGetters(["currentFormItem"]),
246
- desc: function() {
247
- const vm = this;
248
- const active = vm.$store.state.activeFormName;
249
- const curItem = vm.currentFormItem.field;
250
- const curSonItem = vm.currentFormItem.pid;
251
- const arr = vm.$store.state.list[active].map((e, i) => {
252
- const treeData = [];
253
- if (e.type == "custom-table" && e.field == curSonItem) {
254
- for (let i2 = 0; i2 < e.attrs.columns.length; i2++) {
255
- const e2 = e.attrs.columns[i2];
256
- if (e2.type != "index" && !e2.content.pid) {
257
- e2.content["pid"] = e.field;
258
- }
259
- if (
260
- e2.type != "index" &&
261
- e2.prop != curItem &&
262
- e.field == e2.content.pid
263
- ) {
264
- e2.label = e2.content.label;
265
- treeData.push(e2);
266
- }
267
- }
268
- return {
269
- attrs: e.attrs,
270
- treeData: [
271
- {
272
- label: e.label,
273
- children: treeData
274
- }
275
- ],
276
- default: e.default,
277
- error: e.error,
278
- field: e.field,
279
- label: e.label,
280
- rules: e.rules,
281
- type: e.type
282
- };
283
- } if (e.type == "columns" && e.field == curSonItem) {
284
- const obj = {}
285
- for (let i3 = 0; i3 < e.attrs.columns.length; i3++) {
286
-
287
- const e2 = e.attrs.columns[i3];
288
- obj["attrs"] = e2.attrs
289
- obj["error"] = false
290
- obj["default"] = []
291
- obj["field"] = e2.field
292
- obj["label"] = e2.label
293
- obj["rules"] = e2.rules
294
- obj["type"] = e2.type
295
- }
296
- return obj;
297
- } else {
298
- return e;
299
- }
300
- });
301
- const arr1 = arr.filter((e, i) => {
302
- var falg = _.find(vm.$store.state.list[active], function(o) { return o.field == curSonItem })?.type;
303
- if (curSonItem && falg == "custom-table") {
304
- return e.type == "custom-table";
305
- }
306
- return (
307
- e.type != "datetimerange" &&
308
- e.type != "columns" &&
309
- e.type != "upload-file" &&
310
- e.type != "image-uploader" &&
311
- e.type != "select" &&
312
- e.type != "datetime"
313
- );
314
- });
315
- debugger;
316
- return arr1;
317
- }
318
- },
319
- methods: {
320
- handleNodeClick2(item, e) {
321
- if (!item.children) {
322
- this.$refs.textArea.addNotes(item, "custom", e.parent.data.label);
323
- }
324
- },
325
- handleNodeClick(item) {
326
- if (!item.children) {
327
- this.$refs.textArea.addNotes(item, "cal");
328
- }
329
- },
330
- handleClose() {
331
- this.notes = "";
332
- this.$emit("close");
333
- },
334
- addNotes(item) {
335
- this.$refs.textArea.addNotes(item);
336
- },
337
- blurHighLight(data) {},
338
- setCustomValue() {
339
- this.analyzeComAndStr();
340
- },
341
- async setNotes(customValue, curItem) {
342
- const _this = this;
343
- // const mackReg = new RegExp(/([+\-*/\>\<])|((?<!=)\==(?!=))|((?<!=)\!=(?!=))|((?<!=)\>=(?!=))|((?<!=)\<=(?!=))/g);
344
- // const mackReg1 = new RegExp(/{(?<!=)==(?!=)}/g | /{(?<!=)==(?!=)}/g);
345
-
346
- let arrPromise = customValue.match(strReg1);
347
- if (customValue && !arrPromise) {
348
- _this.notes = customValue;
349
- } else {
350
- arrPromise = arrPromise.map((item, index) => {
351
- var node = _this.desc.filter((i, j) => item.indexOf(i.field) > -1)[0];
352
- var curPlabel = "";
353
- if (!node) {
354
- // 开始检查存在的子表
355
- const customTableArr = _this.desc.filter((e, i) => {
356
- return e.type == "custom-table";
357
- });
358
- customTableArr.map((e, i) => {
359
- if (curItem.pid == e.field) {
360
- node = _.find(e.attrs.columns, function(o) {
361
- // o.
362
- // 过滤出子表内符合条件的组件
363
- return item.indexOf(o.prop) != -1;
364
- }).content;
365
- curPlabel = e.label;
366
- }
367
- });
368
- if (node) {
369
- return _this.getLabelData(node, item, curPlabel);
370
- }
371
- }
372
-
373
- return _this.getLabelData(node, item);
374
- });
375
-
376
- Promise.all(arrPromise).then(res => {
377
- const custom = customValue.replace(strReg1, function(match) {
378
- const result = res.filter((i, k) => i[match]);
379
- return result[0][match];
380
- });
381
- console.log(custom, "@@@@@@@@@@@@@");
382
- // TODO: 这里回显计算符下拉
383
- // custom = custom.replace(mackReg, function(match) {
384
- // let str = "";
385
-
386
- // str = _this.calMark.reduce((total, item, index) => {
387
- // if (match.indexOf(item) > -1) {
388
- // return (
389
- // total +
390
- // `<option selected="selected" value ="${item}">${item}</option>`
391
- // );
392
- // } else {
393
- // return total + `<option value ="${item}">${item}</option>`;
394
- // }
395
- // }, "<select>");
396
- // str += `</select>`;
397
- // return str;
398
- // });
399
- _this.notes = custom;
400
- });
401
- }
402
- },
403
- getLabelData(node, item, curPlabel) {
404
- return new Promise((resolve, reject) => {
405
- const dom = document.createElement("span");
406
- if (curPlabel) {
407
- dom.innerHTML = `${curPlabel}.${node.label}`;
408
- } else {
409
- dom.innerHTML = node.label;
410
- }
411
- dom.style.padding = "5px 5px";
412
- dom.style.color = "#52C41A";
413
- dom.style.fontSize = "12px";
414
- dom.style.borderWidth = "1px";
415
- dom.style.borderStyle = "solid";
416
- dom.style.borderColor = "rgba(183, 235, 143, 1)";
417
- dom.style.borderRadius = "4px";
418
- dom.style.backgroundColor = "rgba(246, 255, 237, 1)";
419
- if (node.type == "switch") {
420
- dom.style.color = "rgba(0, 0, 0, 0.647058823529412)";
421
- dom.style.borderColor = "rgba(217, 217, 217, 1)";
422
- dom.style.backgroundColor = "rgba(245, 245, 245, 1)";
423
- } else if (node.attrs.type == "number") {
424
- dom.style.color = "#FA541C";
425
- dom.style.borderColor = "rgba(255, 187, 150, 1)";
426
- dom.style.backgroundColor = "rgba(255, 242, 232, 1)";
427
- } else if (node.type == "checkbox") {
428
- dom.style.color = "#b653d1";
429
- dom.style.borderColor = "#d3adf7";
430
- dom.style.backgroundColor = "#f9f0ff";
431
- } else if (node.type == "datetime") {
432
- dom.style.color = "#13c2c2";
433
- dom.style.borderColor = "#87e8de";
434
- dom.style.backgroundColor = "#e6fffb";
435
- } else if (node.type == "datetimerange") {
436
- dom.style.color = "#1890ff";
437
- dom.style.borderColor = "#91d5ff";
438
- dom.style.backgroundColor = "#e6f7ff";
439
- }
440
-
441
- dom.align = "middle";
442
- dom.style.verticalAlign = "middle";
443
- document.body.appendChild(dom);
444
- html2Canvas(dom).then(canvas => {
445
- const imageData = canvas.toDataURL("image/png");
446
- document.body.removeChild(dom);
447
- const res = `<img src="${imageData}" data-field="${node.field}" data-label="${node.label}" style="vertical-align: middle;" align="middle" margin="5px" />`;
448
- const json = {};
449
- json[item] = res;
450
- resolve(json);
451
- });
452
- });
453
- },
454
- existSameCom(regRes) {
455
- var vm = this;
456
- var flag = false;
457
- if (!regRes) {
458
- return flag;
459
- }
460
- // const CurID = "{" + this.currentFormItem.field + "}"
461
- var CurID = this.currentFormItem.field;
462
- for (var i = 0; i < regRes.length; i++) {
463
- // 拿到当前组件中输入的组件ID
464
- const e = regRes[i];
465
- if (strReg2.test(e)) {
466
- for (var i2 = 0; i2 < this.desc.length; i2++) {
467
- var e2 = this.desc[i2];
468
-
469
- if (e2.customValue && e2.customValue.includes(CurID)) {
470
- if (CurID != e2.field) {
471
- flag = true;
472
- console.log(e, e2, "找到包含😁😁😁😁");
473
- return flag;
474
- }
475
- }
476
- if (
477
- e2.customValue &&
478
- e2.customValue.includes(e) &&
479
- e2.type == "switch"
480
- ) {
481
- flag = "switch";
482
- return flag;
483
- }
484
- // if (
485
- // e2.customValue &&
486
- // e2.customValue.includes(CurID) &&
487
- // CurID != e2.field
488
- // ) {
489
- // }
490
- }
491
- }
492
- }
493
- return flag;
494
- // return new Promise((resolve, reject) => {
495
-
496
- // });
497
- },
498
- analyzeComAndStr() {
499
- const vm = this;
500
- let isComAndStr = false;
501
- let isOnlyCom = false;
502
- let str = vm.$refs.textArea.setCustomValue();
503
- let StrHandle;
504
- const regRes = str.match(strReg);
505
- const regRes2 = str.match(strReg2);
506
- const strV = str.replace(strReg1, "");
507
-
508
- const strNumber =
509
- strV.replace(mackReg, "") == ""
510
- ? ""
511
- : Number(strV.replace(mackReg, ""));
512
- // 进行运算符号过滤 将中文符号转换成英文符号
513
- str = chi2Eng(str);
514
- // str = str.replace(/“|”/g, "'");
515
- str = str.replace(/"/g, "'");
516
- // 校验组件间的公式是否互相调用
517
- if (vm.existSameCom(regRes)) {
518
- vm.$message.error(
519
- "计算公式不能设置相互赋值,例组件A=组件B,组件B=组件A"
520
- );
521
- return;
522
- }
523
-
524
- const flag = isLeaglBrackets(str);
525
- if (strReg1.test(str) && str.replace(strReg1, "") !== "") {
526
- isComAndStr = true;
527
- } else if (str.replace(strReg1, "") == "") {
528
- isOnlyCom = true;
529
- }
530
- // if (str.replace(strReg1, "")) {
531
- // isComAndStr = true;
532
- // }
533
-
534
- if (str === false) return;
535
- if (!flag) {
536
- vm.$message.error("小括号使用不合法");
537
- return;
538
- }
539
- if (dotReg.test(str) && str.replace(dotReg, "") == "") {
540
- // 输入了字符串文本 例:“我我我”
541
- // str = str.replace("'", "");
542
- if (vm.currentFormItem.attrs.type == "number") {
543
- if (typeof str != "number") {
544
- vm.$message.error("公式返回数据类型不匹配");
545
- return;
546
- }
547
- }
548
- } else if (regRes2 && isOnlyCom) {
549
- // 输入框只有组件
550
- } else if (regRes && isComAndStr) {
551
- // 输入框不仅有组件 还有其它字符
552
- // 检查组件前后是否有运算符
553
- const arr = str.split(mackReg1);
554
- const arr1 = _.compact(arr);
555
- let notAllNumberFlag = false;
556
- let curCom = "";
557
- const elementArr = [];
558
- const elementArr2 = [];
559
- const elementArr3 = [];
560
- // 检查是否使用了不同组件进行比较
561
- for (let i3 = 0; i3 < this.desc.length; i3++) {
562
- const e3 = this.desc[i3];
563
- // 先把所有组件的类型push进数组
564
- for (let i = 0; i < arr1.length; i++) {
565
- const regResE = arr1[i];
566
- var currentF2 = regResE.replace(flagReg, "");
567
- curCom = regResE;
568
- if (e3.field == currentF2) {
569
- if (mackReg2.test(str)) {
570
- elementArr.push(e3.attrs.type);
571
- }
572
- if (mackReg3.test(str)) {
573
- elementArr2.push(e3.type);
574
- }
575
- if (mackReg4.test(str)) {
576
- elementArr3.push(e3.type);
577
- }
578
- }
579
- }
580
- }
581
- // 开始比较elementArr
582
- for (let i1 = 0; i1 < elementArr.length; i1++) {
583
- const e1 = elementArr[i1];
584
- if (elementArr[i1 + 1] && e1 != elementArr[i1 + 1]) {
585
- // 如果有不同的 说明类型不一样 直接报错
586
- vm.$message.error("公式不满足组件类型要求");
587
- return;
588
- }
589
- // if (i == elementArr.length - 1) {
590
- // vm.$set(vm.currentFormItem, "customValue", str);
591
- // vm.handleClose();
592
- // return;
593
- // }
594
- }
595
- // 开始比较 elementArr2
596
- for (let i2 = 0; i2 < elementArr2.length; i2++) {
597
- const e2 = elementArr2[i2];
598
- if (e2 != "switch") {
599
- // 如果有不同的 说明类型不一样 直接报错
600
- vm.$message.error("公式不满足组件类型要求");
601
- return;
602
- }
603
- }
604
- // 开始比较 elementArr3
605
- for (let i3 = 0; i3 < elementArr3.length; i3++) {
606
- const e3 = elementArr3[i3];
607
- if (elementArr3[i3 + 1] && e3 != elementArr3[i3 + 1]) {
608
- // 如果有不同的 说明类型不一样 直接报错
609
- vm.$message.error("公式不满足组件类型要求");
610
- return;
611
- }
612
- // if (i == elementArr3.length - 1) {
613
- // vm.$set(vm.currentFormItem, "customValue", str);
614
- // vm.handleClose();
615
- // return;
616
- // }
617
- }
618
- // 这里用运算符分割数组 检查每个元素是否符合规范
619
- for (let i = 0; i < arr1.length; i++) {
620
- const e = arr1[i];
621
-
622
- if (numReg.test(e)) {
623
- continue;
624
- } else {
625
- if (!strReg2.test(e)) {
626
- notAllNumberFlag = true;
627
- }
628
- }
629
- if (vm.currentFormItem.attrs.type == "number") {
630
- if (notAllNumberFlag) {
631
- vm.$message.error("公式返回数据类型不匹配");
632
- return;
633
- }
634
- if (strReg2.test(e)) {
635
- for (let i2 = 0; i2 < vm.desc.length; i2++) {
636
- const e2 = vm.desc[i2];
637
- var currentF = e.replace(flagReg, "");
638
- if (e2.field == currentF && e2.attrs.type !== "number") {
639
- // vm.$message.error("公式返回数据类型不匹配");
640
- // return;
641
- }
642
- }
643
- }
644
- }
645
-
646
- if (!strReg2.test(e)) {
647
- vm.$message.error("公式校验失败,请检查");
648
- return;
649
- }
650
- }
651
- // 检查最后一位是否是运算符
652
- for (let i = 0; i < regRes.length; i++) {
653
- var regResE = regRes[i];
654
- if (strReg2.test(regResE)) {
655
- curCom = regResE;
656
- var currentF = regResE.replace(flagReg, "");
657
- for (let i3 = 0; i3 < this.desc.length; i3++) {
658
- const e3 = this.desc[i3];
659
- if (e3.field == currentF && e3.type == "checkbox") {
660
- vm.$message.error("公式中包含多选组件,无法进行计算操作");
661
- return;
662
- }
663
- // if (e3.field == currentF && e3.type == "switch") {
664
- // vm.$message.error("公式中包含开关组件,无法进行计算操作");
665
- // return;
666
- // }
667
- }
668
- }
669
- if (regResE == "TRUE") {
670
- regResE = true;
671
- continue;
672
- }
673
- if (regResE == "FALSE") {
674
- regResE = false;
675
- continue;
676
- }
677
-
678
- strReg1.lastIndex = 0;
679
- strReg.lastIndex = 0;
680
- if (!mackReg1_count.test(regResE) && !mackReg1_$.test(regResE)) {
681
- this.$message.error("多个运算符或组件堆积无意义");
682
- return;
683
- } else if (regResE == regRes[i + 1]) {
684
- this.$message.error("多个运算符或组件堆积无意义");
685
- return;
686
- }
687
-
688
- if (i == regRes.length - 1) {
689
- // 如果最后一位是组件 则什么也不做
690
- if (!strReg2.test(regResE)) {
691
- if (numReg.test(strNumber) == false) {
692
- // 检查如果包含数字之外的字符 则提示公式不合法
693
- if (!strNumber) {
694
- this.$message.error("公式校验失败,请检查");
695
- return;
696
- }
697
- if (mackReg.test(regResE)) {
698
- this.$message.error("运算符后缺少表达式");
699
- return;
700
- }
701
- }
702
- }
703
- }
704
- if (strReg1.test(regResE)) {
705
- if (strV) {
706
- }
707
- mackReg.lastIndex = 0;
708
- var currentF = regResE.replace(flagReg, "");
709
- for (let i2 = 0; i2 < vm.desc.length; i2++) {
710
- const e2 = vm.desc[i2];
711
-
712
- if (e2.field == currentF) {
713
- if (e2.type == "switch") {
714
- continue;
715
- }
716
-
717
- if (e2.attrs.type != "number") {
718
- if (mackReg1.test(strV) === false) {
719
- vm.$message.error("公式校验失败,请检查");
720
- return;
721
- }
722
- if (mackReg4.test(strV) && e2.type == "input") {
723
- break;
724
- }
725
-
726
- vm.$message.error("字符串间做数学运算无意义");
727
- return;
728
- }
729
- }
730
- }
731
- }
732
- StrHandle = str.replace(logicReg, function(match) {
733
- if (match == "AND") {
734
- return "&&";
735
- } else if (match == "OR") {
736
- return "||";
737
- } else if (match == "NOT") {
738
- return "!==";
739
- } else {
740
- return "";
741
- }
742
- });
743
- if (str) {
744
- try {
745
- eval(StrHandle.replace(strReg1, "1"));
746
- continue;
747
- } catch (error) {
748
- this.$message.error("公式校验失败,请检查");
749
- return;
750
- }
751
- }
752
- }
753
-
754
- // 开始计算校验
755
- const computedStr = StrHandle.replace(strReg1, 1);
756
- try {
757
- eval(computedStr);
758
- } catch (error) {
759
- vm.$message.error("公式校验失败,请检查");
760
- return;
761
- }
762
- } else if (!regRes2) {
763
- // 输入框纯字符
764
-
765
- try {
766
- // 检查组件前后是否有运算符
767
- const arr = str.split(mackReg1);
768
- const arr1 = _.compact(arr);
769
- let notAllNumberFlag = false;
770
- const curCom = "";
771
- // 这里用运算符分割数组 检查每个元素是否符合规范
772
- for (let i = 0; i < arr1.length; i++) {
773
- const e = arr1[i];
774
- if (numReg.test(e)) {
775
- continue;
776
- } else {
777
- if (!strReg2.test(e)) {
778
- notAllNumberFlag = true;
779
- }
780
- }
781
-
782
- if (vm.currentFormItem.attrs.type == "number" && notAllNumberFlag) {
783
- vm.$message.error("公式返回数据类型不匹配");
784
- return;
785
- }
786
- if (!strReg2.test(e)) {
787
- vm.$message.error("公式校验失败,请检查");
788
- return;
789
- }
790
- }
791
-
792
- if (/s*/.test(strV) && !mackReg1.test(strV)) {
793
- this.$set(this.currentFormItem, "customValue", str);
794
- this.handleClose();
795
- return;
796
- } else {
797
- eval(strV);
798
- }
799
- } catch (error) {
800
- vm.$message.error("公式不合法");
801
- return;
802
- }
803
- }
804
-
805
- this.$set(this.currentFormItem, "customValue", str);
806
-
807
- this.handleClose();
808
- }
809
- },
810
- created() {},
811
- mounted() {}
812
- };
813
- </script>
814
- <style>
815
- .calculate .el-dialog__wrapper {
816
- background: rgba(0, 0, 0, 0.5);
817
- }
818
- .cal-text {
819
- padding: 10px;
820
- height: 100%;
821
- box-sizing: border-box;
822
- outline: none;
823
- /* display: flex; */
824
- align-items: flex-start;
825
- flex-wrap: wrap;
826
- }
827
- .cal-text img {
828
- padding: 0 4px;
829
- }
830
- .cal-text select {
831
- outline: none;
832
- padding: 0 2px;
833
- }
834
- .cal-text option {
835
- outline: none;
836
- }
837
- </style>
838
- <style lang="scss" scoped>
839
- .cal-content {
840
- display: flex;
841
- .cal-desc {
842
- width: 180px;
843
- padding: 0 0px;
844
- height: 400px;
845
- border: 1px solid #e1e1e1;
846
- margin-right: 10px;
847
- border-radius: 6px;
848
- overflow-y: auto;
849
- h4 {
850
- padding: 0 10px;
851
- margin: 0;
852
- line-height: 32px;
853
- border-bottom: 1px solid #e1e1e1;
854
- }
855
- ul {
856
- margin: 0;
857
- padding: 0;
858
- li {
859
- cursor: pointer;
860
- padding: 0 0 0 10px;
861
- line-height: 30px;
862
- &:hover {
863
- background-color: #e8f4fe;
864
- }
865
- }
866
- }
867
- }
868
- .cal-mode {
869
- flex: 1;
870
- border: 1px solid #e1e1e1;
871
- border-radius: 6px;
872
- display: flex;
873
- flex-direction: column;
874
- h4 {
875
- margin: 0;
876
- line-height: 30px;
877
- padding: 0 10px;
878
- padding-left: 5px;
879
- border-bottom: 1px solid #e1e1e1;
880
- // background: #e8f4fe;
881
- }
882
- .text-area {
883
- height: 258px;
884
- flex: 1;
885
- position: relative;
886
- overflow-y: scroll;
887
- .btn {
888
- position: absolute;
889
- right: 10px;
890
- left: 0;
891
- bottom: 10px;
892
- text-align: right;
893
- }
894
- }
895
- .notes {
896
- height: 100px;
897
- padding: 0 10px 10px 10px;
898
- border-top: 1px solid #e1e1e1;
899
- p {
900
- margin: 0;
901
- line-height: 20px;
902
- font-size: 12px;
903
- color: #666;
904
- }
905
- .text-indet {
906
- text-indent: 2em;
907
- }
908
- }
909
- }
910
- }
911
- /deep/ .el-dialog__body {
912
- padding: 10px 20px;
913
- }
914
- </style>
1
+ <template>
2
+ <div class="calculate">
3
+ <el-dialog
4
+ title="计算公式"
5
+ :visible.sync="dialogVisible"
6
+ width="50%"
7
+ :modal="false"
8
+ :before-close="handleClose"
9
+ >
10
+ <div class="cal-content">
11
+ <div class="cal-desc">
12
+ <h4>当前表单</h4>
13
+ <ul v-if="desc && desc.length > 0">
14
+ <template v-for="(item,index) in desc">
15
+ <li
16
+ :key="index"
17
+ v-if="item.field != currentFormItem.field && item.field!='business' && item.type!='custom-table'"
18
+ @click="addNotes(item)"
19
+ >{{item.label}}</li>
20
+ <template v-if="item.type=='custom-table' && item.treeData">
21
+ <el-tree
22
+ :data="item.treeData"
23
+ :props="defaultProps"
24
+ @node-click="handleNodeClick2"
25
+ ></el-tree>
26
+ </template>
27
+ </template>
28
+ </ul>
29
+ </div>
30
+ <div class="cal-desc">
31
+ <h4>运算符/布尔值</h4>
32
+ <el-tree
33
+ :data="treeData"
34
+ :props="defaultProps"
35
+ @node-click="handleNodeClick"
36
+ ></el-tree>
37
+ </div>
38
+ <div class="cal-mode">
39
+ <!-- <h4>{{currentFormItem && currentFormItem.label ? currentFormItem.label : ''}}控件的值=</h4> -->
40
+ <h4>公式=</h4>
41
+ <div class="text-area">
42
+ <curTextArea
43
+ id="textArea"
44
+ ref="textArea"
45
+ v-model="notes"
46
+ @blurFunc="blurHighLight"
47
+ ></curTextArea>
48
+ <!-- <div class="btn">
49
+ <el-button
50
+ size="mini"
51
+ @click="addNotes(false)"
52
+ >插入计算符</el-button>
53
+ <el-button size="mini">插入函数</el-button>
54
+ </div> -->
55
+ </div>
56
+ <div class="notes">
57
+ <p>• 请从左侧面板选择字段或选项</p>
58
+ <!-- <p>• 可根据业务需要选择运算符(+、-、*、/、>、<、==、!=、<=、>=)及函数</p> -->
59
+ <p>• 参考场景:</p>
60
+ <p class="text-indet">根据输入的数量和单价,自动计算出金额,则可将计算公式设置为:数量*单价</p>
61
+ </div>
62
+ </div>
63
+ </div>
64
+ <div
65
+ style="display:none"
66
+ ref="container"
67
+ ></div>
68
+ <span
69
+ slot="footer"
70
+ class="dialog-footer"
71
+ >
72
+ <el-button @click="handleClose">取 消</el-button>
73
+ <el-button
74
+ type="primary"
75
+ @click="setCustomValue"
76
+ >确 定</el-button>
77
+ </span>
78
+ </el-dialog>
79
+ </div>
80
+ </template>
81
+
82
+ <script>
83
+ import { mapGetters, mapMutations } from "vuex";
84
+ import html2Canvas from "html2canvas";
85
+ import { chi2Eng, isLeaglBrackets } from "@/fnc/arr.js";
86
+ import _ from "lodash-es";
87
+
88
+ const strReg = new RegExp(
89
+ /(\{key_[0-9]+\}|[\+\-\*/]+)|\>\=|\=\=|\!\=|\<\=|\>|\<|AND|OR|NOT|\(|\)|TRUE|FALSE/g
90
+ );
91
+ const strRegNoG = new RegExp(
92
+ /(\{key_[0-9]+\}|[\+\-\*/]+)|\>\=|\=\=|\!\=|\<\=|\>|\<|AND|OR|NOT|\(|\)|TRUE|FALSE/
93
+ );
94
+ const strReg1 = new RegExp(/\{key_[0-9]+\}/g);
95
+ const strReg2 = new RegExp(/^\{key_[0-9]+\}$/);
96
+ const engReg = new RegExp(/^[a-zA-Z]+$/);
97
+ const cnReg = new RegExp(/^[\u4e00-\u9fa5]+$/);
98
+ const strReg3 = new RegExp(
99
+ /(\{key_[0-9]+\}[\+\-\*\/]|\>\=|\=\=|\!\=|\<\=|\>|\<|\)|AND|OR|NOT)|(\(|\>\=|\=\=|\!\=|\<\=|\>|\<|AND|OR|NOT\{key_[0-9]+\})/
100
+ );
101
+ const mackReg = new RegExp(
102
+ /[\+\-\*\/]|[<=]+|[>=]+|[!=]+|[==]+|AND|OR|NOT|\(|\)|TRUE|FALSE/g
103
+ );
104
+ const mackReg1 = new RegExp(
105
+ /[\+\-\*\/\(\)]+|[<=]+|[>=]+|[!=]+|[==]+|AND|OR|NOT|TRUE|FALSE/
106
+ );
107
+ const mackReg1_$ = new RegExp(/(^\+$|^\-$|^\*$|^\/$|^\($|^\)$)/);
108
+ const mackReg1_count = new RegExp(
109
+ /\{key_[0-9]+\}|[<=]+|[>=]+|[!=]+|[==]+|AND|OR|NOT|TRUE|FALSE/
110
+ );
111
+ const mackReg2 = /\>\=|\=\=|\!\=|\<\=|\>|\</;
112
+ const mackReg3 = /AND|OR|NOT/;
113
+ const logicReg = new RegExp(/(AND|OR|NOT)*/g);
114
+ const mackReg4 = /\=\=|\!\=/;
115
+ const flagReg = new RegExp(/[\{\}]/g);
116
+ const dotReg = new RegExp(/\'(.*)\'/g);
117
+ const dotReg2 = new RegExp(/\'[\s\S]*\' | \"[\s\S]*\"/g); // 匹配字符串
118
+ const numReg = new RegExp(/^([0-9]{1,})$|^([0-9]{1,}[.][0-9]*)$/);
119
+ export default {
120
+ name: "",
121
+ mixins: [],
122
+ extends: {},
123
+ components: {
124
+ curTextArea: () => import("./curTextArea")
125
+ },
126
+ props: {
127
+ dialogVisible: {
128
+ type: Boolean,
129
+ default: false
130
+ }
131
+ },
132
+ data() {
133
+ return {
134
+ notes: "",
135
+ // calMark: ["+", "-", "*", "/", ">", "<", "==", "!=", "<=", ">="]
136
+ calMark: ["+", "-", "*", "/"],
137
+ defaultProps: {
138
+ children: "children",
139
+ label: "label"
140
+ },
141
+ treeData: [
142
+ {
143
+ label: "算术运算符",
144
+ children: [
145
+ {
146
+ label: "+",
147
+ value: "+"
148
+ },
149
+ {
150
+ label: "-",
151
+ value: "-"
152
+ },
153
+ {
154
+ label: "*",
155
+ value: "*"
156
+ },
157
+ {
158
+ label: "/",
159
+ value: "/"
160
+ },
161
+ {
162
+ label: "(",
163
+ value: "("
164
+ },
165
+ {
166
+ label: ")",
167
+ value: ")"
168
+ }
169
+ ]
170
+ },
171
+ {
172
+ label: "逻辑运算符",
173
+ children: [
174
+ {
175
+ label: "AND",
176
+ value: "AND"
177
+ },
178
+ {
179
+ label: "OR",
180
+ value: "OR"
181
+ }
182
+ // {
183
+ // label: "NOT",
184
+ // value: "NOT"
185
+ // }
186
+ ]
187
+ },
188
+ {
189
+ label: "比较运算符",
190
+ children: [
191
+ {
192
+ label: ">",
193
+ value: ">"
194
+ },
195
+ {
196
+ label: ">=",
197
+ value: ">="
198
+ },
199
+ {
200
+ label: "<",
201
+ value: "<"
202
+ },
203
+ {
204
+ label: "<=",
205
+ value: "<="
206
+ },
207
+ {
208
+ label: "==",
209
+ value: "=="
210
+ },
211
+ {
212
+ label: "!=",
213
+ value: "!="
214
+ }
215
+ ]
216
+ },
217
+ {
218
+ label: "布尔值",
219
+ children: [
220
+ {
221
+ label: "TRUE",
222
+ value: true
223
+ },
224
+ {
225
+ label: "FALSE",
226
+ value: false
227
+ }
228
+ ]
229
+ }
230
+ ]
231
+ };
232
+ },
233
+ watch: {
234
+ currentFormItem: {
235
+ immediate: true,
236
+ deep: true,
237
+ handler: function(newVal) {
238
+ if (newVal && newVal.customValue) {
239
+ this.setNotes(newVal.customValue, newVal);
240
+ }
241
+ }
242
+ }
243
+ },
244
+ computed: {
245
+ ...mapGetters(["currentFormItem"]),
246
+ desc: function() {
247
+ const vm = this;
248
+ const active = vm.$store.state.activeFormName;
249
+ const curItem = vm.currentFormItem.field;
250
+ const curSonItem = vm.currentFormItem.pid;
251
+ const arr = vm.$store.state.list[active].map((e, i) => {
252
+ const treeData = [];
253
+ if (e.type == "custom-table" && e.field == curSonItem) {
254
+ for (let i2 = 0; i2 < e.attrs.columns.length; i2++) {
255
+ const e2 = e.attrs.columns[i2];
256
+ if (e2.type != "index" && !e2.content.pid) {
257
+ e2.content["pid"] = e.field;
258
+ }
259
+ if (
260
+ e2.type != "index" &&
261
+ e2.prop != curItem &&
262
+ e.field == e2.content.pid
263
+ ) {
264
+ e2.label = e2.content.label;
265
+ treeData.push(e2);
266
+ }
267
+ }
268
+ return {
269
+ attrs: e.attrs,
270
+ treeData: [
271
+ {
272
+ label: e.label,
273
+ children: treeData
274
+ }
275
+ ],
276
+ default: e.default,
277
+ error: e.error,
278
+ field: e.field,
279
+ label: e.label,
280
+ rules: e.rules,
281
+ type: e.type
282
+ };
283
+ } if (e.type == "columns" && e.field == curSonItem) {
284
+ const obj = {}
285
+ for (let i3 = 0; i3 < e.attrs.columns.length; i3++) {
286
+
287
+ const e2 = e.attrs.columns[i3];
288
+ obj["attrs"] = e2.attrs
289
+ obj["error"] = false
290
+ obj["default"] = []
291
+ obj["field"] = e2.field
292
+ obj["label"] = e2.label
293
+ obj["rules"] = e2.rules
294
+ obj["type"] = e2.type
295
+ }
296
+ return obj;
297
+ } else {
298
+ return e;
299
+ }
300
+ });
301
+ const arr1 = arr.filter((e, i) => {
302
+ var falg = _.find(vm.$store.state.list[active], function(o) { return o.field == curSonItem })?.type;
303
+ if (curSonItem && falg == "custom-table") {
304
+ return e.type == "custom-table";
305
+ }
306
+ return (
307
+ e.type != "datetimerange" &&
308
+ e.type != "columns" &&
309
+ e.type != "upload-file" &&
310
+ e.type != "image-uploader" &&
311
+ e.type != "select" &&
312
+ e.type != "datetime"
313
+ );
314
+ });
315
+ debugger;
316
+ return arr1;
317
+ }
318
+ },
319
+ methods: {
320
+ handleNodeClick2(item, e) {
321
+ if (!item.children) {
322
+ this.$refs.textArea.addNotes(item, "custom", e.parent.data.label);
323
+ }
324
+ },
325
+ handleNodeClick(item) {
326
+ if (!item.children) {
327
+ this.$refs.textArea.addNotes(item, "cal");
328
+ }
329
+ },
330
+ handleClose() {
331
+ this.notes = "";
332
+ this.$emit("close");
333
+ },
334
+ addNotes(item) {
335
+ this.$refs.textArea.addNotes(item);
336
+ },
337
+ blurHighLight(data) {},
338
+ setCustomValue() {
339
+ this.analyzeComAndStr();
340
+ },
341
+ async setNotes(customValue, curItem) {
342
+ const _this = this;
343
+ // const mackReg = new RegExp(/([+\-*/\>\<])|((?<!=)\==(?!=))|((?<!=)\!=(?!=))|((?<!=)\>=(?!=))|((?<!=)\<=(?!=))/g);
344
+ // const mackReg1 = new RegExp(/{(?<!=)==(?!=)}/g | /{(?<!=)==(?!=)}/g);
345
+
346
+ let arrPromise = customValue.match(strReg1);
347
+ if (customValue && !arrPromise) {
348
+ _this.notes = customValue;
349
+ } else {
350
+ arrPromise = arrPromise.map((item, index) => {
351
+ var node = _this.desc.filter((i, j) => item.indexOf(i.field) > -1)[0];
352
+ var curPlabel = "";
353
+ if (!node) {
354
+ // 开始检查存在的子表
355
+ const customTableArr = _this.desc.filter((e, i) => {
356
+ return e.type == "custom-table";
357
+ });
358
+ customTableArr.map((e, i) => {
359
+ if (curItem.pid == e.field) {
360
+ node = _.find(e.attrs.columns, function(o) {
361
+ // o.
362
+ // 过滤出子表内符合条件的组件
363
+ return item.indexOf(o.prop) != -1;
364
+ }).content;
365
+ curPlabel = e.label;
366
+ }
367
+ });
368
+ if (node) {
369
+ return _this.getLabelData(node, item, curPlabel);
370
+ }
371
+ }
372
+
373
+ return _this.getLabelData(node, item);
374
+ });
375
+
376
+ Promise.all(arrPromise).then(res => {
377
+ const custom = customValue.replace(strReg1, function(match) {
378
+ const result = res.filter((i, k) => i[match]);
379
+ return result[0][match];
380
+ });
381
+ console.log(custom, "@@@@@@@@@@@@@");
382
+ // TODO: 这里回显计算符下拉
383
+ // custom = custom.replace(mackReg, function(match) {
384
+ // let str = "";
385
+
386
+ // str = _this.calMark.reduce((total, item, index) => {
387
+ // if (match.indexOf(item) > -1) {
388
+ // return (
389
+ // total +
390
+ // `<option selected="selected" value ="${item}">${item}</option>`
391
+ // );
392
+ // } else {
393
+ // return total + `<option value ="${item}">${item}</option>`;
394
+ // }
395
+ // }, "<select>");
396
+ // str += `</select>`;
397
+ // return str;
398
+ // });
399
+ _this.notes = custom;
400
+ });
401
+ }
402
+ },
403
+ getLabelData(node, item, curPlabel) {
404
+ return new Promise((resolve, reject) => {
405
+ const dom = document.createElement("span");
406
+ if (curPlabel) {
407
+ dom.innerHTML = `${curPlabel}.${node.label}`;
408
+ } else {
409
+ dom.innerHTML = node.label;
410
+ }
411
+ dom.style.padding = "5px 5px";
412
+ dom.style.color = "#52C41A";
413
+ dom.style.fontSize = "12px";
414
+ dom.style.borderWidth = "1px";
415
+ dom.style.borderStyle = "solid";
416
+ dom.style.borderColor = "rgba(183, 235, 143, 1)";
417
+ dom.style.borderRadius = "4px";
418
+ dom.style.backgroundColor = "rgba(246, 255, 237, 1)";
419
+ if (node.type == "switch") {
420
+ dom.style.color = "rgba(0, 0, 0, 0.647058823529412)";
421
+ dom.style.borderColor = "rgba(217, 217, 217, 1)";
422
+ dom.style.backgroundColor = "rgba(245, 245, 245, 1)";
423
+ } else if (node.attrs.type == "number") {
424
+ dom.style.color = "#FA541C";
425
+ dom.style.borderColor = "rgba(255, 187, 150, 1)";
426
+ dom.style.backgroundColor = "rgba(255, 242, 232, 1)";
427
+ } else if (node.type == "checkbox") {
428
+ dom.style.color = "#b653d1";
429
+ dom.style.borderColor = "#d3adf7";
430
+ dom.style.backgroundColor = "#f9f0ff";
431
+ } else if (node.type == "datetime") {
432
+ dom.style.color = "#13c2c2";
433
+ dom.style.borderColor = "#87e8de";
434
+ dom.style.backgroundColor = "#e6fffb";
435
+ } else if (node.type == "datetimerange") {
436
+ dom.style.color = "#1890ff";
437
+ dom.style.borderColor = "#91d5ff";
438
+ dom.style.backgroundColor = "#e6f7ff";
439
+ }
440
+
441
+ dom.align = "middle";
442
+ dom.style.verticalAlign = "middle";
443
+ document.body.appendChild(dom);
444
+ html2Canvas(dom).then(canvas => {
445
+ const imageData = canvas.toDataURL("image/png");
446
+ document.body.removeChild(dom);
447
+ const res = `<img src="${imageData}" data-field="${node.field}" data-label="${node.label}" style="vertical-align: middle;" align="middle" margin="5px" />`;
448
+ const json = {};
449
+ json[item] = res;
450
+ resolve(json);
451
+ });
452
+ });
453
+ },
454
+ existSameCom(regRes) {
455
+ var vm = this;
456
+ var flag = false;
457
+ if (!regRes) {
458
+ return flag;
459
+ }
460
+ // const CurID = "{" + this.currentFormItem.field + "}"
461
+ var CurID = this.currentFormItem.field;
462
+ for (var i = 0; i < regRes.length; i++) {
463
+ // 拿到当前组件中输入的组件ID
464
+ const e = regRes[i];
465
+ if (strReg2.test(e)) {
466
+ for (var i2 = 0; i2 < this.desc.length; i2++) {
467
+ var e2 = this.desc[i2];
468
+
469
+ if (e2.customValue && e2.customValue.includes(CurID)) {
470
+ if (CurID != e2.field) {
471
+ flag = true;
472
+ console.log(e, e2, "找到包含😁😁😁😁");
473
+ return flag;
474
+ }
475
+ }
476
+ if (
477
+ e2.customValue &&
478
+ e2.customValue.includes(e) &&
479
+ e2.type == "switch"
480
+ ) {
481
+ flag = "switch";
482
+ return flag;
483
+ }
484
+ // if (
485
+ // e2.customValue &&
486
+ // e2.customValue.includes(CurID) &&
487
+ // CurID != e2.field
488
+ // ) {
489
+ // }
490
+ }
491
+ }
492
+ }
493
+ return flag;
494
+ // return new Promise((resolve, reject) => {
495
+
496
+ // });
497
+ },
498
+ analyzeComAndStr() {
499
+ const vm = this;
500
+ let isComAndStr = false;
501
+ let isOnlyCom = false;
502
+ let str = vm.$refs.textArea.setCustomValue();
503
+ let StrHandle;
504
+ const regRes = str.match(strReg);
505
+ const regRes2 = str.match(strReg2);
506
+ const strV = str.replace(strReg1, "");
507
+
508
+ const strNumber =
509
+ strV.replace(mackReg, "") == ""
510
+ ? ""
511
+ : Number(strV.replace(mackReg, ""));
512
+ // 进行运算符号过滤 将中文符号转换成英文符号
513
+ str = chi2Eng(str);
514
+ // str = str.replace(/“|”/g, "'");
515
+ str = str.replace(/"/g, "'");
516
+ // 校验组件间的公式是否互相调用
517
+ if (vm.existSameCom(regRes)) {
518
+ vm.$message.error(
519
+ "计算公式不能设置相互赋值,例组件A=组件B,组件B=组件A"
520
+ );
521
+ return;
522
+ }
523
+
524
+ const flag = isLeaglBrackets(str);
525
+ if (strReg1.test(str) && str.replace(strReg1, "") !== "") {
526
+ isComAndStr = true;
527
+ } else if (str.replace(strReg1, "") == "") {
528
+ isOnlyCom = true;
529
+ }
530
+ // if (str.replace(strReg1, "")) {
531
+ // isComAndStr = true;
532
+ // }
533
+
534
+ if (str === false) return;
535
+ if (!flag) {
536
+ vm.$message.error("小括号使用不合法");
537
+ return;
538
+ }
539
+ if (dotReg.test(str) && str.replace(dotReg, "") == "") {
540
+ // 输入了字符串文本 例:“我我我”
541
+ // str = str.replace("'", "");
542
+ if (vm.currentFormItem.attrs.type == "number") {
543
+ if (typeof str != "number") {
544
+ vm.$message.error("公式返回数据类型不匹配");
545
+ return;
546
+ }
547
+ }
548
+ } else if (regRes2 && isOnlyCom) {
549
+ // 输入框只有组件
550
+ } else if (regRes && isComAndStr) {
551
+ // 输入框不仅有组件 还有其它字符
552
+ // 检查组件前后是否有运算符
553
+ const arr = str.split(mackReg1);
554
+ const arr1 = _.compact(arr);
555
+ let notAllNumberFlag = false;
556
+ let curCom = "";
557
+ const elementArr = [];
558
+ const elementArr2 = [];
559
+ const elementArr3 = [];
560
+ // 检查是否使用了不同组件进行比较
561
+ for (let i3 = 0; i3 < this.desc.length; i3++) {
562
+ const e3 = this.desc[i3];
563
+ // 先把所有组件的类型push进数组
564
+ for (let i = 0; i < arr1.length; i++) {
565
+ const regResE = arr1[i];
566
+ var currentF2 = regResE.replace(flagReg, "");
567
+ curCom = regResE;
568
+ if (e3.field == currentF2) {
569
+ if (mackReg2.test(str)) {
570
+ elementArr.push(e3.attrs.type);
571
+ }
572
+ if (mackReg3.test(str)) {
573
+ elementArr2.push(e3.type);
574
+ }
575
+ if (mackReg4.test(str)) {
576
+ elementArr3.push(e3.type);
577
+ }
578
+ }
579
+ }
580
+ }
581
+ // 开始比较elementArr
582
+ for (let i1 = 0; i1 < elementArr.length; i1++) {
583
+ const e1 = elementArr[i1];
584
+ if (elementArr[i1 + 1] && e1 != elementArr[i1 + 1]) {
585
+ // 如果有不同的 说明类型不一样 直接报错
586
+ vm.$message.error("公式不满足组件类型要求");
587
+ return;
588
+ }
589
+ // if (i == elementArr.length - 1) {
590
+ // vm.$set(vm.currentFormItem, "customValue", str);
591
+ // vm.handleClose();
592
+ // return;
593
+ // }
594
+ }
595
+ // 开始比较 elementArr2
596
+ for (let i2 = 0; i2 < elementArr2.length; i2++) {
597
+ const e2 = elementArr2[i2];
598
+ if (e2 != "switch") {
599
+ // 如果有不同的 说明类型不一样 直接报错
600
+ vm.$message.error("公式不满足组件类型要求");
601
+ return;
602
+ }
603
+ }
604
+ // 开始比较 elementArr3
605
+ for (let i3 = 0; i3 < elementArr3.length; i3++) {
606
+ const e3 = elementArr3[i3];
607
+ if (elementArr3[i3 + 1] && e3 != elementArr3[i3 + 1]) {
608
+ // 如果有不同的 说明类型不一样 直接报错
609
+ vm.$message.error("公式不满足组件类型要求");
610
+ return;
611
+ }
612
+ // if (i == elementArr3.length - 1) {
613
+ // vm.$set(vm.currentFormItem, "customValue", str);
614
+ // vm.handleClose();
615
+ // return;
616
+ // }
617
+ }
618
+ // 这里用运算符分割数组 检查每个元素是否符合规范
619
+ for (let i = 0; i < arr1.length; i++) {
620
+ const e = arr1[i];
621
+
622
+ if (numReg.test(e)) {
623
+ continue;
624
+ } else {
625
+ if (!strReg2.test(e)) {
626
+ notAllNumberFlag = true;
627
+ }
628
+ }
629
+ if (vm.currentFormItem.attrs.type == "number") {
630
+ if (notAllNumberFlag) {
631
+ vm.$message.error("公式返回数据类型不匹配");
632
+ return;
633
+ }
634
+ if (strReg2.test(e)) {
635
+ for (let i2 = 0; i2 < vm.desc.length; i2++) {
636
+ const e2 = vm.desc[i2];
637
+ var currentF = e.replace(flagReg, "");
638
+ if (e2.field == currentF && e2.attrs.type !== "number") {
639
+ // vm.$message.error("公式返回数据类型不匹配");
640
+ // return;
641
+ }
642
+ }
643
+ }
644
+ }
645
+
646
+ if (!strReg2.test(e)) {
647
+ vm.$message.error("公式校验失败,请检查");
648
+ return;
649
+ }
650
+ }
651
+ // 检查最后一位是否是运算符
652
+ for (let i = 0; i < regRes.length; i++) {
653
+ var regResE = regRes[i];
654
+ if (strReg2.test(regResE)) {
655
+ curCom = regResE;
656
+ var currentF = regResE.replace(flagReg, "");
657
+ for (let i3 = 0; i3 < this.desc.length; i3++) {
658
+ const e3 = this.desc[i3];
659
+ if (e3.field == currentF && e3.type == "checkbox") {
660
+ vm.$message.error("公式中包含多选组件,无法进行计算操作");
661
+ return;
662
+ }
663
+ // if (e3.field == currentF && e3.type == "switch") {
664
+ // vm.$message.error("公式中包含开关组件,无法进行计算操作");
665
+ // return;
666
+ // }
667
+ }
668
+ }
669
+ if (regResE == "TRUE") {
670
+ regResE = true;
671
+ continue;
672
+ }
673
+ if (regResE == "FALSE") {
674
+ regResE = false;
675
+ continue;
676
+ }
677
+
678
+ strReg1.lastIndex = 0;
679
+ strReg.lastIndex = 0;
680
+ if (!mackReg1_count.test(regResE) && !mackReg1_$.test(regResE)) {
681
+ this.$message.error("多个运算符或组件堆积无意义");
682
+ return;
683
+ } else if (regResE == regRes[i + 1]) {
684
+ this.$message.error("多个运算符或组件堆积无意义");
685
+ return;
686
+ }
687
+
688
+ if (i == regRes.length - 1) {
689
+ // 如果最后一位是组件 则什么也不做
690
+ if (!strReg2.test(regResE)) {
691
+ if (numReg.test(strNumber) == false) {
692
+ // 检查如果包含数字之外的字符 则提示公式不合法
693
+ if (!strNumber) {
694
+ this.$message.error("公式校验失败,请检查");
695
+ return;
696
+ }
697
+ if (mackReg.test(regResE)) {
698
+ this.$message.error("运算符后缺少表达式");
699
+ return;
700
+ }
701
+ }
702
+ }
703
+ }
704
+ if (strReg1.test(regResE)) {
705
+ if (strV) {
706
+ }
707
+ mackReg.lastIndex = 0;
708
+ var currentF = regResE.replace(flagReg, "");
709
+ for (let i2 = 0; i2 < vm.desc.length; i2++) {
710
+ const e2 = vm.desc[i2];
711
+
712
+ if (e2.field == currentF) {
713
+ if (e2.type == "switch") {
714
+ continue;
715
+ }
716
+
717
+ if (e2.attrs.type != "number") {
718
+ if (mackReg1.test(strV) === false) {
719
+ vm.$message.error("公式校验失败,请检查");
720
+ return;
721
+ }
722
+ if (mackReg4.test(strV) && e2.type == "input") {
723
+ break;
724
+ }
725
+
726
+ vm.$message.error("字符串间做数学运算无意义");
727
+ return;
728
+ }
729
+ }
730
+ }
731
+ }
732
+ StrHandle = str.replace(logicReg, function(match) {
733
+ if (match == "AND") {
734
+ return "&&";
735
+ } else if (match == "OR") {
736
+ return "||";
737
+ } else if (match == "NOT") {
738
+ return "!==";
739
+ } else {
740
+ return "";
741
+ }
742
+ });
743
+ if (str) {
744
+ try {
745
+ eval(StrHandle.replace(strReg1, "1"));
746
+ continue;
747
+ } catch (error) {
748
+ this.$message.error("公式校验失败,请检查");
749
+ return;
750
+ }
751
+ }
752
+ }
753
+
754
+ // 开始计算校验
755
+ const computedStr = StrHandle.replace(strReg1, 1);
756
+ try {
757
+ eval(computedStr);
758
+ } catch (error) {
759
+ vm.$message.error("公式校验失败,请检查");
760
+ return;
761
+ }
762
+ } else if (!regRes2) {
763
+ // 输入框纯字符
764
+
765
+ try {
766
+ // 检查组件前后是否有运算符
767
+ const arr = str.split(mackReg1);
768
+ const arr1 = _.compact(arr);
769
+ let notAllNumberFlag = false;
770
+ const curCom = "";
771
+ // 这里用运算符分割数组 检查每个元素是否符合规范
772
+ for (let i = 0; i < arr1.length; i++) {
773
+ const e = arr1[i];
774
+ if (numReg.test(e)) {
775
+ continue;
776
+ } else {
777
+ if (!strReg2.test(e)) {
778
+ notAllNumberFlag = true;
779
+ }
780
+ }
781
+
782
+ if (vm.currentFormItem.attrs.type == "number" && notAllNumberFlag) {
783
+ vm.$message.error("公式返回数据类型不匹配");
784
+ return;
785
+ }
786
+ if (!strReg2.test(e)) {
787
+ vm.$message.error("公式校验失败,请检查");
788
+ return;
789
+ }
790
+ }
791
+
792
+ if (/s*/.test(strV) && !mackReg1.test(strV)) {
793
+ this.$set(this.currentFormItem, "customValue", str);
794
+ this.handleClose();
795
+ return;
796
+ } else {
797
+ eval(strV);
798
+ }
799
+ } catch (error) {
800
+ vm.$message.error("公式不合法");
801
+ return;
802
+ }
803
+ }
804
+
805
+ this.$set(this.currentFormItem, "customValue", str);
806
+
807
+ this.handleClose();
808
+ }
809
+ },
810
+ created() {},
811
+ mounted() {}
812
+ };
813
+ </script>
814
+ <style>
815
+ .calculate .el-dialog__wrapper {
816
+ background: rgba(0, 0, 0, 0.5);
817
+ }
818
+ .cal-text {
819
+ padding: 10px;
820
+ height: 100%;
821
+ box-sizing: border-box;
822
+ outline: none;
823
+ /* display: flex; */
824
+ align-items: flex-start;
825
+ flex-wrap: wrap;
826
+ }
827
+ .cal-text img {
828
+ padding: 0 4px;
829
+ }
830
+ .cal-text select {
831
+ outline: none;
832
+ padding: 0 2px;
833
+ }
834
+ .cal-text option {
835
+ outline: none;
836
+ }
837
+ </style>
838
+ <style lang="scss" scoped>
839
+ .cal-content {
840
+ display: flex;
841
+ .cal-desc {
842
+ width: 180px;
843
+ padding: 0 0px;
844
+ height: 400px;
845
+ border: 1px solid #e1e1e1;
846
+ margin-right: 10px;
847
+ border-radius: 6px;
848
+ overflow-y: auto;
849
+ h4 {
850
+ padding: 0 10px;
851
+ margin: 0;
852
+ line-height: 32px;
853
+ border-bottom: 1px solid #e1e1e1;
854
+ }
855
+ ul {
856
+ margin: 0;
857
+ padding: 0;
858
+ li {
859
+ cursor: pointer;
860
+ padding: 0 0 0 10px;
861
+ line-height: 30px;
862
+ &:hover {
863
+ background-color: #e8f4fe;
864
+ }
865
+ }
866
+ }
867
+ }
868
+ .cal-mode {
869
+ flex: 1;
870
+ border: 1px solid #e1e1e1;
871
+ border-radius: 6px;
872
+ display: flex;
873
+ flex-direction: column;
874
+ h4 {
875
+ margin: 0;
876
+ line-height: 30px;
877
+ padding: 0 10px;
878
+ padding-left: 5px;
879
+ border-bottom: 1px solid #e1e1e1;
880
+ // background: #e8f4fe;
881
+ }
882
+ .text-area {
883
+ height: 258px;
884
+ flex: 1;
885
+ position: relative;
886
+ overflow-y: scroll;
887
+ .btn {
888
+ position: absolute;
889
+ right: 10px;
890
+ left: 0;
891
+ bottom: 10px;
892
+ text-align: right;
893
+ }
894
+ }
895
+ .notes {
896
+ height: 100px;
897
+ padding: 0 10px 10px 10px;
898
+ border-top: 1px solid #e1e1e1;
899
+ p {
900
+ margin: 0;
901
+ line-height: 20px;
902
+ font-size: 12px;
903
+ color: #666;
904
+ }
905
+ .text-indet {
906
+ text-indent: 2em;
907
+ }
908
+ }
909
+ }
910
+ }
911
+ /deep/ .el-dialog__body {
912
+ padding: 10px 20px;
913
+ }
914
+ </style>