diff --git a/packageship/web-ui/.browserslistrc b/packageship/web-ui/.browserslistrc new file mode 100644 index 0000000000000000000000000000000000000000..214388fe43cdfd7ce1c29cd3e401541ded620dba --- /dev/null +++ b/packageship/web-ui/.browserslistrc @@ -0,0 +1,3 @@ +> 1% +last 2 versions +not dead diff --git a/packageship/web-ui/.eslintrc.js b/packageship/web-ui/.eslintrc.js new file mode 100644 index 0000000000000000000000000000000000000000..948395b666ffdf677d191e6dfaed5278151d8a36 --- /dev/null +++ b/packageship/web-ui/.eslintrc.js @@ -0,0 +1,21 @@ +/** + * @file 代码规范配置文件 + * */ + +module.exports = { + root: true, + env: { + node: true + }, + 'extends': [ + 'plugin:vue/essential', + 'eslint:recommended' + ], + parserOptions: { + parser: 'babel-eslint' + }, + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off' + } +}; \ No newline at end of file diff --git a/packageship/web-ui/Dockerfile b/packageship/web-ui/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..bc3130832e5599de716f07606dde3ca2549910f4 --- /dev/null +++ b/packageship/web-ui/Dockerfile @@ -0,0 +1,24 @@ +FROM node:alpine as Builder + +MAINTAINER zhangxiaopan + +RUN mkdir -p /home/openeuler/pkgwebui +WORKDIR /home/openeuler/pkgwebui +COPY . /home/openeuler/pkgwebui + +RUN npm install -g vue && \ + npm install && \ + npm run build + +FROM nginx:1.19.2 + +COPY --from=Builder /home/openeuler/pkgwebui/dist /usr/share/nginx/html/ +RUN chmod -R 755 /usr/share/nginx/html +COPY ./deploy/nginx/default.conf /etc/nginx/conf.d/ + +ENV RUN_USER nginx +ENV RUN_GROUP nginx +EXPOSE 8080 +ENTRYPOINT ["nginx", "-g", "daemon off;"] + + diff --git a/packageship/web-ui/README.md b/packageship/web-ui/README.md new file mode 100644 index 0000000000000000000000000000000000000000..362eb2092a92a02c95fa773b3c3e56b32e020c27 --- /dev/null +++ b/packageship/web-ui/README.md @@ -0,0 +1,24 @@ +# openeuler-v2 + +## Project setup +``` +npm install +``` + +### Compiles and hot-reloads for development +``` +npm run serve +``` + +### Compiles and minifies for production +``` +npm run build +``` + +### Lints and fixes files +``` +npm run lint +``` + +### Customize configuration +See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/packageship/web-ui/babel.config.js b/packageship/web-ui/babel.config.js new file mode 100644 index 0000000000000000000000000000000000000000..e5921a25e798e8a22b7f3028d08dd8e0481fd35f --- /dev/null +++ b/packageship/web-ui/babel.config.js @@ -0,0 +1,18 @@ +/** + * @file babel配置文件 + * */ + +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ], + 'plugins': [ + [ + 'component', + { + 'libraryName': 'element-ui', + 'styleLibraryName': 'theme-chalk' + } + ] + ] +}; \ No newline at end of file diff --git a/packageship/web-ui/deploy/nginx/default.conf b/packageship/web-ui/deploy/nginx/default.conf new file mode 100644 index 0000000000000000000000000000000000000000..29c058a68f8aa4c904fd3bebfad41db00c3080bb --- /dev/null +++ b/packageship/web-ui/deploy/nginx/default.conf @@ -0,0 +1,18 @@ +server { + listen 8080; + include /etc/nginx/mime.types; + default_type application/octet-stream; + server_name localhost; + + #charset koi8-r; + #access_log /var/log/nginx/host.access.log main; + + location / { + root /usr/share/nginx/html; + index /index.html; + } + + location /api/ { + proxy_pass https://api.openeuler.org/pkgmanagedebug/; + } +} \ No newline at end of file diff --git a/packageship/web-ui/package.json b/packageship/web-ui/package.json new file mode 100644 index 0000000000000000000000000000000000000000..1cda30914a7b1515f3af0707ace5f961c5b5263a --- /dev/null +++ b/packageship/web-ui/package.json @@ -0,0 +1,34 @@ +{ + "name": "Package-Management", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve --port 80", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "axios": "^0.19.2", + "core-js": "^3.6.5", + "echarts": "^4.9.0", + "element-ui": "^2.13.2", + "vue": "^2.6.11", + "vue-i18n": "^8.18.2", + "vue-router": "^3.2.0" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~4.4.0", + "@vue/cli-plugin-eslint": "~4.4.0", + "@vue/cli-plugin-router": "~4.4.0", + "@vue/cli-service": "~4.4.0", + "babel-eslint": "^10.1.0", + "babel-plugin-component": "^1.1.1", + "eslint": "^6.7.2", + "eslint-plugin-vue": "^6.2.2", + "less": "^3.0.4", + "less-loader": "^5.0.0", + "style-resources-loader": "^1.3.3", + "vue-cli-plugin-style-resources-loader": "^0.1.4", + "vue-template-compiler": "^2.6.11" + } +} diff --git a/packageship/web-ui/public/favicon.ico b/packageship/web-ui/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 Binary files /dev/null and b/packageship/web-ui/public/favicon.ico differ diff --git a/packageship/web-ui/public/index.html b/packageship/web-ui/public/index.html new file mode 100644 index 0000000000000000000000000000000000000000..622b5dd01027aad1c8fbc4e4aaacace1ffd9275c --- /dev/null +++ b/packageship/web-ui/public/index.html @@ -0,0 +1,21 @@ + + + + + + <%= htmlWebpackPlugin.options.title %> + + + + + + + +
+ + + + \ No newline at end of file diff --git a/packageship/web-ui/src/App.vue b/packageship/web-ui/src/App.vue new file mode 100644 index 0000000000000000000000000000000000000000..33b4367d78aa21a51d0383bb078fc71859a21579 --- /dev/null +++ b/packageship/web-ui/src/App.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/packageship/web-ui/src/api/issue.js b/packageship/web-ui/src/api/issue.js new file mode 100644 index 0000000000000000000000000000000000000000..6f6a09dfab542881fe41a22110addd02ce190688 --- /dev/null +++ b/packageship/web-ui/src/api/issue.js @@ -0,0 +1,76 @@ +/** + * @file 包管理 issue接口配置文件 + * */ + +import appAjax from './../libs/ajax-utils'; +export const issueList = ({ + pageNum, + pageSize, + issueType, + issueStatus +}) => { + return new Promise((resolve, reject) => { + appAjax.postJson({ + url: '/lifeCycle/issuetrace', + type: 'get', + params: { + page_num: pageNum, + page_size: pageSize, + issue_type: issueType, + issue_status: issueStatus + }, + success(result) { + if (result) { + resolve(result); + return; + } + reject(result); + }, + error(msg) { + reject(msg); + } + + }); + + }); +}; + +export const issueType = () => { + return new Promise((resolve, reject) => { + appAjax.postJson({ + url: '/lifeCycle/issuetype', + type: 'get', + success(result) { + if (result) { + resolve(result); + return; + } + reject(result); + }, + error(msg) { + reject(msg); + } + + }); + + }); +}; + +export const issueStatus = () => new Promise((resolve, reject) => { + appAjax.postJson({ + url: '/lifeCycle/issuestatus', + type: 'get', + success(result) { + if (result) { + resolve(result); + return; + } + reject(result); + }, + error(msg) { + reject(msg); + } + + }); + + }); diff --git a/packageship/web-ui/src/api/repo.js b/packageship/web-ui/src/api/repo.js new file mode 100644 index 0000000000000000000000000000000000000000..4786ad4c9f588c3a08e3b077a62edac1865da43c --- /dev/null +++ b/packageship/web-ui/src/api/repo.js @@ -0,0 +1,127 @@ +/** + * @file 包管理接口配置文件 + * */ + +import appAjax from './../libs/ajax-utils'; +export const packages = ({ + pageNum, + pageSize, + tableName, + queryPkgName, + maintainer, + maintainlevel +}) => { + return new Promise((resolve, reject) => { + appAjax.postJson({ + url: '/packages', + type: 'get', + params: { + page_num: pageNum, + page_size: pageSize, + table_name: tableName, + query_pkg_name: queryPkgName, + maintainer, + maintainlevel + }, + success(result) { + if (result) { + resolve(result); + return; + } + reject(result); + }, + error(msg) { + reject(msg); + } + + }); + + }); +}; +export const productVersion = () => { + return new Promise((resolve, reject) => { + appAjax.postJson({ + url: '/lifeCycle/tables', + type: 'get', + success(result) { + if (result) { + resolve(result); + return; + } + reject(result); + }, + error(msg) { + reject(msg); + } + + }); + + }); +}; + +export const tableCol = () => { + return new Promise((resolve, reject) => { + appAjax.postJson({ + url: '/packages/tablecol', + type: 'get', + success(result) { + if (result) { + resolve(result); + return; + } + reject(result); + }, + error(msg) { + reject(msg); + } + + }); + + }); +}; + +export const packageDetail = ({table_name, pkg_name}) => { + return new Promise((resolve, reject) => { + appAjax.postJson({ + url: '/packages/packageInfo', + type: 'get', + params: { + table_name, + pkg_name + }, + success(result) { + if (result) { + resolve(result); + return; + } + reject(result); + }, + error(msg) { + reject(msg); + } + + }); + + }); +}; + +export const maintainer = () => { + return new Promise((resolve, reject) => { + appAjax.postJson({ + url: '/lifeCycle/maintainer', + type: 'get', + success(result) { + if (result) { + resolve(result); + return; + } + reject(result); + }, + error(msg) { + reject(msg); + } + + }); + + }); +}; \ No newline at end of file diff --git a/packageship/web-ui/src/assets/fonts/FZLTCHJW.TTF b/packageship/web-ui/src/assets/fonts/FZLTCHJW.TTF new file mode 100644 index 0000000000000000000000000000000000000000..2ba2430be2cfc3bb6de1f2870b6d5364ad69e1e3 Binary files /dev/null and b/packageship/web-ui/src/assets/fonts/FZLTCHJW.TTF differ diff --git a/packageship/web-ui/src/assets/fonts/FZLTHJW.TTF b/packageship/web-ui/src/assets/fonts/FZLTHJW.TTF new file mode 100644 index 0000000000000000000000000000000000000000..379dc975c37291aa56568ff1f078ed12345a280e Binary files /dev/null and b/packageship/web-ui/src/assets/fonts/FZLTHJW.TTF differ diff --git a/packageship/web-ui/src/assets/fonts/FZLTXIHJW.TTF b/packageship/web-ui/src/assets/fonts/FZLTXIHJW.TTF new file mode 100644 index 0000000000000000000000000000000000000000..5800b22a5e222d3a42a35fb91b020f806520ed23 Binary files /dev/null and b/packageship/web-ui/src/assets/fonts/FZLTXIHJW.TTF differ diff --git a/packageship/web-ui/src/assets/fonts/HuaweiSans-Bold.ttf b/packageship/web-ui/src/assets/fonts/HuaweiSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f3a838546d3141c6684098f77bdaa763db8e5ffe Binary files /dev/null and b/packageship/web-ui/src/assets/fonts/HuaweiSans-Bold.ttf differ diff --git a/packageship/web-ui/src/assets/fonts/HuaweiSans-Light.ttf b/packageship/web-ui/src/assets/fonts/HuaweiSans-Light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d3b3ac183eab2eb6e69b7b49905157b72dffdf47 Binary files /dev/null and b/packageship/web-ui/src/assets/fonts/HuaweiSans-Light.ttf differ diff --git a/packageship/web-ui/src/assets/fonts/HuaweiSans-Medium.ttf b/packageship/web-ui/src/assets/fonts/HuaweiSans-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6878ed7c64b5f0d0ac4c24f3fcbfba9aa90e58a1 Binary files /dev/null and b/packageship/web-ui/src/assets/fonts/HuaweiSans-Medium.ttf differ diff --git a/packageship/web-ui/src/assets/fonts/HuaweiSans-Regular.ttf b/packageship/web-ui/src/assets/fonts/HuaweiSans-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3118eaffb6d174531b17061c8c133b591256e152 Binary files /dev/null and b/packageship/web-ui/src/assets/fonts/HuaweiSans-Regular.ttf differ diff --git a/packageship/web-ui/src/assets/fonts/Roboto-Black.ttf b/packageship/web-ui/src/assets/fonts/Roboto-Black.ttf new file mode 100644 index 0000000000000000000000000000000000000000..86ec2b29ba56a3d6c45f1a8584ff3780fa70c60e Binary files /dev/null and b/packageship/web-ui/src/assets/fonts/Roboto-Black.ttf differ diff --git a/packageship/web-ui/src/assets/fonts/Roboto-BlackItalic.ttf b/packageship/web-ui/src/assets/fonts/Roboto-BlackItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1904c99b2c81e3e278d3c373f397b38049824d4c Binary files /dev/null and b/packageship/web-ui/src/assets/fonts/Roboto-BlackItalic.ttf differ diff --git a/packageship/web-ui/src/assets/fonts/Roboto-Bold.ttf b/packageship/web-ui/src/assets/fonts/Roboto-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..91ec21227866ca9d1cf77ec13660b7b85ec900dd Binary files /dev/null and b/packageship/web-ui/src/assets/fonts/Roboto-Bold.ttf differ diff --git a/packageship/web-ui/src/assets/fonts/Roboto-Light.ttf b/packageship/web-ui/src/assets/fonts/Roboto-Light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d43e943312e0f2c653815dd791d93f94f0abd73f Binary files /dev/null and b/packageship/web-ui/src/assets/fonts/Roboto-Light.ttf differ diff --git a/packageship/web-ui/src/assets/fonts/Roboto-Medium.ttf b/packageship/web-ui/src/assets/fonts/Roboto-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..87983419893a8952c3f286dc56d37fb94e320da0 Binary files /dev/null and b/packageship/web-ui/src/assets/fonts/Roboto-Medium.ttf differ diff --git a/packageship/web-ui/src/assets/fonts/Roboto-Regular.ttf b/packageship/web-ui/src/assets/fonts/Roboto-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7d9a6c4c32d7e920b549caf531e390733496b6e0 Binary files /dev/null and b/packageship/web-ui/src/assets/fonts/Roboto-Regular.ttf differ diff --git a/packageship/web-ui/src/assets/fonts/icomoon.eot b/packageship/web-ui/src/assets/fonts/icomoon.eot new file mode 100644 index 0000000000000000000000000000000000000000..296ebc035c5b8d333fc5b33d192e9aab34674455 Binary files /dev/null and b/packageship/web-ui/src/assets/fonts/icomoon.eot differ diff --git a/packageship/web-ui/src/assets/fonts/icomoon.svg b/packageship/web-ui/src/assets/fonts/icomoon.svg new file mode 100644 index 0000000000000000000000000000000000000000..5993cbfc3e08ce844a2560a3c02a5b559c3db9a4 --- /dev/null +++ b/packageship/web-ui/src/assets/fonts/icomoon.svg @@ -0,0 +1,13 @@ + + + +Generated by IcoMoon + + + + + + + + + \ No newline at end of file diff --git a/packageship/web-ui/src/assets/fonts/icomoon.ttf b/packageship/web-ui/src/assets/fonts/icomoon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4d22f59786856202df95442ab1af225a53a7a1e3 Binary files /dev/null and b/packageship/web-ui/src/assets/fonts/icomoon.ttf differ diff --git a/packageship/web-ui/src/assets/fonts/icomoon.woff b/packageship/web-ui/src/assets/fonts/icomoon.woff new file mode 100644 index 0000000000000000000000000000000000000000..04a91af85e46766f2d489439cef5f58fa209467b Binary files /dev/null and b/packageship/web-ui/src/assets/fonts/icomoon.woff differ diff --git a/packageship/web-ui/src/assets/images/Gitee.png b/packageship/web-ui/src/assets/images/Gitee.png new file mode 100644 index 0000000000000000000000000000000000000000..bb68b9c00d7cef5091a97d5d589cdbbf76374990 Binary files /dev/null and b/packageship/web-ui/src/assets/images/Gitee.png differ diff --git a/packageship/web-ui/src/assets/images/column.svg b/packageship/web-ui/src/assets/images/column.svg new file mode 100644 index 0000000000000000000000000000000000000000..48afb28d4def283a58d91965748dcee773919246 --- /dev/null +++ b/packageship/web-ui/src/assets/images/column.svg @@ -0,0 +1,9 @@ + + + 形状结合 + + + + + + \ No newline at end of file diff --git a/packageship/web-ui/src/assets/images/dowmload.svg b/packageship/web-ui/src/assets/images/dowmload.svg new file mode 100644 index 0000000000000000000000000000000000000000..0dd2ff5cda735dfffeba4f7299169d1c4cc59d54 --- /dev/null +++ b/packageship/web-ui/src/assets/images/dowmload.svg @@ -0,0 +1,9 @@ + + + Style + + + + + + \ No newline at end of file diff --git a/packageship/web-ui/src/assets/images/footer-logo.png b/packageship/web-ui/src/assets/images/footer-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e029c8d7daad57c231228b2140a505fcf93b8e79 Binary files /dev/null and b/packageship/web-ui/src/assets/images/footer-logo.png differ diff --git a/packageship/web-ui/src/assets/images/lang.png b/packageship/web-ui/src/assets/images/lang.png new file mode 100644 index 0000000000000000000000000000000000000000..4d968b6ba46e2d3fabf1d0806c5f32ef96e30c4d Binary files /dev/null and b/packageship/web-ui/src/assets/images/lang.png differ diff --git a/packageship/web-ui/src/assets/images/logo-mobile.png b/packageship/web-ui/src/assets/images/logo-mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..d26be4e7ac88b84d44dc593059afcfe274986b28 Binary files /dev/null and b/packageship/web-ui/src/assets/images/logo-mobile.png differ diff --git a/packageship/web-ui/src/assets/images/menu-mobile.png b/packageship/web-ui/src/assets/images/menu-mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..aaa0e59a59327cde15d49037b5a01f1bee3c1f3b Binary files /dev/null and b/packageship/web-ui/src/assets/images/menu-mobile.png differ diff --git a/packageship/web-ui/src/assets/images/openeuler.png b/packageship/web-ui/src/assets/images/openeuler.png new file mode 100644 index 0000000000000000000000000000000000000000..f7da72fd7ddd2a0965f8dd90ece4094b00a59e0b Binary files /dev/null and b/packageship/web-ui/src/assets/images/openeuler.png differ diff --git a/packageship/web-ui/src/assets/images/search.png b/packageship/web-ui/src/assets/images/search.png new file mode 100644 index 0000000000000000000000000000000000000000..11ee04ea7e4fa8872035b5b1451e3f8e06954f9b Binary files /dev/null and b/packageship/web-ui/src/assets/images/search.png differ diff --git a/packageship/web-ui/src/assets/style/base.css b/packageship/web-ui/src/assets/style/base.css new file mode 100644 index 0000000000000000000000000000000000000000..d7a2de0df496c01ce297142089add4623fb5c045 --- /dev/null +++ b/packageship/web-ui/src/assets/style/base.css @@ -0,0 +1,181 @@ +/* CSS Document */ +/*css reset*/ +html { + box-sizing: border-box; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +body, +div, +dl, +dt, +dd, +ul, +ol, +li, +h1, +h2, +h3, +h4, +h5, +h6, +pre, +form, +fieldset, +input, +textarea, +p, +blockquote, +th, +td { + margin: 0; + padding: 0; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +fieldest, +img { + border: 0; +} + +address, +caption, +cite, +code, +dfn, +em, +strong, +th, +var { + font-style: normal; + font-weight: normal; +} + +ol, +ul { + list-style: none; +} + +caption, +th { + text-align: left; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: 100%; + font-weight: normal; +} + +p:before, +q:after { + content: ""; +} + +abbr, +acronym { + border: 0; +} + +/*定位*/ +.tl { + text-align: left; +} + +.tc { + text-align: center; +} + +.tr { + text-align: right; +} + +.bc { + margin-left: auto; + margin-right: auto; +} + +.fl { + float: left; +} + +.fr { + float: right; +} + +.cb { + clear: both; +} + +.cl { + clear: left; +} + +.cr { + clear: right; +} + +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +.clearfix { + display: inline-block; +} + +@font-face { + font-family: "icomoon"; + src: url(../fonts/icomoon.eot?4mtq8t); + src: url(../fonts/icomoon.eot?4mtq8t#iefix) format('embedded-opentype'), + url(../fonts/icomoon.ttf?4mtq8t) format('truetype'), + url(../fonts/icomoon.woff?4mtq8t) format('woff'), + url(../fonts/icomoon.svg?4mtq8t#icomoon) format('svg'); + font-weight: normal; + font-style: normal; + font-display: block; +} + + [class^="icon-"], + [class*=" icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: "icomoon" !important; + speak: never; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + .icon-menu:before { + content: "\e900"; + } + + .icon-arrow:before { + content: "\e901"; + } + + .icon-search:before { + content: "\e902"; + } \ No newline at end of file diff --git a/packageship/web-ui/src/assets/style/font-cn.css b/packageship/web-ui/src/assets/style/font-cn.css new file mode 100644 index 0000000000000000000000000000000000000000..17b9e3ed8495169bafe99e86cd43c92bb2ab589a --- /dev/null +++ b/packageship/web-ui/src/assets/style/font-cn.css @@ -0,0 +1,17 @@ +@font-face { + font-family: "FZLTHJW"; + src: url(../fonts/FZLTHJW.TTF); +} +@font-face { + font-family: "FZLTCHJW"; + src: url(../fonts/FZLTCHJW.TTF); +} + +@font-face { + font-family: "FZLTHJW"; + src: url(../fonts/FZLTHJW.TTF); +} +@font-face { + font-family: "FZLTXIHJW"; + src: url(../fonts/FZLTXIHJW.TTF); +} \ No newline at end of file diff --git a/packageship/web-ui/src/assets/style/font-en.css b/packageship/web-ui/src/assets/style/font-en.css new file mode 100644 index 0000000000000000000000000000000000000000..1bb936bb472e11d7e2a518da00c410b692f0737c --- /dev/null +++ b/packageship/web-ui/src/assets/style/font-en.css @@ -0,0 +1,40 @@ +@font-face { + font-family: "HuaweiSans-Bold"; + src: url(../fonts/HuaweiSans-Bold.ttf); +} +@font-face { + font-family: "HuaweiSans-Light"; + src: url(../fonts/HuaweiSans-Light.ttf); +} +@font-face { + font-family: "HuaweiSans-Medium"; + src: url(../fonts/HuaweiSans-Medium.ttf); +} +@font-face { + font-family: "HuaweiSans"; + src: url(../fonts/HuaweiSans-Regular.ttf); +} +@font-face { + font-family: "Roboto-Black"; + src: url(../fonts/Roboto-Black.ttf); +} +@font-face { + font-family: "Roboto-BlackItalic"; + src: url(../fonts/Roboto-BlackItalic.ttf); +} +@font-face { + font-family: "Roboto-Bold"; + src: url(../fonts/Roboto-Bold.ttf); +} +@font-face { + font-family: "Roboto-Light"; + src: url(../fonts/Roboto-Light.ttf); +} +@font-face { + font-family: "Roboto-Medium"; + src: url(../fonts/Roboto-Medium.ttf); +} +@font-face { + font-family: "Roboto-Regular"; + src: url(../fonts/Roboto-Regular.ttf); +} \ No newline at end of file diff --git a/packageship/web-ui/src/assets/style/vars.less b/packageship/web-ui/src/assets/style/vars.less new file mode 100644 index 0000000000000000000000000000000000000000..372d0dc7afdfc4396a90d71ebc8dc14393b96d67 --- /dev/null +++ b/packageship/web-ui/src/assets/style/vars.less @@ -0,0 +1,61 @@ +@primary-color: #002FA7; //主色 +@primary-color2: #0041BD; //主色2 +@text-white: #fff; +@text-dark: #000; +@text-dark2: #0B162B; +@text-light: rgba(0, 0, 0, 0.85); +@text-lighter: rgba(0, 0, 0, 0.7); +@text-lightest: rgba(0, 0, 0, 0.5); + +.ff-h(){ + font-family: FZLTHJW; +} +.ff-xih(){ + font-family: FZLTXIHJW; +} +.ff-ch(){ + font-family: FZLTCHJW; +} +.ff-hwsans(){ + font-family: HuaweiSans; +} +.ff-hwsans-b(){ + font-family: HuaweiSans-Bold; +} +.ff-hwsans-m(){ + font-family: HuaweiSans-Medium; +} +.ff-pfsc-r(){ + font-family: PingFangSC-Regular; +} + +.fz20(){ + font-size: 20px; +} +.fz18(){ + font-size: 18px; +} +.fz16(){ + font-size: 16px; +} +.fz14(){ + font-size: 14px; +} +.fz12(){ + font-size: 12px; +} +.fz60(){ + font-size: 60px; +} +.fz40(){ + font-size: 40px; +} +.fz24(){ + font-size: 24px; +} +.fz36(){ + font-size: 36px; +} +.fz72(){ + font-size: 72px; +} \ No newline at end of file diff --git a/packageship/web-ui/src/components/footer.vue b/packageship/web-ui/src/components/footer.vue new file mode 100644 index 0000000000000000000000000000000000000000..b61746eeeadf4bc2db773191870df43994944dc7 --- /dev/null +++ b/packageship/web-ui/src/components/footer.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/packageship/web-ui/src/components/header.vue b/packageship/web-ui/src/components/header.vue new file mode 100644 index 0000000000000000000000000000000000000000..fc2bd2a70eeefd87b6dfd7fef65f911df699b8b2 --- /dev/null +++ b/packageship/web-ui/src/components/header.vue @@ -0,0 +1,448 @@ + + + + + diff --git a/packageship/web-ui/src/config/index.js b/packageship/web-ui/src/config/index.js new file mode 100644 index 0000000000000000000000000000000000000000..c6f69416206a377add74ddbf175931f1e6d35c7e --- /dev/null +++ b/packageship/web-ui/src/config/index.js @@ -0,0 +1,7 @@ +/** + * @file 站点基础配置文件 + * */ + +export default { + serviceBaseUrl: '/api', +}; \ No newline at end of file diff --git a/packageship/web-ui/src/lang/cn.js b/packageship/web-ui/src/lang/cn.js new file mode 100644 index 0000000000000000000000000000000000000000..e8003d7380560135601bf1d2821ae90782655424 --- /dev/null +++ b/packageship/web-ui/src/lang/cn.js @@ -0,0 +1,8 @@ +/** + * @file 国际化中文配置主入口 + * */ + +module.exports = { + common: require('@/lang/lang-modules/common').cn, + home: require('@/lang/lang-modules/home').cn, +}; \ No newline at end of file diff --git a/packageship/web-ui/src/lang/en.js b/packageship/web-ui/src/lang/en.js new file mode 100644 index 0000000000000000000000000000000000000000..9dfea9098077ffd357297cc26dac49dd0619fd23 --- /dev/null +++ b/packageship/web-ui/src/lang/en.js @@ -0,0 +1,8 @@ +/** + * @file 国际化英文配置主入口 + * */ + +module.exports = { + common: require('@/lang/lang-modules/common').en, + home: require('@/lang/lang-modules/home').en, +}; \ No newline at end of file diff --git a/packageship/web-ui/src/lang/lang-modules/common.js b/packageship/web-ui/src/lang/lang-modules/common.js new file mode 100644 index 0000000000000000000000000000000000000000..880c88b23ec2e6ff5659a2e89fe1e0e8ce4bfb12 --- /dev/null +++ b/packageship/web-ui/src/lang/lang-modules/common.js @@ -0,0 +1,233 @@ +/** + * @file 公共模块国际化配置入口 + * */ + +module.exports = { + cn: { + searchPlaceholder: '输入内容', + navRouterConfig: [{ + path: '/download', + name: '下载', + children: [], + class: [] + }, + { + path: '/documentation/documentation', + name: '文档', + children: [], + class: [] + }, + { + path: '', + name: '社区', + subName: '社区玩转指引', + subPath: '/community/community-guidance', + subImg: '', + children: [{ + name: '活动', + path: '/community/event-list' + }, + { + name: '博客', + path: '/community/blog-list' + }, + { + name: '新闻', + path: '/community/news-list' + }, + { + name: '活动', + path: '/community/mailing-list' + } + ], + class: [] + }, + { + path: '', + name: 'SIG', + subName: 'SIG玩转指引', + subPath: '/sig/sig-guidance', + subImg: '', + viewAllName: '查看全部', + viewAllPath: '/sig/sig-list', + children: [{ + name: 'A-Tune', + path: '/sig/sig-detail/1' + }, + { + name: 'Base-service', + path: '/sig/sig-detail/2' + }, + { + name: 'Computing', + path: '/sig/sig-detail/3' + }, + { + name: 'DB', + path: '/sig/sig-detail/4' + }, + { + name: 'GNOME', + path: '/sig/sig-detail/5' + }, + { + name: 'Application', + path: '/sig/sig-detail/6' + }, + { + name: 'Compiler', + path: '/sig/sig-detail/7' + }, + { + name: 'Container', + path: '/sig/sig-detail/8' + }, + { + name: 'Desktop', + path: '/sig/sig-detail/9' + }, + { + name: 'Infrastructure', + path: '/sig/sig-detail/10' + } + ], + class: [] + }, + { + path: '/authentication', + name: '认证', + children: [], + class: [] + }, + { + path: '/security', + name: '安全', + children: [], + class: [] + } + ], + PAGE_NAME: 'Package Management', + lang: 'EN', + search: '搜索', + gitee: '码云', + footer: { + leftLogo: 'openEuler', + mail: 'contact@openeuler.org', + copyright: '版权所有 © 2020 openeuler 保留一切权利', + rightList: ['品牌', '法律声明', '隐私政策'] + } + }, + en: { + searchPlaceholder: 'Input content', + navRouterConfig: [{ + path: '/download', + name: 'Download', + children: [], + class: [] + }, + { + path: '/documentation/documentation', + name: 'Documentation', + children: [], + class: [] + }, + { + path: '', + name: 'Community', + subName: '社区玩转指引', + subPath: '/community/community-guidance', + subImg: '', + children: [{ + name: 'Events', + path: '/community/event-list' + }, + { + name: 'Blog', + path: '/community/blog-list' + }, + { + name: 'News', + path: '/community/news-list' + }, + { + name: 'Mailing', + path: '/community/mailing-list' + } + ], + class: [] + }, + { + path: '', + name: 'SIG', + subName: 'SIG Play guide', + subPath: '/sig/sig-guidance', + subImg: '', + viewAllName: 'View All', + viewAllPath: '/sig/sig-list', + children: [{ + name: 'A-Tune', + path: '/sig/sig-detail/1' + }, + { + name: 'Base-service', + path: '/sig/sig-detail/2' + }, + { + name: 'Computing', + path: '/sig/sig-detail/3' + }, + { + name: 'DB', + path: '/sig/sig-detail/4' + }, + { + name: 'GNOME', + path: '/sig/sig-detail/5' + }, + { + name: 'Application', + path: '/sig/sig-detail/6' + }, + { + name: 'Compiler', + path: '/sig/sig-detail/7' + }, + { + name: 'Container', + path: '/sig/sig-detail/8' + }, + { + name: 'Desktop', + path: '/sig/sig-detail/9' + }, + { + name: 'Infrastructure', + path: '/sig/sig-detail/10' + } + ], + class: [] + }, + { + path: '/authentication', + name: 'Authentication', + children: [], + class: [] + }, + { + path: '/security', + name: 'Security', + children: [], + class: [] + } + ], + PAGE_NAME: 'Package Management', + lang: '中', + search: 'search', + gitee: 'gitee', + footer: { + mail: 'contact@openeuler.org', + copyright: 'Copyright © 2020 openEuler. All rights reserved.', + rightList: ['TradeMark', 'Legal', 'Privacy'] + } + } +}; \ No newline at end of file diff --git a/packageship/web-ui/src/lang/lang-modules/home.js b/packageship/web-ui/src/lang/lang-modules/home.js new file mode 100644 index 0000000000000000000000000000000000000000..ae9f3a357bffffeb5cea3bf51372f584fd518599 --- /dev/null +++ b/packageship/web-ui/src/lang/lang-modules/home.js @@ -0,0 +1,88 @@ +/** + * @file 首页模块国际化配置入口 + * */ + +module.exports = { + cn: { + MANAGEMENT: '包管理', + PACKAGE_INF0: 'Package Info', + ISSUE_LIST: 'Issue List', + PKG_VERSION: '版本号', + SEARCH: '搜索', + BTN_DISPLAY: 'Custom Display Column', + BTN_EXCEL: '导出表格', + BTN_OK: '确认', + BTN_CLEAR: '取消', + TABLE_LABEL: { + NAME: 'Name', + MAINTAINER: 'Maintainer', + MAIN_LEVEL: 'Maintenance Level' + }, + MOBILE_VERSION: 'Product Version', + MOBILE_SEARCH: 'Search Name', + PKG_TABLE: { + VERSION: 'Version:', + RELEASE: 'Release:', + URL: 'URL:', + LICENSE: 'License:', + FEATURE: 'Feature:', + MAINTAINER: 'Maintainer:', + MAINTIAN_LEVEL: 'Maintainlevel:', + REPO_URL: 'Repo URL:', + SUMMARY: 'Summary:', + DESCRIPTION: 'Description:', + SUBPACK: 'Subpack:', + REQUIRED: 'Required:', + ISSUE_NUM: 'Issue Num:' + }, + ISSUE_TABLE: { + ISSUE_ID: 'Issue ID', + PACKAGE_NAME: 'Package Name', + ISSUE_TITLE: 'Issue Title', + ISSUE_TYPE: 'Issue Type', + ISSUE_STATUS: 'Issue Status', + MAINTAINER: 'Maintainer', + } + }, + en: { + MANAGEMENT: 'Package Management', + PACKAGE_INF0: 'Package Info', + ISSUE_LIST: 'Issue List', + PKG_VERSION: 'Product Version', + SEARCH: 'Search', + BTN_DISPLAY: 'Custom Display Column', + BTN_EXCEL: 'Export Excel', + BTN_OK: 'OK', + BTN_CLEAR: 'Clear', + TABLE_LABEL: { + NAME: 'Name', + MAINTAINER: 'Maintainer', + MAIN_LEVEL: 'Maintenance Level' + }, + MOBILE_VERSION: 'Product Version', + MOBILE_SEARCH: 'Search', + PKG_TABLE: { + VERSION: 'Version:', + RELEASE: 'Release:', + URL: 'URL:', + LICENSE: 'License:', + FEATURE: 'Feature:', + MAINTAINER: 'Maintainer:', + MAINTIAN_LEVEL: 'Maintainlevel:', + REPO_URL: 'Repo URL:', + SUMMARY: 'Summary:', + DESCRIPTION: 'Description:', + SUBPACK: 'Subpack:', + REQUIRED: 'Required:', + ISSUE_NUM: 'Issue Num:' + }, + ISSUE_TABLE: { + ISSUE_ID: 'Issue ID', + PACKAGE_NAME: 'Package Name', + ISSUE_TITLE: 'Issue Title', + ISSUE_TYPE: 'Issue Type', + ISSUE_STATUS: 'Issue Status', + MAINTAINER: 'Maintainer', + } + } +}; \ No newline at end of file diff --git a/packageship/web-ui/src/libs/ajax-utils.js b/packageship/web-ui/src/libs/ajax-utils.js new file mode 100644 index 0000000000000000000000000000000000000000..5624cef4009f8bbc91f5b9dad5168f606866df3c --- /dev/null +++ b/packageship/web-ui/src/libs/ajax-utils.js @@ -0,0 +1,43 @@ +/** + * @file axios工具类 + * */ + +import axios from 'axios'; +import config from '@/config'; +import Vue from 'vue'; + +let postJson = params => { + let api = axios.create({ + baseURL: config.serviceBaseUrl || '' + }); + api.defaults.headers.post['Content-Type'] = 'application/json'; + + // 请求数据 + let dataStr = params['data'] && ((typeof (params['data']) === 'object') + ? JSON.stringify(params['data']) : params['data']); + + let ajaxParams = {}; + // success方法重载 + ajaxParams['success'] = function (d) { + const data = typeof d.data == 'string' ? JSON.parse(d.data) : d.data; + if (data) { + params.success(data); + } else { + new Vue().$message.error('开小差~请稍后重试。'); + } + }; + + return api({ + method: params['type'] || 'post', + url: params['url'], + data: dataStr, + params: params['params'], + responseType: 'json' + }).then(ajaxParams['success']).catch(params['error']); +}; + +let exportsMethods = { + postJson: params => postJson(params) +}; + +export default exportsMethods; \ No newline at end of file diff --git a/packageship/web-ui/src/main.js b/packageship/web-ui/src/main.js new file mode 100644 index 0000000000000000000000000000000000000000..71ab022755b178a4f8589171d391814f789d6799 --- /dev/null +++ b/packageship/web-ui/src/main.js @@ -0,0 +1,40 @@ +/** + * @file vue组件主入口 + * */ + +import Vue from 'vue'; +import App from './App.vue'; +import router from './router'; +import ElementUI from 'element-ui'; +import locale from 'element-ui/lib/locale/lang/en'; +import Vue18n from 'vue-i18n'; +import '@/assets/style/base.css'; +import echarts from 'echarts'; + + +if (!localStorage.getItem('locale') || localStorage.getItem('locale') === 'zh-en') { + import('@/assets/style/font-en.css'); +} else { + import('@/assets/style/font-cn.css'); +} + +Vue.use(Vue18n); +Vue.use(ElementUI, {locale}); +Vue.use(echarts) +Vue.prototype.$echarts = echarts + +const i18n = new Vue18n({ + locale: localStorage.getItem('locale') || 'zh-en', + messages: { + 'zh-cn': require('@/lang/cn'), // 中文语言包 + 'zh-en': require('@/lang/en') // 英文语言包 + } +}); + +Vue.config.productionTip = false; + +new Vue({ + i18n, + router, + render: h => h(App) +}).$mount('#app'); \ No newline at end of file diff --git a/packageship/web-ui/src/router/index.js b/packageship/web-ui/src/router/index.js new file mode 100644 index 0000000000000000000000000000000000000000..85733588c29278b300e3b489a9999c641d3585b1 --- /dev/null +++ b/packageship/web-ui/src/router/index.js @@ -0,0 +1,26 @@ +/** + * @file 路由配置入口文件 + * */ + +import Vue from 'vue'; +import Router from 'vue-router'; +import routes from './routers'; + +Vue.use(Router); + +const router = new Router({ + routes, + mode: 'history' +}); + +const originalPush = Router.prototype.push; + +Router.prototype.push = function push(location) { + return originalPush.call(this, location).catch(err => err); +} + +router.beforeEach((to, from, next) => { + next(); +}); + +export default router; \ No newline at end of file diff --git a/packageship/web-ui/src/router/routers.js b/packageship/web-ui/src/router/routers.js new file mode 100644 index 0000000000000000000000000000000000000000..ddaef75d87487ef48386f00cca59f9ac770f8120 --- /dev/null +++ b/packageship/web-ui/src/router/routers.js @@ -0,0 +1,17 @@ +/** + * @file 路由配置文件 + * */ + +export default [{ + path: '/', + component: () => import('@/views/home/home.vue') + }, + { + path: '/package-detail', + component: () => import('@/views/package/package-detail.vue') + }, + { + path: '*', + component: () => import('@/views/404.vue') + } +]; \ No newline at end of file diff --git a/packageship/web-ui/src/views/404.vue b/packageship/web-ui/src/views/404.vue new file mode 100644 index 0000000000000000000000000000000000000000..4c4f2f480288f33226b32e0353c7c2ac0270665f --- /dev/null +++ b/packageship/web-ui/src/views/404.vue @@ -0,0 +1,11 @@ + + + diff --git a/packageship/web-ui/src/views/home/depend-info.vue b/packageship/web-ui/src/views/home/depend-info.vue new file mode 100644 index 0000000000000000000000000000000000000000..119fc428008a739ec4e531d839145eb500b6d14e --- /dev/null +++ b/packageship/web-ui/src/views/home/depend-info.vue @@ -0,0 +1,111 @@ + + + + + \ No newline at end of file diff --git a/packageship/web-ui/src/views/home/home.vue b/packageship/web-ui/src/views/home/home.vue new file mode 100644 index 0000000000000000000000000000000000000000..fa2dde52d8af58da20a55aa4027c7fd7e82bf317 --- /dev/null +++ b/packageship/web-ui/src/views/home/home.vue @@ -0,0 +1,105 @@ + + + + + + + diff --git a/packageship/web-ui/src/views/home/issue-list.vue b/packageship/web-ui/src/views/home/issue-list.vue new file mode 100644 index 0000000000000000000000000000000000000000..9768781273525c86ee00fdcc40134ca46edad633 --- /dev/null +++ b/packageship/web-ui/src/views/home/issue-list.vue @@ -0,0 +1,284 @@ + + + + + \ No newline at end of file diff --git a/packageship/web-ui/src/views/home/package-info.vue b/packageship/web-ui/src/views/home/package-info.vue new file mode 100644 index 0000000000000000000000000000000000000000..0295e226abea0abdf4244a93d5cfacf24bbc8406 --- /dev/null +++ b/packageship/web-ui/src/views/home/package-info.vue @@ -0,0 +1,543 @@ + + + + + + \ No newline at end of file diff --git a/packageship/web-ui/src/views/package/package-detail.vue b/packageship/web-ui/src/views/package/package-detail.vue new file mode 100644 index 0000000000000000000000000000000000000000..26b43986927706eea9b756d227c7fc1f1d1a6064 --- /dev/null +++ b/packageship/web-ui/src/views/package/package-detail.vue @@ -0,0 +1,245 @@ + + + + + \ No newline at end of file diff --git a/packageship/web-ui/vue.config.js b/packageship/web-ui/vue.config.js new file mode 100644 index 0000000000000000000000000000000000000000..b3544cf46b1e9525c01a304e5826cec8a0c77eb4 --- /dev/null +++ b/packageship/web-ui/vue.config.js @@ -0,0 +1,49 @@ +/** + * @file vue构建相关配置文件 + * */ + +const path = require('path'); + +const resolve = dir => { + return path.join(__dirname, dir); +}; + +const BASE_URL = process.env.NODE_ENV === 'production' ? '/' : '/'; + +module.exports = { + publicPath: BASE_URL, + + pluginOptions: { + 'style-resources-loader': { + preProcessor: 'less', + patterns: [ + path.resolve(__dirname, './src/assets/style/vars.less') + ] + } + }, + + chainWebpack: config => { + config.resolve.alias + .set('@', resolve('src')) + .set('_c', resolve('src/components')) + .set('_libs', resolve('src/libs')); + }, + + // 设为false打包时不生成.map文件 + productionSourceMap: false, + + // 这里写你调用接口的基础路径,来解决跨域,如果设置了代理,那你本地开发环境的axios的baseUrl要写为 '' ,即空字符串 + devServer: { + proxy: { + '/api': { + target: 'https://api.openeuler.org/pkgmanagedebug/', + ws: true, + changeOrigin: true, + pathRewrite: { + '^/api': '' + } + } + } + + } +}; \ No newline at end of file