瀏覽代碼

Merge branch 'online' into wxlNew

lex-xin 4 年之前
父節點
當前提交
6229b3d4a8
共有 83 個文件被更改,包括 1267 次插入20 次删除
  1. 0 0
      dist/index.html
  2. 0 0
      dist/static/css/app.5b84b65b.css
  3. 0 0
      dist/static/css/app.680b91a1.css
  4. 0 0
      dist/static/css/chunk-0f9d7f8c.84c6ec26.css
  5. 0 1
      dist/static/css/chunk-1dbb7353.641b676e.css
  6. 0 1
      dist/static/css/chunk-2023c8b2.e9293964.css
  7. 1 1
      dist/static/css/chunk-2463d69e.6466174d.css
  8. 0 0
      dist/static/css/chunk-3d816a95.bbba231d.css
  9. 0 1
      dist/static/css/chunk-4989a8c1.46905ed8.css
  10. 0 0
      dist/static/css/chunk-4a8375df.ef7999b4.css
  11. 0 1
      dist/static/css/chunk-5c85eb1e.641b676e.css
  12. 1 1
      dist/static/css/chunk-643eb91f.ebc6296e.css
  13. 1 0
      dist/static/css/chunk-75e25985.97e8463b.css
  14. 0 0
      dist/static/css/chunk-78cd1ee6.bf726fa4.css
  15. 0 0
      dist/static/css/chunk-af8308ae.8278721c.css
  16. 0 0
      dist/static/css/chunk-libs.3dfb7769.css
  17. 0 0
      dist/static/js/app.dbd45c56.js
  18. 0 0
      dist/static/js/app.e04767b0.js
  19. 0 0
      dist/static/js/chunk-0244edce.7e1f676b.js
  20. 0 0
      dist/static/js/chunk-03ab9d3a.cd5c5630.js
  21. 0 0
      dist/static/js/chunk-03ab9d3a.cf8e159e.js
  22. 0 0
      dist/static/js/chunk-09753c97.d5e625bb.js
  23. 0 0
      dist/static/js/chunk-09753c97.f4b7a732.js
  24. 0 0
      dist/static/js/chunk-0f9d7f8c.08d78651.js
  25. 0 0
      dist/static/js/chunk-152003e2.aa211348.js
  26. 0 0
      dist/static/js/chunk-152003e2.c3b63237.js
  27. 0 0
      dist/static/js/chunk-1dbb7353.ab477a76.js
  28. 0 0
      dist/static/js/chunk-2023c8b2.cf3c6f79.js
  29. 0 0
      dist/static/js/chunk-2463d69e.609ca180.js
  30. 0 0
      dist/static/js/chunk-2463d69e.a716dca1.js
  31. 0 0
      dist/static/js/chunk-24e8c65d.2c371d8e.js
  32. 0 0
      dist/static/js/chunk-24e8c65d.970bb289.js
  33. 0 0
      dist/static/js/chunk-2bfecc27.857e2043.js
  34. 0 0
      dist/static/js/chunk-2d722f25.368a37a2.js
  35. 0 0
      dist/static/js/chunk-3884aacc.71d7958e.js
  36. 0 0
      dist/static/js/chunk-3884aacc.a5c2d967.js
  37. 0 0
      dist/static/js/chunk-3d816a95.a55ae76b.js
  38. 0 0
      dist/static/js/chunk-40e665d1.c38fe46e.js
  39. 0 0
      dist/static/js/chunk-4989a8c1.840e83ac.js
  40. 0 0
      dist/static/js/chunk-53974364.0a621914.js
  41. 0 0
      dist/static/js/chunk-53974364.11d007f8.js
  42. 0 0
      dist/static/js/chunk-5c85eb1e.eed4395c.js
  43. 0 0
      dist/static/js/chunk-5e9eef69.5b44e423.js
  44. 0 0
      dist/static/js/chunk-5e9eef69.ad60d5db.js
  45. 0 0
      dist/static/js/chunk-5edc8258.31f17266.js
  46. 0 0
      dist/static/js/chunk-5f0549de.0cbaa3ee.js
  47. 0 0
      dist/static/js/chunk-5f0549de.ba78b62f.js
  48. 0 0
      dist/static/js/chunk-6181ddae.5e3f7c88.js
  49. 0 0
      dist/static/js/chunk-643eb91f.49e8b366.js
  50. 0 0
      dist/static/js/chunk-68640c4e.65db3933.js
  51. 0 0
      dist/static/js/chunk-68640c4e.b9a6274a.js
  52. 0 0
      dist/static/js/chunk-75e25985.0665de82.js
  53. 0 0
      dist/static/js/chunk-7730eaf5.9e59c825.js
  54. 0 0
      dist/static/js/chunk-7730eaf5.c86a21b7.js
  55. 0 0
      dist/static/js/chunk-78cd1ee6.a814e0c9.js
  56. 0 0
      dist/static/js/chunk-78f2a2b7.383b3eb7.js
  57. 0 0
      dist/static/js/chunk-78f2a2b7.e280cb31.js
  58. 0 0
      dist/static/js/chunk-7d63f23d.8e1c7c5b.js
  59. 0 0
      dist/static/js/chunk-89cb15c4.47275097.js
  60. 0 0
      dist/static/js/chunk-89cb15c4.94885039.js
  61. 0 0
      dist/static/js/chunk-92fa2400.a9e99450.js
  62. 0 0
      dist/static/js/chunk-92fa2400.dd8decd3.js
  63. 0 0
      dist/static/js/chunk-98ae4e4a.16455bb7.js
  64. 0 0
      dist/static/js/chunk-9c5a7dc4.681a46d2.js
  65. 0 0
      dist/static/js/chunk-af8308ae.fc8a5dd2.js
  66. 0 0
      dist/static/js/chunk-bc672cf4.44d496c0.js
  67. 0 0
      dist/static/js/chunk-bc672cf4.64db6450.js
  68. 0 0
      dist/static/js/chunk-da5fa00c.90a5cd04.js
  69. 0 0
      dist/static/js/chunk-da5fa00c.e74688d4.js
  70. 0 0
      dist/static/js/chunk-dd2d42c0.537c1037.js
  71. 0 0
      dist/static/js/chunk-dd2d42c0.9a1754f9.js
  72. 0 0
      dist/static/js/chunk-edcf4054.fe55a0d2.js
  73. 0 0
      dist/static/js/chunk-f15e1558.1c810af2.js
  74. 0 0
      dist/static/js/chunk-libs.eae810e9.js
  75. 1 1
      package.json
  76. 27 2
      src/api/appTenant.js
  77. 157 0
      src/components/Descriptions/Descriptions.vue
  78. 3 0
      src/components/Descriptions/index.js
  79. 2 0
      src/router/index.js
  80. 10 2
      src/utils/vueFilter.js
  81. 551 0
      src/views/HumanResources/form.vue
  82. 504 0
      src/views/HumanResources/index.vue
  83. 9 9
      src/views/contentManager/contentOperation.vue

文件差異過大導致無法顯示
+ 0 - 0
dist/index.html


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/app.5b84b65b.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/app.680b91a1.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-0f9d7f8c.84c6ec26.css


+ 0 - 1
dist/static/css/chunk-1dbb7353.641b676e.css

@@ -1 +0,0 @@
-.pagination-container[data-v-31cb099a]{background:#fff;padding:32px 16px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.pagination-container.hidden[data-v-31cb099a]{display:none}

+ 0 - 1
dist/static/css/chunk-2023c8b2.e9293964.css

@@ -1 +0,0 @@
-.el-button--primary[data-v-5ef629ae],.el-button--primary[data-v-5ef629ae]:active,.el-button--primary[data-v-5ef629ae]:focus,.el-button--primary[data-v-5ef629ae]:hover{background:#14928a;border-color:#14928a;color:#fff}.el-row[data-v-5ef629ae]{margin-top:40px}.el-col[data-v-5ef629ae]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:20px;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;margin-right:50%}.el-input-group[data-v-5ef629ae]{width:200px;margin:0 20px}[data-v-5ef629ae] .el-tree-node__content{height:40px!important}[data-v-5ef629ae] .avatar-uploader .el-upload{border:1px dashed #d9d9d9;border-radius:6px;cursor:pointer;position:relative;overflow:hidden}.avatar-uploader .el-upload[data-v-5ef629ae]:hover{border-color:#409eff}.avatar-uploader-icon[data-v-5ef629ae]{font-size:28px;color:#8c939d;width:120px;height:120px;line-height:120px;text-align:center}.avatar[data-v-5ef629ae]{width:120px;height:120px;display:block}

+ 1 - 1
dist/static/css/chunk-2463d69e.41790e12.css → dist/static/css/chunk-2463d69e.6466174d.css

@@ -1 +1 @@
-.pagination-container[data-v-31cb099a]{background:#fff;padding:32px 16px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.pagination-container.hidden[data-v-31cb099a]{display:none}.newBand{display:inline-block}/deep/.el-input-number.is-controls-right .el-input__inner{text-align:left}.setWidth{display:inline-block}
+.pagination-container[data-v-31cb099a]{background:#fff;padding:32px 16px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.pagination-container.hidden[data-v-31cb099a]{display:none}.newBand{display:inline-block}/deep/.el-input-number.is-controls-right .el-input__inner{text-align:left}

+ 0 - 0
dist/static/css/chunk-59645f69.85b8275c.css → dist/static/css/chunk-3d816a95.bbba231d.css


+ 0 - 1
dist/static/css/chunk-4989a8c1.46905ed8.css

@@ -1 +0,0 @@
-.pagination-container[data-v-31cb099a]{background:#fff;padding:32px 16px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.pagination-container.hidden[data-v-31cb099a]{display:none}.content-tooltip[data-v-5b71dac8]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:100%;display:inline-block}.shopImage{width:60px;height:60px}.shopDesc{max-height:70px;overflow:hidden}

+ 0 - 0
dist/static/css/chunk-4a8375df.b1155bcc.css → dist/static/css/chunk-4a8375df.ef7999b4.css


+ 0 - 1
dist/static/css/chunk-5c85eb1e.641b676e.css

@@ -1 +0,0 @@
-.pagination-container[data-v-31cb099a]{background:#fff;padding:32px 16px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.pagination-container.hidden[data-v-31cb099a]{display:none}

+ 1 - 1
dist/static/css/chunk-9c5a7dc4.641b676e.css → dist/static/css/chunk-643eb91f.ebc6296e.css

@@ -1 +1 @@
-.pagination-container[data-v-31cb099a]{background:#fff;padding:32px 16px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.pagination-container.hidden[data-v-31cb099a]{display:none}
+.pagination-container[data-v-31cb099a]{background:#fff;padding:32px 16px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.pagination-container.hidden[data-v-31cb099a]{display:none}.shopImage{width:60px;height:60px}.shopDesc{max-height:70px;overflow:hidden}

+ 1 - 0
dist/static/css/chunk-75e25985.97e8463b.css

@@ -0,0 +1 @@
+.el-button--primary[data-v-717de9cc],.el-button--primary[data-v-717de9cc]:active,.el-button--primary[data-v-717de9cc]:focus,.el-button--primary[data-v-717de9cc]:hover{background:#14928a;border-color:#14928a;color:#fff}.el-row[data-v-717de9cc]{margin-top:40px}.el-col[data-v-717de9cc]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:20px;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;margin-right:50%}.el-input-group[data-v-717de9cc]{width:200px;margin:0 20px}[data-v-717de9cc] .el-tree-node__content{height:40px!important}[data-v-717de9cc] .avatar-uploader .el-upload{border:1px dashed #d9d9d9;border-radius:6px;cursor:pointer;position:relative;overflow:hidden}.avatar-uploader .el-upload[data-v-717de9cc]:hover{border-color:#409eff}.avatar-uploader-icon[data-v-717de9cc]{font-size:28px;color:#8c939d;width:120px;height:120px;line-height:120px;text-align:center}.avatar[data-v-717de9cc]{width:120px;height:120px;display:block}

文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-78cd1ee6.bf726fa4.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-af8308ae.8278721c.css


+ 0 - 0
dist/static/css/chunk-libs.5cf311f0.css → dist/static/css/chunk-libs.3dfb7769.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/app.dbd45c56.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/app.e04767b0.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-0244edce.7e1f676b.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-03ab9d3a.cd5c5630.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-03ab9d3a.cf8e159e.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-09753c97.d5e625bb.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-09753c97.f4b7a732.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-0f9d7f8c.08d78651.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-152003e2.aa211348.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-152003e2.c3b63237.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-1dbb7353.ab477a76.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-2023c8b2.cf3c6f79.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-2463d69e.609ca180.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-2463d69e.a716dca1.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-24e8c65d.2c371d8e.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-24e8c65d.970bb289.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-2bfecc27.857e2043.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-2d722f25.368a37a2.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-3884aacc.71d7958e.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-3884aacc.a5c2d967.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-3d816a95.a55ae76b.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-40e665d1.c38fe46e.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-4989a8c1.840e83ac.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-53974364.0a621914.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-53974364.11d007f8.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-5c85eb1e.eed4395c.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-5e9eef69.5b44e423.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-5e9eef69.ad60d5db.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-5edc8258.31f17266.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-5f0549de.0cbaa3ee.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-5f0549de.ba78b62f.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-6181ddae.5e3f7c88.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-643eb91f.49e8b366.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-68640c4e.65db3933.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-68640c4e.b9a6274a.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-75e25985.0665de82.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-7730eaf5.9e59c825.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-7730eaf5.c86a21b7.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-78cd1ee6.a814e0c9.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-78f2a2b7.383b3eb7.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-78f2a2b7.e280cb31.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-7d63f23d.8e1c7c5b.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-89cb15c4.47275097.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-89cb15c4.94885039.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-92fa2400.a9e99450.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-92fa2400.dd8decd3.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-98ae4e4a.16455bb7.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-9c5a7dc4.681a46d2.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-af8308ae.fc8a5dd2.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-bc672cf4.44d496c0.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-bc672cf4.64db6450.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-da5fa00c.90a5cd04.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-da5fa00c.e74688d4.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-dd2d42c0.537c1037.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-dd2d42c0.9a1754f9.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-edcf4054.fe55a0d2.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-f15e1558.1c810af2.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-libs.eae810e9.js


+ 1 - 1
package.json

@@ -18,7 +18,7 @@
     "browserslist": "^4.13.0",
     "caniuse-lite": "^1.0.30001109",
     "clean-deep": "^3.3.0",
-    "dayjs": "^1.8.34",
+    "dayjs": "^1.8.35",
     "default-passive-events": "^1.0.10",
     "element-ui": "^2.13.2",
     "i": "^0.3.6",

+ 27 - 2
src/api/appTenant.js

@@ -46,7 +46,7 @@ export function helpCenterCatalogList(data) {
   })
 }
 
-// 帮助中心分类列表 添加或修改  
+// 帮助中心分类列表 添加或修改
 export function helpCenterCatalogModify(data) {
   return request({
     url: '/api-cms/helpCenterCatalog/modify',
@@ -101,4 +101,29 @@ export function sysSuggestionList(data) {
   })
 }
 
-  
+// 人力资源列表
+export function employeeInfo(data) {
+  return request({
+    method: 'get',
+    url: '/api-web/employeeInfo/queryPage',
+    params: data
+  })
+}
+
+// 人力资源添加
+export function employeeCreate(data) {
+  return request({
+    method: 'post',
+    url: '/api-web/employeeInfo/insert',
+    data
+  })
+}
+
+// 人力资源修改
+export function employeeUpdate(data) {
+  return request({
+    method: 'post',
+    url: '/api-web/employeeInfo/update',
+    data
+  })
+}

+ 157 - 0
src/components/Descriptions/Descriptions.vue

@@ -0,0 +1,157 @@
+/**
+* 详情描述组件
+* https://github.com/winkay/vue-descriptions-component/blob/master/src/components/Descriptions/Descriptions.vue
+*/
+<template>
+  <div>
+    <div class="description-title">
+      <slot name='title'>{{title}}</slot>
+    </div>
+    <div class="description-view">
+      <table class="description-table">
+        <tbody>
+          <tr :key="key" class="description-tr" v-for="(row, key) in rows">
+            <template v-for="(item, index) in row">
+              <th class="description-label" :key="'label-' + key + '-' + index">
+                {{item.label}}
+              </th>
+              <td class="description-content" :colSpan="item.span*2-1" :key="'content-' + key + '-' + index">
+                <description-content :item="item"></description-content>
+              </td>
+            </template>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'Descriptions',
+  components: {
+    // 描述内容子组件渲染
+    DescriptionContent: {
+      props: {
+        item: Object
+      },
+      render(h) {
+        return this.item.children
+      }
+    }
+  },
+  props: {
+    title: null, // 描述内容标题
+    column: { // 每行显示的项目个数
+      type: Number,
+      default: 4
+    }
+  },
+  data() {
+    return {
+      rows: []
+    }
+  },
+  watch: {
+    column(value) {
+      this.generateChildrenRow(this.$slots.default || [])
+    }
+  },
+  mounted() {
+    this.generateChildrenRow(this.$slots.default || [])
+  },
+  methods: {
+    // 获取描述内容子项
+    generateChildrenRow(dataSource) {
+      const dataList = dataSource.filter(item => item.tag === 'descriptions-item')
+      console.log(dataList)
+      this.rows = []
+      let leftSpan = this.column
+      let children = []
+      dataList.forEach((item, index) => {
+        const itemAttrs = item.data.attrs || {}
+        // 处理column与span之间的关系
+        if (leftSpan <= (itemAttrs.span || 1)) { // 剩余的列数小于设置的span个数
+          itemAttrs.span = leftSpan
+          leftSpan = 0
+        } else {
+          leftSpan -= itemAttrs.span || 1
+        }
+        children.push({
+          span: itemAttrs.span || 1,
+          label: (item.data && itemAttrs.label) || '',
+          ...item
+        })
+        if (leftSpan <= 0) {
+          leftSpan = this.column
+          this.$set(this.rows, this.rows.length, children)
+          children = []
+        }
+        // 最后一行
+        if (dataList.length % this.column < this.column && index === (dataList.length - 1)) {
+          this.$set(this.rows, this.rows.length, children)
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+  .description-title {
+    margin-bottom: 20px;
+    color: rgba(0,0,0,.85);
+    font-weight: 700;
+    font-size: 16px;
+    line-height: 1.5;
+  }
+  .description-view {
+    width: 100%;
+    border: 1px solid #e8e8e8;
+  }
+  .description-view .description-table {
+    width: 100%;
+    /* border: 1px solid #e8e8e8; */
+    border-collapse: collapse;
+    table-layout: fixed;
+  }
+  .description-view .description-tr {
+    border-bottom: 1px solid #e8e8e8;
+    width: 100%;
+  }
+  .description-view .description-tr:last-child {
+    border-bottom: none;
+  }
+  .description-view .description-label {
+    border-right: 1px solid #e8e8e8;
+    background-color: #fafafa;
+    color: rgba(0, 0, 0, 0.85);
+    font-weight: 400;
+    font-size: 14px;
+    line-height: 22px;
+    /* margin-right: 8px; */
+    padding: 12px 16px;
+    white-space: nowrap;
+    display: table-cell;
+  }
+  .description-view .description-label:after {
+    content: ""; /** content: ":" */
+    margin: 0 8px 0 2px;
+    position: relative;
+    top: -0.5px;
+  }
+  .description-view .description-content {
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    border-right: 1px solid #e8e8e8;
+    font-size: 14px;
+    line-height: 1.5;
+    padding: 12px 16px;
+    color: rgba(0, 0, 0, 0.65);
+    display: table-cell;
+  }
+  .description-tr .description-content:last-child {
+    border-right: none;
+  }
+</style>

+ 3 - 0
src/components/Descriptions/index.js

@@ -0,0 +1,3 @@
+import Descriptions from './Descriptions.vue'
+Descriptions.install = Vue => Vue.component(Descriptions.name, Descriptions)
+export default Descriptions

+ 2 - 0
src/router/index.js

@@ -318,5 +318,7 @@ export const asyncRoutes = {
   payRecord: () => import('@/views/businessManager/orderManager/payRecord'),
   // 销售列表
   salesList: () => import('@/views/businessManager/orderManager/salesList'),
+  // 人力资源
+  HumanResources: () => import('@/views/HumanResources'),
 }
 export default router

+ 10 - 2
src/utils/vueFilter.js

@@ -1,4 +1,5 @@
 import Vue from 'vue'
+import dayjs from 'dayjs'
 
 // 合并数组
 Vue.filter('joinArray', (value, type) => {
@@ -130,6 +131,13 @@ Vue.filter('studentTeamStatus', value => {
 })
 
 // 时间处理
+Vue.filter('dayjsFormat', (value) => {
+  if (value) {
+    return dayjs(value).format('YYYY-MM-DD')
+  } else {
+    return value
+  }
+})
 Vue.filter('formatTimer', (value) => {
   if (value) {
     return value.split(' ')[0]
@@ -237,7 +245,7 @@ Vue.filter('orderType', value => {
   return template[value]
 })
 
-// 
+//
 Vue.filter('paymentChannelType', value => {
   let template = {
     PER: "个人",
@@ -548,4 +556,4 @@ Vue.filter('visiterType', value => {
     'EDU_TEACHER': "教务老师",
   }
   return template[value]
-})
+})

+ 551 - 0
src/views/HumanResources/form.vue

@@ -0,0 +1,551 @@
+<template>
+  <div>
+    <div class="description-title">
+      <span>基本信息</span>
+    </div>
+    <el-form :model="form" :rules="rules" ref="ruleForm" label-width="0px">
+      <div class="description-view">
+        <table class="description-table">
+          <tbody>
+            <tr class="description-tr">
+              <th class="description-label">姓名</th>
+              <td class="description-content">
+                <el-form-item prop="realName">
+                  <el-input v-model="form.realName" size="mini" placeholder="请输入姓名"/>
+                </el-form-item>
+              </td>
+              <th class="description-label">手机号</th>
+              <td class="description-content">
+                <el-form-item prop="mobileNo">
+                  <el-input size="mini" v-model="form.mobileNo" placeholder="请输入手机号"/>
+                </el-form-item>
+              </td>
+              <th class="description-label">微信号</th>
+              <td class="description-content">
+                <el-form-item prop="wechatNo">
+                  <el-input size="mini" v-model="form.wechatNo" placeholder="请输入微信号"/>
+                </el-form-item>
+              </td>
+            </tr>
+            <tr class="description-tr" v-for="(item, index) in educations" :key="index">
+              <th class="description-label desc-item">
+                <span class="close">
+                  <i v-if="index === 0" @click="addEducation" class="el-icon-circle-plus-outline"/>
+                  <i v-else @click="removeEducation(index)" class="el-icon-remove-outline"/>
+                </span>学历</th>
+              <td class="description-content">
+                <el-form-item prop="level">
+                  <el-input v-model="educations[index].level" size="mini" placeholder="请输入学历"/>
+                </el-form-item>
+              </td>
+              <th class="description-label">学校</th>
+              <td class="description-content">
+                <el-form-item prop="school">
+                  <el-input size="mini" v-model="educations[index].school" placeholder="请输入学校"/>
+                </el-form-item>
+              </td>
+              <th class="description-label">毕业时间</th>
+              <td class="description-content">
+                <el-form-item prop="year">
+                  <el-date-picker
+                    type="month"
+                    placeholder="请选择毕业时间"
+                    size="mini"
+                    v-model="educations[index].year"
+                  />
+                </el-form-item>
+              </td>
+            </tr>
+            <tr class="description-tr">
+              <th class="description-label">所在城市</th>
+              <td class="description-content">
+                <el-form-item prop="liveCity">
+                  <el-input size="mini" v-model.trim="form.liveCity" placeholder="请输入所在城市"/>
+                </el-form-item>
+              </td>
+              <th class="description-label">工作意向</th>
+              <td class="description-content">
+                <el-form-item prop="intentionCity">
+                  <el-input size="mini" v-model.trim="form.intentionCity" placeholder="请输入工作意向"/>
+                </el-form-item>
+              </td>
+              <th class="description-label">声部</th>
+              <td class="description-content">
+                <el-form-item prop="subjectId">
+                  <el-select
+                    v-model.trim="form.subjectId"
+                    clearable
+                    filterable
+                    size="mini"
+                    placeholder='请选择声部'
+                  >
+                    <el-option-group v-for="group in subjectList"
+                                      :key="group.label"
+                                      :label="group.label">
+                      <el-option v-for="item in group.options"
+                                  :key="item.value"
+                                  :label="item.label"
+                                  :value="item.value">
+                      </el-option>
+                    </el-option-group>
+                  </el-select>
+                </el-form-item>
+              </td>
+            </tr>
+            <tr class="description-tr">
+              <th class="description-label">是否经过评估</th>
+              <td class="description-content">
+                <el-form-item prop="isInterviewed">
+                  <el-select size="mini" v-model.trim="form.isInterviewed"
+                              clearable
+                              filterable
+                              placeholder="请选择是否经过评估">
+                    <el-option label="是"
+                                :value="true"></el-option>
+                    <el-option label="否"
+                                :value="false"></el-option>
+                  </el-select>
+                </el-form-item>
+              </td>
+              <th class="description-label">其他综合情况</th>
+              <td class="description-content" colspan="3">
+                <el-form-item prop="otherComment">
+                  <el-input size="mini" v-model.trim="form.otherComment" placeholder="请输入其他综合情况"/>
+                </el-form-item>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+
+      <div class="description-title" style="margin-top: 20px">
+        <span>在职信息</span>
+      </div>
+      <div class="description-view">
+        <table class="description-table">
+          <tbody>
+            <tr class="description-tr">
+              <th class="description-label">入职日期</th>
+              <td class="description-content">
+                <el-form-item prop="entryDate">
+                  <el-date-picker
+                    type="date"
+                    placeholder="选择入职日期"
+                    size="mini"
+                    v-model="form.entryDate"
+                  />
+                </el-form-item>
+              </td>
+              <th class="description-label">职位</th>
+              <td class="description-content">
+                <el-form-item prop="position">
+                  <el-select v-model.trim="form.position"
+                            clearable
+                            filterable
+                            size="mini"
+                            placeholder="请选择职位">
+                    <el-option label="指导老师"
+                              value="ADVISER"></el-option>
+                    <el-option label="教务老师"
+                              value="ACADEMIC"></el-option>
+                    <el-option label="乐队指导"
+                              value="TEACHING"></el-option>
+                  </el-select>
+                </el-form-item>
+              </td>
+              <th class="description-label">分部</th>
+              <td class="description-content">
+                <el-form-item prop="organId">
+                  <el-select v-model.trim="form.organId"
+                      placeholder='请选择分部'
+                      clearable
+                      filterable
+                      size="mini"
+                    >
+                      <el-option v-for='(item,index) in organList'
+                        :key="index"
+                        :value="item.id"
+                        :label="item.name"
+                      >
+                      </el-option>
+                    </el-select>
+                  </el-form-item>
+              </td>
+            </tr>
+            <tr class="description-tr">
+              <th class="description-label">员工类型</th>
+              <td class="description-content">
+                <el-form-item prop="jobNature">
+                  <el-select size="mini" v-model.trim="form.jobNature"
+                              clearable
+                              filterable
+                              placeholder="请选择员工类型">
+                    <el-option label="全职"
+                                value="FULL_TIME"></el-option>
+                    <el-option label="兼职"
+                                value="PART_TIME"></el-option>
+                    <el-option label="临时"
+                                value="TEMPORARY"></el-option>
+                  </el-select>
+                </el-form-item>
+              </td>
+              <th class="description-label">员工状态</th>
+              <td class="description-content">
+                <el-form-item prop="isProbationPeriod">
+                  <el-select size="mini" v-model.trim="form.isProbationPeriod"
+                              clearable
+                              filterable
+                              placeholder="请选择员工状态">
+                    <el-option label="正式"
+                                :value="true"></el-option>
+                    <el-option label="试用"
+                                :value="false"></el-option>
+                  </el-select>
+                </el-form-item>
+              </td>
+              <th class="description-label">离职日期</th>
+              <td class="description-content">
+                <el-form-item prop="resignationDate">
+                  <el-date-picker
+                    type="date"
+                    placeholder="选择离职日期"
+                    size="mini"
+                    v-model="form.resignationDate"
+                  />
+                </el-form-item>
+              </td>
+            </tr>
+            <tr class="description-tr">
+              <th class="description-label">证件号码</th>
+              <td class="description-content" colspan="5">
+                <el-form-item prop="idCard">
+                  <el-input size="mini" v-model="form.idCard" placeholder="请输入证件号码"/>
+                </el-form-item>
+              </td>
+            </tr>
+            <tr class="description-tr">
+              <th class="description-label">年龄</th>
+              <td class="description-content">
+                <el-form-item prop="age">
+                  <el-input v-model="form.age" size="mini" placeholder="请输入年龄"/>
+                </el-form-item>
+              </td>
+              <th class="description-label">性别</th>
+              <td class="description-content" colspan="3">
+                <el-form-item prop="gender">
+                  <el-select size="mini" v-model.trim="form.gender"
+                              clearable
+                              filterable
+                              placeholder="请选择性别">
+                    <el-option label="男"
+                                :value="true"></el-option>
+                    <el-option label="女"
+                                :value="false"></el-option>
+                  </el-select>
+                </el-form-item>
+              </td>
+            </tr>
+            <tr class="description-tr">
+              <th class="description-label">开户行</th>
+              <td class="description-content">
+                <el-form-item prop="bankAddress">
+                  <el-input size="mini" v-model="form.bankAddress" placeholder="请输入开户行"/>
+                </el-form-item>
+              </td>
+              <th class="description-label">银行卡号</th>
+              <td class="description-content" colspan="3">
+                <el-form-item prop="bankCardNo">
+                  <el-input size="mini" v-model="form.bankCardNo" placeholder="请输入银行卡号"/>
+                </el-form-item>
+              </td>
+            </tr>
+            <tr class="description-tr">
+              <th class="description-label">紧急联系人姓名</th>
+              <td class="description-content">
+                <el-form-item prop="emergencyContactName">
+                  <el-input size="mini" v-model.trim="form.emergencyContactName" placeholder="请输入紧急联系人姓名"/>
+                </el-form-item>
+              </td>
+              <th class="description-label">紧急联系人关系</th>
+              <td class="description-content">
+                <el-form-item prop="emergencyContactRelation">
+                  <el-input size="mini" v-model.trim="form.emergencyContactRelation" placeholder="请输入紧急联系人关系"/>
+                </el-form-item>
+              </td>
+              <th class="description-label">紧急联系人电话</th>
+              <td class="description-content">
+                <el-form-item prop="emergencyContactPhone">
+                  <el-input size="mini" v-model.trim="form.emergencyContactPhone" placeholder="请输入紧急联系人电话"/>
+                </el-form-item>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+    </el-form>
+    <span class="dialog-footer">
+      <el-button @click="close('ruleForm')">取 消</el-button>
+      <el-button type="primary" class="main-button" @click="onTypeSubmit('ruleForm')">确 定</el-button>
+    </span>
+  </div>
+</template>
+<script>
+// import Vue from 'vue'
+import { employeeCreate, employeeUpdate } from '@/api/appTenant'
+import Descriptions from '@/components/Descriptions'
+
+// Vue.use(Descriptions)
+export default {
+  name: 'hrform',
+  props: ['detail', 'subjectList', 'organList', 'close'],
+  components: {
+    descriptions: Descriptions
+  },
+  data() {
+    return {
+      realName: '',
+      form: {
+        age: '',
+        bankAddress: '',
+        bankCardNo: '',
+        birthdate: '',
+        educationalBackground: '',
+        emergencyContactName: '',
+        emergencyContactPhone: '',
+        emergencyContactRelation: '',
+        entryDate: '',
+        gender: true,
+        idCard: '',
+        intentionCity: '',
+        isInterviewed: true,
+        isProbationPeriod: true,
+        jobNature: '',
+        liveCity: '',
+        mobileNo: '',
+        otherComment: '',
+        position: '',
+        realName: '',
+        resignationDate: '',
+        subjectId: '',
+        wechatNo: '',
+        organId: '',
+      },
+      rules: {
+        age: [
+          { required: true, message: '请输入年龄', trigger: 'blur' },
+        ],
+        bankAddress: [
+          { required: true, message: '请输入开户行', trigger: 'blur' },
+        ],
+        bankCardNo: [
+          { required: true, message: '请输入卡号', trigger: 'blur' },
+        ],
+        birthdate: [
+          { required: true, message: '请输入生日', trigger: 'blur' },
+        ],
+        // bankAddress: [
+        //   { required: true, message: '请输入年龄', trigger: 'blur' },
+        // ],
+        emergencyContactName: [
+          { required: true, message: '请输入紧急联系人姓名', trigger: 'blur' },
+        ],
+        emergencyContactPhone: [
+          { required: true, message: '请输入紧急联系人电话', trigger: 'blur' },
+        ],
+        emergencyContactRelation: [
+          { required: true, message: '请输入紧急联系人关系', trigger: 'blur' },
+        ],
+        entryDate: [
+          { required: true, message: '请输入入职日期', trigger: 'blur' },
+        ],
+        gender: [
+          { required: true, message: '请选择性别', trigger: 'blur' },
+        ],
+        idCard: [
+          { required: true, message: '请输入证件号码', trigger: 'blur' },
+        ],
+        intentionCity: [
+          { required: true, message: '请输入工作意向', trigger: 'blur' },
+        ],
+        isInterviewed: [
+          { required: true, message: '请选择是否经过评估', trigger: 'blur' },
+        ],
+        isProbationPeriod: [
+          { required: true, message: '请选择员工状态', trigger: 'blur' },
+        ],
+        jobNature: [
+          { required: true, message: '请选择员工类型', trigger: 'blur' },
+        ],
+        liveCity: [
+          { required: true, message: '请输入所在城市', trigger: 'blur' },
+        ],
+        mobileNo: [
+          { required: true, message: '请输入手机号', trigger: 'blur' },
+        ],
+        otherComment: [
+          { required: true, message: '请输入其他综合情况', trigger: 'blur' },
+        ],
+        position: [
+          { required: true, message: '请输入职位', trigger: 'blur' },
+        ],
+        realName: [
+          { required: true, message: '请输入姓名', trigger: 'blur' },
+        ],
+        resignationDate: [
+          { required: true, message: '请选择离职日期', trigger: 'blur' },
+        ],
+        subjectId: [
+          { required: true, message: '请选择声部', trigger: 'blur' },
+        ],
+        organId: [
+          { required: true, message: '请选择分部', trigger: 'blur' },
+        ],
+        wechatNo: [
+          { required: true, message: '请输入微信号', trigger: 'blur' },
+        ],
+        level: [
+          { required: true, message: '请输入学历', trigger: 'blur' },
+        ],
+        school: [
+          { required: true, message: '请输入学校', trigger: 'blur' },
+        ],
+        year: [
+          { required: true, message: '请选择毕业时间', trigger: 'blur' },
+        ],
+      },
+      educations: [{level: '', school: '', year: ''}]
+    }
+  },
+  watch: {
+    detail() {
+     this.updateData()
+    },
+  },
+  mounted() {
+    this.updateData()
+  },
+  methods: {
+    updateData() {
+      if (this.detail) {
+        this.form = Object.assign({}, this.detail)
+        try {
+          this.educations = JSON.parse(this.detail.educationalBackground)
+          if (!this.educations.length) {
+            this.educations = [{level: '', school: '', year: ''}]
+          }
+        } catch (error) {}
+      } else {
+        this.educations = [{level: '', school: '', year: ''}]
+      }
+    },
+    addEducation() {
+      this.educations = [...this.educations, {level: '', school: '', year: ''}]
+    },
+    removeEducation(index) {
+      this.educations[index] = null
+      this.educations = this.educations.filter(item => !!item)
+    },
+    onTypeSubmit() {
+      this.$refs['ruleForm'].validate(valid => {
+        if (valid) {
+          const { $message } = this
+          this.form.educationalBackground = JSON.stringify(this.educations)
+          if (this.detail) {
+            employeeUpdate(Object.assign({id: this.detail.id}, this.form))
+            .then(res => {
+              if (res.code === 200) {
+                $message.success('修改成功')
+                this.close('ruleForm')
+              }
+            })
+          } else {
+            employeeCreate(this.form)
+            .then(res => {
+              if (res.code === 200) {
+                $message.success('创建成功')
+                this.close('ruleForm')
+              }
+            })
+          }
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+  .desc-item{
+    position: relative;
+    .close{
+      position: absolute;
+      left: 10px;
+      cursor: pointer;
+    }
+  }
+  .main-button{
+    background-color: #14928a;
+    border-color: #14928a;
+  }
+  .dialog-footer{
+    display: block;
+    text-align: right;
+    margin-top: 20px;
+  }
+  .description-title {
+    margin-bottom: 20px;
+    color: rgba(0,0,0,.85);
+    font-weight: 700;
+    font-size: 16px;
+    line-height: 1.5;
+  }
+  .description-view {
+    width: 100%;
+    border: 1px solid #e8e8e8;
+  }
+  .description-view .description-table {
+    width: 100%;
+    /* border: 1px solid #e8e8e8; */
+    border-collapse: collapse;
+    table-layout: fixed;
+  }
+  .description-view .description-tr {
+    border-bottom: 1px solid #e8e8e8;
+    width: 100%;
+  }
+  .description-view .description-tr:last-child {
+    border-bottom: none;
+  }
+  .description-view .description-label {
+    border-right: 1px solid #e8e8e8;
+    background-color: #fafafa;
+    color: rgba(0, 0, 0, 0.85);
+    font-weight: 400;
+    font-size: 14px;
+    line-height: 22px;
+    /* margin-right: 8px; */
+    padding: 12px 16px;
+    white-space: nowrap;
+    display: table-cell;
+  }
+  .description-view .description-label:after {
+    content: ""; /** content: ":" */
+    margin: 0 8px 0 2px;
+    position: relative;
+    top: -0.5px;
+  }
+  .description-view .description-content {
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    border-right: 1px solid #e8e8e8;
+    font-size: 14px;
+    line-height: 1.5;
+    padding: 12px 16px;
+    padding-bottom: 0;
+    color: rgba(0, 0, 0, 0.65);
+    display: table-cell;
+  }
+  .description-tr .description-content:last-child {
+    border-right: none;
+  }
+</style>

+ 504 - 0
src/views/HumanResources/index.vue

@@ -0,0 +1,504 @@
+
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>人力资源表
+    </h2>
+    <div class="m-core">
+      <div class="newBand" v-permission="'employeeInfo/insert'" @click="openTypes('create')">添加</div>
+      <!-- 搜索标题 -->
+      <el-form :inline="true" class="searchForm" v-model.trim="searchForm">
+        <el-form-item>
+          <el-input placeholder="姓名手机号" v-model.trim="searchForm.userNameOrIdOrMobile"></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-select v-model.trim="searchForm.jobNature"
+                     clearable
+                     filterable
+                     placeholder="请选择员工类型">
+            <el-option label="全职"
+                       value="FULL_TIME"></el-option>
+            <el-option label="兼职"
+                       value="PART_TIME"></el-option>
+            <el-option label="临时"
+                       value="TEMPORARY"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select v-model.trim="searchForm.position"
+                     clearable
+                     filterable
+                     placeholder="请选择职位">
+            <el-option label="指导老师"
+                       value="ADVISER"></el-option>
+            <el-option label="教务老师"
+                       value="ACADEMIC"></el-option>
+            <el-option label="乐队指导"
+                       value="TEACHING"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select v-model.trim="searchForm.organId"
+            placeholder='请选择分部'
+            clearable
+            filterable
+          >
+            <el-option v-for='(item,index) in organList'
+              :key="index"
+              :value="item.id"
+              :label="item.name"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item
+          prop="subjectIds"
+          :label-width="formLabelWidth"
+        >
+          <el-select
+            v-model.trim="searchForm.subjectId"
+            clearable
+            filterable
+            placeholder='请选择声部'
+          >
+            <el-option-group v-for="group in subjectList"
+                             :key="group.label"
+                             :label="group.label">
+              <el-option v-for="item in group.options"
+                         :key="item.value"
+                         :label="item.label"
+                         :value="item.value">
+              </el-option>
+            </el-option-group>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button @click="getList" type="danger">搜索</el-button>
+        </el-form-item>
+      </el-form>
+      <div class="tableWrap">
+        <el-table :data="tableList"
+          :header-cell-style="{background:'#EDEEF0',color:'#444'}">
+          <el-table-column width="120px" align="center" prop="id" label="编号"></el-table-column>
+          <el-table-column align="center" prop="realName" label="姓名"></el-table-column>
+          <el-table-column align="center" prop="mobileNo" label="手机号"></el-table-column>
+          <el-table-column align="center" prop="wechatNo" label="微信"></el-table-column>
+          <el-table-column align="center" label="学历信息">
+            <template slot-scope="scope">
+              <el-button @click="openEducation(scope.row)" type="text">查看学历</el-button>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="subjectId" label="声部">
+            <template slot-scope="scope">
+              {{ subjectListObj[scope.row.subjectId] }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="liveCity" label="所在城市"></el-table-column>
+          <el-table-column align="center" prop="intentionCity" label="工作意向"></el-table-column>
+          <el-table-column align="center" prop="isInterviewed" label="是否经过评估">
+            <template slot-scope="scope">
+              {{ scope.row.gender ? '是' : '否' }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="otherComment" label="其它综合情况"></el-table-column>
+          <el-table-column align="center" prop="entryDate" label="入职时间">
+            <template slot-scope="scope">
+              {{ scope.row.entryDate | dayjsFormat}}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="position" label="职位">
+            <template slot-scope="scope">
+              {{ scope.row.position | jobType }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="organId" label="分部">
+            <template slot-scope="scope">
+              {{ organListObj[scope.row.organId] }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="jobNature" label="员工类型">
+            <template slot-scope="scope">
+              {{ scope.row.jobNature | jobNature }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="isProbationPeriod" label="员工状态">
+            <template slot-scope="scope">
+              {{ scope.row.isProbationPeriod ? '正式' : '试用' }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="idCard" label="证件号码"></el-table-column>
+          <el-table-column align="center" prop="age" label="年龄"></el-table-column>
+          <el-table-column align="center" prop="gender" label="性别">
+            <template slot-scope="scope">
+              {{ scope.row.gender ? '男' : '女' }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="bankCardNo" label="银行卡号"></el-table-column>
+          <el-table-column align="center" prop="bankAddress" label="开户行"></el-table-column>
+          <el-table-column align="center" prop="emergencyContactName" label="紧急联系人"></el-table-column>
+          <el-table-column align="center" prop="emergencyContactRelation" label="紧急联系人关系"></el-table-column>
+          <el-table-column align="center" prop="emergencyContactPhone" label="紧急联系人电话"></el-table-column>
+          <el-table-column align="center" prop="resignationDate" label="离职时间">
+            <template slot-scope="scope">
+              {{ scope.row.resignationDate | dayjsFormat}}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="操作">
+            <template slot-scope="scope">
+              <el-button v-permission="'employeeInfo/update'" @click="openTypes('update', scope.row)" type="text">修改</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          :total="pageInfo.total"
+          :page.sync="pageInfo.page"
+          :limit.sync="pageInfo.limit"
+          :page-sizes="pageInfo.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+    <el-dialog
+      :title="formTitle[formActionTitle]"
+      :visible.sync="typeStatus"
+      destroy-on-close
+      :close-on-click-modal="false"
+      @close="onFormClose('ruleForm')"
+      width="1050px"
+    >
+      <hrform :detail.sync="rowDetail" :organList="organList" :subjectList="subjectList" :close="onFormClose" />
+    </el-dialog>
+    <el-dialog
+      title="查看学历信息"
+      :visible.sync="educationVisible"
+      destroy-on-close
+      :close-on-click-modal="false"
+      @close="educationVisible = false"
+      width="600px"
+    >
+      <el-table :data="educationList"
+          :header-cell-style="{background:'#EDEEF0',color:'#444'}">
+        <el-table-column align="center" prop="level" label="学历"></el-table-column>
+        <el-table-column align="center" prop="school" label="毕业学校"></el-table-column>
+        <el-table-column align="center" prop="year" label="毕业时间">
+          <template slot-scope="scope">
+            {{ scope.row.year | dayjsFormat}}
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import pagination from "@/components/Pagination/index";
+import dayjs from 'dayjs'
+import hrform from './form'
+// import store from '@/store'
+import {
+  helpCenterCatalogList,
+  employeeInfo,
+  helpCenterContentModify,
+  helpCenterContentDelete
+} from "@/api/appTenant";
+import { getEmployeeOrgan } from '@/api/buildTeam'
+import { subjectListTree } from '@/api/specialSetting'
+export default {
+  components: { pagination, hrform },
+  name: "helpCategory",
+  data() {
+    return {
+      searchForm: {
+        organId: '',
+        jobNature: '',
+        position: '',
+        subjectId: '',
+        userNameOrIdOrMobile: '',
+      },
+      educationVisible: false,
+      treeList: [],
+      tableList: [],
+      educationList: [],
+      formActionTitle: "create",
+      formTitle: {
+        create: "添加人员",
+        update: "修改人员"
+      },
+      typeStatus: false, // 添加教学点
+      formLabelWidth: "100px",
+      form: {
+        title: null, // 标题
+        content: null, // 内容
+        catalogId: null, // 分类编号
+      },
+      rules: {
+        title: [{ required: true, message: "请输入标题", trigger: "blur" }],
+        content: [{ required: true, message: "请输入内容", trigger: "blur" }],
+        catalogId: [{ required: true, message: "请输入选择分类", trigger: "blur" }]
+        // subjectIds: [{ required: true, message: "请选择声部组合", trigger: "change" }]
+      },
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      },
+      rowDetail: null,
+      tempTreeList: [],
+      organList: [],
+      subjectList: [],
+    };
+  },
+  activated() {
+    this.getList();
+    // this.getTreeList()
+  },
+  computed: {
+    subjectListObj() {
+      const data = {}
+      for (let i = 0; i < this.subjectList.length; i++) {
+        const item = this.subjectList[i];
+        for (let j = 0; j < item.options.length; j++) {
+          const option = item.options[j];
+          data[option.value] = option.label
+        }
+      }
+      return data
+    },
+    organListObj() {
+      const data = {}
+      for (let i = 0; i < this.organList.length; i++) {
+        const item = this.organList[i];
+        data[item.id] = item.name
+      }
+      return data
+    }
+  },
+  mounted() {
+    this.getList();
+    this.getTreeList()
+    getEmployeeOrgan().then(res => {
+      if (res.code == 200) {
+        this.organList = res.data;
+      }
+    })
+    subjectListTree({
+        delFlag: 0,
+        rows: 9999
+      }).then(res => {
+        let result = res.data
+        if (res.code == 200) {
+          let tempArray = []
+          result.rows.forEach((item, index) => {
+            let subject = []
+            item.subjects.forEach(s => {
+              subject.push({
+                value: s.id,
+                label: s.name
+              })
+            })
+
+            tempArray[index] = {
+              label: item.name,
+              options: subject
+            }
+          })
+          this.subjectList = tempArray
+        }
+      })
+  },
+  methods: {
+    openEducation(row) {
+      try {
+        this.educationList = JSON.parse(row.educationalBackground)
+        this.educationVisible = true
+      } catch (error) {
+        this.$message.error('数据解析失败')
+      }
+    },
+    onTypeDelOpeation(row) {
+      this.$confirm('您是否删除该内容?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        helpCenterContentDelete({ id: row.id }).then(res => {
+          this.messageTips('删除', res)
+        })
+      }).catch(() => {
+      })
+
+    },
+    onTypeSubmit(formName) {
+      // 添加数据
+      this.$refs[formName].validate(valid => {
+        if (valid) {
+          if (this.formActionTitle == "create") {
+            let params = {
+              title: this.form.title, // 标题
+              content: this.form.content, // 内容
+              catalogId: this.form.catalogId[this.form.catalogId.length - 1], // 分类编号
+            }
+            helpCenterContentModify(params).then(res => {
+              this.messageTips("添加", res);
+            });
+          } else if (this.formActionTitle == "update") {
+            let params = {
+              id: this.form.id,
+              title: this.form.title, // 标题
+              content: this.form.content, // 内容
+              catalogId: this.form.catalogId[this.form.catalogId.length - 1], // 分类编号
+            }
+            helpCenterContentModify(params).then(res => {
+              this.messageTips("修改", res);
+            });
+          }
+        } else {
+          return false;
+        }
+      });
+    },
+    messageTips(title, res) {
+      if (res.code == 200) {
+        this.$message.success(title + "成功");
+        this.typeStatus = false;
+        this.getList();
+      } else {
+        this.$message.error(res.msg);
+      }
+    },
+    getList() {
+      let params = {
+        ...this.searchForm,
+        page: this.pageInfo.page,
+        rows: this.pageInfo.limit
+      }
+      employeeInfo(params).then(res => {
+        let result = res.data;
+        if (res.code == 200) {
+          this.tableList = result.rows;
+          this.pageInfo.total = result.total
+        }
+      });
+    },
+    getTreeList() {
+      helpCenterCatalogList({
+        parentId: 0
+      }).then(res => {
+        let result = res.data;
+        if (res.code == 200) {
+          this.treeList = this.setTableData(result);
+        }
+      });
+    },
+    setTableData (result) {
+      let list = []
+      list = result.map(res => {
+        let tempList = {}
+        tempList = {
+          value: res.id,
+          label: res.text,
+          parentId: res.parentId
+        }
+        if (res.children && res.children.length > 0) {
+          tempList.children = this.setTableData(res.children)
+        }
+        return tempList
+      })
+      return list
+    },
+    openTypes(type, row) {
+      this.rowDetail = {...row}
+      this.typeStatus = true
+      this.formActionTitle = type
+      if (type == "update") {
+        // 修改的时候赋值
+        this.form = {
+          id: row.id,
+          title: row.title, // 标题
+          content: row.content, // 内容
+          catalogId: this.getAllIds(row), // 分类编号
+        };
+      }
+    },
+    onToUrl() {
+      this.$router.push('/insideSetting/helpCategory')
+    },
+    getAllIds(row) {
+      let idAndParent=[];// idAndParent保存 Tree所有节点的id和parentId
+      this.getIdAndParent(this.treeList,idAndParent);
+      let parentIds = []; // 用于保存选中节点的父节点及父节点的父节点
+      this.getId(row.catalogId, parentIds, idAndParent);
+      return parentIds.reverse(); //反转数组
+    },
+    getIdAndParent(tree, idAndParentIds) {// idAndParentIds用来保存所有节点的id,parentId
+			// 对原有的数据结构进行遍历,拿出所有节点的id,parentId到一个一维数组中。
+			tree.forEach(item => {
+				let mid = {
+					id: item.value,
+					parentId: item.parentId,
+				};
+				idAndParentIds.push(mid);
+				if (item.children) {
+					this.getIdAndParent(item.children, idAndParentIds);
+				}
+			});
+		},
+    getId(id, parentIds, idAndParent) {
+			idAndParent.forEach(item => {
+				if (item.id == id) {
+					parentIds.push(id);
+					if (item.parentId != -1) {
+						this.getId(item.parentId, parentIds, idAndParent);
+					}
+				}
+			});
+    },
+    onFormClose(formName) {
+      this.rowDetail = null
+      this.typeStatus = false
+      // 关闭弹窗重置验证
+      this.form = {
+        title: null, // 标题
+        content: null, // 内容
+        catalogId: [], // 分类编号
+      }
+      // this.$refs.cascader.handleClear()
+      // this.$refs[formName].resetFields();
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+.el-button--primary {
+  background: #14928a;
+  border-color: #14928a;
+  color: #fff;
+  &:hover,
+  &:active,
+  &:focus {
+    background: #14928a;
+    border-color: #14928a;
+    color: #fff;
+  }
+}
+/deep/.el-date-editor.el-input {
+  width: 100% !important;
+}
+/deep/.el-select {
+  width: 100% !important;
+}
+/deep/.el-table .cell {
+    display: -webkit-box;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    -webkit-line-clamp: 3;
+    -webkit-box-orient: vertical;
+}
+/deep/.el-dialog__body {
+  padding: 10px 20px;
+}
+.newBand {
+  display: inline-block;
+}
+</style>

+ 9 - 9
src/views/contentManager/contentOperation.vue

@@ -384,13 +384,13 @@ export default {
 
       // this.form.type
       let tempTitle = {
-        1: "468px * 552px;图片不能超过500KB;",
-        2: "456px * 288px; 图片不能超过500KB;",
-        3: "686px * 140px; 图片不能超过500KB;",
-        4: "图片不能超过500KB;",
-        5: "图片不能超过500KB;",
-        6: "图片不能超过500KB;",
-        7: "图片不能超过500KB;",
+        1: "468px * 552px;图片不能超过 2M;",
+        2: "456px * 288px; 图片不能超过 2M;",
+        3: "686px * 140px; 图片不能超过 2M;",
+        4: "图片不能超过 2M;",
+        5: "图片不能超过 2M;",
+        6: "图片不能超过 2M;",
+        7: "图片不能超过 2M;",
       };
       this.imageSize = tempTitle[this.form.type];
     },
@@ -587,13 +587,13 @@ export default {
         "image/jpeg": true
       };
       const isImage = imageType[file.type];
-      const isLt2M = file.size / 1024 / 1024 < 0.5;
+      const isLt2M = file.size / 1024 / 1024 < 2;
 
       if (!isImage) {
         this.$message.error("只能上传图片格式!");
       }
       if (!isLt2M) {
-        this.$message.error("上传图片大小不能超过 500K!");
+        this.$message.error("上传图片大小不能超过 2M!");
       }
       return isImage && isLt2M;
     },

部分文件因文件數量過多而無法顯示