whx 2 月之前
父節點
當前提交
2f8155701b
共有 50 個文件被更改,包括 536 次插入329 次删除
  1. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/index.html
  2. 2 1
      virgo.wzfrontend/src/main/resources/static/workark/reset.css
  3. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/css/3533.093fc10f.css
  4. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/css/4536.f028186d.css
  5. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/css/3697.d0edf1fb.css
  6. 0 0
      virgo.wzfrontend/src/main/resources/static/workark/static/css/5211.6939db8b.css
  7. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/css/7045.46181982.css
  8. 0 0
      virgo.wzfrontend/src/main/resources/static/workark/static/css/7858.86fd1f74.css
  9. 0 0
      virgo.wzfrontend/src/main/resources/static/workark/static/css/923.c39241e8.css
  10. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/css/9704.2bf112f4.css
  11. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/css/app.107eecd4.css
  12. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/css/app.48e07d5c.css
  13. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/1025.d612034c.js
  14. 18 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/1396.baa0b5a7.js
  15. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/1863.cf4988c3.js
  16. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/21.c03a47c6.js
  17. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/2486.be022892.js
  18. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/2535.08bc5333.js
  19. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/2657.551aff9a.js
  20. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/3460.34a08459.js
  21. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/3697.543148c2.js
  22. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/3715.5f76e313.js
  23. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/4372.c46986a0.js
  24. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/446.17bc59c3.js
  25. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/4536.ab4245c0.js
  26. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/4859.9d7eab9b.js
  27. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/5211.f272d3c3.js
  28. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/6021.d3fc5cf7.js
  29. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/6917.5a1ec954.js
  30. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/7045.df2694ee.js
  31. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/7858.ecc79828.js
  32. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/8533.cc46e836.js
  33. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/923.60e98042.js
  34. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/9704.fb8823b9.js
  35. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/app.22ab0bad.js
  36. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/app.9527fdef.js
  37. 155 28
      virgo.wzfrontend/workark/package-lock.json
  38. 1 0
      virgo.wzfrontend/workark/package.json
  39. 1 1
      virgo.wzfrontend/workark/public/index.html
  40. 2 1
      virgo.wzfrontend/workark/public/reset.css
  41. 14 2
      virgo.wzfrontend/workark/src/api/serve.js
  42. 144 0
      virgo.wzfrontend/workark/src/components/common/customData.vue
  43. 9 10
      virgo.wzfrontend/workark/src/components/website/productItem.vue
  44. 4 9
      virgo.wzfrontend/workark/src/components/work/serve/content/detail.vue
  45. 26 17
      virgo.wzfrontend/workark/src/components/work/serve/content/edit.vue
  46. 16 4
      virgo.wzfrontend/workark/src/components/work/system/serveSet/departForm.vue
  47. 1 1
      virgo.wzfrontend/workark/src/loading/loading.vue
  48. 2 26
      virgo.wzfrontend/workark/src/views/index.vue
  49. 119 210
      virgo.wzfrontend/workark/src/views/website/serveDetail.vue
  50. 2 2
      virgo.wzfrontend/workark/src/views/work/serve/content.vue

File diff suppressed because it is too large
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/index.html


+ 2 - 1
virgo.wzfrontend/src/main/resources/static/workark/reset.css

@@ -113,7 +113,7 @@ i {
 }
 
 strong {
-	font-weight: normal;
+	font-weight: bold;
 }
 
 .clearfix:after {
@@ -155,6 +155,7 @@ h6 {
 img {
 	border: none;
 	vertical-align: middle;
+	-webkit-user-drag: none;
 }
 
 body,

File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/css/3533.093fc10f.css


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/css/4536.f028186d.css


File diff suppressed because it is too large
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/css/3697.d0edf1fb.css


virgo.wzfrontend/src/main/resources/static/workark/static/css/6917.6939db8b.css → virgo.wzfrontend/src/main/resources/static/workark/static/css/5211.6939db8b.css


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/css/7045.46181982.css


virgo.wzfrontend/src/main/resources/static/workark/static/css/2535.86fd1f74.css → virgo.wzfrontend/src/main/resources/static/workark/static/css/7858.86fd1f74.css


virgo.wzfrontend/src/main/resources/static/workark/static/css/6021.c39241e8.css → virgo.wzfrontend/src/main/resources/static/workark/static/css/923.c39241e8.css


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/css/9704.2bf112f4.css


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/css/app.107eecd4.css


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/css/app.48e07d5c.css


File diff suppressed because it is too large
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/1025.d612034c.js


File diff suppressed because it is too large
+ 18 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/1396.baa0b5a7.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/1863.cf4988c3.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/21.c03a47c6.js


File diff suppressed because it is too large
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/2486.be022892.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/2535.08bc5333.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/2657.551aff9a.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/3460.34a08459.js


File diff suppressed because it is too large
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/3697.543148c2.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/3715.5f76e313.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/4372.c46986a0.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/446.17bc59c3.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/4536.ab4245c0.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/4859.9d7eab9b.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/5211.f272d3c3.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/6021.d3fc5cf7.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/6917.5a1ec954.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/7045.df2694ee.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/7858.ecc79828.js


File diff suppressed because it is too large
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/8533.cc46e836.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/923.60e98042.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/9704.fb8823b9.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/app.22ab0bad.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/app.9527fdef.js


+ 155 - 28
virgo.wzfrontend/workark/package-lock.json

@@ -2741,7 +2741,6 @@
       "version": "1.0.8",
       "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.8.tgz",
       "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
-      "dev": true,
       "requires": {
         "call-bind-apply-helpers": "^1.0.0",
         "es-define-property": "^1.0.0",
@@ -2753,7 +2752,6 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
       "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
-      "dev": true,
       "requires": {
         "es-errors": "^1.3.0",
         "function-bind": "^1.1.2"
@@ -2763,7 +2761,6 @@
       "version": "1.0.4",
       "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz",
       "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
-      "dev": true,
       "requires": {
         "call-bind-apply-helpers": "^1.0.2",
         "get-intrinsic": "^1.3.0"
@@ -3375,6 +3372,19 @@
         "ms": "^2.1.3"
       }
     },
+    "deep-equal": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.2.tgz",
+      "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==",
+      "requires": {
+        "is-arguments": "^1.1.1",
+        "is-date-object": "^1.0.5",
+        "is-regex": "^1.1.4",
+        "object-is": "^1.1.5",
+        "object-keys": "^1.1.1",
+        "regexp.prototype.flags": "^1.5.1"
+      }
+    },
     "deep-is": {
       "version": "0.1.4",
       "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz",
@@ -3489,7 +3499,6 @@
       "version": "1.1.4",
       "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz",
       "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
-      "dev": true,
       "requires": {
         "es-define-property": "^1.0.0",
         "es-errors": "^1.3.0",
@@ -3506,7 +3515,6 @@
       "version": "1.2.1",
       "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz",
       "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
-      "dev": true,
       "requires": {
         "define-data-property": "^1.0.1",
         "has-property-descriptors": "^1.0.0",
@@ -3638,7 +3646,6 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
       "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
-      "dev": true,
       "requires": {
         "call-bind-apply-helpers": "^1.0.1",
         "es-errors": "^1.3.0",
@@ -3756,14 +3763,12 @@
     "es-define-property": {
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
-      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
-      "dev": true
+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="
     },
     "es-errors": {
       "version": "1.3.0",
       "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
-      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
-      "dev": true
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
     },
     "es-module-lexer": {
       "version": "1.6.0",
@@ -3775,7 +3780,6 @@
       "version": "1.1.1",
       "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
       "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
-      "dev": true,
       "requires": {
         "es-errors": "^1.3.0"
       }
@@ -4257,12 +4261,22 @@
         }
       }
     },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+    },
     "fast-deep-equal": {
       "version": "3.1.3",
       "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
       "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
       "dev": true
     },
+    "fast-diff": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.1.2.tgz",
+      "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig=="
+    },
     "fast-glob": {
       "version": "3.3.3",
       "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz",
@@ -4473,8 +4487,7 @@
     "function-bind": {
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
-      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
-      "dev": true
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
     },
     "functional-red-black-tree": {
       "version": "1.0.1",
@@ -4482,6 +4495,11 @@
       "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
       "dev": true
     },
+    "functions-have-names": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz",
+      "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
+    },
     "gensync": {
       "version": "1.0.0-beta.2",
       "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -4498,7 +4516,6 @@
       "version": "1.3.0",
       "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
       "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
-      "dev": true,
       "requires": {
         "call-bind-apply-helpers": "^1.0.2",
         "es-define-property": "^1.0.1",
@@ -4516,7 +4533,6 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
       "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
-      "dev": true,
       "requires": {
         "dunder-proto": "^1.0.1",
         "es-object-atoms": "^1.0.0"
@@ -4583,8 +4599,7 @@
     "gopd": {
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
-      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
-      "dev": true
+      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
     },
     "graceful-fs": {
       "version": "4.2.11",
@@ -4617,7 +4632,6 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
       "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
-      "dev": true,
       "requires": {
         "es-define-property": "^1.0.0"
       }
@@ -4625,8 +4639,15 @@
     "has-symbols": {
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
-      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
-      "dev": true
+      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="
+    },
+    "has-tostringtag": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+      "requires": {
+        "has-symbols": "^1.0.3"
+      }
     },
     "hash-sum": {
       "version": "2.0.0",
@@ -4638,7 +4659,6 @@
       "version": "2.0.2",
       "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
       "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
-      "dev": true,
       "requires": {
         "function-bind": "^1.1.2"
       }
@@ -4899,6 +4919,15 @@
       "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==",
       "dev": true
     },
+    "is-arguments": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.2.0.tgz",
+      "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==",
+      "requires": {
+        "call-bound": "^1.0.2",
+        "has-tostringtag": "^1.0.2"
+      }
+    },
     "is-arrayish": {
       "version": "0.2.1",
       "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -4937,6 +4966,15 @@
         "hasown": "^2.0.2"
       }
     },
+    "is-date-object": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.1.0.tgz",
+      "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
+      "requires": {
+        "call-bound": "^1.0.2",
+        "has-tostringtag": "^1.0.2"
+      }
+    },
     "is-docker": {
       "version": "2.2.1",
       "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz",
@@ -5000,6 +5038,17 @@
         "isobject": "^3.0.1"
       }
     },
+    "is-regex": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.2.1.tgz",
+      "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
+      "requires": {
+        "call-bound": "^1.0.2",
+        "gopd": "^1.2.0",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.2"
+      }
+    },
     "is-stream": {
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz",
@@ -5433,8 +5482,7 @@
     "math-intrinsics": {
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
-      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
-      "dev": true
+      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="
     },
     "mdn-data": {
       "version": "2.0.14",
@@ -5785,8 +5833,7 @@
     "object-assign": {
       "version": "4.1.1",
       "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
-      "dev": true
+      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
     },
     "object-inspect": {
       "version": "1.13.4",
@@ -5794,11 +5841,19 @@
       "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
       "dev": true
     },
+    "object-is": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmmirror.com/object-is/-/object-is-1.1.6.tgz",
+      "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
+      "requires": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1"
+      }
+    },
     "object-keys": {
       "version": "1.1.1",
       "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true
+      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
     },
     "object.assign": {
       "version": "4.1.7",
@@ -5951,6 +6006,11 @@
         "tslib": "^2.0.3"
       }
     },
+    "parchment": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/parchment/-/parchment-1.1.4.tgz",
+      "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg=="
+    },
     "parent-module": {
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz",
@@ -6579,6 +6639,41 @@
       "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
       "dev": true
     },
+    "quill": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmmirror.com/quill/-/quill-1.3.7.tgz",
+      "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==",
+      "requires": {
+        "clone": "^2.1.1",
+        "deep-equal": "^1.0.1",
+        "eventemitter3": "^2.0.3",
+        "extend": "^3.0.2",
+        "parchment": "^1.1.4",
+        "quill-delta": "^3.6.2"
+      },
+      "dependencies": {
+        "clone": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz",
+          "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="
+        },
+        "eventemitter3": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-2.0.3.tgz",
+          "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg=="
+        }
+      }
+    },
+    "quill-delta": {
+      "version": "3.6.3",
+      "resolved": "https://registry.npmmirror.com/quill-delta/-/quill-delta-3.6.3.tgz",
+      "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==",
+      "requires": {
+        "deep-equal": "^1.0.1",
+        "extend": "^3.0.2",
+        "fast-diff": "1.1.2"
+      }
+    },
     "randombytes": {
       "version": "2.1.0",
       "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz",
@@ -6687,6 +6782,19 @@
         "@babel/runtime": "^7.8.4"
       }
     },
+    "regexp.prototype.flags": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
+      "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
+      "requires": {
+        "call-bind": "^1.0.8",
+        "define-properties": "^1.2.1",
+        "es-errors": "^1.3.0",
+        "get-proto": "^1.0.1",
+        "gopd": "^1.2.0",
+        "set-function-name": "^2.0.2"
+      }
+    },
     "regexpp": {
       "version": "3.2.0",
       "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz",
@@ -7057,7 +7165,6 @@
       "version": "1.2.2",
       "resolved": "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz",
       "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
-      "dev": true,
       "requires": {
         "define-data-property": "^1.1.4",
         "es-errors": "^1.3.0",
@@ -7067,6 +7174,17 @@
         "has-property-descriptors": "^1.0.2"
       }
     },
+    "set-function-name": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/set-function-name/-/set-function-name-2.0.2.tgz",
+      "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+      "requires": {
+        "define-data-property": "^1.1.4",
+        "es-errors": "^1.3.0",
+        "functions-have-names": "^1.2.3",
+        "has-property-descriptors": "^1.0.2"
+      }
+    },
     "setprototypeof": {
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -7877,6 +7995,15 @@
         "watchpack": "^2.4.0"
       }
     },
+    "vue-quill-editor": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmmirror.com/vue-quill-editor/-/vue-quill-editor-3.0.6.tgz",
+      "integrity": "sha512-g20oSZNWg8Hbu41Kinjd55e235qVWPLfg4NvsLW6d+DhgBTFbEuMpcWlUdrD6qT3+Noim6DRu18VLM9lVShXOQ==",
+      "requires": {
+        "object-assign": "^4.1.1",
+        "quill": "^1.3.4"
+      }
+    },
     "vue-router": {
       "version": "3.1.3",
       "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-3.1.3.tgz",

+ 1 - 0
virgo.wzfrontend/workark/package.json

@@ -13,6 +13,7 @@
 		"element-ui": "^2.15.14",
 		"sortablejs": "^1.15.6",
 		"vue": "^2.6.14",
+		"vue-quill-editor": "^3.0.6",
 		"vue-router": "^3.1.3",
 		"vuex": "^3.0.1"
 	},

+ 1 - 1
virgo.wzfrontend/workark/public/index.html

@@ -7,7 +7,7 @@
 		<link rel="icon" href="https://file-node.oss-cn-shanghai.aliyuncs.com/youji/2f7b4bfaf9e64817bc2cb46f3a632b01">
 		<title>WORKARK</title>
 		<link rel="stylesheet" type="text/css" href="<%= BASE_URL %>reset.css" />
-		<link rel="stylesheet" href="//at.alicdn.com/t/c/font_4358860_u9q17n0qvwc.css">
+		<link rel="stylesheet" href="//at.alicdn.com/t/c/font_4358860_y6mdx2xjoli.css">
 		<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/5.4.5/css/swiper.min.css">
 		<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/5.4.5/js/swiper.min.js"></script>
 	</head>

+ 2 - 1
virgo.wzfrontend/workark/public/reset.css

@@ -113,7 +113,7 @@ i {
 }
 
 strong {
-	font-weight: normal;
+	font-weight: bold;
 }
 
 .clearfix:after {
@@ -155,6 +155,7 @@ h6 {
 img {
 	border: none;
 	vertical-align: middle;
+	-webkit-user-drag: none;
 }
 
 body,

+ 14 - 2
virgo.wzfrontend/workark/src/api/serve.js

@@ -5,7 +5,19 @@ import request from '@/axios'
  * 
  * 
  */
-export function getServeListByQuery(currPage, pageSize, data) {
+export function getServeListByQuery(data) {
+	return request({
+		url: `/api/workarkProduct/query`,
+		method: 'post',
+		data: data
+	})
+}
+/* 
+ * 通过条件分页获取服务列表
+ * 
+ * 
+ */
+export function getServeListByQueryAndPage(currPage, pageSize, data) {
 	return request({
 		url: `/api/workarkProduct/${currPage}/${pageSize}`,
 		method: 'post',
@@ -19,7 +31,7 @@ export function getServeListByQuery(currPage, pageSize, data) {
  */
 export function getServeById(id) {
 	return request({
-		url: `/api/workarkProduct/${id}`,
+		url: `/api/workarkProduct/details/${id}`,
 		method: 'get',
 	})
 }

+ 144 - 0
virgo.wzfrontend/workark/src/components/common/customData.vue

@@ -0,0 +1,144 @@
+<template>
+	<div class="custom-data">
+		<table border="1" cellspacing="0" cellpadding="0">
+			<tr class="th-title">
+				<th v-for="(item,index) in option" :key="item.id" :width="item.width">{{item.label}}</th>
+			</tr>
+			<tr v-for="(item,index) in listData" :key="index">
+				<td v-for="(node,i) in option" :key="node.id">
+					<div class="td-input">
+						<el-date-picker v-if="node.type === 'date'" v-model="item[node.value]" value-format="yyyy-MM-dd"
+							type="date" placeholder="请选择日期">
+						</el-date-picker>
+						<el-date-picker v-else-if="node.type === 'yearDate'" v-model="item[node.value]" type="year"
+							value-format="yyyy" placeholder="选择年">
+						</el-date-picker>
+						<el-input :type="node.type" v-model="item[node.value]" v-else></el-input>
+						<div class="td-icon" @click="deleteRow(index)" v-if="i === option.length-1">
+							<i class="iconfont huifont-guanbi"></i>
+						</div>
+					</div>
+				</td>
+			</tr>
+			<tr>
+				<td :colspan="option.length">
+					<div class="insert-icon color-primary" @click="insertRow()">
+						<i class="iconfont huifont-xinzeng"></i>
+						新增
+					</div>
+				</td>
+			</tr>
+		</table>
+	</div>
+</template>
+
+<script>
+	export default {
+		props: {
+			list: {
+				type: Array,
+				default: () => {
+					return []
+				}
+			},
+			option: {
+				type: Array,
+				default: () => {
+					return []
+				}
+			}
+		},
+		data() {
+			return {
+				listData: []
+			}
+		},
+		mounted() {
+			this.listData = this.list;
+		},
+		methods: {
+			insertRow() {
+				let obj = {};
+				for (let i = 0; i < this.option.length; i++) {
+					obj[this.option[i].value] = '';
+				}
+				this.listData.push(obj);
+			},
+			deleteRow(index) {
+				this.$confirm('确定要删除该项数据?', () => {
+					this.listData.splice(index, 1);
+				});
+			}
+		},
+		watch: {
+			list() {
+				this.listData = this.list;
+			}
+		},
+	}
+</script>
+
+<style lang="scss">
+	.custom-data {
+		table {
+			width: 100%;
+			border: 1px solid $--border-color-light;
+			border-collapse: collapse;
+			table-layout: fixed;
+		}
+
+		table th {
+			padding: 5px 0;
+			border: 1px solid $--border-color-light;
+			font-weight: 500;
+		}
+
+
+		table td {
+			border: 1px solid $--border-color-light;
+			padding: 6px 20px;
+		}
+
+		.insert-icon {
+			text-align: center;
+			cursor: pointer;
+			border-radius: 2px;
+			border: 1px dashed $--border-color-light;
+			line-height: 26px;
+			font-size: 13px;
+
+			.huifont-xinzeng {
+				font-size: 13px;
+			}
+		}
+
+		.td-input {
+			display: flex;
+			align-items: center;
+
+			.el-input {
+				flex: 1;
+				width: 0;
+				overflow: hidden;
+			}
+
+			.td-icon {
+				width: 20px;
+				height: 20px;
+				background:  $--color-danger;
+				border-radius: 10px;
+				border: 1px solid  $--color-danger;
+				text-align: center;
+				line-height: 16px;
+				margin-left: 12px;
+				color:  $--color-white;
+				cursor: pointer;
+			}
+
+			.iconfont {
+				font-size: 10px;
+				margin-left: 1px;
+			}
+		}
+	}
+</style>

+ 9 - 10
virgo.wzfrontend/workark/src/components/website/productItem.vue

@@ -1,15 +1,11 @@
 <template>
 	<div class="product-item" @click="clickItem">
 		<div class="product-item-image">
-			<img :src="imageUrl(item.listDisplayImage)" :alt="item.name" />
+			<img :src="imageUrl(item.showPictures)" :alt="item.name" />
 		</div>
 		<div class="product-content">
 			<div class="product-item-title hui-ellipsis">{{item.name}}</div>
-			<div class="space hui-ellipsis">{{item.intro}}</div>
-			<div class="pirce">
-				<span class="number">{{item.price}}</span>
-				<span class="unit"> 元/次</span>
-			</div>
+			<div class="space hui-ellipsis">{{item.remark}}</div>
 		</div>
 	</div>
 </template>
@@ -19,14 +15,17 @@
 	export default {
 		props: ['item'],
 		methods: {
-			imageUrl() {
-				let data = this.item.listDisplayImage;
+			imageUrl(data) {
 				if (!data) return 'https://assets.api.uizard.io/api/cdn/stream/c05650d2-192b-4a56-ae97-05638f53804c.png';
-				return JSON.parse(data)[0].url;
+				let imgData = JSON.parse(data)[0];
+				if (!imgData) {
+					return 'https://assets.api.uizard.io/api/cdn/stream/c05650d2-192b-4a56-ae97-05638f53804c.png';
+				}
+				return imgData.url;
 			},
 			clickItem() {
 				let id = Crypto.AES.encrypt(String(this.item.id), 'bosshand');
-				this.$router.push('/website/serveDetail?id=' + encodeURIComponent(id));
+				this.$router.push('/website/serveDetail?type=' + encodeURIComponent(id));
 			}
 		}
 	}

+ 4 - 9
virgo.wzfrontend/workark/src/components/work/serve/content/detail.vue

@@ -3,12 +3,12 @@
 		<div class="hui-detail-title">基础信息</div>
 		<div class="hui-detail-content">
 			<div class="hui-detail-item">
-				<div class="hui-detail-label">服务名称</div>
+				<div class="hui-detail-label">主标题</div>
 				<div class="hui-detail-value">{{detail.name}}</div>
 			</div>
 			<div class="hui-detail-item">
-				<div class="hui-detail-label">服务类型</div>
-				<div class="hui-detail-value">{{detail.type}}</div>
+				<div class="hui-detail-label">副标题</div>
+				<div class="hui-detail-value">{{detail.subtitle}}</div>
 			</div>
 			<div class="hui-detail-item">
 				<div class="hui-detail-label">价格(元)</div>
@@ -19,12 +19,7 @@
 				<div class="hui-detail-value">{{detail.intro}}</div>
 			</div>
 		</div>
-		<div class="hui-detail-title">展示图片</div>
-		<div class="hui-detail-content hui-detail-image">
-			<upload :list="detail.listDisplayImage ? JSON.parse(detail.listDisplayImage) : []" type="preview">
-			</upload>
-		</div>
-		<div class="hui-detail-title">服务配图</div>
+		<div class="hui-detail-title">商品配图</div>
 		<div class="hui-detail-content hui-detail-image">
 			<upload :list="detail.rotatingImages ? JSON.parse(detail.rotatingImages) : []" type="preview">
 			</upload>

+ 26 - 17
virgo.wzfrontend/workark/src/components/work/serve/content/edit.vue

@@ -2,22 +2,18 @@
 	<div class="hui-flex hui-dialog">
 		<div class="hui-flex-box hui-dialog-content">
 			<el-form :model="form" label-position="top">
-				<el-form-item label="服务名称">
-					<el-input type="text" v-model="form.name" placeholder="请输入服务名称"></el-input>
+				<el-form-item label="主标题">
+					<el-input type="text" v-model="form.name" placeholder="请输入主标题"></el-input>
 				</el-form-item>
-				<el-form-item label="服务类型">
-					<el-input type="text" v-model="form.type" placeholder="请输入服务类型">
-					</el-input>
+				<el-form-item label="副标题">
+					<el-input type="text" v-model="form.subtitle" placeholder="请输入副标题"></el-input>
 				</el-form-item>
 				<el-form-item label="价格(元)">
 					<el-input type="text" v-model="form.price" @input="handleInput($event)" placeholder="请输入价格">
 					</el-input>
 				</el-form-item>
 				<el-form-item label="服务介绍" class="hui-textarea">
-					<el-input type="textarea" v-model="form.intro" placeholder="请输入服务介绍" resize="none"></el-input>
-				</el-form-item>
-				<el-form-item label="展示图片" class="hui-textarea">
-					<upload ref="listDisplayImage" :list="listDisplayImage" type="insert" :maxLen="1"></upload>
+					<custom-data ref="customData" :list="customList" :option="option"></custom-data>
 				</el-form-item>
 				<el-form-item label="服务配图" class="hui-textarea">
 					<upload ref="rotatingImages" :list="rotatingImages" type="insert" :maxLen="15"></upload>
@@ -41,20 +37,33 @@
 		getServeById
 	} from '@/api/serve'
 	const upload = () => import('@/components/common/upload');
+	import customData from '@/components/common/customData'
 	export default {
 		props: ['isUpdate', 'detailId', 'productLevelId'],
 		data() {
 			return {
 				form: {
 					name: '',
+					subtitle: '',
 					type: 1,
-					price: '',
-					intro: ''
+					price: ''
 				},
 				loading: false,
-				listDisplayImage: [],
 				rotatingImages: [],
-				detailedImage: []
+				detailedImage: [],
+				customList: [],
+				option: [{
+					id: 1,
+					label: '介绍标题',
+					width: '200px',
+					value: 'title',
+					type: 'text'
+				}, {
+					id: 2,
+					label: '介绍内容',
+					value: 'content',
+					type: 'text'
+				}]
 			}
 		},
 		mounted() {
@@ -62,10 +71,9 @@
 				getServeById(this.detailId).then(res => {
 					if (res.state) {
 						this.form = res.data;
-						if (this.form.listDisplayImage) this.listDisplayImage = JSON.parse(this.form
-							.listDisplayImage);
 						if (this.form.rotatingImages) this.rotatingImages = JSON.parse(this.form.rotatingImages);
 						if (this.form.detailedImage) this.detailedImage = JSON.parse(this.form.detailedImage);
+						if (this.form.intro) this.customList = JSON.parse(this.form.intro);
 					}
 				})
 			} else {
@@ -74,7 +82,8 @@
 			}
 		},
 		components: {
-			upload
+			upload,
+			customData
 		},
 		methods: {
 			handleInput(val) {
@@ -88,9 +97,9 @@
 			submit() {
 				this.loading = true;
 				let postData = JSON.parse(JSON.stringify(this.form));
-				postData['listDisplayImage'] = JSON.stringify(this.$refs.listDisplayImage.fileList);
 				postData['rotatingImages'] = JSON.stringify(this.$refs.rotatingImages.fileList);
 				postData['detailedImage'] = JSON.stringify(this.$refs.detailedImage.fileList);
+				postData['intro'] = JSON.stringify(this.$refs.customData.listData);
 				if (this.isUpdate) {
 					updateServe(postData).then(this.successFunc)
 				} else {

+ 16 - 4
virgo.wzfrontend/workark/src/components/work/system/serveSet/departForm.vue

@@ -9,7 +9,11 @@
 					<el-input type="text" v-model="departmentForm.sign" placeholder="请输入服务名称"></el-input>
 				</el-form-item>
 				<el-form-item label="服务描述" class="hui-textarea">
-					<el-input type="textarea" v-model="departmentForm.remark" placeholder="请输入服务描述" resize="none"></el-input>
+					<el-input type="textarea" v-model="departmentForm.remark" placeholder="请输入服务描述"
+						resize="none"></el-input>
+				</el-form-item>
+				<el-form-item label="展示图片" class="hui-textarea">
+					<upload ref="showPictures" :list="showPictures" type="insert" :maxLen="1"></upload>
 				</el-form-item>
 			</el-form>
 		</div>
@@ -25,6 +29,7 @@
 		insertServeDepartment,
 		updateServeDepartment
 	} from '@/api/system'
+	const upload = () => import('@/components/common/upload');
 	export default {
 		props: ['isUpdate', 'part'],
 		data() {
@@ -36,12 +41,14 @@
 					parentId: -1
 				},
 				departmentRuler: {},
-				loading: false
+				loading: false,
+				showPictures: []
 			}
 		},
 		mounted() {
 			if (this.isUpdate) {
 				this.departmentForm = JSON.parse(JSON.stringify(this.part));
+				if (this.part.showPictures) this.showPictures = JSON.parse(this.part.showPictures);
 			} else {
 				this.departmentForm['parentId'] = this.part.id || -1;
 			}
@@ -49,10 +56,12 @@
 		methods: {
 			submit() {
 				this.loading = true;
+				let postData = JSON.parse(JSON.stringify(this.departmentForm));
+				postData['showPictures'] = JSON.stringify(this.$refs.showPictures.fileList);
 				if (this.isUpdate) {
-					updateServeDepartment(this.departmentForm).then(this.successFunc)
+					updateServeDepartment(postData).then(this.successFunc)
 				} else {
-					insertServeDepartment(this.departmentForm).then(this.successFunc)
+					insertServeDepartment(postData).then(this.successFunc)
 				}
 			},
 			successFunc(res) {
@@ -62,6 +71,9 @@
 					this.$emit('callback', 'init');
 				}
 			}
+		},
+		components: {
+			upload
 		}
 	}
 </script>

+ 1 - 1
virgo.wzfrontend/workark/src/loading/loading.vue

@@ -32,7 +32,7 @@
 				} else {
 					if (this.showTimer) {
 						clearTimeout(this.showTimer);
-						this.showTimer = null
+						this.showTimer = null;
 					}
 				}
 			},

+ 2 - 26
virgo.wzfrontend/workark/src/views/index.vue

@@ -10,7 +10,7 @@
 				<div class="product-iview" v-for="item in list" :key="item.id">
 					<div class="title">{{item.name}}</div>
 					<div class="product-list">
-						<product-item v-for="(node,index) in item.productList" :key="index" :item="node"></product-item>
+						<product-item v-for="(node,index) in item.children" :key="index" :item="node"></product-item>
 					</div>
 				</div>
 			</div>
@@ -36,34 +36,10 @@
 			init() {
 				getServeProductList(-1).then(res => {
 					if (res.state) {
-						let list = this.mergeChildLists(res.data);
-						this.list = list.filter(node => node.productList.length > 0);
+						this.list = res.data;
 					}
 				})
 			},
-			mergeChildLists(nodes) {
-				return nodes.map(node => {
-					// 创建新对象避免修改原数据
-					const newNode = {
-						...node
-					};
-					const listsToMerge = [];
-
-					// 递归收集所有子节点的 list
-					const collectLists = (currentNode) => {
-						if (currentNode.children) {
-							currentNode.children.forEach(child => {
-								if (child.productList) listsToMerge.push(child.productList);
-								collectLists(child); // 递归处理子节点
-							});
-						}
-					};
-
-					collectLists(newNode); // 从当前节点开始收集
-					newNode.productList = [...(newNode.productList || []), ...listsToMerge.flat()];
-					return newNode;
-				});
-			}
 		},
 		components: {
 			productItem

+ 119 - 210
virgo.wzfrontend/workark/src/views/website/serveDetail.vue

@@ -2,13 +2,47 @@
 	<div class="home-detail">
 		<div class="container" v-loading="loading">
 			<div class="container-box" v-if="detail.id">
-				<div class="title">{{detail.name}}</div>
 				<div class="home-detail-content">
-
+					<div class="home-detail-swiper">
+						<div class="swiper-container">
+							<div class="swiper-wrapper">
+								<div v-for="item in rotatingImages" :key="item.id" class="swiper-slide"
+									:style="`background-image:url(${item.url})`" @click.stop="openImage(item)">
+								</div>
+							</div>
+							<div class="swiper-button-prev"></div>
+							<div class="swiper-button-next"></div>
+						</div>
+					</div>
+					<div class="home-detail-information">
+						<div class="house-name">{{detail.name}}</div>
+						<div class="sub-title">{{detail.subtitle}}</div>
+						<div class="house-price">
+							<div class="color-red price">
+								<span class="average alibaba">{{detail.price}}</span><span class="unit">元/次</span>
+							</div>
+							
+							<div class="button-box">
+								<el-button type="primary" size="small">购买</el-button>
+							</div>
+						</div>
+						<div class="content-detail" v-if="detail.intro">
+							<div class="detail-item" v-for="(item,index) in JSON.parse(detail.intro)" :key="item.id">
+								<i class="iconfont huifont-youjiantou"></i>
+								<div class="detail-item-title">{{item.title}}</div>
+								<div class="detail-item-content">{{item.content}}</div>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="detail-img-box">
+					<div class="home-detail-img" v-for="(item,index) in detailedImage" :key="item.id">
+						<img :src="item.url" :alt="item.name">
+					</div>
 				</div>
 			</div>
 			<div class="skeleton-box" v-else>
-				<el-empty description="暂未找到服务"></el-empty>
+				<el-empty description="暂服务"></el-empty>
 			</div>
 		</div>
 	</div>
@@ -16,6 +50,7 @@
 
 <script>
 	import {
+		getServeListByQuery,
 		getServeById
 	} from '@/api/serve'
 	import Crypto from '@/uitls/crypto'
@@ -23,8 +58,11 @@
 		data() {
 			return {
 				loading: false,
-				detailId: '',
-				detail: {}
+				type: '',
+				detail: {},
+				list: [],
+				rotatingImages: [],
+				detailedImage: []
 			};
 		},
 		mounted() {
@@ -34,16 +72,43 @@
 		methods: {
 			init() {
 				this.loading = true;
-				this.detailId = Crypto.AES.decrypt(decodeURIComponent(this.$route.query.id), 'bosshand');
-				if (!this.detailId) return this.loading = false;
+				this.type = Crypto.AES.decrypt(decodeURIComponent(this.$route.query.type), 'bosshand');
+				if (!this.type) return this.loading = false;
 				this.getDetail();
 			},
 			getDetail() {
-				getServeById(this.detailId).then(res => {
-					console.log(res);
-					this.detail = res.data;
+				getServeListByQuery({
+					productLevelId: this.type
+				}).then(res => {
+					if (res.state) {
+						if (res.data.length === 0) return this.loading = false;
+						this.list = res.data;
+						this.initDetail(0);
+					} else {
+						this.loading = false;
+					}
 					this.loading = false;
 				})
+			},
+			initDetail(val) {
+				this.detail = this.list[val];
+				if (this.detail.rotatingImages) {
+					this.rotatingImages = JSON.parse(this.detail.rotatingImages);
+					this.detailedImage = JSON.parse(this.detail.detailedImage);
+
+					this.initSwiper();
+				}
+			},
+			initSwiper() {
+				this.$nextTick(() => {
+					this.swiper = new Swiper(".swiper-container", {
+						loop: true,
+						navigation: {
+							nextEl: '.swiper-button-next',
+							prevEl: '.swiper-button-prev',
+						},
+					})
+				})
 			}
 		}
 	};
@@ -51,114 +116,47 @@
 
 <style lang="scss">
 	.home-detail {
-		padding-top: 10px;
+		padding: 10px 0;
 		box-sizing: border-box;
 
-		.title {
-			font-size: 30px;
-			font-weight: bolder;
-			line-height: 30px;
-			margin: 20px 0;
-		}
+		.home-detail-img {
+			width: 100%;
 
-		.sub-title {
-			font-size: 24px;
-			font-weight: bolder;
-			line-height: 30px;
-			margin: 20px 0;
+			img {
+				width: 100%;
+			}
 		}
 
-		.map-container {
-			display: flex;
-			margin-bottom: 30px;
+		.detail-item {
+			padding-top: 20px;
+			position: relative;
+			padding-left: 25px;
 
-			#map {
-				width: 670px;
-				height: 400px;
+			.huifont-youjiantou {
+				color: $--color-primary;
+				font-size: 22px;
+				position: absolute;
+				left: 0;
+				top: 22px;
 			}
 
-			.content-device {
-				width: 470px;
-				height: 400px;
-				margin-left: 60px;
-
-				.chat {
-					cursor: pointer;
-					width: 40px;
-					height: 40px;
-					background: $--color-primary;
-					color: #fff;
-					border-radius: 40px;
-					display: flex;
-					align-items: center;
-					justify-content: center;
-					font-size: 20px;
-				}
-
-				.people-tell {
-					border-bottom: 1px solid #e7ebee;
-					display: flex;
-					align-items: center;
-					padding: 15px 0;
-					margin-bottom: 15px;
-
-					.people-avatar {
-						width: 50px;
-						height: 50px;
-						border-radius: 50%;
-						margin-right: 15px;
-						overflow: hidden;
-					}
-
-					.people-text {
-						flex: 1;
-						width: 0;
-						overflow: hidden;
-					}
-
-					.people-name {
-						font-size: 20px;
-						font-weight: 500;
-					}
-
-					.people-organization {
-						font-weight: 300;
-						font-size: 14px;
-					}
-				}
-
-				.device-list {
-					display: flex;
-					flex-wrap: wrap;
-					align-content: flex-start;
-				}
-
-				.device-item {
-					width: 50%;
-					display: flex;
-					align-items: center;
-					margin-bottom: 15px;
-
-					.device-label {
-						flex: 1;
-						width: 0;
-						font-weight: 200;
-						margin-left: 10px;
-					}
+			.detail-item-title {
+				font-size: 20px;
+				font-weight: bold;
+			}
 
-					.device-icon {
-						font-size: 18px;
-						margin-right: 5px;
-					}
-				}
+			.detail-item-content {
+				margin-top: 3px;
+				color: $--color-text-secondary;
 			}
+
 		}
 
 
 		.container {
 			width: 1200px;
 			margin: 0 auto;
-			min-height: calc(100vh - 107px);
+			min-height: calc(100vh - 137px);
 			position: relative;
 		}
 
@@ -175,11 +173,13 @@
 
 		.home-detail-content {
 			display: flex;
+			padding-top: 30px;
 		}
 
 		.home-detail-swiper {
 			width: 670px;
 			height: 480px;
+			background: $--background-color-base;
 
 			.swiper-container,
 			.swiper-wrapper,
@@ -194,27 +194,6 @@
 				background-repeat: no-repeat;
 				cursor: pointer;
 				position: relative;
-
-				.open-video-icon {
-					position: absolute;
-					top: 50%;
-					left: 50%;
-					width: 40px;
-					height: 40px;
-					border-radius: 40px;
-					background: rgba(0, 0, 0, 0.6);
-					display: flex;
-					align-items: center;
-					justify-content: center;
-					margin-left: -20px;
-					margin-top: -20px;
-					box-sizing: border-box;
-
-					.huifont-bofang {
-						color: #fff;
-						font-size: 20px;
-					}
-				}
 			}
 
 			.swiper-button-next:after,
@@ -226,7 +205,7 @@
 			.swiper-button-prev,
 			.swiper-container-rtl .swiper-button-next {
 				left: 0;
-				background: rgba(0, 0, 0, 0.3);
+				background: rgba(0, 0, 0, 0.1);
 				height: 70px;
 				margin-top: -35px;
 			}
@@ -234,7 +213,7 @@
 			.swiper-button-next,
 			.swiper-container-rtl .swiper-button-prev {
 				right: 0;
-				background: rgba(0, 0, 0, 0.3);
+				background: rgba(0, 0, 0, 0.1);
 				height: 70px;
 				margin-top: -35px;
 			}
@@ -250,20 +229,15 @@
 				font-weight: 500;
 			}
 
-			.tag {
-				margin: 10px 0;
-
-				span {
-					background: #eee;
-					padding: 5px 10px;
-					border-radius: 4px;
-					margin: 5px 5px 5px 0;
-					font-size: 12px;
-					color: #7b7979;
-				}
+			.sub-title {
+				font-size: $--font-size-small;
+				color: $--color-text-secondary;
+				text-indent: 24px;
+				margin-top: 10px;
 			}
 
 			.content-title {
+				padding: 10px 0;
 				font-size: 16px;
 				font-weight: 500;
 			}
@@ -272,23 +246,12 @@
 				display: flex;
 				align-items: center;
 				justify-content: space-between;
-				border-bottom: 1px solid #e7ebee;
-				margin-bottom: 15px;
-				padding-bottom: 5px;
+				border-bottom: 1px solid $--border-color-light;
+				padding: 10px 0;
 
-				.hui-button {
-					color: #fff;
-					background: $--color-primary;
-					width: 100px;
-					height: 34px;
-					text-align: center;
-					line-height: 34px;
-					border-radius: 4px;
-					cursor: pointer;
-
-					&:hover {
-						opacity: 0.8;
-					}
+				.price {
+					display: flex;
+					align-items: flex-end;
 				}
 			}
 
@@ -296,69 +259,15 @@
 				font-size: 30px;
 				font-weight: 900;
 				margin-right: 5px;
+				line-height: 24px;
 			}
 
-			.desc-text {
-				margin-top: 10px;
-			}
-
-			.information-list {
-				display: flex;
-				flex-wrap: wrap;
-				margin-bottom: 10px;
-
-				.information-box {
-					width: 50%;
-					display: flex;
-					padding: 7px 20px 7px 0;
-					box-sizing: border-box;
-				}
-
-				.information-title {
-					color: #979b9e;
-					font-weight: 500;
-				}
-
-				.information-div {
-					flex: 1;
-					width: 0;
-					overflow: hidden;
-					white-space: nowrap;
-					font-weight: 300;
-				}
-			}
-		}
-
-		.footer {
-			background: #212631;
-			min-width: 1200px;
-
-			.footer-box {
-				width: 1200px;
-				margin: 0 auto
-			}
-
-			.foot-information {
-				font-weight: 400;
+			.unit {
 				font-size: 12px;
-				color: #98999d;
-				line-height: 17px;
-				display: flex;
-				align-items: center;
-				padding: 20px;
-				justify-content: center
 			}
 
-			.foot-information a {
-				color: #98999d;
-				margin-right: 30px
-			}
-
-			.foot-information img {
-				width: 14px;
-				height: 14px;
-				margin-left: 30px;
-				margin-right: 10px
+			.desc-text {
+				margin-top: 10px;
 			}
 		}
 	}

+ 2 - 2
virgo.wzfrontend/workark/src/views/work/serve/content.vue

@@ -77,7 +77,7 @@
 		getServeDepartmentBySign
 	} from '@/api/system'
 	import {
-		getServeListByQuery,
+		getServeListByQueryAndPage,
 		deleteServeById,
 		updateServe
 	} from '@/api/serve'
@@ -118,7 +118,7 @@
 				};
 				filterOption = Object.assign(filterOption, this.filterOption);
 				this.loading = true;
-				getServeListByQuery(this.currPage, this.pageSize, filterOption).then(res => {
+				getServeListByQueryAndPage(this.currPage, this.pageSize, filterOption).then(res => {
 					if (res.state) {
 						this.tableData = res.data.dataList;
 						this.totalCount = res.data.totalCount;