关于我们长页

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

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

@ -28,10 +28,10 @@
api-key='rnk6zw9v267xqz7pf98twt1vmrvltmd436je7a642pckltda' api-key='rnk6zw9v267xqz7pf98twt1vmrvltmd436je7a642pckltda'
v-model="data.form[item.prop]" v-model="data.form[item.prop]"
:init="editorConfig" /> :init="editorConfig" />
<el-upload v-if="item.type === 'upload' && item.crop" <el-upload v-if="item.type === 'upload' && item.width"
class="uploader" class="uploader"
accept=".jpg,.png,.jpeg,.gif" accept=".jpg,.png,.jpeg,.gif"
:on-change="res => changeFile(res, data.form)" :on-change="res => changeFile(res, data.form, item)"
:show-file-list="false" :show-file-list="false"
:action="api.upload" :action="api.upload"
:auto-upload="false"> :auto-upload="false">
@ -48,10 +48,10 @@
<p>只支持.jpg,.png格式</p> <p>只支持.jpg,.png格式</p>
</div> </div>
</el-upload> </el-upload>
<el-upload v-if="item.type === 'upload' && !item.crop" <el-upload v-if="item.type === 'upload' && !item.width"
class="uploader" class="uploader"
accept=".jpg,.png,.jpeg" accept=".jpg,.png,.jpeg"
:on-success="res => uploadSuccess(res, data.form)" :on-success="res => uploadSuccess(res, data.form, item)"
:show-file-list="false" :show-file-list="false"
:headers="headers" :headers="headers"
:action="api.upload"> :action="api.upload">
@ -68,6 +68,22 @@
<p>只支持.jpg,.png格式</p> <p>只支持.jpg,.png格式</p>
</div> </div>
</el-upload> </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'"> <template v-if="item.type === 'pic'">
<img v-if="data.form[item.prop]" <img v-if="data.form[item.prop]"
:src="data.form[item.prop]" :src="data.form[item.prop]"
@ -109,6 +125,8 @@
:is-upload="isUpload" :is-upload="isUpload"
:fixed="fixed" :fixed="fixed"
:fixedNumber.sync="fixedNumber" :fixedNumber.sync="fixedNumber"
:autoCropWidth="autoCropWidth"
:autoCropHeight="autoCropHeight"
@upload="customUpload" /> @upload="customUpload" />
</el-dialog> </el-dialog>
</div> </div>
@ -143,8 +161,12 @@ export default {
isUpload: false, isUpload: false,
file: {}, // file: {}, //
curForm: {}, curForm: {},
curItem: {},
fixed: false, fixed: false,
fixedNumber: [0.88, 1] fixedNumber: [0.88, 1],
autoCropWidth: 480,
autoCropHeight: 124,
fileList: [],
}; };
}, },
watch: { watch: {
@ -159,18 +181,30 @@ export default {
methods: { methods: {
// form // form
handleForm () { 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') { if (type === 'form' || type === 'introduce') {
forms.map(e => { forms.map(e => {
if (e.type === 'upload') { if (e.type === 'upload') {
if (e.fixedNumber) { if (e.width) {
this.autoCropWidth = e.width
this.autoCropHeight = e.height
this.fixed = true this.fixed = true
this.fixedNumber = e.fixedNumber this.fixedNumber = [e.width / e.height, 1]
} else { } else {
this.fixed = false this.fixed = false
} }
} }
if (e.type === 'media' && form.fileName) {
this.fileList = [
{
name: form.fileName,
url: form.video || e.pic
}
]
}
if (e.required) { if (e.required) {
this.rules[e.prop] = [ this.rules[e.prop] = [
{ {
@ -204,14 +238,16 @@ export default {
token: Util.local.get(Setting.tokenKey) token: Util.local.get(Setting.tokenKey)
}, },
}).then(({ data }) => { }).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 => { }) }).catch(res => { })
this.$refs.cropper.isDisabled = false this.$refs.cropper.isDisabled = false
this.isUpload = false this.isUpload = false
this.cropperModel = 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 { size, name } = file
const ext = name.substring(name.lastIndexOf('.') + 1) const ext = name.substring(name.lastIndexOf('.') + 1)
if (!Util.isImg(ext)) { if (!Util.isImg(ext)) {
@ -224,6 +260,7 @@ export default {
} }
this.file = file this.file = file
this.curForm = form this.curForm = form
this.curItem = item
this.cropperModel = true this.cropperModel = true
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.cropper.updateImg({ 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) { uploadSuccess (res, row, item) {
this.$set(row, 'pic', res.url) 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) { toLink (row, i = 0) {

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

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

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

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

Loading…
Cancel
Save