wansfa 2 lat temu
rodzic
commit
b1411b8190
100 zmienionych plików z 7372 dodań i 7361 usunięć
  1. 11 11
      src/App.vue
  2. 9 9
      src/api/common.js
  3. 26 26
      src/api/company/company.js
  4. 22 22
      src/api/company/companyConfig.js
  5. 75 75
      src/api/company/companyDept.js
  6. 59 59
      src/api/company/companyMenu.js
  7. 60 60
      src/api/company/companyMoneyLogs.js
  8. 52 52
      src/api/company/companyPost.js
  9. 70 70
      src/api/company/companyProfit.js
  10. 52 52
      src/api/company/companyRecharge.js
  11. 74 74
      src/api/company/companyRole.js
  12. 80 80
      src/api/company/companySms.js
  13. 52 52
      src/api/company/companySmsLogs.js
  14. 52 52
      src/api/company/companySmsOrder.js
  15. 18 18
      src/api/company/companySmsPackage.js
  16. 62 62
      src/api/company/companySmsTemp.js
  17. 165 165
      src/api/company/companyUser.js
  18. 64 0
      src/api/company/companyUserCard.js
  19. 30 30
      src/api/company/companyVoiceApi.js
  20. 68 68
      src/api/company/companyVoiceCaller.js
  21. 52 52
      src/api/company/companyVoiceLogs.js
  22. 28 28
      src/api/company/companyVoicePackageOrder.js
  23. 11 11
      src/api/company/pay.js
  24. 47 47
      src/api/company/statistics.js
  25. 151 151
      src/api/crm/customer.js
  26. 20 20
      src/api/crm/customerAssign.js
  27. 52 52
      src/api/crm/customerContacts.js
  28. 52 52
      src/api/crm/customerExt.js
  29. 0 53
      src/api/crm/customerHisOrder.js
  30. 52 52
      src/api/crm/customerLogs.js
  31. 52 52
      src/api/crm/customerUser.js
  32. 52 52
      src/api/crm/customerVisit.js
  33. 29 29
      src/api/crm/event.js
  34. 43 43
      src/api/crm/msg.js
  35. 34 34
      src/api/crm/statistics.js
  36. 52 52
      src/api/doc/doc.js
  37. 52 52
      src/api/doc/docOrder.js
  38. 52 52
      src/api/doc/docOrderReply.js
  39. 52 52
      src/api/doc/docRecord.js
  40. 52 52
      src/api/doc/docRecordReply.js
  41. 30 30
      src/api/index.js
  42. 39 39
      src/api/login.js
  43. 8 8
      src/api/menu.js
  44. 34 34
      src/api/monitor/logininfor.js
  45. 34 34
      src/api/monitor/operlog.js
  46. 61 61
      src/api/store/city.js
  47. 52 52
      src/api/store/material.js
  48. 60 60
      src/api/store/materialGroup.js
  49. 33 33
      src/api/store/statistics.js
  50. 88 88
      src/api/store/storeAfterSales.js
  51. 114 114
      src/api/store/storeOrder.js
  52. 70 70
      src/api/store/storePayment.js
  53. 23 23
      src/api/store/storeProduct.js
  54. 8 8
      src/api/store/storeProductCategory.js
  55. 52 52
      src/api/store/storeProductPackage.js
  56. 60 60
      src/api/system/dict/data.js
  57. 68 68
      src/api/system/dict/type.js
  58. 48 48
      src/api/users/user.js
  59. 60 60
      src/api/users/userAddress.js
  60. 9 9
      src/assets/icons/index.js
  61. 1 1
      src/assets/icons/svg/monitor.svg
  62. 1 1
      src/assets/icons/svg/system.svg
  63. 22 22
      src/assets/icons/svgo.yml
  64. 99 99
      src/assets/styles/btn.scss
  65. 275 275
      src/assets/styles/common.scss
  66. 84 84
      src/assets/styles/element-ui.scss
  67. 31 31
      src/assets/styles/element-variables.scss
  68. 373 373
      src/assets/styles/index.scss
  69. 66 66
      src/assets/styles/mixin.scss
  70. 215 215
      src/assets/styles/sidebar.scss
  71. 48 48
      src/assets/styles/transition.scss
  72. 35 35
      src/assets/styles/variables.scss
  73. 74 74
      src/components/Breadcrumb/index.vue
  74. 194 194
      src/components/Editor/index.vue
  75. 153 153
      src/components/Editor/wang.vue
  76. 44 44
      src/components/Hamburger/index.vue
  77. 188 188
      src/components/HeaderSearch/index.vue
  78. 68 68
      src/components/IconSelect/index.vue
  79. 11 11
      src/components/IconSelect/requireIcons.js
  80. 389 389
      src/components/Material/index.vue
  81. 369 369
      src/components/Material/single.vue
  82. 101 101
      src/components/Pagination/index.vue
  83. 142 142
      src/components/PanThumb/index.vue
  84. 149 149
      src/components/RightPanel/index.vue
  85. 38 38
      src/components/RightToolbar/index.vue
  86. 60 60
      src/components/Screenfull/index.vue
  87. 57 57
      src/components/SizeSelect/index.vue
  88. 61 61
      src/components/SvgIcon/index.vue
  89. 175 175
      src/components/ThemePicker/index.vue
  90. 178 178
      src/components/select/SelectUser/index.vue
  91. 28 28
      src/directive/permission/hasPermi.js
  92. 28 28
      src/directive/permission/hasRole.js
  93. 15 15
      src/directive/permission/index.js
  94. 57 57
      src/layout/components/AppMain.vue
  95. 251 251
      src/layout/components/Navbar.vue
  96. 125 125
      src/layout/components/Settings/index.vue
  97. 25 25
      src/layout/components/Sidebar/FixiOSBug.js
  98. 29 29
      src/layout/components/Sidebar/Item.vue
  99. 43 43
      src/layout/components/Sidebar/Link.vue
  100. 83 83
      src/layout/components/Sidebar/Logo.vue

+ 11 - 11
src/App.vue

@@ -1,11 +1,11 @@
-<template>
-  <div id="app">
-    <router-view />
-  </div>
-</template>
-
-<script>
-export default  {
-  name:  'App'
-}
-</script>
+<template>
+  <div id="app">
+    <router-view />
+  </div>
+</template>
+
+<script>
+export default  {
+  name:  'App'
+}
+</script>

+ 9 - 9
src/api/common.js

@@ -1,10 +1,10 @@
-import request from '@/utils/request'
-
-export function sendSmsCode(data) {
-  return request({
-    url: '/common/sendSmsCode',
-    method: 'post',
-    data: data
-  })
-}
+import request from '@/utils/request'
+
+export function sendSmsCode(data) {
+  return request({
+    url: '/common/sendSmsCode',
+    method: 'post',
+    data: data
+  })
+}
  

+ 26 - 26
src/api/company/company.js

@@ -1,26 +1,26 @@
-import request from '@/utils/request'
-
- 
- 
-export function getCompanyInfo() {
-  return request({
-    url: '/company/company/getCompanyInfo',
-    method: 'get'
-  })
-}
-export function getCompanyVoice() {
-  return request({
-    url: '/company/company/getCompanyVoice',
-    method: 'get'
-  })
-}
-export function getCompanySms() {
-  return request({
-    url: '/company/company/getCompanySms',
-    method: 'get'
-  })
-}
-
-
- 
-
+import request from '@/utils/request'
+
+ 
+ 
+export function getCompanyInfo() {
+  return request({
+    url: '/company/company/getCompanyInfo',
+    method: 'get'
+  })
+}
+export function getCompanyVoice() {
+  return request({
+    url: '/company/company/getCompanyVoice',
+    method: 'get'
+  })
+}
+export function getCompanySms() {
+  return request({
+    url: '/company/company/getCompanySms',
+    method: 'get'
+  })
+}
+
+
+ 
+

+ 22 - 22
src/api/company/companyConfig.js

@@ -1,22 +1,22 @@
-import request from '@/utils/request'
-
- 
-
-// 根据参数键名查询参数值
-export function getConfigKey(configKey) {
-  return request({
-    url: '/company/config/configKey/' + configKey,
-    method: 'get'
-  })
-}
-
-
-// 修改参数配置
-export function updateConfig(data) {
-  return request({
-    url: '/company/config',
-    method: 'put',
-    data: data
-  })
-}
-
+import request from '@/utils/request'
+
+ 
+
+// 根据参数键名查询参数值
+export function getConfigKey(configKey) {
+  return request({
+    url: '/company/config/configKey/' + configKey,
+    method: 'get'
+  })
+}
+
+
+// 修改参数配置
+export function updateConfig(data) {
+  return request({
+    url: '/company/config',
+    method: 'put',
+    data: data
+  })
+}
+

+ 75 - 75
src/api/company/companyDept.js

@@ -1,76 +1,76 @@
-import request from '@/utils/request'
-
-// 查询部门列表
-export function listDept(query) {
-  return request({
-    url: '/company/dept/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询部门列表(排除节点)
-export function listDeptExcludeChild(deptId) {
-  return request({
-    url: '/company/dept/list/exclude/' + deptId,
-    method: 'get'
-  })
-}
-
-// 查询部门详细
-export function getDept(deptId) {
-  return request({
-    url: '/company/dept/' + deptId,
-    method: 'get'
-  })
-}
-
-// 查询部门下拉树结构
-export function treeselect() {
-  return request({
-    url: '/company/dept/treeselect',
-    method: 'get'
-  })
-}
-
-// 根据角色ID查询部门树结构
-export function roleDeptTreeselect(roleId) {
-  return request({
-    url: '/company/dept/roleDeptTreeselect/' + roleId,
-    method: 'get'
-  })
-}
-
-// 新增部门
-export function addDept(data) {
-  return request({
-    url: '/company/dept',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改部门
-export function updateDept(data) {
-  return request({
-    url: '/company/dept',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除部门
-export function delDept(deptId) {
-  return request({
-    url: '/company/dept/' + deptId,
-    method: 'delete'
-  })
-}
-
-
-export function allTreeselect() {
-  return request({
-    url: '/company/dept/allTreeselect',
-    method: 'get'
-  })
+import request from '@/utils/request'
+
+// 查询部门列表
+export function listDept(query) {
+  return request({
+    url: '/company/dept/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询部门列表(排除节点)
+export function listDeptExcludeChild(deptId) {
+  return request({
+    url: '/company/dept/list/exclude/' + deptId,
+    method: 'get'
+  })
+}
+
+// 查询部门详细
+export function getDept(deptId) {
+  return request({
+    url: '/company/dept/' + deptId,
+    method: 'get'
+  })
+}
+
+// 查询部门下拉树结构
+export function treeselect() {
+  return request({
+    url: '/company/dept/treeselect',
+    method: 'get'
+  })
+}
+
+// 根据角色ID查询部门树结构
+export function roleDeptTreeselect(roleId) {
+  return request({
+    url: '/company/dept/roleDeptTreeselect/' + roleId,
+    method: 'get'
+  })
+}
+
+// 新增部门
+export function addDept(data) {
+  return request({
+    url: '/company/dept',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改部门
+export function updateDept(data) {
+  return request({
+    url: '/company/dept',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除部门
+export function delDept(deptId) {
+  return request({
+    url: '/company/dept/' + deptId,
+    method: 'delete'
+  })
+}
+
+
+export function allTreeselect() {
+  return request({
+    url: '/company/dept/allTreeselect',
+    method: 'get'
+  })
 }

+ 59 - 59
src/api/company/companyMenu.js

@@ -1,60 +1,60 @@
-import request from '@/utils/request'
-
-// 查询菜单列表
-export function listMenu(query) {
-  return request({
-    url: '/company/menu/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询菜单详细
-export function getMenu(menuId) {
-  return request({
-    url: '/company/menu/' + menuId,
-    method: 'get'
-  })
-}
-
-// 查询菜单下拉树结构
-export function treeselect() {
-  return request({
-    url: '/company/menu/treeselect',
-    method: 'get'
-  })
-}
-
-// 根据角色ID查询菜单下拉树结构
-export function roleMenuTreeselect(roleId) {
-  return request({
-    url: '/company/menu/roleMenuTreeselect/' + roleId,
-    method: 'get'
-  })
-}
-
-// 新增菜单
-export function addMenu(data) {
-  return request({
-    url: '/company/menu',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改菜单
-export function updateMenu(data) {
-  return request({
-    url: '/company/menu',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除菜单
-export function delMenu(menuId) {
-  return request({
-    url: '/company/menu/' + menuId,
-    method: 'delete'
-  })
+import request from '@/utils/request'
+
+// 查询菜单列表
+export function listMenu(query) {
+  return request({
+    url: '/company/menu/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询菜单详细
+export function getMenu(menuId) {
+  return request({
+    url: '/company/menu/' + menuId,
+    method: 'get'
+  })
+}
+
+// 查询菜单下拉树结构
+export function treeselect() {
+  return request({
+    url: '/company/menu/treeselect',
+    method: 'get'
+  })
+}
+
+// 根据角色ID查询菜单下拉树结构
+export function roleMenuTreeselect(roleId) {
+  return request({
+    url: '/company/menu/roleMenuTreeselect/' + roleId,
+    method: 'get'
+  })
+}
+
+// 新增菜单
+export function addMenu(data) {
+  return request({
+    url: '/company/menu',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改菜单
+export function updateMenu(data) {
+  return request({
+    url: '/company/menu',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除菜单
+export function delMenu(menuId) {
+  return request({
+    url: '/company/menu/' + menuId,
+    method: 'delete'
+  })
 }

+ 60 - 60
src/api/company/companyMoneyLogs.js

@@ -1,61 +1,61 @@
-import request from '@/utils/request'
-
-// 查询企业账户记录列表
-export function listCompanyMoneyLogs(query) {
-  return request({
-    url: '/company/companyMoneyLogs/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询企业账户记录详细
-export function getCompanyMoneyLogs(logsId) {
-  return request({
-    url: '/company/companyMoneyLogs/' + logsId,
-    method: 'get'
-  })
-}
-
-// 新增企业账户记录
-export function addCompanyMoneyLogs(data) {
-  return request({
-    url: '/company/companyMoneyLogs',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改企业账户记录
-export function updateCompanyMoneyLogs(data) {
-  return request({
-    url: '/company/companyMoneyLogs',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除企业账户记录
-export function delCompanyMoneyLogs(logsId) {
-  return request({
-    url: '/company/companyMoneyLogs/' + logsId,
-    method: 'delete'
-  })
-}
-
-// 导出企业账户记录
-export function exportCompanyMoneyLogs(query) {
-  return request({
-    url: '/company/companyMoneyLogs/export',
-    method: 'get',
-    params: query
-  })
-}
-
-export function getCompanyTotalMoneys(query) {
-  return request({
-    url: '/company/companyMoneyLogs/getCompanyTotalMoneys',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询企业账户记录列表
+export function listCompanyMoneyLogs(query) {
+  return request({
+    url: '/company/companyMoneyLogs/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询企业账户记录详细
+export function getCompanyMoneyLogs(logsId) {
+  return request({
+    url: '/company/companyMoneyLogs/' + logsId,
+    method: 'get'
+  })
+}
+
+// 新增企业账户记录
+export function addCompanyMoneyLogs(data) {
+  return request({
+    url: '/company/companyMoneyLogs',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改企业账户记录
+export function updateCompanyMoneyLogs(data) {
+  return request({
+    url: '/company/companyMoneyLogs',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除企业账户记录
+export function delCompanyMoneyLogs(logsId) {
+  return request({
+    url: '/company/companyMoneyLogs/' + logsId,
+    method: 'delete'
+  })
+}
+
+// 导出企业账户记录
+export function exportCompanyMoneyLogs(query) {
+  return request({
+    url: '/company/companyMoneyLogs/export',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getCompanyTotalMoneys(query) {
+  return request({
+    url: '/company/companyMoneyLogs/getCompanyTotalMoneys',
+    method: 'get',
+    params: query
+  })
 }

+ 52 - 52
src/api/company/companyPost.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询岗位列表
-export function listPost(query) {
-  return request({
-    url: '/company/post/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询岗位详细
-export function getPost(postId) {
-  return request({
-    url: '/company/post/' + postId,
-    method: 'get'
-  })
-}
-
-// 新增岗位
-export function addPost(data) {
-  return request({
-    url: '/company/post',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改岗位
-export function updatePost(data) {
-  return request({
-    url: '/company/post',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除岗位
-export function delPost(postId) {
-  return request({
-    url: '/company/post/' + postId,
-    method: 'delete'
-  })
-}
-
-// 导出岗位
-export function exportPost(query) {
-  return request({
-    url: '/company/post/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询岗位列表
+export function listPost(query) {
+  return request({
+    url: '/company/post/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询岗位详细
+export function getPost(postId) {
+  return request({
+    url: '/company/post/' + postId,
+    method: 'get'
+  })
+}
+
+// 新增岗位
+export function addPost(data) {
+  return request({
+    url: '/company/post',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改岗位
+export function updatePost(data) {
+  return request({
+    url: '/company/post',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除岗位
+export function delPost(postId) {
+  return request({
+    url: '/company/post/' + postId,
+    method: 'delete'
+  })
+}
+
+// 导出岗位
+export function exportPost(query) {
+  return request({
+    url: '/company/post/export',
+    method: 'get',
+    params: query
+  })
 }

+ 70 - 70
src/api/company/companyProfit.js

@@ -1,71 +1,71 @@
-import request from '@/utils/request'
-
-// 查询提现列表
-export function listCompanyProfit(query) {
-  return request({
-    url: '/company/companyProfit/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询提现详细
-export function getCompanyProfit(profitId) {
-  return request({
-    url: '/company/companyProfit/' + profitId,
-    method: 'get'
-  })
-}
-
- 
-export function profit(data) {
-  return request({
-    url: '/company/companyProfit/profit',
-    method: 'post',
-    data: data
-  })
-}
-
-export function cancel(data) {
-  return request({
-    url: '/company/companyProfit/cancel',
-    method: 'post',
-    data: data
-  })
-}
-
-
-// 新增提现
-export function addCompanyProfit(data) {
-  return request({
-    url: '/company/companyProfit',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改提现
-export function updateCompanyProfit(data) {
-  return request({
-    url: '/company/companyProfit',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除提现
-export function delCompanyProfit(profitId) {
-  return request({
-    url: '/company/companyProfit/' + profitId,
-    method: 'delete'
-  })
-}
-
-// 导出提现
-export function exportCompanyProfit(query) {
-  return request({
-    url: '/company/companyProfit/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询提现列表
+export function listCompanyProfit(query) {
+  return request({
+    url: '/company/companyProfit/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询提现详细
+export function getCompanyProfit(profitId) {
+  return request({
+    url: '/company/companyProfit/' + profitId,
+    method: 'get'
+  })
+}
+
+ 
+export function profit(data) {
+  return request({
+    url: '/company/companyProfit/profit',
+    method: 'post',
+    data: data
+  })
+}
+
+export function cancel(data) {
+  return request({
+    url: '/company/companyProfit/cancel',
+    method: 'post',
+    data: data
+  })
+}
+
+
+// 新增提现
+export function addCompanyProfit(data) {
+  return request({
+    url: '/company/companyProfit',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改提现
+export function updateCompanyProfit(data) {
+  return request({
+    url: '/company/companyProfit',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除提现
+export function delCompanyProfit(profitId) {
+  return request({
+    url: '/company/companyProfit/' + profitId,
+    method: 'delete'
+  })
+}
+
+// 导出提现
+export function exportCompanyProfit(query) {
+  return request({
+    url: '/company/companyProfit/export',
+    method: 'get',
+    params: query
+  })
 }

+ 52 - 52
src/api/company/companyRecharge.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询充值列表
-export function listCompanyRecharge(query) {
-  return request({
-    url: '/company/companyRecharge/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询充值详细
-export function getCompanyRecharge(rechargeId) {
-  return request({
-    url: '/company/companyRecharge/' + rechargeId,
-    method: 'get'
-  })
-}
-
-// 新增充值
-export function addCompanyRecharge(data) {
-  return request({
-    url: '/company/companyRecharge',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改充值
-export function updateCompanyRecharge(data) {
-  return request({
-    url: '/company/companyRecharge',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除充值
-export function delCompanyRecharge(rechargeId) {
-  return request({
-    url: '/company/companyRecharge/' + rechargeId,
-    method: 'delete'
-  })
-}
-
-// 导出充值
-export function exportCompanyRecharge(query) {
-  return request({
-    url: '/company/companyRecharge/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询充值列表
+export function listCompanyRecharge(query) {
+  return request({
+    url: '/company/companyRecharge/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询充值详细
+export function getCompanyRecharge(rechargeId) {
+  return request({
+    url: '/company/companyRecharge/' + rechargeId,
+    method: 'get'
+  })
+}
+
+// 新增充值
+export function addCompanyRecharge(data) {
+  return request({
+    url: '/company/companyRecharge',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改充值
+export function updateCompanyRecharge(data) {
+  return request({
+    url: '/company/companyRecharge',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除充值
+export function delCompanyRecharge(rechargeId) {
+  return request({
+    url: '/company/companyRecharge/' + rechargeId,
+    method: 'delete'
+  })
+}
+
+// 导出充值
+export function exportCompanyRecharge(query) {
+  return request({
+    url: '/company/companyRecharge/export',
+    method: 'get',
+    params: query
+  })
 }

+ 74 - 74
src/api/company/companyRole.js

@@ -1,75 +1,75 @@
-import request from '@/utils/request'
-
-// 查询角色列表
-export function listRole(query) {
-  return request({
-    url: '/company/role/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询角色详细
-export function getRole(roleId) {
-  return request({
-    url: '/company/role/' + roleId,
-    method: 'get'
-  })
-}
-
-// 新增角色
-export function addRole(data) {
-  return request({
-    url: '/company/role',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改角色
-export function updateRole(data) {
-  return request({
-    url: '/company/role',
-    method: 'put',
-    data: data
-  })
-}
-
-// 角色数据权限
-export function dataScope(data) {
-  return request({
-    url: '/company/role/dataScope',
-    method: 'put',
-    data: data
-  })
-}
-
-// 角色状态修改
-export function changeRoleStatus(roleId, status) {
-  const data = {
-    roleId,
-    status
-  }
-  return request({
-    url: '/company/role/changeStatus',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除角色
-export function delRole(roleId) {
-  return request({
-    url: '/company/role/' + roleId,
-    method: 'delete'
-  })
-}
-
-// 导出角色
-export function exportRole(query) {
-  return request({
-    url: '/company/role/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询角色列表
+export function listRole(query) {
+  return request({
+    url: '/company/role/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询角色详细
+export function getRole(roleId) {
+  return request({
+    url: '/company/role/' + roleId,
+    method: 'get'
+  })
+}
+
+// 新增角色
+export function addRole(data) {
+  return request({
+    url: '/company/role',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改角色
+export function updateRole(data) {
+  return request({
+    url: '/company/role',
+    method: 'put',
+    data: data
+  })
+}
+
+// 角色数据权限
+export function dataScope(data) {
+  return request({
+    url: '/company/role/dataScope',
+    method: 'put',
+    data: data
+  })
+}
+
+// 角色状态修改
+export function changeRoleStatus(roleId, status) {
+  const data = {
+    roleId,
+    status
+  }
+  return request({
+    url: '/company/role/changeStatus',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除角色
+export function delRole(roleId) {
+  return request({
+    url: '/company/role/' + roleId,
+    method: 'delete'
+  })
+}
+
+// 导出角色
+export function exportRole(query) {
+  return request({
+    url: '/company/role/export',
+    method: 'get',
+    params: query
+  })
 }

+ 80 - 80
src/api/company/companySms.js

@@ -1,81 +1,81 @@
-import request from '@/utils/request'
-
-// 查询公司短信列表
-export function listCompanySms(query) {
-  return request({
-    url: '/company/companySms/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询公司短信详细
-export function getCompanySms(smsId) {
-  return request({
-    url: '/company/companySms/' + smsId,
-    method: 'get'
-  })
-}
-
-// 新增公司短信
-export function addCompanySms(data) {
-  return request({
-    url: '/company/companySms',
-    method: 'post',
-    data: data
-  })
-}
-export function sendCustomerMsg(data) {
-  return request({
-    url: '/company/companySms/sendCustomerMsg',
-    method: 'post',
-    data: data
-  })
-}
-                                
-export function sendCustomerBatchMsg(data) {
-  return request({
-    url: '/company/companySms/sendCustomerBatchMsg',
-    method: 'post',
-    data: data
-  })
-}
-
-
-export function getCompanySmsCount() {
-  return request({
-    url: '/company/companySms/getCompanySmsCount',
-    method: 'get'
-  })
-}
-
-
-
-
-
-
-// 修改公司短信
-export function updateCompanySms(data) {
-  return request({
-    url: '/company/companySms',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除公司短信
-export function delCompanySms(smsId) {
-  return request({
-    url: '/company/companySms/' + smsId,
-    method: 'delete'
-  })
-}
-
-// 导出公司短信
-export function exportCompanySms(query) {
-  return request({
-    url: '/company/companySms/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询公司短信列表
+export function listCompanySms(query) {
+  return request({
+    url: '/company/companySms/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询公司短信详细
+export function getCompanySms(smsId) {
+  return request({
+    url: '/company/companySms/' + smsId,
+    method: 'get'
+  })
+}
+
+// 新增公司短信
+export function addCompanySms(data) {
+  return request({
+    url: '/company/companySms',
+    method: 'post',
+    data: data
+  })
+}
+export function sendCustomerMsg(data) {
+  return request({
+    url: '/company/companySms/sendCustomerMsg',
+    method: 'post',
+    data: data
+  })
+}
+                                
+export function sendCustomerBatchMsg(data) {
+  return request({
+    url: '/company/companySms/sendCustomerBatchMsg',
+    method: 'post',
+    data: data
+  })
+}
+
+
+export function getCompanySmsCount() {
+  return request({
+    url: '/company/companySms/getCompanySmsCount',
+    method: 'get'
+  })
+}
+
+
+
+
+
+
+// 修改公司短信
+export function updateCompanySms(data) {
+  return request({
+    url: '/company/companySms',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除公司短信
+export function delCompanySms(smsId) {
+  return request({
+    url: '/company/companySms/' + smsId,
+    method: 'delete'
+  })
+}
+
+// 导出公司短信
+export function exportCompanySms(query) {
+  return request({
+    url: '/company/companySms/export',
+    method: 'get',
+    params: query
+  })
 }

+ 52 - 52
src/api/company/companySmsLogs.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询短信发送记录列表
-export function listCompanySmsLogs(query) {
-  return request({
-    url: '/company/companySmsLogs/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询短信发送记录详细
-export function getCompanySmsLogs(logsId) {
-  return request({
-    url: '/company/companySmsLogs/' + logsId,
-    method: 'get'
-  })
-}
-
-// 新增短信发送记录
-export function addCompanySmsLogs(data) {
-  return request({
-    url: '/company/companySmsLogs',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改短信发送记录
-export function updateCompanySmsLogs(data) {
-  return request({
-    url: '/company/companySmsLogs',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除短信发送记录
-export function delCompanySmsLogs(logsId) {
-  return request({
-    url: '/company/companySmsLogs/' + logsId,
-    method: 'delete'
-  })
-}
-
-// 导出短信发送记录
-export function exportCompanySmsLogs(query) {
-  return request({
-    url: '/company/companySmsLogs/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询短信发送记录列表
+export function listCompanySmsLogs(query) {
+  return request({
+    url: '/company/companySmsLogs/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询短信发送记录详细
+export function getCompanySmsLogs(logsId) {
+  return request({
+    url: '/company/companySmsLogs/' + logsId,
+    method: 'get'
+  })
+}
+
+// 新增短信发送记录
+export function addCompanySmsLogs(data) {
+  return request({
+    url: '/company/companySmsLogs',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改短信发送记录
+export function updateCompanySmsLogs(data) {
+  return request({
+    url: '/company/companySmsLogs',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除短信发送记录
+export function delCompanySmsLogs(logsId) {
+  return request({
+    url: '/company/companySmsLogs/' + logsId,
+    method: 'delete'
+  })
+}
+
+// 导出短信发送记录
+export function exportCompanySmsLogs(query) {
+  return request({
+    url: '/company/companySmsLogs/export',
+    method: 'get',
+    params: query
+  })
 }

+ 52 - 52
src/api/company/companySmsOrder.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询短信购买订单列表
-export function listCompanySmsOrder(query) {
-  return request({
-    url: '/company/companySmsOrder/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询短信购买订单详细
-export function getCompanySmsOrder(orderId) {
-  return request({
-    url: '/company/companySmsOrder/' + orderId,
-    method: 'get'
-  })
-}
-
-// 新增短信购买订单
-export function addCompanySmsOrder(data) {
-  return request({
-    url: '/company/companySmsOrder',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改短信购买订单
-export function updateCompanySmsOrder(data) {
-  return request({
-    url: '/company/companySmsOrder',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除短信购买订单
-export function delCompanySmsOrder(orderId) {
-  return request({
-    url: '/company/companySmsOrder/' + orderId,
-    method: 'delete'
-  })
-}
-
-// 导出短信购买订单
-export function exportCompanySmsOrder(query) {
-  return request({
-    url: '/company/companySmsOrder/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询短信购买订单列表
+export function listCompanySmsOrder(query) {
+  return request({
+    url: '/company/companySmsOrder/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询短信购买订单详细
+export function getCompanySmsOrder(orderId) {
+  return request({
+    url: '/company/companySmsOrder/' + orderId,
+    method: 'get'
+  })
+}
+
+// 新增短信购买订单
+export function addCompanySmsOrder(data) {
+  return request({
+    url: '/company/companySmsOrder',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改短信购买订单
+export function updateCompanySmsOrder(data) {
+  return request({
+    url: '/company/companySmsOrder',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除短信购买订单
+export function delCompanySmsOrder(orderId) {
+  return request({
+    url: '/company/companySmsOrder/' + orderId,
+    method: 'delete'
+  })
+}
+
+// 导出短信购买订单
+export function exportCompanySmsOrder(query) {
+  return request({
+    url: '/company/companySmsOrder/export',
+    method: 'get',
+    params: query
+  })
 }

+ 18 - 18
src/api/company/companySmsPackage.js

@@ -1,19 +1,19 @@
-import request from '@/utils/request'
-
-export function getSmsPackage(query) {
-  return request({
-    url: '/company/companySmsPackage/getSmsPackage',
-    method: 'get',
-    params: query
-  })
-}
- 
-export function buySmsPackage(data) {
-  return request({
-    url: '/company/companySmsPackage/buySmsPackage',
-    method: 'post',
-    data: data
-  })
-}
-
+import request from '@/utils/request'
+
+export function getSmsPackage(query) {
+  return request({
+    url: '/company/companySmsPackage/getSmsPackage',
+    method: 'get',
+    params: query
+  })
+}
+ 
+export function buySmsPackage(data) {
+  return request({
+    url: '/company/companySmsPackage/buySmsPackage',
+    method: 'post',
+    data: data
+  })
+}
+
  

+ 62 - 62
src/api/company/companySmsTemp.js

@@ -1,63 +1,63 @@
-import request from '@/utils/request'
-
-// 查询短信模板列表
-export function listCompanySmsTemp(query) {
-  return request({
-    url: '/company/companySmsTemp/list',
-    method: 'get',
-    params: query
-  })
-}
-export function getSmsTempList(query) {
-  return request({
-    url: '/company/companySmsTemp/getSmsTempList',
-    method: 'get',
-    params: query
-  })
-}
-
-
-
-
-// 查询短信模板详细
-export function getCompanySmsTemp(tempId) {
-  return request({
-    url: '/company/companySmsTemp/' + tempId,
-    method: 'get'
-  })
-}
-
-// 新增短信模板
-export function addCompanySmsTemp(data) {
-  return request({
-    url: '/company/companySmsTemp',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改短信模板
-export function updateCompanySmsTemp(data) {
-  return request({
-    url: '/company/companySmsTemp',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除短信模板
-export function delCompanySmsTemp(tempId) {
-  return request({
-    url: '/company/companySmsTemp/' + tempId,
-    method: 'delete'
-  })
-}
-
-// 导出短信模板
-export function exportCompanySmsTemp(query) {
-  return request({
-    url: '/company/companySmsTemp/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询短信模板列表
+export function listCompanySmsTemp(query) {
+  return request({
+    url: '/company/companySmsTemp/list',
+    method: 'get',
+    params: query
+  })
+}
+export function getSmsTempList(query) {
+  return request({
+    url: '/company/companySmsTemp/getSmsTempList',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
+
+// 查询短信模板详细
+export function getCompanySmsTemp(tempId) {
+  return request({
+    url: '/company/companySmsTemp/' + tempId,
+    method: 'get'
+  })
+}
+
+// 新增短信模板
+export function addCompanySmsTemp(data) {
+  return request({
+    url: '/company/companySmsTemp',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改短信模板
+export function updateCompanySmsTemp(data) {
+  return request({
+    url: '/company/companySmsTemp',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除短信模板
+export function delCompanySmsTemp(tempId) {
+  return request({
+    url: '/company/companySmsTemp/' + tempId,
+    method: 'delete'
+  })
+}
+
+// 导出短信模板
+export function exportCompanySmsTemp(query) {
+  return request({
+    url: '/company/companySmsTemp/export',
+    method: 'get',
+    params: query
+  })
 }

+ 165 - 165
src/api/company/companyUser.js

@@ -1,165 +1,165 @@
-import request from '@/utils/request'
-import { praseStrEmpty } from "@/utils/common";
-
-// 查询用户列表
-export function listUser(query) {
-  return request({
-    url: '/company/user/list',
-    method: 'get',
-    params: query
-  })
-}
-export function getList(query) {
-  return request({
-    url: '/company/user/getList',
-    method: 'get',
-    params: query
-  })
-}
-export function getUserList() {
-  return request({
-    url: '/company/user/getUserList',
-    method: 'get'
-  })
-}
-export function getUserListByDeptId(query) {
-  return request({
-    url: '/company/user/getUserListByDeptId',
-    method: 'get',
-    params: query
-  })
-}
-
-export function getAddressBookList(query) {
-  return request({
-    url: '/company/user/getAddressBookList',
-    method: 'get',
-    params: query
-  })
-}
-
-
-
-// 查询用户详细
-export function getUser(userId) {
-  return request({
-    url: '/company/user/' + praseStrEmpty(userId),
-    method: 'get'
-  })
-}
-
-// 新增用户
-export function addUser(data) {
-  return request({
-    url: '/company/user',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改用户
-export function updateUser(data) {
-  return request({
-    url: '/company/user',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除用户
-export function delUser(userId) {
-  return request({
-    url: '/company/user/' + userId,
-    method: 'delete'
-  })
-}
-
-// 导出用户
-export function exportUser(query) {
-  return request({
-    url: '/company/user/export',
-    method: 'get',
-    params: query
-  })
-}
-
-// 用户密码重置
-export function resetUserPwd(userId, password) {
-  const data = {
-    userId,
-    password
-  }
-  return request({
-    url: '/company/user/resetPwd',
-    method: 'put',
-    data: data
-  })
-}
-
-// 用户状态修改
-export function changeUserStatus(userId, status) {
-  const data = {
-    userId,
-    status
-  }
-  return request({
-    url: '/company/user/changeStatus',
-    method: 'put',
-    data: data
-  })
-}
-
-// 查询用户个人信息
-export function getUserProfile() {
-  return request({
-    url: '/company/user/profile',
-    method: 'get'
-  })
-}
-
-// 修改用户个人信息
-export function updateUserProfile(data) {
-  return request({
-    url: '/company/user/profile',
-    method: 'put',
-    data: data
-  })
-}
-
-// 用户密码重置
-export function updateUserPwd(oldPassword, newPassword) {
-  const data = {
-    oldPassword,
-    newPassword
-  }
-  return request({
-    url: '/company/user/profile/updatePwd',
-    method: 'put',
-    params: data
-  })
-}
-
-// 用户头像上传
-export function uploadAvatar(data) {
-  return request({
-    url: '/company/user/profile/avatar',
-    method: 'post',
-    data: data
-  })
-}
-
-// 下载用户导入模板
-export function importTemplate() {
-  return request({
-    url: '/company/user/importTemplate',
-    method: 'get'
-  })
-}
-
-export function getSelectUserList(query) {
-  return request({
-    url: '/company/user/getSelectUserList',
-    method: 'get',
-    params: query
-  })
-}
+import request from '@/utils/request'
+import { praseStrEmpty } from "@/utils/common";
+
+// 查询用户列表
+export function listUser(query) {
+  return request({
+    url: '/company/user/list',
+    method: 'get',
+    params: query
+  })
+}
+export function getList(query) {
+  return request({
+    url: '/company/user/getList',
+    method: 'get',
+    params: query
+  })
+}
+export function getUserList() {
+  return request({
+    url: '/company/user/getUserList',
+    method: 'get'
+  })
+}
+export function getUserListByDeptId(query) {
+  return request({
+    url: '/company/user/getUserListByDeptId',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getAddressBookList(query) {
+  return request({
+    url: '/company/user/getAddressBookList',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
+// 查询用户详细
+export function getUser(userId) {
+  return request({
+    url: '/company/user/' + praseStrEmpty(userId),
+    method: 'get'
+  })
+}
+
+// 新增用户
+export function addUser(data) {
+  return request({
+    url: '/company/user',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改用户
+export function updateUser(data) {
+  return request({
+    url: '/company/user',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除用户
+export function delUser(userId) {
+  return request({
+    url: '/company/user/' + userId,
+    method: 'delete'
+  })
+}
+
+// 导出用户
+export function exportUser(query) {
+  return request({
+    url: '/company/user/export',
+    method: 'get',
+    params: query
+  })
+}
+
+// 用户密码重置
+export function resetUserPwd(userId, password) {
+  const data = {
+    userId,
+    password
+  }
+  return request({
+    url: '/company/user/resetPwd',
+    method: 'put',
+    data: data
+  })
+}
+
+// 用户状态修改
+export function changeUserStatus(userId, status) {
+  const data = {
+    userId,
+    status
+  }
+  return request({
+    url: '/company/user/changeStatus',
+    method: 'put',
+    data: data
+  })
+}
+
+// 查询用户个人信息
+export function getUserProfile() {
+  return request({
+    url: '/company/user/profile',
+    method: 'get'
+  })
+}
+
+// 修改用户个人信息
+export function updateUserProfile(data) {
+  return request({
+    url: '/company/user/profile',
+    method: 'put',
+    data: data
+  })
+}
+
+// 用户密码重置
+export function updateUserPwd(oldPassword, newPassword) {
+  const data = {
+    oldPassword,
+    newPassword
+  }
+  return request({
+    url: '/company/user/profile/updatePwd',
+    method: 'put',
+    params: data
+  })
+}
+
+// 用户头像上传
+export function uploadAvatar(data) {
+  return request({
+    url: '/company/user/profile/avatar',
+    method: 'post',
+    data: data
+  })
+}
+
+// 下载用户导入模板
+export function importTemplate() {
+  return request({
+    url: '/company/user/importTemplate',
+    method: 'get'
+  })
+}
+
+export function getSelectUserList(query) {
+  return request({
+    url: '/company/user/getSelectUserList',
+    method: 'get',
+    params: query
+  })
+}

+ 64 - 0
src/api/company/companyUserCard.js

@@ -0,0 +1,64 @@
+import request from '@/utils/request'
+
+// 查询card列表
+export function listCard(query) {
+  return request({
+    url: '/company/companUsercard/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询card详细
+export function getCard(id) {
+  return request({
+    url: '/company/companUsercard/' + id,
+    method: 'get'
+  })
+}
+
+// 新增card
+export function addCard(data) {
+  return request({
+    url: '/company/companUsercard',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改card
+export function updateCard(data) {
+  return request({
+    url: '/company/companUsercard',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除card
+export function delCard(id) {
+  return request({
+    url: '/company/companUsercard/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出card
+export function exportCard(query) {
+  return request({
+      url: '/company/companUsercard/export',
+      method: 'get',
+      params: query
+  })
+}
+
+
+  //群发短信
+  export function sendCustomerBatchMsg(data) {
+    return request({
+        url: '/company/companUsercard/sendCustomerBatchMsg',
+        method: 'post',
+        data: data
+    })
+ }
+ 

+ 30 - 30
src/api/company/companyVoiceApi.js

@@ -1,31 +1,31 @@
-import request from '@/utils/request'
- 
-
-export function callMobile(query) {
-
-  return request({
-    url: '/company/voiceApi/callMobile' ,
-    method: 'get',
-    params: query
-
-  })
-}
- 
-export function callOffMobile(voiceId) {
-
-  return request({
-    url: '/company/voiceApi/callOffMobile?voiceId='+voiceId ,
-    method: 'get'
-  })
-}
-export function getSipAccount() {
-
-  return request({
-    url: '/company/voiceApi/getSipAccount' ,
-    method: 'get'
-  })
-}
-
-
-
+import request from '@/utils/request'
+ 
+
+export function callMobile(query) {
+
+  return request({
+    url: '/company/voiceApi/callMobile' ,
+    method: 'get',
+    params: query
+
+  })
+}
+ 
+export function callOffMobile(voiceId) {
+
+  return request({
+    url: '/company/voiceApi/callOffMobile?voiceId='+voiceId ,
+    method: 'get'
+  })
+}
+export function getSipAccount() {
+
+  return request({
+    url: '/company/voiceApi/getSipAccount' ,
+    method: 'get'
+  })
+}
+
+
+
  

+ 68 - 68
src/api/company/companyVoiceCaller.js

@@ -1,68 +1,68 @@
-import request from '@/utils/request'
-
-// 查询企业用户坐席列表
-export function listCompanyVoiceCaller(query) {
-  return request({
-    url: '/company/companyVoiceCaller/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询企业用户坐席详细
-export function getCompanyVoiceCaller(callerId) {
-  return request({
-    url: '/company/companyVoiceCaller/' + callerId,
-    method: 'get'
-  })
-}
-
-// 新增企业用户坐席
-export function addCompanyVoiceCaller(data) {
-  return request({
-    url: '/company/companyVoiceCaller',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改企业用户坐席
-export function updateCompanyVoiceCaller(data) {
-  return request({
-    url: '/company/companyVoiceCaller',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除企业用户坐席
-export function delCompanyVoiceCaller(callerId) {
-  return request({
-    url: '/company/companyVoiceCaller/' + callerId,
-    method: 'delete'
-  })
-}
-
-// 导出企业用户坐席
-export function exportCompanyVoiceCaller(query) {
-  return request({
-    url: '/company/companyVoiceCaller/export',
-    method: 'get',
-    params: query
-  })
-}
-
-export function getCallerList() {
-  return request({
-    url: '/company/companyVoiceCaller/getCallerList' ,
-    method: 'get'
-  })
-}
-export function bindCallerNo(data) {
-  return request({
-    url: '/company/companyVoiceCaller/bindCallerNo',
-    method: 'post',
-    data: data
-  })
-}
-
+import request from '@/utils/request'
+
+// 查询企业用户坐席列表
+export function listCompanyVoiceCaller(query) {
+  return request({
+    url: '/company/companyVoiceCaller/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询企业用户坐席详细
+export function getCompanyVoiceCaller(callerId) {
+  return request({
+    url: '/company/companyVoiceCaller/' + callerId,
+    method: 'get'
+  })
+}
+
+// 新增企业用户坐席
+export function addCompanyVoiceCaller(data) {
+  return request({
+    url: '/company/companyVoiceCaller',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改企业用户坐席
+export function updateCompanyVoiceCaller(data) {
+  return request({
+    url: '/company/companyVoiceCaller',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除企业用户坐席
+export function delCompanyVoiceCaller(callerId) {
+  return request({
+    url: '/company/companyVoiceCaller/' + callerId,
+    method: 'delete'
+  })
+}
+
+// 导出企业用户坐席
+export function exportCompanyVoiceCaller(query) {
+  return request({
+    url: '/company/companyVoiceCaller/export',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getCallerList() {
+  return request({
+    url: '/company/companyVoiceCaller/getCallerList' ,
+    method: 'get'
+  })
+}
+export function bindCallerNo(data) {
+  return request({
+    url: '/company/companyVoiceCaller/bindCallerNo',
+    method: 'post',
+    data: data
+  })
+}
+

+ 52 - 52
src/api/company/companyVoiceLogs.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询通话记录列表
-export function listCompanyVoiceLogs(query) {
-  return request({
-    url: '/company/companyVoiceLogs/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询通话记录详细
-export function getCompanyVoiceLogs(voiceId) {
-  return request({
-    url: '/company/companyVoiceLogs/' + voiceId,
-    method: 'get'
-  })
-}
-
-// 新增通话记录
-export function addCompanyVoiceLogs(data) {
-  return request({
-    url: '/company/companyVoiceLogs',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改通话记录
-export function updateCompanyVoiceLogs(data) {
-  return request({
-    url: '/company/companyVoiceLogs',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除通话记录
-export function delCompanyVoiceLogs(voiceId) {
-  return request({
-    url: '/company/companyVoiceLogs/' + voiceId,
-    method: 'delete'
-  })
-}
-
-// 导出通话记录
-export function exportCompanyVoiceLogs(query) {
-  return request({
-    url: '/company/companyVoiceLogs/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询通话记录列表
+export function listCompanyVoiceLogs(query) {
+  return request({
+    url: '/company/companyVoiceLogs/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询通话记录详细
+export function getCompanyVoiceLogs(voiceId) {
+  return request({
+    url: '/company/companyVoiceLogs/' + voiceId,
+    method: 'get'
+  })
+}
+
+// 新增通话记录
+export function addCompanyVoiceLogs(data) {
+  return request({
+    url: '/company/companyVoiceLogs',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改通话记录
+export function updateCompanyVoiceLogs(data) {
+  return request({
+    url: '/company/companyVoiceLogs',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除通话记录
+export function delCompanyVoiceLogs(voiceId) {
+  return request({
+    url: '/company/companyVoiceLogs/' + voiceId,
+    method: 'delete'
+  })
+}
+
+// 导出通话记录
+export function exportCompanyVoiceLogs(query) {
+  return request({
+    url: '/company/companyVoiceLogs/export',
+    method: 'get',
+    params: query
+  })
 }

+ 28 - 28
src/api/company/companyVoicePackageOrder.js

@@ -1,28 +1,28 @@
-import request from '@/utils/request'
-
-// 查询套餐订单列表
-export function listCompanyVoicePackageOrder(query) {
-  return request({
-    url: '/company/companyVoicePackageOrder/list',
-    method: 'get',
-    params: query
-  })
-}
-
-export function getVoicePackagelist(query) {
-  return request({
-    url: '/company/companyVoicePackageOrder/getVoicePackagelist',
-    method: 'get',
-    params: query
-  })
-}
-
-export function buy(data) {
-  return request({
-    url: '/company/companyVoicePackageOrder/buy',
-    method: 'post',
-    data: data
-  })
-}
-
-
+import request from '@/utils/request'
+
+// 查询套餐订单列表
+export function listCompanyVoicePackageOrder(query) {
+  return request({
+    url: '/company/companyVoicePackageOrder/list',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getVoicePackagelist(query) {
+  return request({
+    url: '/company/companyVoicePackageOrder/getVoicePackagelist',
+    method: 'get',
+    params: query
+  })
+}
+
+export function buy(data) {
+  return request({
+    url: '/company/companyVoicePackageOrder/buy',
+    method: 'post',
+    data: data
+  })
+}
+
+

+ 11 - 11
src/api/company/pay.js

@@ -1,12 +1,12 @@
-import request from '@/utils/request'
-
-
-
-export function weixinPay(query) {
-  return request({
-    url: '/pay/wxPay/qrPay',
-    method: 'get',
-    params: query
-  })
-}
+import request from '@/utils/request'
+
+
+
+export function weixinPay(query) {
+  return request({
+    url: '/pay/wxPay/qrPay',
+    method: 'get',
+    params: query
+  })
+}
  

+ 47 - 47
src/api/company/statistics.js

@@ -1,47 +1,47 @@
-import request from '@/utils/request'
-
- 
-export function voiceLogs(query) {
-  return request({
-    url: '/company/statistics/voiceLogs',
-    method: 'get',
-    params: query
-  })
-}
-export function exportVoiceLogs(query) {
-  return request({
-    url: '/company/statistics/exportVoiceLogs',
-    method: 'get',
-    params: query
-  })
-}
-
-export function myVoiceLogs(query) {
-  return request({
-    url: '/company/statistics/myVoiceLogs',
-    method: 'get',
-    params: query
-  })
-}
-export function exportMyVoiceLogs(query) {
-  return request({
-    url: '/company/statistics/exportMyVoiceLogs',
-    method: 'get',
-    params: query
-  })
-}
- 
-export function smsLogs(query) {
-  return request({
-    url: '/company/statistics/smsLogs',
-    method: 'get',
-    params: query
-  })
-}
-export function exportSmsLogs(query) {
-  return request({
-    url: '/company/statistics/exportSmsLogs',
-    method: 'get',
-    params: query
-  })
-}
+import request from '@/utils/request'
+
+ 
+export function voiceLogs(query) {
+  return request({
+    url: '/company/statistics/voiceLogs',
+    method: 'get',
+    params: query
+  })
+}
+export function exportVoiceLogs(query) {
+  return request({
+    url: '/company/statistics/exportVoiceLogs',
+    method: 'get',
+    params: query
+  })
+}
+
+export function myVoiceLogs(query) {
+  return request({
+    url: '/company/statistics/myVoiceLogs',
+    method: 'get',
+    params: query
+  })
+}
+export function exportMyVoiceLogs(query) {
+  return request({
+    url: '/company/statistics/exportMyVoiceLogs',
+    method: 'get',
+    params: query
+  })
+}
+ 
+export function smsLogs(query) {
+  return request({
+    url: '/company/statistics/smsLogs',
+    method: 'get',
+    params: query
+  })
+}
+export function exportSmsLogs(query) {
+  return request({
+    url: '/company/statistics/exportSmsLogs',
+    method: 'get',
+    params: query
+  })
+}

+ 151 - 151
src/api/crm/customer.js

@@ -1,152 +1,152 @@
-import request from '@/utils/request'
-
-export function getFullCustomerList(query) {
-  return request({
-    url: '/crm/customer/getFullCustomerList',
-    method: 'get',
-    params: query
-  })
-}
-
-export function getLineCustomerList(query) {
-  return request({
-    url: '/crm/customer/getLineCustomerList',
-    method: 'get',
-    params: query
-  })
-}
-
-export function getCustomerList(query) {
-  return request({
-    url: '/crm/customer/getCustomerList',
-    method: 'get',
-    params: query
-  })
-}
-
-export function getCustomerListByIds(query) {
-  return request({
-    url: '/crm/customer/getCustomerListByIds',
-    method: 'get',
-    params: query
-  })
-}
-
-
-
-export function getMyCustomerList(query) {
-  return request({
-    url: '/crm/customer/getMyCustomerList',
-    method: 'get',
-    params: query
-  })
-}
-
-export function getCustomerDetails(query) {
-  return request({
-    url: '/crm/customer/getCustomerDetails/',
-    method: 'get',
-    params: query
-  })
-}
-
-export function getCustomerListBySearch(query) {
-  return request({
-    url: '/crm/customer/getCustomerListBySearch',
-    method: 'get',
-    params: query
-  })
-}
-
-
-
-
-
-export function exportCustomer(query) {
-  return request({
-    url: '/crm/customer/export',
-    method: 'get',
-    params: query
-  })
-}
-
-export function assignToUser(data) {
-  return request({
-    url: '/crm/customer/assignToUser',
-    method: 'post',
-    data: data
-  })
-}
-export function assignUser(data) {
-  return request({
-    url: '/crm/customer/assignUser',
-    method: 'post',
-    data: data
-  })
-}
-
-
-
-export function receive(data) {
-  return request({
-    url: '/crm/customer/receive',
-    method: 'post',
-    data: data
-  })
-}
-
-export function recover(data) {
-  return request({
-    url: '/crm/customer/recover',
-    method: 'post',
-    data: data
-  })
-}
-
-
-
-
-
-
-// 下载用户导入模板
-export function importLineTemplate() {
-  return request({
-    url: '/crm/customer/importLineTemplate',
-    method: 'get'
-  })
-}
-
-
-export function addCustomer(data) {
-  return request({
-    url: '/crm/customer/add',
-    method: 'post',
-    data: data
-  })
-}
-
-export function addMyCustomer(data) {
-  return request({
-    url: '/crm/customer/addMyCustomer',
-    method: 'post',
-    data: data
-  })
-}
-
-
-// 修改客户
-export function updateCustomer(data) {
-  return request({
-    url: '/crm/customer/edit',
-    method: 'put',
-    data: data
-  })
-}
-
-export function updateCustomerSource(data) {
-  return request({
-    url: '/crm/customer/updateCustomerSource',
-    method: 'post',
-    data: data
-  })
+import request from '@/utils/request'
+
+export function getFullCustomerList(query) {
+  return request({
+    url: '/crm/customer/getFullCustomerList',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getLineCustomerList(query) {
+  return request({
+    url: '/crm/customer/getLineCustomerList',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getCustomerList(query) {
+  return request({
+    url: '/crm/customer/getCustomerList',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getCustomerListByIds(query) {
+  return request({
+    url: '/crm/customer/getCustomerListByIds',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
+export function getMyCustomerList(query) {
+  return request({
+    url: '/crm/customer/getMyCustomerList',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getCustomerDetails(query) {
+  return request({
+    url: '/crm/customer/getCustomerDetails/',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getCustomerListBySearch(query) {
+  return request({
+    url: '/crm/customer/getCustomerListBySearch',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
+
+
+export function exportCustomer(query) {
+  return request({
+    url: '/crm/customer/export',
+    method: 'get',
+    params: query
+  })
+}
+
+export function assignToUser(data) {
+  return request({
+    url: '/crm/customer/assignToUser',
+    method: 'post',
+    data: data
+  })
+}
+export function assignUser(data) {
+  return request({
+    url: '/crm/customer/assignUser',
+    method: 'post',
+    data: data
+  })
+}
+
+
+
+export function receive(data) {
+  return request({
+    url: '/crm/customer/receive',
+    method: 'post',
+    data: data
+  })
+}
+
+export function recover(data) {
+  return request({
+    url: '/crm/customer/recover',
+    method: 'post',
+    data: data
+  })
+}
+
+
+
+
+
+
+// 下载用户导入模板
+export function importLineTemplate() {
+  return request({
+    url: '/crm/customer/importLineTemplate',
+    method: 'get'
+  })
+}
+
+
+export function addCustomer(data) {
+  return request({
+    url: '/crm/customer/add',
+    method: 'post',
+    data: data
+  })
+}
+
+export function addMyCustomer(data) {
+  return request({
+    url: '/crm/customer/addMyCustomer',
+    method: 'post',
+    data: data
+  })
+}
+
+
+// 修改客户
+export function updateCustomer(data) {
+  return request({
+    url: '/crm/customer/edit',
+    method: 'put',
+    data: data
+  })
+}
+
+export function updateCustomerSource(data) {
+  return request({
+    url: '/crm/customer/updateCustomerSource',
+    method: 'post',
+    data: data
+  })
 }

+ 20 - 20
src/api/crm/customerAssign.js

@@ -1,21 +1,21 @@
-import request from '@/utils/request'
-
-// 查询客户分配记录列表
-export function listCustomerAssign(query) {
-  return request({
-    url: '/crm/customerAssign/list',
-    method: 'get',
-    params: query
-  })
-}
-
- 
- 
-export function cancelCustomerAssign(data) {
-  return request({
-    url: '/crm/customerAssign/cancel' ,
-    method: 'post',
-    data: data
-  })
-}
+import request from '@/utils/request'
+
+// 查询客户分配记录列表
+export function listCustomerAssign(query) {
+  return request({
+    url: '/crm/customerAssign/list',
+    method: 'get',
+    params: query
+  })
+}
+
+ 
+ 
+export function cancelCustomerAssign(data) {
+  return request({
+    url: '/crm/customerAssign/cancel' ,
+    method: 'post',
+    data: data
+  })
+}
  

+ 52 - 52
src/api/crm/customerContacts.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询客户联系人列表
-export function listCustomerContacts(query) {
-  return request({
-    url: '/crm/customerContacts/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询客户联系人详细
-export function getCustomerContacts(contactsId) {
-  return request({
-    url: '/crm/customerContacts/' + contactsId,
-    method: 'get'
-  })
-}
-
-// 新增客户联系人
-export function addCustomerContacts(data) {
-  return request({
-    url: '/crm/customerContacts',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改客户联系人
-export function updateCustomerContacts(data) {
-  return request({
-    url: '/crm/customerContacts',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除客户联系人
-export function delCustomerContacts(contactsId) {
-  return request({
-    url: '/crm/customerContacts/' + contactsId,
-    method: 'delete'
-  })
-}
-
-// 导出客户联系人
-export function exportCustomerContacts(query) {
-  return request({
-    url: '/crm/customerContacts/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询客户联系人列表
+export function listCustomerContacts(query) {
+  return request({
+    url: '/crm/customerContacts/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询客户联系人详细
+export function getCustomerContacts(contactsId) {
+  return request({
+    url: '/crm/customerContacts/' + contactsId,
+    method: 'get'
+  })
+}
+
+// 新增客户联系人
+export function addCustomerContacts(data) {
+  return request({
+    url: '/crm/customerContacts',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改客户联系人
+export function updateCustomerContacts(data) {
+  return request({
+    url: '/crm/customerContacts',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除客户联系人
+export function delCustomerContacts(contactsId) {
+  return request({
+    url: '/crm/customerContacts/' + contactsId,
+    method: 'delete'
+  })
+}
+
+// 导出客户联系人
+export function exportCustomerContacts(query) {
+  return request({
+    url: '/crm/customerContacts/export',
+    method: 'get',
+    params: query
+  })
 }

+ 52 - 52
src/api/crm/customerExt.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询客户字段扩展列表
-export function listCustomerExt(query) {
-  return request({
-    url: '/crm/customerExt/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询客户字段扩展详细
-export function getCustomerExt(extId) {
-  return request({
-    url: '/crm/customerExt/' + extId,
-    method: 'get'
-  })
-}
-
-// 新增客户字段扩展
-export function addCustomerExt(data) {
-  return request({
-    url: '/crm/customerExt',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改客户字段扩展
-export function updateCustomerExt(data) {
-  return request({
-    url: '/crm/customerExt',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除客户字段扩展
-export function delCustomerExt(extId) {
-  return request({
-    url: '/crm/customerExt/' + extId,
-    method: 'delete'
-  })
-}
-
-// 导出客户字段扩展
-export function exportCustomerExt(query) {
-  return request({
-    url: '/crm/customerExt/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询客户字段扩展列表
+export function listCustomerExt(query) {
+  return request({
+    url: '/crm/customerExt/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询客户字段扩展详细
+export function getCustomerExt(extId) {
+  return request({
+    url: '/crm/customerExt/' + extId,
+    method: 'get'
+  })
+}
+
+// 新增客户字段扩展
+export function addCustomerExt(data) {
+  return request({
+    url: '/crm/customerExt',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改客户字段扩展
+export function updateCustomerExt(data) {
+  return request({
+    url: '/crm/customerExt',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除客户字段扩展
+export function delCustomerExt(extId) {
+  return request({
+    url: '/crm/customerExt/' + extId,
+    method: 'delete'
+  })
+}
+
+// 导出客户字段扩展
+export function exportCustomerExt(query) {
+  return request({
+    url: '/crm/customerExt/export',
+    method: 'get',
+    params: query
+  })
 }

+ 0 - 53
src/api/crm/customerHisOrder.js

@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 查询客户历史订单列表
-export function listCustomerHisOrder(query) {
-  return request({
-    url: '/crm/customerHisOrder/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询客户历史订单详细
-export function getCustomerHisOrder(orderId) {
-  return request({
-    url: '/crm/customerHisOrder/' + orderId,
-    method: 'get'
-  })
-}
-
-// 新增客户历史订单
-export function addCustomerHisOrder(data) {
-  return request({
-    url: '/crm/customerHisOrder',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改客户历史订单
-export function updateCustomerHisOrder(data) {
-  return request({
-    url: '/crm/customerHisOrder',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除客户历史订单
-export function delCustomerHisOrder(orderId) {
-  return request({
-    url: '/crm/customerHisOrder/' + orderId,
-    method: 'delete'
-  })
-}
-
-// 导出客户历史订单
-export function exportCustomerHisOrder(query) {
-  return request({
-    url: '/crm/customerHisOrder/export',
-    method: 'get',
-    params: query
-  })
-}

+ 52 - 52
src/api/crm/customerLogs.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询客户日志列表
-export function listCustomerLogs(query) {
-  return request({
-    url: '/crm/customerLogs/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询客户日志详细
-export function getCustomerLogs(logsId) {
-  return request({
-    url: '/crm/customerLogs/' + logsId,
-    method: 'get'
-  })
-}
-
-// 新增客户日志
-export function addCustomerLogs(data) {
-  return request({
-    url: '/crm/customerLogs',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改客户日志
-export function updateCustomerLogs(data) {
-  return request({
-    url: '/crm/customerLogs',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除客户日志
-export function delCustomerLogs(logsId) {
-  return request({
-    url: '/crm/customerLogs/' + logsId,
-    method: 'delete'
-  })
-}
-
-// 导出客户日志
-export function exportCustomerLogs(query) {
-  return request({
-    url: '/crm/customerLogs/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询客户日志列表
+export function listCustomerLogs(query) {
+  return request({
+    url: '/crm/customerLogs/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询客户日志详细
+export function getCustomerLogs(logsId) {
+  return request({
+    url: '/crm/customerLogs/' + logsId,
+    method: 'get'
+  })
+}
+
+// 新增客户日志
+export function addCustomerLogs(data) {
+  return request({
+    url: '/crm/customerLogs',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改客户日志
+export function updateCustomerLogs(data) {
+  return request({
+    url: '/crm/customerLogs',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除客户日志
+export function delCustomerLogs(logsId) {
+  return request({
+    url: '/crm/customerLogs/' + logsId,
+    method: 'delete'
+  })
+}
+
+// 导出客户日志
+export function exportCustomerLogs(query) {
+  return request({
+    url: '/crm/customerLogs/export',
+    method: 'get',
+    params: query
+  })
 }

+ 52 - 52
src/api/crm/customerUser.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询客户员工认领列表
-export function listCustomerUser(query) {
-  return request({
-    url: '/crm/customerUser/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询客户员工认领详细
-export function getCustomerUser(customerUserId) {
-  return request({
-    url: '/crm/customerUser/' + customerUserId,
-    method: 'get'
-  })
-}
-
-// 新增客户员工认领
-export function addCustomerUser(data) {
-  return request({
-    url: '/crm/customerUser',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改客户员工认领
-export function updateCustomerUser(data) {
-  return request({
-    url: '/crm/customerUser',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除客户员工认领
-export function delCustomerUser(customerUserId) {
-  return request({
-    url: '/crm/customerUser/' + customerUserId,
-    method: 'delete'
-  })
-}
-
-// 导出客户员工认领
-export function exportCustomerUser(query) {
-  return request({
-    url: '/crm/customerUser/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询客户员工认领列表
+export function listCustomerUser(query) {
+  return request({
+    url: '/crm/customerUser/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询客户员工认领详细
+export function getCustomerUser(customerUserId) {
+  return request({
+    url: '/crm/customerUser/' + customerUserId,
+    method: 'get'
+  })
+}
+
+// 新增客户员工认领
+export function addCustomerUser(data) {
+  return request({
+    url: '/crm/customerUser',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改客户员工认领
+export function updateCustomerUser(data) {
+  return request({
+    url: '/crm/customerUser',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除客户员工认领
+export function delCustomerUser(customerUserId) {
+  return request({
+    url: '/crm/customerUser/' + customerUserId,
+    method: 'delete'
+  })
+}
+
+// 导出客户员工认领
+export function exportCustomerUser(query) {
+  return request({
+    url: '/crm/customerUser/export',
+    method: 'get',
+    params: query
+  })
 }

+ 52 - 52
src/api/crm/customerVisit.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询跟进列表
-export function listCustomerVisit(query) {
-  return request({
-    url: '/crm/customerVisit/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询跟进详细
-export function getCustomerVisit(visitId) {
-  return request({
-    url: '/crm/customerVisit/' + visitId,
-    method: 'get'
-  })
-}
-
-// 新增跟进
-export function addCustomerVisit(data) {
-  return request({
-    url: '/crm/customerVisit',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改跟进
-export function updateCustomerVisit(data) {
-  return request({
-    url: '/crm/customerVisit',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除跟进
-export function delCustomerVisit(visitId) {
-  return request({
-    url: '/crm/customerVisit/' + visitId,
-    method: 'delete'
-  })
-}
-
-// 导出跟进
-export function exportCustomerVisit(query) {
-  return request({
-    url: '/crm/customerVisit/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询跟进列表
+export function listCustomerVisit(query) {
+  return request({
+    url: '/crm/customerVisit/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询跟进详细
+export function getCustomerVisit(visitId) {
+  return request({
+    url: '/crm/customerVisit/' + visitId,
+    method: 'get'
+  })
+}
+
+// 新增跟进
+export function addCustomerVisit(data) {
+  return request({
+    url: '/crm/customerVisit',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改跟进
+export function updateCustomerVisit(data) {
+  return request({
+    url: '/crm/customerVisit',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除跟进
+export function delCustomerVisit(visitId) {
+  return request({
+    url: '/crm/customerVisit/' + visitId,
+    method: 'delete'
+  })
+}
+
+// 导出跟进
+export function exportCustomerVisit(query) {
+  return request({
+    url: '/crm/customerVisit/export',
+    method: 'get',
+    params: query
+  })
 }

+ 29 - 29
src/api/crm/event.js

@@ -1,30 +1,30 @@
-import request from '@/utils/request'
-
-export function getMyCrmEventList(query) {
-  return request({
-    url: '/crm/event/getMyCrmEventList',
-    method: 'get',
-    params: query
-  })
-}
-export function addCrmEvent(data) {
-  return request({
-    url: '/crm/event/addCrmEvent',
-    method: 'post',
-    data: data
-  })
-}
-export function delCrmEvent(data) {
-  return request({
-    url: '/crm/event/delCrmEvent',
-    method: 'post',
-    data: data
-  })
-}
-export function doEvent(data) {
-  return request({
-    url: '/crm/event/doEvent',
-    method: 'post',
-    data: data
-  })
+import request from '@/utils/request'
+
+export function getMyCrmEventList(query) {
+  return request({
+    url: '/crm/event/getMyCrmEventList',
+    method: 'get',
+    params: query
+  })
+}
+export function addCrmEvent(data) {
+  return request({
+    url: '/crm/event/addCrmEvent',
+    method: 'post',
+    data: data
+  })
+}
+export function delCrmEvent(data) {
+  return request({
+    url: '/crm/event/delCrmEvent',
+    method: 'post',
+    data: data
+  })
+}
+export function doEvent(data) {
+  return request({
+    url: '/crm/event/doEvent',
+    method: 'post',
+    data: data
+  })
 }

+ 43 - 43
src/api/crm/msg.js

@@ -1,43 +1,43 @@
-import request from '@/utils/request'
-
-// 查询 消息列表
-export function getMsg() {
-  return request({
-    url: '/crm/msg/getMsg',
-    method: 'get'
-  })
-}
-
-export function getMsgList(query) {
-  return request({
-    url: '/crm/msg/getMsgList',
-    method: 'get',
-    params: query
-  })
-}
-
-
-export function getMsgCount() {
-  return request({
-    url: '/crm/msg/getMsgCount',
-    method: 'get',
-  })
-}
-
-
-export function setRead(data) {
-  return request({
-    url: '/crm/msg/setRead',
-    method: 'post',
-    data: data
-  })
-}
-export function setAllRead() {
-  return request({
-    url: '/crm/msg/setAllRead',
-    method: 'post'
-  })
-}
-
-
-
+import request from '@/utils/request'
+
+// 查询 消息列表
+export function getMsg() {
+  return request({
+    url: '/crm/msg/getMsg',
+    method: 'get'
+  })
+}
+
+export function getMsgList(query) {
+  return request({
+    url: '/crm/msg/getMsgList',
+    method: 'get',
+    params: query
+  })
+}
+
+
+export function getMsgCount() {
+  return request({
+    url: '/crm/msg/getMsgCount',
+    method: 'get',
+  })
+}
+
+
+export function setRead(data) {
+  return request({
+    url: '/crm/msg/setRead',
+    method: 'post',
+    data: data
+  })
+}
+export function setAllRead() {
+  return request({
+    url: '/crm/msg/setAllRead',
+    method: 'post'
+  })
+}
+
+
+

+ 34 - 34
src/api/crm/statistics.js

@@ -1,35 +1,35 @@
-import request from '@/utils/request'
-
- 
-export function customer(query) {
-  return request({
-    url: '/crm/statistics/customer',
-    method: 'get',
-    params: query
-  })
-}
-export function exportCustomer(query) {
-  return request({
-    url: '/crm/statistics/exportCustomer',
-    method: 'get',
-    params: query
-  })
-}
-
- 
-export function customerVisit(query) {
-  return request({
-    url: '/crm/statistics/customerVisit',
-    method: 'get',
-    params: query
-  })
-}
-export function exportCustomerVisit(query) {
-  return request({
-    url: '/crm/statistics/exportCustomerVisit',
-    method: 'get',
-    params: query
-  })
-}
- 
+import request from '@/utils/request'
+
+ 
+export function customer(query) {
+  return request({
+    url: '/crm/statistics/customer',
+    method: 'get',
+    params: query
+  })
+}
+export function exportCustomer(query) {
+  return request({
+    url: '/crm/statistics/exportCustomer',
+    method: 'get',
+    params: query
+  })
+}
+
+ 
+export function customerVisit(query) {
+  return request({
+    url: '/crm/statistics/customerVisit',
+    method: 'get',
+    params: query
+  })
+}
+export function exportCustomerVisit(query) {
+  return request({
+    url: '/crm/statistics/exportCustomerVisit',
+    method: 'get',
+    params: query
+  })
+}
+ 
  

+ 52 - 52
src/api/doc/doc.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询档案列表
-export function listDoc(query) {
-  return request({
-    url: '/doc/doc/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询档案详细
-export function getDoc(docId) {
-  return request({
-    url: '/doc/doc/' + docId,
-    method: 'get'
-  })
-}
-
-// 新增档案
-export function addDoc(data) {
-  return request({
-    url: '/doc/doc',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改档案
-export function updateDoc(data) {
-  return request({
-    url: '/doc/doc',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除档案
-export function delDoc(docId) {
-  return request({
-    url: '/doc/doc/' + docId,
-    method: 'delete'
-  })
-}
-
-// 导出档案
-export function exportDoc(query) {
-  return request({
-    url: '/doc/doc/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询档案列表
+export function listDoc(query) {
+  return request({
+    url: '/doc/doc/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询档案详细
+export function getDoc(docId) {
+  return request({
+    url: '/doc/doc/' + docId,
+    method: 'get'
+  })
+}
+
+// 新增档案
+export function addDoc(data) {
+  return request({
+    url: '/doc/doc',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改档案
+export function updateDoc(data) {
+  return request({
+    url: '/doc/doc',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除档案
+export function delDoc(docId) {
+  return request({
+    url: '/doc/doc/' + docId,
+    method: 'delete'
+  })
+}
+
+// 导出档案
+export function exportDoc(query) {
+  return request({
+    url: '/doc/doc/export',
+    method: 'get',
+    params: query
+  })
 }

+ 52 - 52
src/api/doc/docOrder.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询问医生列表
-export function listDocOrder(query) {
-  return request({
-    url: '/doc/docOrder/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询问医生详细
-export function getDocOrder(orderId) {
-  return request({
-    url: '/doc/docOrder/' + orderId,
-    method: 'get'
-  })
-}
-
-// 新增问医生
-export function addDocOrder(data) {
-  return request({
-    url: '/doc/docOrder',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改问医生
-export function updateDocOrder(data) {
-  return request({
-    url: '/doc/docOrder',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除问医生
-export function delDocOrder(orderId) {
-  return request({
-    url: '/doc/docOrder/' + orderId,
-    method: 'delete'
-  })
-}
-
-// 导出问医生
-export function exportDocOrder(query) {
-  return request({
-    url: '/doc/docOrder/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询问医生列表
+export function listDocOrder(query) {
+  return request({
+    url: '/doc/docOrder/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询问医生详细
+export function getDocOrder(orderId) {
+  return request({
+    url: '/doc/docOrder/' + orderId,
+    method: 'get'
+  })
+}
+
+// 新增问医生
+export function addDocOrder(data) {
+  return request({
+    url: '/doc/docOrder',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改问医生
+export function updateDocOrder(data) {
+  return request({
+    url: '/doc/docOrder',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除问医生
+export function delDocOrder(orderId) {
+  return request({
+    url: '/doc/docOrder/' + orderId,
+    method: 'delete'
+  })
+}
+
+// 导出问医生
+export function exportDocOrder(query) {
+  return request({
+    url: '/doc/docOrder/export',
+    method: 'get',
+    params: query
+  })
 }

+ 52 - 52
src/api/doc/docOrderReply.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询订单回复列表
-export function listDocOrderReply(query) {
-  return request({
-    url: '/doc/docOrderReply/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询订单回复详细
-export function getDocOrderReply(replyId) {
-  return request({
-    url: '/doc/docOrderReply/' + replyId,
-    method: 'get'
-  })
-}
-
-// 新增订单回复
-export function addDocOrderReply(data) {
-  return request({
-    url: '/doc/docOrderReply',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改订单回复
-export function updateDocOrderReply(data) {
-  return request({
-    url: '/doc/docOrderReply',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除订单回复
-export function delDocOrderReply(replyId) {
-  return request({
-    url: '/doc/docOrderReply/' + replyId,
-    method: 'delete'
-  })
-}
-
-// 导出订单回复
-export function exportDocOrderReply(query) {
-  return request({
-    url: '/doc/docOrderReply/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询订单回复列表
+export function listDocOrderReply(query) {
+  return request({
+    url: '/doc/docOrderReply/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询订单回复详细
+export function getDocOrderReply(replyId) {
+  return request({
+    url: '/doc/docOrderReply/' + replyId,
+    method: 'get'
+  })
+}
+
+// 新增订单回复
+export function addDocOrderReply(data) {
+  return request({
+    url: '/doc/docOrderReply',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改订单回复
+export function updateDocOrderReply(data) {
+  return request({
+    url: '/doc/docOrderReply',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除订单回复
+export function delDocOrderReply(replyId) {
+  return request({
+    url: '/doc/docOrderReply/' + replyId,
+    method: 'delete'
+  })
+}
+
+// 导出订单回复
+export function exportDocOrderReply(query) {
+  return request({
+    url: '/doc/docOrderReply/export',
+    method: 'get',
+    params: query
+  })
 }

+ 52 - 52
src/api/doc/docRecord.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询记录列表
-export function listDocRecord(query) {
-  return request({
-    url: '/doc/docRecord/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询记录详细
-export function getDocRecord(recordId) {
-  return request({
-    url: '/doc/docRecord/' + recordId,
-    method: 'get'
-  })
-}
-
-// 新增记录
-export function addDocRecord(data) {
-  return request({
-    url: '/doc/docRecord',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改记录
-export function updateDocRecord(data) {
-  return request({
-    url: '/doc/docRecord',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除记录
-export function delDocRecord(recordId) {
-  return request({
-    url: '/doc/docRecord/' + recordId,
-    method: 'delete'
-  })
-}
-
-// 导出记录
-export function exportDocRecord(query) {
-  return request({
-    url: '/doc/docRecord/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询记录列表
+export function listDocRecord(query) {
+  return request({
+    url: '/doc/docRecord/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询记录详细
+export function getDocRecord(recordId) {
+  return request({
+    url: '/doc/docRecord/' + recordId,
+    method: 'get'
+  })
+}
+
+// 新增记录
+export function addDocRecord(data) {
+  return request({
+    url: '/doc/docRecord',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改记录
+export function updateDocRecord(data) {
+  return request({
+    url: '/doc/docRecord',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除记录
+export function delDocRecord(recordId) {
+  return request({
+    url: '/doc/docRecord/' + recordId,
+    method: 'delete'
+  })
+}
+
+// 导出记录
+export function exportDocRecord(query) {
+  return request({
+    url: '/doc/docRecord/export',
+    method: 'get',
+    params: query
+  })
 }

+ 52 - 52
src/api/doc/docRecordReply.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询回复列表
-export function listDocRecordReply(query) {
-  return request({
-    url: '/doc/docRecordReply/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询回复详细
-export function getDocRecordReply(replyId) {
-  return request({
-    url: '/doc/docRecordReply/' + replyId,
-    method: 'get'
-  })
-}
-
-// 新增回复
-export function addDocRecordReply(data) {
-  return request({
-    url: '/doc/docRecordReply',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改回复
-export function updateDocRecordReply(data) {
-  return request({
-    url: '/doc/docRecordReply',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除回复
-export function delDocRecordReply(replyId) {
-  return request({
-    url: '/doc/docRecordReply/' + replyId,
-    method: 'delete'
-  })
-}
-
-// 导出回复
-export function exportDocRecordReply(query) {
-  return request({
-    url: '/doc/docRecordReply/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询回复列表
+export function listDocRecordReply(query) {
+  return request({
+    url: '/doc/docRecordReply/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询回复详细
+export function getDocRecordReply(replyId) {
+  return request({
+    url: '/doc/docRecordReply/' + replyId,
+    method: 'get'
+  })
+}
+
+// 新增回复
+export function addDocRecordReply(data) {
+  return request({
+    url: '/doc/docRecordReply',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改回复
+export function updateDocRecordReply(data) {
+  return request({
+    url: '/doc/docRecordReply',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除回复
+export function delDocRecordReply(replyId) {
+  return request({
+    url: '/doc/docRecordReply/' + replyId,
+    method: 'delete'
+  })
+}
+
+// 导出回复
+export function exportDocRecordReply(query) {
+  return request({
+    url: '/doc/docRecordReply/export',
+    method: 'get',
+    params: query
+  })
 }

+ 30 - 30
src/api/index.js

@@ -1,31 +1,31 @@
-import request from '@/utils/request'
-
- 
-export function getIndexData(data) {
-  return request({
-    url: '/common/index/getIndexData',
-    method: 'get',
-    data: data
-  })
-}
-
-export function getStoreOrderData(query) {
-  return request({
-    url: '/common/index/getStoreOrderData',
-    method: 'get',
-    params: query
-  }
-  )
-}
- 
-
-export function getStorePaymentData(query) {
-  return request({
-    url: '/common/index/getStorePaymentData',
-    method: 'get',
-    params: query
-  }
-  )
-}
- 
+import request from '@/utils/request'
+
+ 
+export function getIndexData(data) {
+  return request({
+    url: '/common/index/getIndexData',
+    method: 'get',
+    data: data
+  })
+}
+
+export function getStoreOrderData(query) {
+  return request({
+    url: '/common/index/getStoreOrderData',
+    method: 'get',
+    params: query
+  }
+  )
+}
+ 
+
+export function getStorePaymentData(query) {
+  return request({
+    url: '/common/index/getStorePaymentData',
+    method: 'get',
+    params: query
+  }
+  )
+}
+ 
  

+ 39 - 39
src/api/login.js

@@ -1,40 +1,40 @@
-import request from '@/utils/request'
-
-// 登录方法
-export function login(username, password, code, uuid) {
-  const data = {
-    username,
-    password,
-    code,
-    uuid
-  }
-  return request({
-    url: '/login',
-    method: 'post',
-    data: data
-  })
-}
-
-// 获取用户详细信息
-export function getInfo() {
-  return request({
-    url: '/getInfo',
-    method: 'get'
-  })
-}
-
-// 退出方法
-export function logout() {
-  return request({
-    url: '/logout',
-    method: 'post'
-  })
-}
-
-// 获取验证码
-export function getCodeImg() {
-  return request({
-    url: '/captchaImage',
-    method: 'get'
-  })
+import request from '@/utils/request'
+
+// 登录方法
+export function login(username, password, code, uuid) {
+  const data = {
+    username,
+    password,
+    code,
+    uuid
+  }
+  return request({
+    url: '/login',
+    method: 'post',
+    data: data
+  })
+}
+
+// 获取用户详细信息
+export function getInfo() {
+  return request({
+    url: '/getInfo',
+    method: 'get'
+  })
+}
+
+// 退出方法
+export function logout() {
+  return request({
+    url: '/logout',
+    method: 'post'
+  })
+}
+
+// 获取验证码
+export function getCodeImg() {
+  return request({
+    url: '/captchaImage',
+    method: 'get'
+  })
 }

+ 8 - 8
src/api/menu.js

@@ -1,9 +1,9 @@
-import request from '@/utils/request'
-
-// 获取路由
-export const getRouters = () => {
-  return request({
-    url: '/getRouters',
-    method: 'get'
-  })
+import request from '@/utils/request'
+
+// 获取路由
+export const getRouters = () => {
+  return request({
+    url: '/getRouters',
+    method: 'get'
+  })
 }

+ 34 - 34
src/api/monitor/logininfor.js

@@ -1,35 +1,35 @@
-import request from '@/utils/request'
-
-// 查询登录日志列表
-export function list(query) {
-  return request({
-    url: '/monitor/logininfor/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 删除登录日志
-export function delLogininfor(infoId) {
-  return request({
-    url: '/monitor/logininfor/' + infoId,
-    method: 'delete'
-  })
-}
-
-// 清空登录日志
-export function cleanLogininfor() {
-  return request({
-    url: '/monitor/logininfor/clean',
-    method: 'delete'
-  })
-}
-
-// 导出登录日志
-export function exportLogininfor(query) {
-  return request({
-    url: '/monitor/logininfor/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询登录日志列表
+export function list(query) {
+  return request({
+    url: '/monitor/logininfor/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 删除登录日志
+export function delLogininfor(infoId) {
+  return request({
+    url: '/monitor/logininfor/' + infoId,
+    method: 'delete'
+  })
+}
+
+// 清空登录日志
+export function cleanLogininfor() {
+  return request({
+    url: '/monitor/logininfor/clean',
+    method: 'delete'
+  })
+}
+
+// 导出登录日志
+export function exportLogininfor(query) {
+  return request({
+    url: '/monitor/logininfor/export',
+    method: 'get',
+    params: query
+  })
 }

+ 34 - 34
src/api/monitor/operlog.js

@@ -1,35 +1,35 @@
-import request from '@/utils/request'
-
-// 查询操作日志列表
-export function list(query) {
-  return request({
-    url: '/monitor/operlog/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 删除操作日志
-export function delOperlog(operId) {
-  return request({
-    url: '/monitor/operlog/' + operId,
-    method: 'delete'
-  })
-}
-
-// 清空操作日志
-export function cleanOperlog() {
-  return request({
-    url: '/monitor/operlog/clean',
-    method: 'delete'
-  })
-}
-
-// 导出操作日志
-export function exportOperlog(query) {
-  return request({
-    url: '/monitor/operlog/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询操作日志列表
+export function list(query) {
+  return request({
+    url: '/monitor/operlog/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 删除操作日志
+export function delOperlog(operId) {
+  return request({
+    url: '/monitor/operlog/' + operId,
+    method: 'delete'
+  })
+}
+
+// 清空操作日志
+export function cleanOperlog() {
+  return request({
+    url: '/monitor/operlog/clean',
+    method: 'delete'
+  })
+}
+
+// 导出操作日志
+export function exportOperlog(query) {
+  return request({
+    url: '/monitor/operlog/export',
+    method: 'get',
+    params: query
+  })
 }

+ 61 - 61
src/api/store/city.js

@@ -1,62 +1,62 @@
-import request from '@/utils/request'
-
-// 查询城市列表
-export function listCity(query) {
-  return request({
-    url: '/store/city/list',
-    method: 'get',
-    params: query
-  })
-}
-export function getCitys(query) {
-  return request({
-    url: '/store/city/getCitys',
-    method: 'get',
-    params: query
-  })
-}
-
-
-
-// 查询城市详细
-export function getCity(id) {
-  return request({
-    url: '/store/city/' + id,
-    method: 'get'
-  })
-}
-
-// 新增城市
-export function addCity(data) {
-  return request({
-    url: '/store/city',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改城市
-export function updateCity(data) {
-  return request({
-    url: '/store/city',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除城市
-export function delCity(id) {
-  return request({
-    url: '/store/city/' + id,
-    method: 'delete'
-  })
-}
-
-// 导出城市
-export function exportCity(query) {
-  return request({
-    url: '/store/city/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询城市列表
+export function listCity(query) {
+  return request({
+    url: '/store/city/list',
+    method: 'get',
+    params: query
+  })
+}
+export function getCitys(query) {
+  return request({
+    url: '/store/city/getCitys',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
+// 查询城市详细
+export function getCity(id) {
+  return request({
+    url: '/store/city/' + id,
+    method: 'get'
+  })
+}
+
+// 新增城市
+export function addCity(data) {
+  return request({
+    url: '/store/city',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改城市
+export function updateCity(data) {
+  return request({
+    url: '/store/city',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除城市
+export function delCity(id) {
+  return request({
+    url: '/store/city/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出城市
+export function exportCity(query) {
+  return request({
+    url: '/store/city/export',
+    method: 'get',
+    params: query
+  })
 }

+ 52 - 52
src/api/store/material.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询素材库列表
-export function listMaterial(query) {
-  return request({
-    url: '/store/material/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询素材库详细
-export function getMaterial(materialId) {
-  return request({
-    url: '/store/material/' + materialId,
-    method: 'get'
-  })
-}
-
-// 新增素材库
-export function addMaterial(data) {
-  return request({
-    url: '/store/material',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改素材库
-export function updateMaterial(data) {
-  return request({
-    url: '/store/material',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除素材库
-export function delMaterial(materialId) {
-  return request({
-    url: '/store/material/' + materialId,
-    method: 'delete'
-  })
-}
-
-// 导出素材库
-export function exportMaterial(query) {
-  return request({
-    url: '/store/material/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询素材库列表
+export function listMaterial(query) {
+  return request({
+    url: '/store/material/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询素材库详细
+export function getMaterial(materialId) {
+  return request({
+    url: '/store/material/' + materialId,
+    method: 'get'
+  })
+}
+
+// 新增素材库
+export function addMaterial(data) {
+  return request({
+    url: '/store/material',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改素材库
+export function updateMaterial(data) {
+  return request({
+    url: '/store/material',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除素材库
+export function delMaterial(materialId) {
+  return request({
+    url: '/store/material/' + materialId,
+    method: 'delete'
+  })
+}
+
+// 导出素材库
+export function exportMaterial(query) {
+  return request({
+    url: '/store/material/export',
+    method: 'get',
+    params: query
+  })
 }

+ 60 - 60
src/api/store/materialGroup.js

@@ -1,61 +1,61 @@
-import request from '@/utils/request'
-
-// 查询素材分组列表
-export function listMaterialGroup(query) {
-  return request({
-    url: '/store/materialGroup/list',
-    method: 'get',
-    params: query
-  })
-}
-export function getAllMaterialGroup(query) {
-  return request({
-    url: '/store/materialGroup/getAllList',
-    method: 'get',
-    params: query
-  })
-}
-
-
-// 查询素材分组详细
-export function getMaterialGroup(groupId) {
-  return request({
-    url: '/store/materialGroup/' + groupId,
-    method: 'get'
-  })
-}
-
-// 新增素材分组
-export function addMaterialGroup(data) {
-  return request({
-    url: '/store/materialGroup',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改素材分组
-export function updateMaterialGroup(data) {
-  return request({
-    url: '/store/materialGroup',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除素材分组
-export function delMaterialGroup(groupId) {
-  return request({
-    url: '/store/materialGroup/' + groupId,
-    method: 'delete'
-  })
-}
-
-// 导出素材分组
-export function exportMaterialGroup(query) {
-  return request({
-    url: '/store/materialGroup/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询素材分组列表
+export function listMaterialGroup(query) {
+  return request({
+    url: '/store/materialGroup/list',
+    method: 'get',
+    params: query
+  })
+}
+export function getAllMaterialGroup(query) {
+  return request({
+    url: '/store/materialGroup/getAllList',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 查询素材分组详细
+export function getMaterialGroup(groupId) {
+  return request({
+    url: '/store/materialGroup/' + groupId,
+    method: 'get'
+  })
+}
+
+// 新增素材分组
+export function addMaterialGroup(data) {
+  return request({
+    url: '/store/materialGroup',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改素材分组
+export function updateMaterialGroup(data) {
+  return request({
+    url: '/store/materialGroup',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除素材分组
+export function delMaterialGroup(groupId) {
+  return request({
+    url: '/store/materialGroup/' + groupId,
+    method: 'delete'
+  })
+}
+
+// 导出素材分组
+export function exportMaterialGroup(query) {
+  return request({
+    url: '/store/materialGroup/export',
+    method: 'get',
+    params: query
+  })
 }

+ 33 - 33
src/api/store/statistics.js

@@ -1,33 +1,33 @@
-import request from '@/utils/request'
-
- 
-export function storeOrder(query) {
-  return request({
-    url: '/store/statistics/storeOrder',
-    method: 'get',
-    params: query
-  })
-}
-export function exportStoreOrder(query) {
-  return request({
-    url: '/store/statistics/exportStoreOrder',
-    method: 'get',
-    params: query
-  })
-}
-
-export function storePayment(query) {
-  return request({
-    url: '/store/statistics/storePayment',
-    method: 'get',
-    params: query
-  })
-}
-export function exportStorePayment(query) {
-  return request({
-    url: '/store/statistics/exportStorePayment',
-    method: 'get',
-    params: query
-  })
-}
-
+import request from '@/utils/request'
+
+ 
+export function storeOrder(query) {
+  return request({
+    url: '/store/statistics/storeOrder',
+    method: 'get',
+    params: query
+  })
+}
+export function exportStoreOrder(query) {
+  return request({
+    url: '/store/statistics/exportStoreOrder',
+    method: 'get',
+    params: query
+  })
+}
+
+export function storePayment(query) {
+  return request({
+    url: '/store/statistics/storePayment',
+    method: 'get',
+    params: query
+  })
+}
+export function exportStorePayment(query) {
+  return request({
+    url: '/store/statistics/exportStorePayment',
+    method: 'get',
+    params: query
+  })
+}
+

+ 88 - 88
src/api/store/storeAfterSales.js

@@ -1,88 +1,88 @@
-import request from '@/utils/request'
-
-// 查询售后记录列表
-export function listStoreAfterSales(query) {
-  return request({
-    url: '/store/storeAfterSales/list',
-    method: 'get',
-    params: query
-  })
-}
-export function myListStoreAfterSales(query) {
-  return request({
-    url: '/store/storeAfterSales/myList',
-    method: 'get',
-    params: query
-  })
-}
-
-
-// 查询售后记录详细
-export function getStoreAfterSales(id) {
-  return request({
-    url: '/store/storeAfterSales/' + id,
-    method: 'get'
-  })
-}
-
-// 新增售后记录
-export function addStoreAfterSales(data) {
-  return request({
-    url: '/store/storeAfterSales',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改售后记录
-export function updateStoreAfterSales(data) {
-  return request({
-    url: '/store/storeAfterSales',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除售后记录
-export function delStoreAfterSales(id) {
-  return request({
-    url: '/store/storeAfterSales/' + id,
-    method: 'delete'
-  })
-}
-
-// 导出售后记录
-export function exportStoreAfterSales(query) {
-  return request({
-    url: '/store/storeAfterSales/export',
-    method: 'get',
-    params: query
-  })
-}
-
-
-
-export function cancel(data) {
-  return request({
-    url: '/store/storeAfterSales/cancel',
-    method: 'post',
-    data: data
-  })
-}
-
-export function refund(data) {
-  return request({
-    url: '/store/storeAfterSales/refund',
-    method: 'post',
-    data: data
-  })
-}
-
-export function audit(data) {
-  return request({
-    url: '/store/storeAfterSales/audit',
-    method: 'post',
-    data: data
-  })
-}
-
+import request from '@/utils/request'
+
+// 查询售后记录列表
+export function listStoreAfterSales(query) {
+  return request({
+    url: '/store/storeAfterSales/list',
+    method: 'get',
+    params: query
+  })
+}
+export function myListStoreAfterSales(query) {
+  return request({
+    url: '/store/storeAfterSales/myList',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 查询售后记录详细
+export function getStoreAfterSales(id) {
+  return request({
+    url: '/store/storeAfterSales/' + id,
+    method: 'get'
+  })
+}
+
+// 新增售后记录
+export function addStoreAfterSales(data) {
+  return request({
+    url: '/store/storeAfterSales',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改售后记录
+export function updateStoreAfterSales(data) {
+  return request({
+    url: '/store/storeAfterSales',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除售后记录
+export function delStoreAfterSales(id) {
+  return request({
+    url: '/store/storeAfterSales/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出售后记录
+export function exportStoreAfterSales(query) {
+  return request({
+    url: '/store/storeAfterSales/export',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
+export function cancel(data) {
+  return request({
+    url: '/store/storeAfterSales/cancel',
+    method: 'post',
+    data: data
+  })
+}
+
+export function refund(data) {
+  return request({
+    url: '/store/storeAfterSales/refund',
+    method: 'post',
+    data: data
+  })
+}
+
+export function audit(data) {
+  return request({
+    url: '/store/storeAfterSales/audit',
+    method: 'post',
+    data: data
+  })
+}
+

+ 114 - 114
src/api/store/storeOrder.js

@@ -1,114 +1,114 @@
-import request from '@/utils/request'
-
-// 查询订单列表
-export function listStoreOrder(query) {
-  return request({
-    url: '/store/storeOrder/list',
-    method: 'get',
-    params: query
-  })
-}
-export function getCustomerOrderList(query) {
-  return request({
-    url: '/store/storeOrder/getCustomerOrderList',
-    method: 'get',
-    params: query
-  })
-}
-
-
-export function myListStoreOrder(query) {
-  return request({
-    url: '/store/storeOrder/myList',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询订单详细
-export function getStoreOrder(id) {
-  return request({
-    url: '/store/storeOrder/' + id,
-    method: 'get'
-  })
-}
-export function getExpress(id) {
-  return request({
-    url: '/store/storeOrder/getExpress/' + id,
-    method: 'get'
-  })
-}
-
-
-// 新增订单
-export function addStoreOrder(data) {
-  return request({
-    url: '/store/storeOrder',
-    method: 'post',
-    data: data
-  })
-}
-
-
-
-
-// 修改订单
-export function updateStoreOrder(data) {
-  return request({
-    url: '/store/storeOrder',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除订单
-export function delStoreOrder(id) {
-  return request({
-    url: '/store/storeOrder/' + id,
-    method: 'delete'
-  })
-}
-
-// 导出订单
-export function exportStoreOrder(query) {
-  return request({
-    url: '/store/storeOrder/export',
-    method: 'get',
-    params: query
-  })
-}
-
-export function exportStoreOrderItems(query) {
-  return request({
-    url: '/store/storeOrder/exportItems',
-    method: 'get',
-    params: query
-  })
-}
-
-
-export function createUserOrder(data) {
-  return request({
-    url: '/store/storeOrder/createUserOrder',
-    method: 'post',
-    data: data
-  })
-}
-
-export function editPayPrice(data) {
-  return request({
-    url: '/store/storeOrder/editPayPrice',
-    method: 'post',
-    data: data
-  })
-}
-
-
-export function bindCustomer(data) {
-  return request({
-    url: '/store/storeOrder/bindCustomer',
-    method: 'post',
-    data: data
-  })
-}
-
+import request from '@/utils/request'
+
+// 查询订单列表
+export function listStoreOrder(query) {
+  return request({
+    url: '/store/storeOrder/list',
+    method: 'get',
+    params: query
+  })
+}
+export function getCustomerOrderList(query) {
+  return request({
+    url: '/store/storeOrder/getCustomerOrderList',
+    method: 'get',
+    params: query
+  })
+}
+
+
+export function myListStoreOrder(query) {
+  return request({
+    url: '/store/storeOrder/myList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询订单详细
+export function getStoreOrder(id) {
+  return request({
+    url: '/store/storeOrder/' + id,
+    method: 'get'
+  })
+}
+export function getExpress(id) {
+  return request({
+    url: '/store/storeOrder/getExpress/' + id,
+    method: 'get'
+  })
+}
+
+
+// 新增订单
+export function addStoreOrder(data) {
+  return request({
+    url: '/store/storeOrder',
+    method: 'post',
+    data: data
+  })
+}
+
+
+
+
+// 修改订单
+export function updateStoreOrder(data) {
+  return request({
+    url: '/store/storeOrder',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除订单
+export function delStoreOrder(id) {
+  return request({
+    url: '/store/storeOrder/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出订单
+export function exportStoreOrder(query) {
+  return request({
+    url: '/store/storeOrder/export',
+    method: 'get',
+    params: query
+  })
+}
+
+export function exportStoreOrderItems(query) {
+  return request({
+    url: '/store/storeOrder/exportItems',
+    method: 'get',
+    params: query
+  })
+}
+
+
+export function createUserOrder(data) {
+  return request({
+    url: '/store/storeOrder/createUserOrder',
+    method: 'post',
+    data: data
+  })
+}
+
+export function editPayPrice(data) {
+  return request({
+    url: '/store/storeOrder/editPayPrice',
+    method: 'post',
+    data: data
+  })
+}
+
+
+export function bindCustomer(data) {
+  return request({
+    url: '/store/storeOrder/bindCustomer',
+    method: 'post',
+    data: data
+  })
+}
+

+ 70 - 70
src/api/store/storePayment.js

@@ -1,71 +1,71 @@
-import request from '@/utils/request'
-
-// 查询支付明细列表
-export function listStorePayment(query) {
-  return request({
-    url: '/store/storePayment/list',
-    method: 'get',
-    params: query
-  })
-}
-export function getStorePaymentList(query) {
-  return request({
-    url: '/store/storePayment/getStorePaymentList',
-    method: 'get',
-    params: query
-  })
-}
-export function getMyPaymentList(query) {
-  return request({
-    url: '/store/storePayment/getMyPaymentList',
-    method: 'get',
-    params: query
-  })
-}
-
-
-
-
-
-// 查询支付明细详细
-export function getStorePayment(paymentId) {
-  return request({
-    url: '/store/storePayment/' + paymentId,
-    method: 'get'
-  })
-}
-
-// 新增支付明细
-export function addStorePayment(data) {
-  return request({
-    url: '/store/storePayment',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改支付明细
-export function updateStorePayment(data) {
-  return request({
-    url: '/store/storePayment',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除支付明细
-export function delStorePayment(paymentId) {
-  return request({
-    url: '/store/storePayment/' + paymentId,
-    method: 'delete'
-  })
-}
-
-// 导出支付明细
-export function exportStorePayment(query) {
-  return request({
-    url: '/store/storePayment/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询支付明细列表
+export function listStorePayment(query) {
+  return request({
+    url: '/store/storePayment/list',
+    method: 'get',
+    params: query
+  })
+}
+export function getStorePaymentList(query) {
+  return request({
+    url: '/store/storePayment/getStorePaymentList',
+    method: 'get',
+    params: query
+  })
+}
+export function getMyPaymentList(query) {
+  return request({
+    url: '/store/storePayment/getMyPaymentList',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
+
+
+// 查询支付明细详细
+export function getStorePayment(paymentId) {
+  return request({
+    url: '/store/storePayment/' + paymentId,
+    method: 'get'
+  })
+}
+
+// 新增支付明细
+export function addStorePayment(data) {
+  return request({
+    url: '/store/storePayment',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改支付明细
+export function updateStorePayment(data) {
+  return request({
+    url: '/store/storePayment',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除支付明细
+export function delStorePayment(paymentId) {
+  return request({
+    url: '/store/storePayment/' + paymentId,
+    method: 'delete'
+  })
+}
+
+// 导出支付明细
+export function exportStorePayment(query) {
+  return request({
+    url: '/store/storePayment/export',
+    method: 'get',
+    params: query
+  })
 }

+ 23 - 23
src/api/store/storeProduct.js

@@ -1,24 +1,24 @@
-import request from '@/utils/request'
-
-// 查询商品列表
-export function listStoreProduct(query) {
-  return request({
-    url: '/store/storeProduct/list',
-    method: 'get',
-    params: query
-  })
-}
-export function getStoreProductAttrValueList(query) {
-  return request({
-    url: '/store/storeProduct/getStoreProductAttrValueList',
-    method: 'get',
-    params: query
-  })
-}
-export function getStoreProduct(productId) {
-  return request({
-    url: '/store/storeProduct/' + productId,
-    method: 'get'
-  })
-}
+import request from '@/utils/request'
+
+// 查询商品列表
+export function listStoreProduct(query) {
+  return request({
+    url: '/store/storeProduct/list',
+    method: 'get',
+    params: query
+  })
+}
+export function getStoreProductAttrValueList(query) {
+  return request({
+    url: '/store/storeProduct/getStoreProductAttrValueList',
+    method: 'get',
+    params: query
+  })
+}
+export function getStoreProduct(productId) {
+  return request({
+    url: '/store/storeProduct/' + productId,
+    method: 'get'
+  })
+}
  

+ 8 - 8
src/api/store/storeProductCategory.js

@@ -1,8 +1,8 @@
-import request from '@/utils/request'
- 
-export function getAllStoreProductCategory() {
-  return request({
-    url: '/store/storeProductCategory/getAllList' ,
-    method: 'get'
-  })
-}
+import request from '@/utils/request'
+ 
+export function getAllStoreProductCategory() {
+  return request({
+    url: '/store/storeProductCategory/getAllList' ,
+    method: 'get'
+  })
+}

+ 52 - 52
src/api/store/storeProductPackage.js

@@ -1,53 +1,53 @@
-import request from '@/utils/request'
-
-// 查询商品组合套餐列表
-export function listStoreProductPackage(query) {
-  return request({
-    url: '/store/storeProductPackage/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询商品组合套餐详细
-export function getStoreProductPackage(packageId) {
-  return request({
-    url: '/store/storeProductPackage/' + packageId,
-    method: 'get'
-  })
-}
-
-// 新增商品组合套餐
-export function addStoreProductPackage(data) {
-  return request({
-    url: '/store/storeProductPackage',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改商品组合套餐
-export function updateStoreProductPackage(data) {
-  return request({
-    url: '/store/storeProductPackage',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除商品组合套餐
-export function delStoreProductPackage(packageId) {
-  return request({
-    url: '/store/storeProductPackage/' + packageId,
-    method: 'delete'
-  })
-}
-
-// 导出商品组合套餐
-export function exportStoreProductPackage(query) {
-  return request({
-    url: '/store/storeProductPackage/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询商品组合套餐列表
+export function listStoreProductPackage(query) {
+  return request({
+    url: '/store/storeProductPackage/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商品组合套餐详细
+export function getStoreProductPackage(packageId) {
+  return request({
+    url: '/store/storeProductPackage/' + packageId,
+    method: 'get'
+  })
+}
+
+// 新增商品组合套餐
+export function addStoreProductPackage(data) {
+  return request({
+    url: '/store/storeProductPackage',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商品组合套餐
+export function updateStoreProductPackage(data) {
+  return request({
+    url: '/store/storeProductPackage',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商品组合套餐
+export function delStoreProductPackage(packageId) {
+  return request({
+    url: '/store/storeProductPackage/' + packageId,
+    method: 'delete'
+  })
+}
+
+// 导出商品组合套餐
+export function exportStoreProductPackage(query) {
+  return request({
+    url: '/store/storeProductPackage/export',
+    method: 'get',
+    params: query
+  })
 }

+ 60 - 60
src/api/system/dict/data.js

@@ -1,61 +1,61 @@
-import request from '@/utils/request'
-
-// 查询字典数据列表
-export function listData(query) {
-  return request({
-    url: '/system/dict/data/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询字典数据详细
-export function getData(dictCode) {
-  return request({
-    url: '/system/dict/data/' + dictCode,
-    method: 'get'
-  })
-}
-
-// 根据字典类型查询字典数据信息
-export function getDicts(dictType) {
-  return request({
-    url: '/system/dict/data/type/' + dictType,
-    method: 'get'
-  })
-}
-
-// 新增字典数据
-export function addData(data) {
-  return request({
-    url: '/system/dict/data',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改字典数据
-export function updateData(data) {
-  return request({
-    url: '/system/dict/data',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除字典数据
-export function delData(dictCode) {
-  return request({
-    url: '/system/dict/data/' + dictCode,
-    method: 'delete'
-  })
-}
-
-// 导出字典数据
-export function exportData(query) {
-  return request({
-    url: '/system/dict/data/export',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询字典数据列表
+export function listData(query) {
+  return request({
+    url: '/system/dict/data/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询字典数据详细
+export function getData(dictCode) {
+  return request({
+    url: '/system/dict/data/' + dictCode,
+    method: 'get'
+  })
+}
+
+// 根据字典类型查询字典数据信息
+export function getDicts(dictType) {
+  return request({
+    url: '/system/dict/data/type/' + dictType,
+    method: 'get'
+  })
+}
+
+// 新增字典数据
+export function addData(data) {
+  return request({
+    url: '/system/dict/data',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改字典数据
+export function updateData(data) {
+  return request({
+    url: '/system/dict/data',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除字典数据
+export function delData(dictCode) {
+  return request({
+    url: '/system/dict/data/' + dictCode,
+    method: 'delete'
+  })
+}
+
+// 导出字典数据
+export function exportData(query) {
+  return request({
+    url: '/system/dict/data/export',
+    method: 'get',
+    params: query
+  })
 }

+ 68 - 68
src/api/system/dict/type.js

@@ -1,69 +1,69 @@
-import request from '@/utils/request'
-
-// 查询字典类型列表
-export function listType(query) {
-  return request({
-    url: '/system/dict/type/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询字典类型详细
-export function getType(dictId) {
-  return request({
-    url: '/system/dict/type/' + dictId,
-    method: 'get'
-  })
-}
-
-// 新增字典类型
-export function addType(data) {
-  return request({
-    url: '/system/dict/type',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改字典类型
-export function updateType(data) {
-  return request({
-    url: '/system/dict/type',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除字典类型
-export function delType(dictId) {
-  return request({
-    url: '/system/dict/type/' + dictId,
-    method: 'delete'
-  })
-}
-
-// 清理参数缓存
-export function clearCache() {
-  return request({
-    url: '/system/dict/type/clearCache',
-    method: 'delete'
-  })
-}
-
-// 导出字典类型
-export function exportType(query) {
-  return request({
-    url: '/system/dict/type/export',
-    method: 'get',
-    params: query
-  })
-}
-
-// 获取字典选择框列表
-export function optionselect() {
-  return request({
-    url: '/system/dict/type/optionselect',
-    method: 'get'
-  })
+import request from '@/utils/request'
+
+// 查询字典类型列表
+export function listType(query) {
+  return request({
+    url: '/system/dict/type/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询字典类型详细
+export function getType(dictId) {
+  return request({
+    url: '/system/dict/type/' + dictId,
+    method: 'get'
+  })
+}
+
+// 新增字典类型
+export function addType(data) {
+  return request({
+    url: '/system/dict/type',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改字典类型
+export function updateType(data) {
+  return request({
+    url: '/system/dict/type',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除字典类型
+export function delType(dictId) {
+  return request({
+    url: '/system/dict/type/' + dictId,
+    method: 'delete'
+  })
+}
+
+// 清理参数缓存
+export function clearCache() {
+  return request({
+    url: '/system/dict/type/clearCache',
+    method: 'delete'
+  })
+}
+
+// 导出字典类型
+export function exportType(query) {
+  return request({
+    url: '/system/dict/type/export',
+    method: 'get',
+    params: query
+  })
+}
+
+// 获取字典选择框列表
+export function optionselect() {
+  return request({
+    url: '/system/dict/type/optionselect',
+    method: 'get'
+  })
 }

+ 48 - 48
src/api/users/user.js

@@ -1,49 +1,49 @@
-import request from '@/utils/request'
-
-export function list(query) {
-  return request({
-    url: '/users/user/list',
-    method: 'get',
-    params: query
-  })
-}
-export function myList(query) {
-  return request({
-    url: '/users/user/myList',
-    method: 'get',
-    params: query
-  })
-}
-export function getUser(userId) {
-  return request({
-    url: '/users/user/' + userId,
-    method: 'get'
-  })
-}
-
-export function getUserList(query) {
-  return request({
-    url: '/users/user/getUserList',
-    method: 'get',
-    params: query
-  })
-}
-
-// 新增用户
-export function addUser(data) {
-  return request({
-    url: '/users/user',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改用户
-export function updateUser(data) {
-  return request({
-    url: '/users/user',
-    method: 'put',
-    data: data
-  })
-}
+import request from '@/utils/request'
+
+export function list(query) {
+  return request({
+    url: '/users/user/list',
+    method: 'get',
+    params: query
+  })
+}
+export function myList(query) {
+  return request({
+    url: '/users/user/myList',
+    method: 'get',
+    params: query
+  })
+}
+export function getUser(userId) {
+  return request({
+    url: '/users/user/' + userId,
+    method: 'get'
+  })
+}
+
+export function getUserList(query) {
+  return request({
+    url: '/users/user/getUserList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 新增用户
+export function addUser(data) {
+  return request({
+    url: '/users/user',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改用户
+export function updateUser(data) {
+  return request({
+    url: '/users/user',
+    method: 'put',
+    data: data
+  })
+}
  

+ 60 - 60
src/api/users/userAddress.js

@@ -1,61 +1,61 @@
-import request from '@/utils/request'
-
-// 查询用户地址列表
-export function listUserAddress(query) {
-  return request({
-    url: '/store/userAddress/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询用户地址详细
-export function getUserAddress(id) {
-  return request({
-    url: '/store/userAddress/' + id,
-    method: 'get'
-  })
-}
-
-// 新增用户地址
-export function addUserAddress(data) {
-  return request({
-    url: '/store/userAddress',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改用户地址
-export function updateUserAddress(data) {
-  return request({
-    url: '/store/userAddress',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除用户地址
-export function delUserAddress(id) {
-  return request({
-    url: '/store/userAddress/' + id,
-    method: 'delete'
-  })
-}
-
-// 导出用户地址
-export function exportUserAddress(query) {
-  return request({
-    url: '/store/userAddress/export',
-    method: 'get',
-    params: query
-  })
-}
-
-export function getAddressList(query) {
-  return request({
-    url: '/store/userAddress/getAddressList',
-    method: 'get',
-    params: query
-  })
+import request from '@/utils/request'
+
+// 查询用户地址列表
+export function listUserAddress(query) {
+  return request({
+    url: '/store/userAddress/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询用户地址详细
+export function getUserAddress(id) {
+  return request({
+    url: '/store/userAddress/' + id,
+    method: 'get'
+  })
+}
+
+// 新增用户地址
+export function addUserAddress(data) {
+  return request({
+    url: '/store/userAddress',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改用户地址
+export function updateUserAddress(data) {
+  return request({
+    url: '/store/userAddress',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除用户地址
+export function delUserAddress(id) {
+  return request({
+    url: '/store/userAddress/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出用户地址
+export function exportUserAddress(query) {
+  return request({
+    url: '/store/userAddress/export',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getAddressList(query) {
+  return request({
+    url: '/store/userAddress/getAddressList',
+    method: 'get',
+    params: query
+  })
 }

+ 9 - 9
src/assets/icons/index.js

@@ -1,9 +1,9 @@
-import Vue from 'vue'
-import SvgIcon from '@/components/SvgIcon'// svg component
-
-// register globally
-Vue.component('svg-icon', SvgIcon)
-
-const req = require.context('./svg', false, /\.svg$/)
-const requireAll = requireContext => requireContext.keys().map(requireContext)
-requireAll(req)
+import Vue from 'vue'
+import SvgIcon from '@/components/SvgIcon'// svg component
+
+// register globally
+Vue.component('svg-icon', SvgIcon)
+
+const req = require.context('./svg', false, /\.svg$/)
+const requireAll = requireContext => requireContext.keys().map(requireContext)
+requireAll(req)

+ 1 - 1
src/assets/icons/svg/monitor.svg

@@ -1,2 +1,2 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1543827393750" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4695" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: rbicon; src: url("chrome-extension://dipiagiiohfljcicegpgffpbnjmgjcnf/fonts/rbicon.woff2") format("woff2"); font-weight: normal; font-style: normal; }
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1543827393750" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4695" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: rbicon; src: url("chrome-extension://dipiagiiohfljcicegpgffpbnjmgjcnf/fonts/rbicon.woff2") format("woff2"); font-weight: normal; font-style: normal; }
 </style></defs><path d="M64 64V640H896V64H64zM0 0h960v704H0V0z" p-id="4696"></path><path d="M192 896H768v64H192zM448 640H512v256h-64z" p-id="4697"></path><path d="M479.232 561.604267l309.9904-348.330667-47.803733-42.5472-259.566934 291.669333L303.957333 240.008533 163.208533 438.6048l52.224 37.009067 91.6224-129.28z" p-id="4698"></path></svg>

Plik diff jest za duży
+ 1 - 1
src/assets/icons/svg/system.svg


+ 22 - 22
src/assets/icons/svgo.yml

@@ -1,22 +1,22 @@
-# replace default config
-
-# multipass: true
-# full: true
-
-plugins:
-
-  # - name
-  #
-  # or:
-  # - name: false
-  # - name: true
-  #
-  # or:
-  # - name:
-  #     param1: 1
-  #     param2: 2
-
-- removeAttrs:
-    attrs:
-      - 'fill'
-      - 'fill-rule'
+# replace default config
+
+# multipass: true
+# full: true
+
+plugins:
+
+  # - name
+  #
+  # or:
+  # - name: false
+  # - name: true
+  #
+  # or:
+  # - name:
+  #     param1: 1
+  #     param2: 2
+
+- removeAttrs:
+    attrs:
+      - 'fill'
+      - 'fill-rule'

+ 99 - 99
src/assets/styles/btn.scss

@@ -1,99 +1,99 @@
-@import './variables.scss';
-
-@mixin colorBtn($color) {
-  background: $color;
-
-  &:hover {
-    color: $color;
-
-    &:before,
-    &:after {
-      background: $color;
-    }
-  }
-}
-
-.blue-btn {
-  @include colorBtn($blue)
-}
-
-.light-blue-btn {
-  @include colorBtn($light-blue)
-}
-
-.red-btn {
-  @include colorBtn($red)
-}
-
-.pink-btn {
-  @include colorBtn($pink)
-}
-
-.green-btn {
-  @include colorBtn($green)
-}
-
-.tiffany-btn {
-  @include colorBtn($tiffany)
-}
-
-.yellow-btn {
-  @include colorBtn($yellow)
-}
-
-.pan-btn {
-  font-size: 14px;
-  color: #fff;
-  padding: 14px 36px;
-  border-radius: 8px;
-  border: none;
-  outline: none;
-  transition: 600ms ease all;
-  position: relative;
-  display: inline-block;
-
-  &:hover {
-    background: #fff;
-
-    &:before,
-    &:after {
-      width: 100%;
-      transition: 600ms ease all;
-    }
-  }
-
-  &:before,
-  &:after {
-    content: '';
-    position: absolute;
-    top: 0;
-    right: 0;
-    height: 2px;
-    width: 0;
-    transition: 400ms ease all;
-  }
-
-  &::after {
-    right: inherit;
-    top: inherit;
-    left: 0;
-    bottom: 0;
-  }
-}
-
-.custom-button {
-  display: inline-block;
-  line-height: 1;
-  white-space: nowrap;
-  cursor: pointer;
-  background: #fff;
-  color: #fff;
-  -webkit-appearance: none;
-  text-align: center;
-  box-sizing: border-box;
-  outline: 0;
-  margin: 0;
-  padding: 10px 15px;
-  font-size: 14px;
-  border-radius: 4px;
-}
+@import './variables.scss';
+
+@mixin colorBtn($color) {
+  background: $color;
+
+  &:hover {
+    color: $color;
+
+    &:before,
+    &:after {
+      background: $color;
+    }
+  }
+}
+
+.blue-btn {
+  @include colorBtn($blue)
+}
+
+.light-blue-btn {
+  @include colorBtn($light-blue)
+}
+
+.red-btn {
+  @include colorBtn($red)
+}
+
+.pink-btn {
+  @include colorBtn($pink)
+}
+
+.green-btn {
+  @include colorBtn($green)
+}
+
+.tiffany-btn {
+  @include colorBtn($tiffany)
+}
+
+.yellow-btn {
+  @include colorBtn($yellow)
+}
+
+.pan-btn {
+  font-size: 14px;
+  color: #fff;
+  padding: 14px 36px;
+  border-radius: 8px;
+  border: none;
+  outline: none;
+  transition: 600ms ease all;
+  position: relative;
+  display: inline-block;
+
+  &:hover {
+    background: #fff;
+
+    &:before,
+    &:after {
+      width: 100%;
+      transition: 600ms ease all;
+    }
+  }
+
+  &:before,
+  &:after {
+    content: '';
+    position: absolute;
+    top: 0;
+    right: 0;
+    height: 2px;
+    width: 0;
+    transition: 400ms ease all;
+  }
+
+  &::after {
+    right: inherit;
+    top: inherit;
+    left: 0;
+    bottom: 0;
+  }
+}
+
+.custom-button {
+  display: inline-block;
+  line-height: 1;
+  white-space: nowrap;
+  cursor: pointer;
+  background: #fff;
+  color: #fff;
+  -webkit-appearance: none;
+  text-align: center;
+  box-sizing: border-box;
+  outline: 0;
+  margin: 0;
+  padding: 10px 15px;
+  font-size: 14px;
+  border-radius: 4px;
+}

+ 275 - 275
src/assets/styles/common.scss

@@ -1,276 +1,276 @@
- /**
- * 通用css样式布局处理
- * Copyright (c) 2019 fs
- */
-
- /** 基础通用 **/
-.pt5 {
-	padding-top: 5px;
-}
-.pr5 {
-	padding-right: 5px;
-}
-.pb5 {
-	padding-bottom: 5px;
-}
-.mt5 {
-	margin-top: 5px;
-}
-.mr5 {
-	margin-right: 5px;
-}
-.mb5 {
-	margin-bottom: 5px;
-}
-.mb8 {
-	margin-bottom: 8px;
-}
-.ml5 {
-	margin-left: 5px;
-}
-.mt10 {
-	margin-top: 10px;
-}
-.mr10 {
-	margin-right: 10px;
-}
-.mb10 {
-	margin-bottom: 10px;
-}
-.ml0 {
-	margin-left: 10px;
-}
-.mt20 {
-	margin-top: 20px;
-}
-.mr20 {
-	margin-right: 20px;
-}
-.mb20 {
-	margin-bottom: 20px;
-}
-.m20 {
-	margin-left: 20px;
-}
-
-.el-dialog:not(.is-fullscreen){
-	margin-top: 6vh !important;
-}
-
-.el-table {
-	.el-table__header-wrapper, .el-table__fixed-header-wrapper {
-		th {
-			word-break: break-word;
-			background-color: #f8f8f9;
-			color: #515a6e;
-			height: 40px;
-			font-size: 13px;
-		}
-	}
-	.el-table__body-wrapper {
-		.el-button [class*="el-icon-"] + span {
-			margin-left: 1px;
-		}
-	}
-}
-
-/** 表单布局 **/
-.form-header {
-    font-size:15px;
-	color:#6379bb;
-	border-bottom:1px solid #ddd;
-	margin:8px 10px 25px 10px;
-	padding-bottom:5px
-}
-
-/** 表格布局 **/
-.pagination-container {
-	position: relative;
-	height: 25px;
-	margin-bottom: 10px;
-	margin-top: 15px;
-	padding: 10px 20px !important;
-}
-
-/* tree border */
-.tree-border {
-    margin-top: 5px;
-    border: 1px solid #e5e6e7;
-    background: #FFFFFF none;
-    border-radius:4px;
-}
-
-.pagination-container .el-pagination {
-	right: 0;
-	position: absolute;
-}
-
-.el-table .fixed-width .el-button--mini {
-	color: #409EFF;
-	padding-left: 0;
-	padding-right: 0;
-	width: inherit;
-}
-
-.el-tree-node__content > .el-checkbox {
-	margin-right: 8px;
-}
-
-.list-group-striped > .list-group-item {
-	border-left: 0;
-	border-right: 0;
-	border-radius: 0;
-	padding-left: 0;
-	padding-right: 0;
-}
-
-.list-group {
-	padding-left: 0px;
-	list-style: none;
-}
-
-.list-group-item {
-	border-bottom: 1px solid #e7eaec;
-	border-top: 1px solid #e7eaec;
-	margin-bottom: -1px;
-	padding: 11px 0px;
-	font-size: 13px;
-}
-
-.pull-right {
-	float: right !important;
-}
-
-.el-card__header {
-	padding: 14px 15px 7px;
-	min-height: 40px;
-}
-
-.el-card__body {
-	padding: 15px 20px 20px 20px;
-}
-
-.card-box {
-	padding-right: 15px;
-	padding-left: 15px;
-	margin-bottom: 10px;
-}
-
-/* button color */
-.el-button--cyan.is-active,
-.el-button--cyan:active {
-//   background: #20B2AA;
-//   border-color: #20B2AA;
-//   color: #FFFFFF;
-}
-
-.el-button--cyan:focus,
-.el-button--cyan:hover {
-//   background: #48D1CC;
-//   border-color: #48D1CC;
-//   color: #FFFFFF;
-}
-
-.el-button--cyan {
-//   background-color: #20B2AA;
-//   border-color: #20B2AA;
-//   color: #FFFFFF;
-}
-
-/* text color */
-.text-navy {
-	// color: #1ab394;
-}
-
-.text-primary {
-	color: inherit;
-}
-
-.text-success {
-	color: #1c84c6;
-}
-
-.text-info {
-	color: #23c6c8;
-}
-
-.text-warning {
-	color: #f8ac59;
-}
-
-.text-danger {
-	color: #ed5565;
-}
-
-.text-muted {
-	color: #888888;
-}
-
-/* image */
-.img-circle {
-	border-radius: 50%;
-}
-
-.img-lg {
-	width: 120px;
-	height: 120px;
-}
-
-.avatar-upload-preview {
-	position: absolute;
-	top: 50%;
-	transform: translate(50%, -50%);
-	width: 180px;
-	height: 180px;
-	border-radius: 50%;
-	box-shadow: 0 0 4px #ccc;
-	overflow: hidden;
-}
-
-/* 拖拽列样式 */
-.sortable-ghost{
-	opacity: .8;
-	color: #fff!important;
-	background: #42b983!important;
-}
-
-.top-right-btn {
-	position: relative;
-	float: right;
-}
-
-/* submenu item */
-.el-menu--horizontal > .el-submenu .el-submenu__title {
-	height: 50px !important;
-	line-height: 50px !important;
-}
-.el-drawer{
-    overflow: scroll
-}
-.avatar-uploader .el-upload {
-    border: 1px dashed #d9d9d9;
-    border-radius: 6px;
-    cursor: pointer;
-    position: relative;
-    overflow: hidden;
-  }
-  .avatar-uploader .el-upload:hover {
-    border-color: #409EFF;
-  }
-  .avatar-uploader-icon {
-    font-size: 28px;
-    color: #8c939d;
-    width: 110px;
-    height: 110px;
-    line-height: 110px;
-    text-align: center;
-  }
- .avatar {
-    width: 110px;
-    height: 110px;
-    display: block;
-  }
-  .el-tabs__item:focus.is-active.is-focus:not(:active){
-	  box-shadow: 0 0 2px 2px #fff inset;
-	  border-radius: 3px;
+ /**
+ * 通用css样式布局处理
+ * Copyright (c) 2019 fs
+ */
+
+ /** 基础通用 **/
+.pt5 {
+	padding-top: 5px;
+}
+.pr5 {
+	padding-right: 5px;
+}
+.pb5 {
+	padding-bottom: 5px;
+}
+.mt5 {
+	margin-top: 5px;
+}
+.mr5 {
+	margin-right: 5px;
+}
+.mb5 {
+	margin-bottom: 5px;
+}
+.mb8 {
+	margin-bottom: 8px;
+}
+.ml5 {
+	margin-left: 5px;
+}
+.mt10 {
+	margin-top: 10px;
+}
+.mr10 {
+	margin-right: 10px;
+}
+.mb10 {
+	margin-bottom: 10px;
+}
+.ml0 {
+	margin-left: 10px;
+}
+.mt20 {
+	margin-top: 20px;
+}
+.mr20 {
+	margin-right: 20px;
+}
+.mb20 {
+	margin-bottom: 20px;
+}
+.m20 {
+	margin-left: 20px;
+}
+
+.el-dialog:not(.is-fullscreen){
+	margin-top: 6vh !important;
+}
+
+.el-table {
+	.el-table__header-wrapper, .el-table__fixed-header-wrapper {
+		th {
+			word-break: break-word;
+			background-color: #f8f8f9;
+			color: #515a6e;
+			height: 40px;
+			font-size: 13px;
+		}
+	}
+	.el-table__body-wrapper {
+		.el-button [class*="el-icon-"] + span {
+			margin-left: 1px;
+		}
+	}
+}
+
+/** 表单布局 **/
+.form-header {
+    font-size:15px;
+	color:#6379bb;
+	border-bottom:1px solid #ddd;
+	margin:8px 10px 25px 10px;
+	padding-bottom:5px
+}
+
+/** 表格布局 **/
+.pagination-container {
+	position: relative;
+	height: 25px;
+	margin-bottom: 10px;
+	margin-top: 15px;
+	padding: 10px 20px !important;
+}
+
+/* tree border */
+.tree-border {
+    margin-top: 5px;
+    border: 1px solid #e5e6e7;
+    background: #FFFFFF none;
+    border-radius:4px;
+}
+
+.pagination-container .el-pagination {
+	right: 0;
+	position: absolute;
+}
+
+.el-table .fixed-width .el-button--mini {
+	color: #409EFF;
+	padding-left: 0;
+	padding-right: 0;
+	width: inherit;
+}
+
+.el-tree-node__content > .el-checkbox {
+	margin-right: 8px;
+}
+
+.list-group-striped > .list-group-item {
+	border-left: 0;
+	border-right: 0;
+	border-radius: 0;
+	padding-left: 0;
+	padding-right: 0;
+}
+
+.list-group {
+	padding-left: 0px;
+	list-style: none;
+}
+
+.list-group-item {
+	border-bottom: 1px solid #e7eaec;
+	border-top: 1px solid #e7eaec;
+	margin-bottom: -1px;
+	padding: 11px 0px;
+	font-size: 13px;
+}
+
+.pull-right {
+	float: right !important;
+}
+
+.el-card__header {
+	padding: 14px 15px 7px;
+	min-height: 40px;
+}
+
+.el-card__body {
+	padding: 15px 20px 20px 20px;
+}
+
+.card-box {
+	padding-right: 15px;
+	padding-left: 15px;
+	margin-bottom: 10px;
+}
+
+/* button color */
+.el-button--cyan.is-active,
+.el-button--cyan:active {
+//   background: #20B2AA;
+//   border-color: #20B2AA;
+//   color: #FFFFFF;
+}
+
+.el-button--cyan:focus,
+.el-button--cyan:hover {
+//   background: #48D1CC;
+//   border-color: #48D1CC;
+//   color: #FFFFFF;
+}
+
+.el-button--cyan {
+//   background-color: #20B2AA;
+//   border-color: #20B2AA;
+//   color: #FFFFFF;
+}
+
+/* text color */
+.text-navy {
+	// color: #1ab394;
+}
+
+.text-primary {
+	color: inherit;
+}
+
+.text-success {
+	color: #1c84c6;
+}
+
+.text-info {
+	color: #23c6c8;
+}
+
+.text-warning {
+	color: #f8ac59;
+}
+
+.text-danger {
+	color: #ed5565;
+}
+
+.text-muted {
+	color: #888888;
+}
+
+/* image */
+.img-circle {
+	border-radius: 50%;
+}
+
+.img-lg {
+	width: 120px;
+	height: 120px;
+}
+
+.avatar-upload-preview {
+	position: absolute;
+	top: 50%;
+	transform: translate(50%, -50%);
+	width: 180px;
+	height: 180px;
+	border-radius: 50%;
+	box-shadow: 0 0 4px #ccc;
+	overflow: hidden;
+}
+
+/* 拖拽列样式 */
+.sortable-ghost{
+	opacity: .8;
+	color: #fff!important;
+	background: #42b983!important;
+}
+
+.top-right-btn {
+	position: relative;
+	float: right;
+}
+
+/* submenu item */
+.el-menu--horizontal > .el-submenu .el-submenu__title {
+	height: 50px !important;
+	line-height: 50px !important;
+}
+.el-drawer{
+    overflow: scroll
+}
+.avatar-uploader .el-upload {
+    border: 1px dashed #d9d9d9;
+    border-radius: 6px;
+    cursor: pointer;
+    position: relative;
+    overflow: hidden;
+  }
+  .avatar-uploader .el-upload:hover {
+    border-color: #409EFF;
+  }
+  .avatar-uploader-icon {
+    font-size: 28px;
+    color: #8c939d;
+    width: 110px;
+    height: 110px;
+    line-height: 110px;
+    text-align: center;
+  }
+ .avatar {
+    width: 110px;
+    height: 110px;
+    display: block;
+  }
+  .el-tabs__item:focus.is-active.is-focus:not(:active){
+	  box-shadow: 0 0 2px 2px #fff inset;
+	  border-radius: 3px;
   }

+ 84 - 84
src/assets/styles/element-ui.scss

@@ -1,84 +1,84 @@
-// cover some element-ui styles
-
-.el-breadcrumb__inner,
-.el-breadcrumb__inner a {
-  font-weight: 400 !important;
-}
-
-.el-upload {
-  input[type="file"] {
-    display: none !important;
-  }
-}
-
-.el-upload__input {
-  display: none;
-}
-
-.cell {
-  .el-tag {
-    margin-right: 0px;
-  }
-}
-
-.small-padding {
-  .cell {
-    padding-left: 5px;
-    padding-right: 5px;
-  }
-}
-
-.fixed-width {
-  .el-button--mini {
-    padding: 7px 10px;
-    width: 60px;
-  }
-}
-
-.status-col {
-  .cell {
-    padding: 0 10px;
-    text-align: center;
-
-    .el-tag {
-      margin-right: 0px;
-    }
-  }
-}
-
-// to fixed https://github.com/ElemeFE/element/issues/2461
-.el-dialog {
-  transform: none;
-  left: 0;
-  position: relative;
-  margin: 0 auto;
-}
-
-// refine element ui upload
-.upload-container {
-  .el-upload {
-    width: 100%;
-
-    .el-upload-dragger {
-      width: 100%;
-      height: 200px;
-    }
-  }
-}
-
-// dropdown
-.el-dropdown-menu {
-  a {
-    display: block
-  }
-}
-
-// fix date-picker ui bug in filter-item
-.el-range-editor.el-input__inner {
-  display: inline-flex !important;
-}
-
-// to fix el-date-picker css style
-.el-range-separator {
-  box-sizing: content-box;
-}
+// cover some element-ui styles
+
+.el-breadcrumb__inner,
+.el-breadcrumb__inner a {
+  font-weight: 400 !important;
+}
+
+.el-upload {
+  input[type="file"] {
+    display: none !important;
+  }
+}
+
+.el-upload__input {
+  display: none;
+}
+
+.cell {
+  .el-tag {
+    margin-right: 0px;
+  }
+}
+
+.small-padding {
+  .cell {
+    padding-left: 5px;
+    padding-right: 5px;
+  }
+}
+
+.fixed-width {
+  .el-button--mini {
+    padding: 7px 10px;
+    width: 60px;
+  }
+}
+
+.status-col {
+  .cell {
+    padding: 0 10px;
+    text-align: center;
+
+    .el-tag {
+      margin-right: 0px;
+    }
+  }
+}
+
+// to fixed https://github.com/ElemeFE/element/issues/2461
+.el-dialog {
+  transform: none;
+  left: 0;
+  position: relative;
+  margin: 0 auto;
+}
+
+// refine element ui upload
+.upload-container {
+  .el-upload {
+    width: 100%;
+
+    .el-upload-dragger {
+      width: 100%;
+      height: 200px;
+    }
+  }
+}
+
+// dropdown
+.el-dropdown-menu {
+  a {
+    display: block
+  }
+}
+
+// fix date-picker ui bug in filter-item
+.el-range-editor.el-input__inner {
+  display: inline-flex !important;
+}
+
+// to fix el-date-picker css style
+.el-range-separator {
+  box-sizing: content-box;
+}

+ 31 - 31
src/assets/styles/element-variables.scss

@@ -1,31 +1,31 @@
-/**
-* I think element-ui's default theme color is too light for long-term use.
-* So I modified the default color and you can modify it to your liking.
-**/
-
-/* theme color */
-$--color-primary: #13c2c2;
-$--color-success: #13ce66;
-$--color-warning: #ffba00;
-$--color-danger: #ff4949;
-// $--color-info: #1E1E1E;
-
-$--button-font-weight: 400;
-
-// $--color-text-regular: #1f2d3d;
-
-$--border-color-light: #dfe4ed;
-$--border-color-lighter: #e6ebf5;
-
-$--table-border:1px solid#dfe6ec;
-
-/* icon font path, required */
-$--font-path: '~element-ui/lib/theme-chalk/fonts';
-
-@import "~element-ui/packages/theme-chalk/src/index";
-
-// the :export directive is the magic sauce for webpack
-// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
-:export {
-  theme: $--color-primary;
-}
+/**
+* I think element-ui's default theme color is too light for long-term use.
+* So I modified the default color and you can modify it to your liking.
+**/
+
+/* theme color */
+$--color-primary: #13c2c2;
+$--color-success: #13ce66;
+$--color-warning: #ffba00;
+$--color-danger: #ff4949;
+// $--color-info: #1E1E1E;
+
+$--button-font-weight: 400;
+
+// $--color-text-regular: #1f2d3d;
+
+$--border-color-light: #dfe4ed;
+$--border-color-lighter: #e6ebf5;
+
+$--table-border:1px solid#dfe6ec;
+
+/* icon font path, required */
+$--font-path: '~element-ui/lib/theme-chalk/fonts';
+
+@import "~element-ui/packages/theme-chalk/src/index";
+
+// the :export directive is the magic sauce for webpack
+// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
+:export {
+  theme: $--color-primary;
+}

+ 373 - 373
src/assets/styles/index.scss

@@ -1,373 +1,373 @@
-@import './variables.scss';
-@import './mixin.scss';
-@import './transition.scss';
-@import './element-ui.scss';
-@import './sidebar.scss';
-@import './btn.scss';
-
-body {
-  height: 100%;
-  -moz-osx-font-smoothing: grayscale;
-  -webkit-font-smoothing: antialiased;
-  text-rendering: optimizeLegibility;
-  font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
-}
-
-label {
-  font-weight: 700;
-}
-
-html {
-  height: 100%;
-  box-sizing: border-box;
-}
-
-#app {
-  height: 100%;
-}
-
-*,
-*:before,
-*:after {
-  box-sizing: inherit;
-}
-
-.no-padding {
-  padding: 0px !important;
-}
-
-.padding-content {
-  padding: 4px 0;
-}
-
-a:focus,
-a:active {
-  outline: none;
-}
-
-a,
-a:focus,
-a:hover {
-  cursor: pointer;
-  color: inherit;
-  text-decoration: none;
-}
-
-div:focus {
-  outline: none;
-}
-
-.fr {
-  float: right;
-}
-
-.fl {
-  float: left;
-}
-
-.pr-5 {
-  padding-right: 5px;
-}
-
-.pl-5 {
-  padding-left: 5px;
-}
-
-.block {
-  display: block;
-}
-
-.pointer {
-  cursor: pointer;
-}
-
-.inlineBlock {
-  display: block;
-}
-
-.clearfix {
-  &:after {
-    visibility: hidden;
-    display: block;
-    font-size: 0;
-    content: " ";
-    clear: both;
-    height: 0;
-  }
-}
-
-aside {
-  //background: #eef1f6;
-  //padding: 8px 24px;
-  margin-bottom: 20px;
-  border-radius: 2px;
-  display: block;
-  line-height: 32px;
-  font-size: 16px;
-  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
-  color: #2c3e50;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-
-  a {
-    color: #337ab7;
-    cursor: pointer;
-
-    &:hover {
-      color: rgb(32, 160, 255);
-    }
-  }
-}
-.app-main{
-  background-color: #f0f2f5;
-}
-//main-container全局样式
-.app-container {
-  margin: 15px;
-  padding: 15px;
-  background-color: #fff;
-}
-.components-container {
-  margin: 20px 20px;
-  position: relative;
-}
-
-.pagination-container {
-  margin-top: 5px;
-}
-
-.text-center {
-  text-align: center
-}
-
-.sub-navbar {
-  height: 50px;
-  line-height: 50px;
-  position: relative;
-  width: 100%;
-  text-align: right;
-  padding-right: 20px;
-  transition: 600ms ease position;
-  background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%);
-
-  .subtitle {
-    font-size: 20px;
-    color: #fff;
-  }
-
-  &.draft {
-    background: #d0d0d0;
-  }
-
-  &.deleted {
-    background: #d0d0d0;
-  }
-}
-
-.link-type,
-.link-type:focus {
-  color: #337ab7;
-  cursor: pointer;
-
-  &:hover {
-    color: rgb(32, 160, 255);
-  }
-}
-
-.filter-container {
-  padding-bottom: 5px;
-
-  .filter-item {
-    display: inline-block;
-    vertical-align: middle;
-    margin-bottom: 5px;
-  }
-}
-
-//refine vue-multiselect plugin
-.multiselect {
-  line-height: 16px;
-}
-
-.multiselect--active {
-  z-index: 1000 !important;
-}
-
-.el-dialog {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  margin: 0 !important;
-  transform: translate(-50%, -50%);
-  max-height: calc(100% - 30px);
-  max-width: calc(100% - 30px);
-  display: flex;
-  flex-direction: column;
-  .el-dialog__body {
-    padding: 5px 20px;
-    overflow: auto;
-  }
-  .el-dialog-body-custom-height {
-    height: calc(100vh - 214px);
-  }
-}
-
-
-
-.acea-row {
-  display: -webkit-box;
-  display: -moz-box;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-lines: multiple;
-  -moz-box-lines: multiple;
-  -o-box-lines: multiple;
-  -webkit-flex-wrap: wrap;
-  -ms-flex-wrap: wrap;
-  flex-wrap: wrap;
-  /* 辅助类 */
-}
-
-.acea-row.row-middle {
-  -webkit-box-align: center;
-  -moz-box-align: center;
-  -o-box-align: center;
-  -ms-flex-align: center;
-  -webkit-align-items: center;
-  align-items: center;
-}
-
-.acea-row.row-top {
-  -webkit-box-align: start;
-  -moz-box-align: start;
-  -o-box-align: start;
-  -ms-flex-align: start;
-  -webkit-align-items: flex-start;
-  align-items: flex-start;
-}
-
-.acea-row.row-bottom {
-  -webkit-box-align: end;
-  -moz-box-align: end;
-  -o-box-align: end;
-  -ms-flex-align: end;
-  -webkit-align-items: flex-end;
-  align-items: flex-end;
-}
-
-.acea-row.row-center {
-  -webkit-box-pack: center;
-  -moz-box-pack: center;
-  -o-box-pack: center;
-  -ms-flex-pack: center;
-  -webkit-justify-content: center;
-  justify-content: center;
-}
-
-.acea-row.row-right {
-  -webkit-box-pack: end;
-  -moz-box-pack: end;
-  -o-box-pack: end;
-  -ms-flex-pack: end;
-  -webkit-justify-content: flex-end;
-  justify-content: flex-end;
-}
-
-.acea-row.row-left {
-  -webkit-box-pack: start;
-  -moz-box-pack: start;
-  -o-box-pack: start;
-  -ms-flex-pack: start;
-  -webkit-justify-content: flex-start;
-  justify-content: flex-start;
-}
-
-.acea-row.row-between {
-  -webkit-box-pack: justify;
-  -moz-box-pack: justify;
-  -o-box-pack: justify;
-  -ms-flex-pack: justify;
-  -webkit-justify-content: space-between;
-  justify-content: space-between;
-}
-
-.acea-row.row-around {
-  justify-content: space-around;
-  -webkit-justify-content: space-around;
-}
-
-.acea-row.row-column-around {
-  -webkit-flex-direction: column;
-  -ms-flex-direction: column;
-  flex-direction: column;
-  justify-content: space-around;
-  -webkit-justify-content: space-around;
-}
-
-.acea-row.row-column {
-  -webkit-box-orient: vertical;
-  -moz-box-orient: vertical;
-  -o-box-orient: vertical;
-  -webkit-flex-direction: column;
-  -ms-flex-direction: column;
-  flex-direction: column;
-}
-
-.acea-row.row-column-between {
-  -webkit-box-orient: vertical;
-  -moz-box-orient: vertical;
-  -o-box-orient: vertical;
-  -webkit-flex-direction: column;
-  -ms-flex-direction: column;
-  flex-direction: column;
-  -webkit-box-pack: justify;
-  -moz-box-pack: justify;
-  -o-box-pack: justify;
-  -ms-flex-pack: justify;
-  -webkit-justify-content: space-between;
-  justify-content: space-between;
-}
-
-/* 上下左右垂直居中 */
-.acea-row.row-center-wrapper {
-  -webkit-box-align: center;
-  -moz-box-align: center;
-  -o-box-align: center;
-  -ms-flex-align: center;
-  -webkit-align-items: center;
-  align-items: center;
-  -webkit-box-pack: center;
-  -moz-box-pack: center;
-  -o-box-pack: center;
-  -ms-flex-pack: center;
-  -webkit-justify-content: center;
-  justify-content: center;
-}
-
-/* 上下两边居中对齐 */
-.acea-row.row-between-wrapper {
-  -webkit-box-align: center;
-  -moz-box-align: center;
-  -o-box-align: center;
-  -ms-flex-align: center;
-  -webkit-align-items: center;
-  align-items: center;
-  -webkit-box-pack: justify;
-  -moz-box-pack: justify;
-  -o-box-pack: justify;
-  -ms-flex-pack: justify;
-  -webkit-justify-content: space-between;
-  justify-content: space-between;
-}
- 
-
-.el-drawer__header{
-  margin-bottom: 20px;
-}
-.el-descriptions-item__label.is-bordered-label{
-  font-weight: normal;
-}
-
-
- 
+@import './variables.scss';
+@import './mixin.scss';
+@import './transition.scss';
+@import './element-ui.scss';
+@import './sidebar.scss';
+@import './btn.scss';
+
+body {
+  height: 100%;
+  -moz-osx-font-smoothing: grayscale;
+  -webkit-font-smoothing: antialiased;
+  text-rendering: optimizeLegibility;
+  font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
+}
+
+label {
+  font-weight: 700;
+}
+
+html {
+  height: 100%;
+  box-sizing: border-box;
+}
+
+#app {
+  height: 100%;
+}
+
+*,
+*:before,
+*:after {
+  box-sizing: inherit;
+}
+
+.no-padding {
+  padding: 0px !important;
+}
+
+.padding-content {
+  padding: 4px 0;
+}
+
+a:focus,
+a:active {
+  outline: none;
+}
+
+a,
+a:focus,
+a:hover {
+  cursor: pointer;
+  color: inherit;
+  text-decoration: none;
+}
+
+div:focus {
+  outline: none;
+}
+
+.fr {
+  float: right;
+}
+
+.fl {
+  float: left;
+}
+
+.pr-5 {
+  padding-right: 5px;
+}
+
+.pl-5 {
+  padding-left: 5px;
+}
+
+.block {
+  display: block;
+}
+
+.pointer {
+  cursor: pointer;
+}
+
+.inlineBlock {
+  display: block;
+}
+
+.clearfix {
+  &:after {
+    visibility: hidden;
+    display: block;
+    font-size: 0;
+    content: " ";
+    clear: both;
+    height: 0;
+  }
+}
+
+aside {
+  //background: #eef1f6;
+  //padding: 8px 24px;
+  margin-bottom: 20px;
+  border-radius: 2px;
+  display: block;
+  line-height: 32px;
+  font-size: 16px;
+  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+  color: #2c3e50;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+
+  a {
+    color: #337ab7;
+    cursor: pointer;
+
+    &:hover {
+      color: rgb(32, 160, 255);
+    }
+  }
+}
+.app-main{
+  background-color: #f0f2f5;
+}
+//main-container全局样式
+.app-container {
+  margin: 15px;
+  padding: 15px;
+  background-color: #fff;
+}
+.components-container {
+  margin: 20px 20px;
+  position: relative;
+}
+
+.pagination-container {
+  margin-top: 5px;
+}
+
+.text-center {
+  text-align: center
+}
+
+.sub-navbar {
+  height: 50px;
+  line-height: 50px;
+  position: relative;
+  width: 100%;
+  text-align: right;
+  padding-right: 20px;
+  transition: 600ms ease position;
+  background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%);
+
+  .subtitle {
+    font-size: 20px;
+    color: #fff;
+  }
+
+  &.draft {
+    background: #d0d0d0;
+  }
+
+  &.deleted {
+    background: #d0d0d0;
+  }
+}
+
+.link-type,
+.link-type:focus {
+  color: #337ab7;
+  cursor: pointer;
+
+  &:hover {
+    color: rgb(32, 160, 255);
+  }
+}
+
+.filter-container {
+  padding-bottom: 5px;
+
+  .filter-item {
+    display: inline-block;
+    vertical-align: middle;
+    margin-bottom: 5px;
+  }
+}
+
+//refine vue-multiselect plugin
+.multiselect {
+  line-height: 16px;
+}
+
+.multiselect--active {
+  z-index: 1000 !important;
+}
+
+.el-dialog {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  margin: 0 !important;
+  transform: translate(-50%, -50%);
+  max-height: calc(100% - 30px);
+  max-width: calc(100% - 30px);
+  display: flex;
+  flex-direction: column;
+  .el-dialog__body {
+    padding: 5px 20px;
+    overflow: auto;
+  }
+  .el-dialog-body-custom-height {
+    height: calc(100vh - 214px);
+  }
+}
+
+
+
+.acea-row {
+  display: -webkit-box;
+  display: -moz-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-lines: multiple;
+  -moz-box-lines: multiple;
+  -o-box-lines: multiple;
+  -webkit-flex-wrap: wrap;
+  -ms-flex-wrap: wrap;
+  flex-wrap: wrap;
+  /* 辅助类 */
+}
+
+.acea-row.row-middle {
+  -webkit-box-align: center;
+  -moz-box-align: center;
+  -o-box-align: center;
+  -ms-flex-align: center;
+  -webkit-align-items: center;
+  align-items: center;
+}
+
+.acea-row.row-top {
+  -webkit-box-align: start;
+  -moz-box-align: start;
+  -o-box-align: start;
+  -ms-flex-align: start;
+  -webkit-align-items: flex-start;
+  align-items: flex-start;
+}
+
+.acea-row.row-bottom {
+  -webkit-box-align: end;
+  -moz-box-align: end;
+  -o-box-align: end;
+  -ms-flex-align: end;
+  -webkit-align-items: flex-end;
+  align-items: flex-end;
+}
+
+.acea-row.row-center {
+  -webkit-box-pack: center;
+  -moz-box-pack: center;
+  -o-box-pack: center;
+  -ms-flex-pack: center;
+  -webkit-justify-content: center;
+  justify-content: center;
+}
+
+.acea-row.row-right {
+  -webkit-box-pack: end;
+  -moz-box-pack: end;
+  -o-box-pack: end;
+  -ms-flex-pack: end;
+  -webkit-justify-content: flex-end;
+  justify-content: flex-end;
+}
+
+.acea-row.row-left {
+  -webkit-box-pack: start;
+  -moz-box-pack: start;
+  -o-box-pack: start;
+  -ms-flex-pack: start;
+  -webkit-justify-content: flex-start;
+  justify-content: flex-start;
+}
+
+.acea-row.row-between {
+  -webkit-box-pack: justify;
+  -moz-box-pack: justify;
+  -o-box-pack: justify;
+  -ms-flex-pack: justify;
+  -webkit-justify-content: space-between;
+  justify-content: space-between;
+}
+
+.acea-row.row-around {
+  justify-content: space-around;
+  -webkit-justify-content: space-around;
+}
+
+.acea-row.row-column-around {
+  -webkit-flex-direction: column;
+  -ms-flex-direction: column;
+  flex-direction: column;
+  justify-content: space-around;
+  -webkit-justify-content: space-around;
+}
+
+.acea-row.row-column {
+  -webkit-box-orient: vertical;
+  -moz-box-orient: vertical;
+  -o-box-orient: vertical;
+  -webkit-flex-direction: column;
+  -ms-flex-direction: column;
+  flex-direction: column;
+}
+
+.acea-row.row-column-between {
+  -webkit-box-orient: vertical;
+  -moz-box-orient: vertical;
+  -o-box-orient: vertical;
+  -webkit-flex-direction: column;
+  -ms-flex-direction: column;
+  flex-direction: column;
+  -webkit-box-pack: justify;
+  -moz-box-pack: justify;
+  -o-box-pack: justify;
+  -ms-flex-pack: justify;
+  -webkit-justify-content: space-between;
+  justify-content: space-between;
+}
+
+/* 上下左右垂直居中 */
+.acea-row.row-center-wrapper {
+  -webkit-box-align: center;
+  -moz-box-align: center;
+  -o-box-align: center;
+  -ms-flex-align: center;
+  -webkit-align-items: center;
+  align-items: center;
+  -webkit-box-pack: center;
+  -moz-box-pack: center;
+  -o-box-pack: center;
+  -ms-flex-pack: center;
+  -webkit-justify-content: center;
+  justify-content: center;
+}
+
+/* 上下两边居中对齐 */
+.acea-row.row-between-wrapper {
+  -webkit-box-align: center;
+  -moz-box-align: center;
+  -o-box-align: center;
+  -ms-flex-align: center;
+  -webkit-align-items: center;
+  align-items: center;
+  -webkit-box-pack: justify;
+  -moz-box-pack: justify;
+  -o-box-pack: justify;
+  -ms-flex-pack: justify;
+  -webkit-justify-content: space-between;
+  justify-content: space-between;
+}
+ 
+
+.el-drawer__header{
+  margin-bottom: 20px;
+}
+.el-descriptions-item__label.is-bordered-label{
+  font-weight: normal;
+}
+
+
+ 

+ 66 - 66
src/assets/styles/mixin.scss

@@ -1,66 +1,66 @@
-@mixin clearfix {
-  &:after {
-    content: "";
-    display: table;
-    clear: both;
-  }
-}
-
-@mixin scrollBar {
-  &::-webkit-scrollbar-track-piece {
-    background: #d3dce6;
-  }
-
-  &::-webkit-scrollbar {
-    width: 6px;
-  }
-
-  &::-webkit-scrollbar-thumb {
-    background: #99a9bf;
-    border-radius: 20px;
-  }
-}
-
-@mixin relative {
-  position: relative;
-  width: 100%;
-  height: 100%;
-}
-
-@mixin pct($pct) {
-  width: #{$pct};
-  position: relative;
-  margin: 0 auto;
-}
-
-@mixin triangle($width, $height, $color, $direction) {
-  $width: $width/2;
-  $color-border-style: $height solid $color;
-  $transparent-border-style: $width solid transparent;
-  height: 0;
-  width: 0;
-
-  @if $direction==up {
-    border-bottom: $color-border-style;
-    border-left: $transparent-border-style;
-    border-right: $transparent-border-style;
-  }
-
-  @else if $direction==right {
-    border-left: $color-border-style;
-    border-top: $transparent-border-style;
-    border-bottom: $transparent-border-style;
-  }
-
-  @else if $direction==down {
-    border-top: $color-border-style;
-    border-left: $transparent-border-style;
-    border-right: $transparent-border-style;
-  }
-
-  @else if $direction==left {
-    border-right: $color-border-style;
-    border-top: $transparent-border-style;
-    border-bottom: $transparent-border-style;
-  }
-}
+@mixin clearfix {
+  &:after {
+    content: "";
+    display: table;
+    clear: both;
+  }
+}
+
+@mixin scrollBar {
+  &::-webkit-scrollbar-track-piece {
+    background: #d3dce6;
+  }
+
+  &::-webkit-scrollbar {
+    width: 6px;
+  }
+
+  &::-webkit-scrollbar-thumb {
+    background: #99a9bf;
+    border-radius: 20px;
+  }
+}
+
+@mixin relative {
+  position: relative;
+  width: 100%;
+  height: 100%;
+}
+
+@mixin pct($pct) {
+  width: #{$pct};
+  position: relative;
+  margin: 0 auto;
+}
+
+@mixin triangle($width, $height, $color, $direction) {
+  $width: $width/2;
+  $color-border-style: $height solid $color;
+  $transparent-border-style: $width solid transparent;
+  height: 0;
+  width: 0;
+
+  @if $direction==up {
+    border-bottom: $color-border-style;
+    border-left: $transparent-border-style;
+    border-right: $transparent-border-style;
+  }
+
+  @else if $direction==right {
+    border-left: $color-border-style;
+    border-top: $transparent-border-style;
+    border-bottom: $transparent-border-style;
+  }
+
+  @else if $direction==down {
+    border-top: $color-border-style;
+    border-left: $transparent-border-style;
+    border-right: $transparent-border-style;
+  }
+
+  @else if $direction==left {
+    border-right: $color-border-style;
+    border-top: $transparent-border-style;
+    border-bottom: $transparent-border-style;
+  }
+}

+ 215 - 215
src/assets/styles/sidebar.scss

@@ -1,215 +1,215 @@
-#app {
-
-  .main-container {
-    min-height: 100%;
-    transition: margin-left .28s;
-    margin-left: $sideBarWidth;
-    position: relative;
-  }
-
-  .sidebar-container {
-    transition: width 0.28s;
-    width: $sideBarWidth !important;
-    background-color: $menuBg;
-    height: 100%;
-    position: fixed;
-    font-size: 0px;
-    top: 0;
-    bottom: 0;
-    left: 0;
-    z-index: 1001;
-    overflow: hidden;
-
-    // reset element-ui css
-    .horizontal-collapse-transition {
-      transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
-    }
-
-    .scrollbar-wrapper {
-      overflow-x: hidden !important;
-    }
-
-    .el-scrollbar__bar.is-vertical {
-      right: 0px;
-    }
-
-    .el-scrollbar {
-      height: 100%;
-    }
-
-    &.has-logo {
-      .el-scrollbar {
-        height: calc(100% - 50px);
-      }
-    }
-
-    .is-horizontal {
-      display: none;
-    }
-
-    a {
-      display: inline-block;
-      width: 100%;
-      overflow: hidden;
-    }
-
-    .svg-icon {
-      margin-right: 16px;
-    }
-
-    .el-menu {
-      border: none;
-      height: 100%;
-      width: 100% !important;
-    }
-
-    .el-menu-item, .el-submenu__title {
-      overflow: hidden !important;
-      text-overflow: ellipsis !important;
-      white-space: nowrap !important;
-    }
-
-    // menu hover
-    .submenu-title-noDropdown,
-    .el-submenu__title {
-      &:hover {
-        background-color: $menuHover !important;
-      }
-    }
-
-    .is-active>.el-submenu__title {
-      color: $subMenuActiveText !important;
-    }
-
-    & .nest-menu .el-submenu>.el-submenu__title,
-    & .el-submenu .el-menu-item {
-      min-width: $sideBarWidth !important;
-      background-color: $subMenuBg !important;
-
-      &:hover {
-        background-color: $subMenuHover !important;
-      }
-    }
-  }
-
-  .hideSidebar {
-    .sidebar-container {
-      width: 54px !important;
-    }
-
-    .main-container {
-      margin-left: 54px;
-    }
-
-    .submenu-title-noDropdown {
-      padding: 0 !important;
-      position: relative;
-
-      .el-tooltip {
-        padding: 0 !important;
-
-        .svg-icon {
-          margin-left: 20px;
-        }
-      }
-    }
-
-    .el-submenu {
-      overflow: hidden;
-
-      &>.el-submenu__title {
-        padding: 0 !important;
-
-        .svg-icon {
-          margin-left: 20px;
-        }
-
-        .el-submenu__icon-arrow {
-          display: none;
-        }
-      }
-    }
-
-    .el-menu--collapse {
-      .el-submenu {
-        &>.el-submenu__title {
-          &>span {
-            height: 0;
-            width: 0;
-            overflow: hidden;
-            visibility: hidden;
-            display: inline-block;
-          }
-        }
-      }
-    }
-  }
-
-  .el-menu--collapse .el-menu .el-submenu {
-    min-width: $sideBarWidth !important;
-  }
-
-  // mobile responsive
-  .mobile {
-    .main-container {
-      margin-left: 0px;
-    }
-
-    .sidebar-container {
-      transition: transform .28s;
-      width: $sideBarWidth !important;
-    }
-
-    &.hideSidebar {
-      .sidebar-container {
-        pointer-events: none;
-        transition-duration: 0.3s;
-        transform: translate3d(-$sideBarWidth, 0, 0);
-      }
-    }
-  }
-
-  .withoutAnimation {
-
-    .main-container,
-    .sidebar-container {
-      transition: none;
-    }
-  }
-}
-
-// when menu collapsed
-.el-menu--vertical {
-  &>.el-menu {
-    .svg-icon {
-      margin-right: 16px;
-    }
-  }
-
-  .nest-menu .el-submenu>.el-submenu__title,
-  .el-menu-item {
-    &:hover {
-      // you can use $subMenuHover
-      background-color: $menuHover !important;
-    }
-  }
-
-  // the scroll bar appears when the subMenu is too long
-  >.el-menu--popup {
-    max-height: 100vh;
-    overflow-y: auto;
-
-    &::-webkit-scrollbar-track-piece {
-      background: #d3dce6;
-    }
-
-    &::-webkit-scrollbar {
-      width: 6px;
-    }
-
-    &::-webkit-scrollbar-thumb {
-      background: #99a9bf;
-      border-radius: 20px;
-    }
-  }
-}
+#app {
+
+  .main-container {
+    min-height: 100%;
+    transition: margin-left .28s;
+    margin-left: $sideBarWidth;
+    position: relative;
+  }
+
+  .sidebar-container {
+    transition: width 0.28s;
+    width: $sideBarWidth !important;
+    background-color: $menuBg;
+    height: 100%;
+    position: fixed;
+    font-size: 0px;
+    top: 0;
+    bottom: 0;
+    left: 0;
+    z-index: 1001;
+    overflow: hidden;
+
+    // reset element-ui css
+    .horizontal-collapse-transition {
+      transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
+    }
+
+    .scrollbar-wrapper {
+      overflow-x: hidden !important;
+    }
+
+    .el-scrollbar__bar.is-vertical {
+      right: 0px;
+    }
+
+    .el-scrollbar {
+      height: 100%;
+    }
+
+    &.has-logo {
+      .el-scrollbar {
+        height: calc(100% - 50px);
+      }
+    }
+
+    .is-horizontal {
+      display: none;
+    }
+
+    a {
+      display: inline-block;
+      width: 100%;
+      overflow: hidden;
+    }
+
+    .svg-icon {
+      margin-right: 16px;
+    }
+
+    .el-menu {
+      border: none;
+      height: 100%;
+      width: 100% !important;
+    }
+
+    .el-menu-item, .el-submenu__title {
+      overflow: hidden !important;
+      text-overflow: ellipsis !important;
+      white-space: nowrap !important;
+    }
+
+    // menu hover
+    .submenu-title-noDropdown,
+    .el-submenu__title {
+      &:hover {
+        background-color: $menuHover !important;
+      }
+    }
+
+    .is-active>.el-submenu__title {
+      color: $subMenuActiveText !important;
+    }
+
+    & .nest-menu .el-submenu>.el-submenu__title,
+    & .el-submenu .el-menu-item {
+      min-width: $sideBarWidth !important;
+      background-color: $subMenuBg !important;
+
+      &:hover {
+        background-color: $subMenuHover !important;
+      }
+    }
+  }
+
+  .hideSidebar {
+    .sidebar-container {
+      width: 54px !important;
+    }
+
+    .main-container {
+      margin-left: 54px;
+    }
+
+    .submenu-title-noDropdown {
+      padding: 0 !important;
+      position: relative;
+
+      .el-tooltip {
+        padding: 0 !important;
+
+        .svg-icon {
+          margin-left: 20px;
+        }
+      }
+    }
+
+    .el-submenu {
+      overflow: hidden;
+
+      &>.el-submenu__title {
+        padding: 0 !important;
+
+        .svg-icon {
+          margin-left: 20px;
+        }
+
+        .el-submenu__icon-arrow {
+          display: none;
+        }
+      }
+    }
+
+    .el-menu--collapse {
+      .el-submenu {
+        &>.el-submenu__title {
+          &>span {
+            height: 0;
+            width: 0;
+            overflow: hidden;
+            visibility: hidden;
+            display: inline-block;
+          }
+        }
+      }
+    }
+  }
+
+  .el-menu--collapse .el-menu .el-submenu {
+    min-width: $sideBarWidth !important;
+  }
+
+  // mobile responsive
+  .mobile {
+    .main-container {
+      margin-left: 0px;
+    }
+
+    .sidebar-container {
+      transition: transform .28s;
+      width: $sideBarWidth !important;
+    }
+
+    &.hideSidebar {
+      .sidebar-container {
+        pointer-events: none;
+        transition-duration: 0.3s;
+        transform: translate3d(-$sideBarWidth, 0, 0);
+      }
+    }
+  }
+
+  .withoutAnimation {
+
+    .main-container,
+    .sidebar-container {
+      transition: none;
+    }
+  }
+}
+
+// when menu collapsed
+.el-menu--vertical {
+  &>.el-menu {
+    .svg-icon {
+      margin-right: 16px;
+    }
+  }
+
+  .nest-menu .el-submenu>.el-submenu__title,
+  .el-menu-item {
+    &:hover {
+      // you can use $subMenuHover
+      background-color: $menuHover !important;
+    }
+  }
+
+  // the scroll bar appears when the subMenu is too long
+  >.el-menu--popup {
+    max-height: 100vh;
+    overflow-y: auto;
+
+    &::-webkit-scrollbar-track-piece {
+      background: #d3dce6;
+    }
+
+    &::-webkit-scrollbar {
+      width: 6px;
+    }
+
+    &::-webkit-scrollbar-thumb {
+      background: #99a9bf;
+      border-radius: 20px;
+    }
+  }
+}

+ 48 - 48
src/assets/styles/transition.scss

@@ -1,48 +1,48 @@
-// global transition css
-
-/* fade */
-.fade-enter-active,
-.fade-leave-active {
-  transition: opacity 0.28s;
-}
-
-.fade-enter,
-.fade-leave-active {
-  opacity: 0;
-}
-
-/* fade-transform */
-.fade-transform-leave-active,
-.fade-transform-enter-active {
-  transition: all .5s;
-}
-
-.fade-transform-enter {
-  opacity: 0;
-  transform: translateX(-30px);
-}
-
-.fade-transform-leave-to {
-  opacity: 0;
-  transform: translateX(30px);
-}
-
-/* breadcrumb transition */
-.breadcrumb-enter-active,
-.breadcrumb-leave-active {
-  transition: all .5s;
-}
-
-.breadcrumb-enter,
-.breadcrumb-leave-active {
-  opacity: 0;
-  transform: translateX(20px);
-}
-
-.breadcrumb-move {
-  transition: all .5s;
-}
-
-.breadcrumb-leave-active {
-  position: absolute;
-}
+// global transition css
+
+/* fade */
+.fade-enter-active,
+.fade-leave-active {
+  transition: opacity 0.28s;
+}
+
+.fade-enter,
+.fade-leave-active {
+  opacity: 0;
+}
+
+/* fade-transform */
+.fade-transform-leave-active,
+.fade-transform-enter-active {
+  transition: all .5s;
+}
+
+.fade-transform-enter {
+  opacity: 0;
+  transform: translateX(-30px);
+}
+
+.fade-transform-leave-to {
+  opacity: 0;
+  transform: translateX(30px);
+}
+
+/* breadcrumb transition */
+.breadcrumb-enter-active,
+.breadcrumb-leave-active {
+  transition: all .5s;
+}
+
+.breadcrumb-enter,
+.breadcrumb-leave-active {
+  opacity: 0;
+  transform: translateX(20px);
+}
+
+.breadcrumb-move {
+  transition: all .5s;
+}
+
+.breadcrumb-leave-active {
+  position: absolute;
+}

+ 35 - 35
src/assets/styles/variables.scss

@@ -1,35 +1,35 @@
-// base color
-$blue:#324157;
-$light-blue:#3A71A8;
-$red:#C03639;
-$pink: #E65D6E;
-$green: #30B08F;
-$tiffany: #4AB7BD;
-$yellow:#FEC171;
-$panGreen: #30B08F;
-
-// sidebar
-$menuText:#bfcbd9;
-$menuActiveText:#409EFF;
-$subMenuActiveText:#f4f4f5; // https://github.com/ElemeFE/element/issues/12951
-
-$menuBg:#304156;
-$menuHover:#263445;
-
-$subMenuBg:#1f2d3d;
-$subMenuHover:#001528;
-
-$sideBarWidth: 200px;
-
-// the :export directive is the magic sauce for webpack
-// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
-:export {
-  menuText: $menuText;
-  menuActiveText: $menuActiveText;
-  subMenuActiveText: $subMenuActiveText;
-  menuBg: $menuBg;
-  menuHover: $menuHover;
-  subMenuBg: $subMenuBg;
-  subMenuHover: $subMenuHover;
-  sideBarWidth: $sideBarWidth;
-}
+// base color
+$blue:#324157;
+$light-blue:#3A71A8;
+$red:#C03639;
+$pink: #E65D6E;
+$green: #30B08F;
+$tiffany: #4AB7BD;
+$yellow:#FEC171;
+$panGreen: #30B08F;
+
+// sidebar
+$menuText:#bfcbd9;
+$menuActiveText:#409EFF;
+$subMenuActiveText:#f4f4f5; // https://github.com/ElemeFE/element/issues/12951
+
+$menuBg:#304156;
+$menuHover:#263445;
+
+$subMenuBg:#1f2d3d;
+$subMenuHover:#001528;
+
+$sideBarWidth: 200px;
+
+// the :export directive is the magic sauce for webpack
+// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
+:export {
+  menuText: $menuText;
+  menuActiveText: $menuActiveText;
+  subMenuActiveText: $subMenuActiveText;
+  menuBg: $menuBg;
+  menuHover: $menuHover;
+  subMenuBg: $subMenuBg;
+  subMenuHover: $subMenuHover;
+  sideBarWidth: $sideBarWidth;
+}

+ 74 - 74
src/components/Breadcrumb/index.vue

@@ -1,74 +1,74 @@
-<template>
-  <el-breadcrumb class="app-breadcrumb" separator="/">
-    <transition-group name="breadcrumb">
-      <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
-        <span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span>
-        <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
-      </el-breadcrumb-item>
-    </transition-group>
-  </el-breadcrumb>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      levelList: null
-    }
-  },
-  watch: {
-    $route(route) {
-      // if you go to the redirect page, do not update the breadcrumbs
-      if (route.path.startsWith('/redirect/')) {
-        return
-      }
-      this.getBreadcrumb()
-    }
-  },
-  created() {
-    this.getBreadcrumb()
-  },
-  methods: {
-    getBreadcrumb() {
-      // only show routes with meta.title
-      let matched = this.$route.matched.filter(item => item.meta && item.meta.title)
-      const first = matched[0]
-
-      if (!this.isDashboard(first)) {
-        matched = [{ path: '/index', meta: { title: '首页' }}].concat(matched)
-      }
-
-      this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
-    },
-    isDashboard(route) {
-      const name = route && route.name
-      if (!name) {
-        return false
-      }
-      return name.trim() === '首页'
-    },
-    handleLink(item) {
-      const { redirect, path } = item
-      if (redirect) {
-        this.$router.push(redirect)
-        return
-      }
-      this.$router.push(path)
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.app-breadcrumb.el-breadcrumb {
-  display: inline-block;
-  font-size: 14px;
-  line-height: 50px;
-  margin-left: 8px;
-
-  .no-redirect {
-    color: #97a8be;
-    cursor: text;
-  }
-}
-</style>
+<template>
+  <el-breadcrumb class="app-breadcrumb" separator="/">
+    <transition-group name="breadcrumb">
+      <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
+        <span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span>
+        <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
+      </el-breadcrumb-item>
+    </transition-group>
+  </el-breadcrumb>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      levelList: null
+    }
+  },
+  watch: {
+    $route(route) {
+      // if you go to the redirect page, do not update the breadcrumbs
+      if (route.path.startsWith('/redirect/')) {
+        return
+      }
+      this.getBreadcrumb()
+    }
+  },
+  created() {
+    this.getBreadcrumb()
+  },
+  methods: {
+    getBreadcrumb() {
+      // only show routes with meta.title
+      let matched = this.$route.matched.filter(item => item.meta && item.meta.title)
+      const first = matched[0]
+
+      if (!this.isDashboard(first)) {
+        matched = [{ path: '/index', meta: { title: '首页' }}].concat(matched)
+      }
+
+      this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
+    },
+    isDashboard(route) {
+      const name = route && route.name
+      if (!name) {
+        return false
+      }
+      return name.trim() === '首页'
+    },
+    handleLink(item) {
+      const { redirect, path } = item
+      if (redirect) {
+        this.$router.push(redirect)
+        return
+      }
+      this.$router.push(path)
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.app-breadcrumb.el-breadcrumb {
+  display: inline-block;
+  font-size: 14px;
+  line-height: 50px;
+  margin-left: 8px;
+
+  .no-redirect {
+    color: #97a8be;
+    cursor: text;
+  }
+}
+</style>

+ 194 - 194
src/components/Editor/index.vue

@@ -1,195 +1,195 @@
-<template>
-    <div class="editor" ref="editor" :style="styles"></div>
-</template>
-
-<script>
-import Quill from "quill";
-import "quill/dist/quill.core.css";
-import "quill/dist/quill.snow.css";
-import "quill/dist/quill.bubble.css";
-
-export default {
-  name: "Editor",
-  props: {
-    /* 编辑器的内容 */
-    value: {
-      type: String,
-      default: "",
-    },
-    /* 高度 */
-    height: {
-      type: Number,
-      default: null,
-    },
-    /* 最小高度 */
-    minHeight: {
-      type: Number,
-      default: null,
-    },
-  },
-  data() {
-    return {
-      Quill: null,
-      currentValue: "",
-      options: {
-        theme: "snow",
-        bounds: document.body,
-        debug: "warn",
-        modules: {
-          // 工具栏配置
-          toolbar: [
-            ["bold", "italic", "underline", "strike"],       // 加粗 斜体 下划线 删除线
-            ["blockquote", "code-block"],                    // 引用  代码块
-            [{ list: "ordered" }, { list: "bullet" }],       // 有序、无序列表
-            [{ indent: "-1" }, { indent: "+1" }],            // 缩进
-            [{ size: ["small", false, "large", "huge"] }],   // 字体大小
-            [{ header: [1, 2, 3, 4, 5, 6, false] }],         // 标题
-            [{ color: [] }, { background: [] }],             // 字体颜色、字体背景颜色
-            [{ align: [] }],                                 // 对齐方式
-            ["clean"],                                       // 清除文本格式
-            ["image"]                       // 链接、图片、视频
-          ],
-        },
-        placeholder: "请输入内容",
-        readOnly: false,
-      },
-    };
-  },
-  computed: {
-    styles() {
-      let style = {};
-      if (this.minHeight) {
-        style.minHeight = `${this.minHeight}px`;
-      }
-      if (this.height) {
-        style.height = `${this.height}px`;
-      }
-      return style;
-    },
-  },
-  watch: {
-    value: {
-      handler(val) {
-        if (val !== this.currentValue) {
-          this.currentValue = val === null ? "" : val;
-          if (this.Quill) {
-            this.Quill.pasteHTML(this.currentValue);
-          }
-        }
-      },
-      immediate: true,
-    },
-  },
-  mounted() {
-    this.init();
-  },
-  beforeDestroy() {
-    this.Quill = null;
-  },
-  methods: {
-    init() {
-      const editor = this.$refs.editor;
-      this.Quill = new Quill(editor, this.options);
-      this.Quill.pasteHTML(this.currentValue);
-      this.Quill.on("text-change", (delta, oldDelta, source) => {
-        const html = this.$refs.editor.children[0].innerHTML;
-        const text = this.Quill.getText();
-        const quill = this.Quill;
-        this.currentValue = html;
-        this.$emit("input", html);
-        this.$emit("on-change", { html, text, quill });
-      });
-      this.Quill.on("text-change", (delta, oldDelta, source) => {
-        this.$emit("on-text-change", delta, oldDelta, source);
-      });
-      this.Quill.on("selection-change", (range, oldRange, source) => {
-        this.$emit("on-selection-change", range, oldRange, source);
-      });
-      this.Quill.on("editor-change", (eventName, ...args) => {
-        this.$emit("on-editor-change", eventName, ...args);
-      });
-    },
-  },
-};
-</script>
-
-<style>
-.editor, .ql-toolbar {
-  white-space: pre-wrap!important;
-  line-height: normal !important;
-}
-.quill-img {
-  display: none;
-}
-.ql-snow .ql-tooltip[data-mode="link"]::before {
-  content: "请输入链接地址:";
-}
-.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
-  border-right: 0px;
-  content: "保存";
-  padding-right: 0px;
-}
-
-.ql-snow .ql-tooltip[data-mode="video"]::before {
-  content: "请输入视频地址:";
-}
-
-.ql-snow .ql-picker.ql-size .ql-picker-label::before,
-.ql-snow .ql-picker.ql-size .ql-picker-item::before {
-  content: "14px";
-}
-.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before,
-.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before {
-  content: "10px";
-}
-.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before,
-.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before {
-  content: "18px";
-}
-.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before,
-.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before {
-  content: "32px";
-}
-
-.ql-snow .ql-picker.ql-header .ql-picker-label::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item::before {
-  content: "文本";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
-  content: "标题1";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
-  content: "标题2";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
-  content: "标题3";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
-  content: "标题4";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
-  content: "标题5";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
-  content: "标题6";
-}
-
-.ql-snow .ql-picker.ql-font .ql-picker-label::before,
-.ql-snow .ql-picker.ql-font .ql-picker-item::before {
-  content: "标准字体";
-}
-.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before,
-.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before {
-  content: "衬线字体";
-}
-.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before,
-.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before {
-  content: "等宽字体";
-}
+<template>
+    <div class="editor" ref="editor" :style="styles"></div>
+</template>
+
+<script>
+import Quill from "quill";
+import "quill/dist/quill.core.css";
+import "quill/dist/quill.snow.css";
+import "quill/dist/quill.bubble.css";
+
+export default {
+  name: "Editor",
+  props: {
+    /* 编辑器的内容 */
+    value: {
+      type: String,
+      default: "",
+    },
+    /* 高度 */
+    height: {
+      type: Number,
+      default: null,
+    },
+    /* 最小高度 */
+    minHeight: {
+      type: Number,
+      default: null,
+    },
+  },
+  data() {
+    return {
+      Quill: null,
+      currentValue: "",
+      options: {
+        theme: "snow",
+        bounds: document.body,
+        debug: "warn",
+        modules: {
+          // 工具栏配置
+          toolbar: [
+            ["bold", "italic", "underline", "strike"],       // 加粗 斜体 下划线 删除线
+            ["blockquote", "code-block"],                    // 引用  代码块
+            [{ list: "ordered" }, { list: "bullet" }],       // 有序、无序列表
+            [{ indent: "-1" }, { indent: "+1" }],            // 缩进
+            [{ size: ["small", false, "large", "huge"] }],   // 字体大小
+            [{ header: [1, 2, 3, 4, 5, 6, false] }],         // 标题
+            [{ color: [] }, { background: [] }],             // 字体颜色、字体背景颜色
+            [{ align: [] }],                                 // 对齐方式
+            ["clean"],                                       // 清除文本格式
+            ["image"]                       // 链接、图片、视频
+          ],
+        },
+        placeholder: "请输入内容",
+        readOnly: false,
+      },
+    };
+  },
+  computed: {
+    styles() {
+      let style = {};
+      if (this.minHeight) {
+        style.minHeight = `${this.minHeight}px`;
+      }
+      if (this.height) {
+        style.height = `${this.height}px`;
+      }
+      return style;
+    },
+  },
+  watch: {
+    value: {
+      handler(val) {
+        if (val !== this.currentValue) {
+          this.currentValue = val === null ? "" : val;
+          if (this.Quill) {
+            this.Quill.pasteHTML(this.currentValue);
+          }
+        }
+      },
+      immediate: true,
+    },
+  },
+  mounted() {
+    this.init();
+  },
+  beforeDestroy() {
+    this.Quill = null;
+  },
+  methods: {
+    init() {
+      const editor = this.$refs.editor;
+      this.Quill = new Quill(editor, this.options);
+      this.Quill.pasteHTML(this.currentValue);
+      this.Quill.on("text-change", (delta, oldDelta, source) => {
+        const html = this.$refs.editor.children[0].innerHTML;
+        const text = this.Quill.getText();
+        const quill = this.Quill;
+        this.currentValue = html;
+        this.$emit("input", html);
+        this.$emit("on-change", { html, text, quill });
+      });
+      this.Quill.on("text-change", (delta, oldDelta, source) => {
+        this.$emit("on-text-change", delta, oldDelta, source);
+      });
+      this.Quill.on("selection-change", (range, oldRange, source) => {
+        this.$emit("on-selection-change", range, oldRange, source);
+      });
+      this.Quill.on("editor-change", (eventName, ...args) => {
+        this.$emit("on-editor-change", eventName, ...args);
+      });
+    },
+  },
+};
+</script>
+
+<style>
+.editor, .ql-toolbar {
+  white-space: pre-wrap!important;
+  line-height: normal !important;
+}
+.quill-img {
+  display: none;
+}
+.ql-snow .ql-tooltip[data-mode="link"]::before {
+  content: "请输入链接地址:";
+}
+.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
+  border-right: 0px;
+  content: "保存";
+  padding-right: 0px;
+}
+
+.ql-snow .ql-tooltip[data-mode="video"]::before {
+  content: "请输入视频地址:";
+}
+
+.ql-snow .ql-picker.ql-size .ql-picker-label::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item::before {
+  content: "14px";
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before {
+  content: "10px";
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before {
+  content: "18px";
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before {
+  content: "32px";
+}
+
+.ql-snow .ql-picker.ql-header .ql-picker-label::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item::before {
+  content: "文本";
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
+  content: "标题1";
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
+  content: "标题2";
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
+  content: "标题3";
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
+  content: "标题4";
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
+  content: "标题5";
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
+  content: "标题6";
+}
+
+.ql-snow .ql-picker.ql-font .ql-picker-label::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item::before {
+  content: "标准字体";
+}
+.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before {
+  content: "衬线字体";
+}
+.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before {
+  content: "等宽字体";
+}
 </style>

+ 153 - 153
src/components/Editor/wang.vue

@@ -1,154 +1,154 @@
-<template>  
-    <div>
-      <div  ref='editor1' class="myedit"></div>
-    </div> 
-</template>  
-  
-<script>  
-  import E from 'wangeditor'  
-  export default {  
-    name: 'editoritem',  
-    data() {  
-      return {
-        index:0,
-        uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadWang",
-        editor: null
-      }  
-    },
-    created() {
-       
-      
-    },
-    beforeDestroy() {
-      // 销毁编辑器
-      if(this.editor!=null){
-        this.editor.destroy()
-        this.editor = null
-      }
-      
-    },
-    methods:{
-      initEditor(){
-        var that=this;
-        if(this.editor==null){
-            //创建编辑器
-            this.editor = new E(that.$refs.editor1 )
-            this.editor.config.uploadImgServer = this.uploadUrl;
-            
-             this.editor.config.uploadImgMaxLength = 5
-            this.editor.config.uploadImgMaxSize = 2 * 1024 * 1024 // 2M
-            this.editor.config.uploadImgAccept = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp']
-            this.editor.config.uploadFileName = 'file'
-            this.editor.config.zIndex = 1
-            this.editor.config.menus = [
-              'head',
-              'bold',
-              'fontSize',
-              'fontName',
-              'italic',
-              'underline',
-              'strikeThrough',
-              'indent',
-              'lineHeight',
-              'foreColor',
-              'backColor',
-              'link',
-              'list',
-              'todo',
-              'justify',
-              'quote',
-              'emoticon',
-              'image',
-              // 'video',
-              'table',
-              'code',
-              'splitLine',
-              'undo',
-              'redo',
-          ]
-          this.editor.config.onchange = function (newHtml) {
-            console.log(newHtml)
-            that.$emit("on-text-change", newHtml);
-          }
-          this.editor.config.pasteFilterStyle = false
-          // 配置触发 onchange 的时间频率,默认为 200ms
-          this.editor.config.onchangeTimeout = 500 // 修改为 500ms
-            this.editor.config.uploadImgHooks = {
-                // 上传图片之前
-                before: function(xhr) {
-                    //console.log(xhr)
-                    
-                },
-                // 图片上传并返回了结果,图片插入已成功
-                success: function(xhr) {
-                    //console.log('success', xhr)
-                },
-                // 图片上传并返回了结果,但图片插入时出错了
-                fail: function(xhr, editor, resData) {
-                    console.log('fail', resData)
-                },
-                // 上传图片出错,一般为 http 请求的错误
-                error: function(xhr, editor, resData) {
-                    console.log('error', xhr, resData)
-                },
-                // 上传图片超时
-                timeout: function(xhr) {
-                    //console.log('timeout')
-                },
-                // 图片上传并返回了结果,想要自己把图片插入到编辑器中
-                // 例如服务器端返回的不是 { errno: 0, data: [...] } 这种格式,可使用 customInsert
-                customInsert: function(insertImg, result, editor) {
-                      console.log(result);
-                      // 图片上传并返回结果,自定义插入图片的事件(而不是编辑器自动插入图片!!!)
-                      // insertImg 是插入图片的函数,editor 是编辑器对象,result 是服务器端返回的结果
-                      // 举例:假如上传图片成功后,服务器端返回的是 {url:'....'} 这种格式,即可这样插入图片:
-                      // var url =   result.data[0].url
-                      if(result.data!=null){
-                        for(var i=0;i<result.data.length;i++){
-                            var url =   result.data[i].url
-                            insertImg(url)
-                          }
-                          console.log(url);
-                      }
-                      
-                     
-                      // result 必须是一个 JSON 格式字符串!!!否则报错
-                }
-            }
-            this.editor.create()
-        }
-        this.editor.txt.html("");
-      },
-      setText(text){
-        if(this.editor==null){
-          this.initEditor()
-        }
-        if(text==undefined||text==null){
-          this.editor.txt.html("");
-        }
-        else{
-          this.editor.txt.html(text);
-        }
-        
-      },
-     }
-   
-  }  
-</script>  
-  
-<style scoped>
-.toolbar {
-  border: 1px solid #ccc;
-}
-.myedit {
-  min-height: 300px;
-  z-index: 1 !important;
-}
-.w-e-toolbar{
-  z-index: 1 !important;
-}
-.w-e-text-container{
-  z-index: 1 !important;
-}
- 
+<template>  
+    <div>
+      <div  ref='editor1' class="myedit"></div>
+    </div> 
+</template>  
+  
+<script>  
+  import E from 'wangeditor'  
+  export default {  
+    name: 'editoritem',  
+    data() {  
+      return {
+        index:0,
+        uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadWang",
+        editor: null
+      }  
+    },
+    created() {
+       
+      
+    },
+    beforeDestroy() {
+      // 销毁编辑器
+      if(this.editor!=null){
+        this.editor.destroy()
+        this.editor = null
+      }
+      
+    },
+    methods:{
+      initEditor(){
+        var that=this;
+        if(this.editor==null){
+            //创建编辑器
+            this.editor = new E(that.$refs.editor1 )
+            this.editor.config.uploadImgServer = this.uploadUrl;
+            
+             this.editor.config.uploadImgMaxLength = 5
+            this.editor.config.uploadImgMaxSize = 2 * 1024 * 1024 // 2M
+            this.editor.config.uploadImgAccept = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp']
+            this.editor.config.uploadFileName = 'file'
+            this.editor.config.zIndex = 1
+            this.editor.config.menus = [
+              'head',
+              'bold',
+              'fontSize',
+              'fontName',
+              'italic',
+              'underline',
+              'strikeThrough',
+              'indent',
+              'lineHeight',
+              'foreColor',
+              'backColor',
+              'link',
+              'list',
+              'todo',
+              'justify',
+              'quote',
+              'emoticon',
+              'image',
+              // 'video',
+              'table',
+              'code',
+              'splitLine',
+              'undo',
+              'redo',
+          ]
+          this.editor.config.onchange = function (newHtml) {
+            console.log(newHtml)
+            that.$emit("on-text-change", newHtml);
+          }
+          this.editor.config.pasteFilterStyle = false
+          // 配置触发 onchange 的时间频率,默认为 200ms
+          this.editor.config.onchangeTimeout = 500 // 修改为 500ms
+            this.editor.config.uploadImgHooks = {
+                // 上传图片之前
+                before: function(xhr) {
+                    //console.log(xhr)
+                    
+                },
+                // 图片上传并返回了结果,图片插入已成功
+                success: function(xhr) {
+                    //console.log('success', xhr)
+                },
+                // 图片上传并返回了结果,但图片插入时出错了
+                fail: function(xhr, editor, resData) {
+                    console.log('fail', resData)
+                },
+                // 上传图片出错,一般为 http 请求的错误
+                error: function(xhr, editor, resData) {
+                    console.log('error', xhr, resData)
+                },
+                // 上传图片超时
+                timeout: function(xhr) {
+                    //console.log('timeout')
+                },
+                // 图片上传并返回了结果,想要自己把图片插入到编辑器中
+                // 例如服务器端返回的不是 { errno: 0, data: [...] } 这种格式,可使用 customInsert
+                customInsert: function(insertImg, result, editor) {
+                      console.log(result);
+                      // 图片上传并返回结果,自定义插入图片的事件(而不是编辑器自动插入图片!!!)
+                      // insertImg 是插入图片的函数,editor 是编辑器对象,result 是服务器端返回的结果
+                      // 举例:假如上传图片成功后,服务器端返回的是 {url:'....'} 这种格式,即可这样插入图片:
+                      // var url =   result.data[0].url
+                      if(result.data!=null){
+                        for(var i=0;i<result.data.length;i++){
+                            var url =   result.data[i].url
+                            insertImg(url)
+                          }
+                          console.log(url);
+                      }
+                      
+                     
+                      // result 必须是一个 JSON 格式字符串!!!否则报错
+                }
+            }
+            this.editor.create()
+        }
+        this.editor.txt.html("");
+      },
+      setText(text){
+        if(this.editor==null){
+          this.initEditor()
+        }
+        if(text==undefined||text==null){
+          this.editor.txt.html("");
+        }
+        else{
+          this.editor.txt.html(text);
+        }
+        
+      },
+     }
+   
+  }  
+</script>  
+  
+<style scoped>
+.toolbar {
+  border: 1px solid #ccc;
+}
+.myedit {
+  min-height: 300px;
+  z-index: 1 !important;
+}
+.w-e-toolbar{
+  z-index: 1 !important;
+}
+.w-e-text-container{
+  z-index: 1 !important;
+}
+ 
 </style>

+ 44 - 44
src/components/Hamburger/index.vue

@@ -1,44 +1,44 @@
-<template>
-  <div style="padding: 0 15px;" @click="toggleClick">
-    <svg
-      :class="{'is-active':isActive}"
-      class="hamburger"
-      viewBox="0 0 1024 1024"
-      xmlns="http://www.w3.org/2000/svg"
-      width="64"
-      height="64"
-    >
-      <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" />
-    </svg>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'Hamburger',
-  props: {
-    isActive: {
-      type: Boolean,
-      default: false
-    }
-  },
-  methods: {
-    toggleClick() {
-      this.$emit('toggleClick')
-    }
-  }
-}
-</script>
-
-<style scoped>
-.hamburger {
-  display: inline-block;
-  vertical-align: middle;
-  width: 20px;
-  height: 20px;
-}
-
-.hamburger.is-active {
-  transform: rotate(180deg);
-}
-</style>
+<template>
+  <div style="padding: 0 15px;" @click="toggleClick">
+    <svg
+      :class="{'is-active':isActive}"
+      class="hamburger"
+      viewBox="0 0 1024 1024"
+      xmlns="http://www.w3.org/2000/svg"
+      width="64"
+      height="64"
+    >
+      <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" />
+    </svg>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'Hamburger',
+  props: {
+    isActive: {
+      type: Boolean,
+      default: false
+    }
+  },
+  methods: {
+    toggleClick() {
+      this.$emit('toggleClick')
+    }
+  }
+}
+</script>
+
+<style scoped>
+.hamburger {
+  display: inline-block;
+  vertical-align: middle;
+  width: 20px;
+  height: 20px;
+}
+
+.hamburger.is-active {
+  transform: rotate(180deg);
+}
+</style>

+ 188 - 188
src/components/HeaderSearch/index.vue

@@ -1,188 +1,188 @@
-<template>
-  <div :class="{'show':show}" class="header-search">
-    <svg-icon class-name="search-icon" icon-class="search" @click.stop="click" />
-    <el-select
-      ref="headerSearchSelect"
-      v-model="search"
-      :remote-method="querySearch"
-      filterable
-      default-first-option
-      remote
-      placeholder="Search"
-      class="header-search-select"
-      @change="change"
-    >
-      <el-option v-for="item in options" :key="item.path" :value="item" :label="item.title.join(' > ')" />
-    </el-select>
-  </div>
-</template>
-
-<script>
-// fuse is a lightweight fuzzy-search module
-// make search results more in line with expectations
-import Fuse from 'fuse.js'
-import path from 'path'
-
-export default {
-  name: 'HeaderSearch',
-  data() {
-    return {
-      search: '',
-      options: [],
-      searchPool: [],
-      show: false,
-      fuse: undefined
-    }
-  },
-  computed: {
-    routes() {
-      return this.$store.getters.permission_routes
-    }
-  },
-  watch: {
-    routes() {
-      this.searchPool = this.generateRoutes(this.routes)
-    },
-    searchPool(list) {
-      this.initFuse(list)
-    },
-    show(value) {
-      if (value) {
-        document.body.addEventListener('click', this.close)
-      } else {
-        document.body.removeEventListener('click', this.close)
-      }
-    }
-  },
-  mounted() {
-    this.searchPool = this.generateRoutes(this.routes)
-  },
-  methods: {
-    click() {
-      this.show = !this.show
-      if (this.show) {
-        this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.focus()
-      }
-    },
-    close() {
-      this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.blur()
-      this.options = []
-      this.show = false
-    },
-    change(val) {
-      if(this.ishttp(val.path)) {
-        // http(s):// 路径新窗口打开
-        window.open(val.path, "_blank");
-      } else {
-        this.$router.push(val.path)
-      }
-      this.search = ''
-      this.options = []
-      this.$nextTick(() => {
-        this.show = false
-      })
-    },
-    initFuse(list) {
-      this.fuse = new Fuse(list, {
-        shouldSort: true,
-        threshold: 0.4,
-        location: 0,
-        distance: 100,
-        maxPatternLength: 32,
-        minMatchCharLength: 1,
-        keys: [{
-          name: 'title',
-          weight: 0.7
-        }, {
-          name: 'path',
-          weight: 0.3
-        }]
-      })
-    },
-    // Filter out the routes that can be displayed in the sidebar
-    // And generate the internationalized title
-    generateRoutes(routes, basePath = '/', prefixTitle = []) {
-      let res = []
-
-      for (const router of routes) {
-        // skip hidden router
-        if (router.hidden) { continue }
-
-        const data = {
-          path: !this.ishttp(router.path) ? path.resolve(basePath, router.path) : router.path,
-          title: [...prefixTitle]
-        }
-
-        if (router.meta && router.meta.title) {
-          data.title = [...data.title, router.meta.title]
-
-          if (router.redirect !== 'noRedirect') {
-            // only push the routes with title
-            // special case: need to exclude parent router without redirect
-            res.push(data)
-          }
-        }
-
-        // recursive child routes
-        if (router.children) {
-          const tempRoutes = this.generateRoutes(router.children, data.path, data.title)
-          if (tempRoutes.length >= 1) {
-            res = [...res, ...tempRoutes]
-          }
-        }
-      }
-      return res
-    },
-    querySearch(query) {
-      if (query !== '') {
-        this.options = this.fuse.search(query)
-      } else {
-        this.options = []
-      }
-    },
-    ishttp(url) {
-      return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.header-search {
-  font-size: 0 !important;
-
-  .search-icon {
-    cursor: pointer;
-    font-size: 18px;
-    vertical-align: middle;
-  }
-
-  .header-search-select {
-    font-size: 18px;
-    transition: width 0.2s;
-    width: 0;
-    overflow: hidden;
-    background: transparent;
-    border-radius: 0;
-    display: inline-block;
-    vertical-align: middle;
-
-    /deep/ .el-input__inner {
-      border-radius: 0;
-      border: 0;
-      padding-left: 0;
-      padding-right: 0;
-      box-shadow: none !important;
-      border-bottom: 1px solid #d9d9d9;
-      vertical-align: middle;
-    }
-  }
-
-  &.show {
-    .header-search-select {
-      width: 210px;
-      margin-left: 10px;
-    }
-  }
-}
-</style>
+<template>
+  <div :class="{'show':show}" class="header-search">
+    <svg-icon class-name="search-icon" icon-class="search" @click.stop="click" />
+    <el-select
+      ref="headerSearchSelect"
+      v-model="search"
+      :remote-method="querySearch"
+      filterable
+      default-first-option
+      remote
+      placeholder="Search"
+      class="header-search-select"
+      @change="change"
+    >
+      <el-option v-for="item in options" :key="item.path" :value="item" :label="item.title.join(' > ')" />
+    </el-select>
+  </div>
+</template>
+
+<script>
+// fuse is a lightweight fuzzy-search module
+// make search results more in line with expectations
+import Fuse from 'fuse.js'
+import path from 'path'
+
+export default {
+  name: 'HeaderSearch',
+  data() {
+    return {
+      search: '',
+      options: [],
+      searchPool: [],
+      show: false,
+      fuse: undefined
+    }
+  },
+  computed: {
+    routes() {
+      return this.$store.getters.permission_routes
+    }
+  },
+  watch: {
+    routes() {
+      this.searchPool = this.generateRoutes(this.routes)
+    },
+    searchPool(list) {
+      this.initFuse(list)
+    },
+    show(value) {
+      if (value) {
+        document.body.addEventListener('click', this.close)
+      } else {
+        document.body.removeEventListener('click', this.close)
+      }
+    }
+  },
+  mounted() {
+    this.searchPool = this.generateRoutes(this.routes)
+  },
+  methods: {
+    click() {
+      this.show = !this.show
+      if (this.show) {
+        this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.focus()
+      }
+    },
+    close() {
+      this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.blur()
+      this.options = []
+      this.show = false
+    },
+    change(val) {
+      if(this.ishttp(val.path)) {
+        // http(s):// 路径新窗口打开
+        window.open(val.path, "_blank");
+      } else {
+        this.$router.push(val.path)
+      }
+      this.search = ''
+      this.options = []
+      this.$nextTick(() => {
+        this.show = false
+      })
+    },
+    initFuse(list) {
+      this.fuse = new Fuse(list, {
+        shouldSort: true,
+        threshold: 0.4,
+        location: 0,
+        distance: 100,
+        maxPatternLength: 32,
+        minMatchCharLength: 1,
+        keys: [{
+          name: 'title',
+          weight: 0.7
+        }, {
+          name: 'path',
+          weight: 0.3
+        }]
+      })
+    },
+    // Filter out the routes that can be displayed in the sidebar
+    // And generate the internationalized title
+    generateRoutes(routes, basePath = '/', prefixTitle = []) {
+      let res = []
+
+      for (const router of routes) {
+        // skip hidden router
+        if (router.hidden) { continue }
+
+        const data = {
+          path: !this.ishttp(router.path) ? path.resolve(basePath, router.path) : router.path,
+          title: [...prefixTitle]
+        }
+
+        if (router.meta && router.meta.title) {
+          data.title = [...data.title, router.meta.title]
+
+          if (router.redirect !== 'noRedirect') {
+            // only push the routes with title
+            // special case: need to exclude parent router without redirect
+            res.push(data)
+          }
+        }
+
+        // recursive child routes
+        if (router.children) {
+          const tempRoutes = this.generateRoutes(router.children, data.path, data.title)
+          if (tempRoutes.length >= 1) {
+            res = [...res, ...tempRoutes]
+          }
+        }
+      }
+      return res
+    },
+    querySearch(query) {
+      if (query !== '') {
+        this.options = this.fuse.search(query)
+      } else {
+        this.options = []
+      }
+    },
+    ishttp(url) {
+      return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.header-search {
+  font-size: 0 !important;
+
+  .search-icon {
+    cursor: pointer;
+    font-size: 18px;
+    vertical-align: middle;
+  }
+
+  .header-search-select {
+    font-size: 18px;
+    transition: width 0.2s;
+    width: 0;
+    overflow: hidden;
+    background: transparent;
+    border-radius: 0;
+    display: inline-block;
+    vertical-align: middle;
+
+    /deep/ .el-input__inner {
+      border-radius: 0;
+      border: 0;
+      padding-left: 0;
+      padding-right: 0;
+      box-shadow: none !important;
+      border-bottom: 1px solid #d9d9d9;
+      vertical-align: middle;
+    }
+  }
+
+  &.show {
+    .header-search-select {
+      width: 210px;
+      margin-left: 10px;
+    }
+  }
+}
+</style>

+ 68 - 68
src/components/IconSelect/index.vue

@@ -1,68 +1,68 @@
-<!-- @author zhengjie -->
-<template>
-  <div class="icon-body">
-    <el-input v-model="name" style="position: relative;" clearable placeholder="请输入图标名称" @clear="filterIcons" @input.native="filterIcons">
-      <i slot="suffix" class="el-icon-search el-input__icon" />
-    </el-input>
-    <div class="icon-list">
-      <div v-for="(item, index) in iconList" :key="index" @click="selectedIcon(item)">
-        <svg-icon :icon-class="item" style="height: 30px;width: 16px;" />
-        <span>{{ item }}</span>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import icons from './requireIcons'
-export default {
-  name: 'IconSelect',
-  data() {
-    return {
-      name: '',
-      iconList: icons
-    }
-  },
-  methods: {
-    filterIcons() {
-      this.iconList = icons
-      if (this.name) {
-        this.iconList = this.iconList.filter(item => item.includes(this.name))
-      }
-    },
-    selectedIcon(name) {
-      this.$emit('selected', name)
-      document.body.click()
-    },
-    reset() {
-      this.name = ''
-      this.iconList = icons
-    }
-  }
-}
-</script>
-
-<style rel="stylesheet/scss" lang="scss" scoped>
-  .icon-body {
-    width: 100%;
-    padding: 10px;
-    .icon-list {
-      height: 200px;
-      overflow-y: scroll;
-      div {
-        height: 30px;
-        line-height: 30px;
-        margin-bottom: -5px;
-        cursor: pointer;
-        width: 33%;
-        float: left;
-      }
-      span {
-        display: inline-block;
-        vertical-align: -0.15em;
-        fill: currentColor;
-        overflow: hidden;
-      }
-    }
-  }
-</style>
+<!-- @author zhengjie -->
+<template>
+  <div class="icon-body">
+    <el-input v-model="name" style="position: relative;" clearable placeholder="请输入图标名称" @clear="filterIcons" @input.native="filterIcons">
+      <i slot="suffix" class="el-icon-search el-input__icon" />
+    </el-input>
+    <div class="icon-list">
+      <div v-for="(item, index) in iconList" :key="index" @click="selectedIcon(item)">
+        <svg-icon :icon-class="item" style="height: 30px;width: 16px;" />
+        <span>{{ item }}</span>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import icons from './requireIcons'
+export default {
+  name: 'IconSelect',
+  data() {
+    return {
+      name: '',
+      iconList: icons
+    }
+  },
+  methods: {
+    filterIcons() {
+      this.iconList = icons
+      if (this.name) {
+        this.iconList = this.iconList.filter(item => item.includes(this.name))
+      }
+    },
+    selectedIcon(name) {
+      this.$emit('selected', name)
+      document.body.click()
+    },
+    reset() {
+      this.name = ''
+      this.iconList = icons
+    }
+  }
+}
+</script>
+
+<style rel="stylesheet/scss" lang="scss" scoped>
+  .icon-body {
+    width: 100%;
+    padding: 10px;
+    .icon-list {
+      height: 200px;
+      overflow-y: scroll;
+      div {
+        height: 30px;
+        line-height: 30px;
+        margin-bottom: -5px;
+        cursor: pointer;
+        width: 33%;
+        float: left;
+      }
+      span {
+        display: inline-block;
+        vertical-align: -0.15em;
+        fill: currentColor;
+        overflow: hidden;
+      }
+    }
+  }
+</style>

+ 11 - 11
src/components/IconSelect/requireIcons.js

@@ -1,11 +1,11 @@
-
-const req = require.context('../../assets/icons/svg', false, /\.svg$/)
-const requireAll = requireContext => requireContext.keys()
-
-const re = /\.\/(.*)\.svg/
-
-const icons = requireAll(req).map(i => {
-  return i.match(re)[1]
-})
-
-export default icons
+
+const req = require.context('../../assets/icons/svg', false, /\.svg$/)
+const requireAll = requireContext => requireContext.keys()
+
+const re = /\.\/(.*)\.svg/
+
+const icons = requireAll(req).map(i => {
+  return i.match(re)[1]
+})
+
+export default icons

+ 389 - 389
src/components/Material/index.vue

@@ -1,389 +1,389 @@
-<template>
-  <div v-if="type == 'image'">
-    <ul v-for="(item,index) in value" :key="index" class="el-upload-list el-upload-list--picture-card">
-      <li tabindex="0" class="el-upload-list__item is-ready" :style="'width: '+width+'px;height: '+height+'px'">
-        <div>
-          <img :src="item" alt="" class="el-upload-list__item-thumbnail">
-          <span class="el-upload-list__item-actions">
-            <span v-if="index != 0" class="el-upload-list__item-preview" @click="moveMaterial(index,'up')">
-              <i class="el-icon-back" />
-            </span>
-            <span class="el-upload-list__item-preview" @click="zoomMaterial(index)">
-              <i class="el-icon-view" />
-            </span>
-            <span class="el-upload-list__item-delete" @click="deleteMaterial(index)">
-              <i class="el-icon-delete" />
-            </span>
-            <span v-if="index != value.length-1" class="el-upload-list__item-preview" @click="moveMaterial(index,'down')">
-              <i class="el-icon-right" />
-            </span>
-          </span>
-        </div>
-      </li>
-    </ul>
-    <div v-if="num > value.length" tabindex="0" class="el-upload el-upload--picture-card" :style="'width: '+width+'px;height: '+height+'px;'+'line-height:'+height+'px;'" @click="toSeleteMaterial">
-      <i class="el-icon-plus" />
-    </div>
-    <!-- 查看 -->
-    <el-dialog
-      append-to-body
-      :visible.sync="dialogVisible"
-      width="35%"
-    >
-      <img :src="url" alt="" style="width: 100%">
-    </el-dialog>
-    <!-- 素材列表 -->
-    <el-dialog
-      title="图片素材库"
-      append-to-body
-      :visible.sync="listDialogVisible"
-      width="70%"
-    >
-      <el-container>
-        <el-aside width="unset">
-          <div style="margin-bottom: 10px">
-            <el-button
-              class="el-icon-plus"
-              size="small"
-              @click="materialgroupAdd()"
-            >
-              添加分组
-            </el-button>
-          </div>
-          <div class="group-list">
-            <div class="group-item" v-for="(group) in materialGroupList">
-                <el-button  @click="selectGroup(group)" type="primary" plain >{{group.name}}</el-button>
-            </div>
-          </div>
-        </el-aside>
-        <el-main>
-          <el-card>
-            <div slot="header">
-              <el-row>
-                <el-col :span="12">
-                  <span>{{ materialGroup.name }}</span>
-                  <span v-if="materialGroup.groupId >0">
-                    <el-button size="small" type="text" class="el-icon-edit" style="margin-left: 10px;" @click="materialgroupEdit(materialGroup)">重命名</el-button>
-                    <el-button size="small" type="text" class="el-icon-delete" style="margin-left: 10px;color: red" @click="materialgroupDelete(materialGroup)">删除</el-button>
-                  </span>
-                </el-col>
-                <el-col :span="12" style="text-align: right;">
-                  <el-upload
-                    :action="uploadUrl"
-                    :file-list="[]"
-                    :on-progress="handleProgress"
-                    :before-upload="beforeUpload"
-                    :on-success="handleSuccess"
-                    :data="{type: 1}"
-                    multiple
-                  >
-                    <el-button size="small" type="primary">批量上传</el-button>
-                  </el-upload>
-                </el-col>
-              </el-row>
-            </div>
-            <div v-loading="tableLoading">
-              <el-alert
-                v-if="tableData.length <= 0"
-                title="暂无数据"
-                type="info"
-                :closable="false"
-                center
-                show-icon
-              />
-              <el-row :gutter="5">
-                <el-checkbox-group v-model="urls" :max="num - value.length">
-                  <el-col v-for="(item,index) in tableData" :key="index" :span="4">
-                    <el-card :body-style="{ padding: '5px' }">
-                      <el-image
-                        style="width: 100%;height: 100px"
-                        :src="item.url"
-                        fit="contain"
-                        :preview-src-list="[item.url]"
-                        :z-index="9999"
-                      />
-                      <div>
-                        <el-checkbox class="material-name" :label="item.url">
-                          选择
-                        </el-checkbox>
-                        <el-row>
-                          <el-col :span="24" class="col-do">
-                            <el-button type="text" size="medium" @click="materialDel(item)">删除</el-button>
-                          </el-col>
-                        </el-row>
-
-                      </div>
-                    </el-card>
-                  </el-col>
-                </el-checkbox-group>
-              </el-row>
-               <pagination
-                  v-show="total>0"
-                  :total="total"
-                  :page.sync="queryParams.pageNum"
-                  :limit.sync="queryParams.pageSize"
-                  @pagination="getMaterialList"
-                />
-               
-            </div>
-          </el-card>
-        </el-main>
-      </el-container>
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="listDialogVisible = false">取 消</el-button>
-        <el-button type="primary" @click="submit">确 定</el-button>
-      </span>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listMaterial, getMaterial, delMaterial, addMaterial, updateMaterial, exportMaterial } from "@/api/store/material";
-import { getAllMaterialGroup,listMaterialGroup, getMaterialGroup, delMaterialGroup, addMaterialGroup, updateMaterialGroup, exportMaterialGroup } from "@/api/store/materialGroup";
-export default {
-  name: 'ImageSelect',
-  props: {
-    // 素材数据
-    value: {
-      type: Array,
-      default() {
-        return []
-      }
-    },
-    // 素材类型
-    type: {
-      type: String
-    },
-    // 素材限制数量,默认5个
-    num: {
-      type: Number,
-      default() {
-        return 5
-      }
-    },
-    // 宽度
-    width: {
-      type: Number,
-      default() {
-        return 150
-      }
-    },
-    // 宽度
-    height: {
-      type: Number,
-      default() {
-        return 150
-      }
-    }
-  },
-  data() {
-    return {
-      uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
-      dialogVisible: false,
-      url: '',
-      listDialogVisible: false,
-      materialGroupList: [],
-      materialGroupLoading: false,
-      materialGroup:{},
-      tableData: [],
-      resultNumber: 0,
-      total: 0,
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        type: null,
-        groupId: null,
-        name: null,
-        url: null,
-        isDel: null,
-        createUserId: null,
-      },
-      tableLoading: false,
-      urls: []
-    }
-  },
-  mounted(){
-    this.getAllMaterialGroup();
-  },
-  methods: {
-    selectGroup(item){
-      this.materialGroup=item;
-      this.queryParams.groupId=item.groupId;
-      this.getMaterialList();
-    },
-    materialgroupAdd() {
-      const that = this
-      this.$prompt('请输入分组名', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消'
-      }).then(({ value }) => {
-        addMaterialGroup({
-          name: value
-        }).then(function() {
-          that.materialGroup={};
-          that.getAllMaterialGroup()
-        })
-      }).catch(() => {
-
-      })
-    },
-    materialgroupDelete(materialgroupObj) {
-      const that = this
-      this.$confirm('是否确认删除该分组?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(function() {
-        delMaterialGroup(materialgroupObj.groupId)
-          .then(function() {
-            that.materialGroup={};
-            that.getAllMaterialGroup()
-          })
-      })
-    },
-    materialgroupEdit(materialgroupObj) {
-      const that = this
-      this.$prompt('请输入分组名', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        inputValue: materialgroupObj.name
-      }).then(({ value }) => {
-        updateMaterialGroup({
-          groupId: materialgroupObj.groupId,
-          name: value
-        }).then(function() {
-          that.materialGroup={};
-          that.getAllMaterialGroup()
-        })
-      }).catch(() => {
-
-      })
-    },
-    getAllMaterialGroup() {
-      this.materialGroupLoading = true;
-      getAllMaterialGroup({}).then(response => {
-        this.materialGroupList = response.data
-        console.log(this.materialGroupList)
-        this.materialGroupLoading = false;
-      });
-    },
-    getMaterialList() {
-      this.tableLoading = true;
-      listMaterial(this.queryParams).then(response => {
-        this.tableData = response.rows;
-        this.total = response.total;
-        this.tableLoading = false;
-      });
-    },
-    moveMaterial(index, type) {
-      if (type == 'up') {
-        const tempOption = this.value[index - 1]
-        this.$set(this.value, index - 1, this.value[index])
-        this.$set(this.value, index, tempOption)
-      }
-      if (type == 'down') {
-        const tempOption = this.value[index + 1]
-        this.$set(this.value, index + 1, this.value[index])
-        this.$set(this.value, index, tempOption)
-      }
-    },
-    zoomMaterial(index) {
-      this.dialogVisible = true
-      this.url = this.value[index]
-    },
-    deleteMaterial(index) {
-      const that = this
-      this.$confirm('是否确认删除?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(function() {
-        that.value.splice(index, 1)
-        that.urls = []
-      })
-    },
-    toSeleteMaterial() {
-      this.listDialogVisible = true
-      this.getAllMaterialGroup()
-      this.getMaterialList();
-    },
-    materialDel(item) {
-      const that = this
-      this.$confirm('是否确认删除该素材?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(function() {
-        delMaterial(item.materialId)
-          .then(function() {
-            that.queryParams.pageNum=0;
-            that.getMaterialList();
-          })
-      })
-    },
-    handleProgress(event, file, fileList) {
-    },
-    handleSuccess(response, file, fileList) {
-      const that = this
-      addMaterial({
-        type: '1',
-        groupId: this.queryParams.groupId,
-        name: file.name,
-        url: response.url
-      }).then(() => {
-        this.resultNumber++
-        if (fileList.length === this.resultNumber) {
-          that.getMaterialList()
-          this.resultNumber = 0
-        }
-      })
-    },
-    beforeUpload(file) {
-      const isPic =
-        file.type === 'image/jpeg' ||
-        file.type === 'image/png' ||
-        file.type === 'image/gif' ||
-        file.type === 'image/jpg'
-      const isLt2M = file.size / 1024 / 1024 < 2
-      if (!isPic) {
-        this.$message.error('上传图片只能是 JPG、JPEG、PNG、GIF 格式!')
-        return false
-      }
-      if (!isLt2M) {
-        this.$message.error('上传头像图片大小不能超过 2MB!')
-      }
-      return isPic && isLt2M
-    },
-    submit() {
-      this.urls.forEach(item => {
-        this.$set(this.value, this.value.length, item)
-      })
-      this.listDialogVisible = false
-    }
-  }
-}
-</script>
-
-<style rel="stylesheet/scss" lang="scss" scoped>
-  ::v-deep .el-icon-circle-close{
-    color: red;
-  }
-  .material-name{
-    padding: 8px 0px;
-  }
-  .col-do{
-    text-align: center;
-  }
-  .button-do{
-    padding: unset!important;
-    font-size: 12px;
-  }
-  .group-list{
-    display: flex;
-    flex-direction:column;
-    align-items: flex-start;
-  }
-  .group-item{
-    margin: 5px;
-  }
-</style>
+<template>
+  <div v-if="type == 'image'">
+    <ul v-for="(item,index) in value" :key="index" class="el-upload-list el-upload-list--picture-card">
+      <li tabindex="0" class="el-upload-list__item is-ready" :style="'width: '+width+'px;height: '+height+'px'">
+        <div>
+          <img :src="item" alt="" class="el-upload-list__item-thumbnail">
+          <span class="el-upload-list__item-actions">
+            <span v-if="index != 0" class="el-upload-list__item-preview" @click="moveMaterial(index,'up')">
+              <i class="el-icon-back" />
+            </span>
+            <span class="el-upload-list__item-preview" @click="zoomMaterial(index)">
+              <i class="el-icon-view" />
+            </span>
+            <span class="el-upload-list__item-delete" @click="deleteMaterial(index)">
+              <i class="el-icon-delete" />
+            </span>
+            <span v-if="index != value.length-1" class="el-upload-list__item-preview" @click="moveMaterial(index,'down')">
+              <i class="el-icon-right" />
+            </span>
+          </span>
+        </div>
+      </li>
+    </ul>
+    <div v-if="num > value.length" tabindex="0" class="el-upload el-upload--picture-card" :style="'width: '+width+'px;height: '+height+'px;'+'line-height:'+height+'px;'" @click="toSeleteMaterial">
+      <i class="el-icon-plus" />
+    </div>
+    <!-- 查看 -->
+    <el-dialog
+      append-to-body
+      :visible.sync="dialogVisible"
+      width="35%"
+    >
+      <img :src="url" alt="" style="width: 100%">
+    </el-dialog>
+    <!-- 素材列表 -->
+    <el-dialog
+      title="图片素材库"
+      append-to-body
+      :visible.sync="listDialogVisible"
+      width="70%"
+    >
+      <el-container>
+        <el-aside width="unset">
+          <div style="margin-bottom: 10px">
+            <el-button
+              class="el-icon-plus"
+              size="small"
+              @click="materialgroupAdd()"
+            >
+              添加分组
+            </el-button>
+          </div>
+          <div class="group-list">
+            <div class="group-item" v-for="(group) in materialGroupList">
+                <el-button  @click="selectGroup(group)" type="primary" plain >{{group.name}}</el-button>
+            </div>
+          </div>
+        </el-aside>
+        <el-main>
+          <el-card>
+            <div slot="header">
+              <el-row>
+                <el-col :span="12">
+                  <span>{{ materialGroup.name }}</span>
+                  <span v-if="materialGroup.groupId >0">
+                    <el-button size="small" type="text" class="el-icon-edit" style="margin-left: 10px;" @click="materialgroupEdit(materialGroup)">重命名</el-button>
+                    <el-button size="small" type="text" class="el-icon-delete" style="margin-left: 10px;color: red" @click="materialgroupDelete(materialGroup)">删除</el-button>
+                  </span>
+                </el-col>
+                <el-col :span="12" style="text-align: right;">
+                  <el-upload
+                    :action="uploadUrl"
+                    :file-list="[]"
+                    :on-progress="handleProgress"
+                    :before-upload="beforeUpload"
+                    :on-success="handleSuccess"
+                    :data="{type: 1}"
+                    multiple
+                  >
+                    <el-button size="small" type="primary">批量上传</el-button>
+                  </el-upload>
+                </el-col>
+              </el-row>
+            </div>
+            <div v-loading="tableLoading">
+              <el-alert
+                v-if="tableData.length <= 0"
+                title="暂无数据"
+                type="info"
+                :closable="false"
+                center
+                show-icon
+              />
+              <el-row :gutter="5">
+                <el-checkbox-group v-model="urls" :max="num - value.length">
+                  <el-col v-for="(item,index) in tableData" :key="index" :span="4">
+                    <el-card :body-style="{ padding: '5px' }">
+                      <el-image
+                        style="width: 100%;height: 100px"
+                        :src="item.url"
+                        fit="contain"
+                        :preview-src-list="[item.url]"
+                        :z-index="9999"
+                      />
+                      <div>
+                        <el-checkbox class="material-name" :label="item.url">
+                          选择
+                        </el-checkbox>
+                        <el-row>
+                          <el-col :span="24" class="col-do">
+                            <el-button type="text" size="medium" @click="materialDel(item)">删除</el-button>
+                          </el-col>
+                        </el-row>
+
+                      </div>
+                    </el-card>
+                  </el-col>
+                </el-checkbox-group>
+              </el-row>
+               <pagination
+                  v-show="total>0"
+                  :total="total"
+                  :page.sync="queryParams.pageNum"
+                  :limit.sync="queryParams.pageSize"
+                  @pagination="getMaterialList"
+                />
+               
+            </div>
+          </el-card>
+        </el-main>
+      </el-container>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="listDialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submit">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listMaterial, getMaterial, delMaterial, addMaterial, updateMaterial, exportMaterial } from "@/api/store/material";
+import { getAllMaterialGroup,listMaterialGroup, getMaterialGroup, delMaterialGroup, addMaterialGroup, updateMaterialGroup, exportMaterialGroup } from "@/api/store/materialGroup";
+export default {
+  name: 'ImageSelect',
+  props: {
+    // 素材数据
+    value: {
+      type: Array,
+      default() {
+        return []
+      }
+    },
+    // 素材类型
+    type: {
+      type: String
+    },
+    // 素材限制数量,默认5个
+    num: {
+      type: Number,
+      default() {
+        return 5
+      }
+    },
+    // 宽度
+    width: {
+      type: Number,
+      default() {
+        return 150
+      }
+    },
+    // 宽度
+    height: {
+      type: Number,
+      default() {
+        return 150
+      }
+    }
+  },
+  data() {
+    return {
+      uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
+      dialogVisible: false,
+      url: '',
+      listDialogVisible: false,
+      materialGroupList: [],
+      materialGroupLoading: false,
+      materialGroup:{},
+      tableData: [],
+      resultNumber: 0,
+      total: 0,
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        type: null,
+        groupId: null,
+        name: null,
+        url: null,
+        isDel: null,
+        createUserId: null,
+      },
+      tableLoading: false,
+      urls: []
+    }
+  },
+  mounted(){
+    this.getAllMaterialGroup();
+  },
+  methods: {
+    selectGroup(item){
+      this.materialGroup=item;
+      this.queryParams.groupId=item.groupId;
+      this.getMaterialList();
+    },
+    materialgroupAdd() {
+      const that = this
+      this.$prompt('请输入分组名', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消'
+      }).then(({ value }) => {
+        addMaterialGroup({
+          name: value
+        }).then(function() {
+          that.materialGroup={};
+          that.getAllMaterialGroup()
+        })
+      }).catch(() => {
+
+      })
+    },
+    materialgroupDelete(materialgroupObj) {
+      const that = this
+      this.$confirm('是否确认删除该分组?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        delMaterialGroup(materialgroupObj.groupId)
+          .then(function() {
+            that.materialGroup={};
+            that.getAllMaterialGroup()
+          })
+      })
+    },
+    materialgroupEdit(materialgroupObj) {
+      const that = this
+      this.$prompt('请输入分组名', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        inputValue: materialgroupObj.name
+      }).then(({ value }) => {
+        updateMaterialGroup({
+          groupId: materialgroupObj.groupId,
+          name: value
+        }).then(function() {
+          that.materialGroup={};
+          that.getAllMaterialGroup()
+        })
+      }).catch(() => {
+
+      })
+    },
+    getAllMaterialGroup() {
+      this.materialGroupLoading = true;
+      getAllMaterialGroup({}).then(response => {
+        this.materialGroupList = response.data
+        console.log(this.materialGroupList)
+        this.materialGroupLoading = false;
+      });
+    },
+    getMaterialList() {
+      this.tableLoading = true;
+      listMaterial(this.queryParams).then(response => {
+        this.tableData = response.rows;
+        this.total = response.total;
+        this.tableLoading = false;
+      });
+    },
+    moveMaterial(index, type) {
+      if (type == 'up') {
+        const tempOption = this.value[index - 1]
+        this.$set(this.value, index - 1, this.value[index])
+        this.$set(this.value, index, tempOption)
+      }
+      if (type == 'down') {
+        const tempOption = this.value[index + 1]
+        this.$set(this.value, index + 1, this.value[index])
+        this.$set(this.value, index, tempOption)
+      }
+    },
+    zoomMaterial(index) {
+      this.dialogVisible = true
+      this.url = this.value[index]
+    },
+    deleteMaterial(index) {
+      const that = this
+      this.$confirm('是否确认删除?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        that.value.splice(index, 1)
+        that.urls = []
+      })
+    },
+    toSeleteMaterial() {
+      this.listDialogVisible = true
+      this.getAllMaterialGroup()
+      this.getMaterialList();
+    },
+    materialDel(item) {
+      const that = this
+      this.$confirm('是否确认删除该素材?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        delMaterial(item.materialId)
+          .then(function() {
+            that.queryParams.pageNum=0;
+            that.getMaterialList();
+          })
+      })
+    },
+    handleProgress(event, file, fileList) {
+    },
+    handleSuccess(response, file, fileList) {
+      const that = this
+      addMaterial({
+        type: '1',
+        groupId: this.queryParams.groupId,
+        name: file.name,
+        url: response.url
+      }).then(() => {
+        this.resultNumber++
+        if (fileList.length === this.resultNumber) {
+          that.getMaterialList()
+          this.resultNumber = 0
+        }
+      })
+    },
+    beforeUpload(file) {
+      const isPic =
+        file.type === 'image/jpeg' ||
+        file.type === 'image/png' ||
+        file.type === 'image/gif' ||
+        file.type === 'image/jpg'
+      const isLt2M = file.size / 1024 / 1024 < 2
+      if (!isPic) {
+        this.$message.error('上传图片只能是 JPG、JPEG、PNG、GIF 格式!')
+        return false
+      }
+      if (!isLt2M) {
+        this.$message.error('上传头像图片大小不能超过 2MB!')
+      }
+      return isPic && isLt2M
+    },
+    submit() {
+      this.urls.forEach(item => {
+        this.$set(this.value, this.value.length, item)
+      })
+      this.listDialogVisible = false
+    }
+  }
+}
+</script>
+
+<style rel="stylesheet/scss" lang="scss" scoped>
+  ::v-deep .el-icon-circle-close{
+    color: red;
+  }
+  .material-name{
+    padding: 8px 0px;
+  }
+  .col-do{
+    text-align: center;
+  }
+  .button-do{
+    padding: unset!important;
+    font-size: 12px;
+  }
+  .group-list{
+    display: flex;
+    flex-direction:column;
+    align-items: flex-start;
+  }
+  .group-item{
+    margin: 5px;
+  }
+</style>

+ 369 - 369
src/components/Material/single.vue

@@ -1,369 +1,369 @@
-<template>
-  <div v-if="type == 'image'">
-    <div v-if="myValue != ''">
-      <ul class="el-upload-list el-upload-list--picture-card">
-        <li tabindex="0" class="el-upload-list__item is-ready" :style="'width: '+width+'px;height: '+height+'px'">
-          <div>
-            <img :src="myValue" alt="" class="el-upload-list__item-thumbnail">
-            <span class="el-upload-list__item-actions">
-              <span class="el-upload-list__item-delete" @click="deleteMaterial">
-                <i class="el-icon-delete" />
-              </span>
-            </span>
-          </div>
-        </li>
-      </ul>
-    </div>
-    <div  v-else tabindex="0" class="el-upload el-upload--picture-card" :style="'width: '+width+'px;height: '+height+'px;'+'line-height:'+height+'px;'" @click="toSeleteMaterial">
-      <svg-icon icon-class="add" class-name="card-panel-icon" />
-    </div>
-    <!-- 查看 -->
-    <el-dialog
-      append-to-body
-      :visible.sync="dialogVisible"
-      width="35%"
-    >
-      <img :src="url" alt="" style="width: 100%">
-    </el-dialog>
-    <!-- 素材列表 -->
-    <el-dialog
-      title="图片素材库"
-      append-to-body
-      :visible.sync="listDialogVisible"
-      width="70%"
-    >
-      <el-container>
-        <el-aside width="unset">
-          <div style="margin-bottom: 10px">
-            <el-button
-              class="el-icon-plus"
-              size="small"
-              @click="materialgroupAdd()"
-            >
-              添加分组
-            </el-button>
-          </div>
-          <div class="group-list">
-            <div class="group-item" v-for="(group) in materialGroupList">
-                <el-button  @click="selectGroup(group)" type="primary" plain >{{group.name}}</el-button>
-            </div>
-          </div>
-        </el-aside>
-        <el-main>
-          <el-card>
-            <div slot="header">
-              <el-row>
-                <el-col :span="12">
-                  <span>{{ materialGroup.name }}</span>
-                  <span v-if="materialGroup.groupId >0">
-                    <el-button size="small" type="text" class="el-icon-edit" style="margin-left: 10px;" @click="materialgroupEdit(materialGroup)">重命名</el-button>
-                    <el-button size="small" type="text" class="el-icon-delete" style="margin-left: 10px;color: red" @click="materialgroupDelete(materialGroup)">删除</el-button>
-                  </span>
-                </el-col>
-                <el-col :span="12" style="text-align: right;">
-                  <el-upload
-                    :action="uploadUrl"
-                    :file-list="[]"
-                    :on-progress="handleProgress"
-                    :before-upload="beforeUpload"
-                    :on-success="handleSuccess"
-                    :data="{type: 1}"
-                    multiple
-                  >
-                    <el-button size="small" type="primary">批量上传</el-button>
-                  </el-upload>
-                </el-col>
-              </el-row>
-            </div>
-            <div v-loading="tableLoading">
-              <el-alert
-                v-if="tableData.length <= 0"
-                title="暂无数据"
-                type="info"
-                :closable="false"
-                center
-                show-icon
-              />
-              <el-row :gutter="5">
-                <el-checkbox-group v-model="urls" :max="num - myValue.length">
-                  <el-col v-for="(item,index) in tableData" :key="index" :span="4">
-                    <el-card :body-style="{ padding: '5px' }">
-                      <el-image
-                        style="width: 100%;height: 100px"
-                        :src="item.url"
-                        fit="contain"
-                        :preview-src-list="[item.url]"
-                        :z-index="9999"
-                      />
-                      <div>
-                        <el-checkbox class="material-name" :label="item.url">
-                          选择
-                        </el-checkbox>
-                        <el-row>
-                          <el-col :span="24" class="col-do">
-                            <el-button type="text" size="medium" @click="materialDel(item)">删除</el-button>
-                          </el-col>
-                        </el-row>
-
-                      </div>
-                    </el-card>
-                  </el-col>
-                </el-checkbox-group>
-              </el-row>
-               <pagination
-                  v-show="total>0"
-                  :total="total"
-                  :page.sync="queryParams.pageNum"
-                  :limit.sync="queryParams.pageSize"
-                  @pagination="getMaterialList"
-                />
-               
-            </div>
-          </el-card>
-        </el-main>
-      </el-container>
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="listDialogVisible = false">取 消</el-button>
-        <el-button type="primary" @click="submit">确 定</el-button>
-      </span>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listMaterial, getMaterial, delMaterial, addMaterial, updateMaterial, exportMaterial } from "@/api/store/material";
-import { getAllMaterialGroup,listMaterialGroup, getMaterialGroup, delMaterialGroup, addMaterialGroup, updateMaterialGroup, exportMaterialGroup } from "@/api/store/materialGroup";
-export default {
-  name: 'ImageSelect',
-  props: {
-    // 素材数据
-    value: {
-      type: String
-    },
-    // 素材类型
-    type: {
-      type: String
-    },
-    // 素材限制数量,默认5个
-    num: {
-      type: Number,
-      default() {
-        return 5
-      }
-    },
-    // 宽度
-    width: {
-      type: Number,
-      default() {
-        return 150
-      }
-    },
-    // 宽度
-    height: {
-      type: Number,
-      default() {
-        return 150
-      }
-    }
-  },
-  watch: {
-    value: function(val) {
-      this.myValue = val
-    }
-  },
-  data() {
-    return {
-      myValue: this.value,
-      uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
-      dialogVisible: false,
-      url: '',
-      listDialogVisible: false,
-      materialGroupList: [],
-      materialGroupLoading: false,
-      materialGroup:{},
-      tableData: [],
-      resultNumber: 0,
-      total: 0,
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        type: null,
-        groupId: null,
-        name: null,
-        url: null,
-        isDel: null,
-        createUserId: null,
-      },
-      tableLoading: false,
-      urls: []
-    }
-  },
-  mounted(){
-    this.getAllMaterialGroup();
-  },
-  methods: {
-    selectGroup(item){
-      this.materialGroup=item;
-      this.queryParams.groupId=item.groupId;
-      this.getMaterialList();
-    },
-    materialgroupAdd() {
-      const that = this
-      this.$prompt('请输入分组名', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消'
-      }).then(({ value }) => {
-        addMaterialGroup({
-          name: value
-        }).then(function() {
-          that.materialGroup={};
-          that.getAllMaterialGroup()
-        })
-      }).catch(() => {
-
-      })
-    },
-    materialgroupDelete(materialgroupObj) {
-      const that = this
-      this.$confirm('是否确认删除该分组?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(function() {
-        delMaterialGroup(materialgroupObj.groupId)
-          .then(function() {
-            that.materialGroup={};
-            that.getAllMaterialGroup()
-          })
-      })
-    },
-    materialgroupEdit(materialgroupObj) {
-      const that = this
-      this.$prompt('请输入分组名', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        inputValue: materialgroupObj.name
-      }).then(({ value }) => {
-        updateMaterialGroup({
-          groupId: materialgroupObj.groupId,
-          name: value
-        }).then(function() {
-          that.materialGroup={};
-          that.getAllMaterialGroup()
-        })
-      }).catch(() => {
-
-      })
-    },
-    getAllMaterialGroup() {
-      this.materialGroupLoading = true;
-      getAllMaterialGroup({}).then(response => {
-        this.materialGroupList = response.data
-        console.log(this.materialGroupList)
-        this.materialGroupLoading = false;
-      });
-    },
-    getMaterialList() {
-      this.tableLoading = true;
-      listMaterial(this.queryParams).then(response => {
-        this.tableData = response.rows;
-        this.total = response.total;
-        this.tableLoading = false;
-      });
-    },
-    deleteMaterial() {
-      const that = this
-      this.$confirm('是否确认删除?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(function() {
-        that.myValue = ''
-        that.urls = []
-      })
-    },
-    toSeleteMaterial() {
-      this.listDialogVisible = true
-      this.getAllMaterialGroup()
-      this.getMaterialList();
-    },
-    materialDel(item) {
-      const that = this
-      this.$confirm('是否确认删除该素材?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(function() {
-        delMaterial(item.materialId)
-          .then(function() {
-            that.queryParams.pageNum=0;
-            that.getMaterialList();
-          })
-      })
-    },
-    handleProgress(event, file, fileList) {
-    },
-    handleSuccess(response, file, fileList) {
-      const that = this
-      addMaterial({
-        type: '1',
-        groupId: this.queryParams.groupId,
-        name: file.name,
-        url: response.url
-      }).then(() => {
-        this.resultNumber++
-        if (fileList.length === this.resultNumber) {
-          that.getMaterialList()
-          this.resultNumber = 0
-        }
-      })
-    },
-    beforeUpload(file) {
-      const isPic =
-        file.type === 'image/jpeg' ||
-        file.type === 'image/png' ||
-        file.type === 'image/gif' ||
-        file.type === 'image/jpg'
-      const isLt2M = file.size / 1024 / 1024 < 2
-      if (!isPic) {
-        this.$message.error('上传图片只能是 JPG、JPEG、PNG、GIF 格式!')
-        return false
-      }
-      if (!isLt2M) {
-        this.$message.error('上传头像图片大小不能超过 2MB!')
-      }
-      return isPic && isLt2M
-    },
-    submit() {
-      this.myValue = this.urls[0]
-      this.$emit('input', this.urls[0])
-      this.listDialogVisible = false
-    }
-  }
-}
-</script>
-
-<style rel="stylesheet/scss" lang="scss" scoped>
-  ::v-deep .el-icon-circle-close{
-    color: red;
-  }
-  .material-name{
-    padding: 8px 0px;
-  }
-  .col-do{
-    text-align: center;
-  }
-  .button-do{
-    padding: unset!important;
-    font-size: 12px;
-  }
-  .group-list{
-    display: flex;
-    flex-direction:column;
-    align-items: flex-start;
-  }
-  .group-item{
-    margin: 5px;
-    
-  }
-</style>
+<template>
+  <div v-if="type == 'image'">
+    <div v-if="myValue != ''">
+      <ul class="el-upload-list el-upload-list--picture-card">
+        <li tabindex="0" class="el-upload-list__item is-ready" :style="'width: '+width+'px;height: '+height+'px'">
+          <div>
+            <img :src="myValue" alt="" class="el-upload-list__item-thumbnail">
+            <span class="el-upload-list__item-actions">
+              <span class="el-upload-list__item-delete" @click="deleteMaterial">
+                <i class="el-icon-delete" />
+              </span>
+            </span>
+          </div>
+        </li>
+      </ul>
+    </div>
+    <div  v-else tabindex="0" class="el-upload el-upload--picture-card" :style="'width: '+width+'px;height: '+height+'px;'+'line-height:'+height+'px;'" @click="toSeleteMaterial">
+      <svg-icon icon-class="add" class-name="card-panel-icon" />
+    </div>
+    <!-- 查看 -->
+    <el-dialog
+      append-to-body
+      :visible.sync="dialogVisible"
+      width="35%"
+    >
+      <img :src="url" alt="" style="width: 100%">
+    </el-dialog>
+    <!-- 素材列表 -->
+    <el-dialog
+      title="图片素材库"
+      append-to-body
+      :visible.sync="listDialogVisible"
+      width="70%"
+    >
+      <el-container>
+        <el-aside width="unset">
+          <div style="margin-bottom: 10px">
+            <el-button
+              class="el-icon-plus"
+              size="small"
+              @click="materialgroupAdd()"
+            >
+              添加分组
+            </el-button>
+          </div>
+          <div class="group-list">
+            <div class="group-item" v-for="(group) in materialGroupList">
+                <el-button  @click="selectGroup(group)" type="primary" plain >{{group.name}}</el-button>
+            </div>
+          </div>
+        </el-aside>
+        <el-main>
+          <el-card>
+            <div slot="header">
+              <el-row>
+                <el-col :span="12">
+                  <span>{{ materialGroup.name }}</span>
+                  <span v-if="materialGroup.groupId >0">
+                    <el-button size="small" type="text" class="el-icon-edit" style="margin-left: 10px;" @click="materialgroupEdit(materialGroup)">重命名</el-button>
+                    <el-button size="small" type="text" class="el-icon-delete" style="margin-left: 10px;color: red" @click="materialgroupDelete(materialGroup)">删除</el-button>
+                  </span>
+                </el-col>
+                <el-col :span="12" style="text-align: right;">
+                  <el-upload
+                    :action="uploadUrl"
+                    :file-list="[]"
+                    :on-progress="handleProgress"
+                    :before-upload="beforeUpload"
+                    :on-success="handleSuccess"
+                    :data="{type: 1}"
+                    multiple
+                  >
+                    <el-button size="small" type="primary">批量上传</el-button>
+                  </el-upload>
+                </el-col>
+              </el-row>
+            </div>
+            <div v-loading="tableLoading">
+              <el-alert
+                v-if="tableData.length <= 0"
+                title="暂无数据"
+                type="info"
+                :closable="false"
+                center
+                show-icon
+              />
+              <el-row :gutter="5">
+                <el-checkbox-group v-model="urls" :max="num - myValue.length">
+                  <el-col v-for="(item,index) in tableData" :key="index" :span="4">
+                    <el-card :body-style="{ padding: '5px' }">
+                      <el-image
+                        style="width: 100%;height: 100px"
+                        :src="item.url"
+                        fit="contain"
+                        :preview-src-list="[item.url]"
+                        :z-index="9999"
+                      />
+                      <div>
+                        <el-checkbox class="material-name" :label="item.url">
+                          选择
+                        </el-checkbox>
+                        <el-row>
+                          <el-col :span="24" class="col-do">
+                            <el-button type="text" size="medium" @click="materialDel(item)">删除</el-button>
+                          </el-col>
+                        </el-row>
+
+                      </div>
+                    </el-card>
+                  </el-col>
+                </el-checkbox-group>
+              </el-row>
+               <pagination
+                  v-show="total>0"
+                  :total="total"
+                  :page.sync="queryParams.pageNum"
+                  :limit.sync="queryParams.pageSize"
+                  @pagination="getMaterialList"
+                />
+               
+            </div>
+          </el-card>
+        </el-main>
+      </el-container>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="listDialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submit">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listMaterial, getMaterial, delMaterial, addMaterial, updateMaterial, exportMaterial } from "@/api/store/material";
+import { getAllMaterialGroup,listMaterialGroup, getMaterialGroup, delMaterialGroup, addMaterialGroup, updateMaterialGroup, exportMaterialGroup } from "@/api/store/materialGroup";
+export default {
+  name: 'ImageSelect',
+  props: {
+    // 素材数据
+    value: {
+      type: String
+    },
+    // 素材类型
+    type: {
+      type: String
+    },
+    // 素材限制数量,默认5个
+    num: {
+      type: Number,
+      default() {
+        return 5
+      }
+    },
+    // 宽度
+    width: {
+      type: Number,
+      default() {
+        return 150
+      }
+    },
+    // 宽度
+    height: {
+      type: Number,
+      default() {
+        return 150
+      }
+    }
+  },
+  watch: {
+    value: function(val) {
+      this.myValue = val
+    }
+  },
+  data() {
+    return {
+      myValue: this.value,
+      uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
+      dialogVisible: false,
+      url: '',
+      listDialogVisible: false,
+      materialGroupList: [],
+      materialGroupLoading: false,
+      materialGroup:{},
+      tableData: [],
+      resultNumber: 0,
+      total: 0,
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        type: null,
+        groupId: null,
+        name: null,
+        url: null,
+        isDel: null,
+        createUserId: null,
+      },
+      tableLoading: false,
+      urls: []
+    }
+  },
+  mounted(){
+    this.getAllMaterialGroup();
+  },
+  methods: {
+    selectGroup(item){
+      this.materialGroup=item;
+      this.queryParams.groupId=item.groupId;
+      this.getMaterialList();
+    },
+    materialgroupAdd() {
+      const that = this
+      this.$prompt('请输入分组名', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消'
+      }).then(({ value }) => {
+        addMaterialGroup({
+          name: value
+        }).then(function() {
+          that.materialGroup={};
+          that.getAllMaterialGroup()
+        })
+      }).catch(() => {
+
+      })
+    },
+    materialgroupDelete(materialgroupObj) {
+      const that = this
+      this.$confirm('是否确认删除该分组?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        delMaterialGroup(materialgroupObj.groupId)
+          .then(function() {
+            that.materialGroup={};
+            that.getAllMaterialGroup()
+          })
+      })
+    },
+    materialgroupEdit(materialgroupObj) {
+      const that = this
+      this.$prompt('请输入分组名', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        inputValue: materialgroupObj.name
+      }).then(({ value }) => {
+        updateMaterialGroup({
+          groupId: materialgroupObj.groupId,
+          name: value
+        }).then(function() {
+          that.materialGroup={};
+          that.getAllMaterialGroup()
+        })
+      }).catch(() => {
+
+      })
+    },
+    getAllMaterialGroup() {
+      this.materialGroupLoading = true;
+      getAllMaterialGroup({}).then(response => {
+        this.materialGroupList = response.data
+        console.log(this.materialGroupList)
+        this.materialGroupLoading = false;
+      });
+    },
+    getMaterialList() {
+      this.tableLoading = true;
+      listMaterial(this.queryParams).then(response => {
+        this.tableData = response.rows;
+        this.total = response.total;
+        this.tableLoading = false;
+      });
+    },
+    deleteMaterial() {
+      const that = this
+      this.$confirm('是否确认删除?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        that.myValue = ''
+        that.urls = []
+      })
+    },
+    toSeleteMaterial() {
+      this.listDialogVisible = true
+      this.getAllMaterialGroup()
+      this.getMaterialList();
+    },
+    materialDel(item) {
+      const that = this
+      this.$confirm('是否确认删除该素材?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        delMaterial(item.materialId)
+          .then(function() {
+            that.queryParams.pageNum=0;
+            that.getMaterialList();
+          })
+      })
+    },
+    handleProgress(event, file, fileList) {
+    },
+    handleSuccess(response, file, fileList) {
+      const that = this
+      addMaterial({
+        type: '1',
+        groupId: this.queryParams.groupId,
+        name: file.name,
+        url: response.url
+      }).then(() => {
+        this.resultNumber++
+        if (fileList.length === this.resultNumber) {
+          that.getMaterialList()
+          this.resultNumber = 0
+        }
+      })
+    },
+    beforeUpload(file) {
+      const isPic =
+        file.type === 'image/jpeg' ||
+        file.type === 'image/png' ||
+        file.type === 'image/gif' ||
+        file.type === 'image/jpg'
+      const isLt2M = file.size / 1024 / 1024 < 2
+      if (!isPic) {
+        this.$message.error('上传图片只能是 JPG、JPEG、PNG、GIF 格式!')
+        return false
+      }
+      if (!isLt2M) {
+        this.$message.error('上传头像图片大小不能超过 2MB!')
+      }
+      return isPic && isLt2M
+    },
+    submit() {
+      this.myValue = this.urls[0]
+      this.$emit('input', this.urls[0])
+      this.listDialogVisible = false
+    }
+  }
+}
+</script>
+
+<style rel="stylesheet/scss" lang="scss" scoped>
+  ::v-deep .el-icon-circle-close{
+    color: red;
+  }
+  .material-name{
+    padding: 8px 0px;
+  }
+  .col-do{
+    text-align: center;
+  }
+  .button-do{
+    padding: unset!important;
+    font-size: 12px;
+  }
+  .group-list{
+    display: flex;
+    flex-direction:column;
+    align-items: flex-start;
+  }
+  .group-item{
+    margin: 5px;
+    
+  }
+</style>

+ 101 - 101
src/components/Pagination/index.vue

@@ -1,101 +1,101 @@
-<template>
-  <div :class="{'hidden':hidden}" class="pagination-container">
-    <el-pagination
-      :background="background"
-      :current-page.sync="currentPage"
-      :page-size.sync="pageSize"
-      :layout="layout"
-      :page-sizes="pageSizes"
-      :total="total"
-      v-bind="$attrs"
-      @size-change="handleSizeChange"
-      @current-change="handleCurrentChange"
-    />
-  </div>
-</template>
-
-<script>
-import { scrollTo } from '@/utils/scroll-to'
-
-export default {
-  name: 'Pagination',
-  props: {
-    total: {
-      required: true,
-      type: Number
-    },
-    page: {
-      type: Number,
-      default: 1
-    },
-    limit: {
-      type: Number,
-      default: 20
-    },
-    pageSizes: {
-      type: Array,
-      default() {
-        return [10, 20, 30, 50,100,200]
-      }
-    },
-    layout: {
-      type: String,
-      default: 'total, sizes, prev, pager, next, jumper'
-    },
-    background: {
-      type: Boolean,
-      default: true
-    },
-    autoScroll: {
-      type: Boolean,
-      default: true
-    },
-    hidden: {
-      type: Boolean,
-      default: false
-    }
-  },
-  computed: {
-    currentPage: {
-      get() {
-        return this.page
-      },
-      set(val) {
-        this.$emit('update:page', val)
-      }
-    },
-    pageSize: {
-      get() {
-        return this.limit
-      },
-      set(val) {
-        this.$emit('update:limit', val)
-      }
-    }
-  },
-  methods: {
-    handleSizeChange(val) {
-      this.$emit('pagination', { page: this.currentPage, limit: val })
-      if (this.autoScroll) {
-        scrollTo(0, 800)
-      }
-    },
-    handleCurrentChange(val) {
-      this.$emit('pagination', { page: val, limit: this.pageSize })
-      if (this.autoScroll) {
-        scrollTo(0, 800)
-      }
-    }
-  }
-}
-</script>
-
-<style scoped>
-.pagination-container {
-  background: #fff;
-  padding: 32px 16px;
-}
-.pagination-container.hidden {
-  display: none;
-}
-</style>
+<template>
+  <div :class="{'hidden':hidden}" class="pagination-container">
+    <el-pagination
+      :background="background"
+      :current-page.sync="currentPage"
+      :page-size.sync="pageSize"
+      :layout="layout"
+      :page-sizes="pageSizes"
+      :total="total"
+      v-bind="$attrs"
+      @size-change="handleSizeChange"
+      @current-change="handleCurrentChange"
+    />
+  </div>
+</template>
+
+<script>
+import { scrollTo } from '@/utils/scroll-to'
+
+export default {
+  name: 'Pagination',
+  props: {
+    total: {
+      required: true,
+      type: Number
+    },
+    page: {
+      type: Number,
+      default: 1
+    },
+    limit: {
+      type: Number,
+      default: 20
+    },
+    pageSizes: {
+      type: Array,
+      default() {
+        return [10, 20, 30, 50,100,200]
+      }
+    },
+    layout: {
+      type: String,
+      default: 'total, sizes, prev, pager, next, jumper'
+    },
+    background: {
+      type: Boolean,
+      default: true
+    },
+    autoScroll: {
+      type: Boolean,
+      default: true
+    },
+    hidden: {
+      type: Boolean,
+      default: false
+    }
+  },
+  computed: {
+    currentPage: {
+      get() {
+        return this.page
+      },
+      set(val) {
+        this.$emit('update:page', val)
+      }
+    },
+    pageSize: {
+      get() {
+        return this.limit
+      },
+      set(val) {
+        this.$emit('update:limit', val)
+      }
+    }
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.$emit('pagination', { page: this.currentPage, limit: val })
+      if (this.autoScroll) {
+        scrollTo(0, 800)
+      }
+    },
+    handleCurrentChange(val) {
+      this.$emit('pagination', { page: val, limit: this.pageSize })
+      if (this.autoScroll) {
+        scrollTo(0, 800)
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+.pagination-container {
+  background: #fff;
+  padding: 32px 16px;
+}
+.pagination-container.hidden {
+  display: none;
+}
+</style>

+ 142 - 142
src/components/PanThumb/index.vue

@@ -1,142 +1,142 @@
-<template>
-  <div :style="{zIndex:zIndex,height:height,width:width}" class="pan-item">
-    <div class="pan-info">
-      <div class="pan-info-roles-container">
-        <slot />
-      </div>
-    </div>
-    <!-- eslint-disable-next-line -->
-    <div :style="{backgroundImage: `url(${image})`}" class="pan-thumb"></div>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'PanThumb',
-  props: {
-    image: {
-      type: String,
-      required: true
-    },
-    zIndex: {
-      type: Number,
-      default: 1
-    },
-    width: {
-      type: String,
-      default: '150px'
-    },
-    height: {
-      type: String,
-      default: '150px'
-    }
-  }
-}
-</script>
-
-<style scoped>
-.pan-item {
-  width: 200px;
-  height: 200px;
-  border-radius: 50%;
-  display: inline-block;
-  position: relative;
-  cursor: default;
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
-}
-
-.pan-info-roles-container {
-  padding: 20px;
-  text-align: center;
-}
-
-.pan-thumb {
-  width: 100%;
-  height: 100%;
-  background-position: center center;
-  background-size: cover;
-  border-radius: 50%;
-  overflow: hidden;
-  position: absolute;
-  transform-origin: 95% 40%;
-  transition: all 0.3s ease-in-out;
-}
-
-/* .pan-thumb:after {
-  content: '';
-  width: 8px;
-  height: 8px;
-  position: absolute;
-  border-radius: 50%;
-  top: 40%;
-  left: 95%;
-  margin: -4px 0 0 -4px;
-  background: radial-gradient(ellipse at center, rgba(14, 14, 14, 1) 0%, rgba(125, 126, 125, 1) 100%);
-  box-shadow: 0 0 1px rgba(255, 255, 255, 0.9);
-} */
-
-.pan-info {
-  position: absolute;
-  width: inherit;
-  height: inherit;
-  border-radius: 50%;
-  overflow: hidden;
-  box-shadow: inset 0 0 0 5px rgba(0, 0, 0, 0.05);
-}
-
-.pan-info h3 {
-  color: #fff;
-  text-transform: uppercase;
-  position: relative;
-  letter-spacing: 2px;
-  font-size: 18px;
-  margin: 0 60px;
-  padding: 22px 0 0 0;
-  height: 85px;
-  font-family: 'Open Sans', Arial, sans-serif;
-  text-shadow: 0 0 1px #fff, 0 1px 2px rgba(0, 0, 0, 0.3);
-}
-
-.pan-info p {
-  color: #fff;
-  padding: 10px 5px;
-  font-style: italic;
-  margin: 0 30px;
-  font-size: 12px;
-  border-top: 1px solid rgba(255, 255, 255, 0.5);
-}
-
-.pan-info p a {
-  display: block;
-  color: #333;
-  width: 80px;
-  height: 80px;
-  background: rgba(255, 255, 255, 0.3);
-  border-radius: 50%;
-  color: #fff;
-  font-style: normal;
-  font-weight: 700;
-  text-transform: uppercase;
-  font-size: 9px;
-  letter-spacing: 1px;
-  padding-top: 24px;
-  margin: 7px auto 0;
-  font-family: 'Open Sans', Arial, sans-serif;
-  opacity: 0;
-  transition: transform 0.3s ease-in-out 0.2s, opacity 0.3s ease-in-out 0.2s, background 0.2s linear 0s;
-  transform: translateX(60px) rotate(90deg);
-}
-
-.pan-info p a:hover {
-  background: rgba(255, 255, 255, 0.5);
-}
-
-.pan-item:hover .pan-thumb {
-  transform: rotate(-110deg);
-}
-
-.pan-item:hover .pan-info p a {
-  opacity: 1;
-  transform: translateX(0px) rotate(0deg);
-}
-</style>
+<template>
+  <div :style="{zIndex:zIndex,height:height,width:width}" class="pan-item">
+    <div class="pan-info">
+      <div class="pan-info-roles-container">
+        <slot />
+      </div>
+    </div>
+    <!-- eslint-disable-next-line -->
+    <div :style="{backgroundImage: `url(${image})`}" class="pan-thumb"></div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'PanThumb',
+  props: {
+    image: {
+      type: String,
+      required: true
+    },
+    zIndex: {
+      type: Number,
+      default: 1
+    },
+    width: {
+      type: String,
+      default: '150px'
+    },
+    height: {
+      type: String,
+      default: '150px'
+    }
+  }
+}
+</script>
+
+<style scoped>
+.pan-item {
+  width: 200px;
+  height: 200px;
+  border-radius: 50%;
+  display: inline-block;
+  position: relative;
+  cursor: default;
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
+}
+
+.pan-info-roles-container {
+  padding: 20px;
+  text-align: center;
+}
+
+.pan-thumb {
+  width: 100%;
+  height: 100%;
+  background-position: center center;
+  background-size: cover;
+  border-radius: 50%;
+  overflow: hidden;
+  position: absolute;
+  transform-origin: 95% 40%;
+  transition: all 0.3s ease-in-out;
+}
+
+/* .pan-thumb:after {
+  content: '';
+  width: 8px;
+  height: 8px;
+  position: absolute;
+  border-radius: 50%;
+  top: 40%;
+  left: 95%;
+  margin: -4px 0 0 -4px;
+  background: radial-gradient(ellipse at center, rgba(14, 14, 14, 1) 0%, rgba(125, 126, 125, 1) 100%);
+  box-shadow: 0 0 1px rgba(255, 255, 255, 0.9);
+} */
+
+.pan-info {
+  position: absolute;
+  width: inherit;
+  height: inherit;
+  border-radius: 50%;
+  overflow: hidden;
+  box-shadow: inset 0 0 0 5px rgba(0, 0, 0, 0.05);
+}
+
+.pan-info h3 {
+  color: #fff;
+  text-transform: uppercase;
+  position: relative;
+  letter-spacing: 2px;
+  font-size: 18px;
+  margin: 0 60px;
+  padding: 22px 0 0 0;
+  height: 85px;
+  font-family: 'Open Sans', Arial, sans-serif;
+  text-shadow: 0 0 1px #fff, 0 1px 2px rgba(0, 0, 0, 0.3);
+}
+
+.pan-info p {
+  color: #fff;
+  padding: 10px 5px;
+  font-style: italic;
+  margin: 0 30px;
+  font-size: 12px;
+  border-top: 1px solid rgba(255, 255, 255, 0.5);
+}
+
+.pan-info p a {
+  display: block;
+  color: #333;
+  width: 80px;
+  height: 80px;
+  background: rgba(255, 255, 255, 0.3);
+  border-radius: 50%;
+  color: #fff;
+  font-style: normal;
+  font-weight: 700;
+  text-transform: uppercase;
+  font-size: 9px;
+  letter-spacing: 1px;
+  padding-top: 24px;
+  margin: 7px auto 0;
+  font-family: 'Open Sans', Arial, sans-serif;
+  opacity: 0;
+  transition: transform 0.3s ease-in-out 0.2s, opacity 0.3s ease-in-out 0.2s, background 0.2s linear 0s;
+  transform: translateX(60px) rotate(90deg);
+}
+
+.pan-info p a:hover {
+  background: rgba(255, 255, 255, 0.5);
+}
+
+.pan-item:hover .pan-thumb {
+  transform: rotate(-110deg);
+}
+
+.pan-item:hover .pan-info p a {
+  opacity: 1;
+  transform: translateX(0px) rotate(0deg);
+}
+</style>

+ 149 - 149
src/components/RightPanel/index.vue

@@ -1,149 +1,149 @@
-<template>
-  <div ref="rightPanel" :class="{show:show}" class="rightPanel-container">
-    <div class="rightPanel-background" />
-    <div class="rightPanel">
-      <div class="rightPanel-items">
-        <slot />
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import { addClass, removeClass } from '@/utils'
-
-export default {
-  name: 'RightPanel',
-  props: {
-    clickNotClose: {
-      default: false,
-      type: Boolean
-    },
-    buttonTop: {
-      default: 250,
-      type: Number
-    }
-  },
-  computed: {
-    show: {
-      get() {
-        return this.$store.state.settings.showSettings
-      },
-      set(val) {
-        this.$store.dispatch('settings/changeSetting', {
-          key: 'showSettings',
-          value: val
-        })
-      }
-    },
-    theme() {
-      return this.$store.state.settings.theme
-    },
-  },
-  watch: {
-    show(value) {
-      if (value && !this.clickNotClose) {
-        this.addEventClick()
-      }
-      if (value) {
-        addClass(document.body, 'showRightPanel')
-      } else {
-        removeClass(document.body, 'showRightPanel')
-      }
-    }
-  },
-  mounted() {
-    this.insertToBody()
-    this.addEventClick()
-  },
-  beforeDestroy() {
-    const elx = this.$refs.rightPanel
-    elx.remove()
-  },
-  methods: {
-    addEventClick() {
-      window.addEventListener('click', this.closeSidebar)
-    },
-    closeSidebar(evt) {
-      const parent = evt.target.closest('.rightPanel')
-      if (!parent) {
-        this.show = false
-        window.removeEventListener('click', this.closeSidebar)
-      }
-    },
-    insertToBody() {
-      const elx = this.$refs.rightPanel
-      const body = document.querySelector('body')
-      body.insertBefore(elx, body.firstChild)
-    }
-  }
-}
-</script>
-
-<style>
-.showRightPanel {
-  overflow: hidden;
-  position: relative;
-  width: calc(100% - 15px);
-}
-</style>
-
-<style lang="scss" scoped>
-.rightPanel-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  opacity: 0;
-  transition: opacity .3s cubic-bezier(.7, .3, .1, 1);
-  background: rgba(0, 0, 0, .2);
-  z-index: -1;
-}
-
-.rightPanel {
-  width: 100%;
-  max-width: 260px;
-  height: 100vh;
-  position: fixed;
-  top: 0;
-  right: 0;
-  box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, .05);
-  transition: all .25s cubic-bezier(.7, .3, .1, 1);
-  transform: translate(100%);
-  background: #fff;
-  z-index: 40000;
-}
-
-.show {
-  transition: all .3s cubic-bezier(.7, .3, .1, 1);
-
-  .rightPanel-background {
-    z-index: 20000;
-    opacity: 1;
-    width: 100%;
-    height: 100%;
-  }
-
-  .rightPanel {
-    transform: translate(0);
-  }
-}
-
-.handle-button {
-  width: 48px;
-  height: 48px;
-  position: absolute;
-  left: -48px;
-  text-align: center;
-  font-size: 24px;
-  border-radius: 6px 0 0 6px !important;
-  z-index: 0;
-  pointer-events: auto;
-  cursor: pointer;
-  color: #fff;
-  line-height: 48px;
-  i {
-    font-size: 24px;
-    line-height: 48px;
-  }
-}
-</style>
+<template>
+  <div ref="rightPanel" :class="{show:show}" class="rightPanel-container">
+    <div class="rightPanel-background" />
+    <div class="rightPanel">
+      <div class="rightPanel-items">
+        <slot />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { addClass, removeClass } from '@/utils'
+
+export default {
+  name: 'RightPanel',
+  props: {
+    clickNotClose: {
+      default: false,
+      type: Boolean
+    },
+    buttonTop: {
+      default: 250,
+      type: Number
+    }
+  },
+  computed: {
+    show: {
+      get() {
+        return this.$store.state.settings.showSettings
+      },
+      set(val) {
+        this.$store.dispatch('settings/changeSetting', {
+          key: 'showSettings',
+          value: val
+        })
+      }
+    },
+    theme() {
+      return this.$store.state.settings.theme
+    },
+  },
+  watch: {
+    show(value) {
+      if (value && !this.clickNotClose) {
+        this.addEventClick()
+      }
+      if (value) {
+        addClass(document.body, 'showRightPanel')
+      } else {
+        removeClass(document.body, 'showRightPanel')
+      }
+    }
+  },
+  mounted() {
+    this.insertToBody()
+    this.addEventClick()
+  },
+  beforeDestroy() {
+    const elx = this.$refs.rightPanel
+    elx.remove()
+  },
+  methods: {
+    addEventClick() {
+      window.addEventListener('click', this.closeSidebar)
+    },
+    closeSidebar(evt) {
+      const parent = evt.target.closest('.rightPanel')
+      if (!parent) {
+        this.show = false
+        window.removeEventListener('click', this.closeSidebar)
+      }
+    },
+    insertToBody() {
+      const elx = this.$refs.rightPanel
+      const body = document.querySelector('body')
+      body.insertBefore(elx, body.firstChild)
+    }
+  }
+}
+</script>
+
+<style>
+.showRightPanel {
+  overflow: hidden;
+  position: relative;
+  width: calc(100% - 15px);
+}
+</style>
+
+<style lang="scss" scoped>
+.rightPanel-background {
+  position: fixed;
+  top: 0;
+  left: 0;
+  opacity: 0;
+  transition: opacity .3s cubic-bezier(.7, .3, .1, 1);
+  background: rgba(0, 0, 0, .2);
+  z-index: -1;
+}
+
+.rightPanel {
+  width: 100%;
+  max-width: 260px;
+  height: 100vh;
+  position: fixed;
+  top: 0;
+  right: 0;
+  box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, .05);
+  transition: all .25s cubic-bezier(.7, .3, .1, 1);
+  transform: translate(100%);
+  background: #fff;
+  z-index: 40000;
+}
+
+.show {
+  transition: all .3s cubic-bezier(.7, .3, .1, 1);
+
+  .rightPanel-background {
+    z-index: 20000;
+    opacity: 1;
+    width: 100%;
+    height: 100%;
+  }
+
+  .rightPanel {
+    transform: translate(0);
+  }
+}
+
+.handle-button {
+  width: 48px;
+  height: 48px;
+  position: absolute;
+  left: -48px;
+  text-align: center;
+  font-size: 24px;
+  border-radius: 6px 0 0 6px !important;
+  z-index: 0;
+  pointer-events: auto;
+  cursor: pointer;
+  color: #fff;
+  line-height: 48px;
+  i {
+    font-size: 24px;
+    line-height: 48px;
+  }
+}
+</style>

+ 38 - 38
src/components/RightToolbar/index.vue

@@ -1,38 +1,38 @@
-<!-- @author Shiyn/   huangmx 20200807优化-->
-<template>
-  <div class="top-right-btn">
-    <el-row>
-      <el-tooltip class="item" effect="dark" :content="showSearch ? '隐藏搜索' : '显示搜索'" placement="top">
-        <el-button size="mini" circle icon="el-icon-search" @click="toggleSearch()" />
-      </el-tooltip>
-      <el-tooltip class="item" effect="dark" content="刷新" placement="top">
-        <el-button size="mini" circle icon="el-icon-refresh" @click="refresh()" />
-      </el-tooltip>
-    </el-row>
-  </div>
-</template>
-<script>
-export default {
-  name: "RightToolbar",
-  data() {
-    return {};
-  },
-  props: {
-    showSearch: {
-      type: Boolean,
-      default: true,
-    },
-  },
-
-  methods: {
-    //搜索
-    toggleSearch() {
-      this.$emit("update:showSearch", !this.showSearch);
-    },
-    //刷新
-    refresh() {
-      this.$emit("queryTable");
-    },
-  },
-};
-</script>
+<!-- @author Shiyn/   huangmx 20200807优化-->
+<template>
+  <div class="top-right-btn">
+    <el-row>
+      <el-tooltip class="item" effect="dark" :content="showSearch ? '隐藏搜索' : '显示搜索'" placement="top">
+        <el-button size="mini" circle icon="el-icon-search" @click="toggleSearch()" />
+      </el-tooltip>
+      <el-tooltip class="item" effect="dark" content="刷新" placement="top">
+        <el-button size="mini" circle icon="el-icon-refresh" @click="refresh()" />
+      </el-tooltip>
+    </el-row>
+  </div>
+</template>
+<script>
+export default {
+  name: "RightToolbar",
+  data() {
+    return {};
+  },
+  props: {
+    showSearch: {
+      type: Boolean,
+      default: true,
+    },
+  },
+
+  methods: {
+    //搜索
+    toggleSearch() {
+      this.$emit("update:showSearch", !this.showSearch);
+    },
+    //刷新
+    refresh() {
+      this.$emit("queryTable");
+    },
+  },
+};
+</script>

+ 60 - 60
src/components/Screenfull/index.vue

@@ -1,60 +1,60 @@
-<template>
-  <div>
-    <svg-icon :icon-class="isFullscreen?'exit-fullscreen':'fullscreen'" @click="click" />
-  </div>
-</template>
-
-<script>
-import screenfull from 'screenfull'
-
-export default {
-  name: 'Screenfull',
-  data() {
-    return {
-      isFullscreen: false
-    }
-  },
-  mounted() {
-    this.init()
-  },
-  beforeDestroy() {
-    this.destroy()
-  },
-  methods: {
-    click() {
-      if (!screenfull.enabled) {
-        this.$message({
-          message: 'you browser can not work',
-          type: 'warning'
-        })
-        return false
-      }
-      screenfull.toggle()
-    },
-    change() {
-      this.isFullscreen = screenfull.isFullscreen
-    },
-    init() {
-      if (screenfull.enabled) {
-        screenfull.on('change', this.change)
-      }
-    },
-    destroy() {
-      if (screenfull.enabled) {
-        screenfull.off('change', this.change)
-      }
-    }
-  }
-}
-</script>
-
-<style scoped>
-.screenfull-svg {
-  display: inline-block;
-  cursor: pointer;
-  fill: #5a5e66;;
-  width: 20px;
-  height: 20px;
-  vertical-align: 10px;
-}
-</style>
+<template>
+  <div>
+    <svg-icon :icon-class="isFullscreen?'exit-fullscreen':'fullscreen'" @click="click" />
+  </div>
+</template>
+
+<script>
+import screenfull from 'screenfull'
+
+export default {
+  name: 'Screenfull',
+  data() {
+    return {
+      isFullscreen: false
+    }
+  },
+  mounted() {
+    this.init()
+  },
+  beforeDestroy() {
+    this.destroy()
+  },
+  methods: {
+    click() {
+      if (!screenfull.enabled) {
+        this.$message({
+          message: 'you browser can not work',
+          type: 'warning'
+        })
+        return false
+      }
+      screenfull.toggle()
+    },
+    change() {
+      this.isFullscreen = screenfull.isFullscreen
+    },
+    init() {
+      if (screenfull.enabled) {
+        screenfull.on('change', this.change)
+      }
+    },
+    destroy() {
+      if (screenfull.enabled) {
+        screenfull.off('change', this.change)
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+.screenfull-svg {
+  display: inline-block;
+  cursor: pointer;
+  fill: #5a5e66;;
+  width: 20px;
+  height: 20px;
+  vertical-align: 10px;
+}
+</style>

+ 57 - 57
src/components/SizeSelect/index.vue

@@ -1,57 +1,57 @@
-<template>
-  <el-dropdown trigger="click" @command="handleSetSize">
-    <div>
-      <svg-icon class-name="size-icon" icon-class="size" />
-    </div>
-    <el-dropdown-menu slot="dropdown">
-      <el-dropdown-item v-for="item of sizeOptions" :key="item.value" :disabled="size===item.value" :command="item.value">
-        {{
-          item.label }}
-      </el-dropdown-item>
-    </el-dropdown-menu>
-  </el-dropdown>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      sizeOptions: [
-        { label: 'Default', value: 'default' },
-        { label: 'Medium', value: 'medium' },
-        { label: 'Small', value: 'small' },
-        { label: 'Mini', value: 'mini' }
-      ]
-    }
-  },
-  computed: {
-    size() {
-      return this.$store.getters.size
-    }
-  },
-  methods: {
-    handleSetSize(size) {
-      this.$ELEMENT.size = size
-      this.$store.dispatch('app/setSize', size)
-      this.refreshView()
-      this.$message({
-        message: 'Switch Size Success',
-        type: 'success'
-      })
-    },
-    refreshView() {
-      // In order to make the cached page re-rendered
-      this.$store.dispatch('tagsView/delAllCachedViews', this.$route)
-
-      const { fullPath } = this.$route
-
-      this.$nextTick(() => {
-        this.$router.replace({
-          path: '/redirect' + fullPath
-        })
-      })
-    }
-  }
-
-}
-</script>
+<template>
+  <el-dropdown trigger="click" @command="handleSetSize">
+    <div>
+      <svg-icon class-name="size-icon" icon-class="size" />
+    </div>
+    <el-dropdown-menu slot="dropdown">
+      <el-dropdown-item v-for="item of sizeOptions" :key="item.value" :disabled="size===item.value" :command="item.value">
+        {{
+          item.label }}
+      </el-dropdown-item>
+    </el-dropdown-menu>
+  </el-dropdown>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      sizeOptions: [
+        { label: 'Default', value: 'default' },
+        { label: 'Medium', value: 'medium' },
+        { label: 'Small', value: 'small' },
+        { label: 'Mini', value: 'mini' }
+      ]
+    }
+  },
+  computed: {
+    size() {
+      return this.$store.getters.size
+    }
+  },
+  methods: {
+    handleSetSize(size) {
+      this.$ELEMENT.size = size
+      this.$store.dispatch('app/setSize', size)
+      this.refreshView()
+      this.$message({
+        message: 'Switch Size Success',
+        type: 'success'
+      })
+    },
+    refreshView() {
+      // In order to make the cached page re-rendered
+      this.$store.dispatch('tagsView/delAllCachedViews', this.$route)
+
+      const { fullPath } = this.$route
+
+      this.$nextTick(() => {
+        this.$router.replace({
+          path: '/redirect' + fullPath
+        })
+      })
+    }
+  }
+
+}
+</script>

+ 61 - 61
src/components/SvgIcon/index.vue

@@ -1,61 +1,61 @@
-<template>
-  <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" />
-  <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners">
-    <use :xlink:href="iconName" />
-  </svg>
-</template>
-
-<script>
-import { isExternal } from '@/utils/validate'
-
-export default {
-  name: 'SvgIcon',
-  props: {
-    iconClass: {
-      type: String,
-      required: true
-    },
-    className: {
-      type: String,
-      default: ''
-    }
-  },
-  computed: {
-    isExternal() {
-      return isExternal(this.iconClass)
-    },
-    iconName() {
-      return `#icon-${this.iconClass}`
-    },
-    svgClass() {
-      if (this.className) {
-        return 'svg-icon ' + this.className
-      } else {
-        return 'svg-icon'
-      }
-    },
-    styleExternalIcon() {
-      return {
-        mask: `url(${this.iconClass}) no-repeat 50% 50%`,
-        '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
-      }
-    }
-  }
-}
-</script>
-
-<style scoped>
-.svg-icon {
-  width: 1em;
-  height: 1em;
-  vertical-align: -0.15em;
-  fill: currentColor;
-  overflow: hidden;
-}
-
-.svg-external-icon {
-  background-color: currentColor;
-  mask-size: cover!important;
-  display: inline-block;
-}
-</style>
+<template>
+  <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" />
+  <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners">
+    <use :xlink:href="iconName" />
+  </svg>
+</template>
+
+<script>
+import { isExternal } from '@/utils/validate'
+
+export default {
+  name: 'SvgIcon',
+  props: {
+    iconClass: {
+      type: String,
+      required: true
+    },
+    className: {
+      type: String,
+      default: ''
+    }
+  },
+  computed: {
+    isExternal() {
+      return isExternal(this.iconClass)
+    },
+    iconName() {
+      return `#icon-${this.iconClass}`
+    },
+    svgClass() {
+      if (this.className) {
+        return 'svg-icon ' + this.className
+      } else {
+        return 'svg-icon'
+      }
+    },
+    styleExternalIcon() {
+      return {
+        mask: `url(${this.iconClass}) no-repeat 50% 50%`,
+        '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+.svg-icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+
+.svg-external-icon {
+  background-color: currentColor;
+  mask-size: cover!important;
+  display: inline-block;
+}
+</style>

+ 175 - 175
src/components/ThemePicker/index.vue

@@ -1,175 +1,175 @@
-<template>
-  <el-color-picker
-    v-model="theme"
-    :predefine="['#409EFF', '#1890ff', '#304156','#212121','#11a983', '#13c2c2', '#6959CD', '#f5222d', ]"
-    class="theme-picker"
-    popper-class="theme-picker-dropdown"
-  />
-</template>
-
-<script>
-const version = require('element-ui/package.json').version // element-ui version from node_modules
-const ORIGINAL_THEME = '#409EFF' // default color
-
-export default {
-  data() {
-    return {
-      chalk: '', // content of theme-chalk css
-      theme: ''
-    }
-  },
-  computed: {
-    defaultTheme() {
-      return this.$store.state.settings.theme
-    }
-  },
-  watch: {
-    defaultTheme: {
-      handler: function(val, oldVal) {
-        this.theme = val
-      },
-      immediate: true
-    },
-    async theme(val) {
-      const oldVal = this.chalk ? this.theme : ORIGINAL_THEME
-      if (typeof val !== 'string') return
-      const themeCluster = this.getThemeCluster(val.replace('#', ''))
-      const originalCluster = this.getThemeCluster(oldVal.replace('#', ''))
-      console.log(themeCluster, originalCluster)
-
-      const $message = this.$message({
-        message: '  Compiling the theme',
-        customClass: 'theme-message',
-        type: 'success',
-        duration: 0,
-        iconClass: 'el-icon-loading'
-      })
-
-      const getHandler = (variable, id) => {
-        return () => {
-          const originalCluster = this.getThemeCluster(ORIGINAL_THEME.replace('#', ''))
-          const newStyle = this.updateStyle(this[variable], originalCluster, themeCluster)
-
-          let styleTag = document.getElementById(id)
-          if (!styleTag) {
-            styleTag = document.createElement('style')
-            styleTag.setAttribute('id', id)
-            document.head.appendChild(styleTag)
-          }
-          styleTag.innerText = newStyle
-        }
-      }
-
-      if (!this.chalk) {
-        const url = `https://unpkg.com/element-ui@${version}/lib/theme-chalk/index.css`
-        await this.getCSSString(url, 'chalk')
-      }
-
-      const chalkHandler = getHandler('chalk', 'chalk-style')
-
-      chalkHandler()
-
-      const styles = [].slice.call(document.querySelectorAll('style'))
-        .filter(style => {
-          const text = style.innerText
-          return new RegExp(oldVal, 'i').test(text) && !/Chalk Variables/.test(text)
-        })
-      styles.forEach(style => {
-        const { innerText } = style
-        if (typeof innerText !== 'string') return
-        style.innerText = this.updateStyle(innerText, originalCluster, themeCluster)
-      })
-
-      this.$emit('change', val)
-
-      $message.close()
-    }
-  },
-
-  methods: {
-    updateStyle(style, oldCluster, newCluster) {
-      let newStyle = style
-      oldCluster.forEach((color, index) => {
-        newStyle = newStyle.replace(new RegExp(color, 'ig'), newCluster[index])
-      })
-      return newStyle
-    },
-
-    getCSSString(url, variable) {
-      return new Promise(resolve => {
-        const xhr = new XMLHttpRequest()
-        xhr.onreadystatechange = () => {
-          if (xhr.readyState === 4 && xhr.status === 200) {
-            this[variable] = xhr.responseText.replace(/@font-face{[^}]+}/, '')
-            resolve()
-          }
-        }
-        xhr.open('GET', url)
-        xhr.send()
-      })
-    },
-
-    getThemeCluster(theme) {
-      const tintColor = (color, tint) => {
-        let red = parseInt(color.slice(0, 2), 16)
-        let green = parseInt(color.slice(2, 4), 16)
-        let blue = parseInt(color.slice(4, 6), 16)
-
-        if (tint === 0) { // when primary color is in its rgb space
-          return [red, green, blue].join(',')
-        } else {
-          red += Math.round(tint * (255 - red))
-          green += Math.round(tint * (255 - green))
-          blue += Math.round(tint * (255 - blue))
-
-          red = red.toString(16)
-          green = green.toString(16)
-          blue = blue.toString(16)
-
-          return `#${red}${green}${blue}`
-        }
-      }
-
-      const shadeColor = (color, shade) => {
-        let red = parseInt(color.slice(0, 2), 16)
-        let green = parseInt(color.slice(2, 4), 16)
-        let blue = parseInt(color.slice(4, 6), 16)
-
-        red = Math.round((1 - shade) * red)
-        green = Math.round((1 - shade) * green)
-        blue = Math.round((1 - shade) * blue)
-
-        red = red.toString(16)
-        green = green.toString(16)
-        blue = blue.toString(16)
-
-        return `#${red}${green}${blue}`
-      }
-
-      const clusters = [theme]
-      for (let i = 0; i <= 9; i++) {
-        clusters.push(tintColor(theme, Number((i / 10).toFixed(2))))
-      }
-      clusters.push(shadeColor(theme, 0.1))
-      return clusters
-    }
-  }
-}
-</script>
-
-<style>
-.theme-message,
-.theme-picker-dropdown {
-  z-index: 99999 !important;
-}
-
-.theme-picker .el-color-picker__trigger {
-  height: 26px !important;
-  width: 26px !important;
-  padding: 2px;
-}
-
-.theme-picker-dropdown .el-color-dropdown__link-btn {
-  display: none;
-}
-</style>
+<template>
+  <el-color-picker
+    v-model="theme"
+    :predefine="['#409EFF', '#1890ff', '#304156','#212121','#11a983', '#13c2c2', '#6959CD', '#f5222d', ]"
+    class="theme-picker"
+    popper-class="theme-picker-dropdown"
+  />
+</template>
+
+<script>
+const version = require('element-ui/package.json').version // element-ui version from node_modules
+const ORIGINAL_THEME = '#409EFF' // default color
+
+export default {
+  data() {
+    return {
+      chalk: '', // content of theme-chalk css
+      theme: ''
+    }
+  },
+  computed: {
+    defaultTheme() {
+      return this.$store.state.settings.theme
+    }
+  },
+  watch: {
+    defaultTheme: {
+      handler: function(val, oldVal) {
+        this.theme = val
+      },
+      immediate: true
+    },
+    async theme(val) {
+      const oldVal = this.chalk ? this.theme : ORIGINAL_THEME
+      if (typeof val !== 'string') return
+      const themeCluster = this.getThemeCluster(val.replace('#', ''))
+      const originalCluster = this.getThemeCluster(oldVal.replace('#', ''))
+      console.log(themeCluster, originalCluster)
+
+      const $message = this.$message({
+        message: '  Compiling the theme',
+        customClass: 'theme-message',
+        type: 'success',
+        duration: 0,
+        iconClass: 'el-icon-loading'
+      })
+
+      const getHandler = (variable, id) => {
+        return () => {
+          const originalCluster = this.getThemeCluster(ORIGINAL_THEME.replace('#', ''))
+          const newStyle = this.updateStyle(this[variable], originalCluster, themeCluster)
+
+          let styleTag = document.getElementById(id)
+          if (!styleTag) {
+            styleTag = document.createElement('style')
+            styleTag.setAttribute('id', id)
+            document.head.appendChild(styleTag)
+          }
+          styleTag.innerText = newStyle
+        }
+      }
+
+      if (!this.chalk) {
+        const url = `https://unpkg.com/element-ui@${version}/lib/theme-chalk/index.css`
+        await this.getCSSString(url, 'chalk')
+      }
+
+      const chalkHandler = getHandler('chalk', 'chalk-style')
+
+      chalkHandler()
+
+      const styles = [].slice.call(document.querySelectorAll('style'))
+        .filter(style => {
+          const text = style.innerText
+          return new RegExp(oldVal, 'i').test(text) && !/Chalk Variables/.test(text)
+        })
+      styles.forEach(style => {
+        const { innerText } = style
+        if (typeof innerText !== 'string') return
+        style.innerText = this.updateStyle(innerText, originalCluster, themeCluster)
+      })
+
+      this.$emit('change', val)
+
+      $message.close()
+    }
+  },
+
+  methods: {
+    updateStyle(style, oldCluster, newCluster) {
+      let newStyle = style
+      oldCluster.forEach((color, index) => {
+        newStyle = newStyle.replace(new RegExp(color, 'ig'), newCluster[index])
+      })
+      return newStyle
+    },
+
+    getCSSString(url, variable) {
+      return new Promise(resolve => {
+        const xhr = new XMLHttpRequest()
+        xhr.onreadystatechange = () => {
+          if (xhr.readyState === 4 && xhr.status === 200) {
+            this[variable] = xhr.responseText.replace(/@font-face{[^}]+}/, '')
+            resolve()
+          }
+        }
+        xhr.open('GET', url)
+        xhr.send()
+      })
+    },
+
+    getThemeCluster(theme) {
+      const tintColor = (color, tint) => {
+        let red = parseInt(color.slice(0, 2), 16)
+        let green = parseInt(color.slice(2, 4), 16)
+        let blue = parseInt(color.slice(4, 6), 16)
+
+        if (tint === 0) { // when primary color is in its rgb space
+          return [red, green, blue].join(',')
+        } else {
+          red += Math.round(tint * (255 - red))
+          green += Math.round(tint * (255 - green))
+          blue += Math.round(tint * (255 - blue))
+
+          red = red.toString(16)
+          green = green.toString(16)
+          blue = blue.toString(16)
+
+          return `#${red}${green}${blue}`
+        }
+      }
+
+      const shadeColor = (color, shade) => {
+        let red = parseInt(color.slice(0, 2), 16)
+        let green = parseInt(color.slice(2, 4), 16)
+        let blue = parseInt(color.slice(4, 6), 16)
+
+        red = Math.round((1 - shade) * red)
+        green = Math.round((1 - shade) * green)
+        blue = Math.round((1 - shade) * blue)
+
+        red = red.toString(16)
+        green = green.toString(16)
+        blue = blue.toString(16)
+
+        return `#${red}${green}${blue}`
+      }
+
+      const clusters = [theme]
+      for (let i = 0; i <= 9; i++) {
+        clusters.push(tintColor(theme, Number((i / 10).toFixed(2))))
+      }
+      clusters.push(shadeColor(theme, 0.1))
+      return clusters
+    }
+  }
+}
+</script>
+
+<style>
+.theme-message,
+.theme-picker-dropdown {
+  z-index: 99999 !important;
+}
+
+.theme-picker .el-color-picker__trigger {
+  height: 26px !important;
+  width: 26px !important;
+  padding: 2px;
+}
+
+.theme-picker-dropdown .el-color-dropdown__link-btn {
+  display: none;
+}
+</style>

+ 178 - 178
src/components/select/SelectUser/index.vue

@@ -1,179 +1,179 @@
-<template>
-  <div >
-    <el-dialog title="选择员工" :visible.sync="visibleInChild" :append-to-body="appendToBody" fullscreen
-               :before-close="close">
-               <div class="el-dialog-body-custom-height">
-                <el-row :gutter="20">
-                <!--部门数据-->
-                <el-col :span="4" :xs="24">
-                    <div class="head-container">
-                    <el-input v-model="deptName" placeholder="请输入机构名称" clearable size="small" prefix-icon="el-icon-search" style="margin-bottom: 20px" />
-                    </div>
-                    <div class="head-container">
-                    <el-tree :data="deptOptions" :props="defaultProps" :expand-on-click-node="false" :filter-node-method="filterNode" ref="tree" default-expand-all @node-click="handleNodeClick" />
-                    </div>
-                </el-col>
-                <!--用户数据-->
-                <el-col :span="20" :xs="24">
-                    <el-table v-loading="loading" border :data="userList" @selection-change="handleSelectionChange">
-                    <el-table-column type="selection" width="50" align="center" />
-                    <el-table-column label="帐号" align="center" prop="userName" :show-overflow-tooltip="true" />
-                    <el-table-column label="姓名" align="center" prop="nickName" :show-overflow-tooltip="true" />
-                    <el-table-column label="所属机构" align="center" prop="dept.deptName" :show-overflow-tooltip="true" />
-                    <el-table-column label="手机号码" align="center" prop="phonenumber" width="120" />
-                    </el-table>
-                    <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
-                </el-col>
-                </el-row>
-               </div>
-             <div slot="footer" class="dialog-footer">
-                <el-button icon="el-icon-check" type="primary" @click="submitForm">确定</el-button>
-            </div>
-      </el-dialog>
-  </div>
-</template>
-
-<script>
-import {getList} from "@/api/company/companyUser";
-import { getToken } from "@/utils/auth";
-import { treeselect } from "@/api/company/companyDept";
-import Treeselect from "@riophae/vue-treeselect";
-import "@riophae/vue-treeselect/dist/vue-treeselect.css";
-
-export default {
-  name: "User",
-  components: { Treeselect },
-  props: {
-        visible: {
-            type: Boolean,
-            default: false
-        },
-        multipleSelect: {
-            type: Boolean,
-            default: false
-        },
-        type: {
-            type: String,
-            default: ''
-        },
-        appendToBody: {
-            type: Boolean,
-            default: false
-        }
-    },
-     computed: {
-            visibleInChild: {
-                get() {
-                    return this.visible
-                },
-                set(val) {
-                    this.$emit('update:visible', val)
-                }
-            }
-        },
-  data() {
-    return {
-    
-      // 遮罩层
-      loading: true,
-      // 选中数组
-      ids: [],
-      users:[],
-      // 显示搜索条件
-      showSearch: true,
-      // 总条数
-      total: 0,
-      // 用户表格数据
-      userList: null,
-      // 部门树选项
-      deptOptions: undefined,
-      // 部门名称
-      deptName: undefined,
-      
-      // 表单参数
-      form: {},
-      defaultProps: {
-        children: "children",
-        label: "label",
-      },
- 
-      // 查询参数
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-      },
-      
-    };
-  },
-  watch: {
-    // 根据名称筛选部门树
-    deptName(val) {
-      this.$refs.tree.filter(val);
-    },
-  },
-  created() {
-    this.getTreeselect() 
-
-  },
-  methods: {
-    init(){
-      this.getList();
-    },
-    close() {
-        this.visibleInChild = false;
-    },
-    /** 查询用户列表 */
-    getList() {
-      this.loading = true;
-      getList(this.addDateRange(this.queryParams, this.dateRange)).then(
-        (response) => {
-          this.userList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        }
-      );
-    },
-    /** 查询部门下拉树结构 */
-    getTreeselect() {
-      treeselect().then((response) => {
-        this.deptOptions = response.data;
-      });
-    },
-    // 筛选节点
-    filterNode(value, data) {
-      if (!value) return true;
-      return data.label.indexOf(value) !== -1;
-    },
-    // 节点单击事件
-    handleNodeClick(data) {
-      this.queryParams.deptId = data.id;
-      this.getList();
-    },
-    
-    // 多选框选中数据
-    handleSelectionChange(selection) {
-      this.users=selection.map((item) => item);
-    },
-   
-    /** 提交按钮 */
-    submitForm: function () {
-      if(!this.multipleSelect){
-        if(this.users.length>1){
-          this.msgError("只能选择一个用户");
-          return; 
-        }
-      }
-      if(this.users.length==0){
-        this.msgError("请选择用户");
-        return; 
-      }
-      this.$emit('selectUserFinished',this.users);
-      this.visibleInChild = false;
-    }
-    
-  },
-};
-</script>
-<style>
- 
+<template>
+  <div >
+    <el-dialog title="选择员工" :visible.sync="visibleInChild" :append-to-body="appendToBody" fullscreen
+               :before-close="close">
+               <div class="el-dialog-body-custom-height">
+                <el-row :gutter="20">
+                <!--部门数据-->
+                <el-col :span="4" :xs="24">
+                    <div class="head-container">
+                    <el-input v-model="deptName" placeholder="请输入机构名称" clearable size="small" prefix-icon="el-icon-search" style="margin-bottom: 20px" />
+                    </div>
+                    <div class="head-container">
+                    <el-tree :data="deptOptions" :props="defaultProps" :expand-on-click-node="false" :filter-node-method="filterNode" ref="tree" default-expand-all @node-click="handleNodeClick" />
+                    </div>
+                </el-col>
+                <!--用户数据-->
+                <el-col :span="20" :xs="24">
+                    <el-table v-loading="loading" border :data="userList" @selection-change="handleSelectionChange">
+                    <el-table-column type="selection" width="50" align="center" />
+                    <el-table-column label="帐号" align="center" prop="userName" :show-overflow-tooltip="true" />
+                    <el-table-column label="姓名" align="center" prop="nickName" :show-overflow-tooltip="true" />
+                    <el-table-column label="所属机构" align="center" prop="dept.deptName" :show-overflow-tooltip="true" />
+                    <el-table-column label="手机号码" align="center" prop="phonenumber" width="120" />
+                    </el-table>
+                    <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
+                </el-col>
+                </el-row>
+               </div>
+             <div slot="footer" class="dialog-footer">
+                <el-button icon="el-icon-check" type="primary" @click="submitForm">确定</el-button>
+            </div>
+      </el-dialog>
+  </div>
+</template>
+
+<script>
+import {getList} from "@/api/company/companyUser";
+import { getToken } from "@/utils/auth";
+import { treeselect } from "@/api/company/companyDept";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  name: "User",
+  components: { Treeselect },
+  props: {
+        visible: {
+            type: Boolean,
+            default: false
+        },
+        multipleSelect: {
+            type: Boolean,
+            default: false
+        },
+        type: {
+            type: String,
+            default: ''
+        },
+        appendToBody: {
+            type: Boolean,
+            default: false
+        }
+    },
+     computed: {
+            visibleInChild: {
+                get() {
+                    return this.visible
+                },
+                set(val) {
+                    this.$emit('update:visible', val)
+                }
+            }
+        },
+  data() {
+    return {
+    
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      users:[],
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户表格数据
+      userList: null,
+      // 部门树选项
+      deptOptions: undefined,
+      // 部门名称
+      deptName: undefined,
+      
+      // 表单参数
+      form: {},
+      defaultProps: {
+        children: "children",
+        label: "label",
+      },
+ 
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+      },
+      
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    },
+  },
+  created() {
+    this.getTreeselect() 
+
+  },
+  methods: {
+    init(){
+      this.getList();
+    },
+    close() {
+        this.visibleInChild = false;
+    },
+    /** 查询用户列表 */
+    getList() {
+      this.loading = true;
+      getList(this.addDateRange(this.queryParams, this.dateRange)).then(
+        (response) => {
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then((response) => {
+        this.deptOptions = response.data;
+      });
+    },
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    // 节点单击事件
+    handleNodeClick(data) {
+      this.queryParams.deptId = data.id;
+      this.getList();
+    },
+    
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.users=selection.map((item) => item);
+    },
+   
+    /** 提交按钮 */
+    submitForm: function () {
+      if(!this.multipleSelect){
+        if(this.users.length>1){
+          this.msgError("只能选择一个用户");
+          return; 
+        }
+      }
+      if(this.users.length==0){
+        this.msgError("请选择用户");
+        return; 
+      }
+      this.$emit('selectUserFinished',this.users);
+      this.visibleInChild = false;
+    }
+    
+  },
+};
+</script>
+<style>
+ 
 </style>

+ 28 - 28
src/directive/permission/hasPermi.js

@@ -1,28 +1,28 @@
- /**
- * 操作权限处理
- * Copyright (c) 2019 fs
- */
- 
-import store from '@/store'
-
-export default {
-  inserted(el, binding, vnode) {
-    const { value } = binding
-    const all_permission = "*:*:*";
-    const permissions = store.getters && store.getters.permissions
-
-    if (value && value instanceof Array && value.length > 0) {
-      const permissionFlag = value
-
-      const hasPermissions = permissions.some(permission => {
-        return all_permission === permission || permissionFlag.includes(permission)
-      })
-
-      if (!hasPermissions) {
-        el.parentNode && el.parentNode.removeChild(el)
-      }
-    } else {
-      throw new Error(`请设置操作权限标签值`)
-    }
-  }
-}
+ /**
+ * 操作权限处理
+ * Copyright (c) 2019 fs
+ */
+ 
+import store from '@/store'
+
+export default {
+  inserted(el, binding, vnode) {
+    const { value } = binding
+    const all_permission = "*:*:*";
+    const permissions = store.getters && store.getters.permissions
+
+    if (value && value instanceof Array && value.length > 0) {
+      const permissionFlag = value
+
+      const hasPermissions = permissions.some(permission => {
+        return all_permission === permission || permissionFlag.includes(permission)
+      })
+
+      if (!hasPermissions) {
+        el.parentNode && el.parentNode.removeChild(el)
+      }
+    } else {
+      throw new Error(`请设置操作权限标签值`)
+    }
+  }
+}

+ 28 - 28
src/directive/permission/hasRole.js

@@ -1,28 +1,28 @@
- /**
- * 角色权限处理
- * Copyright (c) 2019 fs
- */
- 
-import store from '@/store'
-
-export default {
-  inserted(el, binding, vnode) {
-    const { value } = binding
-    const super_admin = "admin";
-    const roles = store.getters && store.getters.roles
-
-    if (value && value instanceof Array && value.length > 0) {
-      const roleFlag = value
-
-      const hasRole = roles.some(role => {
-        return super_admin === role || roleFlag.includes(role)
-      })
-
-      if (!hasRole) {
-        el.parentNode && el.parentNode.removeChild(el)
-      }
-    } else {
-      throw new Error(`请设置角色权限标签值"`)
-    }
-  }
-}
+ /**
+ * 角色权限处理
+ * Copyright (c) 2019 fs
+ */
+ 
+import store from '@/store'
+
+export default {
+  inserted(el, binding, vnode) {
+    const { value } = binding
+    const super_admin = "admin";
+    const roles = store.getters && store.getters.roles
+
+    if (value && value instanceof Array && value.length > 0) {
+      const roleFlag = value
+
+      const hasRole = roles.some(role => {
+        return super_admin === role || roleFlag.includes(role)
+      })
+
+      if (!hasRole) {
+        el.parentNode && el.parentNode.removeChild(el)
+      }
+    } else {
+      throw new Error(`请设置角色权限标签值"`)
+    }
+  }
+}

+ 15 - 15
src/directive/permission/index.js

@@ -1,15 +1,15 @@
-import hasRole from './hasRole'
-import hasPermi from './hasPermi'
-
-const install = function(Vue) {
-  Vue.directive('hasRole', hasRole)
-  Vue.directive('hasPermi', hasPermi)
-}
-
-if (window.Vue) {
-  window['hasRole'] = hasRole
-  window['hasPermi'] = hasPermi
-  Vue.use(install); // eslint-disable-line
-}
-
-export default install
+import hasRole from './hasRole'
+import hasPermi from './hasPermi'
+
+const install = function(Vue) {
+  Vue.directive('hasRole', hasRole)
+  Vue.directive('hasPermi', hasPermi)
+}
+
+if (window.Vue) {
+  window['hasRole'] = hasRole
+  window['hasPermi'] = hasPermi
+  Vue.use(install); // eslint-disable-line
+}
+
+export default install

+ 57 - 57
src/layout/components/AppMain.vue

@@ -1,57 +1,57 @@
-<template>
-  <section class="app-main">
-    <transition name="fade-transform" mode="out-in">
-      <keep-alive :include="cachedViews">
-        <router-view :key="key" />
-      </keep-alive>
-    </transition>
-  </section>
-</template>
-
-<script>
-export default {
-  name: 'AppMain',
-  computed: {
-    cachedViews() {
-      return this.$store.state.tagsView.cachedViews
-    },
-    key() {
-      return this.$route.path
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.app-main {
-  /* 50= navbar  50  */
-  min-height: calc(100vh - 50px);
-  width: 100%;
-  position: relative;
-  overflow: hidden;
-}
-
-.fixed-header+.app-main {
-  padding-top: 50px;
-}
-
-.hasTagsView {
-  .app-main {
-    /* 84 = navbar + tags-view = 50 + 34 */
-    min-height: calc(100vh - 84px);
-  }
-
-  .fixed-header+.app-main {
-    padding-top: 84px;
-  }
-}
-</style>
-
-<style lang="scss">
-// fix css style bug in open el-dialog
-.el-popup-parent--hidden {
-  .fixed-header {
-    padding-right: 15px;
-  }
-}
-</style>
+<template>
+  <section class="app-main">
+    <transition name="fade-transform" mode="out-in">
+      <keep-alive :include="cachedViews">
+        <router-view :key="key" />
+      </keep-alive>
+    </transition>
+  </section>
+</template>
+
+<script>
+export default {
+  name: 'AppMain',
+  computed: {
+    cachedViews() {
+      return this.$store.state.tagsView.cachedViews
+    },
+    key() {
+      return this.$route.path
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.app-main {
+  /* 50= navbar  50  */
+  min-height: calc(100vh - 50px);
+  width: 100%;
+  position: relative;
+  overflow: hidden;
+}
+
+.fixed-header+.app-main {
+  padding-top: 50px;
+}
+
+.hasTagsView {
+  .app-main {
+    /* 84 = navbar + tags-view = 50 + 34 */
+    min-height: calc(100vh - 84px);
+  }
+
+  .fixed-header+.app-main {
+    padding-top: 84px;
+  }
+}
+</style>
+
+<style lang="scss">
+// fix css style bug in open el-dialog
+.el-popup-parent--hidden {
+  .fixed-header {
+    padding-right: 15px;
+  }
+}
+</style>

+ 251 - 251
src/layout/components/Navbar.vue

@@ -1,251 +1,251 @@
-<template>
-  <div class="navbar">
-    <hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
-
-
-     <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/>
-     <top-nav id="topmenu-container" class="breadcrumb-container" v-if="topNav"/>
-
-
-    <div class="right-menu">
-      <template v-if="device!=='mobile'">
-        <div class="right-menu-item hover-effect">
-            <el-badge v-if="msgCount>0" :value="msgCount" :max="99" class="dot">
-            </el-badge>
-         
-          <div class="msg" @click="openMsg()"><i class="el-icon-message-solid"></i> </div>
-         
-        </div>
-        
-        <!-- <search id="header-search" class="right-menu-item" />
-        
-        -->
-        <screenfull id="screenfull" class="right-menu-item hover-effect" />
-
-        <el-tooltip content="布局大小" effect="dark" placement="bottom">
-          <size-select id="size-select" class="right-menu-item hover-effect" />
-        </el-tooltip>
-
-      </template>
-
-      <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
-        <div class="avatar-wrapper">
-          <img :src="avatar" class="user-avatar">
-          <i class="el-icon-caret-bottom" />
-        </div>
-        <el-dropdown-menu slot="dropdown">
-          <router-link to="/user/profile">
-            <el-dropdown-item>个人中心</el-dropdown-item>
-          </router-link>
-          <el-dropdown-item @click.native="setting = true">
-            <span>布局设置</span>
-          </el-dropdown-item>
-          <el-dropdown-item divided @click.native="logout">
-            <span>退出登录</span>
-          </el-dropdown-item>
-        </el-dropdown-menu>
-      </el-dropdown>
-    </div>
-     <el-drawer
-      :append-to-body="true"
-      size="35%"
-      title="消息中心"
-      :with-header="false"
-        :title="msg.title" :visible.sync="msg.open"
-        >
-          <msg    ref="msg"  @update-count="getMsgCount" />
-      </el-drawer>
-      
-  </div>
-</template>
-
-<script>
-import { mapGetters } from 'vuex'
-import Breadcrumb from '@/components/Breadcrumb'
-import TopNav from '@/components/TopNav'
-import Hamburger from '@/components/Hamburger'
-import Screenfull from '@/components/Screenfull'
-import SizeSelect from '@/components/SizeSelect'
-import Search from '@/components/HeaderSearch'
-
-import msg from "@/views/crm/components/msg";
-import { getMsg,getMsgList,getMsgCount,setRead } from "@/api/crm/msg";
-
-export default {
-  components: {
-    Breadcrumb,
-    TopNav,
-    Hamburger,
-    Screenfull,
-    SizeSelect,
-    Search,
-    msg
-  },
-  computed: {
-    ...mapGetters([
-      'sidebar',
-      'avatar',
-      'device'
-    ]),
-    setting: {
-      get() {
-        return this.$store.state.settings.showSettings
-      },
-      set(val) {
-        this.$store.dispatch('settings/changeSetting', {
-          key: 'showSettings',
-          value: val
-        })
-      }
-    },
-    topNav: {
-      get() {
-        return this.$store.state.settings.topNav
-      }
-    }
-  },
-  data() {
-    return {
-      msgCount:0,
-      msg:{
-        open:false,
-        title:'通知消息'
-      },
-    }
-  },
-  created() {
-    this.getMsgCount();
-  },
-  methods: {
-    getMsgCount(){
-      getMsgCount().then(response => {
-          this.msgCount = response.counts;
-          if(this.msgCount>0){
-            this.$notify({
-              title: '提示',
-              message: '您有'+this.msgCount+"条消息通知",
-              position: 'top-right'
-            });
-          }
-          
-      });
-    },
-    openMsg(){
-      console.log(11);
-      this.msg.open=true;
-    },
-    toggleSideBar() {
-      this.$store.dispatch('app/toggleSideBar')
-    },
-    async logout() {
-      this.$confirm('确定注销并退出系统吗?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        this.$store.dispatch('LogOut').then(() => {
-          location.href = '/index';
-        })
-      })
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.navbar {
-  height: 50px;
-  overflow: hidden;
-  position: relative;
-  background: #fff;
-  box-shadow: 0 1px 4px rgba(0,21,41,.08);
-
-  .hamburger-container {
-    line-height: 46px;
-    height: 100%;
-    float: left;
-    cursor: pointer;
-    transition: background .3s;
-    -webkit-tap-highlight-color:transparent;
-
-    &:hover {
-      background: rgba(0, 0, 0, .025)
-    }
-  }
-
-  .breadcrumb-container {
-    float: left;
-  }
-
-  .errLog-container {
-    display: inline-block;
-    vertical-align: top;
-  }
-
-  .right-menu {
-    float: right;
-    height: 100%;
-    line-height: 50px;
-
-    &:focus {
-      outline: none;
-    }
-
-    .right-menu-item {
-    
-      position: relative;
-      display: inline-block;
-      padding: 0 8px;
-      height: 100%;
-      font-size: 18px;
-      color: #5a5e66;
-      vertical-align: text-bottom;
-      .msg{
-        text-align: center;
-        width:40px;
-      }
-       .dot{
-          position: absolute;
-          right:0px;
-          top:0px;
-
-        }
-      
-      &.hover-effect {
-        cursor: pointer;
-        transition: background .3s;
-
-        &:hover {
-          background: rgba(0, 0, 0, .025)
-        }
-      }
-    }
-
-    .avatar-container {
-      margin-right: 30px;
-
-      .avatar-wrapper {
-        margin-top: 5px;
-        position: relative;
-
-        .user-avatar {
-          cursor: pointer;
-          width: 40px;
-          height: 40px;
-          border-radius: 10px;
-        }
-
-        .el-icon-caret-bottom {
-          cursor: pointer;
-          position: absolute;
-          right: -20px;
-          top: 25px;
-          font-size: 12px;
-        }
-      }
-    }
-  }
-}
-
-</style>
- 
+<template>
+  <div class="navbar">
+    <hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
+
+
+     <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/>
+     <top-nav id="topmenu-container" class="breadcrumb-container" v-if="topNav"/>
+
+
+    <div class="right-menu">
+      <template v-if="device!=='mobile'">
+        <div class="right-menu-item hover-effect">
+            <el-badge v-if="msgCount>0" :value="msgCount" :max="99" class="dot">
+            </el-badge>
+         
+          <div class="msg" @click="openMsg()"><i class="el-icon-message-solid"></i> </div>
+         
+        </div>
+        
+        <!-- <search id="header-search" class="right-menu-item" />
+        
+        -->
+        <screenfull id="screenfull" class="right-menu-item hover-effect" />
+
+        <el-tooltip content="布局大小" effect="dark" placement="bottom">
+          <size-select id="size-select" class="right-menu-item hover-effect" />
+        </el-tooltip>
+
+      </template>
+
+      <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
+        <div class="avatar-wrapper">
+          <img :src="avatar" class="user-avatar">
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown">
+          <router-link to="/user/profile">
+            <el-dropdown-item>个人中心</el-dropdown-item>
+          </router-link>
+          <el-dropdown-item @click.native="setting = true">
+            <span>布局设置</span>
+          </el-dropdown-item>
+          <el-dropdown-item divided @click.native="logout">
+            <span>退出登录</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+     <el-drawer
+      :append-to-body="true"
+      size="35%"
+      title="消息中心"
+      :with-header="false"
+        :title="msg.title" :visible.sync="msg.open"
+        >
+          <msg    ref="msg"  @update-count="getMsgCount" />
+      </el-drawer>
+      
+  </div>
+</template>
+
+<script>
+import { mapGetters } from 'vuex'
+import Breadcrumb from '@/components/Breadcrumb'
+import TopNav from '@/components/TopNav'
+import Hamburger from '@/components/Hamburger'
+import Screenfull from '@/components/Screenfull'
+import SizeSelect from '@/components/SizeSelect'
+import Search from '@/components/HeaderSearch'
+
+import msg from "@/views/crm/components/msg";
+import { getMsg,getMsgList,getMsgCount,setRead } from "@/api/crm/msg";
+
+export default {
+  components: {
+    Breadcrumb,
+    TopNav,
+    Hamburger,
+    Screenfull,
+    SizeSelect,
+    Search,
+    msg
+  },
+  computed: {
+    ...mapGetters([
+      'sidebar',
+      'avatar',
+      'device'
+    ]),
+    setting: {
+      get() {
+        return this.$store.state.settings.showSettings
+      },
+      set(val) {
+        this.$store.dispatch('settings/changeSetting', {
+          key: 'showSettings',
+          value: val
+        })
+      }
+    },
+    topNav: {
+      get() {
+        return this.$store.state.settings.topNav
+      }
+    }
+  },
+  data() {
+    return {
+      msgCount:0,
+      msg:{
+        open:false,
+        title:'通知消息'
+      },
+    }
+  },
+  created() {
+    this.getMsgCount();
+  },
+  methods: {
+    getMsgCount(){
+      getMsgCount().then(response => {
+          this.msgCount = response.counts;
+          if(this.msgCount>0){
+            this.$notify({
+              title: '提示',
+              message: '您有'+this.msgCount+"条消息通知",
+              position: 'top-right'
+            });
+          }
+          
+      });
+    },
+    openMsg(){
+      console.log(11);
+      this.msg.open=true;
+    },
+    toggleSideBar() {
+      this.$store.dispatch('app/toggleSideBar')
+    },
+    async logout() {
+      this.$confirm('确定注销并退出系统吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.$store.dispatch('LogOut').then(() => {
+          location.href = '/index';
+        })
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.navbar {
+  height: 50px;
+  overflow: hidden;
+  position: relative;
+  background: #fff;
+  box-shadow: 0 1px 4px rgba(0,21,41,.08);
+
+  .hamburger-container {
+    line-height: 46px;
+    height: 100%;
+    float: left;
+    cursor: pointer;
+    transition: background .3s;
+    -webkit-tap-highlight-color:transparent;
+
+    &:hover {
+      background: rgba(0, 0, 0, .025)
+    }
+  }
+
+  .breadcrumb-container {
+    float: left;
+  }
+
+  .errLog-container {
+    display: inline-block;
+    vertical-align: top;
+  }
+
+  .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+    
+      position: relative;
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+      .msg{
+        text-align: center;
+        width:40px;
+      }
+       .dot{
+          position: absolute;
+          right:0px;
+          top:0px;
+
+        }
+      
+      &.hover-effect {
+        cursor: pointer;
+        transition: background .3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, .025)
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+
+      .avatar-wrapper {
+        margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 25px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+}
+
+</style>
+ 

+ 125 - 125
src/layout/components/Settings/index.vue

@@ -1,125 +1,125 @@
-<template>
-  <div class="drawer-container">
-    <div>
-      <h3 class="drawer-title">系统布局配置</h3>
-
-      <div class="drawer-item">
-        <span>主题颜色</span>
-        <theme-picker style="float: right;height: 26px;margin: -3px 8px 0 0;" @change="themeChange" />
-      </div>
-      <div class="drawer-item">
-        <span>开启 顶部菜单</span>
-        <el-switch v-model="topNav" class="drawer-switch" />
-      </div>
-      <div class="drawer-item">
-        <span>开启 Tags-Views</span>
-        <el-switch v-model="tagsView" class="drawer-switch" />
-      </div>
-
-      <div class="drawer-item">
-        <span>固定 Header</span>
-        <el-switch v-model="fixedHeader" class="drawer-switch" />
-      </div>
-
-      <div class="drawer-item">
-        <span>显示 Logo</span>
-        <el-switch v-model="sidebarLogo" class="drawer-switch" />
-      </div>
-
-    </div>
-  </div>
-</template>
-
-<script>
-import ThemePicker from '@/components/ThemePicker'
-
-export default {
-  components: { ThemePicker },
-  data() {
-    return {}
-  },
-  computed: {
-    fixedHeader: {
-      get() {
-        return this.$store.state.settings.fixedHeader
-      },
-      set(val) {
-        this.$store.dispatch('settings/changeSetting', {
-          key: 'fixedHeader',
-          value: val
-        })
-      }
-    },
-    topNav: {
-      get() {
-        return this.$store.state.settings.topNav
-      },
-      set(val) {
-        this.$store.dispatch('settings/changeSetting', {
-          key: 'topNav',
-          value: val
-        })
-        if (!val) {
-          this.$store.commit("SET_SIDEBAR_ROUTERS", this.$store.state.permission.defaultRoutes);
-        }
-      }
-    },
-    tagsView: {
-      get() {
-        return this.$store.state.settings.tagsView
-      },
-      set(val) {
-        this.$store.dispatch('settings/changeSetting', {
-          key: 'tagsView',
-          value: val
-        })
-      }
-    },
-    sidebarLogo: {
-      get() {
-        return this.$store.state.settings.sidebarLogo
-      },
-      set(val) {
-        this.$store.dispatch('settings/changeSetting', {
-          key: 'sidebarLogo',
-          value: val
-        })
-      }
-    },
-  },
-  methods: {
-    themeChange(val) {
-      this.$store.dispatch('settings/changeSetting', {
-        key: 'theme',
-        value: val
-      })
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.drawer-container {
-  padding: 24px;
-  font-size: 14px;
-  line-height: 1.5;
-  word-wrap: break-word;
-
-  .drawer-title {
-    margin-bottom: 12px;
-    color: rgba(0, 0, 0, .85);
-    font-size: 14px;
-    line-height: 22px;
-  }
-
-  .drawer-item {
-    color: rgba(0, 0, 0, .65);
-    font-size: 14px;
-    padding: 12px 0;
-  }
-
-  .drawer-switch {
-    float: right
-  }
-}
-</style>
+<template>
+  <div class="drawer-container">
+    <div>
+      <h3 class="drawer-title">系统布局配置</h3>
+
+      <div class="drawer-item">
+        <span>主题颜色</span>
+        <theme-picker style="float: right;height: 26px;margin: -3px 8px 0 0;" @change="themeChange" />
+      </div>
+      <div class="drawer-item">
+        <span>开启 顶部菜单</span>
+        <el-switch v-model="topNav" class="drawer-switch" />
+      </div>
+      <div class="drawer-item">
+        <span>开启 Tags-Views</span>
+        <el-switch v-model="tagsView" class="drawer-switch" />
+      </div>
+
+      <div class="drawer-item">
+        <span>固定 Header</span>
+        <el-switch v-model="fixedHeader" class="drawer-switch" />
+      </div>
+
+      <div class="drawer-item">
+        <span>显示 Logo</span>
+        <el-switch v-model="sidebarLogo" class="drawer-switch" />
+      </div>
+
+    </div>
+  </div>
+</template>
+
+<script>
+import ThemePicker from '@/components/ThemePicker'
+
+export default {
+  components: { ThemePicker },
+  data() {
+    return {}
+  },
+  computed: {
+    fixedHeader: {
+      get() {
+        return this.$store.state.settings.fixedHeader
+      },
+      set(val) {
+        this.$store.dispatch('settings/changeSetting', {
+          key: 'fixedHeader',
+          value: val
+        })
+      }
+    },
+    topNav: {
+      get() {
+        return this.$store.state.settings.topNav
+      },
+      set(val) {
+        this.$store.dispatch('settings/changeSetting', {
+          key: 'topNav',
+          value: val
+        })
+        if (!val) {
+          this.$store.commit("SET_SIDEBAR_ROUTERS", this.$store.state.permission.defaultRoutes);
+        }
+      }
+    },
+    tagsView: {
+      get() {
+        return this.$store.state.settings.tagsView
+      },
+      set(val) {
+        this.$store.dispatch('settings/changeSetting', {
+          key: 'tagsView',
+          value: val
+        })
+      }
+    },
+    sidebarLogo: {
+      get() {
+        return this.$store.state.settings.sidebarLogo
+      },
+      set(val) {
+        this.$store.dispatch('settings/changeSetting', {
+          key: 'sidebarLogo',
+          value: val
+        })
+      }
+    },
+  },
+  methods: {
+    themeChange(val) {
+      this.$store.dispatch('settings/changeSetting', {
+        key: 'theme',
+        value: val
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.drawer-container {
+  padding: 24px;
+  font-size: 14px;
+  line-height: 1.5;
+  word-wrap: break-word;
+
+  .drawer-title {
+    margin-bottom: 12px;
+    color: rgba(0, 0, 0, .85);
+    font-size: 14px;
+    line-height: 22px;
+  }
+
+  .drawer-item {
+    color: rgba(0, 0, 0, .65);
+    font-size: 14px;
+    padding: 12px 0;
+  }
+
+  .drawer-switch {
+    float: right
+  }
+}
+</style>

+ 25 - 25
src/layout/components/Sidebar/FixiOSBug.js

@@ -1,25 +1,25 @@
-export default {
-  computed: {
-    device() {
-      return this.$store.state.app.device
-    }
-  },
-  mounted() {
-    // In order to fix the click on menu on the ios device will trigger the mouseleave bug
-    this.fixBugIniOS()
-  },
-  methods: {
-    fixBugIniOS() {
-      const $subMenu = this.$refs.subMenu
-      if ($subMenu) {
-        const handleMouseleave = $subMenu.handleMouseleave
-        $subMenu.handleMouseleave = (e) => {
-          if (this.device === 'mobile') {
-            return
-          }
-          handleMouseleave(e)
-        }
-      }
-    }
-  }
-}
+export default {
+  computed: {
+    device() {
+      return this.$store.state.app.device
+    }
+  },
+  mounted() {
+    // In order to fix the click on menu on the ios device will trigger the mouseleave bug
+    this.fixBugIniOS()
+  },
+  methods: {
+    fixBugIniOS() {
+      const $subMenu = this.$refs.subMenu
+      if ($subMenu) {
+        const handleMouseleave = $subMenu.handleMouseleave
+        $subMenu.handleMouseleave = (e) => {
+          if (this.device === 'mobile') {
+            return
+          }
+          handleMouseleave(e)
+        }
+      }
+    }
+  }
+}

+ 29 - 29
src/layout/components/Sidebar/Item.vue

@@ -1,29 +1,29 @@
-<script>
-export default {
-  name: 'MenuItem',
-  functional: true,
-  props: {
-    icon: {
-      type: String,
-      default: ''
-    },
-    title: {
-      type: String,
-      default: ''
-    }
-  },
-  render(h, context) {
-    const { icon, title } = context.props
-    const vnodes = []
-
-    if (icon) {
-      vnodes.push(<svg-icon icon-class={icon}/>)
-    }
-
-    if (title) {
-      vnodes.push(<span slot='title'>{(title)}</span>)
-    }
-    return vnodes
-  }
-}
-</script>
+<script>
+export default {
+  name: 'MenuItem',
+  functional: true,
+  props: {
+    icon: {
+      type: String,
+      default: ''
+    },
+    title: {
+      type: String,
+      default: ''
+    }
+  },
+  render(h, context) {
+    const { icon, title } = context.props
+    const vnodes = []
+
+    if (icon) {
+      vnodes.push(<svg-icon icon-class={icon}/>)
+    }
+
+    if (title) {
+      vnodes.push(<span slot='title'>{(title)}</span>)
+    }
+    return vnodes
+  }
+}
+</script>

+ 43 - 43
src/layout/components/Sidebar/Link.vue

@@ -1,43 +1,43 @@
-<template>
-  <component :is="type" v-bind="linkProps(to)">
-    <slot />
-  </component>
-</template>
-
-<script>
-import { isExternal } from '@/utils/validate'
-
-export default {
-  props: {
-    to: {
-      type: String,
-      required: true
-    }
-  },
-  computed: {
-    isExternal() {
-      return isExternal(this.to)
-    },
-    type() {
-      if (this.isExternal) {
-        return 'a'
-      }
-      return 'router-link'
-    }
-  },
-  methods: {
-    linkProps(to) {
-      if (this.isExternal) {
-        return {
-          href: to,
-          target: '_blank',
-          rel: 'noopener'
-        }
-      }
-      return {
-        to: to
-      }
-    }
-  }
-}
-</script>
+<template>
+  <component :is="type" v-bind="linkProps(to)">
+    <slot />
+  </component>
+</template>
+
+<script>
+import { isExternal } from '@/utils/validate'
+
+export default {
+  props: {
+    to: {
+      type: String,
+      required: true
+    }
+  },
+  computed: {
+    isExternal() {
+      return isExternal(this.to)
+    },
+    type() {
+      if (this.isExternal) {
+        return 'a'
+      }
+      return 'router-link'
+    }
+  },
+  methods: {
+    linkProps(to) {
+      if (this.isExternal) {
+        return {
+          href: to,
+          target: '_blank',
+          rel: 'noopener'
+        }
+      }
+      return {
+        to: to
+      }
+    }
+  }
+}
+</script>

+ 83 - 83
src/layout/components/Sidebar/Logo.vue

@@ -1,83 +1,83 @@
-<template>
-  <div class="sidebar-logo-container" :class="{'collapse':collapse}">
-    <transition name="sidebarLogoFade">
-      <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
-        <img v-if="logo" :src="logo" class="sidebar-logo">
-        <h1 v-else class="sidebar-title">{{ title }} </h1>
-      </router-link>
-      <router-link v-else key="expand" class="sidebar-logo-link" to="/">
-        
-        <h1 class="sidebar-title">{{ title }} </h1>
-      </router-link>
-    </transition>
-  </div>
-</template>
-
-<script>
-import logoImg from '@/assets/logo/crm.png'
-
-export default {
-  name: 'SidebarLogo',
-  props: {
-    collapse: {
-      type: Boolean,
-      required: true
-    }
-  },
-  data() {
-    return {
-      title: '御君方管理平台',
-      logo: logoImg
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.sidebarLogoFade-enter-active {
-  transition: opacity 1.5s;
-}
-
-.sidebarLogoFade-enter,
-.sidebarLogoFade-leave-to {
-  opacity: 0;
-}
-
-.sidebar-logo-container {
-  position: relative;
-  width: 100%;
-  height: 50px;
-  line-height: 50px;
-  text-align: center;
-  overflow: hidden;
-
-  & .sidebar-logo-link {
-    height: 100%;
-    width: 100%;
-
-    & .sidebar-logo {
-      width: 32px;
-      height: 32px;
-      vertical-align: middle;
-      margin-right: 12px;
-    }
-
-    & .sidebar-title {
-      display: inline-block;
-      margin: 0;
-      color: #fff;
-      font-weight: 600;
-      line-height: 50px;
-      font-size: 16px;
-      font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
-      vertical-align: middle;
-    }
-  }
-
-  &.collapse {
-    .sidebar-logo {
-      margin-right: 0px;
-    }
-  }
-}
-</style>
+<template>
+  <div class="sidebar-logo-container" :class="{'collapse':collapse}">
+    <transition name="sidebarLogoFade">
+      <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
+        <img v-if="logo" :src="logo" class="sidebar-logo">
+        <h1 v-else class="sidebar-title">{{ title }} </h1>
+      </router-link>
+      <router-link v-else key="expand" class="sidebar-logo-link" to="/">
+        
+        <h1 class="sidebar-title">{{ title }} </h1>
+      </router-link>
+    </transition>
+  </div>
+</template>
+
+<script>
+import logoImg from '@/assets/logo/crm.png'
+
+export default {
+  name: 'SidebarLogo',
+  props: {
+    collapse: {
+      type: Boolean,
+      required: true
+    }
+  },
+  data() {
+    return {
+      title: '御君方管理平台',
+      logo: logoImg
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.sidebarLogoFade-enter-active {
+  transition: opacity 1.5s;
+}
+
+.sidebarLogoFade-enter,
+.sidebarLogoFade-leave-to {
+  opacity: 0;
+}
+
+.sidebar-logo-container {
+  position: relative;
+  width: 100%;
+  height: 50px;
+  line-height: 50px;
+  text-align: center;
+  overflow: hidden;
+
+  & .sidebar-logo-link {
+    height: 100%;
+    width: 100%;
+
+    & .sidebar-logo {
+      width: 32px;
+      height: 32px;
+      vertical-align: middle;
+      margin-right: 12px;
+    }
+
+    & .sidebar-title {
+      display: inline-block;
+      margin: 0;
+      color: #fff;
+      font-weight: 600;
+      line-height: 50px;
+      font-size: 16px;
+      font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
+      vertical-align: middle;
+    }
+  }
+
+  &.collapse {
+    .sidebar-logo {
+      margin-right: 0px;
+    }
+  }
+}
+</style>

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików