cloud-web-corejs 1.1.0-dev.6 → 1.1.0-dev.60

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 (498) hide show
  1. package/README.md +38 -0
  2. package/bin/core-resources.js +16 -0
  3. package/bin/create-child-app.js +34 -0
  4. package/docs/child-app/README.md +95 -0
  5. package/docs/child-app/activiti-resources.md +63 -0
  6. package/docs/child-app/generate-prompt.md +55 -0
  7. package/docs/child-app/luckysheet-resources.md +80 -0
  8. package/docs/child-app/public-resources-plan.md +288 -0
  9. package/docs/child-app/resources-implementation.md +101 -0
  10. package/docs/child-app/tinymce-resources.md +88 -0
  11. package/docs/child-app/validation.md +34 -0
  12. package/docs/qiankun/346/216/245/345/205/245/345/215/217/350/256/256.md +298 -0
  13. package/docs/qiankun/350/257/246/346/203/205/346/211/277/350/275/275/345/255/220/345/272/224/347/224/250/345/257/271/346/216/245/346/270/205/345/215/225.md +111 -0
  14. package/package.json +29 -4
  15. package/resource-tools/index.js +126 -0
  16. package/src/app-bootstrap.js +531 -0
  17. package/src/app-bootstrap.sync.js +502 -0
  18. package/src/boot-assets.legacy.js +13 -0
  19. package/src/boot-assets.next.js +7 -0
  20. package/src/components/Qrcode/fileParse.vue +11 -0
  21. package/src/components/Tinymce/dynamicLoadScript.js +51 -59
  22. package/src/components/Tinymce/index.vue +382 -336
  23. package/src/components/Tinymce/mce-chrome.scss +150 -0
  24. package/src/components/VabUpload/image-viewer.vue +18 -10
  25. package/src/components/VabUpload/index.js +11 -4
  26. package/src/components/VabUpload/index.vue +1 -1
  27. package/src/components/VabUpload/mixins/fileLibraryDialog.js +2 -0
  28. package/src/components/VabUpload/mixins.js +72 -40
  29. package/src/components/VabUpload/partUploadConfig.js +95 -0
  30. package/src/components/VabUpload/privateProfileDialogMixins.js +2 -0
  31. package/src/components/VabUpload/style.scss +282 -0
  32. package/src/components/VabUpload/view.vue +19 -18
  33. package/src/components/baseArea/index.vue +2 -2
  34. package/src/components/baseInputExport/mixins.js +1 -6
  35. package/src/components/bizTab/BizTabListPage.vue +66 -33
  36. package/src/components/bizTab/README.md +3 -1
  37. package/src/components/bizTab/bizBillDetailMixin.js +2 -0
  38. package/src/components/code-editor/ace-chrome.scss +17 -0
  39. package/src/components/code-editor/index.vue +361 -340
  40. package/src/components/errorMsg/index.vue +142 -13
  41. package/src/components/errorMsg/mixins.js +53 -0
  42. package/src/components/excelExport/conditionExportConfig.js +112 -0
  43. package/src/components/excelExport/exportColumnMemory.js +118 -0
  44. package/src/components/excelExport/exportFieldDialog.vue +50 -38
  45. package/src/components/excelExport/exportType.js +8 -0
  46. package/src/components/excelExport/index.js +30 -13
  47. package/src/components/excelExport/index.vue +7 -1
  48. package/src/components/excelExport/mixins.js +782 -293
  49. package/src/components/excelImport/index.vue +156 -156
  50. package/src/components/excelImport/mixins.js +888 -834
  51. package/src/components/fileLibrary/mixins/indexMixins.js +2 -0
  52. package/src/components/fileLibrary/style.scss +579 -0
  53. package/src/components/formDialog/index.vue +11 -8
  54. package/src/components/hiprint/style.scss +188 -0
  55. package/src/components/hiprint/view/json-view.vue +4 -4
  56. package/src/components/jdPrint/mixins.js +2 -0
  57. package/src/components/jsonImport/index.vue +1 -1
  58. package/src/components/jsonImport/mixins.js +6 -10
  59. package/src/components/langImport/index.vue +1 -1
  60. package/src/components/langImport/mixins.js +6 -10
  61. package/src/components/luckysheet/loadResources.js +64 -0
  62. package/src/components/luckysheet/view.vue +239 -210
  63. package/src/components/mobile/buttonGroup/index.vue +1 -1
  64. package/src/components/mobile/wf/addTaskUserdialog.vue +100 -80
  65. package/src/components/mobile/wf/content.vue +1734 -1662
  66. package/src/components/mobile/wf/deleteTaskUserDialog.vue +73 -54
  67. package/src/components/mobile/wf/selectUserDialog.vue +118 -0
  68. package/src/components/mobile/wf/setCandidateDialog.vue +69 -48
  69. package/src/components/mobile/wf/urgingDialog.vue +75 -52
  70. package/src/components/mobile/wf/wfModifyDialog.vue +4 -0
  71. package/src/components/obsUpload/index.js +4 -1
  72. package/src/components/obsUpload/index.vue +1 -1
  73. package/src/components/obsUpload/mixins.js +45 -15
  74. package/src/components/onlineTalk/index.vue +4 -4
  75. package/src/components/onlineTalk/mixins.js +21 -7
  76. package/src/components/table/index.js +96 -81
  77. package/src/components/table/plugins/cell-area/index.js +10 -3
  78. package/src/components/table/style.scss +1399 -0
  79. package/src/components/table/vxeFilter/mixin.js +28 -18
  80. package/src/components/wf/content.vue +3 -2
  81. package/src/components/wf/content2.vue +1 -1
  82. package/src/components/wf/style.scss +265 -0
  83. package/src/components/wf/wf.js +7 -0
  84. package/src/components/wf/wfActionItems.js +3 -0
  85. package/src/components/wf/wfStartDialog.vue +1 -0
  86. package/src/components/wf/wfTransferEnabled.js +54 -0
  87. package/src/components/wf/wfUtil.js +47 -29
  88. package/src/components/wf/wfVisibility.js +6 -0
  89. package/src/components/xform/docs/2026-07 table/344/270/216excelExport/344/277/256/345/244/215/345/217/212/345/257/274/345/207/272/344/274/230/345/214/226.md" +64 -57
  90. package/src/components/xform/docs/2026-08 xform H5 P0 /345/256/236/347/216/260/350/247/204/346/240/274.md" +1 -1
  91. package/src/components/xform/docs/2026-08 xform /347/247/273/345/212/250/347/253/257/345/270/203/345/261/200/345/257/271/351/275/220 bill_setting /346/226/271/346/241/210.md" +1 -1
  92. package/src/components/xform/docs/2026-09 /345/212/250/346/200/201/345/255/227/346/256/265/350/247/204/345/210/231/344/270/216/346/265/201/347/250/213/346/216/247/345/210/266/346/211/247/350/241/214/351/241/272/345/272/217/350/220/275/345/234/260/346/226/271/346/241/210.md" +409 -0
  93. package/src/components/xform/docs/2026-09 /346/235/241/344/273/266/345/257/274/345/207/272/345/244/247/346/225/260/346/215/256/351/207/217/345/264/251/346/272/203/346/216/222/346/237/245.md" +389 -0
  94. package/src/components/xform/docs/2026-09 /346/265/217/350/247/210/345/231/250/345/264/251/346/272/203/346/262/273/347/220/206P0/344/273/243/347/240/201/350/257/204/345/256/241.md" +255 -0
  95. package/src/components/xform/docs/2026-09 /346/265/217/350/247/210/345/231/250/345/264/251/346/272/203/346/262/273/347/220/206P0/346/265/213/350/257/225/351/252/214/350/257/201/345/256/236/346/226/275/346/226/207/346/241/243.md" +595 -0
  96. package/src/components/xform/docs/2026-09 /347/274/226/350/276/221/350/241/250/350/241/214/345/206/205/344/277/235/345/255/230/346/240/241/351/252/214/350/214/203/345/233/264/344/270/216/345/210/227/345/277/205/345/241/253/350/247/243/346/236/220/344/277/256/345/244/215.md" +233 -0
  97. package/src/components/xform/docs/2026-09 /350/241/250/345/215/225/345/257/274/345/205/245/351/200/232/351/201/223/346/242/263/347/220/206/344/270/216/350/220/275/345/234/260/346/226/271/346/241/210.md" +745 -0
  98. package/src/components/xform/docs//346/265/217/350/247/210/345/231/250/345/264/251/346/272/203/346/262/273/347/220/206/344/270/216/344/277/256/345/244/215/350/220/275/345/234/260/346/226/271/346/241/210.md +324 -0
  99. package/src/components/xform/form-designer/designer.js +2133 -2100
  100. package/src/components/xform/form-designer/form-widget/container-widget/data-table-mixin.js +7 -0
  101. package/src/components/xform/form-designer/form-widget/container-widget/data-table-widget.vue +4 -2
  102. package/src/components/xform/form-designer/form-widget/container-widget/detail-h5-widget.vue +243 -227
  103. package/src/components/xform/form-designer/form-widget/container-widget/h5-card-pane-widget.vue +228 -207
  104. package/src/components/xform/form-designer/form-widget/container-widget/h5-card-widget.vue +165 -136
  105. package/src/components/xform/form-designer/form-widget/dialog/formDialog.vue +30 -4
  106. package/src/components/xform/form-designer/form-widget/dialog/importDialog.vue +190 -185
  107. package/src/components/xform/form-designer/form-widget/dialog/importDialogMixin.js +2657 -1774
  108. package/src/components/xform/form-designer/form-widget/dialog/searchFormDialog.vue +27 -4
  109. package/src/components/xform/form-designer/form-widget/field-widget/a-link-widget.vue +1 -1
  110. package/src/components/xform/form-designer/form-widget/field-widget/a-text-widget.vue +1 -1
  111. package/src/components/xform/form-designer/form-widget/field-widget/area-select-widget.vue +1 -1
  112. package/src/components/xform/form-designer/form-widget/field-widget/autocomplete-widget.vue +1 -1
  113. package/src/components/xform/form-designer/form-widget/field-widget/baseAttachment-widget.vue +1 -1
  114. package/src/components/xform/form-designer/form-widget/field-widget/button-widget.vue +1 -1
  115. package/src/components/xform/form-designer/form-widget/field-widget/cascader-widget.vue +1 -1
  116. package/src/components/xform/form-designer/form-widget/field-widget/census-widget.vue +1 -1
  117. package/src/components/xform/form-designer/form-widget/field-widget/checkbox-widget.vue +1 -1
  118. package/src/components/xform/form-designer/form-widget/field-widget/color-widget.vue +1 -1
  119. package/src/components/xform/form-designer/form-widget/field-widget/copy_button-widget.vue +1 -1
  120. package/src/components/xform/form-designer/form-widget/field-widget/date-range-widget.vue +1 -1
  121. package/src/components/xform/form-designer/form-widget/field-widget/date-widget.vue +1 -1
  122. package/src/components/xform/form-designer/form-widget/field-widget/descriptions-widget.vue +1 -1
  123. package/src/components/xform/form-designer/form-widget/field-widget/divider-widget.vue +1 -1
  124. package/src/components/xform/form-designer/form-widget/field-widget/download-button-widget.vue +1 -1
  125. package/src/components/xform/form-designer/form-widget/field-widget/dropdown-item-widget.vue +1 -1
  126. package/src/components/xform/form-designer/form-widget/field-widget/dropdown-widget.vue +35 -4
  127. package/src/components/xform/form-designer/form-widget/field-widget/echart-bar-widget.vue +1 -1
  128. package/src/components/xform/form-designer/form-widget/field-widget/echart-category-widget.vue +1 -1
  129. package/src/components/xform/form-designer/form-widget/field-widget/echart-pie-widget.vue +1 -1
  130. package/src/components/xform/form-designer/form-widget/field-widget/fieldMixin.js +64 -10
  131. package/src/components/xform/form-designer/form-widget/field-widget/file-upload-widget.vue +1 -1
  132. package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +14 -4
  133. package/src/components/xform/form-designer/form-widget/field-widget/html-text-widget.vue +1 -1
  134. package/src/components/xform/form-designer/form-widget/field-widget/import-button-widget.vue +19 -6
  135. package/src/components/xform/form-designer/form-widget/field-widget/import2-button-widget.vue +1 -1
  136. package/src/components/xform/form-designer/form-widget/field-widget/index.js +10 -1
  137. package/src/components/xform/form-designer/form-widget/field-widget/input-batch-widget.vue +1 -1
  138. package/src/components/xform/form-designer/form-widget/field-widget/input-widget.vue +29 -3
  139. package/src/components/xform/form-designer/form-widget/field-widget/multiSearch-widget.vue +1 -1
  140. package/src/components/xform/form-designer/form-widget/field-widget/news-list-widget.vue +1 -1
  141. package/src/components/xform/form-designer/form-widget/field-widget/number-widget.vue +1 -1
  142. package/src/components/xform/form-designer/form-widget/field-widget/oplog-widget.vue +1 -1
  143. package/src/components/xform/form-designer/form-widget/field-widget/picture-upload-widget.vue +1 -1
  144. package/src/components/xform/form-designer/form-widget/field-widget/print-button-widget.vue +1 -1
  145. package/src/components/xform/form-designer/form-widget/field-widget/print-detail-button-widget.vue +1 -1
  146. package/src/components/xform/form-designer/form-widget/field-widget/project-tag-widget.vue +1 -1
  147. package/src/components/xform/form-designer/form-widget/field-widget/radio-widget.vue +1 -1
  148. package/src/components/xform/form-designer/form-widget/field-widget/rate-widget.vue +1 -1
  149. package/src/components/xform/form-designer/form-widget/field-widget/rich-editor-widget.vue +1 -1
  150. package/src/components/xform/form-designer/form-widget/field-widget/row-col-select-widget.vue +64 -0
  151. package/src/components/xform/form-designer/form-widget/field-widget/save_submit_wf_button-widget.vue +1 -1
  152. package/src/components/xform/form-designer/form-widget/field-widget/script-input-widget.vue +1 -1
  153. package/src/components/xform/form-designer/form-widget/field-widget/search_button-widget.vue +1 -1
  154. package/src/components/xform/form-designer/form-widget/field-widget/select-export-button-widget.vue +1 -1
  155. package/src/components/xform/form-designer/form-widget/field-widget/select-export-item-button-widget.vue +6 -2
  156. package/src/components/xform/form-designer/form-widget/field-widget/select-widget.vue +1 -1
  157. package/src/components/xform/form-designer/form-widget/field-widget/singerSearch-widget.vue +1 -1
  158. package/src/components/xform/form-designer/form-widget/field-widget/singleUpload-widget.vue +145 -145
  159. package/src/components/xform/form-designer/form-widget/field-widget/slider-widget.vue +1 -1
  160. package/src/components/xform/form-designer/form-widget/field-widget/static-content-wrapper.vue +1 -1
  161. package/src/components/xform/form-designer/form-widget/field-widget/static-text-widget.vue +1 -1
  162. package/src/components/xform/form-designer/form-widget/field-widget/status-widget.vue +1 -1
  163. package/src/components/xform/form-designer/form-widget/field-widget/switch-widget.vue +1 -1
  164. package/src/components/xform/form-designer/form-widget/field-widget/table-export-button-widget.vue +3 -2
  165. package/src/components/xform/form-designer/form-widget/field-widget/tempStorage-widget.vue +1 -1
  166. package/src/components/xform/form-designer/form-widget/field-widget/text-widget.vue +1 -1
  167. package/src/components/xform/form-designer/form-widget/field-widget/textarea-widget.vue +1 -1
  168. package/src/components/xform/form-designer/form-widget/field-widget/time-range-widget.vue +1 -1
  169. package/src/components/xform/form-designer/form-widget/field-widget/time-widget.vue +1 -1
  170. package/src/components/xform/form-designer/form-widget/field-widget/title-head-widget.vue +1 -1
  171. package/src/components/xform/form-designer/form-widget/field-widget/vabSearch-widget.vue +1 -1
  172. package/src/components/xform/form-designer/form-widget/field-widget/vabUpload-widget.vue +3 -3
  173. package/src/components/xform/form-designer/form-widget/field-widget/vabUpload2-widget.vue +25 -1
  174. package/src/components/xform/form-designer/form-widget/field-widget/vue-page-widget.vue +1 -1
  175. package/src/components/xform/form-designer/indexMixin.js +27 -0
  176. package/src/components/xform/form-designer/setting-panel/form-dynamicField-setting.vue +687 -602
  177. package/src/components/xform/form-designer/setting-panel/form-setting.vue +269 -36
  178. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/data-table-editor.vue +335 -12
  179. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/table-column-dialog.vue +23 -7
  180. package/src/components/xform/form-designer/setting-panel/property-editor/container-detail/detail-temp-edito.vue +13 -1
  181. package/src/components/xform/form-designer/setting-panel/property-editor/container-list-h5/list-h5-editor.vue +846 -860
  182. package/src/components/xform/form-designer/setting-panel/property-editor/container-tab/tab-lazyRender-editor.vue +27 -0
  183. package/src/components/xform/form-designer/setting-panel/property-editor/event-handler/onTabChange-editor.vue +28 -0
  184. package/src/components/xform/form-designer/setting-panel/property-editor/event-handler/onTabClick-editor.vue +28 -0
  185. package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import-button-editor.vue +62 -1
  186. package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import2-button-editor.vue +142 -2
  187. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/empty-number-input.vue +51 -0
  188. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/select-export-item-button-editor.vue +27 -2
  189. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/table-export-button-editor.vue +33 -3
  190. package/src/components/xform/form-designer/setting-panel/property-editor/project-tag-editor.vue +2 -4
  191. package/src/components/xform/form-designer/setting-panel/property-editor/suffixIconClickable-editor.vue +23 -0
  192. package/src/components/xform/form-designer/setting-panel/propertyRegister.js +18 -4
  193. package/src/components/xform/form-designer/toolbar-panel/index.vue +884 -874
  194. package/src/components/xform/form-designer/toolbar-panel/indexMixin.js +13 -0
  195. package/src/components/xform/form-designer/widget-panel/index.vue +11 -7
  196. package/src/components/xform/form-designer/widget-panel/indexMixin.js +15 -2
  197. package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +152 -9
  198. package/src/components/xform/form-render/container-item/containerItemMixin.js +93 -8
  199. package/src/components/xform/form-render/container-item/data-table-item.vue +352 -347
  200. package/src/components/xform/form-render/container-item/data-table-mixin.js +7261 -5985
  201. package/src/components/xform/form-render/container-item/detail-h5-item.vue +48 -19
  202. package/src/components/xform/form-render/container-item/detail-item.vue +350 -446
  203. package/src/components/xform/form-render/container-item/dynamicFieldMixin.js +55 -1
  204. package/src/components/xform/form-render/container-item/list-h5-item.vue +261 -178
  205. package/src/components/xform/form-render/container-item/panel-item.vue +1 -1
  206. package/src/components/xform/form-render/container-item/tab-item.vue +177 -129
  207. package/src/components/xform/form-render/fieldControlEngine.js +218 -0
  208. package/src/components/xform/form-render/fieldControlMixin.js +536 -0
  209. package/src/components/xform/form-render/index.vue +164 -153
  210. package/src/components/xform/form-render/indexMixin.js +5443 -5311
  211. package/src/components/xform/form-render/pageDialogScope.js +54 -0
  212. package/src/components/xform/icon-picker/index.vue +1 -1
  213. package/src/components/xform/lang/en-US.js +8 -0
  214. package/src/components/xform/lang/zh-CN.js +9 -0
  215. package/src/components/xform/mixins/businessLock.js +59 -0
  216. package/src/components/xform/mixins/defaultHandle.js +713 -707
  217. package/src/components/xform/mixins/scriptHttp.js +42 -21
  218. package/src/components/xform/mixins/wfStart.js +105 -0
  219. package/src/components/xform/mixins/wfVisibility.js +33 -0
  220. package/src/components/xform/styles/census.scss +288 -0
  221. package/src/components/xform/styles/containers.scss +215 -0
  222. package/src/components/xform/styles/designer.scss +904 -0
  223. package/src/components/xform/styles/detail-temp.scss +71 -0
  224. package/src/components/xform/styles/h5-designer.scss +191 -0
  225. package/src/components/xform/styles/h5-runtime.scss +520 -0
  226. package/src/components/xform/styles/h5.scss +836 -516
  227. package/src/components/xform/styles/skins.scss +398 -0
  228. package/src/components/xform/styles/table-layout.scss +91 -0
  229. package/src/components/xform/styles/titles.scss +255 -0
  230. package/src/components/xform/utils/dynamicSchemaUtil.js +385 -361
  231. package/src/components/xform/utils/fixedQueryUtil.js +29 -4
  232. package/src/components/xform/utils/serviceNameCache.js +69 -0
  233. package/src/components/xform/utils/tableColumnHelper.js +46 -4
  234. package/src/components/xform/utils/util.js +1776 -1708
  235. package/src/core-resources/css/h5.scss +548 -0
  236. package/src/core-resources/css/iconfont.css +1447 -0
  237. package/src/core-resources/font/iconfont.ttf +0 -0
  238. package/src/core-resources/font/iconfont.woff +0 -0
  239. package/src/core-resources/font/iconfont.woff2 +0 -0
  240. package/src/core-resources/images/default-header.png +0 -0
  241. package/src/core-resources/images/ico-default_wenjian.svg +1 -0
  242. package/src/core-resources/images/ico-excel.svg +1 -0
  243. package/src/core-resources/images/ico-ftl.svg +7 -0
  244. package/src/core-resources/images/ico-html.svg +1 -0
  245. package/src/core-resources/images/ico-java.svg +1 -0
  246. package/src/core-resources/images/ico-music.svg +1 -0
  247. package/src/core-resources/images/ico-pdf.svg +1 -0
  248. package/src/core-resources/images/ico-photo.svg +1 -0
  249. package/src/core-resources/images/ico-ppt.svg +1 -0
  250. package/src/core-resources/images/ico-psd.svg +1 -0
  251. package/src/core-resources/images/ico-service.png +0 -0
  252. package/src/core-resources/images/ico-txt.svg +1 -0
  253. package/src/core-resources/images/ico-video.svg +1 -0
  254. package/src/core-resources/images/ico-vue.svg +8 -0
  255. package/src/core-resources/images/ico-wenjianjia.svg +1 -0
  256. package/src/core-resources/images/ico-wrod.svg +1 -0
  257. package/src/core-resources/images/ico-xml.svg +1 -0
  258. package/src/core-resources/images/ico-yasuobao.svg +1 -0
  259. package/src/core-resources/images/icon-error.png +0 -0
  260. package/src/core-resources/images/icon-tips.png +0 -0
  261. package/src/core-resources/images/nodata.png +0 -0
  262. package/src/core-resources/images/nodata2.png +0 -0
  263. package/src/directive/append-to-body/index.js +48 -0
  264. package/src/directive/el-dialog-center/index.js +3 -2
  265. package/src/directive/el-drag-dialog/drag.js +33 -4
  266. package/src/icons/index.js +9 -0
  267. package/src/icons/svg/404.svg +1 -0
  268. package/src/icons/svg/alert.svg +1 -0
  269. package/src/icons/svg/bug.svg +1 -0
  270. package/src/icons/svg/button.svg +1 -0
  271. package/src/icons/svg/card.svg +1 -0
  272. package/src/icons/svg/cascader-field.svg +1 -0
  273. package/src/icons/svg/census.svg +1 -0
  274. package/src/icons/svg/chart.svg +1 -0
  275. package/src/icons/svg/checkbox-field.svg +1 -0
  276. package/src/icons/svg/clipboard.svg +1 -0
  277. package/src/icons/svg/color-field.svg +1 -0
  278. package/src/icons/svg/component.svg +1 -0
  279. package/src/icons/svg/custom-component.svg +1 -0
  280. package/src/icons/svg/dashboard.svg +1 -0
  281. package/src/icons/svg/data-table.svg +1 -0
  282. package/src/icons/svg/date-field.svg +1 -0
  283. package/src/icons/svg/date-range-field.svg +1 -0
  284. package/src/icons/svg/descriptions.svg +1 -0
  285. package/src/icons/svg/divider.svg +1 -0
  286. package/src/icons/svg/document.svg +1 -0
  287. package/src/icons/svg/documentation.svg +1 -0
  288. package/src/icons/svg/drag.svg +1 -0
  289. package/src/icons/svg/echart-category.svg +1 -0
  290. package/src/icons/svg/echart-pie.svg +1 -0
  291. package/src/icons/svg/echart.svg +1 -0
  292. package/src/icons/svg/edit.svg +1 -0
  293. package/src/icons/svg/education.svg +1 -0
  294. package/src/icons/svg/email.svg +1 -0
  295. package/src/icons/svg/example.svg +1 -0
  296. package/src/icons/svg/excel.svg +1 -0
  297. package/src/icons/svg/exit-fullscreen.svg +1 -0
  298. package/src/icons/svg/eye-open.svg +1 -0
  299. package/src/icons/svg/eye.svg +1 -0
  300. package/src/icons/svg/file-upload-field.svg +1 -0
  301. package/src/icons/svg/form.svg +1 -0
  302. package/src/icons/svg/fullscreen.svg +1 -0
  303. package/src/icons/svg/github.svg +1 -0
  304. package/src/icons/svg/grid.svg +1 -0
  305. package/src/icons/svg/guide.svg +1 -0
  306. package/src/icons/svg/html-text.svg +1 -0
  307. package/src/icons/svg/ico-more.svg +1 -0
  308. package/src/icons/svg/ico-wenjianjia.svg +1 -0
  309. package/src/icons/svg/icon.svg +1 -0
  310. package/src/icons/svg/input-batch.svg +1 -0
  311. package/src/icons/svg/international.svg +1 -0
  312. package/src/icons/svg/language.svg +1 -0
  313. package/src/icons/svg/link.svg +1 -0
  314. package/src/icons/svg/list-export.svg +1 -0
  315. package/src/icons/svg/list.svg +1 -0
  316. package/src/icons/svg/lock.svg +1 -0
  317. package/src/icons/svg/message.svg +1 -0
  318. package/src/icons/svg/money.svg +1 -0
  319. package/src/icons/svg/nested.svg +1 -0
  320. package/src/icons/svg/news-list.svg +1 -0
  321. package/src/icons/svg/node-tree.svg +1 -0
  322. package/src/icons/svg/number-field.svg +1 -0
  323. package/src/icons/svg/password.svg +1 -0
  324. package/src/icons/svg/pdf.svg +1 -0
  325. package/src/icons/svg/people.svg +1 -0
  326. package/src/icons/svg/peoples.svg +1 -0
  327. package/src/icons/svg/picture-upload-field.svg +1 -0
  328. package/src/icons/svg/qq.svg +1 -0
  329. package/src/icons/svg/query.svg +1 -0
  330. package/src/icons/svg/radio-field.svg +1 -0
  331. package/src/icons/svg/rate-field.svg +1 -0
  332. package/src/icons/svg/redo.svg +1 -0
  333. package/src/icons/svg/rich-editor-field.svg +1 -0
  334. package/src/icons/svg/search.svg +1 -0
  335. package/src/icons/svg/searchbox.svg +1 -0
  336. package/src/icons/svg/section.svg +1 -0
  337. package/src/icons/svg/select-field.svg +1 -0
  338. package/src/icons/svg/shopping.svg +1 -0
  339. package/src/icons/svg/size.svg +1 -0
  340. package/src/icons/svg/skill.svg +1 -0
  341. package/src/icons/svg/slider-field.svg +1 -0
  342. package/src/icons/svg/slot-component.svg +1 -0
  343. package/src/icons/svg/slot-field.svg +1 -0
  344. package/src/icons/svg/star.svg +1 -0
  345. package/src/icons/svg/static-text.svg +1 -0
  346. package/src/icons/svg/status.svg +1 -0
  347. package/src/icons/svg/sub-form.svg +1 -0
  348. package/src/icons/svg/switch-field.svg +1 -0
  349. package/src/icons/svg/tab.svg +1 -0
  350. package/src/icons/svg/table.svg +1 -0
  351. package/src/icons/svg/text-field.svg +1 -0
  352. package/src/icons/svg/text.svg +1 -0
  353. package/src/icons/svg/textarea-field.svg +1 -0
  354. package/src/icons/svg/theme.svg +1 -0
  355. package/src/icons/svg/time-field.svg +1 -0
  356. package/src/icons/svg/time-range-field.svg +1 -0
  357. package/src/icons/svg/tips-text.svg +1 -0
  358. package/src/icons/svg/title-head.svg +1 -0
  359. package/src/icons/svg/tree-pane.svg +1 -0
  360. package/src/icons/svg/tree-table.svg +1 -0
  361. package/src/icons/svg/tree.svg +1 -0
  362. package/src/icons/svg/undo.svg +1 -0
  363. package/src/icons/svg/uploadbox.svg +1 -0
  364. package/src/icons/svg/user.svg +1 -0
  365. package/src/icons/svg/vf-box.svg +1 -0
  366. package/src/icons/svg/vf-dialog.svg +1 -0
  367. package/src/icons/svg/vf-drawer.svg +1 -0
  368. package/src/icons/svg/vue-sfc.svg +1 -0
  369. package/src/icons/svg/wechat.svg +1 -0
  370. package/src/icons/svg/zip.svg +1 -0
  371. package/src/index.js +2 -510
  372. package/src/index.next.js +5 -0
  373. package/src/index.sync.js +5 -0
  374. package/src/layout/components/Sidebar/default.vue +1656 -1655
  375. package/src/layout/components/TagsView/index.vue +330 -323
  376. package/src/layout/components/TagsView/style.scss +92 -0
  377. package/src/layout/defaultLayout.vue +2 -2
  378. package/src/router/index.js +43 -48
  379. package/src/router/modules/customer.js +12 -0
  380. package/src/store/modules/settings.js +1 -1
  381. package/src/store/modules/tagsView.js +241 -217
  382. package/src/store/modules/user.js +16 -12
  383. package/src/styles/btn.scss +315 -0
  384. package/src/styles/dialog.scss +1710 -0
  385. package/src/styles/element-ui.scss +1076 -0
  386. package/src/styles/element-variables.scss +31 -0
  387. package/src/styles/global.scss +115 -0
  388. package/src/styles/index.scss +245 -0
  389. package/src/styles/layout-skins.scss +840 -0
  390. package/src/styles/legacy-base.scss +19 -0
  391. package/src/styles/menu-icons.scss +75 -0
  392. package/src/styles/mixin.scss +80 -0
  393. package/src/styles/nprogress.scss +14 -0
  394. package/src/styles/page-shell.scss +723 -0
  395. package/src/styles/sidebar.scss +296 -0
  396. package/src/styles/split-handle.scss +52 -0
  397. package/src/styles/theme-variables.scss +7 -0
  398. package/src/styles/transition.scss +48 -0
  399. package/src/styles/utilities.scss +253 -0
  400. package/src/styles/variables.scss +72 -0
  401. package/src/utils/baseDictsCache.js +197 -0
  402. package/src/utils/chunkLoadError.js +24 -0
  403. package/src/utils/featureResources.js +57 -0
  404. package/src/utils/importLimit.js +72 -0
  405. package/src/utils/pdfUtil.js +6 -1
  406. package/src/utils/request.js +142 -7
  407. package/src/utils/resolveViewComponent.js +45 -90
  408. package/src/utils/runtimeRecovery.js +105 -0
  409. package/src/utils/swiperLoader.js +20 -0
  410. package/src/utils/vab.js +1334 -1283
  411. package/src/utils/xlsxLoader.js +29 -0
  412. package/src/views/bd/setting/formVersion/compareContMixin.scss +1 -1
  413. package/src/views/bd/setting/form_template/edit.vue +378 -356
  414. package/src/views/bd/setting/form_template/formDesignerDialog.vue +6 -0
  415. package/src/views/bd/setting/form_template/formTemplateType.js +43 -0
  416. package/src/views/bd/setting/form_template/list.vue +304 -303
  417. package/src/views/bd/setting/form_template/mixins/edit.js +344 -280
  418. package/src/views/bd/setting/form_template/mixins/list.js +749 -721
  419. package/src/views/bd/setting/form_template/mixins/list2.js +412 -411
  420. package/src/views/bd/setting/form_template/mixins/wf_list.js +431 -430
  421. package/src/views/mobile/user/area/dialog.vue +1 -1
  422. package/src/views/mobile/user/user/dialog.vue +1 -1
  423. package/src/views/user/bill_setting/mixins/wf.js +8 -0
  424. package/src/views/user/bill_setting/render.vue +1 -1
  425. package/src/views/user/commMenu/index.vue +3 -1
  426. package/src/views/user/commMenu/style.scss +123 -0
  427. package/src/views/user/common_attribute/edit.vue +2 -0
  428. package/src/views/user/common_attribute/itemEdit.vue +2 -0
  429. package/src/views/user/file_view_ins/list.vue +970 -970
  430. package/src/views/user/form/form_template/list.vue +527 -506
  431. package/src/views/user/form/vform/designer.vue +823 -821
  432. package/src/views/user/form/view/list.vue +24 -1
  433. package/src/views/user/home/default.vue +1124 -1117
  434. package/src/views/user/home/default2.vue +12 -8
  435. package/src/views/user/home/index.vue +102 -102
  436. package/src/views/user/home/wjl/content.vue +1581 -1569
  437. package/src/views/user/intf_permission/edit.vue +230 -0
  438. package/src/views/user/intf_permission/list.vue +196 -0
  439. package/src/views/user/menuFallback/index.vue +23 -0
  440. package/src/views/user/notify_message/dialog.vue +139 -139
  441. package/src/views/user/outLink/form_view.vue +202 -202
  442. package/src/views/user/outLink/index.vue +110 -110
  443. package/src/views/user/role/edit.vue +4 -0
  444. package/src/views/user/role/role-box.scss +83 -0
  445. package/src/views/user/role/voc_edit.vue +4 -0
  446. package/src/views/user/user/list.vue +28 -6
  447. package/src/views/user/wf/iframe/index.vue +51 -51
  448. package/src/views/user/wf/iframe/index2.vue +64 -64
  449. package/src/views/user/wf/wf_diy_attribute/edit.vue +1 -1
  450. package/src/views/user/wf/wf_manage/list2.vue +871 -871
  451. package/src/views/user/wf/wf_manage/wfContentDialog.vue +177 -126
  452. package/src/views/user/wf/wf_obj_config/activiti_wf.vue +134 -133
  453. package/src/views/user/wf/wf_obj_config/importItemDialog.vue +1 -1
  454. package/src/views/user/wf/wf_obj_config/list.vue +747 -746
  455. package/src/views/user/wf/wf_obj_config/list_form.vue +374 -373
  456. package/templates/child-app/.env +3 -0
  457. package/templates/child-app/README.md +49 -0
  458. package/templates/child-app/app.config.js +6 -0
  459. package/templates/child-app/babel.config.js +1 -0
  460. package/templates/child-app/core-resources.config.js +15 -0
  461. package/templates/child-app/gitignore +7 -0
  462. package/templates/child-app/package.json +34 -0
  463. package/templates/child-app/public/index.html +12 -0
  464. package/templates/child-app/src/assets/401_images/401.gif +0 -0
  465. package/templates/child-app/src/assets/404_images/404.png +0 -0
  466. package/templates/child-app/src/assets/404_images/404_cloud.png +0 -0
  467. package/templates/child-app/src/assets/logo.png +0 -0
  468. package/templates/child-app/src/corejsConfig.js +2 -0
  469. package/templates/child-app/src/icons/index.js +2 -0
  470. package/templates/child-app/src/icons/svg/child-demo.svg +1 -0
  471. package/templates/child-app/src/layout/index.vue +4 -0
  472. package/templates/child-app/src/main.js +5 -0
  473. package/templates/child-app/src/prefixConfig.js +13 -0
  474. package/templates/child-app/src/resources/css/login.scss +29 -0
  475. package/templates/child-app/src/resources/images/bg-login5.jpg +0 -0
  476. package/templates/child-app/src/resources/images/home-img.png +0 -0
  477. package/templates/child-app/src/router/modules/customer.js +3 -0
  478. package/templates/child-app/src/settings.js +24 -0
  479. package/templates/child-app/src/styles/app.scss +2 -0
  480. package/templates/child-app/src/views/demo/detail.vue +19 -0
  481. package/templates/child-app/src/views/demo/list.vue +38 -0
  482. package/templates/child-app/src/views/user/login/index.vue +18 -0
  483. package/templates/child-app/vue.config.js +107 -0
  484. package/src/components/xform/form-render/container-item/dynamicFieldEngine.js +0 -285
  485. package/src/components/xform/form-render/formDynamicFieldMixin.js +0 -131
  486. package/src/views/demo/bizTab/bill/billConfig.js +0 -41
  487. package/src/views/demo/bizTab/bill/detail.vue +0 -436
  488. package/src/views/demo/bizTab/bill/list.vue +0 -288
  489. package/src/views/demo/bizTab/bill/productDialog.vue +0 -176
  490. package/src/views/demo/bizTab/simple/billApi.js +0 -123
  491. package/src/views/demo/bizTab/simple/detail.vue +0 -407
  492. package/src/views/demo/bizTab/simple/list.vue +0 -217
  493. package/src/views/demo/bizTab/standalone/index.vue +0 -121
  494. package/src/views/demo/bizTab/wf/billConfig.js +0 -44
  495. package/src/views/demo/bizTab/wf/detail.vue +0 -661
  496. package/src/views/demo/bizTab/wf/list.vue +0 -242
  497. package/src/views/user/outLink/cc_form_view.vue +0 -188
  498. /package/src/{resources → core-resources}/js/base/common.js +0 -0
@@ -1,1569 +1,1581 @@
1
- <template>
2
- <div class="index-home">
3
- <el-row class="home-top">
4
- <el-col :span="8">
5
- <div class="i-user-info">
6
- <img class="img" v-if="headPhotoUrl" :src="headPhotoUrl" />
7
- <p class="name">{{ $t1("您好") }},{{ userInfo.nickName }}</p>
8
- <p>{{ companyInfo.companyName }}</p>
9
- </div>
10
- <div class="notice-box">
11
- <div class="txt" @click="openMoreNotifyMessage()">
12
- <i class="iconfont icon-xiaoxitongzhi"></i>
13
- <span
14
- v-if="unreadMessageNum > 0"
15
- v-html="
16
- $t1('您 有{number}条 未读消息,请及时查看。', {
17
- number: `<b>${
18
- unreadMessageNum > 99 ? '99+' : unreadMessageNum
19
- }</b>`,
20
- })
21
- "
22
- >
23
- </span>
24
- <span v-else-if="unreadMessageNum == 0">
25
- {{ $t1("您 暂无 未读消息。") }}
26
- </span>
27
- </div>
28
- <el-tooltip
29
- class="item"
30
- effect="dark"
31
- :content="$t1('刷新')"
32
- placement="top"
33
- >
34
- <el-button type="text" @click="getUnreadMessageNum(true)"
35
- ><i class="el-icon-refresh"></i
36
- ></el-button>
37
- </el-tooltip>
38
- <el-tooltip
39
- class="item"
40
- effect="dark"
41
- :content="$t1('查看更多')"
42
- placement="top"
43
- >
44
- <el-button
45
- type="text"
46
- @click="openMoreNotifyMessage()"
47
- class="more"
48
- >
49
- <i class="el-icon-news"></i>
50
- </el-button>
51
- </el-tooltip>
52
- </div>
53
- <el-card class="box-card">
54
- <div slot="header" class="clearfix">
55
- <span style="float: left">
56
- <i class="el-icon-chat-line-round ico"></i>
57
- {{ $t1("公告") }}
58
- </span>
59
- <el-button type="text" @click="openSystemNoticeDialog()"
60
- ><span class="more">MORE+</span></el-button
61
- >
62
- </div>
63
- <div class="home-notice-list">
64
- <div
65
- v-for="(systemNotice, index) in systemNotices"
66
- :key="index"
67
- class="item"
68
- @click="openSystemNoticeDialog(systemNotice)"
69
- :title="systemNotice.title"
70
- >
71
- {{ systemNotice.title }}
72
- <span class="time">{{
73
- systemNotice.modifyDate.substring(0, 10)
74
- }}</span>
75
- </div>
76
- </div>
77
- </el-card>
78
- </el-col>
79
- <el-col :span="homeConfig.toDoSpan || 16" style="padding-left: 6px">
80
- <el-card class="box-card">
81
- <div slot="header" class="clearfix">
82
- <span style="float: left">
83
- <i class="el-icon-chat-line-round ico"></i>
84
- {{ $t1("待办事项") }}
85
- </span>
86
- <el-tooltip
87
- class="item"
88
- effect="dark"
89
- :content="$t1('刷新')"
90
- placement="top"
91
- >
92
- <el-button
93
- type="text"
94
- @click="getWfInfoList(true)"
95
- class="more"
96
- style="right: 107px"
97
- >
98
- <i class="el-icon-refresh"></i>
99
- </el-button>
100
- </el-tooltip>
101
- <el-button type="text" @click="toWorkflowManage()" class="more">
102
- <i class="el-icon-news"></i>
103
- <span>{{ $t1("查看更多+") }}</span>
104
- </el-button>
105
- </div>
106
- <div class="need-to">
107
- <vxe-grid
108
- :data="unDoWfRows"
109
- ref="table-wf"
110
- v-bind="wfOption"
111
- @resizable-change="$vxeTableUtil.onColumnWitchChange"
112
- @custom="$vxeTableUtil.customHandle"
113
- ></vxe-grid>
114
- </div>
115
- </el-card>
116
- </el-col>
117
- </el-row>
118
- <el-row class="home-bottom" v-show="isServiceProvider">
119
- <el-col :span="10">
120
- <el-card class="box-card">
121
- <div slot="header" class="clearfix">
122
- <span style="float: left">
123
- <i class="el-icon-star-off ico"></i>
124
- {{ $t1("快捷通道") }}
125
- </span>
126
- <el-tooltip
127
- class="item"
128
- effect="dark"
129
- :content="$t1('刷新')"
130
- placement="top"
131
- >
132
- <el-button type="text" @click="getOrderCount(true)" class="more">
133
- <i class="el-icon-refresh"></i>
134
- </el-button>
135
- </el-tooltip>
136
- </div>
137
- <div class="shortcut-box">
138
- <div
139
- class="item"
140
- v-for="item in shortcutItems"
141
- :key="item.key"
142
- @click="openShortcut(item)"
143
- >
144
- <span class="name">{{ item.name }}</span>
145
- <span class="count">({{ item.count }})</span>
146
- </div>
147
- </div>
148
- </el-card>
149
- </el-col>
150
- <el-col :span="14" style="padding-left: 6px">
151
- <el-card class="box-card">
152
- <div slot="header" class="clearfix">
153
- <span style="float: left">
154
- <i class="el-icon-message ico"></i>
155
- {{ $t1("待处理消息") }}
156
- </span>
157
- <el-tooltip
158
- class="item"
159
- effect="dark"
160
- :content="$t1('刷新')"
161
- placement="top"
162
- >
163
- <el-button
164
- type="text"
165
- @click="getOrderMessage(true)"
166
- class="more"
167
- style="right: 72px"
168
- >
169
- <i class="el-icon-refresh"></i>
170
- </el-button>
171
- </el-tooltip>
172
- <el-button type="text" @click="openOrderMessageList()"
173
- ><span class="more">MORE+</span></el-button
174
- >
175
- </div>
176
- <div class="pending-msg">
177
- <vxe-grid
178
- :data="pendingMessageRows"
179
- ref="table-pending-msg"
180
- v-bind="pendingMsgOption"
181
- @resizable-change="$vxeTableUtil.onColumnWitchChange"
182
- @custom="$vxeTableUtil.customHandle"
183
- ></vxe-grid>
184
- </div>
185
- </el-card>
186
- </el-col>
187
- </el-row>
188
- <slot></slot>
189
- <systemNoticeInfoDialog
190
- v-if="showSystemNoticeInfoDialog"
191
- :visiable.sync="showSystemNoticeInfoDialog"
192
- :param="csnRow"
193
- :appendToTop="true"
194
- ></systemNoticeInfoDialog>
195
-
196
- <wfContentDialog
197
- v-if="showWfDialog"
198
- :visible.sync="showWfDialog"
199
- @close="wfClose"
200
- :option.sync="wfContentOption"
201
- ></wfContentDialog>
202
-
203
- <notifyMessageDialog ref="notifyMessageDialog"></notifyMessageDialog>
204
-
205
- <notifyMessageInfoDialog
206
- v-if="showNoticeDialog"
207
- :visiable.sync="showNoticeDialog"
208
- :dataId.sync="notifyMessageInfoId"
209
- @readHanlde="notifyMessageReadHanlde"
210
- ></notifyMessageInfoDialog>
211
-
212
- <el-dialog
213
- :title="$t1('处理消息')"
214
- :append-to-body="true"
215
- :modal-append-to-body="true"
216
- :close-on-click-modal="false"
217
- v-if="showDealDialog"
218
- :visible.sync="showDealDialog"
219
- custom-class="el-dialog dialog-style"
220
- width="560px"
221
- :destroy-on-close="true"
222
- v-el-drag-dialog
223
- >
224
- <el-form :model="dealForm" label-width="100px" class="deal-msg-form">
225
- <el-form-item :label="$t1('标题')">
226
- <span>{{ dealRow.title }}</span>
227
- </el-form-item>
228
- <el-form-item :label="$t1('业务单据号')">
229
- <span>{{ dealRow.bill_order_no }}</span>
230
- </el-form-item>
231
- <el-form-item :label="$t1('消息内容')">
232
- <div class="deal-msg-content">{{ dealRow.content }}</div>
233
- </el-form-item>
234
- <el-form-item :label="$t1('处理备注')">
235
- <el-input
236
- type="textarea"
237
- v-model="dealForm.deal_remark"
238
- :rows="4"
239
- :placeholder="$t1('请输入处理备注')"
240
- maxlength="500"
241
- show-word-limit
242
- />
243
- </el-form-item>
244
- </el-form>
245
- <span slot="footer" class="dialog-footer">
246
- <el-button @click="showDealDialog = false">{{ $t1("取消") }}</el-button>
247
- <el-button
248
- type="primary"
249
- :loading="dealSubmitting"
250
- @click="submitDealMessage"
251
- >{{ $t1("确定") }}</el-button
252
- >
253
- </span>
254
- </el-dialog>
255
-
256
- <el-dialog
257
- :title="$t1('选择分组')"
258
- :append-to-body="true"
259
- :modal-append-to-body="true"
260
- :close-on-click-modal="false"
261
- v-if="showGroupDialog"
262
- :visible.sync="showGroupDialog"
263
- :modal="false"
264
- custom-class="el-dialog dialog-style list-dialog"
265
- width="355px"
266
- :destroy-on-close="true"
267
- >
268
- <div class="cont group-list">
269
- <div
270
- class="item"
271
- v-for="(notifyTemplate, index) in notifyTemplates"
272
- :key="index"
273
- @click="openMoreNotifyMessage(notifyTemplate.notifyType)"
274
- >
275
- <i class="iconfont icon-fenzu"></i>
276
- <span class="name">{{ notifyTemplate.ntName }}</span>
277
- <!-- <span class="nums">99+</span>-->
278
- </div>
279
- </div>
280
- </el-dialog>
281
- </div>
282
- </template>
283
-
284
- <script>
285
- import systemNoticeInfoDialog from "@base/views/user/system_notice/infoDialog.vue";
286
- import notifyMessageDialog from "@base/views/user/notify_message/dialog.vue";
287
- import notifyMessageInfoDialog from "@base/views/user/notify_message/infoDialog";
288
-
289
- import { getToken } from "@base/utils/auth";
290
- import wfContentDialog from "@base/views/user/wf/wf_manage/wfContentDialog";
291
- import corejsConfig from "@/corejsConfig";
292
- import { getLogicParamValue } from "@base/api/user";
293
-
294
- export default {
295
- name: "home",
296
- components: {
297
- systemNoticeInfoDialog,
298
- notifyMessageDialog,
299
- notifyMessageInfoDialog,
300
- wfContentDialog,
301
- },
302
- data() {
303
- return {
304
- showNoticeDialog: false,
305
- showGroupDialog: false,
306
- notifyTemplates: [],
307
- userInfo: {},
308
- companyInfo: {},
309
- systemNotices: [],
310
- showSystemNoticeInfoDialog: false,
311
- csnRow: null,
312
- headPhotoUrl: "",
313
- dialogVisible: true,
314
- unDoWfRows: [],
315
- wfOption: {},
316
- showWfDialog: false,
317
- wfContentOption: {},
318
- showWfContent: true,
319
- wfContent: null,
320
- wfDataId: "",
321
- notifyMessages: [],
322
- notifyMessageInfoIndex: null,
323
- notifyMessageInfoId: null,
324
- unreadMessageNum: 0,
325
- activating: true,
326
- wfTimer: null,
327
- homeConfig: corejsConfig.homeConfig || {},
328
- pendingMsgOption: {},
329
- isServiceProvider: false,
330
- roleChecked: false,
331
- showDealDialog: false,
332
- dealSubmitting: false,
333
- dealRow: {},
334
- dealForm: {
335
- deal_remark: "",
336
- },
337
- shortcutItems: [
338
- {
339
- key: "unTakeQty",
340
- name: "待接单",
341
- count: 0,
342
- formCode: "fwm_so_order_list",
343
- query: { quick_type: 1 },
344
- },
345
- {
346
- key: "outTimeBookQty",
347
- name: "超时预约",
348
- count: 0,
349
- formCode: "fwm_so_order_list",
350
- query: { quick_type: 2 },
351
- },
352
- {
353
- key: "unBookQty",
354
- name: "待预约",
355
- count: 0,
356
- formCode: "fwm_so_order_list",
357
- query: { quick_type: 3 },
358
- },
359
- {
360
- key: "unTakeEngineerQty",
361
- name: "待派师傅",
362
- count: 0,
363
- formCode: "fwm_so_order_list",
364
- query: { quick_type: 4 },
365
- },
366
- {
367
- key: "engineerReturnQty",
368
- name: "师傅退单",
369
- count: 0,
370
- formCode: "fwm_so_order_list",
371
- query: { quick_type: 5 },
372
- },
373
- {
374
- key: "unIntallQty",
375
- name: "签收待安装",
376
- count: 0,
377
- formCode: "fwm_so_order_list",
378
- query: { quick_type: 6 },
379
- },
380
- {
381
- key: "unFinishQty",
382
- name: "待完工单",
383
- count: 0,
384
- formCode: "fwm_so_order_list",
385
- query: { quick_type: 7 },
386
- },
387
- {
388
- key: "unCommitFinishQty",
389
- name: "待确认完工",
390
- count: 0,
391
- formCode: "fwm_so_order_list",
392
- query: { quick_type: 8 },
393
- },
394
- {
395
- key: "unComplainQty",
396
- name: "待申诉",
397
- count: 0,
398
- formCode: "fwm_so_order_appeal_list",
399
- query: { query_type: 3 },
400
- },
401
- {
402
- key: "urgeOrComplainQty",
403
- name: "投诉/催单",
404
- count: 0,
405
- formCode: "fwm_so_order_list",
406
- query: { quick_type: 10 },
407
- },
408
- ],
409
- pendingMessageRows: [],
410
- };
411
- },
412
- activated() {
413
- this.activating = true;
414
- if (!this.wfTimer) {
415
- this.initWfTimer();
416
- } else {
417
- this.timerExcFun(true);
418
- }
419
- },
420
- deactivated() {
421
- this.activating = false;
422
- },
423
- beforeDestroy() {
424
- this.clearTimer();
425
- },
426
- created() {
427
- this.getUserInfo();
428
- this.initSystemNotice();
429
- this.initNotifyMessage();
430
- this.initWfParam();
431
- this.initWfTimer();
432
- //初始化流程待办路由
433
- this.initWorkflowManageRoute();
434
- this.initServiceProviderRole();
435
- },
436
- mounted() {
437
- this.initPendingMsgTable();
438
- },
439
- methods: {
440
- initWorkflowManageRoute() {
441
- //初始化流程待办路由
442
- getLogicParamValue({
443
- data: { paramCode: "workflowManageRoute" },
444
- success: (res) => {
445
- let value = res?.objx;
446
- this.workflowManageRoute = value || "/basic/wf/wf_manage/list";
447
- },
448
- });
449
- },
450
- toWorkflowManage() {
451
- this.$router.push(this.workflowManageRoute);
452
- },
453
- wfClose() {
454
- this.timerExcFun(true);
455
- },
456
- initWfTimer() {
457
- this.wfTimer = setInterval(() => {
458
- this.timerExcFun(false);
459
- }, 10000);
460
- this.timerExcFun(true);
461
- },
462
- timerExcFun(isLoading) {
463
- if (!this.activating) {
464
- return;
465
- }
466
- this.getWfInfoList(isLoading);
467
- this.getUnreadMessageNum(isLoading);
468
- if (this.isServiceProvider) {
469
- this.getOrderCount(isLoading);
470
- this.getOrderMessage(isLoading);
471
- }
472
- this.$emit("timerHandle");
473
- },
474
- clearTimer() {
475
- clearInterval(this.wfTimer);
476
- this.wfTimer = null;
477
- },
478
- getUserInfo() {
479
- this.$http({
480
- url: USER_PREFIX + "/user/currentUser",
481
- method: "post",
482
- success: (res) => {
483
- let userInfo = res.objx;
484
- this.headPhotoUrl = userInfo.headPhotoUrl
485
- ? userInfo.headPhotoUrl
486
- : (require("@/resources/images/default-header.png").default || require("@/resources/images/default-header.png"));
487
-
488
- this.userInfo = userInfo;
489
- this.initServiceProviderRole();
490
- },
491
- });
492
- this.$http({
493
- url: USER_PREFIX + "/company_info/getCurrent",
494
- method: `post`,
495
- success: (res) => {
496
- this.companyInfo = res.objx || {};
497
- },
498
- });
499
- },
500
- initSystemNotice() {
501
- this.$http({
502
- url: USER_PREFIX + "/system_notice/listPage",
503
- data: { publish: true, searchCount: false },
504
- method: "post",
505
- success: (res) => {
506
- this.systemNotices =
507
- res.objx && res.objx.records ? res.objx.records : [];
508
- },
509
- });
510
- },
511
- openSystemNoticeDialog(row) {
512
- this.csnRow = row || null;
513
- this.showSystemNoticeInfoDialog = true;
514
- },
515
- initUnDoWfInfo() {
516
- this.$http({
517
- url: AGILEBPM_PREFIX + "/wf_manage/listPage",
518
- data: { type: 0, searchCount: false },
519
- method: "post",
520
- success: (res) => {
521
- this.unDoWfRows = res.objx.records || [];
522
- },
523
- });
524
- },
525
- initWfTableList() {
526
- let that = this;
527
- let paramColumns = this.wfParamDTOs.map((item) => {
528
- return {
529
- title: this.$t1(item.paramName),
530
- field: item.paramKey,
531
- width: 150,
532
- };
533
- });
534
- var statuses = {
535
- running: this.$t1("审核中"),
536
- back: this.$t1("已驳回"),
537
- end: this.$t1("已完成"),
538
- };
539
- let tableOption = {
540
- vue: this,
541
- tableRef: "table-wf",
542
- tableName: "home-table-wf",
543
- config: {
544
- height: "auto",
545
- },
546
- columns: [
547
- { type: "checkbox", width: 48, resizable: false, fixed: "left" },
548
- {
549
- title: this.$t1("单据类型"),
550
- field: "objTypeName",
551
- width: 150,
552
- fixed: "left",
553
- },
554
- {
555
- title: this.$t1("流程主题"),
556
- field: "name",
557
- width: 150,
558
- },
559
- {
560
- title: this.$t1("启动人"),
561
- field: "starterName",
562
- width: 150,
563
- },
564
- {
565
- title: this.$t1("当前任务"),
566
- field: "taskName",
567
- width: 150,
568
- },
569
- {
570
- title: this.$t1("当前任务用户"),
571
- field: "candidateNames",
572
- width: 150,
573
- },
574
- {
575
- title: this.$t1("启动时间"),
576
- field: "createDate",
577
- width: 150,
578
- },
579
- ...paramColumns,
580
- {
581
- width: 47,
582
- fixed: "right",
583
- title: "",
584
- sortable: false,
585
- slots: {
586
- default: ({ row }) => {
587
- return [
588
- <a
589
- href="javascript:void(0);"
590
- class="a-link"
591
- onclick={() => {
592
- this.openWfDialog(row);
593
- }}
594
- >
595
- <el-tooltip
596
- enterable={false}
597
- effect="dark"
598
- content={this.$t1("查看")}
599
- placement="top"
600
- popper-class="tooltip-skin"
601
- >
602
- <i class="el-icon-edit" />
603
- </el-tooltip>
604
- </a>,
605
- ];
606
- },
607
- },
608
- },
609
- ],
610
- };
611
- this.$vxeTableUtil.initVxeTable(tableOption).then((opts) => {
612
- this.wfOption = opts;
613
- });
614
- },
615
- initPendingMsgTable() {
616
- let tableOption = {
617
- vue: this,
618
- tableRef: "table-pending-msg",
619
- tableName: "home-table-pending-msg",
620
- config: {
621
- height: "auto",
622
- toolbarConfig: {
623
- enabled: false,
624
- },
625
- pagerConfig: {
626
- enabled: false,
627
- },
628
- },
629
- columns: [
630
- {
631
- title: this.$t1("通知时间"),
632
- field: "create_date",
633
- width: 150,
634
- },
635
- {
636
- title: this.$t1("消息类型"),
637
- field: "message_type",
638
- width: 120,
639
- slots: {
640
- default: ({ row }) => {
641
- return [
642
- <span>{this.getMessageTypeName(row.message_type)}</span>,
643
- ];
644
- },
645
- },
646
- },
647
- {
648
- title: this.$t1("业务单据号"),
649
- field: "bill_order_no",
650
- minWidth: 150,
651
- slots: {
652
- default: ({ row }) => {
653
- return [
654
- <a
655
- href="javascript:void(0);"
656
- class="a-link"
657
- onclick={() => {
658
- this.openOrderView(row);
659
- }}
660
- >
661
- {row.bill_order_no}
662
- </a>,
663
- ];
664
- },
665
- },
666
- },
667
- {
668
- title: this.$t1("标题"),
669
- field: "title",
670
- minWidth: 150,
671
- },
672
- {
673
- title: this.$t1("操作"),
674
- width: 70,
675
- fixed: "right",
676
- sortable: false,
677
- slots: {
678
- default: ({ row }) => {
679
- return [
680
- <a
681
- href="javascript:void(0);"
682
- class="a-link"
683
- onclick={() => {
684
- this.handlePendingMessage(row);
685
- }}
686
- >
687
- {this.$t1("处理")}
688
- </a>,
689
- ];
690
- },
691
- },
692
- },
693
- ],
694
- };
695
- this.$vxeTableUtil.initVxeTable(tableOption).then((opts) => {
696
- this.pendingMsgOption = opts;
697
- this.$nextTick(() => {
698
- let grid = this.$refs["table-pending-msg"];
699
- if (grid && grid.recalculate) {
700
- grid.recalculate();
701
- }
702
- });
703
- });
704
- },
705
- handlePendingMessage(row) {
706
- this.dealRow = row || {};
707
- this.dealForm = { deal_remark: "" };
708
- this.dealSubmitting = false;
709
- this.showDealDialog = true;
710
- },
711
- openOrderView(row) {
712
- let dataId = row.id;
713
- if (dataId == null) {
714
- this.$message.warning(this.$t1("未找到工单"));
715
- return;
716
- }
717
- this.wfContentOption = {
718
- objId: dataId,
719
- url: "form",
720
- formCode: "fwm_so_order_view",
721
- };
722
- this.showWfDialog = true;
723
- },
724
- submitDealMessage() {
725
- if (!this.dealRow || !this.dealRow.id) {
726
- return;
727
- }
728
- this.dealSubmitting = true;
729
- this.callFormScript({
730
- url: YX_PREFIX + "/bd_api/fwm_so_order_message_list/doDealOrderMessage",
731
- data: {
732
- id: this.dealRow.id,
733
- deal_remark: this.dealForm.deal_remark,
734
- },
735
- isLoading: true,
736
- success: (res) => {
737
- this.dealSubmitting = false;
738
- this.showDealDialog = false;
739
- this.$message.success(res.content || this.$t1("处理成功"));
740
- this.getOrderCount(true);
741
- this.getOrderMessage(true);
742
- },
743
- fail: (res, response) => {
744
- this.dealSubmitting = false;
745
- if (response && response.status == 200) {
746
- this.$errorMsg(res);
747
- }
748
- },
749
- });
750
- },
751
- getMessageTypeName(type) {
752
- let map = {
753
- 1: this.$t1("工单"),
754
- 2: this.$t1("备件申请"),
755
- 3: this.$t1("结算"),
756
- 4: this.$t1("考核"),
757
- };
758
- return map[type] || type || "";
759
- },
760
- initServiceProviderRole() {
761
- if (this.roleChecked) {
762
- return;
763
- }
764
- let userId = this.$store.getters.userId || this.userInfo.id;
765
- if (!userId) {
766
- return;
767
- }
768
- this.roleChecked = true;
769
- this.$http({
770
- url: USER_PREFIX + "/user/getUserRole",
771
- method: "post",
772
- data: { id: userId },
773
- failMsg: false,
774
- errorMsg: false,
775
- success: (res) => {
776
- let rows = res.objx || [];
777
- let codes = rows.map((row) => row.roleCode);
778
- this.isServiceProvider =
779
- codes.includes("yjfws") || codes.includes("ejfws");
780
- if (this.isServiceProvider) {
781
- this.getOrderCount(true);
782
- this.getOrderMessage(true);
783
- this.$nextTick(() => {
784
- let grid = this.$refs["table-pending-msg"];
785
- if (grid && grid.recalculate) {
786
- grid.recalculate();
787
- }
788
- });
789
- }
790
- },
791
- fail: () => {
792
- this.roleChecked = false;
793
- },
794
- });
795
- },
796
- callFormScript(opts) {
797
- let isLoading = opts.isLoading ?? true;
798
- return this.$http({
799
- url: opts.url,
800
- method: "post",
801
- data: opts.data || {},
802
- isLoading,
803
- modal: isLoading || false,
804
- success: opts.success,
805
- failMsg: false,
806
- errorMsg: false,
807
- fail:
808
- opts.fail ||
809
- ((res, response) => {
810
- if (response && response.status == 200) {
811
- this.$errorMsg(res);
812
- }
813
- }),
814
- });
815
- },
816
- getOrderCount(isLoading) {
817
- if (!this.isServiceProvider || !this.activating) {
818
- return;
819
- }
820
- this.callFormScript({
821
- url: YX_PREFIX + "/bd_api/intf/getOrderCount",
822
- isLoading,
823
- success: (res) => {
824
- let objx = res.objx || {};
825
- this.shortcutItems.forEach((item) => {
826
- item.count = objx[item.key] != null ? objx[item.key] : 0;
827
- });
828
- },
829
- });
830
- },
831
- getOrderMessage(isLoading) {
832
- if (!this.isServiceProvider || !this.activating) {
833
- return;
834
- }
835
- this.callFormScript({
836
- url: YX_PREFIX + "/bd_api/intf/getOrderMessage",
837
- isLoading,
838
- success: (res) => {
839
- let objx = res.objx;
840
- this.pendingMessageRows = Array.isArray(objx)
841
- ? objx
842
- : (objx && objx.records) || [];
843
- },
844
- });
845
- },
846
- openShortcut(item) {
847
- if (!item || !item.formCode) {
848
- return;
849
- }
850
- this.openFormList(item.formCode, item.query);
851
- },
852
- openOrderMessageList() {
853
- this.openFormList("fwm_so_order_message_list");
854
- },
855
- findFormPath(formCode) {
856
- if (!formCode) {
857
- return null;
858
- }
859
- let match = (path) => {
860
- if (!path) {
861
- return false;
862
- }
863
- let p = String(path).split("?")[0];
864
- return p === formCode || p.endsWith("/" + formCode);
865
- };
866
- let walk = (routes) => {
867
- for (let r of routes || []) {
868
- if (match(r.path) || match(r.url)) {
869
- let candidates = [r.path, r.url].filter(Boolean);
870
- return (
871
- candidates.find((p) => String(p).startsWith("/")) || candidates[0]
872
- );
873
- }
874
- let found = walk(r.children);
875
- if (found) {
876
- return found;
877
- }
878
- }
879
- return null;
880
- };
881
- return (
882
- walk(this.$store.getters.permission_routes) ||
883
- walk(this.$store.getters.add_routes) ||
884
- walk(this.$store.getters.sidebarRouters)
885
- );
886
- },
887
- openFormList(formCode, query) {
888
- let path = this.findFormPath(formCode);
889
- if (!path) {
890
- this.$message.warning(this.$t1("未找到对应菜单"));
891
- return;
892
- }
893
- path = String(path).split("?")[0];
894
- let q = query || {};
895
- let queryData = { ...q };
896
- if (
897
- formCode !== "fwm_so_order_list" &&
898
- formCode !== "fwm_so_order_appeal_list"
899
- ) {
900
- queryData.param = JSON.stringify(q);
901
- }
902
- let view = {
903
- path,
904
- query: queryData,
905
- };
906
- this.$store.dispatch("tagsView/delCachedView", view).then(() => {
907
- this.$openView(view);
908
- });
909
- },
910
- openWfDialog(row) {
911
- this.wfContentOption = {
912
- objId: row.objId,
913
- url: row.url,
914
- objTypeCode: row.objTypeCode,
915
- formCode: row.formCode,
916
- };
917
- this.showWfDialog = true;
918
- },
919
- initNotifyMessage() {
920
- return;
921
- this.$http({
922
- url: USER_PREFIX + "/notify_message/listPage",
923
- data: { searchCount: false },
924
- method: "post",
925
- success: (res) => {
926
- this.notifyMessages =
927
- res.objx && res.objx.records ? res.objx.records : [];
928
- },
929
- });
930
- },
931
- openNotifyMessageDialog(row) {
932
- if (row.jumpContent) {
933
- this.$refs.notifyMessageDialog.open(row, () => {
934
- row.readed = 1;
935
- });
936
- }
937
- },
938
- openMoreNotifyMessage(notifyType) {
939
- let data = { notifyType: notifyType || "" };
940
- let view = {
941
- name: "notify_message:list",
942
- query: data,
943
- };
944
- this.$store.dispatch("tagsView/delCachedView", view).then(() => {
945
- this.$router.replace(view);
946
- });
947
-
948
- if (notifyType) {
949
- this.showGroupDialog = false;
950
- }
951
- },
952
- checkNotifyMessage(row, index) {
953
- this.showNoticeDialog = true;
954
- this.notifyMessageInfoIndex = index;
955
- this.notifyMessageInfoId = row.id;
956
- },
957
- notifyMessageReadHanlde() {
958
- this.notifyMessages[this.notifyMessageInfoIndex].readed = 1;
959
- },
960
- openNotifyTemplateGroupDialog() {
961
- this.$http({
962
- url: USER_PREFIX + `/notify_template/listPage`,
963
- method: `post`,
964
- data: { searchCount: false },
965
- isLoading: true,
966
- // loadingTarget: document.body,
967
- success: (res) => {
968
- this.notifyTemplates =
969
- res.objx && res.objx.records ? res.objx.records : [];
970
- this.showGroupDialog = true;
971
- },
972
- });
973
- },
974
- rourteTo(route) {
975
- if (route.type == 4) {
976
- this.jumpOutLink(route);
977
- } else if (route.type == 3) {
978
- let menuCode = route.menuCode;
979
- let path = "/user/outLink/index/" + menuCode;
980
- this.$openView({ path: path, query: { url: route.url } }, route);
981
- } else {
982
- let path = this.getPath(route);
983
- if (!path) return;
984
- this.$openView(path, route);
985
- }
986
- },
987
- getPath(route3) {
988
- let item = null;
989
- let path = null;
990
- if (route3.type == 0) {
991
- //普通菜单
992
- if (route3.url) {
993
- path = route3.route || route3.url;
994
- let str = "/report/vform/render/";
995
- if (path.indexOf(str) == 0) {
996
- } else {
997
- let pIndex = path.indexOf("?");
998
- if (pIndex > 0) {
999
- path = path.substring(0, pIndex);
1000
- }
1001
- }
1002
- }
1003
- } else if (route3.type == 5) {
1004
- //动态表单
1005
- let url = route3.route || route3.url;
1006
- path = url;
1007
- }
1008
- if (path && path.startsWith("@")) {
1009
- path = null;
1010
- }
1011
- return path;
1012
- },
1013
- jumpOutLink(route) {
1014
- let path = route.url;
1015
- if (route.type == 4 && path) {
1016
- if (path.indexOf("token={token}") >= 0) {
1017
- path = path.replace("token={token}", "token=" + getToken());
1018
- }
1019
- window.open(path);
1020
- }
1021
- },
1022
- initWfParam() {
1023
- return this.$http({
1024
- url: USER_PREFIX + "/wf_param/list",
1025
- method: `post`,
1026
- data: {},
1027
- isLoading: true,
1028
- // loadingTarget: document.body,
1029
- modalStrictly: true,
1030
- success: (res) => {
1031
- this.wfParamDTOs = res.objx || [];
1032
- this.initWfTableList();
1033
- },
1034
- });
1035
- },
1036
- getWfInfoList(isLoading) {
1037
- if (!this.activating) {
1038
- return;
1039
- }
1040
- this.$http({
1041
- url: USER_PREFIX + "/wf_info/listPage",
1042
- data: { type: 0, size: 20, searchCount: false },
1043
- method: "post",
1044
- isLoading: isLoading,
1045
- modal: isLoading || false,
1046
- // loadingTarget: document.body,
1047
- success: (res) => {
1048
- this.unDoWfRows =
1049
- res.objx && res.objx.records ? res.objx.records : [];
1050
- },
1051
- failMsg: false,
1052
- errorMsg: false,
1053
- fail: (res, response) => {
1054
- if (response && response.status == 200) {
1055
- this.$errorMsg(res);
1056
- }
1057
- },
1058
- });
1059
- },
1060
- getUnreadMessageNum(isLoading) {
1061
- if (!this.activating) {
1062
- return;
1063
- }
1064
- return this.$http({
1065
- url: USER_PREFIX + "/notify_message/countMessage",
1066
- method: `post`,
1067
- data: {},
1068
- isLoading: isLoading,
1069
- modal: isLoading || false,
1070
- // loadingTarget: document.body,
1071
- success: (res) => {
1072
- this.unreadMessageNum = res.objx || 0;
1073
- },
1074
- failMsg: false,
1075
- errorMsg: false,
1076
- fail: (res, response) => {
1077
- if (response && response.status == 200) {
1078
- this.$errorMsg(res);
1079
- }
1080
- },
1081
- });
1082
- },
1083
- wfhandleCallback(flag) {
1084
- if ([1, 2, 3].includes(flag)) {
1085
- this.showWfDialog = false;
1086
- this.wfClose();
1087
- }
1088
- },
1089
- },
1090
- };
1091
- </script>
1092
- <style lang="scss" scoped>
1093
- @import "~@/styles/variables.scss";
1094
-
1095
- body #app .index-home {
1096
- margin: 3px 10px;
1097
- height: calc(100vh - 44px);
1098
- overflow: hidden;
1099
- display: flex;
1100
- flex-direction: column;
1101
-
1102
- #containt {
1103
- margin: 0;
1104
- background: none;
1105
- height: auto;
1106
- box-shadow: none;
1107
- }
1108
-
1109
- .i-user-info {
1110
- background: url(~@/resources/images/home-img.png) #2a6494 no-repeat 116%
1111
- 45px;
1112
- margin-bottom: 6px;
1113
- background-size: 181px;
1114
- padding: 14px 38px 11px 16px;
1115
- border-radius: 4px 4px;
1116
- color: #fff;
1117
- font-size: 12px;
1118
- margin-top: 3px;
1119
- height: 95px;
1120
- overflow: hidden;
1121
-
1122
- .name {
1123
- opacity: 1;
1124
- font-weight: 600;
1125
- margin: 9px 0 14px;
1126
- font-size: 14px;
1127
- }
1128
-
1129
- .img {
1130
- width: 60px;
1131
- height: 60px;
1132
- float: left;
1133
- border-radius: 50%;
1134
- border: solid 4px rgba(255, 255, 255, 0.28);
1135
- margin-right: 10px;
1136
- }
1137
- }
1138
-
1139
- .home-notice-list {
1140
- height: 182px;
1141
- margin: 0 -12px;
1142
-
1143
- .item {
1144
- padding: 6px 12px;
1145
- font-size: 12px;
1146
- cursor: pointer;
1147
- overflow: hidden;
1148
- text-overflow: ellipsis;
1149
- white-space: nowrap;
1150
-
1151
- .time {
1152
- color: #b9b9b9;
1153
- font-size: 12px;
1154
- right: 12px;
1155
- }
1156
-
1157
- &:hover {
1158
- color: $baseColor;
1159
- background-color: transparentize($baseColor, 0.97);
1160
-
1161
- .time {
1162
- color: $baseColor;
1163
- }
1164
- }
1165
-
1166
- &.no-read:before {
1167
- content: "";
1168
- width: 6px;
1169
- height: 6px;
1170
- background-color: $red;
1171
- border-radius: 50%;
1172
- vertical-align: middle;
1173
- display: inline-block;
1174
- margin-bottom: 1px;
1175
- }
1176
- }
1177
-
1178
- &.to-reed {
1179
- height: 300px;
1180
- overflow: auto;
1181
- margin: -8px -12px;
1182
-
1183
- .item {
1184
- white-space: initial;
1185
- padding: 8px 22px 2px;
1186
- position: relative;
1187
-
1188
- &:after {
1189
- content: "";
1190
- position: absolute;
1191
- left: 22px;
1192
- right: 22px;
1193
- border-top: dashed 1px #eee;
1194
- height: 1px;
1195
- bottom: 0;
1196
- }
1197
-
1198
- &.noread {
1199
- &:before {
1200
- content: "";
1201
- width: 6px;
1202
- height: 6px;
1203
- background-color: $red;
1204
- border-radius: 50%;
1205
- margin-right: 5px;
1206
- display: inline-block;
1207
- position: absolute;
1208
- left: 10px;
1209
- top: 16px;
1210
- }
1211
- }
1212
-
1213
- .el-tag {
1214
- zoom: 0.95;
1215
- padding: 0 5px;
1216
- height: 24px;
1217
- line-height: 24px;
1218
- }
1219
-
1220
- // .noread{
1221
- // position: absolute;right:0;top:0;
1222
- // span{transform: rotate(47deg);
1223
- // -ms-transform: rotate(47deg);
1224
- // -moz-transform: rotate(47deg);
1225
- // -webkit-transform: rotate(47deg);
1226
- // -o-transform: rotate(47deg);
1227
- // z-index: 3;
1228
- // color: #FFF;
1229
- // position: absolute;
1230
- // right: 1px;
1231
- // top: 2px;}
1232
- // &:after{
1233
- // content: "\e618";
1234
- // font-size: 62px;
1235
- // font-family: "iconfont";
1236
- // color:$red
1237
- // }
1238
- // }
1239
- .time {
1240
- position: relative;
1241
- right: 0;
1242
- margin-left: 12px;
1243
- }
1244
-
1245
- .name {
1246
- overflow: hidden;
1247
- text-overflow: ellipsis;
1248
- white-space: nowrap;
1249
- margin-top: 3px;
1250
- display: block;
1251
- margin-bottom: 4px;
1252
- }
1253
-
1254
- &:hover .name {
1255
- color: $baseColor;
1256
- }
1257
-
1258
- &:first-child:before {
1259
- border-top: none;
1260
- }
1261
-
1262
- .btns {
1263
- text-align: right;
1264
-
1265
- .el-link {
1266
- font-size: 12px;
1267
- display: inline-block;
1268
- margin-left: 14px;
1269
-
1270
- i {
1271
- font-size: 12px;
1272
- margin-right: 3px;
1273
- }
1274
- }
1275
- }
1276
- }
1277
- }
1278
- }
1279
-
1280
- .home-top {
1281
- flex: none;
1282
- }
1283
-
1284
- .home-bottom {
1285
- flex: 1;
1286
- min-height: 0;
1287
- display: flex;
1288
-
1289
- > .el-col {
1290
- height: 100%;
1291
- display: flex;
1292
- flex-direction: column;
1293
- }
1294
-
1295
- .box-card {
1296
- flex: 1;
1297
- min-height: 0;
1298
- display: flex;
1299
- flex-direction: column;
1300
-
1301
- &.el-card.is-always-shadow {
1302
- margin-top: 0 !important;
1303
- }
1304
- }
1305
-
1306
- ::v-deep .el-card__body {
1307
- flex: 1;
1308
- min-height: 0;
1309
- display: flex;
1310
- flex-direction: column;
1311
- }
1312
- }
1313
-
1314
- .shortcut-box {
1315
- flex: 1;
1316
- min-height: 0;
1317
- display: grid;
1318
- grid-template-columns: repeat(5, 1fr);
1319
- grid-template-rows: repeat(2, 1fr);
1320
- gap: 8px;
1321
-
1322
- .item {
1323
- border: solid 1px #e2e2e2;
1324
- border-radius: 2px;
1325
- text-align: center;
1326
- padding: 12px 4px 10px;
1327
- cursor: pointer;
1328
- background: #fff;
1329
- display: flex;
1330
- flex-direction: column;
1331
- justify-content: center;
1332
-
1333
- .name {
1334
- display: block;
1335
- color: #424242;
1336
- font-size: 12px;
1337
- line-height: 20px;
1338
- }
1339
-
1340
- .count {
1341
- display: block;
1342
- color: #d62b31;
1343
- font-size: 12px;
1344
- line-height: 20px;
1345
- }
1346
-
1347
- &:hover {
1348
- border-color: $baseColor;
1349
- background-color: transparentize($baseColor, 0.95);
1350
-
1351
- .name {
1352
- color: $baseColor;
1353
- }
1354
- }
1355
- }
1356
- }
1357
-
1358
- .need-to {
1359
- height: 332px;
1360
- }
1361
-
1362
- .pending-msg {
1363
- flex: 1;
1364
- min-height: 0;
1365
- height: 100%;
1366
- }
1367
-
1368
- .table-box {
1369
- width: 100%;
1370
- font-size: 12px;
1371
-
1372
- th {
1373
- line-height: 32px;
1374
- background: #f7f7f7;
1375
- font-weight: 400;
1376
- color: #808080;
1377
- padding: 0 6px;
1378
- }
1379
-
1380
- td {
1381
- text-align: center;
1382
- line-height: 34px;
1383
- color: #424242;
1384
- border-bottom: solid 1px #eee;
1385
- padding: 0 6px;
1386
- }
1387
-
1388
- tr:last-child td {
1389
- border-bottom: none;
1390
- }
1391
- }
1392
- }
1393
-
1394
- .deal-msg-form {
1395
- padding: 8px 12px 0;
1396
-
1397
- .deal-msg-content {
1398
- max-height: 160px;
1399
- overflow: auto;
1400
- line-height: 20px;
1401
- white-space: pre-wrap;
1402
- word-break: break-all;
1403
- }
1404
- }
1405
-
1406
- .box-card .more {
1407
- background-color: #f7f7f7;
1408
- }
1409
-
1410
- .group-list {
1411
- padding: 18px 18px 6px 32px !important;
1412
- height: 400px;
1413
- overflow: auto;
1414
-
1415
- .item {
1416
- position: relative;
1417
- height: 36px;
1418
- border: solid 1px #eee;
1419
- line-height: 34px;
1420
- border-radius: 2px;
1421
- padding: 0 42px 0 14px;
1422
- margin-bottom: 10px;
1423
- cursor: pointer;
1424
-
1425
- &::before {
1426
- content: "";
1427
- width: 8px;
1428
- height: 8px;
1429
- border: solid 1px #eee;
1430
- border-radius: 50%;
1431
- display: inline-block;
1432
- position: absolute;
1433
- left: -16px;
1434
- top: 13px;
1435
- }
1436
-
1437
- &.checked {
1438
- &:before {
1439
- content: "";
1440
- background-color: $baseColor;
1441
- border-color: $baseColor;
1442
- }
1443
-
1444
- background-color: transparentize($baseColor, 0.9);
1445
- color: $baseColor;
1446
- border-color: $baseColor;
1447
- }
1448
-
1449
- i {
1450
- font-size: 12px;
1451
- vertical-align: middle;
1452
- }
1453
-
1454
- .name {
1455
- font-size: 12px;
1456
- margin-left: 8px;
1457
- vertical-align: middle;
1458
- }
1459
-
1460
- .nums {
1461
- width: 22px;
1462
- height: 22px;
1463
- border-radius: 50%;
1464
- display: inline-block;
1465
- position: absolute;
1466
- right: 5px;
1467
- top: 6px;
1468
- color: #fff;
1469
- font-size: 12px;
1470
- background-color: $red;
1471
- line-height: 22px;
1472
- text-align: center;
1473
- }
1474
- }
1475
- }
1476
-
1477
- .notice-box {
1478
- background-color: #2a649429;
1479
- border-radius: 0 0 4px 4px;
1480
- padding: 9px 12px;
1481
- margin-bottom: 5px;
1482
- margin-top: -6px;
1483
- position: relative;
1484
- z-index: 2;
1485
- font-size: 13px;
1486
- color: #212121;
1487
- overflow: hidden;
1488
-
1489
- .txt {
1490
- line-height: 28px;
1491
- font-size: 12px;
1492
- position: relative;
1493
- display: inline-block;
1494
- cursor: pointer;
1495
-
1496
- &:before {
1497
- content: "";
1498
- background-color: $baseColor;
1499
- width: 4px;
1500
- height: 20px;
1501
- border-radius: 2px;
1502
- display: inline-block;
1503
- vertical-align: middle;
1504
- margin-right: 18px;
1505
- }
1506
-
1507
- i {
1508
- font-size: 14px;
1509
- margin-right: 12px;
1510
- vertical-align: middle;
1511
- }
1512
-
1513
- > span {
1514
- vertical-align: middle;
1515
- height: 22px;
1516
- line-height: 22px;
1517
- display: inline-block;
1518
-
1519
- b {
1520
- color: #fff;
1521
- margin: 0 4px;
1522
- font-size: 16px;
1523
- vertical-align: middle;
1524
- background: #ff5615;
1525
- border-radius: 50%;
1526
- display: inline-block;
1527
- padding: 4px;
1528
- font-weight: 200;
1529
- line-height: 1;
1530
- }
1531
- }
1532
- }
1533
-
1534
- .el-button {
1535
- position: absolute;
1536
- right: 46px;
1537
- padding: 0;
1538
- height: 22px;
1539
- line-height: 22px;
1540
- min-width: 22px;
1541
- text-align: center;
1542
- border-radius: 2px;
1543
- top: 50%;
1544
- margin-top: -11px;
1545
-
1546
- i {
1547
- font-size: 15px;
1548
- }
1549
-
1550
- &:hover {
1551
- background-color: $baseColor;
1552
- color: #fff;
1553
- }
1554
-
1555
- &.more {
1556
- right: 12px;
1557
- background: #f7f7f7;
1558
-
1559
- &:hover {
1560
- color: $baseColor;
1561
- }
1562
- }
1563
- }
1564
-
1565
- ::v-deep .el-card.is-always-shadow {
1566
- box-shadow: 0 2px 2px 0 rgb(0 0 0 / 6%);
1567
- }
1568
- }
1569
- </style>
1
+ <template>
2
+ <div class="index-home">
3
+ <el-row class="home-top">
4
+ <el-col :span="10">
5
+ <div class="i-user-info">
6
+ <img class="img" v-if="headPhotoUrl" :src="headPhotoUrl" />
7
+ <p class="name">{{ $t1("您好") }},{{ userInfo.nickName }}</p>
8
+ <p>{{ companyInfo.companyName }}</p>
9
+ </div>
10
+ <div class="notice-box">
11
+ <div class="txt" @click="openMoreNotifyMessage()">
12
+ <i class="iconfont icon-xiaoxitongzhi"></i>
13
+ <span
14
+ v-if="unreadMessageNum > 0"
15
+ v-html="
16
+ $t1('您 有{number}条 未读消息,请及时查看。', {
17
+ number: `<b>${
18
+ unreadMessageNum > 99 ? '99+' : unreadMessageNum
19
+ }</b>`,
20
+ })
21
+ "
22
+ >
23
+ </span>
24
+ <span v-else-if="unreadMessageNum == 0">
25
+ {{ $t1("您 暂无 未读消息。") }}
26
+ </span>
27
+ </div>
28
+ <el-tooltip
29
+ class="item"
30
+ effect="dark"
31
+ :content="$t1('刷新')"
32
+ placement="top"
33
+ >
34
+ <el-button type="text" @click="getUnreadMessageNum(true)"
35
+ ><i class="el-icon-refresh"></i
36
+ ></el-button>
37
+ </el-tooltip>
38
+ <el-tooltip
39
+ class="item"
40
+ effect="dark"
41
+ :content="$t1('查看更多')"
42
+ placement="top"
43
+ >
44
+ <el-button
45
+ type="text"
46
+ @click="openMoreNotifyMessage()"
47
+ class="more"
48
+ >
49
+ <i class="el-icon-news"></i>
50
+ </el-button>
51
+ </el-tooltip>
52
+ </div>
53
+ <el-card class="box-card">
54
+ <div slot="header" class="clearfix">
55
+ <span style="float: left">
56
+ <i class="el-icon-chat-line-round ico"></i>
57
+ {{ $t1("公告") }}
58
+ </span>
59
+ <el-button type="text" @click="openSystemNoticeDialog()"
60
+ ><span class="more">MORE+</span></el-button
61
+ >
62
+ </div>
63
+ <div class="home-notice-list">
64
+ <div
65
+ v-for="(systemNotice, index) in systemNotices"
66
+ :key="index"
67
+ class="item"
68
+ @click="openSystemNoticeDialog(systemNotice)"
69
+ :title="systemNotice.title"
70
+ >
71
+ {{ systemNotice.title }}
72
+ <span class="time">{{
73
+ systemNotice.modifyDate.substring(0, 10)
74
+ }}</span>
75
+ </div>
76
+ </div>
77
+ </el-card>
78
+ </el-col>
79
+ <el-col :span="homeConfig.toDoSpan || 14" style="padding-left: 6px">
80
+ <el-card class="box-card">
81
+ <div slot="header" class="clearfix">
82
+ <span style="float: left">
83
+ <i class="el-icon-chat-line-round ico"></i>
84
+ {{ $t1("待办事项") }}
85
+ </span>
86
+ <el-tooltip
87
+ class="item"
88
+ effect="dark"
89
+ :content="$t1('刷新')"
90
+ placement="top"
91
+ >
92
+ <el-button
93
+ type="text"
94
+ @click="getWfInfoList(true)"
95
+ class="more"
96
+ style="right: 107px"
97
+ >
98
+ <i class="el-icon-refresh"></i>
99
+ </el-button>
100
+ </el-tooltip>
101
+ <el-button type="text" @click="toWorkflowManage()" class="more">
102
+ <i class="el-icon-news"></i>
103
+ <span>{{ $t1("查看更多+") }}</span>
104
+ </el-button>
105
+ </div>
106
+ <div class="need-to">
107
+ <vxe-grid
108
+ :data="unDoWfRows"
109
+ ref="table-wf"
110
+ v-bind="wfOption"
111
+ @resizable-change="$vxeTableUtil.onColumnWitchChange"
112
+ @custom="$vxeTableUtil.customHandle"
113
+ ></vxe-grid>
114
+ </div>
115
+ </el-card>
116
+ </el-col>
117
+ </el-row>
118
+ <el-row class="home-bottom" v-show="isServiceProvider">
119
+ <el-col :span="10">
120
+ <el-card class="box-card">
121
+ <div slot="header" class="clearfix">
122
+ <span style="float: left">
123
+ <i class="el-icon-star-off ico"></i>
124
+ {{ $t1("快捷通道") }}
125
+ </span>
126
+ <el-tooltip
127
+ class="item"
128
+ effect="dark"
129
+ :content="$t1('刷新')"
130
+ placement="top"
131
+ >
132
+ <el-button type="text" @click="getOrderCount(true)" class="more">
133
+ <i class="el-icon-refresh"></i>
134
+ </el-button>
135
+ </el-tooltip>
136
+ </div>
137
+ <div class="shortcut-box">
138
+ <div
139
+ class="item"
140
+ v-for="item in shortcutItems"
141
+ :key="item.key"
142
+ @click="openShortcut(item)"
143
+ >
144
+ <span class="name">{{ item.name }}</span>
145
+ <span class="count">({{ item.count }})</span>
146
+ </div>
147
+ </div>
148
+ </el-card>
149
+ </el-col>
150
+ <el-col :span="14" style="padding-left: 6px">
151
+ <el-card class="box-card">
152
+ <div slot="header" class="clearfix">
153
+ <span style="float: left">
154
+ <i class="el-icon-message ico"></i>
155
+ {{ $t1("待处理消息") }}
156
+ </span>
157
+ <el-tooltip
158
+ class="item"
159
+ effect="dark"
160
+ :content="$t1('刷新')"
161
+ placement="top"
162
+ >
163
+ <el-button
164
+ type="text"
165
+ @click="getOrderMessage(true)"
166
+ class="more"
167
+ style="right: 72px"
168
+ >
169
+ <i class="el-icon-refresh"></i>
170
+ </el-button>
171
+ </el-tooltip>
172
+ <el-button type="text" @click="openOrderMessageList()"
173
+ ><span class="more">MORE+</span></el-button
174
+ >
175
+ </div>
176
+ <div class="pending-msg">
177
+ <vxe-grid
178
+ :data="pendingMessageRows"
179
+ ref="table-pending-msg"
180
+ v-bind="pendingMsgOption"
181
+ @resizable-change="$vxeTableUtil.onColumnWitchChange"
182
+ @custom="$vxeTableUtil.customHandle"
183
+ ></vxe-grid>
184
+ </div>
185
+ </el-card>
186
+ </el-col>
187
+ </el-row>
188
+ <slot></slot>
189
+ <systemNoticeInfoDialog
190
+ v-if="showSystemNoticeInfoDialog"
191
+ :visiable.sync="showSystemNoticeInfoDialog"
192
+ :param="csnRow"
193
+ :appendToTop="true"
194
+ ></systemNoticeInfoDialog>
195
+
196
+ <wfContentDialog
197
+ v-if="showWfDialog"
198
+ :visible.sync="showWfDialog"
199
+ @close="wfClose"
200
+ :option.sync="wfContentOption"
201
+ ></wfContentDialog>
202
+
203
+ <notifyMessageDialog ref="notifyMessageDialog"></notifyMessageDialog>
204
+
205
+ <notifyMessageInfoDialog
206
+ v-if="showNoticeDialog"
207
+ :visiable.sync="showNoticeDialog"
208
+ :dataId.sync="notifyMessageInfoId"
209
+ @readHanlde="notifyMessageReadHanlde"
210
+ ></notifyMessageInfoDialog>
211
+
212
+ <el-dialog
213
+ :title="$t1('处理消息')"
214
+ :append-to-body="true"
215
+ :modal-append-to-body="true"
216
+ :close-on-click-modal="false"
217
+ v-if="showDealDialog"
218
+ :visible.sync="showDealDialog"
219
+ custom-class="el-dialog dialog-style"
220
+ width="560px"
221
+ :destroy-on-close="true"
222
+ v-el-drag-dialog
223
+ >
224
+ <el-form :model="dealForm" label-width="100px" class="deal-msg-form">
225
+ <el-form-item :label="$t1('标题')">
226
+ <span>{{ dealRow.title }}</span>
227
+ </el-form-item>
228
+ <el-form-item :label="$t1('业务单据号')">
229
+ <span>{{ dealRow.bill_order_no }}</span>
230
+ </el-form-item>
231
+ <el-form-item :label="$t1('消息内容')">
232
+ <div class="deal-msg-content">{{ dealRow.content }}</div>
233
+ </el-form-item>
234
+ <el-form-item :label="$t1('处理备注')">
235
+ <el-input
236
+ type="textarea"
237
+ v-model="dealForm.deal_remark"
238
+ :rows="4"
239
+ :placeholder="$t1('请输入处理备注')"
240
+ maxlength="500"
241
+ show-word-limit
242
+ />
243
+ </el-form-item>
244
+ </el-form>
245
+ <span slot="footer" class="dialog-footer">
246
+ <el-button @click="showDealDialog = false">{{ $t1("取消") }}</el-button>
247
+ <el-button
248
+ type="primary"
249
+ :loading="dealSubmitting"
250
+ @click="submitDealMessage"
251
+ >{{ $t1("确定") }}</el-button
252
+ >
253
+ </span>
254
+ </el-dialog>
255
+
256
+ <el-dialog
257
+ :title="$t1('选择分组')"
258
+ :append-to-body="true"
259
+ :modal-append-to-body="true"
260
+ :close-on-click-modal="false"
261
+ v-if="showGroupDialog"
262
+ :visible.sync="showGroupDialog"
263
+ :modal="false"
264
+ custom-class="el-dialog dialog-style list-dialog"
265
+ width="355px"
266
+ :destroy-on-close="true"
267
+ >
268
+ <div class="cont group-list">
269
+ <div
270
+ class="item"
271
+ v-for="(notifyTemplate, index) in notifyTemplates"
272
+ :key="index"
273
+ @click="openMoreNotifyMessage(notifyTemplate.notifyType)"
274
+ >
275
+ <i class="iconfont icon-fenzu"></i>
276
+ <span class="name">{{ notifyTemplate.ntName }}</span>
277
+ <!-- <span class="nums">99+</span>-->
278
+ </div>
279
+ </div>
280
+ </el-dialog>
281
+ </div>
282
+ </template>
283
+
284
+ <script>
285
+ import systemNoticeInfoDialog from "@base/views/user/system_notice/infoDialog.vue";
286
+ import notifyMessageDialog from "@base/views/user/notify_message/dialog.vue";
287
+ import notifyMessageInfoDialog from "@base/views/user/notify_message/infoDialog";
288
+
289
+ import { getToken } from "@base/utils/auth";
290
+ import wfContentDialog from "@base/views/user/wf/wf_manage/wfContentDialog";
291
+ import corejsConfig from "@/corejsConfig";
292
+ import { getLogicParamValue } from "@base/api/user";
293
+
294
+ export default {
295
+ name: "home",
296
+ components: {
297
+ systemNoticeInfoDialog,
298
+ notifyMessageDialog,
299
+ notifyMessageInfoDialog,
300
+ wfContentDialog,
301
+ },
302
+ data() {
303
+ return {
304
+ showNoticeDialog: false,
305
+ showGroupDialog: false,
306
+ notifyTemplates: [],
307
+ userInfo: {},
308
+ companyInfo: {},
309
+ systemNotices: [],
310
+ showSystemNoticeInfoDialog: false,
311
+ csnRow: null,
312
+ headPhotoUrl: "",
313
+ dialogVisible: true,
314
+ unDoWfRows: [],
315
+ wfOption: {},
316
+ showWfDialog: false,
317
+ wfContentOption: {},
318
+ showWfContent: true,
319
+ wfContent: null,
320
+ wfDataId: "",
321
+ notifyMessages: [],
322
+ notifyMessageInfoIndex: null,
323
+ notifyMessageInfoId: null,
324
+ unreadMessageNum: 0,
325
+ activating: true,
326
+ wfTimer: null,
327
+ homeConfig: corejsConfig.homeConfig || {},
328
+ pendingMsgOption: {},
329
+ isServiceProvider: false,
330
+ roleChecked: false,
331
+ showDealDialog: false,
332
+ dealSubmitting: false,
333
+ dealRow: {},
334
+ dealForm: {
335
+ deal_remark: "",
336
+ },
337
+ shortcutItems: [
338
+ {
339
+ key: "unTakeQty",
340
+ name: "待接单",
341
+ count: 0,
342
+ formCode: "fwm_so_order_list",
343
+ query: { quick_type: 1 },
344
+ },
345
+ {
346
+ key: "outTimeBookQty",
347
+ name: "超时预约",
348
+ count: 0,
349
+ formCode: "fwm_so_order_list",
350
+ query: { quick_type: 2 },
351
+ },
352
+ {
353
+ key: "unBookQty",
354
+ name: "待预约",
355
+ count: 0,
356
+ formCode: "fwm_so_order_list",
357
+ query: { quick_type: 3 },
358
+ },
359
+ {
360
+ key: "unTakeEngineerQty",
361
+ name: "待派师傅",
362
+ count: 0,
363
+ formCode: "fwm_so_order_list",
364
+ query: { quick_type: 4 },
365
+ },
366
+ {
367
+ key: "engineerReturnQty",
368
+ name: "师傅退单",
369
+ count: 0,
370
+ formCode: "fwm_so_order_list",
371
+ query: { quick_type: 5 },
372
+ },
373
+ {
374
+ key: "unIntallQty",
375
+ name: "签收待安装",
376
+ count: 0,
377
+ formCode: "fwm_so_order_list",
378
+ query: { quick_type: 6 },
379
+ },
380
+ {
381
+ key: "unFinishQty",
382
+ name: "待完工单",
383
+ count: 0,
384
+ formCode: "fwm_so_order_list",
385
+ query: { quick_type: 7 },
386
+ },
387
+ {
388
+ key: "unCommitFinishQty",
389
+ name: "待确认完工",
390
+ count: 0,
391
+ formCode: "fwm_so_order_list",
392
+ query: { quick_type: 8 },
393
+ },
394
+ {
395
+ key: "unComplainQty",
396
+ name: "待申诉",
397
+ count: 0,
398
+ formCode: "fwm_so_order_appeal_list",
399
+ query: { query_type: 3 },
400
+ },
401
+ {
402
+ key: "urgeOrComplainQty",
403
+ name: "投诉/催单",
404
+ count: 0,
405
+ formCode: "fwm_so_order_list",
406
+ query: { quick_type: 10 },
407
+ },
408
+ ],
409
+ pendingMessageRows: [],
410
+ };
411
+ },
412
+ activated() {
413
+ this.activating = true;
414
+ if (!this.wfTimer) {
415
+ this.initWfTimer();
416
+ } else {
417
+ this.timerExcFun(true);
418
+ }
419
+ },
420
+ deactivated() {
421
+ this.activating = false;
422
+ },
423
+ beforeDestroy() {
424
+ this.clearTimer();
425
+ },
426
+ created() {
427
+ this.getUserInfo();
428
+ this.initSystemNotice();
429
+ this.initNotifyMessage();
430
+ this.initWfParam();
431
+ this.initWfTimer();
432
+ //初始化流程待办路由
433
+ this.initWorkflowManageRoute();
434
+ this.initServiceProviderRole();
435
+ },
436
+ mounted() {
437
+ this.initPendingMsgTable();
438
+ },
439
+ methods: {
440
+ initWorkflowManageRoute() {
441
+ //初始化流程待办路由
442
+ getLogicParamValue({
443
+ data: { paramCode: "workflowManageRoute" },
444
+ success: (res) => {
445
+ let value = res?.objx;
446
+ this.workflowManageRoute = value || "/basic/wf/wf_manage/list";
447
+ },
448
+ });
449
+ },
450
+ toWorkflowManage() {
451
+ this.$router.push(this.workflowManageRoute);
452
+ },
453
+ wfClose() {
454
+ this.timerExcFun(true);
455
+ },
456
+ initWfTimer() {
457
+ this.wfTimer = setInterval(() => {
458
+ this.timerExcFun(false);
459
+ }, 10000);
460
+ this.timerExcFun(true);
461
+ },
462
+ timerExcFun(isLoading) {
463
+ if (!this.activating) {
464
+ return;
465
+ }
466
+ this.getWfInfoList(isLoading);
467
+ this.getUnreadMessageNum(isLoading);
468
+ if (this.isServiceProvider) {
469
+ this.getOrderCount(isLoading);
470
+ this.getOrderMessage(isLoading);
471
+ }
472
+ this.$emit("timerHandle");
473
+ },
474
+ clearTimer() {
475
+ clearInterval(this.wfTimer);
476
+ this.wfTimer = null;
477
+ },
478
+ getUserInfo() {
479
+ this.$http({
480
+ url: USER_PREFIX + "/user/currentUser",
481
+ method: "post",
482
+ success: (res) => {
483
+ let userInfo = res.objx;
484
+ this.headPhotoUrl = this.$assetUrl(
485
+ userInfo.headPhotoUrl ||
486
+ require("@/resources/images/default-header.png")
487
+ );
488
+
489
+ this.userInfo = userInfo;
490
+ this.initServiceProviderRole();
491
+ },
492
+ });
493
+ this.$http({
494
+ url: USER_PREFIX + "/company_info/getCurrent",
495
+ method: `post`,
496
+ success: (res) => {
497
+ this.companyInfo = res.objx || {};
498
+ },
499
+ });
500
+ },
501
+ initSystemNotice() {
502
+ this.$http({
503
+ url: USER_PREFIX + "/system_notice/listPage",
504
+ data: { publish: true, searchCount: false },
505
+ method: "post",
506
+ success: (res) => {
507
+ this.systemNotices =
508
+ res.objx && res.objx.records ? res.objx.records : [];
509
+ },
510
+ });
511
+ },
512
+ openSystemNoticeDialog(row) {
513
+ this.csnRow = row || null;
514
+ this.showSystemNoticeInfoDialog = true;
515
+ },
516
+ initUnDoWfInfo() {
517
+ this.$http({
518
+ url: AGILEBPM_PREFIX + "/wf_manage/listPage",
519
+ data: { type: 0, searchCount: false },
520
+ method: "post",
521
+ success: (res) => {
522
+ this.unDoWfRows = res.objx.records || [];
523
+ },
524
+ });
525
+ },
526
+ initWfTableList() {
527
+ let that = this;
528
+ let paramColumns = this.wfParamDTOs.map((item) => {
529
+ return {
530
+ title: this.$t1(item.paramName),
531
+ field: item.paramKey,
532
+ width: 150,
533
+ };
534
+ });
535
+ var statuses = {
536
+ running: this.$t1("审核中"),
537
+ back: this.$t1("已驳回"),
538
+ end: this.$t1("已完成"),
539
+ };
540
+ let tableOption = {
541
+ vue: this,
542
+ tableRef: "table-wf",
543
+ tableName: "home-table-wf",
544
+ config: {
545
+ height: "auto",
546
+ },
547
+ columns: [
548
+ { type: "checkbox", width: 48, resizable: false, fixed: "left" },
549
+ {
550
+ title: this.$t1("单据类型"),
551
+ field: "objTypeName",
552
+ width: 150,
553
+ fixed: "left",
554
+ },
555
+ {
556
+ title: this.$t1("流程主题"),
557
+ field: "name",
558
+ width: 150,
559
+ },
560
+ {
561
+ title: this.$t1("当前任务"),
562
+ field: "taskName",
563
+ width: 150,
564
+ },
565
+ {
566
+ title: this.$t1("当前任务用户"),
567
+ field: "candidateNames",
568
+ width: 150,
569
+ },
570
+ {
571
+ title: this.$t1("启动时间"),
572
+ field: "createDate",
573
+ width: 150,
574
+ },
575
+ ...paramColumns,
576
+ {
577
+ width: 47,
578
+ fixed: "right",
579
+ title: "",
580
+ sortable: false,
581
+ slots: {
582
+ default: ({ row }) => {
583
+ return [
584
+ <a
585
+ href="javascript:void(0);"
586
+ class="a-link"
587
+ onclick={() => {
588
+ this.openWfDialog(row);
589
+ }}
590
+ >
591
+ <el-tooltip
592
+ enterable={false}
593
+ effect="dark"
594
+ content={this.$t1("查看")}
595
+ placement="top"
596
+ popper-class="tooltip-skin"
597
+ >
598
+ <i class="el-icon-edit" />
599
+ </el-tooltip>
600
+ </a>,
601
+ ];
602
+ },
603
+ },
604
+ },
605
+ ],
606
+ };
607
+ this.$vxeTableUtil.initVxeTable(tableOption).then((opts) => {
608
+ this.wfOption = opts;
609
+ });
610
+ },
611
+ initPendingMsgTable() {
612
+ let tableOption = {
613
+ vue: this,
614
+ tableRef: "table-pending-msg",
615
+ tableName: "home-table-pending-msg",
616
+ config: {
617
+ height: "auto",
618
+ toolbarConfig: {
619
+ enabled: false,
620
+ },
621
+ pagerConfig: {
622
+ enabled: false,
623
+ },
624
+ },
625
+ columns: [
626
+ {
627
+ title: this.$t1("通知时间"),
628
+ field: "create_date",
629
+ width: 150,
630
+ },
631
+ {
632
+ title: this.$t1("消息类型"),
633
+ field: "message_type",
634
+ width: 120,
635
+ slots: {
636
+ default: ({ row }) => {
637
+ return [
638
+ <span>{this.getMessageTypeName(row.message_type)}</span>,
639
+ ];
640
+ },
641
+ },
642
+ },
643
+ {
644
+ title: this.$t1("业务单据号"),
645
+ field: "bill_order_no",
646
+ minWidth: 150,
647
+ slots: {
648
+ default: ({ row }) => {
649
+ return [
650
+ <a
651
+ href="javascript:void(0);"
652
+ class="a-link"
653
+ onclick={() => {
654
+ this.openOrderView(row);
655
+ }}
656
+ >
657
+ {row.bill_order_no}
658
+ </a>,
659
+ ];
660
+ },
661
+ },
662
+ },
663
+ {
664
+ title: this.$t1("标题"),
665
+ field: "title",
666
+ minWidth: 150,
667
+ },
668
+ {
669
+ title: this.$t1("操作"),
670
+ width: 70,
671
+ fixed: "right",
672
+ sortable: false,
673
+ slots: {
674
+ default: ({ row }) => {
675
+ return [
676
+ <a
677
+ href="javascript:void(0);"
678
+ class="a-link"
679
+ onclick={() => {
680
+ this.handlePendingMessage(row);
681
+ }}
682
+ >
683
+ {this.$t1("处理")}
684
+ </a>,
685
+ ];
686
+ },
687
+ },
688
+ },
689
+ ],
690
+ };
691
+ this.$vxeTableUtil.initVxeTable(tableOption).then((opts) => {
692
+ this.pendingMsgOption = opts;
693
+ this.$nextTick(() => {
694
+ let grid = this.$refs["table-pending-msg"];
695
+ if (grid && grid.recalculate) {
696
+ grid.recalculate();
697
+ }
698
+ });
699
+ });
700
+ },
701
+ handlePendingMessage(row) {
702
+ this.dealRow = row || {};
703
+ this.dealForm = { deal_remark: "" };
704
+ this.dealSubmitting = false;
705
+ this.showDealDialog = true;
706
+ },
707
+ openOrderView(row) {
708
+ let dataId = row.order_id;
709
+ if (dataId == null) {
710
+ this.$message.warning(this.$t1("未找到工单"));
711
+ return;
712
+ }
713
+ this.wfContentOption = {
714
+ objId: dataId,
715
+ url: "form",
716
+ formCode: "fwm_so_order_view",
717
+ };
718
+ this.showWfDialog = true;
719
+ },
720
+ submitDealMessage() {
721
+ if (!this.dealRow || !this.dealRow.id) {
722
+ return;
723
+ }
724
+ this.dealSubmitting = true;
725
+ this.callFormScript({
726
+ url: YX_PREFIX + "/bd_api/fwm_so_order_message_list/doDealOrderMessage",
727
+ data: {
728
+ id: this.dealRow.id,
729
+ deal_remark: this.dealForm.deal_remark,
730
+ },
731
+ isLoading: true,
732
+ success: (res) => {
733
+ this.dealSubmitting = false;
734
+ this.showDealDialog = false;
735
+ this.$message.success(res.content || this.$t1("处理成功"));
736
+ this.getOrderCount(true);
737
+ this.getOrderMessage(true);
738
+ },
739
+ fail: (res, response) => {
740
+ this.dealSubmitting = false;
741
+ if (response && response.status == 200) {
742
+ this.$errorMsg(res);
743
+ }
744
+ },
745
+ });
746
+ },
747
+ getMessageTypeName(type) {
748
+ let map = {
749
+ 1: this.$t1("工单"),
750
+ 2: this.$t1("备件申请"),
751
+ 3: this.$t1("结算"),
752
+ 4: this.$t1("考核"),
753
+ };
754
+ return map[type] || type || "";
755
+ },
756
+ initServiceProviderRole() {
757
+ if (this.roleChecked) {
758
+ return;
759
+ }
760
+ let userId = this.$store.getters.userId || this.userInfo.id;
761
+ if (!userId) {
762
+ return;
763
+ }
764
+ this.roleChecked = true;
765
+ this.$http({
766
+ url: USER_PREFIX + "/user/getUserRole",
767
+ method: "post",
768
+ data: { id: userId },
769
+ failMsg: false,
770
+ errorMsg: false,
771
+ success: (res) => {
772
+ let rows = res.objx || [];
773
+ let codes = rows.map((row) => row.roleCode);
774
+ this.isServiceProvider =
775
+ codes.includes("yjfws") || codes.includes("ejfws");
776
+ if (this.isServiceProvider) {
777
+ this.getOrderCount(true);
778
+ this.getOrderMessage(true);
779
+ this.$nextTick(() => {
780
+ let grid = this.$refs["table-pending-msg"];
781
+ if (grid && grid.recalculate) {
782
+ grid.recalculate();
783
+ }
784
+ });
785
+ }
786
+ },
787
+ fail: () => {
788
+ this.roleChecked = false;
789
+ },
790
+ });
791
+ },
792
+ callFormScript(opts) {
793
+ let isLoading = opts.isLoading ?? true;
794
+ return this.$http({
795
+ url: opts.url,
796
+ method: "post",
797
+ data: opts.data || {},
798
+ isLoading,
799
+ modal: isLoading || false,
800
+ ignoreNetworkError: opts.ignoreNetworkError,
801
+ ignore502: opts.ignore502,
802
+ success: opts.success,
803
+ failMsg: false,
804
+ errorMsg: false,
805
+ fail:
806
+ opts.fail ||
807
+ ((res, response) => {
808
+ if (response && response.status == 200) {
809
+ this.$errorMsg(res);
810
+ }
811
+ }),
812
+ });
813
+ },
814
+ getOrderCount(isLoading) {
815
+ if (!this.isServiceProvider || !this.activating) {
816
+ return;
817
+ }
818
+ this.callFormScript({
819
+ url: YX_PREFIX + "/bd_api/intf/getOrderCount",
820
+ isLoading,
821
+ ignoreNetworkError: !isLoading,
822
+ ignore502: !isLoading,
823
+ success: (res) => {
824
+ let objx = res.objx || {};
825
+ this.shortcutItems.forEach((item) => {
826
+ item.count = objx[item.key] != null ? objx[item.key] : 0;
827
+ });
828
+ },
829
+ });
830
+ },
831
+ getOrderMessage(isLoading) {
832
+ if (!this.isServiceProvider || !this.activating) {
833
+ return;
834
+ }
835
+ this.callFormScript({
836
+ url: YX_PREFIX + "/bd_api/intf/getOrderMessage",
837
+ isLoading,
838
+ ignoreNetworkError: !isLoading,
839
+ ignore502: !isLoading,
840
+ success: (res) => {
841
+ let objx = res.objx;
842
+ this.pendingMessageRows = Array.isArray(objx)
843
+ ? objx
844
+ : (objx && objx.records) || [];
845
+ },
846
+ });
847
+ },
848
+ openShortcut(item) {
849
+ if (!item || !item.formCode) {
850
+ return;
851
+ }
852
+ this.openFormList(item.formCode, item.query, item.name);
853
+ },
854
+ openOrderMessageList() {
855
+ this.openFormList("fwm_so_order_message_list");
856
+ },
857
+ findFormPath(formCode) {
858
+ if (!formCode) {
859
+ return null;
860
+ }
861
+ let match = (path) => {
862
+ if (!path) {
863
+ return false;
864
+ }
865
+ let p = String(path).split("?")[0];
866
+ return p === formCode || p.endsWith("/" + formCode);
867
+ };
868
+ let walk = (routes) => {
869
+ for (let r of routes || []) {
870
+ if (match(r.path) || match(r.url)) {
871
+ let candidates = [r.path, r.url].filter(Boolean);
872
+ return (
873
+ candidates.find((p) => String(p).startsWith("/")) || candidates[0]
874
+ );
875
+ }
876
+ let found = walk(r.children);
877
+ if (found) {
878
+ return found;
879
+ }
880
+ }
881
+ return null;
882
+ };
883
+ return (
884
+ walk(this.$store.getters.permission_routes) ||
885
+ walk(this.$store.getters.add_routes) ||
886
+ walk(this.$store.getters.sidebarRouters)
887
+ );
888
+ },
889
+ openFormList(formCode, query, titleSuffix) {
890
+ let path = this.findFormPath(formCode);
891
+ if (!path) {
892
+ this.$message.warning(this.$t1("未找到对应菜单"));
893
+ return;
894
+ }
895
+ path = String(path).split("?")[0];
896
+ let q = query || {};
897
+ let queryData = { ...q };
898
+ if (titleSuffix) {
899
+ queryData._tabSuffix = titleSuffix;
900
+ }
901
+ if (
902
+ formCode !== "fwm_so_order_list" &&
903
+ formCode !== "fwm_so_order_appeal_list"
904
+ ) {
905
+ queryData.param = JSON.stringify(q);
906
+ }
907
+ let view = {
908
+ path,
909
+ query: queryData,
910
+ };
911
+ this.$store.dispatch("tagsView/delCachedView", view).then(() => {
912
+ this.$openView(view);
913
+ });
914
+ },
915
+ openWfDialog(row) {
916
+ this.wfContentOption = {
917
+ objId: row.objId,
918
+ url: row.url,
919
+ objTypeCode: row.objTypeCode,
920
+ formCode: row.formCode,
921
+ };
922
+ this.showWfDialog = true;
923
+ },
924
+ initNotifyMessage() {
925
+ return;
926
+ this.$http({
927
+ url: USER_PREFIX + "/notify_message/listPage",
928
+ data: { searchCount: false },
929
+ method: "post",
930
+ success: (res) => {
931
+ this.notifyMessages =
932
+ res.objx && res.objx.records ? res.objx.records : [];
933
+ },
934
+ });
935
+ },
936
+ openNotifyMessageDialog(row) {
937
+ if (row.jumpContent) {
938
+ this.$refs.notifyMessageDialog.open(row, () => {
939
+ row.readed = 1;
940
+ });
941
+ }
942
+ },
943
+ openMoreNotifyMessage(notifyType) {
944
+ let data = { notifyType: notifyType || "" };
945
+ let view = {
946
+ name: "notify_message:list",
947
+ query: data,
948
+ };
949
+ this.$store.dispatch("tagsView/delCachedView", view).then(() => {
950
+ this.$router.replace(view);
951
+ });
952
+
953
+ if (notifyType) {
954
+ this.showGroupDialog = false;
955
+ }
956
+ },
957
+ checkNotifyMessage(row, index) {
958
+ this.showNoticeDialog = true;
959
+ this.notifyMessageInfoIndex = index;
960
+ this.notifyMessageInfoId = row.id;
961
+ },
962
+ notifyMessageReadHanlde() {
963
+ this.notifyMessages[this.notifyMessageInfoIndex].readed = 1;
964
+ },
965
+ openNotifyTemplateGroupDialog() {
966
+ this.$http({
967
+ url: USER_PREFIX + `/notify_template/listPage`,
968
+ method: `post`,
969
+ data: { searchCount: false },
970
+ isLoading: true,
971
+ // loadingTarget: document.body,
972
+ success: (res) => {
973
+ this.notifyTemplates =
974
+ res.objx && res.objx.records ? res.objx.records : [];
975
+ this.showGroupDialog = true;
976
+ },
977
+ });
978
+ },
979
+ rourteTo(route) {
980
+ if (route.type == 4) {
981
+ this.jumpOutLink(route);
982
+ } else if (route.type == 3) {
983
+ let menuCode = route.menuCode;
984
+ let path = "/user/outLink/index/" + menuCode;
985
+ this.$openView({ path: path, query: { url: route.url } }, route);
986
+ } else {
987
+ let path = this.getPath(route);
988
+ if (!path) return;
989
+ this.$openView(path, route);
990
+ }
991
+ },
992
+ getPath(route3) {
993
+ let item = null;
994
+ let path = null;
995
+ if (route3.type == 0) {
996
+ //普通菜单
997
+ if (route3.url) {
998
+ path = route3.route || route3.url;
999
+ let str = "/report/vform/render/";
1000
+ if (path.indexOf(str) == 0) {
1001
+ } else {
1002
+ let pIndex = path.indexOf("?");
1003
+ if (pIndex > 0) {
1004
+ path = path.substring(0, pIndex);
1005
+ }
1006
+ }
1007
+ }
1008
+ } else if (route3.type == 5) {
1009
+ //动态表单
1010
+ let url = route3.route || route3.url;
1011
+ path = url;
1012
+ }
1013
+ if (path && path.startsWith("@")) {
1014
+ path = null;
1015
+ }
1016
+ return path;
1017
+ },
1018
+ jumpOutLink(route) {
1019
+ let path = route.url;
1020
+ if (route.type == 4 && path) {
1021
+ if (path.indexOf("token={token}") >= 0) {
1022
+ path = path.replace("token={token}", "token=" + getToken());
1023
+ }
1024
+ window.open(path);
1025
+ }
1026
+ },
1027
+ initWfParam() {
1028
+ return this.$http({
1029
+ url: USER_PREFIX + "/wf_param/list",
1030
+ method: `post`,
1031
+ data: {},
1032
+ isLoading: true,
1033
+ // loadingTarget: document.body,
1034
+ modalStrictly: true,
1035
+ success: (res) => {
1036
+ this.wfParamDTOs = res.objx || [];
1037
+ this.initWfTableList();
1038
+ },
1039
+ });
1040
+ },
1041
+ getWfInfoList(isLoading) {
1042
+ if (!this.activating) {
1043
+ return;
1044
+ }
1045
+ this.$http({
1046
+ url: USER_PREFIX + "/wf_info/listPage",
1047
+ data: { type: 0, size: 20, searchCount: false },
1048
+ method: "post",
1049
+ isLoading: isLoading,
1050
+ modal: isLoading || false,
1051
+ ignoreNetworkError: !isLoading,
1052
+ ignore502: !isLoading,
1053
+ // loadingTarget: document.body,
1054
+ success: (res) => {
1055
+ this.unDoWfRows =
1056
+ res.objx && res.objx.records ? res.objx.records : [];
1057
+ },
1058
+ failMsg: false,
1059
+ errorMsg: false,
1060
+ fail: (res, response) => {
1061
+ if (response && response.status == 200) {
1062
+ this.$errorMsg(res);
1063
+ }
1064
+ },
1065
+ });
1066
+ },
1067
+ getUnreadMessageNum(isLoading) {
1068
+ if (!this.activating) {
1069
+ return;
1070
+ }
1071
+ return this.$http({
1072
+ url: USER_PREFIX + "/notify_message/countMessage",
1073
+ method: `post`,
1074
+ data: {},
1075
+ isLoading: isLoading,
1076
+ modal: isLoading || false,
1077
+ ignoreNetworkError: !isLoading,
1078
+ ignore502: !isLoading,
1079
+ // loadingTarget: document.body,
1080
+ success: (res) => {
1081
+ this.unreadMessageNum = res.objx || 0;
1082
+ },
1083
+ failMsg: false,
1084
+ errorMsg: false,
1085
+ fail: (res, response) => {
1086
+ if (response && response.status == 200) {
1087
+ this.$errorMsg(res);
1088
+ }
1089
+ },
1090
+ });
1091
+ },
1092
+ wfhandleCallback(flag) {
1093
+ if ([1, 2, 3].includes(flag)) {
1094
+ this.showWfDialog = false;
1095
+ this.wfClose();
1096
+ }
1097
+ },
1098
+ },
1099
+ };
1100
+ </script>
1101
+ <style lang="scss" scoped>
1102
+ @import "~@/styles/variables.scss";
1103
+
1104
+ body #app .index-home {
1105
+ margin: 3px 10px;
1106
+ height: calc(100vh - 44px);
1107
+ overflow: hidden;
1108
+ display: flex;
1109
+ flex-direction: column;
1110
+
1111
+ #containt {
1112
+ margin: 0;
1113
+ background: none;
1114
+ height: auto;
1115
+ box-shadow: none;
1116
+ }
1117
+
1118
+ .i-user-info {
1119
+ background: url(~@/resources/images/home-img.png) #2a6494 no-repeat 116%
1120
+ 45px;
1121
+ margin-bottom: 6px;
1122
+ background-size: 181px;
1123
+ padding: 14px 38px 11px 16px;
1124
+ border-radius: 4px 4px;
1125
+ color: #fff;
1126
+ font-size: 12px;
1127
+ margin-top: 3px;
1128
+ height: 95px;
1129
+ overflow: hidden;
1130
+
1131
+ .name {
1132
+ opacity: 1;
1133
+ font-weight: 600;
1134
+ margin: 9px 0 14px;
1135
+ font-size: 14px;
1136
+ }
1137
+
1138
+ .img {
1139
+ width: 60px;
1140
+ height: 60px;
1141
+ float: left;
1142
+ border-radius: 50%;
1143
+ border: solid 4px rgba(255, 255, 255, 0.28);
1144
+ margin-right: 10px;
1145
+ }
1146
+ }
1147
+
1148
+ .home-notice-list {
1149
+ height: 182px;
1150
+ margin: 0 -12px;
1151
+
1152
+ .item {
1153
+ padding: 6px 12px;
1154
+ font-size: 12px;
1155
+ cursor: pointer;
1156
+ overflow: hidden;
1157
+ text-overflow: ellipsis;
1158
+ white-space: nowrap;
1159
+
1160
+ .time {
1161
+ color: #b9b9b9;
1162
+ font-size: 12px;
1163
+ right: 12px;
1164
+ background: #FFF;
1165
+ padding-left: 8px;
1166
+ }
1167
+
1168
+ &:hover {
1169
+ color: $baseColor;
1170
+ background-color: #F8FAFC;
1171
+
1172
+ .time {
1173
+ color: $baseColor;
1174
+ background-color: #F8FAFC;
1175
+ }
1176
+ }
1177
+
1178
+ &.no-read:before {
1179
+ content: "";
1180
+ width: 6px;
1181
+ height: 6px;
1182
+ background-color: $red;
1183
+ border-radius: 50%;
1184
+ vertical-align: middle;
1185
+ display: inline-block;
1186
+ margin-bottom: 1px;
1187
+ }
1188
+ }
1189
+
1190
+ &.to-reed {
1191
+ height: 300px;
1192
+ overflow: auto;
1193
+ margin: -8px -12px;
1194
+
1195
+ .item {
1196
+ white-space: initial;
1197
+ padding: 8px 22px 2px;
1198
+ position: relative;
1199
+
1200
+ &:after {
1201
+ content: "";
1202
+ position: absolute;
1203
+ left: 22px;
1204
+ right: 22px;
1205
+ border-top: dashed 1px #eee;
1206
+ height: 1px;
1207
+ bottom: 0;
1208
+ }
1209
+
1210
+ &.noread {
1211
+ &:before {
1212
+ content: "";
1213
+ width: 6px;
1214
+ height: 6px;
1215
+ background-color: $red;
1216
+ border-radius: 50%;
1217
+ margin-right: 5px;
1218
+ display: inline-block;
1219
+ position: absolute;
1220
+ left: 10px;
1221
+ top: 16px;
1222
+ }
1223
+ }
1224
+
1225
+ .el-tag {
1226
+ zoom: 0.95;
1227
+ padding: 0 5px;
1228
+ height: 24px;
1229
+ line-height: 24px;
1230
+ }
1231
+
1232
+ // .noread{
1233
+ // position: absolute;right:0;top:0;
1234
+ // span{transform: rotate(47deg);
1235
+ // -ms-transform: rotate(47deg);
1236
+ // -moz-transform: rotate(47deg);
1237
+ // -webkit-transform: rotate(47deg);
1238
+ // -o-transform: rotate(47deg);
1239
+ // z-index: 3;
1240
+ // color: #FFF;
1241
+ // position: absolute;
1242
+ // right: 1px;
1243
+ // top: 2px;}
1244
+ // &:after{
1245
+ // content: "\e618";
1246
+ // font-size: 62px;
1247
+ // font-family: "iconfont";
1248
+ // color:$red
1249
+ // }
1250
+ // }
1251
+ .time {
1252
+ position: relative;
1253
+ right: 0;
1254
+ margin-left: 12px;
1255
+ }
1256
+
1257
+ .name {
1258
+ overflow: hidden;
1259
+ text-overflow: ellipsis;
1260
+ white-space: nowrap;
1261
+ margin-top: 3px;
1262
+ display: block;
1263
+ margin-bottom: 4px;
1264
+ }
1265
+
1266
+ &:hover .name {
1267
+ color: $baseColor;
1268
+ }
1269
+
1270
+ &:first-child:before {
1271
+ border-top: none;
1272
+ }
1273
+
1274
+ .btns {
1275
+ text-align: right;
1276
+
1277
+ .el-link {
1278
+ font-size: 12px;
1279
+ display: inline-block;
1280
+ margin-left: 14px;
1281
+
1282
+ i {
1283
+ font-size: 12px;
1284
+ margin-right: 3px;
1285
+ }
1286
+ }
1287
+ }
1288
+ }
1289
+ }
1290
+ }
1291
+
1292
+ .home-top {
1293
+ flex: none;
1294
+ }
1295
+
1296
+ .home-bottom {
1297
+ flex: 1;
1298
+ min-height: 0;
1299
+ display: flex;
1300
+
1301
+ > .el-col {
1302
+ height: 100%;
1303
+ display: flex;
1304
+ flex-direction: column;
1305
+ }
1306
+
1307
+ .box-card {
1308
+ flex: 1;
1309
+ min-height: 0;
1310
+ display: flex;
1311
+ flex-direction: column;
1312
+
1313
+ &.el-card.is-always-shadow {
1314
+ margin-top: 0 !important;
1315
+ }
1316
+ }
1317
+
1318
+ ::v-deep .el-card__body {
1319
+ flex: 1;
1320
+ min-height: 0;
1321
+ display: flex;
1322
+ flex-direction: column;
1323
+ }
1324
+ }
1325
+
1326
+ .shortcut-box {
1327
+ flex: 1;
1328
+ min-height: 0;
1329
+ display: grid;
1330
+ grid-template-columns: repeat(5, 1fr);
1331
+ grid-template-rows: repeat(2, 1fr);
1332
+ gap: 8px;
1333
+
1334
+ .item {
1335
+ border: solid 1px #e2e2e2;
1336
+ border-radius: 2px;
1337
+ text-align: center;
1338
+ padding: 12px 4px 10px;
1339
+ cursor: pointer;
1340
+ background: #fff;
1341
+ display: flex;
1342
+ flex-direction: column;
1343
+ justify-content: center;
1344
+
1345
+ .name {
1346
+ display: block;
1347
+ color: #424242;
1348
+ font-size: 12px;
1349
+ line-height: 20px;
1350
+ }
1351
+
1352
+ .count {
1353
+ display: block;
1354
+ color: #d62b31;
1355
+ font-size: 12px;
1356
+ line-height: 20px;
1357
+ }
1358
+
1359
+ &:hover {
1360
+ border-color: $baseColor;
1361
+ background-color: transparentize($baseColor, 0.95);
1362
+
1363
+ .name {
1364
+ color: $baseColor;
1365
+ }
1366
+ }
1367
+ }
1368
+ }
1369
+
1370
+ .need-to {
1371
+ height: 332px;
1372
+ }
1373
+
1374
+ .pending-msg {
1375
+ flex: 1;
1376
+ min-height: 0;
1377
+ height: 100%;
1378
+ }
1379
+
1380
+ .table-box {
1381
+ width: 100%;
1382
+ font-size: 12px;
1383
+
1384
+ th {
1385
+ line-height: 32px;
1386
+ background: #f7f7f7;
1387
+ font-weight: 400;
1388
+ color: #808080;
1389
+ padding: 0 6px;
1390
+ }
1391
+
1392
+ td {
1393
+ text-align: center;
1394
+ line-height: 34px;
1395
+ color: #424242;
1396
+ border-bottom: solid 1px #eee;
1397
+ padding: 0 6px;
1398
+ }
1399
+
1400
+ tr:last-child td {
1401
+ border-bottom: none;
1402
+ }
1403
+ }
1404
+ }
1405
+
1406
+ .deal-msg-form {
1407
+ padding: 8px 12px 0;
1408
+
1409
+ .deal-msg-content {
1410
+ max-height: 160px;
1411
+ overflow: auto;
1412
+ line-height: 20px;
1413
+ white-space: pre-wrap;
1414
+ word-break: break-all;
1415
+ }
1416
+ }
1417
+
1418
+ .box-card .more {
1419
+ background-color: #f7f7f7;
1420
+ }
1421
+
1422
+ .group-list {
1423
+ padding: 18px 18px 6px 32px !important;
1424
+ height: 400px;
1425
+ overflow: auto;
1426
+
1427
+ .item {
1428
+ position: relative;
1429
+ height: 36px;
1430
+ border: solid 1px #eee;
1431
+ line-height: 34px;
1432
+ border-radius: 2px;
1433
+ padding: 0 42px 0 14px;
1434
+ margin-bottom: 10px;
1435
+ cursor: pointer;
1436
+
1437
+ &::before {
1438
+ content: "";
1439
+ width: 8px;
1440
+ height: 8px;
1441
+ border: solid 1px #eee;
1442
+ border-radius: 50%;
1443
+ display: inline-block;
1444
+ position: absolute;
1445
+ left: -16px;
1446
+ top: 13px;
1447
+ }
1448
+
1449
+ &.checked {
1450
+ &:before {
1451
+ content: "";
1452
+ background-color: $baseColor;
1453
+ border-color: $baseColor;
1454
+ }
1455
+
1456
+ background-color: transparentize($baseColor, 0.9);
1457
+ color: $baseColor;
1458
+ border-color: $baseColor;
1459
+ }
1460
+
1461
+ i {
1462
+ font-size: 12px;
1463
+ vertical-align: middle;
1464
+ }
1465
+
1466
+ .name {
1467
+ font-size: 12px;
1468
+ margin-left: 8px;
1469
+ vertical-align: middle;
1470
+ }
1471
+
1472
+ .nums {
1473
+ width: 22px;
1474
+ height: 22px;
1475
+ border-radius: 50%;
1476
+ display: inline-block;
1477
+ position: absolute;
1478
+ right: 5px;
1479
+ top: 6px;
1480
+ color: #fff;
1481
+ font-size: 12px;
1482
+ background-color: $red;
1483
+ line-height: 22px;
1484
+ text-align: center;
1485
+ }
1486
+ }
1487
+ }
1488
+
1489
+ .notice-box {
1490
+ background-color: #2a649429;
1491
+ border-radius: 0 0 4px 4px;
1492
+ padding: 9px 12px;
1493
+ margin-bottom: 5px;
1494
+ margin-top: -6px;
1495
+ position: relative;
1496
+ z-index: 2;
1497
+ font-size: 13px;
1498
+ color: #212121;
1499
+ overflow: hidden;
1500
+
1501
+ .txt {
1502
+ line-height: 28px;
1503
+ font-size: 12px;
1504
+ position: relative;
1505
+ display: inline-block;
1506
+ cursor: pointer;
1507
+
1508
+ &:before {
1509
+ content: "";
1510
+ background-color: $baseColor;
1511
+ width: 4px;
1512
+ height: 20px;
1513
+ border-radius: 2px;
1514
+ display: inline-block;
1515
+ vertical-align: middle;
1516
+ margin-right: 18px;
1517
+ }
1518
+
1519
+ i {
1520
+ font-size: 14px;
1521
+ margin-right: 12px;
1522
+ vertical-align: middle;
1523
+ }
1524
+
1525
+ > span {
1526
+ vertical-align: middle;
1527
+ height: 22px;
1528
+ line-height: 22px;
1529
+ display: inline-block;
1530
+
1531
+ b {
1532
+ color: #fff;
1533
+ margin: 0 4px;
1534
+ font-size: 16px;
1535
+ vertical-align: middle;
1536
+ background: #ff5615;
1537
+ border-radius: 50%;
1538
+ display: inline-block;
1539
+ padding: 4px;
1540
+ font-weight: 200;
1541
+ line-height: 1;
1542
+ }
1543
+ }
1544
+ }
1545
+
1546
+ .el-button {
1547
+ position: absolute;
1548
+ right: 46px;
1549
+ padding: 0;
1550
+ height: 22px;
1551
+ line-height: 22px;
1552
+ min-width: 22px;
1553
+ text-align: center;
1554
+ border-radius: 2px;
1555
+ top: 50%;
1556
+ margin-top: -11px;
1557
+
1558
+ i {
1559
+ font-size: 15px;
1560
+ }
1561
+
1562
+ &:hover {
1563
+ background-color: $baseColor;
1564
+ color: #fff;
1565
+ }
1566
+
1567
+ &.more {
1568
+ right: 12px;
1569
+ background: #f7f7f7;
1570
+
1571
+ &:hover {
1572
+ color: $baseColor;
1573
+ }
1574
+ }
1575
+ }
1576
+
1577
+ ::v-deep .el-card.is-always-shadow {
1578
+ box-shadow: 0 2px 2px 0 rgb(0 0 0 / 6%);
1579
+ }
1580
+ }
1581
+ </style>