关于我们长页

master
yujialong 1 year ago
parent 23e5ae12e6
commit 4df88054f9
  1. 207
      package-lock.json
  2. 3
      package.json
  3. 80
      src/components/modules/content.vue
  4. 133
      src/components/modules/link.vue
  5. 15
      src/components/modules/module.vue
  6. 602
      src/const/modules.js
  7. 766
      src/pages/article/list/index.vue
  8. 767
      src/pages/column/list/index.vue
  9. 354
      src/pages/column/page/aboutUs.vue

207
package-lock.json generated

@ -1630,8 +1630,7 @@
"ansi-regex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
},
"ansi-styles": {
"version": "3.2.1",
@ -2484,8 +2483,7 @@
"camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
},
"camelcase-keys": {
"version": "2.1.0",
@ -2725,7 +2723,6 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
"integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
"dev": true,
"requires": {
"string-width": "^3.1.0",
"strip-ansi": "^5.2.0",
@ -2735,14 +2732,12 @@
"emoji-regex": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
"dev": true
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
},
"string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
@ -2753,7 +2748,6 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
"integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.0",
"string-width": "^3.0.0",
@ -2911,6 +2905,11 @@
}
}
},
"comutils": {
"version": "1.1.19",
"resolved": "https://registry.npmjs.org/comutils/-/comutils-1.1.19.tgz",
"integrity": "sha512-JxXB67juILiwhdLwOsYyjUqwWEhHdObI0EClOPk+JDtEuTbac59s0pxGpfCBnNNQ5JommifmcMGneW/4Cg7YWw=="
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@ -5551,8 +5550,7 @@
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
},
"get-stdin": {
"version": "4.0.1",
@ -6513,7 +6511,8 @@
"has-symbols": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
"integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
"integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
"dev": true
},
"has-unicode": {
"version": "2.0.1",
@ -8486,9 +8485,9 @@
}
},
"node-sass": {
"version": "4.14.0",
"resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.0.tgz",
"integrity": "sha512-AxqU+DFpk0lEz95sI6jO0hU0Rwyw7BXVEv6o9OItoXLyeygPeaSpiV4rwQb10JiTghHaa0gZeD21sz+OsQluaw==",
"version": "4.14.1",
"resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz",
"integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==",
"requires": {
"async-foreach": "^0.1.3",
"chalk": "^1.1.1",
@ -8504,7 +8503,7 @@
"node-gyp": "^3.8.0",
"npmlog": "^4.0.0",
"request": "^2.88.0",
"sass-graph": "^2.2.4",
"sass-graph": "2.2.5",
"stdout-stream": "^1.4.0",
"true-case-path": "^1.0.2"
},
@ -8720,6 +8719,7 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
"integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
"dev": true,
"requires": {
"define-properties": "^1.1.2",
"function-bind": "^1.1.1",
@ -9104,8 +9104,7 @@
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
"dev": true
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
},
"path-is-absolute": {
"version": "1.0.1",
@ -10684,8 +10683,7 @@
"require-main-filename": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"dev": true
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
},
"requires-port": {
"version": "1.0.0",
@ -10829,139 +10827,93 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"sass-graph": {
"version": "2.2.6",
"resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.6.tgz",
"integrity": "sha512-MKuEYXFSGuRSi8FZ3A7imN1CeVn9Gpw0/SFJKdL1ejXJneI9a5rwlEZrKejhEFAA3O6yr3eIyl/WuvASvlT36g==",
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz",
"integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==",
"requires": {
"glob": "^7.0.0",
"lodash": "^4.0.0",
"scss-tokenizer": "^0.2.3",
"yargs": "^7.0.0"
"yargs": "^13.3.2"
},
"dependencies": {
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="
"emoji-regex": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
},
"camelcase": {
"find-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
"integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg=="
},
"cliui": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
"integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"requires": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
"wrap-ansi": "^2.0.0"
"locate-path": "^3.0.0"
}
},
"get-caller-file": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
"integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w=="
},
"invert-kv": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
"integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ=="
},
"is-fullwidth-code-point": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
"locate-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"requires": {
"number-is-nan": "^1.0.0"
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
}
},
"lcid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
"integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==",
"p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"requires": {
"invert-kv": "^1.0.0"
"p-try": "^2.0.0"
}
},
"os-locale": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
"integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==",
"p-locate": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"requires": {
"lcid": "^1.0.0"
"p-limit": "^2.0.0"
}
},
"require-main-filename": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
"integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug=="
"p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
"strip-ansi": "^3.0.0"
}
},
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
"requires": {
"ansi-regex": "^2.0.0"
}
},
"which-module": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
"integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ=="
},
"wrap-ansi": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
"integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==",
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"requires": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1"
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^5.1.0"
}
},
"y18n": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
"integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ=="
},
"yargs": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz",
"integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==",
"version": "13.3.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
"integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
"requires": {
"camelcase": "^3.0.0",
"cliui": "^3.2.0",
"decamelize": "^1.1.1",
"get-caller-file": "^1.0.1",
"os-locale": "^1.4.0",
"read-pkg-up": "^1.0.1",
"cliui": "^5.0.0",
"find-up": "^3.0.0",
"get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
"require-main-filename": "^1.0.1",
"require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
"string-width": "^1.0.2",
"which-module": "^1.0.0",
"y18n": "^3.2.1",
"yargs-parser": "^5.0.1"
"string-width": "^3.0.0",
"which-module": "^2.0.0",
"y18n": "^4.0.0",
"yargs-parser": "^13.1.2"
}
},
"yargs-parser": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz",
"integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==",
"version": "13.1.2",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
"integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
"requires": {
"camelcase": "^3.0.0",
"object.assign": "^4.1.0"
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
}
}
}
@ -11862,7 +11814,6 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"requires": {
"ansi-regex": "^4.1.0"
}
@ -12811,6 +12762,14 @@
"schart.js": "^3.0.0"
}
},
"vue-seamless-scroll": {
"version": "1.1.23",
"resolved": "https://registry.npmjs.org/vue-seamless-scroll/-/vue-seamless-scroll-1.1.23.tgz",
"integrity": "sha512-HBjUub8WwsKJzbFCrwKPDrZn4e+SSbkKgwWtjKtfLwesiFGwSsVxP44/Z6d3kpXy94qIFOiflJH6l0/9pj7SGA==",
"requires": {
"comutils": "^1.1.9"
}
},
"vue-style-loader": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz",
@ -13263,8 +13222,7 @@
"which-module": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
"dev": true
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
},
"wide-align": {
"version": "1.1.5",
@ -13395,8 +13353,7 @@
"y18n": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
"integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
"dev": true
"integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
},
"yallist": {
"version": "3.1.1",

@ -28,6 +28,7 @@
"vue-quill-editor": "^3.0.6",
"vue-router": "^3.0.3",
"vue-schart": "^2.0.0",
"vue-seamless-scroll": "^1.1.23",
"vue-ueditor-wrap": "^2.5.6",
"vuedraggable": "^2.17.0",
"vuex": "^3.4.0"
@ -36,7 +37,7 @@
"@vue/cli-plugin-babel": "^3.9.0",
"@vue/cli-service": "^3.9.0",
"element-theme-chalk": "^2.13.0",
"node-sass": "^4.14.0",
"node-sass": "^4.14.1",
"sass-loader": "^8.0.0",
"vue-template-compiler": "^2.6.10"
}

@ -28,10 +28,10 @@
api-key='rnk6zw9v267xqz7pf98twt1vmrvltmd436je7a642pckltda'
v-model="data.form[item.prop]"
:init="editorConfig" />
<el-upload v-if="item.type === 'upload' && item.crop"
<el-upload v-if="item.type === 'upload' && item.width"
class="uploader"
accept=".jpg,.png,.jpeg,.gif"
:on-change="res => changeFile(res, data.form)"
:on-change="res => changeFile(res, data.form, item)"
:show-file-list="false"
:action="api.upload"
:auto-upload="false">
@ -48,10 +48,10 @@
<p>只支持.jpg,.png格式</p>
</div>
</el-upload>
<el-upload v-if="item.type === 'upload' && !item.crop"
<el-upload v-if="item.type === 'upload' && !item.width"
class="uploader"
accept=".jpg,.png,.jpeg"
:on-success="res => uploadSuccess(res, data.form)"
:on-success="res => uploadSuccess(res, data.form, item)"
:show-file-list="false"
:headers="headers"
:action="api.upload">
@ -68,6 +68,22 @@
<p>只支持.jpg,.png格式</p>
</div>
</el-upload>
<!-- 图片视频都可上传 -->
<template v-if="item.type === 'media'">
<el-upload :on-success="res => uploadSuccess(res, data.form, item)"
:before-remove="beforeRemove"
:on-remove="(file, fileList) => handleRemove(file, fileList, data.form, item.prop)"
:file-list="fileList"
:headers="headers"
:action="api.upload">
<el-button>上传资源</el-button>
</el-upload>
<i v-if="!item.required"
class="el-icon-delete del"
@click="data.form[item.prop] = ''"></i>
</template>
<template v-if="item.type === 'pic'">
<img v-if="data.form[item.prop]"
:src="data.form[item.prop]"
@ -109,6 +125,8 @@
:is-upload="isUpload"
:fixed="fixed"
:fixedNumber.sync="fixedNumber"
:autoCropWidth="autoCropWidth"
:autoCropHeight="autoCropHeight"
@upload="customUpload" />
</el-dialog>
</div>
@ -143,8 +161,12 @@ export default {
isUpload: false,
file: {}, //
curForm: {},
curItem: {},
fixed: false,
fixedNumber: [0.88, 1]
fixedNumber: [0.88, 1],
autoCropWidth: 480,
autoCropHeight: 124,
fileList: [],
};
},
watch: {
@ -159,18 +181,30 @@ export default {
methods: {
// form
handleForm () {
const { forms, type } = this.data
const { forms, form, type } = this.data
console.log("🚀 ~ file: content.vue:179 ~ handleForm ~ type:", type, form)
this.fileList = []
//
if (type === 'form' || type === 'introduce') {
forms.map(e => {
if (e.type === 'upload') {
if (e.fixedNumber) {
if (e.width) {
this.autoCropWidth = e.width
this.autoCropHeight = e.height
this.fixed = true
this.fixedNumber = e.fixedNumber
this.fixedNumber = [e.width / e.height, 1]
} else {
this.fixed = false
}
}
if (e.type === 'media' && form.fileName) {
this.fileList = [
{
name: form.fileName,
url: form.video || e.pic
}
]
}
if (e.required) {
this.rules[e.prop] = [
{
@ -204,14 +238,16 @@ export default {
token: Util.local.get(Setting.tokenKey)
},
}).then(({ data }) => {
this.$set(this.curForm, 'pic', data.url)
console.log("🚀 ~ file: content.vue:234 ~ imgUpload ~ this.curForm:", this.curForm)
this.$set(this.curForm, this.curItem.prop, data.url)
}).catch(res => { })
this.$refs.cropper.isDisabled = false
this.isUpload = false
this.cropperModel = false
},
//
changeFile (file, form) {
changeFile (file, form, item) {
console.log("🚀 ~ file: content.vue:242 ~ changeFile ~ item:", form, item)
const { size, name } = file
const ext = name.substring(name.lastIndexOf('.') + 1)
if (!Util.isImg(ext)) {
@ -224,6 +260,7 @@ export default {
}
this.file = file
this.curForm = form
this.curItem = item
this.cropperModel = true
this.$nextTick(() => {
this.$refs.cropper.updateImg({
@ -232,9 +269,28 @@ export default {
})
})
},
beforeRemove (file, fileList) {
return this.$confirm(`确定移除 ${file.name}`);
},
handleRemove (file, fileList, form, prop) {
form[prop] = ''
form.fileName = ''
},
//
uploadSuccess (res, row) {
this.$set(row, 'pic', res.url)
uploadSuccess (res, row, item) {
console.log("🚀 ~ file: content.vue:270 ~ uploadSuccess ~ item:", res, row, item)
this.$set(row, item.prop, res.url)
if (item.type === 'media') {
this.fileList = [
{
name: res.original,
url: res.url
}
]
}
this.$set(row, 'mediaType', res.original.substr(res.original.lastIndexOf('.') + 1))
this.$set(row, 'fileName', res.original)
// console.log("🚀 ~ file: content.vue:273 ~ uploadSuccess ~ row:", row)
},
//
toLink (row, i = 0) {

@ -1,9 +1,16 @@
<template>
<!-- 设置链接 -->
<div>
<el-dialog title="设置链接地址" :visible.sync="visible" width="500px" :close-on-click-modal="false" :before-close="close">
<el-form :model="data" class="model" label-width="120px">
<el-form-item prop="connectionType" label="连接类型">
<el-dialog title="设置链接地址"
:visible.sync="visible"
width="500px"
:close-on-click-modal="false"
:before-close="close">
<el-form :model="data"
class="model"
label-width="120px">
<el-form-item prop="connectionType"
label="连接类型">
<el-radio-group v-model="data.connectionType">
<!-- <el-radio :label="0"></el-radio> -->
<el-radio :label="1">站内链接</el-radio>
@ -12,73 +19,72 @@
</el-radio-group>
</el-form-item>
<template v-if="data.connectionType === 1">
<el-form-item label="站内链接">
<el-cascader
ref="column"
v-model="data.columnId"
:options="columns"
:props="columnProps"
@change="columnChange"></el-cascader>
<el-form-item label="栏目">
<el-cascader ref="column"
v-model="data.columnId"
:options="columns"
:props="columnProps"
@change="columnChange"></el-cascader>
</el-form-item>
<el-form-item label="文章">
<el-select v-model="data.articleId">
<el-option
v-for="item in articles"
:key="item.id"
:label="item.title"
:value="item.id">
<el-option v-for="item in articles"
:key="item.id"
:label="item.title"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</template>
<el-form-item v-show="data.connectionType === 2" prop="linkAddress" label="站外链接">
<el-input
placeholder="请输入站外链接"
v-model.trim="data.linkAddress"
clearable
></el-input>
<el-form-item v-show="data.connectionType === 2"
prop="linkAddress"
label="站外链接">
<el-input placeholder="请输入站外链接"
v-model.trim="data.linkAddress"
clearable></el-input>
</el-form-item>
<template v-if="data.connectionType === 3">
<el-form-item prop="site" label="站点选择">
<el-select v-model="data.site" @change="getOtherColumn">
<el-option
v-for="item in sites"
:key="item.id"
:label="item.siteName"
:value="item.id">
<el-form-item prop="site"
label="站点选择">
<el-select v-model="data.site"
@change="getOtherColumn">
<el-option v-for="item in sites"
:key="item.id"
:label="item.siteName"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="栏目">
<el-cascader
ref="otherColumn"
v-model="data.otherColumnId"
:options="otherColumns"
:props="columnProps"
@change="columnChange"></el-cascader>
<el-cascader ref="otherColumn"
v-model="data.otherColumnId"
:options="otherColumns"
:props="columnProps"
@change="columnChange"></el-cascader>
</el-form-item>
<el-form-item label="文章">
<el-select v-model="data.otherArticleId">
<el-option
v-for="item in articles"
:key="item.id"
:label="item.title"
:value="item.id">
<el-option v-for="item in articles"
:key="item.id"
:label="item.title"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</template>
<el-form-item prop="isOpen" label="新窗口打开">
<el-switch
v-model="data.isOpen"
:active-value="1"
:inactive-value="0">
<el-form-item prop="isOpen"
label="新窗口打开">
<el-switch v-model="data.isOpen"
:active-value="1"
:inactive-value="0">
</el-switch>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<span slot="footer"
class="dialog-footer">
<el-button @click="$emit('update:visible', false)">取消</el-button>
<el-button type="primary" @click="linkSubmit">确定</el-button>
<el-button type="primary"
@click="linkSubmit">确定</el-button>
</span>
</el-dialog>
</div>
@ -95,7 +101,7 @@ export default {
required: true
}
},
data() {
data () {
return {
site: this.$store.state.content.site,
sites: [],
@ -110,7 +116,7 @@ export default {
};
},
watch: {
visible(open) {
visible (open) {
//
if (open) {
this.data.connectionType !== 2 && this.getArticle()
@ -118,40 +124,40 @@ export default {
}
}
},
mounted() {
mounted () {
this.getList()
this.getSite()
},
methods: {
//
getList() {
getList () {
this.$post(this.api.listWithTree, {
siteId: this.site.id,
columnName: '',
templateId: '',
typeId : '',
typeId: '',
isSort: 1
}).then(({ data }) => {
this.columns = data
this.data.connectionType !== 2 && this.getArticle()
}).catch(err => {})
}).catch(err => { })
},
// disabled
handleId(list) {
handleId (list) {
list.forEach(e => {
if (e.id == this.id) e.disabled = true
e.children.length ? this.handleId(e.children) : delete e.children
})
},
//
columnChange() {
columnChange () {
this.data.articleId = ''
this.getArticle()
},
//
getArticle() {
getArticle () {
// /
const id = this.data.connectionType === 1 ? this.data.columnId[this.data.columnId.length - 1] : this.data.otherColumnId[this.data.otherColumnId.length - 1]
id && this.$post(this.api.queryArticle, {
@ -163,42 +169,41 @@ export default {
isDisable: 0
}).then(({ data }) => {
this.articles = data.records.filter(e => e.isRelease) //
}).catch(err => {})
}).catch(err => { })
},
//
getSite() {
getSite () {
this.$post(this.api.site, {
page: 1,
limit: 1000,
siteName: ''
}).then(({ data }) => {
this.sites = data.records
}).catch(e => {})
}).catch(e => { })
},
//
getOtherColumn() {
getOtherColumn () {
this.data.site && this.$post(this.api.listWithTree, {
siteId: this.data.site,
columnName: '',
templateId: '',
typeId : '',
typeId: '',
isSort: 1
}).then(({ data }) => {
this.otherColumns = data
}).catch(err => {})
}).catch(err => { })
},
close() {
close () {
this.$emit('update:visible', false)
},
//
linkSubmit() {
linkSubmit () {
this.$emit('linkSubmit')
}
}
};
</script>
<style lang="scss" scoped>
</style>

@ -32,15 +32,16 @@
</div>
<template v-else-if="item.type === 'upload'">
<img v-if="scope.row.pic"
:src="scope.row.pic"
<img v-if="scope.row[item.prop]"
:src="scope.row[item.prop]"
class="upload-pic">
<div class="upload-none"
v-else>
<i class="el-icon-picture-outline"></i>
</div>
</template>
<p v-else>{{ scope.row[item.prop] }}</p>
<div v-else
v-html="scope.row[item.prop]"></div>
</template>
</el-table-column>
@ -76,7 +77,7 @@
ref="form"
:model="data.form"
:rules="rules"
label-width="70px">
:label-width="labelWidth">
<el-form-item v-for="(item, i) in data.forms"
:key="i"
:prop="item.prop"
@ -305,6 +306,7 @@ export default {
},
isVideo: Util.isVideo,
dialogWidth: '700px',
labelWidth: '70px',
rules: {},
linkVisible: false,
linkForm: {},
@ -376,7 +378,7 @@ export default {
]),
// form
handleForm () {
const { type, forms, form, dialogWidth } = this.data
const { type, forms, form, dialogWidth, labelWidth } = this.data
if (type === 'form' || type === 'forms') {
forms.map(e => {
if (e.type === 'video' || e.type === 'media') {
@ -421,7 +423,8 @@ export default {
this.articleNums = nums
}
form && form.site && this.siteChange(form.site)
this.dialogWidth = dialogWidth || '700px'
if (dialogWidth) this.dialogWidth = dialogWidth
if (labelWidth) this.labelWidth = labelWidth
},
//
siteChange (siteId) {

@ -10321,4 +10321,606 @@ export default {
],
},
],
aboutUs: [
{
type: 'introduce',
forms: [
{
type: 'media',
prop: 'pic',
label: '资源',
required: true,
width: 1912,
height: 480
},
{
type: 'editor',
prop: 'des',
label: '描述'
},
{
type: 'link',
prop: 'link',
label: '链接'
},
{
type: 'upload',
prop: 'weixinPic1',
label: '公众号二维码',
width: 103,
height: 103
},
{
type: 'input',
prop: 'weixinText1',
label: '公众号文案'
},
{
type: 'upload',
prop: 'weixinPic2',
label: '小程序二维码',
width: 103,
height: 103
},
{
type: 'input',
prop: 'weixinText2',
label: '小程序文案'
},
],
form: {
pic: '',
des: ``,
link: {
linkName: '无',
connectionType: 1,
columnId: [],
articleId: '',
linkAddress : '',
site: '',
otherColumnId: [],
otherArticleId: '',
isOpen: 1
},
pic: 'https://huorantech.com/images/about/qrcode.jpg',
title: `扫一扫,关注公众号`,
weixinPic1: '',
weixinText1: ``,
weixinPic2: '',
weixinText2: ``,
},
list: [],
dialogWidth: '1200px',
labelWidth: '110px'
},
{
type: 'form',
forms: [
{
type: 'upload',
prop: 'pic',
label: '图片',
required: true,
width: 367,
height: 524
},
{
type: 'input',
prop: 'title',
label: '标题',
required: true
},
{
type: 'input',
prop: 'subTitle1',
label: '小标题'
},
{
type: 'input',
prop: 'subTitle2',
label: '英文标题'
},
{
type: 'link',
prop: 'link',
label: '链接'
},
{
type: 'editor',
prop: 'des',
label: '描述'
}
],
form: {
pic: 'https://huorantech.com/images/about/about1.png',
title: '或然科技有限公司',
subTitle1: '职站商城,让您一站式采购无忧',
subTitle2: 'HUORAN TECH',
link: {
linkName: '无',
connectionType: 1,
columnId: [],
articleId: '',
linkAddress : '',
site: '',
otherColumnId: [],
otherArticleId: '',
isOpen: 1
},
des: `深圳或然科技,教育数字化产业的推动者,为教育IT创业者赋能的首选合作伙伴。我们是一家拥有丰富IT互联网背景的科技企业,致力于为教育软件销售代理人提供专业而全面的产品供应链服务。`
}
},
{
type: 'form',
forms: [
{
type: 'input',
prop: 'title',
label: '标题',
required: true
},
{
type: 'input',
prop: 'des',
label: '描述'
}
],
form: {
title: '随时、随地、贴心为您提供全方位服务',
des: 'At anytime,anywhere,intimate to provide you with a full range of services',
}
},
{
type: 'form',
forms: [
{
type: 'input',
prop: 'title',
label: '标题',
required: true
},
{
type: 'input',
prop: 'des',
label: '描述'
}
],
form: {
title: '企业文化',
des: 'CORPORATE CULTURE',
}
},
{
type: 'introduce',
forms: [
{
type: 'upload',
prop: 'pic',
label: '图片',
width: 70,
height: 70
},
{
type: 'input',
prop: 'title',
label: '标题',
},
{
type: 'link',
prop: 'link',
label: '链接'
},
{
type: 'textarea',
prop: 'des',
label: '描述'
}
],
form: {
pic: '',
title: '',
link: {
linkName: '无',
connectionType: 1,
columnId: [],
articleId: '',
linkAddress : '',
site: '',
otherColumnId: [],
otherArticleId: '',
isOpen: 1
},
des: ''
},
list: [
{
pic: 'https://huorantech.com/images/about/about4.png',
title: '使命',
des: '成就百万教育产业数字化的创业者',
link: {
linkName: '无',
connectionType: 1,
columnId: [],
articleId: '',
linkAddress : '',
site: '',
otherColumnId: [],
otherArticleId: '',
isOpen: 1
},
isEnable: 1
},
{
pic: 'https://huorantech.com/images/about/about5.png',
title: '愿景',
des: '成为教育产业数字化的共创平台',
link: {
linkName: '无',
connectionType: 1,
columnId: [],
articleId: '',
linkAddress : '',
site: '',
otherColumnId: [],
otherArticleId: '',
isOpen: 1
},
isEnable: 1
},
{
pic: 'https://huorantech.com/images/about/about6.png',
title: '核心价值观',
des: '公正、诚信、创新、实干',
link: {
linkName: '无',
connectionType: 1,
columnId: [],
articleId: '',
linkAddress : '',
site: '',
otherColumnId: [],
otherArticleId: '',
isOpen: 1
},
isEnable: 1
},
],
dialogWidth: '900px'
},
{
type: 'form',
forms: [
{
type: 'input',
prop: 'title',
label: '标题',
required: true
},
{
type: 'input',
prop: 'subTitle',
label: '小标题'
},
{
type: 'input',
prop: 'des',
label: '描述'
}
],
form: {
title: '为什么选择我们',
subTitle: 'WHY CHOOSE US',
des: '专业、全面、高效',
}
},
{
type: 'introduce',
forms: [
{
type: 'upload',
prop: 'pic',
label: '图片',
width: 70,
height: 70
},
{
type: 'input',
prop: 'title',
label: '标题',
},
{
type: 'link',
prop: 'link',
label: '链接'
},
{
type: 'textarea',
prop: 'des',
label: '描述'
}
],
form: {
pic: '',
title: '',
link: {
linkName: '无',
connectionType: 1,
columnId: [],
articleId: '',
linkAddress : '',
site: '',
otherColumnId: [],
otherArticleId: '',
isOpen: 1
},
des: ''
},
list: [
{
pic: 'https://huorantech.com/images/index/index3.png',
title: '产品优势',
des: '整合好不同的教育信息化解决方案所需的软件和硬件产品,通过教育产业互联网平台和反向供应链,提供利润合适,交付便捷,质量有保障的体系化产品。',
link: {
linkName: '无',
connectionType: 1,
columnId: [],
articleId: '',
linkAddress : '',
site: '',
otherColumnId: [],
otherArticleId: '',
isOpen: 1
},
isEnable: 1
},
{
pic: 'https://huorantech.com/images/index/index4.png',
title: '服务优势',
des: '专业的培训和服务团队,提供教育信息化产业的创业辅导和专业培训。帮助打造一支专业化的商务支持、客户成功和售后运营服务的支撑型团队。',
link: {
linkName: '无',
connectionType: 1,
columnId: [],
articleId: '',
linkAddress : '',
site: '',
otherColumnId: [],
otherArticleId: '',
isOpen: 1
},
isEnable: 1
},
{
pic: 'https://huorantech.com/images/index/index5.png',
title: '生态优势',
des: '我们拥有强大可靠的渠道、产品的生态联盟,可共享、调用生态内的多方资源,背靠联盟携手共创新奇迹。',
link: {
linkName: '无',
connectionType: 1,
columnId: [],
articleId: '',
linkAddress : '',
site: '',
otherColumnId: [],
otherArticleId: '',
isOpen: 1
},
isEnable: 1
},
],
dialogWidth: '900px'
},
{
type: 'form',
forms: [
{
type: 'input',
prop: 'title',
label: '标题',
required: true
},
{
type: 'input',
prop: 'subTitle',
label: '小标题'
},
{
type: 'input',
prop: 'des',
label: '描述'
}
],
form: {
title: '合作院校',
subTitle: 'PARTNERSHIP',
des: '助力100+所院校客户实现数字化升级',
}
},
{
type: 'form',
forms: [
{
type: 'upload',
prop: 'pic',
label: '图片',
width: 453,
height: 308
},
{
type: 'input',
prop: 'title',
label: '标题',
required: true
},
{
type: 'textarea',
prop: 'subTitle',
label: '小标题'
},
{
type: 'link',
prop: 'link',
label: '链接'
},
{
type: 'editor',
prop: 'des',
label: '描述'
}
],
form: {
pic: 'https://huorantech.com/images/index/index0.png',
title: '他们说',
subTitle: '—— 河海大学老师',
link: {
linkName: '无',
connectionType: 1,
columnId: [],
articleId: '',
linkAddress : '',
site: '',
otherColumnId: [],
otherArticleId: '',
isOpen: 1
},
des: `平台功能丰富,操作简单,自动判分功能,能更高效的批改作业给学生更好的指导。`
}
},
{
type: 'introduce',
forms: [
{
type: 'upload',
prop: 'pic',
label: '图片',
required: true,
width: 253,
height: 124
},
],
form: {
pic: '',
},
list: [
{
pic: 'https://huorantech.com/images/index/school1.png',
},
{
pic: 'https://huorantech.com/images/index/school2.png',
},
{
pic: 'https://huorantech.com/images/index/school3.png',
},
{
pic: 'https://huorantech.com/images/index/school4.png',
},
{
pic: 'https://huorantech.com/images/index/school5.png',
},
]
},
{
type: 'form',
forms: [
{
type: 'input',
prop: 'title',
label: '标题',
},
{
type: 'input',
prop: 'des',
label: '描述'
}
],
form: {
title: '联系我们',
des: `CONTACT US`
}
},
{
type: 'form',
forms: [
{
type: 'upload',
prop: 'pic',
label: 'logo',
width: 185,
height: 44
},
{
type: 'input',
prop: 'site',
label: '公司官网',
},
{
type: 'input',
prop: 'address',
label: '地址'
},
{
type: 'input',
prop: 'phone',
label: '合作咨询',
},
{
type: 'input',
prop: 'mail',
label: '客户建议'
},
],
form: {
pic: 'https://huorantech.com/images/about/logo.png',
site: '公司官网:www.huorantech.com',
address: `地址:广东省深圳市南山区粤海街道海天二路盈峰中心2101`,
phone: `合作咨询:郭经理 17671782660`,
mail: `客户建议:service@huorantech.cn`,
},
labelWidth: '100px'
},
{
type: 'form',
forms: [
{
type: 'upload',
prop: 'pic',
label: '公众号二维码',
width: 103,
height: 103
},
{
type: 'input',
prop: 'title',
label: '公众号文案'
},
],
form: {
pic: 'https://huorantech.com/images/about/qrcode.jpg',
title: `扫一扫,关注公众号`,
},
labelWidth: '100px'
},
{
type: 'form',
forms: [
{
type: 'upload',
prop: 'pic',
label: '小程序二维码',
width: 103,
height: 103
},
{
type: 'input',
prop: 'title',
label: '小程序文案'
},
],
form: {
pic: 'https://huorantech.com/images/about/mini-program-sm.jpg',
title: `扫一扫,登录职站商城`,
},
labelWidth: '100px'
},
],
}

@ -3,91 +3,189 @@
<div style="width: 218px;border-right: 1px solid #EBEDF0">
<p class="page-name mb">全部栏目</p>
<div style="height: calc(100% - 50px);overflow: auto">
<el-tree ref="column" :data="columns" highlight-current :expand-on-click-node="false" default-expand-all :props="defaultProps" node-key="id" @node-click="initData">
<span class="custom-tree-node" slot-scope="{ node, data }">
<span class="org-name" :title="node.label">{{ node.label }}</span>
<el-tree ref="column"
:data="columns"
highlight-current
:expand-on-click-node="false"
default-expand-all
:props="defaultProps"
node-key="id"
@node-click="initData">
<span class="custom-tree-node"
slot-scope="{ node, data }">
<span class="org-name"
:title="node.label">{{ node.label }}</span>
</span>
</el-tree>
</div>
</div>
<div class="p-l-20" style="width: calc(100% - 219px);">
<div class="p-l-20"
style="width: calc(100% - 219px);">
<div class="tool">
<div class="search-wrap">
<el-select v-model="field" @change="initData">
<el-option
v-for="(item, i) in keywords"
:key="i"
:label="item.name"
:value="item.id">
<el-select v-model="field"
@change="initData">
<el-option v-for="(item, i) in keywords"
:key="i"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
<el-input class="keyword" :placeholder="'请输入' + keywords.find(e => e.id === field).name" v-model.trim="keyword" clearable></el-input>
<el-input class="keyword"
:placeholder="'请输入' + keywords.find(e => e.id === field).name"
v-model.trim="keyword"
clearable></el-input>
</div>
<div class="actions">
<el-dropdown class="setting" trigger="click" :hide-on-click="false">
<img class="icon" src="@/assets/images/setting.png" alt="">
<el-dropdown class="setting"
trigger="click"
:hide-on-click="false">
<img class="icon"
src="@/assets/images/setting.png"
alt="">
<el-dropdown-menu>
<el-dropdown-item>
<el-button @click="resetColumns" type="text">列重置</el-button>
<el-button @click="resetColumns"
type="text">列重置</el-button>
</el-dropdown-item>
<el-dropdown-item v-for="(column, i) in settings" :key="i" :divided="i === 0">
<el-dropdown-item v-for="(column, i) in settings"
:key="i"
:divided="i === 0">
<el-checkbox v-model="column.show">{{ column.name }}</el-checkbox>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:文章管理:新增'" type="primary" @click="add" >新增</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:文章管理:删除'" @click="batchDel">删除</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:文章管理:新增'"
type="primary"
@click="add">新增</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:文章管理:删除'"
@click="batchDel">删除</el-button>
</div>
</div>
<el-table :data="list" class="table" ref="table" header-align="center" @selection-change="handleSelectionChange" row-key="id" @sort-change="sortChange">
<el-table-column v-if="settings[0].show" type="selection" width="55" align="center" :reserve-selection="true"></el-table-column>
<el-table-column type="index" width="60" label="序号" align="center">
<el-table :data="list"
class="table"
ref="table"
header-align="center"
@selection-change="handleSelectionChange"
row-key="id"
@sort-change="sortChange">
<el-table-column v-if="settings[0].show"
type="selection"
width="55"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column type="index"
width="60"
label="序号"
align="center">
<template scope="scope">
<span>{{(page - 1) * pageSize + scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column v-if="settings[1].show" show-overflow-tooltip prop="title" label="标题" align="center" min-width="150"></el-table-column>
<el-table-column v-if="settings[2].show" prop="columnName" label="栏目" align="center" min-width="120"></el-table-column>
<el-table-column v-if="settings[3].show" prop="classificationName" label="所属分类" align="center" min-width="120"></el-table-column>
<el-table-column v-if="settings[4].show" prop="typeId" label="栏目类型" align="center" min-width="100">
<el-table-column v-if="settings[1].show"
show-overflow-tooltip
prop="title"
label="标题"
align="center"
min-width="150"></el-table-column>
<el-table-column v-if="settings[2].show"
prop="columnName"
label="栏目"
align="center"
min-width="120"></el-table-column>
<el-table-column v-if="settings[3].show"
prop="classificationName"
label="所属分类"
align="center"
min-width="120"></el-table-column>
<el-table-column v-if="settings[4].show"
prop="typeId"
label="栏目类型"
align="center"
min-width="100">
<template slot-scope="scope">
{{ types.find(e => e.id === scope.row.typeId).name }}
</template>
</el-table-column>
<el-table-column v-if="settings[5].show" prop="founderName" label="录入人" align="center" min-width="80"></el-table-column>
<el-table-column v-if="settings[6].show" prop="editorName" label="修改人" align="center" min-width="80"></el-table-column>
<el-table-column v-if="settings[7].show" prop="updateTime" label="修改日期" align="center" min-width="150" sortable="custom"></el-table-column>
<el-table-column v-if="settings[8].show" prop="releaseTime" label="发布日期" align="center" min-width="100" sortable="custom"></el-table-column>
<el-table-column v-if="settings[9].show" prop="totalBrowsing" label="总浏览" align="center" min-width="70"></el-table-column>
<el-table-column v-if="settings[10].show" prop="workNumber" label="状态" align="center" min-width="80">
<el-table-column v-if="settings[5].show"
prop="founderName"
label="录入人"
align="center"
min-width="80"></el-table-column>
<el-table-column v-if="settings[6].show"
prop="editorName"
label="修改人"
align="center"
min-width="80"></el-table-column>
<el-table-column v-if="settings[7].show"
prop="updateTime"
label="修改日期"
align="center"
min-width="150"
sortable="custom"></el-table-column>
<el-table-column v-if="settings[8].show"
prop="releaseTime"
label="发布日期"
align="center"
min-width="100"
sortable="custom"></el-table-column>
<el-table-column v-if="settings[9].show"
prop="totalBrowsing"
label="总浏览"
align="center"
min-width="70"></el-table-column>
<el-table-column v-if="settings[10].show"
prop="workNumber"
label="状态"
align="center"
min-width="80">
<template slot-scope="scope">
{{ scope.row.isRelease ? '已发布' : '草稿' }}
</template>
</el-table-column>
<el-table-column v-auth="'/site/list:' + siteName + ':内容管理:文章管理:置顶'" prop="sequence" label="置顶" align="center" min-width="80" sortable="custom">
<el-table-column v-auth="'/site/list:' + siteName + ':内容管理:文章管理:置顶'"
prop="sequence"
label="置顶"
align="center"
min-width="80"
sortable="custom">
<template slot-scope="scope">
<i v-if="scope.row.isRelease" :class="['squ-icon', scope.row.isTop ? 'el-icon-check' : 'el-icon-close']" @click="sticky(scope.row)"></i>
<i v-if="scope.row.isRelease"
:class="['squ-icon', scope.row.isTop ? 'el-icon-check' : 'el-icon-close']"
@click="sticky(scope.row)"></i>
</template>
</el-table-column>
<el-table-column v-if="settings[11].show" label="操作" align="center" width="190">
<el-table-column v-if="settings[11].show"
label="操作"
align="center"
width="190">
<template slot-scope="scope">
<el-button v-auth="'/site/list:' + siteName + ':内容管理:文章管理:预览'" type="text" @click="preview(scope.row)">预览</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:文章管理:编辑'" type="text" @click="edit(scope.row)">编辑</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:文章管理:删除'" type="text" @click="handleDelete(scope.row)">删除</el-button>
<el-switch
v-if="scope.row.isRelease"
v-auth="'/site/list:' + siteName + ':内容管理:文章管理:禁用'"
class="m-l-10"
v-model="scope.row.isDisable"
:active-value="0"
:inactive-value="1"
@change="switchOff($event, scope.row, scope.$index)">
<el-button v-auth="'/site/list:' + siteName + ':内容管理:文章管理:预览'"
type="text"
@click="preview(scope.row)">预览</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:文章管理:编辑'"
type="text"
@click="edit(scope.row)">编辑</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:文章管理:删除'"
type="text"
@click="handleDelete(scope.row)">删除</el-button>
<el-switch v-if="scope.row.isRelease"
v-auth="'/site/list:' + siteName + ':内容管理:文章管理:禁用'"
class="m-l-10"
v-model="scope.row.isDisable"
:active-value="0"
:inactive-value="1"
@change="switchOff($event, scope.row, scope.$index)">
</el-switch>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination background @current-change="currentChange" :current-page="page" layout="total, prev, pager, next" :total="total"></el-pagination>
<el-pagination background
@current-change="currentChange"
:current-page="page"
layout="total, prev, pager, next"
:total="total"></el-pagination>
</div>
</div>
</div>
@ -99,325 +197,325 @@ import util from '@/libs/util'
import { mapMutations } from 'vuex'
import ColumnConst from '@/const/column'
export default {
data() {
return {
last: this.$route.query.last, //
types: ColumnConst.types,
siteName: this.$store.state.content.site.siteName,
columns: [],
defaultProps: {
value: 'id',
label: 'columnName'
data () {
return {
last: this.$route.query.last, //
types: ColumnConst.types,
siteName: this.$store.state.content.site.siteName,
columns: [],
defaultProps: {
value: 'id',
label: 'columnName'
},
field: 'title',
keywords: [
{
id: 'title',
name: '标题'
},
field: 'title',
keywords: [
{
id: 'title',
name: '标题'
},
{
id: 'founder',
name: '录入人'
},
{
id: 'column',
name: '栏目'
},
{
id: 'editor',
name: '修改人'
}
],
keyword: '',
list: [],
page: 1,
pageSize: 10,
total: 0,
modifiedTimeSort: '',
publicationTimeSort: '',
topSort: '',
multipleSelection: [],
originSettings: [],
settings: [
{
name: '选择框',
show: true
},
{
name: '标题',
show: true
},
{
name: '栏目',
show: true
},
{
name: '所属分类',
show: false
},
{
name: '栏目类型',
show: true
},
{
name: '录入人',
show: true
},
{
name: '修改人',
show: true
},
{
name: '修改日期',
show: true
},
{
name: '发布日期',
show: true
},
{
name: '总浏览',
show: true
},
{
name: '状态',
show: true
},
{
name: '操作',
show: true
}
],
originList: []
};
},
watch: {
keyword: function(val) {
clearTimeout(this.searchTimer)
this.searchTimer = setTimeout(() => {
this.initData()
}, 500)
}
},
mounted() {
this.$store.commit('user/setCrumbs', [
{
name: '站点管理',
route: '/site'
id: 'founder',
name: '录入人'
},
{
name: '内容管理'
id: 'column',
name: '栏目'
},
{
name: '文章管理'
id: 'editor',
name: '修改人'
}
])
this.originSettings = JSON.parse(JSON.stringify(this.settings))
this.getColumn()
},
methods: {
...mapMutations('content', [
'setColumn'
]),
//
getColumn() {
this.$post(this.api.listWithTree, {
siteId: this.$store.state.content.site.id,
columnName: '',
templateId: '',
typeId : '',
isSort: 1
}).then(({ data }) => {
this.columns = data
this.$nextTick(() => {
this.$refs.column.setCurrentKey(this.$route.query.columnId || data[0].id)
this.getData()
})
}).catch(e => {})
},
//
getData() {
const id = this.$refs.column.getCurrentKey()
this.$router.push(`/article?columnId=${id}`).catch(e => {})
const { keyword } = this
const data = {
siteId: this.$store.state.content.site.id,
columnIds: [id],
pageNum: this.page,
pageSize: this.pageSize,
topSort: this.topSort,
title: this.field === 'title' ? keyword : '',
founder: this.field === 'founder' ? keyword : '',
column: this.field === 'column' ? keyword : '',
editor: this.field === 'editor' ? keyword : ''
],
keyword: '',
list: [],
page: 1,
pageSize: 10,
total: 0,
modifiedTimeSort: '',
publicationTimeSort: '',
topSort: '',
multipleSelection: [],
originSettings: [],
settings: [
{
name: '选择框',
show: true
},
{
name: '标题',
show: true
},
{
name: '栏目',
show: true
},
{
name: '所属分类',
show: false
},
{
name: '栏目类型',
show: true
},
{
name: '录入人',
show: true
},
{
name: '修改人',
show: true
},
{
name: '修改日期',
show: true
},
{
name: '发布日期',
show: true
},
{
name: '总浏览',
show: true
},
{
name: '状态',
show: true
},
{
name: '操作',
show: true
}
if (this.modifiedTimeSort !== '') data.modifiedTimeSort = this.modifiedTimeSort
if (this.publicationTimeSort !== '') data.publicationTimeSort = this.publicationTimeSort
this.$post(this.api.queryArticle, data).then(({ data }) => {
data.records.map(e => {
e.editing = false
e.releaseTime = e.releaseTime.split(' ')[0]
})
this.originList = JSON.parse(JSON.stringify(data.records))
this.list = data.records
const total = +data.total
this.total = total
if (this.last) {
let page = parseInt(total / 10)
total % 10 && page++
this.page = page
this.last = ''
this.getData()
}
}).catch(err => {})
},
//
resetColumns() {
this.settings = JSON.parse(JSON.stringify(this.originSettings))
},
currentChange(val) {
this.page = val
this.getData()
},
handleSelectionChange(val) {
this.multipleSelection = val
},
initData() {
this.$refs.table.clearSelection()
this.page = 1
this.getData()
],
originList: []
};
},
watch: {
keyword: function (val) {
clearTimeout(this.searchTimer)
this.searchTimer = setTimeout(() => {
this.initData()
}, 500)
}
},
mounted () {
this.$store.commit('user/setCrumbs', [
{
name: '站点管理',
route: '/site'
},
//
submitSequence(row) {
const { sequence } = row
if (!sequence) return util.errorMsg('请输入排序')
if (isNaN(sequence)) return util.errorMsg('请输入数字')
this.$post(`${this.api.modifiedSort}?articleId=${row.id}&sequenceNumber=${sequence > this.total ? this.total : sequence}`).then(res => {
this.initData()
}).catch(res => {})
{
name: '内容管理'
},
//
editSequence(row) {
this.list.forEach(e => {
{
name: '文章管理'
}
])
this.originSettings = JSON.parse(JSON.stringify(this.settings))
this.getColumn()
},
methods: {
...mapMutations('content', [
'setColumn'
]),
//
getColumn () {
this.$post(this.api.listWithTree, {
siteId: this.$store.state.content.site.id,
columnName: '',
templateId: '',
typeId: '',
isSort: 1
}).then(({ data }) => {
this.columns = data
this.$nextTick(() => {
this.$refs.column.setCurrentKey(this.$route.query.columnId || data[0].id)
this.getData()
})
}).catch(e => { })
},
//
getData () {
const id = this.$refs.column.getCurrentKey()
this.$router.push(`/article?columnId=${id}`).catch(e => { })
const { keyword } = this
const data = {
siteId: this.$store.state.content.site.id,
columnIds: [id],
pageNum: this.page,
pageSize: this.pageSize,
topSort: this.topSort,
title: this.field === 'title' ? keyword : '',
founder: this.field === 'founder' ? keyword : '',
column: this.field === 'column' ? keyword : '',
editor: this.field === 'editor' ? keyword : ''
}
if (this.modifiedTimeSort !== '') data.modifiedTimeSort = this.modifiedTimeSort
if (this.publicationTimeSort !== '') data.publicationTimeSort = this.publicationTimeSort
this.$post(this.api.queryArticle, data).then(({ data }) => {
data.records.map(e => {
e.editing = false
e.releaseTime = e.releaseTime.split(' ')[0]
})
row.editing = true
},
//
batchDel() {
const list = this.multipleSelection
if (list.length) {
this.$confirm('确定要删除吗?', '提示', {
type: 'warning'
}).then(() => {
const data = []
list.map(e => {
data.push('ids=' + e.id)
})
this.$post(`${this.api.deleteArticle}?${data.join('&')}`).then(res => {
this.$refs.table.clearSelection()
util.successMsg("删除成功")
this.getData()
}).catch(res => {})
}).catch(() => {})
} else {
util.errorMsg('请先选择数据 !')
this.originList = JSON.parse(JSON.stringify(data.records))
this.list = data.records
const total = +data.total
this.total = total
if (this.last) {
let page = parseInt(total / 10)
total % 10 && page++
this.page = page
this.last = ''
this.getData()
}
},
//
handleDelete(row) {
}).catch(err => { })
},
//
resetColumns () {
this.settings = JSON.parse(JSON.stringify(this.originSettings))
},
currentChange (val) {
this.page = val
this.getData()
},
handleSelectionChange (val) {
this.multipleSelection = val
},
initData () {
this.$refs.table.clearSelection()
this.page = 1
this.getData()
},
//
submitSequence (row) {
const { sequence } = row
if (!sequence) return util.errorMsg('请输入排序')
if (isNaN(sequence)) return util.errorMsg('请输入数字')
this.$post(`${this.api.modifiedSort}?articleId=${row.id}&sequenceNumber=${sequence > this.total ? this.total : sequence}`).then(res => {
this.initData()
}).catch(res => { })
},
//
editSequence (row) {
this.list.forEach(e => {
e.editing = false
})
row.editing = true
},
//
batchDel () {
const list = this.multipleSelection
if (list.length) {
this.$confirm('确定要删除吗?', '提示', {
type: 'warning'
}).then(() => {
this.$post(`${this.api.deleteArticle}?ids=${row.id}`).then(res => {
util.successMsg('删除成功')
const data = []
list.map(e => {
data.push('ids=' + e.id)
})
this.$post(`${this.api.deleteArticle}?${data.join('&')}`).then(res => {
this.$refs.table.clearSelection()
util.successMsg("删除成功")
this.getData()
}).catch(res => {})
}).catch(() => {})
},
//
switchOff(val, row) {
this.$post(`${this.api.articleEnableOrDisable}?id=${row.id}&isDisable=${val}`).then(res => {}).catch((res) => {})
},
//
add() {
if (!this.columns.length) return util.errorMsg('请添加栏目')
this.setColumn(this.$refs.column.getCurrentNode())
this.$router.push(`add?columnId=${this.$refs.column.getCurrentKey()}&columnName=${this.$refs.column.getCurrentNode().columnName}`)
},
//
sortChange(column) {
const { order } = column
// 1
// 0 1
if (column.prop === 'updateTime') {
this.modifiedTimeSort = order ? order === 'ascending' ? 1 : 0 : ''
if (order) {
this.publicationTimeSort = ''
this.topSort = ''
}
}).catch(res => { })
}).catch(() => { })
} else {
util.errorMsg('请先选择数据 !')
}
},
//
handleDelete (row) {
this.$confirm('确定要删除吗?', '提示', {
type: 'warning'
}).then(() => {
this.$post(`${this.api.deleteArticle}?ids=${row.id}`).then(res => {
util.successMsg('删除成功')
this.getData()
}).catch(res => { })
}).catch(() => { })
},
//
switchOff (val, row) {
this.$post(`${this.api.articleEnableOrDisable}?id=${row.id}&isDisable=${val}`).then(res => { }).catch((res) => { })
},
//
add () {
if (!this.columns.length) return util.errorMsg('请添加栏目')
this.setColumn(this.$refs.column.getCurrentNode())
this.$router.push(`add?columnId=${this.$refs.column.getCurrentKey()}&columnName=${this.$refs.column.getCurrentNode().columnName}`)
},
//
sortChange (column) {
const { order } = column
// 1
// 0 1
if (column.prop === 'updateTime') {
this.modifiedTimeSort = order ? order === 'ascending' ? 1 : 0 : ''
if (order) {
this.publicationTimeSort = ''
this.topSort = ''
}
if (column.prop === 'releaseTime') {
this.publicationTimeSort = order ? order === 'ascending' ? 1 : 0 : ''
if (order) {
this.modifiedTimeSort = ''
this.topSort = ''
}
}
if (column.prop === 'releaseTime') {
this.publicationTimeSort = order ? order === 'ascending' ? 1 : 0 : ''
if (order) {
this.modifiedTimeSort = ''
this.topSort = ''
}
// 0 1
if (column.prop === 'sequence') {
this.topSort = order ? order === 'ascending' ? 0 : 1 : ''
if (order) {
this.publicationTimeSort = ''
this.modifiedTimeSort = ''
}
}
// 0 1
if (column.prop === 'sequence') {
this.topSort = order ? order === 'ascending' ? 0 : 1 : ''
if (order) {
this.publicationTimeSort = ''
this.modifiedTimeSort = ''
}
this.getData()
},
//
sticky(row) {
this.$post(`${this.api.articleTopOperation}?articleId=${row.id}&isTop=${row.isTop ? 0 : 1}`).then(res => {
this.initData()
}).catch(res => {})
},
//
preview(row) {
window.open((Setting.isDev ? `http://${location.hostname}:8095` : this.$store.state.content.site.domainName) + `#/article?articleId=${row.id}&siteId=${this.$refs.column.getCurrentNode().siteId}&id=${row.columnId}`)
},
//
edit(row) {
this.$router.push(`add?id=${row.id}&columnId=${this.$refs.column.getCurrentKey()}&columnName=${this.$refs.column.getCurrentNode().columnName}`)
},
}
}
this.getData()
},
//
sticky (row) {
this.$post(`${this.api.articleTopOperation}?articleId=${row.id}&isTop=${row.isTop ? 0 : 1}`).then(res => {
this.initData()
}).catch(res => { })
},
//
preview (row) {
window.open((Setting.isDev ? `http://${location.hostname}:8097` : this.$store.state.content.site.domainName) + `#/article?articleId=${row.id}&siteId=${this.$refs.column.getCurrentNode().siteId}&id=${row.columnId}`)
},
//
edit (row) {
this.$router.push(`add?id=${row.id}&columnId=${this.$refs.column.getCurrentKey()}&columnName=${this.$refs.column.getCurrentNode().columnName}`)
},
}
};
</script>
<style lang="scss" scoped>
.custom-tree-node {
display: inline-flex;
align-items: center;
display: inline-flex;
align-items: center;
}
.name {
display: inline-block;
max-width: 160px;
margin-right: 20px;
overflow: hidden;
text-overflow: ellipsis;
display: inline-block;
max-width: 160px;
margin-right: 20px;
overflow: hidden;
text-overflow: ellipsis;
}
.squ-icon {
font-size: 16px;
font-weight: 600;
cursor: pointer;
color: #f70000;
&.el-icon-check {
color: #05991e;
}
font-size: 16px;
font-weight: 600;
cursor: pointer;
color: #f70000;
&.el-icon-check {
color: #05991e;
}
}
/deep/.squ-input {
width: auto;
.el-input__inner {
width: 60px;
padding: 0 10px;
}
width: auto;
.el-input__inner {
width: 60px;
padding: 0 10px;
}
}
</style>

@ -2,114 +2,185 @@
<div class="page">
<div class="tool">
<div class="search-wrap">
<el-input placeholder="请输入栏目名称" v-model.trim="keyword" clearable></el-input>
<el-input placeholder="请输入栏目名称"
v-model.trim="keyword"
clearable></el-input>
</div>
<div class="actions">
<el-dropdown class="setting" trigger="click" :hide-on-click="false">
<img class="icon" src="@/assets/images/setting.png" alt="">
<el-dropdown class="setting"
trigger="click"
:hide-on-click="false">
<img class="icon"
src="@/assets/images/setting.png"
alt="">
<el-dropdown-menu>
<el-dropdown-item>
<el-button @click="resetColumns" type="text">列重置</el-button>
<el-button @click="resetColumns"
type="text">列重置</el-button>
</el-dropdown-item>
<el-dropdown-item v-for="(column, i) in settings" :key="i" :divided="i === 0">
<el-dropdown-item v-for="(column, i) in settings"
:key="i"
:divided="i === 0">
<el-checkbox v-model="column.show">{{ column.name }}</el-checkbox>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:新增'" type="primary" @click="add" >新增</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:删除'" @click="batchDel">删除</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:更改排序'" class="lg" @click="sort">更改排序</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:导航样式设置'" class="lg" @click="styleSet">导航样式设置</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:新增'"
type="primary"
@click="add">新增</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:删除'"
@click="batchDel">删除</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:更改排序'"
class="lg"
@click="sort">更改排序</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:导航样式设置'"
class="lg"
@click="styleSet">导航样式设置</el-button>
</div>
</div>
<el-table v-loading="listLoading" ref="table" :data="list" default-expand-all class="table" header-align="center" @selection-change="handleSelectionChange" @select-all="selectAll" row-key="id">
<el-table-column v-if="settings[0].show" type="selection" width="50" align="center" :reserve-selection="true"></el-table-column>
<el-table-column prop="columnName" show-overflow-tooltip label="名称" min-width="140"></el-table-column>
<el-table-column v-if="settings[1].show" prop="typeId" label="栏目类型" min-width="100">
<el-table v-loading="listLoading"
ref="table"
:data="list"
default-expand-all
class="table"
header-align="center"
@selection-change="handleSelectionChange"
@select-all="selectAll"
row-key="id">
<el-table-column v-if="settings[0].show"
type="selection"
width="50"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column prop="columnName"
show-overflow-tooltip
label="名称"
min-width="140"></el-table-column>
<el-table-column v-if="settings[1].show"
prop="typeId"
label="栏目类型"
min-width="100">
<template slot-scope="scope">
{{ types.find(e => e.id == scope.row.typeId) && types.find(e => e.id == scope.row.typeId).name }}
</template>
</el-table-column>
<el-table-column v-if="settings[2].show" prop="templateName" label="栏目模板" min-width="100">
<el-table-column v-if="settings[2].show"
prop="templateName"
label="栏目模板"
min-width="100">
<template slot-scope="scope">
{{ scope.row.typeId === 2 ? '--' : scope.row.templateName }}
</template>
</el-table-column>
<el-table-column v-if="settings[3].show" prop="listStyle" label="列表/长页样式" min-width="100">
<el-table-column v-if="settings[3].show"
prop="listStyle"
label="列表/长页样式"
min-width="100">
<template slot-scope="scope">
{{ scope.row.typeId === 2 ? '--' : scope.row.listStyle }}
</template>
</el-table-column>
<el-table-column v-if="settings[4].show" prop="detailStyle" label="详情样式" min-width="100">
<el-table-column v-if="settings[4].show"
prop="detailStyle"
label="详情样式"
min-width="100">
<template slot-scope="scope">
{{ (scope.row.typeId === 1 || scope.row.typeId === 4) ? scope.row.detailStyle : '--' }}
</template>
</el-table-column>
<el-table-column v-if="settings[5].show" prop="menuVisible" label="导航菜单" min-width="100">
<el-table-column v-if="settings[5].show"
prop="menuVisible"
label="导航菜单"
min-width="100">
<template slot-scope="scope">
<el-switch
v-model="scope.row.menuVisible"
:active-value="0"
:inactive-value="1"
@change="switchOff($event, scope.row, scope.$index)">
<el-switch v-model="scope.row.menuVisible"
:active-value="0"
:inactive-value="1"
@change="switchOff($event, scope.row, scope.$index)">
</el-switch>
</template>
</el-table-column>
<el-table-column v-if="settings[6].show" prop="id" label="ID" min-width="80"></el-table-column>
<el-table-column v-if="settings[7].show" label="操作" width="270">
<el-table-column v-if="settings[6].show"
prop="id"
label="ID"
min-width="80"></el-table-column>
<el-table-column v-if="settings[7].show"
label="操作"
width="270">
<template slot-scope="scope">
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:新增下级'" type="text" @click="edit(scope.row, 'add')">新增下级</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:编辑'" type="text" @click="edit(scope.row, 'edit')">编辑</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:删除'" type="text" @click="del(scope.row)">删除</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:预览'" v-if="scope.row.typeId != 2" type="text" @click="preview(scope.row)">预览</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:页面管理'" v-if="scope.row.typeId == 3" class="page-set" type="primary" size="mini" @click="page(scope.row)">页面设置</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:新增下级'"
type="text"
@click="edit(scope.row, 'add')">新增下级</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:编辑'"
type="text"
@click="edit(scope.row, 'edit')">编辑</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:删除'"
type="text"
@click="del(scope.row)">删除</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:预览'"
v-if="scope.row.typeId != 2"
type="text"
@click="preview(scope.row)">预览</el-button>
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:页面管理'"
v-if="scope.row.typeId == 3"
class="page-set"
type="primary"
size="mini"
@click="page(scope.row)">页面设置</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog title="编辑栏目排序" :visible.sync="sortVisible" width="750px" :close-on-click-modal="false">
<el-dialog title="编辑栏目排序"
:visible.sync="sortVisible"
width="750px"
:close-on-click-modal="false">
<div class="sort-wrap">
<ul class="thead">
<li style="width: 395px;padding-left: 30px">栏目</li>
<li style="width: 205px">栏目类型</li>
<li>前台可见</li>
</ul>
<el-tree
class="sort"
:data="sortColumns"
node-key="id"
default-expand-all
draggable>
<ul class="sort-line" slot-scope="{ node, data }">
<el-tree class="sort"
:data="sortColumns"
node-key="id"
default-expand-all
draggable>
<ul class="sort-line"
slot-scope="{ node, data }">
<li>{{ data.columnName }}</li>
<li>{{ types.find(e => e.id == data.typeId) && types.find(e => e.id == data.typeId).name }}</li>
<li>
<el-switch
v-model="data.menuVisible"
:active-value="0"
:inactive-value="1"
@change="switchOff($event, data)">
<el-switch v-model="data.menuVisible"
:active-value="0"
:inactive-value="1"
@change="switchOff($event, data)">
</el-switch>
</li>
</ul>
</el-tree>
</div>
<span slot="footer" class="dialog-footer">
<span slot="footer"
class="dialog-footer">
<el-button @click="sortVisible = false"> </el-button>
<el-button type="primary" @click="sortSubmit"> </el-button>
<el-button type="primary"
@click="sortSubmit"> </el-button>
</span>
</el-dialog>
<el-dialog title="导航样式设置" :visible.sync="styleVisible" width="850px" :close-on-click-modal="false">
<el-form class="input-form" label-width="100px">
<el-dialog title="导航样式设置"
:visible.sync="styleVisible"
width="850px"
:close-on-click-modal="false">
<el-form class="input-form"
label-width="100px">
<el-form-item label="导航样式">
<el-select v-model="form.navigationStyle">
<el-option
v-for="item in styleTypes"
:key="item.id"
:label="item.name"
:value="item.id">
<el-option v-for="item in styleTypes"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
@ -117,9 +188,11 @@
<ul class="styles">
<li>
<div class="review">
<img src="@/assets/images/style1.png" alt="">
<img src="@/assets/images/style1.png"
alt="">
</div>
<el-radio v-model="form.styleTemplate" :label="1">竖行导航</el-radio>
<el-radio v-model="form.styleTemplate"
:label="1">竖行导航</el-radio>
</li>
<!-- <li>
<div class="review">
@ -130,9 +203,11 @@
</ul>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<span slot="footer"
class="dialog-footer">
<el-button @click="styleVisible = false"> </el-button>
<el-button type="primary" @click="styleSubmit"> </el-button>
<el-button type="primary"
@click="styleSubmit"> </el-button>
</span>
</el-dialog>
</div>
@ -143,327 +218,327 @@ import Setting from '@/setting'
import ColumnConst from '@/const/column'
import util from '@/libs/util'
export default {
data() {
return {
siteId: this.$store.state.content.site.id,
siteName: this.$store.state.content.site.siteName,
types: ColumnConst.types,
templates: [],
listStyle: [],
pageStyle: [],
detailStyle: [],
keyword: '',
searchTimer: null,
list: [],
multipleSelection: [],
listLoading: false,
styleVisible: false,
styleTypes: [
{
id: 1,
name: '目录树结构'
}
],
form: {
id: '',
navigationStyle: 1,
styleTemplate: 1,
siteId: this.$store.state.content.site.id
},
originSettings: [],
settings: [
{
name: '选择框',
show: true
},
{
name: '栏目类型',
show: true
},
{
name: '栏目模板',
show: true
},
{
name: '列表/长页样式',
show: true
},
{
name: '详情样式',
show: true
},
{
name: '导航菜单',
show: true
},
{
name: 'ID',
show: true
},
{
name: '操作',
show: true
}
],
sortVisible: false,
sortColumns: [],
sortLevel: 1,
};
},
watch: {
keyword: function(val) {
clearTimeout(this.searchTimer)
this.searchTimer = setTimeout(() => {
this.initData()
}, 500)
}
},
mounted() {
this.$store.commit('user/setCrumbs', [
data () {
return {
siteId: this.$store.state.content.site.id,
siteName: this.$store.state.content.site.siteName,
types: ColumnConst.types,
templates: [],
listStyle: [],
pageStyle: [],
detailStyle: [],
keyword: '',
searchTimer: null,
list: [],
multipleSelection: [],
listLoading: false,
styleVisible: false,
styleTypes: [
{
id: 1,
name: '目录树结构'
}
],
form: {
id: '',
navigationStyle: 1,
styleTemplate: 1,
siteId: this.$store.state.content.site.id
},
originSettings: [],
settings: [
{
name: '选择框',
show: true
},
{
name: '栏目类型',
show: true
},
{
name: '栏目模板',
show: true
},
{
name: '站点管理',
route: '/site'
name: '列表/长页样式',
show: true
},
{
name: '内容管理'
name: '详情样式',
show: true
},
{
name: '栏目管理'
name: '导航菜单',
show: true
},
{
name: 'ID',
show: true
},
{
name: '操作',
show: true
}
])
this.originSettings = JSON.parse(JSON.stringify(this.settings))
this.getData()
},
methods: {
getData() {
this.$post(this.api.listWithTree, {
siteId: this.siteId,
columnName: this.keyword,
templateId: '',
typeId : '',
isSort: 1
}).then(({ data }) => {
this.list = data
this.listLoading = false
}).catch(err => {
this.listLoading = false
})
},
// id
getStyle() {
this.$post(`${this.api.theTemplateIdGetsTheStyle}?templateId=${this.form.templateId}`).then(({ data }) => {
this.listStyle = data.listingTemplateTypes
this.detailStyle = data.detailsTypeOfTheTemplate
}).catch(err => {})
},
//
initData() {
this.$refs.table.clearSelection()
this.page = 1
this.getData()
},
//
resetColumns() {
this.settings = JSON.parse(JSON.stringify(this.originSettings))
},
add() {
this.$router.push('add')
],
sortVisible: false,
sortColumns: [],
sortLevel: 1,
};
},
watch: {
keyword: function (val) {
clearTimeout(this.searchTimer)
this.searchTimer = setTimeout(() => {
this.initData()
}, 500)
}
},
mounted () {
this.$store.commit('user/setCrumbs', [
{
name: '站点管理',
route: '/site'
},
edit(row, type) {
this.$router.push(`add?id=${row.id}&level=${row.level + 1}&type=${type}`)
{
name: '内容管理'
},
del(row) {
this.$confirm("删除栏目将会同时把栏目下的文章一并删除,是否确认删除栏目?", "提示", {
type: "warning"
{
name: '栏目管理'
}
])
this.originSettings = JSON.parse(JSON.stringify(this.settings))
this.getData()
},
methods: {
getData () {
this.$post(this.api.listWithTree, {
siteId: this.siteId,
columnName: this.keyword,
templateId: '',
typeId: '',
isSort: 1
}).then(({ data }) => {
this.list = data
this.listLoading = false
}).catch(err => {
this.listLoading = false
})
},
// id
getStyle () {
this.$post(`${this.api.theTemplateIdGetsTheStyle}?templateId=${this.form.templateId}`).then(({ data }) => {
this.listStyle = data.listingTemplateTypes
this.detailStyle = data.detailsTypeOfTheTemplate
}).catch(err => { })
},
//
initData () {
this.$refs.table.clearSelection()
this.page = 1
this.getData()
},
//
resetColumns () {
this.settings = JSON.parse(JSON.stringify(this.originSettings))
},
add () {
this.$router.push('add')
},
edit (row, type) {
this.$router.push(`add?id=${row.id}&level=${row.level + 1}&type=${type}`)
},
del (row) {
this.$confirm("删除栏目将会同时把栏目下的文章一并删除,是否确认删除栏目?", "提示", {
type: "warning"
}).then(() => {
this.$post(`${this.api.deleteColumn}?ids=${row.id}`).then(res => {
util.successMsg("删除成功")
this.getData()
}).catch(res => { })
}).catch(() => { })
},
//
switchOff (val, row) {
this.$post(this.api.updateColumn, row).then(res => { }).catch((res) => { })
},
//
preview (row) {
// /column
window.open((Setting.isDev ? `http://${location.hostname}:8097` : this.$store.state.content.site.domainName) + `#/${row.typeId === 3 ? row.path : 'column'}?id=${row.id}&siteId=${row.siteId}`)
},
//
page (row) {
this.$router.push(`${row.path}?id=${row.id}&path=${row.path}&siteId=${row.siteId}`)
},
//
batchDel () {
const list = this.multipleSelection
if (list.length) {
this.$confirm('删除栏目将会同时把栏目下的文章一并删除,是否确认删除栏目?', '提示', {
type: 'warning'
}).then(() => {
this.$post(`${this.api.deleteColumn}?ids=${row.id}`).then(res => {
const data = []
list.map(e => {
data.push('ids=' + e.id)
})
this.$post(`${this.api.deleteColumn}?${data.join('&')}`).then(res => {
this.$refs.table.clearSelection()
util.successMsg("删除成功")
this.getData()
}).catch(res => {})
}).catch(() => {})
},
//
switchOff(val, row) {
this.$post(this.api.updateColumn, row).then(res => {}).catch((res) => {})
},
//
preview(row) {
// /column
window.open((Setting.isDev ? `http://${location.hostname}:8095` : this.$store.state.content.site.domainName) + `#/${row.typeId === 3 ? row.path : 'column'}?id=${row.id}&siteId=${row.siteId}`)
},
//
page(row) {
this.$router.push(`${row.path}?id=${row.id}&path=${row.path}&siteId=${row.siteId}`)
},
//
batchDel() {
const list = this.multipleSelection
if (list.length) {
this.$confirm('删除栏目将会同时把栏目下的文章一并删除,是否确认删除栏目?', '提示', {
type: 'warning'
}).then(() => {
const data = []
list.map(e => {
data.push('ids=' + e.id)
})
this.$post(`${this.api.deleteColumn}?${data.join('&')}`).then(res => {
this.$refs.table.clearSelection()
util.successMsg("删除成功")
this.getData()
}).catch(res => {})
}).catch(() => {})
} else {
util.errorMsg('请先选择数据 !')
}
},
handleSelectionChange(val) {
this.multipleSelection = val
},
//
selectAll() {
this.checkedKeys = !this.checkedKeys
this.select(this.list, this.checkedKeys)
},
select(data, flag) {
data.map(row => {
this.$refs.table.toggleRowSelection(row, flag)
if (row.children != undefined) this.select(row.children, this.checkedKeys)
})
},
handleCurrentChange(val) {
this.page = val
this.$router.push(`list?page=${val}`)
this.getData()
},
//
sort() {
this.$post(this.api.deleteUselessData).then(res => {}).catch(err => {})
}).catch(res => { })
}).catch(() => { })
} else {
util.errorMsg('请先选择数据 !')
}
},
handleSelectionChange (val) {
this.multipleSelection = val
},
//
selectAll () {
this.checkedKeys = !this.checkedKeys
this.select(this.list, this.checkedKeys)
},
select (data, flag) {
data.map(row => {
this.$refs.table.toggleRowSelection(row, flag)
if (row.children != undefined) this.select(row.children, this.checkedKeys)
})
},
handleCurrentChange (val) {
this.page = val
this.$router.push(`list?page=${val}`)
this.getData()
},
//
sort () {
this.$post(this.api.deleteUselessData).then(res => { }).catch(err => { })
this.$post(this.api.listWithTree, {
siteId: this.siteId,
columnName: '',
templateId: '',
typeId : '',
isSort: 1
}).then(({ data }) => {
this.sortColumns = data
}).catch(err => {})
this.sortVisible = true
},
//
sortList(list, result, parent = {}) {
list.map((e, i) => {
if (!parent.id) this.sortLevel = 1
result.push({
id: e.id,
fatherId: parent.id || 0,
level: this.sortLevel,
sort: i + 1,
})
if (e.children.length) {
++this.sortLevel
this.sortList(e.children, result, e)
}
this.$post(this.api.listWithTree, {
siteId: this.siteId,
columnName: '',
templateId: '',
typeId: '',
isSort: 1
}).then(({ data }) => {
this.sortColumns = data
}).catch(err => { })
this.sortVisible = true
},
//
sortList (list, result, parent = {}) {
list.map((e, i) => {
if (!parent.id) this.sortLevel = 1
result.push({
id: e.id,
fatherId: parent.id || 0,
level: this.sortLevel,
sort: i + 1,
})
},
//
sortSubmit() {
const result = []
this.sortList(this.sortColumns, result)
this.$post(this.api.sortByColumn, result).then(({ data }) => {
util.successMsg('修改成功')
this.sortVisible = false
this.getData()
}).catch(err => {})
},
//
styleSet() {
this.styleVisible = true
this.$post(`${this.api.searchAllBySite}?siteId=${this.siteId}`).then(({ data }) => {
// id
if (data.length) {
this.form = data[0]
} else {
this.$post(this.api.saveStyle, this.form).then(res => {
this.$post(`${this.api.searchAllBySite}?siteId=${this.siteId}`).then(({ data }) => {
this.form = data[0]
}).catch(res => {})
}).catch(res => {})
}
}).catch(res => {})
},
//
styleSubmit() {
this.$post(this.api.updateStyle, this.form).then(res => {
util.successMsg('修改成功')
this.styleVisible = false
}).catch(res => {})
}
if (e.children.length) {
++this.sortLevel
this.sortList(e.children, result, e)
}
})
},
//
sortSubmit () {
const result = []
this.sortList(this.sortColumns, result)
this.$post(this.api.sortByColumn, result).then(({ data }) => {
util.successMsg('修改成功')
this.sortVisible = false
this.getData()
}).catch(err => { })
},
//
styleSet () {
this.styleVisible = true
this.$post(`${this.api.searchAllBySite}?siteId=${this.siteId}`).then(({ data }) => {
// id
if (data.length) {
this.form = data[0]
} else {
this.$post(this.api.saveStyle, this.form).then(res => {
this.$post(`${this.api.searchAllBySite}?siteId=${this.siteId}`).then(({ data }) => {
this.form = data[0]
}).catch(res => { })
}).catch(res => { })
}
}).catch(res => { })
},
//
styleSubmit () {
this.$post(this.api.updateStyle, this.form).then(res => {
util.successMsg('修改成功')
this.styleVisible = false
}).catch(res => { })
}
}
};
</script>
<style lang="scss" scoped>
.sort-wrap {
max-height: 400px;
overflow: auto;
max-height: 400px;
overflow: auto;
}
.thead {
display: flex;
line-height: 44px;
background-color: #F7F7F7;
li {
padding: 0 10px;
font-size: 12px;
font-weight: 500;
font-family: PingFangSC-Medium, PingFang SC;
color: #323232;
}
display: flex;
line-height: 44px;
background-color: #f7f7f7;
li {
padding: 0 10px;
font-size: 12px;
font-weight: 500;
font-family: PingFangSC-Medium, PingFang SC;
color: #323232;
}
}
/deep/.sort {
.el-tree-node__content {
height: auto;
border-bottom: 1px solid #EBEDF0;
}
// .el-tree-node__expand-icon {
// display: none;
// }
.el-tree-node__content {
height: auto;
border-bottom: 1px solid #ebedf0;
}
// .el-tree-node__expand-icon {
// display: none;
// }
}
.sort-line {
display: flex;
width: 100%;
li {
padding: 12px 0;
&:first-child {
width: 230px;
}
&:nth-child(2) {
position: absolute;
left: 400px;
}
&:last-child {
position: absolute;
right: 50px;
display: flex;
width: 100%;
li {
padding: 12px 0;
&:first-child {
width: 230px;
}
&:nth-child(2) {
position: absolute;
left: 400px;
}
&:last-child {
position: absolute;
right: 50px;
}
}
}
}
.styles {
display: inline-flex;
li {
margin-right: 20px;
text-align: center;
&:hover .review {
border-color: #2962FF;
display: inline-flex;
li {
margin-right: 20px;
text-align: center;
&:hover .review {
border-color: #2962ff;
}
}
.review {
padding: 18px;
margin-bottom: 10px;
border: 1px solid #dcdee0;
border-radius: 2px;
}
}
.review {
padding: 18px;
margin-bottom: 10px;
border: 1px solid #DCDEE0;
border-radius: 2px;
}
}
.page-set {
padding: 6px;
padding: 6px;
}
</style>

@ -1,7 +1,7 @@
<template>
<div class="wrap index">
<div class="actions">
<p class="page-name">页面设置/关于IASF-发展历程</p>
<p class="page-name">页面设置/关于我们</p>
<div>
<el-button type="primary"
@click="preview">预览</el-button>
@ -14,15 +14,61 @@
<div class="modules">
<div class="relative">
<div class="banner">
<el-carousel v-if="modules[0].list.length && modules[0].list.filter(e => e.isEnable).length"
class="carousel"
:interval="6000"
height="480px"
:arrow="(modules[0].list.filter(e => e.isEnable).length > 1) ? 'hover' : 'never'"
:indicator-position="modules[0].list.filter(e => e.isEnable).length > 1 ? '' : 'none'">
<template v-for="(item, i) in modules[0].list">
<el-carousel-item v-if="item.pic && item.isEnable"
:key="i">
<div v-if="isImg(item.mediaType)"
class="pic"
:style="{backgroundImage: 'url(' + item.pic + ')'}"></div>
<video v-else
class="pic"
width="100%"
height="100%"
autoplay
muted
loop>
<source :src="item.pic"
type="video/mp4">
您的浏览器不支持 video 标签
</video>
<div class="text-wrap">
<div class="text"
v-html="item.des"></div>
<div v-if="!GTA"
class="qrcodes">
<div class="qrcode">
<img width="103"
:src="item.weixinPic1"
alt="">
<p class="text">{{ item.weixinText1 }}</p>
</div>
<div class="qrcode m-l-30">
<img width="103"
:src="item.weixinPic2"
alt="">
<p class="text">{{ item.weixinText2 }}</p>
</div>
</div>
</div>
</el-carousel-item>
</template>
</el-carousel>
<div v-else
class="banner">
<img class="texts"
src="http://139.159.254.212/images/about/banner-text.png"
src="https://huorantech.com/images/about/banner-text.png"
alt="">
<div v-if="!GTA"
class="qrcodes">
<div class="qrcodes">
<div class="qrcode">
<img width="103"
src="http://139.159.254.212/images/about/qrcode.jpg"
src="https://huorantech.com/images/about/qrcode.jpg"
alt="">
<p class="text">扫一扫关注公众号</p>
</div>
@ -34,57 +80,60 @@
</div>
</div>
</div>
<div class="cover"
@click="toSet(0)">点击更换banner与链接</div>
</div>
<div class="intro">
<div class="inner">
<div class="pics">
<div class="pics c-wrap">
<div class="text">
<div class="title-wrap">
<p class="title">或然科技有限公司</p>
<p class="brief">职站商城让您一站式采购无忧</p>
<p class="en">HUORAN TECH</p>
<p class="title">{{ modules[1].form.title }}</p>
<p class="brief">{{ modules[1].form.subTitle1 }}</p>
<p class="en">{{ modules[1].form.subTitle2 }}</p>
</div>
<p class="desc wow fadeInLeft"
data-wow-delay="0.7s">深圳或然科技教育数字化产业的推动者为教育IT创业者赋能的首选合作伙伴我们是一家拥有丰富IT互联网背景的科技企业致力于为教育软件销售代理人提供专业而全面的产品供应链服务</p>
<div class="desc wow fadeInLeft"
v-html="modules[1].form.des"></div>
</div>
<img class="bg"
src="http://139.159.254.212/images/about/about1.png"
:src="modules[1].form.pic"
alt="">
<div class="cover"
style="height: 360px;"
@click="toSet(1)">点击更改图片标题概述与链接</div>
</div>
</div>
</div>
<div class="service-intro">
<div class="inner">
<h6>随时随地贴心为您提供全方位服务</h6>
<p class="text">At anytime,anywhere,intimate to provide you with a full range of services</p>
<h6>{{ modules[2].form.title }}</h6>
<p class="text">{{ modules[2].form.des }}</p>
<div class="cover"
@click="toSet(2)">点击更换标题与描述</div>
</div>
</div>
<div class="culture">
<div class="inner">
<h6 class="i-title wow fadeInDown">企业文化</h6>
<p class="en">CORPORATE CULTURE</p>
<ul class="list">
<li class="wow fadeInDown"
data-wow-delay="0.5s">
<img src="http://139.159.254.212/images/about/about4.png"
alt="">
<h6>使命</h6>
<p class="text">成就百万教育产业数字化的创业者</p>
</li>
<li class="wow fadeInRight"
data-wow-delay="0.8s">
<img src="http://139.159.254.212/images/about/about5.png"
alt="">
<h6>愿景</h6>
<p class="text">成为教育产业数字化的共创平台</p>
</li>
<li class="wow fadeInUp"
data-wow-delay="1.1s">
<img src="http://139.159.254.212/images/about/about6.png"
alt="">
<h6>核心价值观</h6>
<p class="text">公正诚信创新实干</p>
</li>
<div class="c-wrap"
style="height: 150px">
<h6 class="i-title wow fadeInDown">{{ modules[3].form.title }}</h6>
<p class="en">{{ modules[3].form.des }}</p>
<div class="cover"
@click="toSet(3)">点击更换标题与描述</div>
</div>
<ul class="list c-wrap">
<template v-for="(item, i) in modules[4].list">
<li v-if="item.isEnable"
:key="i">
<img :src="item.pic"
alt="">
<h6>{{ item.title }}</h6>
<div class="text"
v-html="item.des"></div>
</li>
</template>
<div class="cover"
@click="toSet(4)">点击更改图片标题概述与链接</div>
</ul>
</div>
</div>
@ -93,130 +142,151 @@
<div class="adv"
id="part2">
<div class="inner">
<h6 class="i-title wow fadeInDown">为什么选择我们</h6>
<p class="en">WHY CHOOSE US</p>
<p class="title-des wow fadeInDown">专业全面高效</p>
<div class="c-wrap"
style="height: 150px">
<h6 class="i-title wow fadeInDown">{{ modules[5].form.title }}</h6>
<p class="en">{{ modules[5].form.subTitle }}</p>
<p class="title-des wow fadeInDown">{{ modules[5].form.des }}</p>
<div class="cover"
@click="toSet(5)">点击更换标题与描述</div>
</div>
<ul class="list">
<li class="wow fadeInDown"
data-wow-delay="0.5s">
<img src="http://139.159.254.212/images/index/index3.png"
alt="">
<h6>产品优势</h6>
<p class="text">整合好不同的教育信息化解决方案所需的软件和硬件产品通过教育产业互联网平台和反向供应链提供利润合适交付便捷质量有保障的体系化产品</p>
</li>
<li class="wow fadeInRight"
data-wow-delay="0.8s">
<img src="http://139.159.254.212/images/index/index4.png"
alt="">
<h6>服务优势</h6>
<p class="text">专业的培训和服务团队提供教育信息化产业的创业辅导和专业培训帮助打造一支专业化的商务支持客户成功和售后运营服务的支撑型团队</p>
</li>
<li class="wow fadeInUp"
data-wow-delay="1.1s">
<img src="http://139.159.254.212/images/index/index5.png"
alt="">
<h6>生态优势</h6>
<p class="text">我们拥有强大可靠的渠道产品的生态联盟可共享调用生态内的多方资源背靠联盟携手共创新奇迹</p>
</li>
<ul class="list c-wrap">
<template v-for="(item, i) in modules[6].list">
<li v-if="item.isEnable"
:key="i">
<img :src="item.pic"
alt="">
<h6>{{ item.title }}</h6>
<div class="text"
v-html="item.des"></div>
</li>
</template>
<div class="cover"
@click="toSet(6)">点击更改图片标题概述与链接</div>
</ul>
</div>
</div>
<!-- 合作客户 -->
<div class="client">
<div class="inner">
<h6 class="i-title wow fadeInDown">合作院校</h6>
<p class="en">PARTNERSHIP</p>
<p class="title-des wow fadeInDown">助力100+所院校客户实现数字化升级</p>
<div class="client-pic">
<div class="c-wrap"
style="height: 150px">
<h6 class="i-title wow fadeInDown">{{ modules[7].form.title }}</h6>
<p class="en">{{ modules[7].form.subTitle }}</p>
<p class="title-des wow fadeInDown">{{ modules[7].form.des }}</p>
<div class="cover"
@click="toSet(7)">点击更换标题与描述</div>
</div>
<div class="client-pic c-wrap">
<img class="bg"
src="http://139.159.254.212/images/index/index0.png"
:src="modules[8].form.pic"
alt="">
<div class="text">
<div class="c-title1">
<img src="http://139.159.254.212/images/index/comma1.png"
<img src="https://huorantech.com/images/index/comma1.png"
alt="">
他们说
{{ modules[8].form.title }}
</div>
<div class="text">平台功能丰富操作简单自动判分功能能更高效的批改作业给学生更好的指导</div>
<div class="text"
v-html="modules[8].form.des"></div>
<div class="c-title2">
河海大学老师
<img src="http://139.159.254.212/images/index/comma2.png"
{{ modules[8].form.subTitle }}
<img src="https://huorantech.com/images/index/comma2.png"
alt="">
</div>
<div class="cover"
@click="toSet(8)">点击更改图片标题概述与链接</div>
</div>
</div>
<!-- <scroll class="clients"
:data="clients"
:class-option="{limitMoveNum: 2, direction: 2}">
<ul class="client-list"
ref="client">
<li v-for="i in clients"
:key="i">
<img :src="require('http://139.159.254.212/images/index/school' + i + '.png')"
alt="">
</li>
</ul>
</scroll> -->
<div class="c-wrap">
<scroll class="clients"
:data="modules[9].list"
:class-option="{limitMoveNum: 2, direction: 2}">
<ul class="client-list"
ref="client">
<li v-for="item in modules[9].list"
:key="item">
<img :src="item.pic"
alt="">
</li>
</ul>
</scroll>
<div class="cover"
@click="toSet(9)">点击更改图片</div>
</div>
</div>
</div>
<div class="contact">
<div class="inner">
<div class="title">
<h6>联系我们</h6>
<p class="text">CONTACT US</p>
<div class="title c-wrap">
<h6>{{ modules[10].form.title }}</h6>
<p class="text">{{ modules[10].form.des }}</p>
<div class="cover"
@click="toSet(10)">点击更改标题与描述</div>
</div>
<div class="region">
<img class="dot"
src="http://139.159.254.212/images/about/dot.png"
src="https://huorantech.com/images/about/dot.png"
alt="">
<p class="name">深圳</p>
</div>
<div class="info">
<img class="logo"
src="http://139.159.254.212/images/about/logo.png"
:src="modules[11].form.pic"
alt="">
<div class="texts">
<div class="texts c-wrap">
<div class="item">
<div class="line">
<img class="icon"
src="http://139.159.254.212/images/about/site.png"
src="https://huorantech.com/images/about/site.png"
alt="">
公司官网www.huorantech.com
{{ modules[11].form.site }}
</div>
<div class="line">
<img class="icon"
src="http://139.159.254.212/images/about/address.png"
src="https://huorantech.com/images/about/address.png"
alt="">
地址广东省深圳市南山区粤海街道海天二路盈峰中心2101
{{ modules[11].form.address }}
</div>
</div>
<div class="item">
<div class="line">
<img class="icon"
src="http://139.159.254.212/images/about/phone.png"
src="https://huorantech.com/images/about/phone.png"
alt="">
合作咨询郭经理 17671782660
{{ modules[11].form.phone }}
</div>
<div class="line">
<img class="icon"
src="http://139.159.254.212/images/about/mail.png"
src="https://huorantech.com/images/about/mail.png"
alt="">
客户建议service@huorantech.cn
{{ modules[11].form.mail }}
</div>
</div>
<div class="qrcode">
<div class="cover"
style="width: 800px"
@click="toSet(11)">点击更改信息</div>
<div class="cover"
style="width: 800px"
@click="toSet(11)">点击更改信息</div>
<div class="qrcode c-wrap">
<img width="103"
src="http://139.159.254.212/images/about/qrcode.jpg"
:src=" modules[12].form.pic"
alt="">
<p class="text">扫一扫关注公众号</p>
<p class="text">{{ modules[12].form.title }}</p>
<div class="cover"
@click="toSet(12)">点击更改信息</div>
</div>
<div class="qrcode m-l-30">
<div class="qrcode c-wrap m-l-30">
<img width="103"
src="@/assets/images/mini-program-sm.jpg"
:src=" modules[13].form.pic"
alt="">
<p class="text">扫一扫登录职站商城</p>
<p class="text">{{ modules[13].form.title }}</p>
<div class="cover"
@click="toSet(13)">点击更改信息</div>
</div>
</div>
</div>
@ -235,13 +305,19 @@
<script>
import mixins from '@/mixins/page'
import Modules from '@/const/modules'
import scroll from 'vue-seamless-scroll'
import Util from '@/libs/util'
export default {
mixins: [mixins],
data () {
return {
modules: Modules.application
isImg: Util.isImg,
modules: Modules.aboutUs
}
},
components: {
scroll
},
mounted () {
this.$store.commit('user/setCrumbs', [
{
@ -275,8 +351,8 @@ export default {
.banner {
position: relative;
height: 480px;
background: url(http://139.159.254.212/images/about/banner1.png) 0 0 / auto no-repeat,
url(http://139.159.254.212/images/about/banner2.png) (90% 37px) / auto no-repeat;
background: url(https://huorantech.com/images/about/banner1.png) 0 0 / auto no-repeat,
url(https://huorantech.com/images/about/banner2.png) (90% 37px) / auto no-repeat;
background-color: #0f5bed;
.texts {
position: absolute;
@ -290,6 +366,28 @@ export default {
display: flex;
}
}
.carousel {
.pic {
height: 100%;
background-position: center center;
background-size: 100% 100%;
background-repeat: no-repeat;
}
/deep/.el-carousel__container {
height: 100%;
}
.text-wrap {
position: absolute;
top: 50%;
left: 165px;
color: #fff;
transform: translateY(-50%);
}
.qrcodes {
display: flex;
margin-top: 10px;
}
}
.qrcode {
text-align: center;
@ -379,7 +477,7 @@ export default {
height: 153px;
margin-top: -240px;
color: #fff;
background: url(http://139.159.254.212/images/about/about2.png) 0 0 / cover no-repeat;
background: url(https://huorantech.com/images/about/about2.png) 0 0 / cover no-repeat;
.inner {
padding: 0;
}
@ -393,7 +491,7 @@ export default {
}
.culture {
position: relative;
background: #fff url(http://139.159.254.212/images/about/about3.png) 0 0/100% 100% no-repeat;
background: #fff url(https://huorantech.com/images/about/about3.png) 0 0/100% 100% no-repeat;
.inner {
padding-bottom: 112px;
}
@ -519,7 +617,7 @@ export default {
.contact {
position: relative;
padding: 0 0 106px 0;
background: url(http://139.159.254.212/images/about/map.png) 0 0 / cover no-repeat;
background: url(https://huorantech.com/images/about/map.png) 0 0 / cover no-repeat;
.inner {
padding: 0;
}
@ -575,8 +673,8 @@ export default {
.about {
padding: 130px 0 200px;
background: url(http://139.159.254.212/images/index/about2.png) (bottom right) / auto no-repeat,
url(http://139.159.254.212/images/index/about1.png) 0 0 / cover no-repeat;
background: url(https://huorantech.com/images/index/about2.png) (bottom right) / auto no-repeat,
url(https://huorantech.com/images/index/about1.png) 0 0 / cover no-repeat;
.inner {
padding: 0;
}
@ -617,7 +715,7 @@ export default {
}
.adv {
position: relative;
background: #fff url(http://139.159.254.212/images/index/index7.png) 0 0/100% 100% no-repeat;
background: #fff url(https://huorantech.com/images/index/index7.png) 0 0/100% 100% no-repeat;
.list {
display: flex;
li {
@ -661,7 +759,7 @@ export default {
}
.service {
position: relative;
background: #0653ff url(http://139.159.254.212/images/index/service4.png) 0 0/100% 100% no-repeat;
background: #0653ff url(https://huorantech.com/images/index/service4.png) 0 0/100% 100% no-repeat;
.i-title {
color: #fff;
}
@ -751,8 +849,8 @@ export default {
}
}
.product {
background: url(http://139.159.254.212/images/index/pro-bg1.png) (right 828px) / auto no-repeat,
url(http://139.159.254.212/images/index/pro-bg8.png) (left bottom) / auto no-repeat;
background: url(https://huorantech.com/images/index/pro-bg1.png) (right 828px) / auto no-repeat,
url(https://huorantech.com/images/index/pro-bg8.png) (left bottom) / auto no-repeat;
background-color: #fff;
.list {
display: flex;
@ -807,10 +905,10 @@ export default {
top: 157px;
width: 21px;
height: 21px;
background: url(http://139.159.254.212/images/index/arrow.png) no-repeat;
background: url(https://huorantech.com/images/index/arrow.png) no-repeat;
cursor: pointer;
&:hover {
background-image: url(http://139.159.254.212/images/index/arrow-active.png);
background-image: url(https://huorantech.com/images/index/arrow-active.png);
}
}
.a-left {
@ -886,7 +984,7 @@ export default {
}
}
.parner {
background: #fff url(http://139.159.254.212/images/index/parner.png) 0 0 / cover no-repeat;
background: #fff url(https://huorantech.com/images/index/parner.png) 0 0 / cover no-repeat;
.i-title,
.brief {
color: #fff;
@ -899,7 +997,7 @@ export default {
height: 600px;
}
.client {
background: url(http://139.159.254.212/images/index/client.png) 0 0 / cover no-repeat;
background: url(https://huorantech.com/images/index/client.png) 0 0 / cover no-repeat;
}
.client-pic {
display: flex;
@ -1017,9 +1115,9 @@ export default {
cursor: pointer;
}
.wechat {
background: #fff url(http://139.159.254.212/images/index/wechat.png) center center/auto no-repeat;
background: #fff url(https://huorantech.com/images/index/wechat.png) center center/auto no-repeat;
&:hover {
background-image: url(http://139.159.254.212/images/index/wechat-1.png);
background-image: url(https://huorantech.com/images/index/wechat-1.png);
background-color: #006eff;
& + .popup {
display: block;
@ -1027,9 +1125,9 @@ export default {
}
}
.tel {
background: #fff url(http://139.159.254.212/images/index/tel.png) center center/auto no-repeat;
background: #fff url(https://huorantech.com/images/index/tel.png) center center/auto no-repeat;
&:hover {
background-image: url(http://139.159.254.212/images/index/tel-1.png);
background-image: url(https://huorantech.com/images/index/tel-1.png);
background-color: #006eff;
& + .popup {
display: block;
@ -1037,9 +1135,9 @@ export default {
}
}
.topping {
background: #fff url(http://139.159.254.212/images/index/top.png) center center/auto no-repeat;
background: #fff url(https://huorantech.com/images/index/top.png) center center/auto no-repeat;
&:hover {
background-image: url(http://139.159.254.212/images/index/top-1.png);
background-image: url(https://huorantech.com/images/index/top-1.png);
background-color: #006eff;
}
}

Loading…
Cancel
Save