Browse Source

去除无用文件

master
zq 3 days ago
parent
commit
dd1a2d8420
  1. 248
      package-lock.json
  2. 9
      package.json
  3. 71
      src/components/GuipButton.vue
  4. 136
      src/components/GuipInput.vue
  5. 143
      src/components/GuipSwitch.vue
  6. 129
      src/components/SliderMenu.vue
  7. 4
      src/main.js
  8. 42
      src/router/index.js
  9. 661
      src/views/AddNewTreatment.vue
  10. 489
      src/views/DoctorInformation.vue
  11. 40
      src/views/HomeView.vue
  12. 1783
      src/views/HosInformation.vue
  13. 342
      src/views/weChatPayment.vue
  14. 2
      vue.config.js

248
package-lock.json

@ -8,12 +8,13 @@
"name": "newkuaile-vue-project2",
"version": "0.1.0",
"dependencies": {
"@zhicheng1012/zhicheng-components": "^1.0.28",
"axios": "^1.8.3",
"core-js": "^3.40.0",
"element-ui": "^2.15.14",
"lottie-web": "^5.12.2",
"regenerator-runtime": "^0.14.1",
"vue": "^2.6.14",
"vue": "2.6.14",
"vue-clickaway": "^2.2.2",
"vue-router": "^3.5.1",
"vuex": "^3.6.2"
@ -33,9 +34,9 @@
"babel-plugin-transform-remove-console": "^6.9.4",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3",
"sass": "^1.32.7",
"sass-loader": "^12.0.0",
"vue-template-compiler": "^2.6.14"
"sass": "^1.32.13",
"sass-loader": "^8.0.2",
"vue-template-compiler": "2.6.14"
}
},
"node_modules/@achrinza/node-ipc": {
@ -345,6 +346,7 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
@ -353,6 +355,7 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
@ -483,6 +486,7 @@
"version": "7.28.4",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz",
"integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==",
"dev": true,
"dependencies": {
"@babel/types": "^7.28.4"
},
@ -1674,6 +1678,7 @@
"version": "7.28.4",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz",
"integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==",
"dev": true,
"dependencies": {
"@babel/helper-string-parser": "^7.27.1",
"@babel/helper-validator-identifier": "^7.27.1"
@ -3377,6 +3382,24 @@
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
"dev": true
},
"node_modules/@zhicheng1012/zhicheng-components": {
"version": "1.0.28",
"resolved": "https://registry.npmjs.org/@zhicheng1012/zhicheng-components/-/zhicheng-components-1.0.28.tgz",
"integrity": "sha512-tGSghb1s4owO4oxi7DEHnzZZhxXOX7pfYF+4Phczv+4w3D1/3X9I6zWZkPgcKMq6qIBtqrJazZQMr9pyml2jZQ==",
"dependencies": {
"async-validator": "^1.11.5",
"core-js": "^3.40.0",
"vue-clickaway": "^2.2.2"
},
"engines": {
"node": ">=12.0.0 <=16.x",
"npm": ">=6.0.0"
},
"peerDependencies": {
"element-ui": "2.15.14",
"vue": "2.6.14"
}
},
"node_modules/accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@ -3650,12 +3673,9 @@
"dev": true
},
"node_modules/async-validator": {
"version": "1.8.5",
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz",
"integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
"dependencies": {
"babel-runtime": "6.x"
}
"version": "1.12.2",
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.12.2.tgz",
"integrity": "sha512-57EETfCPFiB7M4QscvQzWSGNsmtkjjzZv318SK1CBlstk+hycV72ocjriMOOM48HjvmoAoJGpJNjC7Z76RlnZA=="
},
"node_modules/asynckit": {
"version": "0.4.0",
@ -4838,11 +4858,6 @@
"node": ">=8.0.0"
}
},
"node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
},
"node_modules/de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
@ -5248,6 +5263,14 @@
"vue": "^2.5.17"
}
},
"node_modules/element-ui/node_modules/async-validator": {
"version": "1.8.5",
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz",
"integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
"dependencies": {
"babel-runtime": "6.x"
}
},
"node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@ -7882,6 +7905,7 @@
"version": "3.3.11",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"dev": true,
"funding": [
{
"type": "github",
@ -8438,7 +8462,8 @@
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"dev": true
},
"node_modules/picomatch": {
"version": "2.3.1",
@ -8484,6 +8509,7 @@
"version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"dev": true,
"funding": [
{
"type": "opencollective",
@ -9063,6 +9089,7 @@
"version": "2.8.8",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
"integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
"dev": true,
"optional": true,
"bin": {
"prettier": "bin-prettier.js"
@ -9713,16 +9740,19 @@
}
},
"node_modules/sass-loader": {
"version": "12.6.0",
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz",
"integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==",
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz",
"integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==",
"dev": true,
"dependencies": {
"klona": "^2.0.4",
"neo-async": "^2.6.2"
"clone-deep": "^4.0.1",
"loader-utils": "^1.2.3",
"neo-async": "^2.6.1",
"schema-utils": "^2.6.1",
"semver": "^6.3.0"
},
"engines": {
"node": ">= 12.13.0"
"node": ">= 8.9.0"
},
"funding": {
"type": "opencollective",
@ -9730,10 +9760,9 @@
},
"peerDependencies": {
"fibers": ">= 3.1.0",
"node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0",
"node-sass": "^4.0.0",
"sass": "^1.3.0",
"sass-embedded": "*",
"webpack": "^5.0.0"
"webpack": "^4.36.0 || ^5.0.0"
},
"peerDependenciesMeta": {
"fibers": {
@ -9744,12 +9773,27 @@
},
"sass": {
"optional": true
},
"sass-embedded": {
"optional": true
}
}
},
"node_modules/sass-loader/node_modules/schema-utils": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
"integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
"dev": true,
"dependencies": {
"@types/json-schema": "^7.0.5",
"ajv": "^6.12.4",
"ajv-keywords": "^3.5.2"
},
"engines": {
"node": ">= 8.9.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
}
},
"node_modules/schema-utils": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
@ -10182,6 +10226,7 @@
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
@ -10190,6 +10235,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
@ -10899,14 +10945,10 @@
}
},
"node_modules/vue": {
"version": "2.7.16",
"resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz",
"integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
"deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.",
"dependencies": {
"@vue/compiler-sfc": "2.7.16",
"csstype": "^3.1.0"
}
"version": "2.6.14",
"resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz",
"integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==",
"deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details."
},
"node_modules/vue-clickaway": {
"version": "2.2.2",
@ -11075,13 +11117,13 @@
"dev": true
},
"node_modules/vue-template-compiler": {
"version": "2.7.16",
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz",
"integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==",
"version": "2.6.14",
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz",
"integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==",
"dev": true,
"dependencies": {
"de-indent": "^1.0.2",
"he": "^1.2.0"
"he": "^1.1.0"
}
},
"node_modules/vue-template-es2015-compiler": {
@ -11090,19 +11132,6 @@
"integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
"dev": true
},
"node_modules/vue/node_modules/@vue/compiler-sfc": {
"version": "2.7.16",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
"integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==",
"dependencies": {
"@babel/parser": "^7.23.5",
"postcss": "^8.4.14",
"source-map": "^0.6.1"
},
"optionalDependencies": {
"prettier": "^1.18.2 || ^2.0.0"
}
},
"node_modules/vuex": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.2.tgz",
@ -11938,12 +11967,14 @@
"@babel/helper-string-parser": {
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"dev": true
},
"@babel/helper-validator-identifier": {
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="
"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
"dev": true
},
"@babel/helper-validator-option": {
"version": "7.27.1",
@ -12046,6 +12077,7 @@
"version": "7.28.4",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz",
"integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==",
"dev": true,
"requires": {
"@babel/types": "^7.28.4"
}
@ -12820,6 +12852,7 @@
"version": "7.28.4",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz",
"integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==",
"dev": true,
"requires": {
"@babel/helper-string-parser": "^7.27.1",
"@babel/helper-validator-identifier": "^7.27.1"
@ -14125,6 +14158,16 @@
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
"dev": true
},
"@zhicheng1012/zhicheng-components": {
"version": "1.0.28",
"resolved": "https://registry.npmjs.org/@zhicheng1012/zhicheng-components/-/zhicheng-components-1.0.28.tgz",
"integrity": "sha512-tGSghb1s4owO4oxi7DEHnzZZhxXOX7pfYF+4Phczv+4w3D1/3X9I6zWZkPgcKMq6qIBtqrJazZQMr9pyml2jZQ==",
"requires": {
"async-validator": "^1.11.5",
"core-js": "^3.40.0",
"vue-clickaway": "^2.2.2"
}
},
"accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@ -14315,12 +14358,9 @@
"dev": true
},
"async-validator": {
"version": "1.8.5",
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz",
"integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
"requires": {
"babel-runtime": "6.x"
}
"version": "1.12.2",
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.12.2.tgz",
"integrity": "sha512-57EETfCPFiB7M4QscvQzWSGNsmtkjjzZv318SK1CBlstk+hycV72ocjriMOOM48HjvmoAoJGpJNjC7Z76RlnZA=="
},
"asynckit": {
"version": "0.4.0",
@ -15158,11 +15198,6 @@
"css-tree": "^1.1.2"
}
},
"csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
},
"de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
@ -15459,6 +15494,16 @@
"normalize-wheel": "^1.0.1",
"resize-observer-polyfill": "^1.5.0",
"throttle-debounce": "^1.0.1"
},
"dependencies": {
"async-validator": {
"version": "1.8.5",
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz",
"integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
"requires": {
"babel-runtime": "6.x"
}
}
}
},
"emoji-regex": {
@ -17425,7 +17470,8 @@
"nanoid": {
"version": "3.3.11",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"dev": true
},
"natural-compare": {
"version": "1.4.0",
@ -17838,7 +17884,8 @@
"picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"dev": true
},
"picomatch": {
"version": "2.3.1",
@ -17869,6 +17916,7 @@
"version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"dev": true,
"requires": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@ -18231,6 +18279,7 @@
"version": "2.8.8",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
"integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
"dev": true,
"optional": true
},
"pretty-error": {
@ -18689,13 +18738,29 @@
}
},
"sass-loader": {
"version": "12.6.0",
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz",
"integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==",
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz",
"integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==",
"dev": true,
"requires": {
"klona": "^2.0.4",
"neo-async": "^2.6.2"
"clone-deep": "^4.0.1",
"loader-utils": "^1.2.3",
"neo-async": "^2.6.1",
"schema-utils": "^2.6.1",
"semver": "^6.3.0"
},
"dependencies": {
"schema-utils": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
"integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.5",
"ajv": "^6.12.4",
"ajv-keywords": "^3.5.2"
}
}
}
},
"schema-utils": {
@ -19042,12 +19107,14 @@
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
},
"source-map-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"dev": true
},
"source-map-support": {
"version": "0.5.21",
@ -19572,26 +19639,9 @@
"dev": true
},
"vue": {
"version": "2.7.16",
"resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz",
"integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
"requires": {
"@vue/compiler-sfc": "2.7.16",
"csstype": "^3.1.0"
},
"dependencies": {
"@vue/compiler-sfc": {
"version": "2.7.16",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
"integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==",
"requires": {
"@babel/parser": "^7.23.5",
"postcss": "^8.4.14",
"prettier": "^1.18.2 || ^2.0.0",
"source-map": "^0.6.1"
}
}
}
"version": "2.6.14",
"resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz",
"integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ=="
},
"vue-clickaway": {
"version": "2.2.2",
@ -19710,13 +19760,13 @@
}
},
"vue-template-compiler": {
"version": "2.7.16",
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz",
"integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==",
"version": "2.6.14",
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz",
"integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==",
"dev": true,
"requires": {
"de-indent": "^1.0.2",
"he": "^1.2.0"
"he": "^1.1.0"
}
},
"vue-template-es2015-compiler": {

9
package.json

@ -8,12 +8,13 @@
"lint": "vue-cli-service lint"
},
"dependencies": {
"@zhicheng1012/zhicheng-components": "^1.0.28",
"axios": "^1.8.3",
"core-js": "^3.40.0",
"element-ui": "^2.15.14",
"lottie-web": "^5.12.2",
"regenerator-runtime": "^0.14.1",
"vue": "^2.6.14",
"vue": "2.6.14",
"vue-clickaway": "^2.2.2",
"vue-router": "^3.5.1",
"vuex": "^3.6.2"
@ -33,8 +34,8 @@
"babel-plugin-transform-remove-console": "^6.9.4",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3",
"sass": "^1.32.7",
"sass-loader": "^12.0.0",
"vue-template-compiler": "^2.6.14"
"sass": "^1.32.13",
"sass-loader": "^8.0.2",
"vue-template-compiler": "2.6.14"
}
}

71
src/components/GuipButton.vue

@ -1,71 +0,0 @@
<template>
<el-button
:type="type"
v-bind="$attrs"
:plain="plain"
:loading="loading"
:size="size"
:disabled="disabled"
@click="$emit('click')"
:style="{...btnstyle}"
>
<slot></slot>
</el-button>
</template>
<script>
export default {
name: 'GuipButton',
props:{
type:{
type:String,
default:'primary'
},
size:{
type:String,
default:'normal'
},
// false
plain:{
type:Boolean,
default:false
},
loading:{
type:Boolean,
default:false
},
disabled:{
type:Boolean,
default:false
},
btnstyle:Object
},
data() {
return {
radio: ''
}
},
mounted(){
}
}
</script>
<style scoped lang="scss">
button span{
display: flex;
align-items: center;
}
.rotating-svg {
animation: rotate 2s linear infinite;
}
@keyframes rotate {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
</style>

136
src/components/GuipInput.vue

@ -1,136 +0,0 @@
<template>
<el-form-item :style="{ ...styleObject }" :required="required"
:class="[{ 'column': column }, { 'w510': addClass == 'w510' }, { 'w388': addClass == 'w388' }, 'form-item']" :label="label"
:prop="prop" :rules="rules">
<p v-if="desc" class="desc_right">{{ desc }}</p>
<el-input :type="type" v-bind="$attrs" :placeholder="placeholder1" :disabled="disabled" :maxlength="maxlength1"
:style="{ width: width, height: height }" :minLength="minLength1" :show-word-limit="showWordLimit"
@input="$emit('input', $event)" @keydown="handleKeydown" @change="$emit('change', $event)"
@blur="$emit('blur', inputValue)" @focus="$emit('focus', inputValue)" v-model="inputValue">
<!-- 自定义前面小图标 -->
<template v-slot:prepend>
<slot name="prependshow"></slot>
</template>
<template v-slot:prefix>
<slot name="prefix"></slot>
</template>
<!-- 清除小图标 -->
<template v-slot:suffix>
<slot name="suffix"></slot>
</template>
<template v-slot:append>
<slot name="appendshow"></slot>
</template>
<!-- :error="errorMessage" show-message -->
<!-- <i slot="suffix" v-if="empty" class="el-icon-close" @click="handleClear">h</i> -->
<!-- <el-button slot="append" v-if="hasBtn" type="primary" @click="$emit('enter',value)">搜索</el-button> -->
</el-input>
<!-- 单位 -->
<span class="unit" v-if="unit">{{ unit }}</span>
</el-form-item>
</template>
<script>
export default {
name: 'GuipInput',
props: ['value', 'styleObject', 'disabled', 'defaultValue', 'placeholder','required',
'maxlength', 'minLength', 'clear', 'width', 'height', 'showWordLimit',
'label', 'type', 'prop', 'rules', 'column', 'addClass', 'desc', 'unit'],
data() {
return {
inputValue: this.value || this.defaultValue,
maxlength1: '',
minLength1: 0,
style: {
width: '510px',
height: '38px'
},
placeholder1: ''
}
},
watch: { // value prop 便 inputValue
value(newVal) {
this.inputValue = newVal;
}
},
created() {
//
if (this.placeholder) {
this.placeholder1 = this.placeholder;
}
//
if (this.maxlength) {
this.maxlength1 = this.maxlength;
}
//
if (this.minLength) {
this.minLength1 = this.minLength;
}
},
mounted() {
this.$nextTick(() => {
let els = document.querySelectorAll('.el-input');
els.forEach(item => {
item.onmouseover = function () {
item.classList.add("hoverclass")
}
item.onmouseout = function () {
item.classList.remove("hoverclass")
}
// item.addEventListener('mouseover',function(){
// console.log('');
// item.classList.add("hoverclass")
// })
// item.addEventListener('mouseoout',function(){
// console.log('');
// item.classList.remove("hoverclass")
// })
// item.addEventListener('mouseoenter',function(){
// console.log('---');
// item.classList.add("hoverclass")
// })
// item.addEventListener('mouseoleave',function(){
// console.log('');
// item.classList.remove("hoverclass")
// })
})
// console.log(el,'====9999');
// if(els&& this.styleObject){
// for(var key in this.styleObject){
// els.style[key] = this.styleObject[key]
// }
// }
})
},
methods: {
// input
// changeInput(event){
// this.$emit('input', event);
// }
// handleClear(){
// console.log('---');
// this.$emit('clear', '')
// }
handleKeydown(e) {
console.log(e);
// if (e.key === '1') {
e.preventDefault(); //
// }
},
}
}
</script>
<style lang="scss" scoped>
.unit {
position: absolute;
right: 12px;
/* 根据需要调整位置 */
top: 50%;
transform: translateY(-50%);
pointer-events: none;
/* 防止单位文本影响输入框的点击事件 */
}
</style>

143
src/components/GuipSwitch.vue

@ -1,143 +0,0 @@
<template>
<el-form-item :prop="prop" :label="label" :rules="rules">
<div class="switchWrap">
<span :class="['switchDesc', { 'fl': float == 'left' }, { 'fr': float == 'right' }]"
v-if="activeText || inactiveText">
{{ internalValue === activeValue ? activeText : inactiveText}}</span>
<el-switch v-model="internalValue" :active-color="activeColor" :inactive-color="inactiveColor"
v-bind="$attrs" :disabled="disabled" :active-value="activeValue" :inactive-value="inactiveValue"
@change="handleChange">
<!-- 自定义开启时的图标 -->
<template #active-icon>
</template>
<!-- 自定义关闭时的图标 -->
<template #inactive-icon>
</template>
</el-switch>
</div>
</el-form-item>
</template>
<script>
export default {
name: 'GuipSwitch',
inheritAttrs: false,
props: {
// modelValue: { type: [Boolean, String, Number], default: undefined },
value: { type: [Boolean, String, Number], default: undefined },
prop: String,
label: String,
rules: Array,
labelWidth: String,
activeText: {
type: String,
default: '',
},
inactiveText: {
type: String,
default: '',
},
activeValue: {
type: [Boolean, String, Number],
default: true,
},
inactiveValue: {
type: [Boolean, String, Number],
default: false,
},
activeColor: {
type: String,
default: '#00C261',
},
inactiveColor: {
type: String,
default: '#BABDC2',
},
float: {
type: String,
default: 'left',
},
disabled: {
type: Boolean,
default: false,
},
},
data() {
return {
internalValue: this.value,
errorMsg: ''
}
},
computed: {
// internalValue: {
// get() {
// return this.modelValue !== undefined ? this.modelValue : this.value
// },
// set(val) {
// this.$emit('update:modelValue', val)
// this.$emit('input', val)
// }
// }
},
watch: {
value(newVal) {
this.internalValue = newVal
console.log(this.internalValue, 88888)
},
// modelValue(newVal) {
// this.internalValue = newVal
// },
},
methods: {
handleChange(val) {
// this.$emit('update:modelValue', val)
this.$emit('input', val)
this.$emit('change', val)
this.validateField()
},
validateField() {
if (this.prop && this.$parent.validateField) {
this.$parent.validateField(this.prop, (error) => {
this.errorMsg = error || ''
})
}
}
}
}
</script>
<style scoped>
.switchWrap {
/* align-items: center; */
}
.fl {
float: left;
margin-right: 12px;
}
.fr {
float: right;
margin-left: 12px;
}
.switchDesc {
font-size: 12px;
font-weight: normal;
line-height: 20px;
letter-spacing: 0.08em;
font-variation-settings: "opsz" auto;
/* text/text_3 */
color: #626573;
display: inline-block;
}
.error-msg {
color: #f56c6c;
font-size: 12px;
margin-left: 10px;
}
</style>

129
src/components/SliderMenu.vue

@ -1,7 +1,7 @@
<template>
<transition name="menu-collapse">
<transition :name="customize ? '' : 'menu-collapse'">
<el-menu v-if="!customize" class="el-menu-vertical-demo custom-menu" @open="handleOpen"
:default-active="currentMenuItem?.index"
:default-active="currentMenuItem && currentMenuItem.index" :default-openeds="defaultOpeneds"
@close="handleClose" @select="handleSelect" :collapse="isCollapse" :collapse-transition="true"
>
<div style="height: 100%;padding: 0 0 20px;box-sizing: border-box;">
@ -14,23 +14,26 @@
<img v-else class="point" src="../assets/menu-open.svg" @click="changeMenuStatus(false)" alt="">
</GuipToolTip>
</div>
<GuipToolTip v-if="isShowCreateBtn" :content="createNewMsg" placement="right" :isShow="isShowCreateMsg" :manual="true">
<div @click="addSite" class="create-new-site" :class="!isCollapse?'':'create-new-site-short'" >{{!isCollapse ? '创建首个网站' : '建站'}}</div>
</GuipToolTip>
<template v-for="item in menuData" >
<el-submenu v-if="item.children" :key="item.index" :index="item.index">
<template slot="title">
<SvgIcon1 :iconPath="require(`@/assets/menu/${item.icon}.svg`)" defaultColor="#8A9099"
activeColor="#006AFF" :isActive="item.index == currentMenuItem?.index?.substring(0,1) && isCollapse" />
activeColor="#006AFF" :isActive="item.index == currentMenuItem && currentMenuItem['index'].substring(0,1) && isCollapse" />
<span class="title_text" >{{ item.title }}</span>
</template>
<el-menu-item style="padding: 0 22px 0 32px;" v-for="subItem in item.children" :key="subItem.index"
<el-menu-item style="padding: 0 22px 0 20px;" v-for="subItem in item.children" :key="subItem.index"
:index="subItem.index" @click="handleSelect(subItem.index, [item.index, subItem.index], subItem)">
{{ subItem.title }}
</el-menu-item>
</el-submenu>
<el-menu-item v-else :index="item.index" :key="item.index+'a'" @click="handleSelect(item.index, [item.index], item)">
<el-menu-item v-else :index="item.index" :key="item.index" @click="handleSelect(item.index, [item.index], item)">
<div class="flex">
<SvgIcon1 :iconPath="require(`@/assets/menu/${item.icon}.svg`)" defaultColor="#8A9099"
activeColor="#006AFF" :isActive="item.index == currentMenuItem?.index" />
<span class="title_text" slot="title">{{ item.title }}</span>
activeColor="#006AFF" :isActive="item.index == (currentMenuItem && currentMenuItem['index'])" />
<span class="title_text" slot="title">{{ item.title}}</span>
</div>
</el-menu-item>
</template>
@ -43,10 +46,11 @@
</template>
<script>
import SetLeftMenu from '@/components/SetLeftMenu.vue'
import SvgIcon1 from '@/components/SvgIcon1.vue'
import SvgIcon1 from '@/components/SvgIcon1.vue';
import GuipToolTip from '@/components/GuipToolTip.vue';
export default {
name: 'SliderMenu',
options: { styleIsolation: "shared" },
components: {
SvgIcon1,
GuipToolTip,
@ -67,7 +71,14 @@ export default {
isCollapse: false,
routerList: [],
currentMenuItem:'',
currentMenuParent:''
currentMenuParent:'',
isShowCreateBtn: false,
isShowCreateMsg: false,
addNewSiteUrl:'/agent/siteAdd',
createNewMsg: '', //
displayedText: '尽快建网站,售卖服务', //
typingIndex: 0, //
typingTimer: null
};
},
watch: {
@ -76,9 +87,62 @@ export default {
this.updateCurrentMenu();
},
},
computed: {
defaultOpeneds() {
if(this.customize)return
return this.menuData.map(item => item.index);
}
},
methods: {
//
getSiteNo() {
if(this.customize)return
const that = this
that.$http('POST', '/agentnew/ajax_get_site_no', {
}).then(response => {
if(response.status && response.data){
that.$nextTick(() => {
that.isShowCreateBtn = true
that.createSiteMsg()
})
}
}).catch(error => {
console.error(error, 'error')
})
},
createSiteMsg() {
clearInterval(this.typingTimer);
this.typingTimer = setInterval(() => {
if (this.typingIndex < this.displayedText.length) {
this.createNewMsg += this.displayedText.slice(this.typingIndex,this.typingIndex+1);
this.typingIndex++;
this.isShowCreateMsg = true;
} else {
clearInterval(this.typingTimer);
setTimeout(()=>{
this.isShowCreateMsg = false;
},1500)
setTimeout(()=>{
this.createNewMsg = '';
this.typingIndex = 0;
this.createSiteMsg()
},2000)
}
}, 200);
},
addSite(){
window.open(this.addNewSiteUrl, '_blank');
},
changeMenuStatus(flag) {
this.isCollapse = flag;
this.isShowCreateMsg = false;
this.createNewMsg = '';
this.typingIndex = 0;
clearInterval(this.typingTimer);
setTimeout(()=>{
this.createSiteMsg()
},1000)
},
handleOpen(key, keyPath) {
console.log(key, keyPath);
@ -99,6 +163,12 @@ export default {
// },
handleSelect(index, indexPath, menuItem) {
if (menuItem.path && this.$route.path !== menuItem.path) {
//menu external: true,
if(menuItem.external){
location.href= process.env.VUE_APP_HOST + menuItem.path
// window.open(menuItem.path, '_blank')
return
}
this.$router.push(menuItem.path);
}
},
@ -130,13 +200,14 @@ export default {
// //
// this.activeMenu = this.$route.path;
this.updateCurrentMenu();
this.getSiteNo()
}
}
</script>
<style lang="scss" scoped>
.menu-collapse-leave-active,
.menu-collapse-enter-active {
transition: all 0.7s;
transition: all 0.5s;
}
.menu-collapse-enter,
@ -152,29 +223,29 @@ export default {
}
.el-menu-item.is-active {
font-weight: bold;
}
}
::v-deep .el-menu-item.is-active .title_text{
font-weight: bold;
color: #006AFF !important;
}
.title_img {
width: 16px;
margin-right: 4px;
}
.title_text {
margin-left: 4px;
font-size: 12px;
font-weight: bold;
font-size: 14px;
font-weight: normal;
display: block;
color: #1E2226;
}
.el-menu--collapse .title_text {
display: none;
}
.el-menu--collapse ::v-deep .el-submenu__icon-arrow {
::v-deep .el-submenu__icon-arrow {
display: none;
}
@ -182,12 +253,13 @@ export default {
width: 158px;
min-width: 158px;
min-height: calc(100vh - 62px);
box-shadow: 0px 0px 11px 2px rgba(147, 147, 147, 0.11);
overflow-y: auto;
}
.el-menu-item {
padding: 0 22px;
font-size: 12px;
font-size: 14px;
}
.menu-top {
@ -215,6 +287,22 @@ export default {
}
}
.create-new-site{
display: flex;
align-items: center;
justify-content: center;
padding: 11px 12px;
border-radius: 4px;
background: linear-gradient(290deg, #FF4143 4%, #FF768B 92%);
font-size: 14px;
color: #fff;
font-weight: bold;
margin: 0 15px;
}
.create-new-site-short{
margin: 0 5px;
}
::v-deep .el-submenu {
// width: 16px;
font-size: 12px;
@ -282,4 +370,5 @@ export default {
// .el-menu--collapse .el-submenu.is-opened > .el-menu {
// opacity: 0;
// height: 0;
// }</style>
// }
</style>

4
src/main.js

@ -15,10 +15,12 @@ import { directive as clickaway } from 'vue-clickaway';
import GuipMessage from '@/components/GuipMessage/index';
import HeaderIcon from './utils/headerIcon'
import PositionMessage from './utils/tooltip'
import ZhichengUI from '@zhicheng1012/zhicheng-components'
import '@zhicheng1012/zhicheng-components/dist/css/zhicheng-components.css';
Vue.prototype.$loadingFn = LoadingService;
Vue.config.productionTip = false;
Vue.prototype.$http = request;
Vue.use(ZhichengUI)
Vue.use(ElementUI);
Vue.use(GuipMessage)
Vue.directive('clickaway', clickaway);

42
src/router/index.js

@ -18,15 +18,6 @@ const routes = [
}
},
{
path: '/doctorInformation',
name: '医生信息',
component: () => import('../views/DoctorInformation.vue'),
meta: {
title: '编辑信息',
breadcrumbParent: '首页' // 手动指定父级
}
},
{
path: '/ErrorAccess',
name: '访问出错',
component: () => import('../views/ErrorAccess.vue'),
@ -34,39 +25,6 @@ const routes = [
title: '访问出错',
hideBreadcrumb: true // 首页不显示面包屑
}
},
{
path: '/hosInformation',
name: '医院信息',
component: () => import('../views/HosInformation.vue'),
meta: {
title: '编辑医院',
breadcrumbParent: '医生信息' // 手动指定父级
// r如果想隐藏中间层级
// breadcrumbParent: '首页', // 跳过医生信息
// hideInBreadcrumb: true // 可选:隐藏当前项
}
},
{
path: '/weChatPayment',
name: '微信收款',
component: () => import('../views/weChatPayment.vue'),
meta: {
title: '微信收款',
breadcrumbParent: '编辑医院' // 手动指定父级
// r如果想隐藏中间层级
// breadcrumbParent: '首页', // 跳过医生信息
// hideInBreadcrumb: true // 可选:隐藏当前项
}
},
{
path: '/addNewTreatment',
component: () => import( /* webpackChunkName: "addNewTreatment" */ '../views/AddNewTreatment.vue'),
name: '新增套餐',
meta: {
hideBreadcrumb: true // 首页不显示面包屑
}
}
]

661
src/views/AddNewTreatment.vue

@ -1,661 +0,0 @@
<template>
<div class="site-setting-wrap min-flex-right">
<div class="pagePadding main-wrap">
<p class="pageTitle bold">新增套餐</p>
<div class="siteMessage flex-common" id="siteMessage2">
<p class="littleTitle mb32">套餐信息</p>
<el-form :model="siteForm" :rules="siteFormrules" ref="siteForm1">
<div class="flex-wrap">
<div class="flex-left">
<GuipFormItem column="column" class="mb24" label="套餐名称" :required="true">
<GuipInput slot="formDom" ref="GuipInput" column="column" v-model="siteForm.name"
prop="name" placeholder="输入" />
</GuipFormItem>
</div>
<div class="flex-line"></div>
<div class="flex-right">
<GuipFormItem column="column" class="mb24" label="套餐价格" :required="true">
<GuipInput slot="formDom" ref="GuipInput" column="column" v-model="siteForm.price"
prop="price" placeholder="输入" unit="元" />
</GuipFormItem>
</div>
</div>
</el-form>
</div>
<div class="siteMessage flex-common" id="siteMessage2">
<p class="littleTitle mb32">套餐项目</p>
<el-form>
<div class="flex">
<div class="checkboxAll">
<el-checkbox @change="handleSelectAllChange1" v-model="selectAll"
:indeterminate="isIndeterminate">全选</el-checkbox>
</div>
<span class="totalCount">{{ displayedProjectCount }}已选{{ selectedCount }}</span>
</div>
<div class="flex-between mb32 mt32">
<div class="tabProject flex">
<div :class="['tab-item point', projectSearchId == 'all' ? 'active' : '']"
@click="selectTag('all')">全部分类</div>
<div :class="['tab-item point', projectSearchId == item.id ? 'active' : '']"
@click="selectTag(item.id)" v-for="item in Object.values(projectTagData)"
:key="item.name">{{ item.name }}</div>
</div>
<div class="right flex" v-show="false">
<GuipFormItem label="搜索项目">
<GuipInput slot="formDom" ref="GuipInput" width="280px" v-model="projectSearchName"
placeholder="请输入" @blur="inputBlur">
<img src="@/assets/input_search_ic.svg" slot="suffix" @click="handleClear" />
</GuipInput>
</GuipFormItem>
</div>
</div>
<GuipTable :tableData="sortedProjectList" style="width: 100%" ref="multipleTable" max-height="600px"
@selection-change="handleSelectionChange" :loading="loading" @select="handleSelect">
<!-- <el-table-column type="selection" label="选择" width="150"></el-table-column> -->
<el-table-column type="selection" width="150">
<template slot="header">
<span class="selection-header-text">选择</span>
</template>
</el-table-column>
<el-table-column prop="name" label="项目名称" min-width="150"></el-table-column>
<el-table-column label="次数" min-width="150px" prop="num">
<template slot-scope="scope">
<GuipInput width="90%" v-if="package_id && scope.row.num" v-model="scope.row.num"
min="1" @change="changeNums(scope.row)" />
<GuipInput width="90%" v-else v-model="scope.row.unit_num" min="1"
@change="changeNums(scope.row)" />
</template>
</el-table-column>
<el-table-column prop="price" label="项目价格" min-width="150"></el-table-column>
<el-table-column prop="classify_id" label="分类" min-width="150">
<template slot-scope="scope">
{{ projectTagData[scope.row.classify_id].name }}
</template>
</el-table-column>
</GuipTable>
</el-form>
</div>
</div>
<div class="register-btns">
<GuipButton type="system" :btnstyle="{ width: '144px', height: '46px' }" @click="cancelClick">取消
</GuipButton>
<GuipButton type="primary" :btnstyle="{ width: '144px', height: '46px' }" @click="confirmClick">保存套餐
</GuipButton>
</div>
<GuipDialog :dialogVisible="dialogVisible" :title="'新增套餐确认'" :show-close-button="true" width="599px"
:show-cancel-button="true" @confirm="handleConfirm" @cancel="handleCancel" @close="handleClose"
confirmText="确定新增">
<div class="flex content">
<span>套餐名称</span>
<span>{{ siteForm.name }}套餐</span>
</div>
<div class="flex content">
<span>套餐价格</span>
<span>{{ siteForm.price }}</span>
</div>
<div class="flex content">
<span>套餐项目</span>
<div class="column gap10 project_list">
<span v-for="item in sortedProjectRows" :key="item.id">{{ item.name }} {{ item.num || item.unit_num
}}</span>
</div>
</div>
</GuipDialog>
</div>
</template>
<script>
import store from '../store';
import { mapState } from 'vuex';
import GuipFormItem from '@/components/GuipFormItem.vue';
import GuipTable from '@/components/GuipTable.vue';
import GuipDialog from '@/components/GuipDialog.vue';
import GuipInput from '@/components/GuipInput.vue';
import GuipButton from '@/components/GuipButton.vue';
// import GuipSelect from '@/components/GuipSelect.vue';
export default {
//
name: '',
props: [''],
components: {
GuipFormItem,
GuipInput,
GuipDialog,
GuipButton,
// GuipSelect,
GuipTable
},
data() {
return {
dialogVisible: false,
selectAll: false,
selectedCount: 0,
currentPage: 1,
pageSize: 10,
isIndeterminate: false,
projectSearchName: '',
projectSearchId: 'all',
loading: false,
treatMentList: [],//
projectList: [],//
projectTagData: [],
selectedRows: [],
sortedProjectRows: [],
siteForm: {
create_time: "",
depart_id: "",
doctor_id: "",
id: "",
name: "",
price: "",
status: ""
},
siteFormrules: {
name: [
{ required: true, message: '请输入套餐名称', trigger: 'blur' }
],
price: [
{ required: true, message: '请输入套餐价格', trigger: 'blur' }
],
},
package_id: '',
doctor_id: '',
depart_id: '',
}
},
computed: {
...mapState(['pageTitle']),
sortedProjectList() {
// sort
let sortedList = [...this.projectList].sort((a, b) => {
if (a.sort && !b.sort) return -1;
if (!a.sort && b.sort) return 1;
if (a.sort && b.sort) return a.sort - b.sort;
return 0;
});
// projectSearchId
if (this.projectSearchId === 'all') {
return sortedList;
} else {
return sortedList.filter(item => item.classify_id == this.projectSearchId);
}
},
//
displayedProjectCount() {
return this.sortedProjectList.length;
},
},
watch: {
projectSearchId() {
this.$nextTick(() => {
this.setSelectedRows();
});
},
projectList: {
deep: true,
handler() {
this.$nextTick(() => {
this.setSelectedRows();
});
}
}
},
mounted() {
const { package_id, doctor_id, depart_id } = this.$route.query; // doctorId
this.package_id = package_id;
this.depart_id = depart_id;
this.doctor_id = doctor_id;
store.commit('SET_PAGETITLE', '基本设置');
//
if (package_id) {
this.getInitData()
return
}
this.fetchProjectData();
},
methods: {
//
initSelectedItems() {
if (!this.package_id) {
this.selectedRows = [];
this.sortedProjectRows = []
return;
}
// treatMentList
this.treatMentList.forEach(treatment => {
const foundItem = this.projectList.find(item => item.id == treatment.project_id);
if (foundItem && !this.selectedRows.some(r => r.id === foundItem.id)) {
foundItem.num = treatment.num;
foundItem.sort = treatment.sort;
this.selectedRows.push(foundItem);
}
});
this.sortedProjectRows = [...this.selectedRows]
this.setSelectedRows();
},
// //
setSelectedRows() {
this.$nextTick(() => {
if (!this.$refs.multipleTable?.$refs.guiptable) return;
//
this.$refs.multipleTable.$refs.guiptable.clearSelection();
this.selectedRows = [];//
//
this.sortedProjectList.forEach(row => {
if (this.sortedProjectRows.some(selected => selected.id === row.id)) {
this.$refs.multipleTable.$refs.guiptable.toggleRowSelection(row, true);
}
});
});
},
getInitData() {
this.$http('POST', '/api/admin/get_project_package_info', {
depart_id: this.depart_id,
doctor_id: this.doctor_id,
package_id: this.package_id
}).then(response => {
if (response.code == 0) {
this.siteForm = { ...response.data }
if (response.data?.project_list) {
this.treatMentList = Object.values(response.data.project_list)
this.fetchProjectData()
}
}
}).catch(error => {
console.error(error, 'error')
})
},
// mounted fetchProjectData
fetchProjectData() {
this.$http('POST', '/api/admin/get_project_list', {
depart_id: this.depart_id,
doctor_id: this.doctor_id
}).then(response => {
if (response.code == 0 && response.data.list) {
this.projectTagData = response.data.classify;
this.projectList = Object.values(response.data.list).map(item => ({
...item,
checked: false
}));
//
if (this.package_id && this.selectedRows.length === 0) {
this.initSelectedItems();
}
}
});
},
inputBlur(val) {
//
console.log(val, '----搜索');
},
updateSelectionState() {
const currentViewSelected = this.sortedProjectList.filter(row =>
this.selectedRows.some(selected => selected.id === row.id)
);
const allSelected = currentViewSelected.length === this.sortedProjectList.length;
const noneSelected = currentViewSelected.length === 0;
this.selectAll = allSelected;
this.isIndeterminate = !noneSelected && !allSelected;
// console.log(this.sortedProjectRows,'sortedProjectRows==');
this.selectedCount = this.sortedProjectRows.length;
},
handleSelect(selection, row) {
// console.log(':', row);
// console.log(':', selection);
if (this.sortedProjectRows.includes(row)) {
let index = this.sortedProjectRows.findIndex((item) => item.id === row.id);
if (index > -1) {
this.sortedProjectRows.splice(index, 1)
}
} else {
this.sortedProjectRows.push(row)
}
this.updateSelectionState()
},
handleSelectAll(selection) {
console.log('全选/取消全选:', selection);
},
//
handleSelectionChange(rows) {
// console.log(rows, '=======---handleSelectionChange');
// ID
const currentViewIds = this.sortedProjectList.map(r => r.id);
//
const preservedSelections = this.selectedRows.filter(
row => !currentViewIds.includes(row.id)
);
//
this.selectedRows = [...preservedSelections, ...rows];
this.updateSelectionState();
},
handleSelectAllChange1(val) {
const currentViewRows = this.sortedProjectList;
if (val) {
//
currentViewRows.forEach(row => {
// selectedRows
if (!this.selectedRows.some(r => r.id === row.id)) {
this.selectedRows.push(row);
}
// sortedProjectRows
if (!this.sortedProjectRows.some(r => r.id === row.id)) {
this.sortedProjectRows.push(row);
}
});
} else {
//
currentViewRows.forEach(row => {
// selectedRows
this.selectedRows = this.selectedRows.filter(r => r.id !== row.id);
// sortedProjectRows
this.sortedProjectRows = this.sortedProjectRows.filter(r => r.id !== row.id);
});
}
//
this.$nextTick(() => {
this.setSelectedRows();
this.updateSelectionState();
});
},
//
selectTag(id) {
this.projectSearchId = id === 'all' ? 'all' : id;
this.updateSelectionState();
},
// /
//
//
//
changeNums(row) {
this.changeSelectStatus(row)
},
changeSelectStatus(row) {
//
if (!this.selectedRows.includes(row)) {
this.$refs.multipleTable.$refs.guiptable.toggleRowSelection(row, true);
}
row.checked = true
// selectedRows
if (!this.selectedRows.includes(row)) {
this.selectedRows.push(row);
}
if (!this.sortedProjectRows.includes(row)) {
this.sortedProjectRows.push(row);
}
//
this.updateSelectionState();
},
//
editorProjectInfo(props) {
console.log(props, '====---');
if (this.package_id) props.package_id = this.package_id
this.$http('POST', '/api/admin/edit_project', {
...props,
depart_id: this.depart_id,
doctor_id: this.doctor_id,
}).then(response => {
if (response.code == 0) {
this.$Message.success('修改成功')
//
// if(this.package_id){
// this.getInitData()
// }else{
// this.fetchProjectData()
// }
}
}).catch(error => {
console.error(error, 'error')
})
},
handleClose() {
this.handleCancel()
},
handleCancel() {
this.dialogVisible = false;
},
handleConfirm() {
let project_infos = [];
this.sortedProjectRows.forEach(item => {
project_infos.push({ project_id: item.id, num: item.num || item.unit_num })
})
let props = {
name: this.siteForm.name,
price: this.siteForm.price,
project_infos: JSON.stringify(project_infos)
}
if (this.package_id) props.package_id = this.package_id
//
this.$http('POST', '/api/admin/set_project_package', {
depart_id: this.depart_id,
doctor_id: this.doctor_id,
...props
}).then(response => {
if (response.code == 0) {
this.$Message.success('保存成功')
this.dialogVisible = false;
this.$router.push({
name: '医院信息',
query: { doctor_id: this.doctor_id, depart_id: this.depart_id }
})
}
}).catch(error => {
console.error(error, 'error')
})
},
handleClear(value) {
this.projectSearchName = ''
console.log(value, 'value===qinghcu');
},
handleSizeChange(val) {
this.pageSize = val
this.getData()
},
handleCurrentChange(val) {
this.currentPage = val
this.getData()
},
cancelClick() {
this.$router.push({
name: '医院信息',
query: { doctor_id: this.doctor_id, depart_id: this.depart_id }
})
},
confirmClick() {
// console.log(this.sortedProjectList, 'sortedProjectList==');
// console.log(this.sortedProjectRows, 'sortedProjectRows==');
// //
this.$refs['siteForm1'].validate((valid) => {
if (valid) {
if (this.selectedRows.length == 0) {
this.$Message('请选择套餐项目')
return
}
this.dialogVisible = true;
} else {
return false;
}
});
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .el-table__header-wrapper .el-checkbox {
display: none;
}
/* 隐藏表头的复选框 */
::v-deep .el-table__header-wrapper .el-checkbox {
display: none !important;
}
/* 确保选择文字可见 */
::v-deep .selection-header-text {
display: inline-block;
margin-left: 8px;
/* 调整位置 */
font-size: 14px;
color: #606266;
font-weight: bold;
}
/* 调整表头单元格的padding */
::v-deep .el-table .el-table__header th {
padding: 8px 0;
/* 根据需要调整 */
}
.siteMessage {
border-radius: 4px;
transition: all .5s;
border: 1px solid transparent;
}
.content {
margin-top: 16px;
color: #626573;
letter-spacing: 0.08em;
align-items: flex-start;
}
.register-btns {
display: flex;
flex-direction: row;
justify-content: center;
background: #FFFFFF;
padding: 16px 0px;
/* 蓝色阴影_常规 */
box-shadow: 0px 4px 16px 0px rgba(17, 55, 143, 0.12);
button:nth-child(1) {
margin-right: 56px;
}
}
.project_list {
max-height: 200px;
overflow-y: auto;
}
.totalCount {
font-size: 12px;
font-weight: normal;
line-height: 13px;
letter-spacing: 0.08em;
color: #8A9099;
margin-left: 12px;
}
.tabProject {
gap: 12px;
.tab-item {
height: 28px;
min-width: 74px;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
padding: 4px 12px;
gap: 4px;
align-self: stretch;
border-radius: 14px;
background: #FFFFFF;
box-sizing: border-box;
border: 1px solid #DFE2E6;
text-align: justify;
letter-spacing: 0.08em;
/* text/text_4 */
color: #8A9099;
}
.active {
color: #006AFF;
border: none;
background: #F2F3F5;
}
}
.addStore {
margin-top: 12px;
}
.qqCode-wrap {
margin-bottom: 14px;
.labelImg {
opacity: .7;
margin-left: 8px;
}
.avatar-uploader {
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: flex-start;
margin: 12px 0 8px;
}
.avatar-desc {
text-align: left;
}
}
.site-setting-wrap {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
.main-wrap {
flex: 1;
}
}
#siteMessage2 {
margin: 12px 0;
}
.domain-wrap {
.domain-item {
margin-bottom: 10px;
}
.domain-item p:last-child {
padding-left: 23px;
color: #8A9099;
}
p {
text-align: left;
line-height: 18px;
margin-bottom: 8px;
}
.domain-box {
display: flex;
flex-direction: column;
justify-content: flex-start;
}
}
</style>

489
src/views/DoctorInformation.vue

@ -1,489 +0,0 @@
<template>
<div class="site-setting-wrap pagePadding min-flex-right doctor-information">
<div class="siteMessage flex-common" id="siteMessage1">
<h3>基础信息</h3>
<el-form :model="siteForm" :rules="siteFormrules" ref="siteForm">
<div class="flex-wrap">
<div class="flex-left special-form-item">
<el-form-item prop="avator" label="" class="special-form-item">
<template #label>
<div class="custom-label flex">
医生照片
<img class="labelImg" src="@/assets/require.svg" alt="">
<el-tooltip content="这是提示信息">
<img class="labelImg" src="@/assets/form_qua_ic.svg" alt="">
</el-tooltip>
</div>
</template>
<div class="qqCode-wrap right">
<div class="avator-wrapper flex">
<img v-if="doctorAvatorUrl" :src="doctorAvatorUrl" alt="" class="uploadImg">
<hover-button :button-text="doctorAvatorUrl?'重新上传':'开始上传'" :default-icon="require('../assets/upLoad_grey.svg')"
:hover-icon="require('../assets/upLoad_active.svg')"
default-text-color="#23242B" hover-text-color="#006AFF">
</hover-button>
<div class="info-upload-wrapper" @click="clearDocotorAvatorFiles">
<el-upload
:on-change="handleAvatarChange"
action="#"
list-type="picture-card"
:multiple="false"
:http-request="setDoctorBaseInfoUpload"
:limit="Number(1)"
ref="avatorUpload"
:auto-upload="false"
>
<i slot="default" class="el-icon-plus"></i>
</el-upload>
</div>
</div>
</div>
<div class="qqCode-wrap right">
<div slot="tip" class="el-upload__tip desc">支持pngjpg格式尺寸32PX*32PX</div>
</div>
</el-form-item>
<GuipInput ref="GuipInput" column="column" :required="true" label="医生姓名"
v-model="siteForm.name" prop="name" placeholder="请输入" />
</div>
<div class="flex-line"></div>
<div class="flex-right">
<GuipInput ref="GuipInput" column="column" :required="true" label="身份证号码"
v-model="siteForm.idcard" prop="idcard" placeholder="请输入" />
<GuipInput ref="GuipInput" column="column" :required="true" label="手机号码"
v-model="siteForm.phone" prop="phone" placeholder="常用手机号" />
</div>
</div>
</el-form>
<GroupFormBtns @cancel="cancelClick('siteForm')" @confirm="submitDoctorBaseInfo" />
</div>
<div class="siteMessage flex-common" id="siteMessage2">
<p class="littleTitle mb32">初诊审批</p>
<el-form :model="siteForm" :rules="siteFormrules2" ref="siteForm2">
<div class="flex-wrap">
<div class="flex-left">
<GuipRadio v-model="siteForm.first_visit_audit" class="mb12" column="column"
:options="groupOptions" label="初诊是否审批" required prop="first_visit_audit"
@change="radioChange" />
<GuipInput ref="GuipInput" column="column" label="审批人电话" desc="审批人电话、微信,至少填写一项"
v-model="siteForm.approver_phone" prop="approver_phone" placeholder="请输入" />
</div>
<div class="flex-line"></div>
<div class="flex-right">
<GuipFormItem column="column" label="审批人微信">
<span class="desc" slot="formRight">审批人电话微信至少填写一项</span>
<div class="qqCode-wrap right" slot="formDom">
<div class="avator-wrapper">
<div class="flex" style="position: relative;">
<img v-if="approverWechatUrl" :src="approverWechatUrl" class="uploadImg">
<hover-button :button-text="(approverWechatUrl ? '重新上传':'微信二维码')" :default-icon="require('../assets/upLoad_grey.svg')"
:hover-icon="require('../assets/upLoad_active.svg')"
default-text-color="#23242B" hover-text-color="#006AFF" />
<div class="info-upload-wrapper" @click="clearApproverWechatFiles" style="width: 177px;left: 0;display: flex;justify-content: flex-start;overflow: hidden;">
<el-upload
:on-change="handleApproverWechatChange"
action="#"
list-type="picture-card"
:multiple="false"
:http-request="setApproverWechatUpload"
:limit="Number(1)"
ref="approverWechatUpload"
:auto-upload="false"
>
<i slot="default" class="el-icon-plus"></i>
</el-upload>
</div>
</div>
<div slot="tip" class="el-upload__tip desc" style="margin-top:8px;">批人微信二维码大小2M以内</div>
</div>
</div>
</GuipFormItem>
</div>
</div>
</el-form>
<GroupFormBtns @cancel="cancelClick" @confirm="submitApproverWechat" />
</div>
<div class="siteMessage flex-common" id="siteMessage2">
<h3>个人介绍</h3>
<el-form :model="siteForm" ref="siteForm1">
<div class="flex-wrap">
<div class="flex-left">
<GuipInput column="column" v-model="siteForm.doctor_desc" prop="doctor_desc" label="一句话介绍"
width="100%" height="56px" placeholder="请输入描述内容" maxlength="14" show-word-limit />
<GuipTextarea label="详细介绍" column="column" v-model="siteForm.doctor_detail" prop="doctor_detail"
width="100%" autosize placeholder="请输入描述内容" maxlength="不限" show-word-limit />
</div>
<div class="flex-line"></div>
<div class="flex-right">
<GuipInput ref="GuipInput" column="column" label="个人标签"
v-model="siteForm.label" prop="name" placeholder="请输入" />
</div>
</div>
</el-form>
<GroupFormBtns @cancel="cancelClick('siteForm1')" @confirm="setDoctorDesc" />
</div>
</div>
</template>
<script>
import { mapState } from 'vuex';
import HoverButton from '@/components/HoverButton.vue';
import GuipFormItem from '@/components/GuipFormItem.vue';
import GuipInput from '@/components/GuipInput.vue';
import GuipTextarea from '@/components/GuipTextarea.vue';
import GroupFormBtns from '@/components/GroupFormBtns.vue';
import GuipRadio from '@/components/GuipRadio.vue';
export default {
//
name: '',
props: [''],
components: {
HoverButton,
GuipFormItem,
GuipRadio,
GuipInput,
GuipTextarea,
GroupFormBtns
},
data() {
return {
doctorId: '',
fileList: [
// { name: 'image.jpeg', url: 'http://jasonyizherenxin.checkcopy.com/user_avatar/1.png?v=93940df0b596961c42de23ef1f2d3257' }
],
fileList1:[],
doctorAvatoFile:[],
doctorAvatorUrl: '',
approverWechatUrl:'',
approverWechatFile:[],
options_payword: [],
groupOptions: [
{ label: '需审批', value: '1' },
{ label: '不需审批', value: '0' },
],
formData: null,
siteForm: {
did:0,
name: '',
idcard: ' ',
phone: '',
avator: '',
doctor_desc: '',
doctor_detail: '',
label: '',
approver_phone:'',
approver_wechat:'',
first_visit_audit: '',
},
oldForm: {},
siteFormrules2: {
first_visit_audit: [
{ required: true, message: '请选择初诊审批设置', trigger: 'change' }
]
},
siteFormrules: {
name: [
{ required: true, message: '请输入姓名', trigger: 'blur' }
],
phone: [
{ required: true, message: '请输入手机号', trigger: 'blur' },
{
pattern: /^1[3-9]\d{9}$/,
message: '请输入正确的手机号码',
trigger: 'blur'
}
],
idcard: [
{ required: true, message: '请输入身份证号', trigger: 'blur' },
{
pattern: /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/,
message: '请输入正确的身份证号码',
trigger: 'blur'
}
],
avator: [
{
validator: (rule, value, callback) => {
if (!this.fileList.length && !this.siteForm.avator) {
callback(new Error('请上传医生照片'));
} else {
callback();
}
},
trigger: 'change'
}
]
}
}
},
computed: {
...mapState(['pageTitle'])
},
mounted() {
const doctor_id = this.$route.query.doctor_id;
this.doctorId = doctor_id;
if (doctor_id) this.getDoctorData(doctor_id);
},
methods: {
setDoctorDesc() {
if(!this.doctorId) {
this.$message.error('请先设置医生基础信息')
return;
}
var obj = new Object()
obj.did = this.doctorId
obj.desc = this.siteForm.doctor_desc
obj.detail = this.siteForm.doctor_detail
obj.label = this.siteForm.label
this.$http('POST', '/api/admin/set_doctor_desc', obj).then(response => {
if (response.code != 0) {
this.$message.error(response.msg)
return;
}
this.$message.success(response.msg)
}).catch(error => {
console.error(error, 'error')
this.$message.error('设置失败')
})
},
getDoctorData(doctor_id) {
this.$http('POST', '/api/admin/get_doctor_baseinfo', {did:doctor_id}).then(response => {
if (response.code != 0) {
this.$message.error(response.msg)
return;
}
this.siteForm = response.data
this.siteForm.did = doctor_id;
this.siteForm.name = this.siteForm.doctor_name
this.doctorAvatorUrl = this.siteForm.avator
this.approverWechatUrl = this.siteForm.approver_wechat
}).catch(error => {
console.error(error, 'error')
this.$message.error('设置失败')
})
},
setDoctorInfo(param) {
this.$http('POST', '/api/admin/set_doctor_baseinfo', param).then(response => {
if (response.code != 0) {
this.$message.error(response.msg)
return;
}
this.$message.success(response.msg)
var data = response.data
if(this.doctorId) return;
setTimeout(() => {
location.href = location.href+'?doctor_id='+data.doctor_id
}, 800);
}).catch(error => {
console.error(error, 'error')
this.$message.error('设置失败')
})
},
setDoctorBaseInfoUpload(param) {
let fileObj = param.file
let fd = new FormData()
fd.append('avatar_file', fileObj)
var siteForm = this.siteForm
fd.append('did', this.doctorId)
fd.append('name', siteForm.name)
fd.append('phone', siteForm.phone)
fd.append('idcard', siteForm.idcard)
this.setDoctorInfo(fd)
},
submitDoctorBaseInfo() {
if(this.doctorAvatoFile.length == 0) {
if(this.doctorId) {
this.setDoctorInfo(this.siteForm)
return;
}
this.$message.error('请上传医生照片')
return;
}
this.$refs.avatorUpload.submit();
},
clearDocotorAvatorFiles(){
this.doctorAvatorUrl = '';
this.doctorAvatoFile = []
this.$refs.avatorUpload.clearFiles();
},
clearApproverWechatFiles(){
this.approverWechatUrl = '';
this.approverWechatFile = []
this.$refs.approverWechatUpload.clearFiles();
},
setApproverWechatUpload(param) {
let fileObj = param.file
let fd = new FormData()
fd.append('approver_wechat', fileObj)
var siteForm = this.siteForm
fd.append('did', this.doctorId)
fd.append('first_visit_audit', siteForm.first_visit_audit)
fd.append('approver_phone', siteForm.approver_phone)
this.setApproverWechat(fd)
},
setApproverWechat(param) {
this.$http('POST', '/api/admin/set_doctor_approver', param).then(response => {
if (response.code != 0) {
this.$message.error(response.msg)
return;
}
this.$message.success(response.msg)
var data = response.data
if(this.doctorId) return;
setTimeout(() => {
location.href = location.href+'?doctor_id='+data.doctor_id
}, 800);
}).catch(error => {
console.error(error, 'error')
this.$message.error('设置失败')
})
},
submitApproverWechat() {
if(!this.doctorId) {
this.$message.error('请先设置医生基础信息')
return;
}
if(this.approverWechatFile.length == 0) {
this.setApproverWechat(this.siteForm)
return;
}
this.$refs.approverWechatUpload.submit();
},
handleApproverWechatChange(file, fileList) {
console.log(file, fileList)
this.approverWechatFile = file
this.approverWechatUrl = URL.createObjectURL(file.raw);
},
handleAvatarChange(file, fileList) {
console.log(file, fileList)
this.doctorAvatoFile = file
this.doctorAvatorUrl = URL.createObjectURL(file.raw);
},
radioChange(data) {
console.log(data, 'radio--data');
},
cancelClick(type) {
console.log(type)
}
}
}
</script>
<style lang="scss" scoped>
.info-upload-wrapper ::v-deep .el-upload-list.el-upload-list--picture-card{
display: none;
}
.siteMessage {
border-radius: 4px;
transition: all .5s;
border: 1px solid transparent;
}
.uploadImg{
width: 150px;
margin-right: 20px;
}
.special-form-item ::v-deep .el-form-item__label{
margin-bottom: 12px;
}
.special-form-item {
.el-form-item__label {
margin-bottom: 12px;
}
.custom-label {
gap: 6px;
}
}
.addStore {
margin-top: 12px;
}
.qqCode-wrap {
margin-top: 12px;
margin-bottom: 14px;
display: flex;
width: 100%;
justify-content: flex-start;
.avator-wrapper{
position: relative;
.info-upload-wrapper{
position: absolute;
display: flex;
justify-content: flex-end;
top: 50%;
margin-top: -19px;
right: 0;
height: 38px;
width: 118px;
overflow: hidden;
opacity: 0;
}
}
.labelImg {
opacity: .7;
margin-left: 8px;
}
.avatar-uploader {
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: flex-start;
}
.avatar-desc {
text-align: left;
}
}
.site-setting-wrap {
width: 100%;
}
#siteMessage2 {
margin: 12px 0;
}
.domain-wrap {
.domain-item {
margin-bottom: 10px;
}
.domain-item p:last-child {
padding-left: 23px;
color: #8A9099;
}
p {
text-align: left;
line-height: 18px;
margin-bottom: 8px;
}
.domain-box {
display: flex;
flex-direction: column;
justify-content: flex-start;
}
}
</style>

40
src/views/HomeView.vue

@ -1,12 +1,13 @@
<template>
<div class="min-width pagePadding " style="background: #F5F7FA;">
sdjkhfkdskfsdkfjlsdk
<div class="min-width pagePadding " style="background: #F5F7FA;" v-if="pageShow">
开始对家乐福觉得是浪费粮食的拉升阶段了解到拉萨简单拉伸
</div>
</template>
<script>
// const cityOptions = ['', '', '广', ''];
import store from '@/store';
// import GuipTable from '@/components/GuipTable.vue';
// import GuipTable1 from '@/components/GuipTable.vue';
// import SvgIcon from '@/components/SvgIcon.vue';
// import GuipButton from '@/components/GuipButton.vue';
// import GuipSwitch from '@/components/GuipSwitch.vue';
// import GuipInput from '@/components/GuipInput.vue';
@ -15,14 +16,17 @@ import { mapState } from 'vuex';
export default {
data() {
return {
pageShow:true
}
},
components: {
// GuipToolTip,
// SvgIcon,
// GuipInput,
// GuipButton,
// GuipSwitch,
// GuipTable,
// GuipTable1,
// CustomDropdown
},
created() {
const { authtoken } = this.$route.query;
@ -36,34 +40,12 @@ export default {
mounted() {
store.commit('SET_CUSTOMIZE', false);
store.commit('SET_SLIDER_MENU', 'menuData');
this.getInitData()
},
computed: {
...mapState(['menuData']) // VuexshowSidebar
},
methods: {
//
getInitData() {
this.$http('POST', '/api/admin/doctor_depart_list', {
name: this.doctorName
}).then(response => {
if (response.code == 0) {
// const list = Object.values(response.data).map(item => {
// return {
// ...item,
// checked:false,
// departs: item.departs ? Object.values(item.departs).flat() : []
// }
// })
// this.doctorList = list
// this.pageShow = true
}
}).catch(error => {
console.error(error, 'error')
})
},
}
methods: {}
}
</script>
<style lang="scss" scoped>

1783
src/views/HosInformation.vue

File diff suppressed because it is too large

342
src/views/weChatPayment.vue

@ -1,342 +0,0 @@
<template>
<div class="site-setting-wrap pagePadding">
<div class="siteMessage flex-common" id="siteMessage1">
<p class="littleTitle mb32">微信收款</p>
<div class="weixinpay">
<div class="beforeNotice">
<h4 class="flex"> <img src="@/assets/site/siteSemInfo_Icon.svg" alt=""> 前期准备事项</h4>
<div class="flex-between">
<p class="mt12 flex">1.申请公司微信支付<a class="guide" href="https://zhic.yuque.com/staff-chwecz/xhk8nt/ggkqm3"
target="_blank"><img src="@/assets/site/form_qua_ic.svg" alt="">指南</a> </p>
<span class=" flex">
<a href="https://pay.weixin.qq.com/" class="flex" target="_blank">
<img src="@/assets/site/form_linkActive.svg" alt="">微信商户平台</a>
</span>
</div>
<p class="mt12">2.登录微信商户平台在产品中心开通Native支付如需使用微信版开通JSAPI支付</p>
</div>
<el-form>
<div class="flex-wrap">
<div class="flex-left">
<GuipFormItem column="column" class="mb24" label="公司简称" :required="true">
<span class="desc" slot="formRight">请输入公司简称便于您区分账号所属公司</span>
<GuipInput slot="formDom" ref="GuipInput" column="column" v-model="company_short_name"
prop="company_short_name" placeholder="请输入">
</GuipInput>
</GuipFormItem>
<GuipFormItem column="column" class="mb24" label="微信支付商户号" :required="true">
<span class="desc" slot="formRight">
<a href='https://pay.weixin.qq.com/' class="guide"
target='_blank'><img src="@/assets/site/form_qua_ic.svg" alt="">指南</a>
</span>
<GuipInput slot="formDom" ref="GuipInput" column="column" v-model="mch_id" prop="mch_id"
placeholder="请输入">
</GuipInput>
</GuipFormItem>
</div>
<div class="flex-line"></div>
<div class="flex-right">
<GuipFormItem column="column" class="mb24" label="微信支付秘钥" :required="true">
<span class="desc" slot="formRight"><a href='https://pay.weixin.qq.com/' class="guide"
target='_blank'><img src="@/assets/site/form_qua_ic.svg" alt="">指南</a>
</span>
<GuipInput slot="formDom" ref="GuipInput" column="column" v-model="apiv2" prop="apiv2"
placeholder="不能设为纯数字">
</GuipInput>
</GuipFormItem>
<GuipFormItem column="column" class="mb24" label="公众号APPID" :required="true">
<span class="desc" slot="formRight"><a href='https://mp.weixin.qq.com/' class="guide"
target='_blank'><img src="@/assets/site/form_qua_ic.svg" alt="">指南</a></span>
<GuipInput slot="formDom" ref="GuipInput" column="column" v-model="appid" prop="appid"
placeholder="不能设为纯数字">
</GuipInput>
</GuipFormItem>
</div>
</div>
</el-form>
</div>
</div>
<div class="siteMessage flex-common mt12" id="siteMessage2">
<h3 class="mb12">管理证书</h3>
<div class="beforeNotice">
<span class="flex"> <img src="@/assets/site/siteSemInfo_Icon.svg" alt="" style="margin-right: 5px;">
API证书获取
<a href="https://pay.weixin.qq.com/" class="flex" target="_blank"><img style="margin-right: 5px;"
src="@/assets/site/form_linkActive.svg" alt="">微信商户平台</a>账户中心账户设置API安全
</span>
</div>
<el-form>
<div class="flex-wrap">
<div class="flex-left">
<div class="uploadwrap">
<label class="flex upload-title gap8">上传 apiclient_cert.pem 证书<img class="ml-4"
src="@/assets/require.svg" /></label>
<el-upload class="upload-demo" :on-change="handleAvatarChange" action="#" :multiple="false"
:limit="Number(1)" ref="avatorUpload" :auto-upload="false">
<GuipButton class="upload-button" slot="trigger" type="ignore"
:btnstyle="{ width: '118px' }">
<i class="bgImg"></i>选择文件
</GuipButton>
</el-upload>
<p class="uploaded" v-if="payinfo.cert_uploaded">已上传</p>
<p class="normalUpload notuploaded" v-else>未上传任何文件</p>
</div>
</div>
<div class="flex-line"></div>
<div class="flex-right">
<div class="uploadwrap">
<label class="flex upload-title gap8">上传 apiclient_key.pem 证书<img class="ml-4"
src="@/assets/require.svg" /></label>
<el-upload class="upload-demo" :on-change="handleAvatarChange1" action="#" :multiple="false"
:limit="Number(1)" ref="avatorUpload" :auto-upload="false">
<GuipButton class="upload-button" slot="trigger" type="ignore"
:btnstyle="{ width: '118px' }">
<i class="bgImg"></i>选择文件
</GuipButton>
</el-upload>
<p class="uploaded" v-if="payinfo.key_uploaded">已上传</p>
<p class="normalUpload" v-else>未上传任何文件</p>
</div>
</div>
</div>
</el-form>
</div>
<div class="save-button">
<GuipButton type="primary" ref="saveRef" :btnstyle="saveBtnStyleObj" @click="saveConfirm">保存</GuipButton>
</div>
</div>
</template>
<script>
import GuipInput from '@/components/GuipInput.vue';
import GuipButton from '@/components/GuipButton.vue';
import GuipFormItem from '@/components/GuipFormItem.vue';
export default {
//
name: 'addPay',
props: {},
components: {
GuipInput,
GuipButton,
GuipFormItem,
},
data() {
return {
//
company_short_name: '',
//
mch_id: '',
//
apiv2: '',
// APPID
appid: '',
payinfo: [],
saveBtnStyleObj: {
width: '144px',
height: '46px',
borderRadius: '4px',
background: '#006AFF',
},
}
},
created() {
//
// this.getPayment()
},
methods: {
getPayment() {
this.$http('POST', '/agentnew/ajax_get_payinfo', {
payid: this.$route.query.payid,
}).then(response => {
this.$nextTick(() => {
this.payinfo = response.data
})
}).catch(error => {
console.error(error, 'error')
})
},
handleAvatarChange(file, fileList) {
console.log(file, fileList)
let fileObj = file.raw
this.formData.set('apiclient_cert', fileObj)
},
handleAvatarChange1(file, fileList) {
console.log(file, fileList)
let fileObj = file.raw
this.formData.set('apiclient_key', fileObj)
},
saveConfirm() {
//
// this.$positionMessage({
// type: 'error',
// message: '',
// target: this.$refs['saveRef'], // DOM
// position: 'top'
// })
// let obj = {}
// obj.uid = this.serviceInfo.uid
// obj.type = this.serviceInfo.type
// obj.info = ""
// const that = this
// this.$http('POST', '/agentnew/ajax_payment_switch', obj).then(response => {
// if(response.status){
// that.$message.success('');
// that.payList = response.data.paylist
// that.$emit('saveEvent', that.payList)
// return true;
// }
// that.$message.error(response.info);
// }).catch(error => {
// console.error(error, 'error')
// })
},
}
}
</script>
<style scoped lang="scss">
.guide{
display: flex;
align-items: center;
gap: 6px;
color: #8A9099 !important;
font-size: 12px;
}
.site-setting-wrap{
height: calc(100% - 80px);
overflow-y: auto;
}
.notuploaded,.uploaded,.normalUpload{
margin-top: 8px;
font-size: 12px;
color: #606266;
}
.normalUpload{
color:#606266;
}
.notuploaded{
color: #FD3B3B;
}
.save-button {
position: fixed;
left: 0;
bottom: 0;
width: 100%;
background: #fff;
box-shadow: 0 4px 16px 0 rgba(17, 55, 143, 0.12);
display: flex;
align-items: center;
justify-content: center;
padding: 16px 0;
z-index: 9;
}
.uploadwrap {
text-align: left;
}
.upload-title {
font-size: 14px;
font-weight: normal;
line-height: normal;
letter-spacing: 0.08em;
color: #23242B;
}
.upload-button {
border-radius: 4px;
background: #F2F3F5;
box-sizing: border-box;
border: 1px solid #BABDC2;
.bgImg {
width: 20px;
height: 16px;
margin-right: 6px;
background-image: url(@/assets/site/uploadIcon.svg);
}
&:hover {
.bgImg {
background-image: url(@/assets/site/uploadIcon_light.svg);
}
}
}
.upload-demo {
margin-top: 12px;
}
.beforeNotice {
h4 {
margin: 0;
gap: 8px;
}
margin-bottom: 18px;
text-align: left;
box-sizing: border-box;
padding: 20px 14px;
border-radius: 4px;
/* middle/middle_blue_1 */
background: #F2F7FF;
/* middle/middle_blue_3 */
border: 1px solid #BFDAFF;
div {
// margin-top: 2px;
// padding-left: 23px;
p {
// color: #8A9099;
}
}
p {
color: #1E2226;
i {
font-style: normal;
}
&:last-child {
display: flex;
align-items: stretch;
b {
font-weight: normal;
color: #8A9099;
display: inline-flex;
img {
margin-left: 4px;
}
}
}
}
a {
text-decoration: none;
color: #006AFF;
margin-right: 10px;
img {
margin-left: 5px;
margin-right: 5px;
}
}
}
a {
color: #006AFF;
text-decoration: none;
}
</style>

2
vue.config.js

@ -3,7 +3,7 @@ const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
// publicPath: '/new/',
devServer: {
port:8000,
port:3000,
proxy: {
'/api': {
target: 'http://jasonyizherenxin.checkcopy.com',

Loading…
Cancel
Save