@smallwei/avue 3.8.1 → 3.8.3

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 (376) hide show
  1. package/README.md +206 -86
  2. package/dist/avue.js +37301 -0
  3. package/dist/avue.js.map +1 -0
  4. package/dist/avue.min.js +6 -0
  5. package/dist/avue.min.mjs +2 -0
  6. package/dist/avue.mjs +2 -0
  7. package/dist/index.css +1 -0
  8. package/es/avue.min.mjs +2 -0
  9. package/es/avue.min.ts +2 -0
  10. package/es/avue.mjs +2 -0
  11. package/es/avue.ts +2 -0
  12. package/es/core/create.mjs +8 -0
  13. package/es/core/create.ts +16 -0
  14. package/es/core/dataformat.mjs +184 -0
  15. package/es/core/dataformat.ts +190 -0
  16. package/es/core/detail.mjs +74 -0
  17. package/es/core/detail.ts +81 -0
  18. package/es/core/dic.mjs +213 -0
  19. package/es/core/dic.ts +235 -0
  20. package/es/core/locale.mjs +8 -0
  21. package/es/core/locale.ts +9 -0
  22. package/es/core/packages.mjs +61 -0
  23. package/es/core/packages.ts +62 -0
  24. package/es/core/slot.mjs +32 -0
  25. package/es/core/slot.ts +30 -0
  26. package/es/global/variable.mjs +80 -0
  27. package/es/global/variable.ts +84 -0
  28. package/es/icon.mjs +9 -0
  29. package/es/icon.ts +11 -0
  30. package/es/index.mjs +127 -0
  31. package/es/index.ts +177 -0
  32. package/es/locale/browser/en.mjs +288 -0
  33. package/es/locale/browser/zh-cn.mjs +288 -0
  34. package/es/locale/browser/zh.mjs +288 -0
  35. package/es/locale/index.mjs +141 -0
  36. package/es/locale/index.ts +196 -0
  37. package/es/locale/lang/en.mjs +282 -0
  38. package/es/locale/lang/en.ts +282 -0
  39. package/es/locale/lang/zh-cn.mjs +282 -0
  40. package/es/locale/lang/zh-cn.ts +282 -0
  41. package/es/locale/lang/zh.mjs +282 -0
  42. package/es/locale/lang/zh.ts +282 -0
  43. package/es/packages/core/common/event.mjs +58 -0
  44. package/es/packages/core/common/event.ts +56 -0
  45. package/es/packages/core/common/init.mjs +134 -0
  46. package/es/packages/core/common/init.ts +133 -0
  47. package/es/packages/core/common/props.mjs +239 -0
  48. package/es/packages/core/common/props.ts +240 -0
  49. package/es/packages/core/components/dialog-form/index.mjs +29 -0
  50. package/es/packages/core/components/dialog-form/index.ts +29 -0
  51. package/es/packages/core/components/dialog-form/index.vue +108 -0
  52. package/es/packages/core/components/form/custom.mjs +41 -0
  53. package/es/packages/core/components/form/custom.ts +41 -0
  54. package/es/packages/core/components/form/index.vue +176 -0
  55. package/es/packages/core/components/icon/index.vue +37 -0
  56. package/es/packages/core/components/image-preview/index.mjs +34 -0
  57. package/es/packages/core/components/image-preview/index.ts +37 -0
  58. package/es/packages/core/components/image-preview/index.vue +215 -0
  59. package/es/packages/core/directive/contextmenu.mjs +92 -0
  60. package/es/packages/core/directive/contextmenu.ts +103 -0
  61. package/es/packages/core/directive/permission.mjs +19 -0
  62. package/es/packages/core/directive/permission.ts +18 -0
  63. package/es/packages/data/box/index.vue +66 -0
  64. package/es/packages/data/card/index.vue +62 -0
  65. package/es/packages/data/cardText/index.vue +56 -0
  66. package/es/packages/data/countdown/index.vue +81 -0
  67. package/es/packages/data/dashboard/index.vue +72 -0
  68. package/es/packages/data/display/index.vue +63 -0
  69. package/es/packages/data/icons/index.vue +68 -0
  70. package/es/packages/data/imgText/index.vue +72 -0
  71. package/es/packages/data/list/index.vue +69 -0
  72. package/es/packages/data/notice/index.vue +63 -0
  73. package/es/packages/data/operaText/index.vue +62 -0
  74. package/es/packages/data/panel/index.vue +62 -0
  75. package/es/packages/data/pay/index.vue +92 -0
  76. package/es/packages/data/price/index.vue +55 -0
  77. package/es/packages/data/product/index.vue +106 -0
  78. package/es/packages/data/profile/index.vue +91 -0
  79. package/es/packages/data/progress/index.vue +64 -0
  80. package/es/packages/data/rank/index.vue +92 -0
  81. package/es/packages/data/rotate/index.vue +69 -0
  82. package/es/packages/data/statistic/index.vue +71 -0
  83. package/es/packages/data/tabs/index.vue +64 -0
  84. package/es/packages/data/task/index.vue +82 -0
  85. package/es/packages/data/weather/index.vue +103 -0
  86. package/es/packages/element-plus/array/index.vue +115 -0
  87. package/es/packages/element-plus/article/index.vue +73 -0
  88. package/es/packages/element-plus/card/index.vue +103 -0
  89. package/es/packages/element-plus/cascader/index.vue +132 -0
  90. package/es/packages/element-plus/chat/index.vue +513 -0
  91. package/es/packages/element-plus/checkbox/index.vue +84 -0
  92. package/es/packages/element-plus/comment/index.vue +76 -0
  93. package/es/packages/element-plus/count-up/index.vue +107 -0
  94. package/es/packages/element-plus/crud/column/column-default.vue +128 -0
  95. package/es/packages/element-plus/crud/column/column-dynamic.vue +86 -0
  96. package/es/packages/element-plus/crud/column/column-menu.vue +267 -0
  97. package/es/packages/element-plus/crud/column/column-slot.vue +348 -0
  98. package/es/packages/element-plus/crud/column/column.vue +119 -0
  99. package/es/packages/element-plus/crud/column/menu.vue +78 -0
  100. package/es/packages/element-plus/crud/config.mjs +74 -0
  101. package/es/packages/element-plus/crud/config.ts +74 -0
  102. package/es/packages/element-plus/crud/dialog/dialog-column.vue +102 -0
  103. package/es/packages/element-plus/crud/dialog/dialog-excel.vue +204 -0
  104. package/es/packages/element-plus/crud/dialog/dialog-filter.vue +159 -0
  105. package/es/packages/element-plus/crud/dialog/dialog-form.vue +352 -0
  106. package/es/packages/element-plus/crud/grid/index.vue +271 -0
  107. package/es/packages/element-plus/crud/grid/item.vue +39 -0
  108. package/es/packages/element-plus/crud/index.vue +1018 -0
  109. package/es/packages/element-plus/crud/menu/header-menu.vue +175 -0
  110. package/es/packages/element-plus/crud/menu/header-search.vue +228 -0
  111. package/es/packages/element-plus/crud/menu/table-page.vue +108 -0
  112. package/es/packages/element-plus/date/index.vue +81 -0
  113. package/es/packages/element-plus/draggable/index.vue +444 -0
  114. package/es/packages/element-plus/dynamic/index.vue +353 -0
  115. package/es/packages/element-plus/flow/index.vue +339 -0
  116. package/es/packages/element-plus/flow/node.vue +84 -0
  117. package/es/packages/element-plus/form/config.mjs +6 -0
  118. package/es/packages/element-plus/form/config.ts +6 -0
  119. package/es/packages/element-plus/form/index.vue +954 -0
  120. package/es/packages/element-plus/form/menu.vue +63 -0
  121. package/es/packages/element-plus/group/index.vue +90 -0
  122. package/es/packages/element-plus/input/index.vue +1264 -0
  123. package/es/packages/element-plus/input-color/index.vue +70 -0
  124. package/es/packages/element-plus/input-cron/index.vue +363 -0
  125. package/es/packages/element-plus/input-icon/index.vue +143 -0
  126. package/es/packages/element-plus/input-map/index.vue +311 -0
  127. package/es/packages/element-plus/input-number/index.vue +91 -0
  128. package/es/packages/element-plus/input-table/index.vue +279 -0
  129. package/es/packages/element-plus/input-tag/index.vue +79 -0
  130. package/es/packages/element-plus/input-tree/index.vue +194 -0
  131. package/es/packages/element-plus/license/index.vue +155 -0
  132. package/es/packages/element-plus/login/index.vue +203 -0
  133. package/es/packages/element-plus/mention/index.vue +117 -0
  134. package/es/packages/element-plus/radio/index.vue +38 -0
  135. package/es/packages/element-plus/rate/index.vue +51 -0
  136. package/es/packages/element-plus/search/index.vue +129 -0
  137. package/es/packages/element-plus/select/index.vue +292 -0
  138. package/es/packages/element-plus/sign/index.vue +230 -0
  139. package/es/packages/element-plus/slider/index.vue +66 -0
  140. package/es/packages/element-plus/switch/index.vue +72 -0
  141. package/es/packages/element-plus/tabs/index.vue +62 -0
  142. package/es/packages/element-plus/text-ellipsis/index.vue +104 -0
  143. package/es/packages/element-plus/time/index.vue +81 -0
  144. package/es/packages/element-plus/title/index.vue +30 -0
  145. package/es/packages/element-plus/tree/index.vue +460 -0
  146. package/es/packages/element-plus/upload/index.vue +728 -0
  147. package/es/packages/element-plus/verify/index.vue +62 -0
  148. package/es/packages/element-plus/video/index.vue +90 -0
  149. package/es/plugin/ali/index.mjs +4 -0
  150. package/es/plugin/ali/index.ts +6 -0
  151. package/es/plugin/clipboard/index.mjs +61 -0
  152. package/es/plugin/clipboard/index.ts +67 -0
  153. package/es/plugin/export/_blob.mjs +151 -0
  154. package/es/plugin/export/_blob.ts +176 -0
  155. package/es/plugin/export/_export2Excel.mjs +141 -0
  156. package/es/plugin/export/_export2Excel.ts +166 -0
  157. package/es/plugin/export/index.mjs +263 -0
  158. package/es/plugin/export/index.ts +274 -0
  159. package/es/plugin/logs/index.mjs +46 -0
  160. package/es/plugin/logs/index.ts +66 -0
  161. package/es/plugin/print/index.mjs +145 -0
  162. package/es/plugin/print/index.ts +155 -0
  163. package/es/plugin/qiniu/index.mjs +78 -0
  164. package/es/plugin/qiniu/index.ts +88 -0
  165. package/es/plugin/screenshot/index.mjs +8 -0
  166. package/es/plugin/screenshot/index.ts +9 -0
  167. package/es/plugin/video/index.mjs +52 -0
  168. package/es/plugin/video/index.ts +60 -0
  169. package/es/plugin/watermark/index.mjs +114 -0
  170. package/es/plugin/watermark/index.ts +127 -0
  171. package/es/plugin/watermark/watermark.mjs +109 -0
  172. package/es/plugin/watermark/watermark.ts +121 -0
  173. package/es/ui/data/index.mjs +49 -0
  174. package/es/ui/data/index.ts +51 -0
  175. package/es/ui/element-plus/index.mjs +87 -0
  176. package/es/ui/element-plus/index.ts +89 -0
  177. package/es/ui/index.mjs +4 -0
  178. package/es/ui/index.ts +6 -0
  179. package/es/utils/bem.mjs +29 -0
  180. package/es/utils/bem.ts +36 -0
  181. package/es/utils/mock.mjs +137 -0
  182. package/es/utils/mock.ts +151 -0
  183. package/es/utils/util.mjs +370 -0
  184. package/es/utils/util.ts +392 -0
  185. package/es/utils/validate.mjs +18 -0
  186. package/es/utils/validate.ts +23 -0
  187. package/es/version.mjs +1 -0
  188. package/es/version.ts +1 -0
  189. package/lib/avue.js +11 -31398
  190. package/lib/avue.min.js +11 -6
  191. package/lib/avue.min.ts +2 -0
  192. package/lib/avue.ts +2 -0
  193. package/lib/core/create.js +14 -0
  194. package/lib/core/create.ts +16 -0
  195. package/lib/core/dataformat.js +194 -0
  196. package/lib/core/dataformat.ts +190 -0
  197. package/lib/core/detail.js +81 -0
  198. package/lib/core/detail.ts +81 -0
  199. package/lib/core/dic.js +220 -0
  200. package/lib/core/dic.ts +235 -0
  201. package/lib/core/locale.js +10 -0
  202. package/lib/core/locale.ts +9 -0
  203. package/lib/core/packages.js +66 -0
  204. package/lib/core/packages.ts +62 -0
  205. package/lib/core/slot.js +34 -0
  206. package/lib/core/slot.ts +30 -0
  207. package/lib/global/variable.js +83 -0
  208. package/lib/global/variable.ts +84 -0
  209. package/lib/icon.js +44 -0
  210. package/lib/icon.ts +11 -0
  211. package/lib/index.css +1 -1
  212. package/lib/index.js +134 -0
  213. package/lib/index.ts +177 -0
  214. package/lib/locale/browser/en.js +288 -0
  215. package/lib/locale/browser/zh-cn.js +288 -0
  216. package/lib/locale/browser/zh.js +288 -0
  217. package/lib/locale/index.js +153 -47
  218. package/lib/locale/index.ts +196 -0
  219. package/lib/locale/lang/en.js +284 -100
  220. package/lib/locale/lang/en.ts +282 -0
  221. package/lib/locale/lang/zh-cn.js +284 -0
  222. package/lib/locale/lang/zh-cn.ts +282 -0
  223. package/lib/locale/lang/zh.js +284 -100
  224. package/lib/locale/lang/zh.ts +282 -0
  225. package/lib/packages/core/common/event.js +61 -0
  226. package/lib/packages/core/common/event.ts +56 -0
  227. package/lib/packages/core/common/init.js +140 -0
  228. package/lib/packages/core/common/init.ts +133 -0
  229. package/lib/packages/core/common/props.js +245 -0
  230. package/lib/packages/core/common/props.ts +240 -0
  231. package/lib/packages/core/components/dialog-form/index.js +35 -0
  232. package/lib/packages/core/components/dialog-form/index.ts +29 -0
  233. package/lib/packages/core/components/dialog-form/index.vue +108 -0
  234. package/lib/packages/core/components/form/custom.js +43 -0
  235. package/lib/packages/core/components/form/custom.ts +41 -0
  236. package/lib/packages/core/components/form/index.vue +176 -0
  237. package/lib/packages/core/components/icon/index.vue +37 -0
  238. package/lib/packages/core/components/image-preview/index.js +40 -0
  239. package/lib/packages/core/components/image-preview/index.ts +37 -0
  240. package/lib/packages/core/components/image-preview/index.vue +215 -0
  241. package/lib/packages/core/directive/contextmenu.js +94 -0
  242. package/lib/packages/core/directive/contextmenu.ts +103 -0
  243. package/lib/packages/core/directive/permission.js +21 -0
  244. package/lib/packages/core/directive/permission.ts +18 -0
  245. package/lib/packages/data/box/index.vue +66 -0
  246. package/lib/packages/data/card/index.vue +62 -0
  247. package/lib/packages/data/cardText/index.vue +56 -0
  248. package/lib/packages/data/countdown/index.vue +81 -0
  249. package/lib/packages/data/dashboard/index.vue +72 -0
  250. package/lib/packages/data/display/index.vue +63 -0
  251. package/lib/packages/data/icons/index.vue +68 -0
  252. package/lib/packages/data/imgText/index.vue +72 -0
  253. package/lib/packages/data/list/index.vue +69 -0
  254. package/lib/packages/data/notice/index.vue +63 -0
  255. package/lib/packages/data/operaText/index.vue +62 -0
  256. package/lib/packages/data/panel/index.vue +62 -0
  257. package/lib/packages/data/pay/index.vue +92 -0
  258. package/lib/packages/data/price/index.vue +55 -0
  259. package/lib/packages/data/product/index.vue +106 -0
  260. package/lib/packages/data/profile/index.vue +91 -0
  261. package/lib/packages/data/progress/index.vue +64 -0
  262. package/lib/packages/data/rank/index.vue +92 -0
  263. package/lib/packages/data/rotate/index.vue +69 -0
  264. package/lib/packages/data/statistic/index.vue +71 -0
  265. package/lib/packages/data/tabs/index.vue +64 -0
  266. package/lib/packages/data/task/index.vue +82 -0
  267. package/lib/packages/data/weather/index.vue +103 -0
  268. package/lib/packages/element-plus/array/index.vue +115 -0
  269. package/lib/packages/element-plus/article/index.vue +73 -0
  270. package/lib/packages/element-plus/card/index.vue +103 -0
  271. package/lib/packages/element-plus/cascader/index.vue +132 -0
  272. package/lib/packages/element-plus/chat/index.vue +513 -0
  273. package/lib/packages/element-plus/checkbox/index.vue +84 -0
  274. package/lib/packages/element-plus/comment/index.vue +76 -0
  275. package/lib/packages/element-plus/count-up/index.vue +107 -0
  276. package/lib/packages/element-plus/crud/column/column-default.vue +128 -0
  277. package/lib/packages/element-plus/crud/column/column-dynamic.vue +86 -0
  278. package/lib/packages/element-plus/crud/column/column-menu.vue +267 -0
  279. package/lib/packages/element-plus/crud/column/column-slot.vue +348 -0
  280. package/lib/packages/element-plus/crud/column/column.vue +119 -0
  281. package/lib/packages/element-plus/crud/column/menu.vue +78 -0
  282. package/lib/packages/element-plus/crud/config.js +76 -0
  283. package/lib/packages/element-plus/crud/config.ts +74 -0
  284. package/lib/packages/element-plus/crud/dialog/dialog-column.vue +102 -0
  285. package/lib/packages/element-plus/crud/dialog/dialog-excel.vue +204 -0
  286. package/lib/packages/element-plus/crud/dialog/dialog-filter.vue +159 -0
  287. package/lib/packages/element-plus/crud/dialog/dialog-form.vue +352 -0
  288. package/lib/packages/element-plus/crud/grid/index.vue +271 -0
  289. package/lib/packages/element-plus/crud/grid/item.vue +39 -0
  290. package/lib/packages/element-plus/crud/index.vue +1018 -0
  291. package/lib/packages/element-plus/crud/menu/header-menu.vue +175 -0
  292. package/lib/packages/element-plus/crud/menu/header-search.vue +228 -0
  293. package/lib/packages/element-plus/crud/menu/table-page.vue +108 -0
  294. package/lib/packages/element-plus/date/index.vue +81 -0
  295. package/lib/packages/element-plus/draggable/index.vue +444 -0
  296. package/lib/packages/element-plus/dynamic/index.vue +353 -0
  297. package/lib/packages/element-plus/flow/index.vue +339 -0
  298. package/lib/packages/element-plus/flow/node.vue +84 -0
  299. package/lib/packages/element-plus/form/config.js +8 -0
  300. package/lib/packages/element-plus/form/config.ts +6 -0
  301. package/lib/packages/element-plus/form/index.vue +954 -0
  302. package/lib/packages/element-plus/form/menu.vue +63 -0
  303. package/lib/packages/element-plus/group/index.vue +90 -0
  304. package/lib/packages/element-plus/input/index.vue +1264 -0
  305. package/lib/packages/element-plus/input-color/index.vue +70 -0
  306. package/lib/packages/element-plus/input-cron/index.vue +363 -0
  307. package/lib/packages/element-plus/input-icon/index.vue +143 -0
  308. package/lib/packages/element-plus/input-map/index.vue +311 -0
  309. package/lib/packages/element-plus/input-number/index.vue +91 -0
  310. package/lib/packages/element-plus/input-table/index.vue +279 -0
  311. package/lib/packages/element-plus/input-tag/index.vue +79 -0
  312. package/lib/packages/element-plus/input-tree/index.vue +194 -0
  313. package/lib/packages/element-plus/license/index.vue +155 -0
  314. package/lib/packages/element-plus/login/index.vue +203 -0
  315. package/lib/packages/element-plus/mention/index.vue +117 -0
  316. package/lib/packages/element-plus/radio/index.vue +38 -0
  317. package/lib/packages/element-plus/rate/index.vue +51 -0
  318. package/lib/packages/element-plus/search/index.vue +129 -0
  319. package/lib/packages/element-plus/select/index.vue +292 -0
  320. package/lib/packages/element-plus/sign/index.vue +230 -0
  321. package/lib/packages/element-plus/slider/index.vue +66 -0
  322. package/lib/packages/element-plus/switch/index.vue +72 -0
  323. package/lib/packages/element-plus/tabs/index.vue +62 -0
  324. package/lib/packages/element-plus/text-ellipsis/index.vue +104 -0
  325. package/lib/packages/element-plus/time/index.vue +81 -0
  326. package/lib/packages/element-plus/title/index.vue +30 -0
  327. package/lib/packages/element-plus/tree/index.vue +460 -0
  328. package/lib/packages/element-plus/upload/index.vue +728 -0
  329. package/lib/packages/element-plus/verify/index.vue +62 -0
  330. package/lib/packages/element-plus/video/index.vue +90 -0
  331. package/lib/plugin/ali/index.js +8 -0
  332. package/lib/plugin/ali/index.ts +6 -0
  333. package/lib/plugin/clipboard/index.js +64 -0
  334. package/lib/plugin/clipboard/index.ts +67 -0
  335. package/lib/plugin/export/_blob.js +151 -0
  336. package/lib/plugin/export/_blob.ts +176 -0
  337. package/lib/plugin/export/_export2Excel.js +145 -0
  338. package/lib/plugin/export/_export2Excel.ts +166 -0
  339. package/lib/plugin/export/index.js +268 -0
  340. package/lib/plugin/export/index.ts +274 -0
  341. package/lib/plugin/logs/index.js +48 -0
  342. package/lib/plugin/logs/index.ts +66 -0
  343. package/lib/plugin/print/index.js +147 -0
  344. package/lib/plugin/print/index.ts +155 -0
  345. package/lib/plugin/qiniu/index.js +82 -0
  346. package/lib/plugin/qiniu/index.ts +88 -0
  347. package/lib/plugin/screenshot/index.js +14 -0
  348. package/lib/plugin/screenshot/index.ts +9 -0
  349. package/lib/plugin/video/index.js +55 -0
  350. package/lib/plugin/video/index.ts +60 -0
  351. package/lib/plugin/watermark/index.js +121 -0
  352. package/lib/plugin/watermark/index.ts +127 -0
  353. package/lib/plugin/watermark/watermark.js +111 -0
  354. package/lib/plugin/watermark/watermark.ts +121 -0
  355. package/lib/ui/data/index.js +54 -0
  356. package/lib/ui/data/index.ts +51 -0
  357. package/lib/ui/element-plus/index.js +92 -0
  358. package/lib/ui/element-plus/index.ts +89 -0
  359. package/lib/ui/index.js +9 -0
  360. package/lib/ui/index.ts +6 -0
  361. package/lib/utils/bem.js +31 -0
  362. package/lib/utils/bem.ts +36 -0
  363. package/lib/utils/mock.js +142 -0
  364. package/lib/utils/mock.ts +151 -0
  365. package/lib/utils/util.js +403 -0
  366. package/lib/utils/util.ts +392 -0
  367. package/lib/utils/validate.js +21 -0
  368. package/lib/utils/validate.ts +23 -0
  369. package/lib/version.js +4 -0
  370. package/lib/version.ts +1 -0
  371. package/package.json +24 -11
  372. package/types/index.d.ts +141 -0
  373. package/types/shims-aliases.d.ts +4 -0
  374. package/types/shims-vue.d.ts +6 -0
  375. package/lib/avue.js.map +0 -1
  376. package/lib/locale/format.js +0 -44
@@ -0,0 +1,513 @@
1
+ <template>
2
+ <div :class="b()"
3
+ :style="heightStyleName"
4
+ @keyup.enter="handleSend">
5
+ <audio ref="chatAudio">
6
+ <source :src="audio[0]"
7
+ type="audio/ogg">
8
+ <source :src="audio[1]"
9
+ type="audio/mpeg">
10
+ <source :src="audio[2]"
11
+ type="audio/wav">
12
+ </audio>
13
+ <div class="web__logo">
14
+ <img :src="config.img"
15
+ class="web__logo-img"
16
+ alt="">
17
+ <div class="web__logo-info">
18
+ <p class="web__logo-name">{{config.name}}</p>
19
+ <p class="web__logo-dept">{{config.dept}}</p>
20
+ </div>
21
+ <slot name="header"></slot>
22
+ </div>
23
+ <div class="web__content">
24
+ <div :style="widthStyleName">
25
+ <div class="web__main"
26
+ ref="main">
27
+ <div class="web__main-item"
28
+ v-for="(item,index) in list"
29
+ :key="index"
30
+ :class="{'web__main-item--mine':item.mine}">
31
+ <div class="web__main-user">
32
+ <img :src="item.img">
33
+ <cite>
34
+ {{item.name}}
35
+ <i>{{item.date}}</i>
36
+ </cite>
37
+ </div>
38
+ <div class="web__main-text">
39
+ <div class="web__main-arrow"></div>
40
+ <span v-html="handleDetail(item.text.text)"
41
+ ref="content"></span>
42
+ <ul class=" web__main-list"
43
+ v-if="!validatenull(item.text.list)">
44
+ <li @click="handleItemMsg(citem)"
45
+ v-for="(citem,cindex) in item.text.list"
46
+ :key="cindex">{{citem.text}}</li>
47
+ </ul>
48
+ </div>
49
+ </div>
50
+ </div>
51
+ <div class="web__footer"
52
+ :style="widthStyleName">
53
+ <div class="web__tools">
54
+ <el-icon v-if="tools.img"
55
+ @click="handleUpload('img')">
56
+ <el-icon-picture />
57
+ </el-icon>
58
+ <el-icon v-if="tools.video"
59
+ @click="handleUpload('video')">
60
+ <el-icon-video-camera />
61
+ </el-icon>
62
+ <el-icon v-if="tools.file"
63
+ @click="handleUpload('file')">
64
+ <el-icon-folder-opened />
65
+ </el-icon>
66
+ <slot name="menu"></slot>
67
+ </div>
68
+ <div class="web__msg">
69
+ <textarea v-model="msg"
70
+ rows="2"
71
+ :placeholder="messagePlaceholder"
72
+ class="web__msg-input"></textarea>
73
+ <div class="web__msg-menu">
74
+ <el-dropdown split-button
75
+ class="web__msg-submit"
76
+ type="primary"
77
+ :size="size"
78
+ @click="handleSend"
79
+ trigger="click">
80
+ {{ t("chat.sendBtn") }}
81
+ <template #dropdown>
82
+ <el-dropdown-menu>
83
+ <el-dropdown-item>
84
+ <el-popover placement="top"
85
+ width="160"
86
+ v-model="visible">
87
+ <div>
88
+ <el-input :size="size"
89
+ style="margin-bottom:10px"
90
+ :rows="3"
91
+ show-word-limit
92
+ :placeholder="t('chat.quickReplyPlaceholder')"
93
+ v-model="keys"
94
+ type="textarea"></el-input>
95
+ <div style="text-align: right; margin: 0">
96
+ <el-button :size="size"
97
+ text
98
+ @click="visible = false">{{t("common.cancelBtn")}}</el-button>
99
+ <el-button type="primary"
100
+ :size="size"
101
+ @click="addKey">{{t("common.submitBtn")}}</el-button>
102
+ </div>
103
+ </div>
104
+ <template #reference>
105
+ <el-button texts
106
+ icon="el-icon-plus"></el-button>
107
+ </template>
108
+
109
+ </el-popover>
110
+
111
+ </el-dropdown-item>
112
+ <el-scrollbar style="height:100px">
113
+ <el-dropdown-item v-for="(item,index) in keylist"
114
+ :key="index"
115
+ @click="sendKey(item)">
116
+ <el-tooltip effect="dark"
117
+ :content="item"
118
+ placement="top">
119
+ <span> {{item.substr(0,10)}}{{item.length>10?'...':''}}</span>
120
+ </el-tooltip>
121
+
122
+ </el-dropdown-item>
123
+ </el-scrollbar>
124
+
125
+ </el-dropdown-menu>
126
+ </template>
127
+
128
+ </el-dropdown>
129
+ </div>
130
+ </div>
131
+ </div>
132
+ </div>
133
+ <slot></slot>
134
+ </div>
135
+ <div v-if="upload.box">
136
+ <el-dialog :title="upload.title"
137
+ destroy-on-close
138
+ :append-to-body="$AVUE.appendToBody"
139
+ v-model="upload.box"
140
+ width="30%">
141
+ <el-form ref="form"
142
+ :model="upload">
143
+ <el-form-item prop="src"
144
+ :rules="[
145
+ { required: true, message: t('chat.addressRequired')},
146
+ ]">
147
+ <el-input :size="size"
148
+ style="margin-bottom:10px"
149
+ :rows="4"
150
+ show-word-limit
151
+ maxlength="100"
152
+ :placeholder="t('chat.addressPlaceholder')"
153
+ v-model="upload.src"
154
+ type="textarea"></el-input>
155
+ </el-form-item>
156
+ </el-form>
157
+ <template #footer>
158
+ <span class="dialog-footer">
159
+ <el-button @click="upload.box=false"
160
+ size="small">{{t("common.cancelBtn")}}</el-button>
161
+ <el-button type="primary"
162
+ @click="uploadSubmit"
163
+ size="small">{{t("common.submitBtn")}}</el-button>
164
+ </span>
165
+ </template>
166
+
167
+ </el-dialog>
168
+ </div>
169
+ <div v-if="show">
170
+ <el-dialog v-model="show"
171
+ width="40%"
172
+ destroy-on-close
173
+ :append-to-body="$AVUE.appendToBody"
174
+ :before-close="handleClose"
175
+ class="web__dialog">
176
+ <img :src="imgSrc"
177
+ v-if="imgSrc"
178
+ style="width:100%;object-fit: cover;">
179
+ <video :src="videoSrc"
180
+ v-if="videoSrc"
181
+ style="width:100%;object-fit: cover;"
182
+ controls="controls">
183
+ </video>
184
+ <audio :src="audioSrc"
185
+ v-if="audioSrc"
186
+ style="width:100%;object-fit: cover;"
187
+ controls="controls">
188
+ </audio>
189
+ </el-dialog>
190
+ </div>
191
+
192
+ </div>
193
+ </template>
194
+
195
+ <script>
196
+ import create from "../../../core/create.js";
197
+ import locale from "../../../core/locale.js";
198
+ import dayjs from 'dayjs'
199
+ export default create({
200
+ name: "chat",
201
+ mixins: [locale],
202
+ data () {
203
+ return {
204
+ upload: {
205
+ box: false,
206
+ src: "",
207
+ type: '',
208
+ title: '',
209
+ },
210
+ visible: false,
211
+ imgSrc: '',
212
+ videoSrc: '',
213
+ audioSrc: '',
214
+ keys: "",
215
+ show: false
216
+ }
217
+ },
218
+ props: {
219
+ size: String,
220
+ beforeOpen: Function,
221
+ tools: {
222
+ type: Object,
223
+ default: () => {
224
+ return {
225
+ img: true,
226
+ video: true,
227
+ file: true
228
+ }
229
+ }
230
+ },
231
+ placeholder: {
232
+ type: String,
233
+ default: ''
234
+ },
235
+ width: {
236
+ type: [String, Number],
237
+ default: 320
238
+ },
239
+ height: {
240
+ type: [String, Number],
241
+ default: 520
242
+ },
243
+ modelValue: {
244
+ type: String
245
+ },
246
+ notice: {
247
+ type: Boolean,
248
+ default: true
249
+ },
250
+ audio: {
251
+ type: Array,
252
+ default: () => {
253
+ return [
254
+ 'https://www.helloweba.net/demo/notifysound/notify.ogg',
255
+ 'https://www.helloweba.net/demo/notifysound/notify.mp3',
256
+ 'https://www.helloweba.net/demo/notifysound/notify.wav'
257
+ ]
258
+ }
259
+ },
260
+ config: {
261
+ type: Object,
262
+ default: () => {
263
+ return {}
264
+ }
265
+ },
266
+ keylist: {
267
+ type: Array,
268
+ default: () => {
269
+ return []
270
+ }
271
+ },
272
+ list: {
273
+ type: Array,
274
+ default: () => {
275
+ return []
276
+ }
277
+ }
278
+ },
279
+ computed: {
280
+ msg: {
281
+ get () {
282
+ return this.modelValue
283
+ },
284
+ set (val) {
285
+ this.$emit('update:modelValue', val);
286
+ this.$emit('change', val);
287
+ }
288
+ },
289
+ heightStyleName () {
290
+ return {
291
+ height: this.setPx(this.height)
292
+ }
293
+ },
294
+ widthStyleName () {
295
+ return {
296
+ width: this.setPx(this.width),
297
+ }
298
+ },
299
+ msgActive () {
300
+ return !this.validatenull(this.msg.replace(/[\r\n]/g, ""))
301
+ },
302
+ messagePlaceholder () {
303
+ return this.placeholder || this.t('chat.inputPlaceholder');
304
+ }
305
+ },
306
+ methods: {
307
+ uploadSubmit () {
308
+ this.$refs.form.validate((valid) => {
309
+ if (valid) {
310
+ this.upload.box = false;
311
+ this.$emit('submit', this.getDetail(this.upload));
312
+ }
313
+ });
314
+ },
315
+ handleUpload (type) {
316
+ this.upload.type = type;
317
+ this.upload.src = '';
318
+ if (type === 'img') {
319
+ this.upload.title = this.t('chat.uploadImageTitle')
320
+ } else if (type === 'video') {
321
+ this.upload.title = this.t('chat.uploadVideoTitle')
322
+ } else if (type === 'file') {
323
+ this.upload.title = this.t('chat.uploadFileTitle')
324
+ }
325
+ this.upload.box = true;
326
+ },
327
+ handleClose (done) {
328
+ this.imgSrc = undefined;
329
+ this.videoSrc = undefined;
330
+ this.audioSrc = undefined;
331
+ done();
332
+ },
333
+ addKey () {
334
+ if (this.keys !== '') {
335
+ this.$emit('keyadd', this.keys)
336
+ this.keys = '';
337
+ }
338
+ this.visible = false
339
+
340
+ },
341
+ sendKey (key) {
342
+ this.$emit('keysend', key)
343
+ },
344
+ getAudio () {
345
+ this.$refs.chatAudio.play();
346
+ },
347
+ getNotification (text) {
348
+ const safe = this;
349
+ const NotificationInstance = Notification || window.Notification;
350
+ if (!!NotificationInstance) {
351
+ const permissionNow = NotificationInstance.permission;
352
+ if (permissionNow === 'granted') {//允许通知
353
+ CreatNotification();
354
+ } else if (permissionNow === 'denied') {
355
+ console.log(this.t('chat.notificationDenied'));
356
+ } else {
357
+ setPermission();
358
+ }
359
+ function setPermission () {
360
+ //请求获取通知权限
361
+ NotificationInstance.requestPermission(function (PERMISSION) {
362
+ if (PERMISSION === 'granted') {
363
+ CreatNotification();
364
+ } else {
365
+ console.log(safe.t('chat.notificationRejected'));
366
+ }
367
+ });
368
+ }
369
+ function CreatNotification () {
370
+ const n = new Notification(safe.config.name, {
371
+ body: text,
372
+ icon: safe.config.img
373
+ });
374
+ n.onshow = function () {
375
+ safe.getAudio();
376
+ setTimeout(() => {
377
+ n.close();
378
+ }, 2500);
379
+ }
380
+ n.onclick = function (e) {
381
+ n.close();
382
+ }
383
+ }
384
+ }
385
+ },
386
+ //mine为'我'的对话
387
+ //text为内容
388
+ pushMsg (params = {}) {
389
+ const mine = params.mine === true ? true : false;
390
+ const text = params.text || {};
391
+ const date = params.date
392
+ const textObj = {
393
+ date: date || dayjs().format('YYYY-MM-DD HH:mm:ss'),
394
+ text: (() => {
395
+ if (typeof (text) != 'object') {
396
+ return {
397
+ text: text
398
+ }
399
+ }
400
+ return text
401
+ })(),
402
+ mine: mine,
403
+ img: mine ? this.config.myImg : this.config.img,
404
+ name: mine ? this.config.myName : this.config.name,
405
+ }
406
+ this.list.push(textObj)
407
+ setTimeout(() => {
408
+ this.setScroll();
409
+ }, 50)
410
+
411
+ },
412
+ setScroll (count) {
413
+ //滚动条一直处于下方
414
+ this.$nextTick(() => {
415
+ this.$refs.main.scrollTop = count || this.$refs.main.scrollHeight
416
+ })
417
+ },
418
+ //用户主动发送
419
+ handleSend () {
420
+ if (this.msgActive) {
421
+ this.$emit('submit');
422
+ }
423
+ },
424
+ //选择列表
425
+ handleItemMsg (item) {
426
+ this.$emit('submit', item.ask);
427
+ },
428
+ //处理排版
429
+ handleDetail (html = '') {
430
+ let result = html;
431
+ setTimeout(() => {
432
+ const list = this.$refs.content || [];
433
+ list.forEach(ele => {
434
+ for (let i = 0; i < ele.children.length; i++) {
435
+ const child = ele.children[i];
436
+ if (child.getAttribute('data-flag') != 0) {
437
+ child.setAttribute('data-flag', 0)
438
+ child.onclick = () => {
439
+ this.handleEvent(child.dataset)
440
+ };
441
+ if (child.tagName === 'IMG') {
442
+ child.className = 'web__msg--img'
443
+ child.src = child.getAttribute('data-src')
444
+ } else if (child.tagName === 'VIDEO') {
445
+ child.className = 'web__msg--video'
446
+ child.src = child.getAttribute('data-src')
447
+ } else if (child.tagName === 'AUDIO') {
448
+ child.className = 'web__msg--audio'
449
+ child.controls = 'controls';
450
+ child.src = child.getAttribute('data-src')
451
+ } else if (child.tagName === 'FILE') {
452
+ child.className = 'web__msg--file'
453
+ child.innerHTML = `<h2>${this.t('chat.fileLabel')}</h2><span>${child.getAttribute('data-name')}</span>`
454
+ } else if (child.tagName === 'MAP') {
455
+ child.className = 'web__msg--file web__msg--map'
456
+ child.innerHTML = `<h2>${this.t('chat.mapLabel')}</h2><span>${child.getAttribute('data-longitude')} , ${child.getAttribute('data-latitude')}<br />${child.getAttribute('data-address')}</span>`
457
+ }
458
+ this.setScroll();
459
+ }
460
+ }
461
+ });
462
+ }, 0)
463
+ return result;
464
+ },
465
+ getDetail (params = {}) {
466
+ const { type, src, name, longitude, latitude, address } = params;
467
+ if (type === 'img') {
468
+ return `<img data-type="IMG" data-src="${src}" />`
469
+ } else if (type === 'video') {
470
+ return `<video data-type="VIDEO" data-src="${src}"></video>`
471
+ } else if (type === 'audio') {
472
+ return `<audio data-type="AUDIO" data-src="${src}"></audio>`
473
+ } else if (type === 'file') {
474
+ return `<file data-type="FILE" data-name="${name}" data-src="${src}"></file>`
475
+ } else if (type === 'map') {
476
+ return `<map data-type="MAP" data-src="${src}" data-address="${address} "data-latitude="${latitude}" data-longitude="${longitude}"></map>`
477
+ }
478
+ },
479
+ //处理事件
480
+ handleEvent (params) {
481
+ const callback = () => {
482
+ if (params.type === 'IMG') {
483
+ this.imgSrc = params.src;
484
+ this.show = true;
485
+ } else if (params.type === 'VIDEO') {
486
+ this.videoSrc = params.src;
487
+ this.show = true;
488
+ } else if (params.type === 'AUDIO') {
489
+ this.audioSrc = params.src;
490
+ this.show = true;
491
+ } else if (params.type === 'FILE') {
492
+ window.open(params.src)
493
+ }
494
+ }
495
+ if (typeof this.beforeOpen === 'function') {
496
+ this.beforeOpen(params, callback)
497
+ } else {
498
+ callback();
499
+ }
500
+
501
+ },
502
+ rootSendMsg (msg) {
503
+ this.pushMsg({
504
+ text: msg
505
+ });
506
+ if (this.notice) {
507
+ this.getNotification(msg.text || msg);
508
+ }
509
+ }
510
+ }
511
+ });
512
+ </script>
513
+
@@ -0,0 +1,84 @@
1
+ <template>
2
+ <div :class="b()">
3
+ <el-checkbox v-if="all"
4
+ :class="b('all')"
5
+ :disabled="disabled"
6
+ :indeterminate="isIndeterminate"
7
+ v-model="checkAll"
8
+ @change="handleCheckAll">{{t('check.checkAll')}}</el-checkbox>
9
+ <el-checkbox-group v-model="text"
10
+ @change="handleCheckChange"
11
+ :disabled="disabled"
12
+ :size="size"
13
+ :fill="fill"
14
+ :text-color="textColor"
15
+ :min="min"
16
+ :max="max"
17
+ @click="handleClick">
18
+ <component :is="componentName"
19
+ v-for="(item,index) in dic"
20
+ :border="border"
21
+ :size="size"
22
+ :value="item[valueKey]"
23
+ :readonly="readonly"
24
+ :disabled="item[disabledKey]"
25
+ :key="index">{{item[labelKey]}}
26
+ </component>
27
+ </el-checkbox-group>
28
+ </div>
29
+ </template>
30
+
31
+ <script>
32
+ import locale from "../../../core/locale.js";
33
+ import create from "../../../core/create.js";
34
+ import props from "../../core/common/props.js";
35
+ import event from "../../core/common/event.js";
36
+ export default create({
37
+ name: "checkbox",
38
+ props: {
39
+ fill: String,
40
+ textColor: String,
41
+ all: {
42
+ type: Boolean,
43
+ default: false
44
+ }
45
+ },
46
+ mixins: [props(), event(), locale],
47
+ data () {
48
+ return {
49
+ checkAll: false,
50
+ isIndeterminate: false,
51
+ name: 'checkbox',
52
+ };
53
+ },
54
+ watch: {
55
+ dic () {
56
+ this.handleCheckChange();
57
+ },
58
+ text: {
59
+ handler (val) {
60
+ this.handleCheckChange();
61
+ }
62
+ },
63
+ },
64
+ created () { },
65
+ mounted () { },
66
+ methods: {
67
+ handleCheckAll (val) {
68
+ if (!this.all) return
69
+ const availableOptions = this.dic.filter(item => !item[this.disabledKey]);
70
+ this.text = val ? availableOptions.map(ele => ele[this.valueKey]) : [];
71
+ this.isIndeterminate = false;
72
+ },
73
+ handleCheckChange () {
74
+ let value = this.text;
75
+ if (!this.all) return
76
+ const availableCount = this.dic.filter(item => !item[this.disabledKey]).length;
77
+ let checkedCount = value.length;
78
+ this.checkAll = checkedCount === availableCount;
79
+ this.isIndeterminate = checkedCount > 0 && checkedCount < availableCount;
80
+ }
81
+ }
82
+ });
83
+ </script>
84
+
@@ -0,0 +1,76 @@
1
+ <template>
2
+ <div :class="b({'reverse':reverse})">
3
+ <img :src="avatar"
4
+ alt=""
5
+ :class="b('avatar')">
6
+ <div :class="b('main')">
7
+ <div :class="b('header')">
8
+ <div :class="b('author')"
9
+ v-if="author"
10
+ v-text="author"></div>
11
+ <slot></slot>
12
+ </div>
13
+ <div :class="b('body')"
14
+ v-if="body"
15
+ v-html="body"></div>
16
+ </div>
17
+ </div>
18
+
19
+ </template>
20
+
21
+ <script>
22
+ import create from "../../../core/create.js";
23
+ const propsDefault = {
24
+ avatar: "avatar",
25
+ author: "author",
26
+ body: "body"
27
+ };
28
+ export default create({
29
+ name: "comment",
30
+ props: {
31
+ reverse: {
32
+ type: Boolean,
33
+ default: false
34
+ },
35
+ data: {
36
+ type: Object,
37
+ default: () => {
38
+ return {};
39
+ }
40
+ },
41
+ props: {
42
+ type: Object,
43
+ default: () => {
44
+ return propsDefault;
45
+ }
46
+ },
47
+ option: {
48
+ type: Object,
49
+ default: () => {
50
+ return {};
51
+ }
52
+ }
53
+ },
54
+ computed: {
55
+ avatarKey() {
56
+ return this.props.avatar || propsDefault.avatar;
57
+ },
58
+ authorKey() {
59
+ return this.props.author || propsDefault.author;
60
+ },
61
+ bodyKey() {
62
+ return this.props.body || propsDefault.body;
63
+ },
64
+ avatar() {
65
+ return this.data[this.avatarKey];
66
+ },
67
+ author() {
68
+ return this.data[this.authorKey];
69
+ },
70
+ body() {
71
+ return this.data[this.bodyKey];
72
+ }
73
+ },
74
+ mounted() {}
75
+ });
76
+ </script>