diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..7c6d1e0 --- /dev/null +++ b/.env.production @@ -0,0 +1,8 @@ +ENV = 'production' + +# 如果使用 Nginx 代理后端接口,那么此处需要改为 '/',文件查看 Docker 部署篇,Nginx 配置 +# 接口地址,注意协议,如果你没有配置 ssl,需要将 https 改为 http + +VUE_APP_BASE_API = 'http://192.168.3.220:12010' +# 如果接口是 http 形式, wss 需要改为 ws +VUE_APP_WS_API = 'ws://192.168.3.220:12011' diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..187c448 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,197 @@ +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module' + }, + env: { + browser: true, + node: true, + es6: true, + }, + extends: ['plugin:vue/recommended', 'eslint:recommended'], + + + rules: { + "vue/max-attributes-per-line": [2, { + "singleline": 10, + "multiline": { + "max": 1, + "allowFirstLine": false + } + }], + "vue/singleline-html-element-content-newline": "off", + "vue/multiline-html-element-content-newline":"off", + "vue/name-property-casing": ["error", "PascalCase"], + "vue/no-v-html": "off", + 'accessor-pairs': 2, + 'arrow-spacing': [2, { + 'before': true, + 'after': true + }], + 'block-spacing': [2, 'always'], + 'brace-style': [2, '1tbs', { + 'allowSingleLine': true + }], + 'camelcase': [0, { + 'properties': 'always' + }], + 'comma-dangle': [2, 'never'], + 'comma-spacing': [2, { + 'before': false, + 'after': true + }], + 'comma-style': [2, 'last'], + 'constructor-super': 2, + 'curly': [2, 'multi-line'], + 'dot-location': [2, 'property'], + 'eol-last': 2, + 'eqeqeq': ["error", "always", {"null": "ignore"}], + 'generator-star-spacing': [2, { + 'before': true, + 'after': true + }], + 'handle-callback-err': [2, '^(err|error)$'], + 'indent': [2, 2, { + 'SwitchCase': 1 + }], + 'jsx-quotes': [2, 'prefer-single'], + 'key-spacing': [2, { + 'beforeColon': false, + 'afterColon': true + }], + 'keyword-spacing': [2, { + 'before': true, + 'after': true + }], + 'new-cap': [2, { + 'newIsCap': true, + 'capIsNew': false + }], + 'new-parens': 2, + 'no-array-constructor': 2, + 'no-caller': 2, + 'no-console': 'off', + 'no-class-assign': 2, + 'no-cond-assign': 2, + 'no-const-assign': 2, + 'no-control-regex': 0, + 'no-delete-var': 2, + 'no-dupe-args': 2, + 'no-dupe-class-members': 2, + 'no-dupe-keys': 2, + 'no-duplicate-case': 2, + 'no-empty-character-class': 2, + 'no-empty-pattern': 2, + 'no-eval': 2, + 'no-ex-assign': 2, + 'no-extend-native': 2, + 'no-extra-bind': 2, + 'no-extra-boolean-cast': 2, + 'no-extra-parens': [2, 'functions'], + 'no-fallthrough': 2, + 'no-floating-decimal': 2, + 'no-func-assign': 2, + 'no-implied-eval': 2, + 'no-inner-declarations': [2, 'functions'], + 'no-invalid-regexp': 2, + 'no-irregular-whitespace': 2, + 'no-iterator': 2, + 'no-label-var': 2, + 'no-labels': [2, { + 'allowLoop': false, + 'allowSwitch': false + }], + 'no-lone-blocks': 2, + 'no-mixed-spaces-and-tabs': 2, + 'no-multi-spaces': 2, + 'no-multi-str': 2, + 'no-multiple-empty-lines': [2, { + 'max': 1 + }], + 'no-native-reassign': 2, + 'no-negated-in-lhs': 2, + 'no-new-object': 2, + 'no-new-require': 2, + 'no-new-symbol': 2, + 'no-new-wrappers': 2, + 'no-obj-calls': 2, + 'no-octal': 2, + 'no-octal-escape': 2, + 'no-path-concat': 2, + 'no-proto': 2, + 'no-redeclare': 2, + 'no-regex-spaces': 2, + 'no-return-assign': [2, 'except-parens'], + 'no-self-assign': 2, + 'no-self-compare': 2, + 'no-sequences': 2, + 'no-shadow-restricted-names': 2, + 'no-spaced-func': 2, + 'no-sparse-arrays': 2, + 'no-this-before-super': 2, + 'no-throw-literal': 2, + 'no-trailing-spaces': 2, + 'no-undef': 2, + 'no-undef-init': 2, + 'no-unexpected-multiline': 2, + 'no-unmodified-loop-condition': 2, + 'no-unneeded-ternary': [2, { + 'defaultAssignment': false + }], + 'no-unreachable': 2, + 'no-unsafe-finally': 2, + 'no-unused-vars': [2, { + 'vars': 'all', + 'args': 'none' + }], + 'no-useless-call': 2, + 'no-useless-computed-key': 2, + 'no-useless-constructor': 2, + 'no-useless-escape': 0, + 'no-whitespace-before-property': 2, + 'no-with': 2, + 'one-var': [2, { + 'initialized': 'never' + }], + 'operator-linebreak': [2, 'after', { + 'overrides': { + '?': 'before', + ':': 'before' + } + }], + 'padded-blocks': [2, 'never'], + 'quotes': [2, 'single', { + 'avoidEscape': true, + 'allowTemplateLiterals': true + }], + 'semi': [2, 'never'], + 'semi-spacing': [2, { + 'before': false, + 'after': true + }], + 'space-before-blocks': [2, 'always'], + 'space-before-function-paren': [2, 'never'], + 'space-in-parens': [2, 'never'], + 'space-infix-ops': 2, + 'space-unary-ops': [2, { + 'words': true, + 'nonwords': false + }], + 'spaced-comment': [2, 'always', { + 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] + }], + 'template-curly-spacing': [2, 'never'], + 'use-isnan': 2, + 'valid-typeof': 2, + 'wrap-iife': [2, 'any'], + 'yield-star-spacing': [2, 'both'], + 'yoda': [2, 'never'], + 'prefer-const': 2, + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, + 'object-curly-spacing': [2, 'always', { + objectsInObjects: false + }], + 'array-bracket-spacing': [2, 'never'] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ef4e647 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules +dist/ + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +package-lock.json \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..1cb8126 --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +江夏区图书馆自助查询机 + +```bash +# install dependency +npm install + +# develop +npm run serve + +# 构建生产环境 +npm run build + +``` +```bash +## 项目结构 +├── src # 源代码 +│ ├── api # 所有请求 +│ ├── assets # 主题 字体等静态资源 +│ ├── router # 路由 +│ ├── views # views 所有页面 +│ │ ├── module +│ │ ├── index # 首页 +│ ├── App.vue # 入口页面 +│ ├── main.js # 入口文件 加载组件 初始化等 注意:Vue.prototype.libcode使用 +├── .env.xxx # 环境变量配置 +├── .eslintrc.js # eslint 配置项 +├── .babelrc # babel-loader 配置 +├── .travis.yml # 自动化CI配置 +├── vue.config.js # vue-cli 配置 +├── postcss.config.js # postcss 配置 +└── package.json # package.json +``` \ No newline at end of file diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..e0c4c46 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,11 @@ +const plugins = ['@vue/babel-plugin-transform-vue-jsx', '@babel/plugin-proposal-optional-chaining', '@babel/plugin-proposal-nullish-coalescing-operator'] +// 生产环境移除console +if (process.env.NODE_ENV === 'production') { + plugins.push('transform-remove-console') +} +module.exports = { + plugins: plugins, + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..9731b66 --- /dev/null +++ b/package.json @@ -0,0 +1,57 @@ +{ + "name": "intelligence-inquiry-machine", + "version": "1.0.0", + "description": "江夏区图书馆自助查询机", + "scripts": { + "serve": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve", + "build": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "@babel/core": "^7.19.0", + "@babel/preset-env": "^7.19.0", + "@jiaminghi/data-view": "^2.7.3", + "@types/echarts": "^4.4.3", + "axios": "^0.27.2", + "core-js": "^3.6.4", + "echarts": "^4.6.0", + "element-ui": "^2.15.9", + "fabric": "2.5", + "swiper": "^8.4.2", + "vue": "^2.6.11", + "vue-awesome": "^4.0.2", + "vue-awesome-swiper": "^3.1.3", + "vue-router": "^3.1.5", + "vuex": "^3.1.2" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "^4.2.0", + "@vue/cli-plugin-eslint": "^4.2.0", + "@vue/cli-service": "^4.2.0", + "babel-eslint": "^10.0.3", + "babel-plugin-transform-remove-console": "^6.9.4", + "eslint": "^6.7.2", + "eslint-plugin-vue": "^6.1.2", + "sass": "^1.25.0", + "sass-loader": "^8.0.2", + "vue-template-compiler": "^2.6.11" + }, + "eslintConfig": { + "root": true, + "env": { + "node": true + }, + "extends": [ + "plugin:vue/essential", + "eslint:recommended" + ], + "parserOptions": { + "parser": "babel-eslint" + }, + "rules": {} + }, + "browserslist": [ + "> 1%", + "last 2 versions" + ] +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..7ee158c --- /dev/null +++ b/public/index.html @@ -0,0 +1,19 @@ + + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + + +
+ + + diff --git a/public/static/config.js b/public/static/config.js new file mode 100644 index 0000000..59099bb --- /dev/null +++ b/public/static/config.js @@ -0,0 +1,4 @@ +window.g = { + AXIOS_TIMEOUT: 10000, + ApiUrl: 'http://192.168.3.220:12010' // 配置服务器地址 +} diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..f26dc75 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,16 @@ + + + diff --git a/src/api/inquiryMachine.js b/src/api/inquiryMachine.js new file mode 100644 index 0000000..adf5008 --- /dev/null +++ b/src/api/inquiryMachine.js @@ -0,0 +1,130 @@ +import request from '@/utils/request' +import qs from 'qs' + +// 根据题名著者出版社ISBN查询图书 +export function FetchFindBooksByQuery(params) { + return request({ + url: 'api/queryDeviceAPI/findBooksByQuery' + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} + +// 获取热搜词 +export function FetchFindHotSearch(params) { + return request({ + url: 'api/queryDeviceAPI/findHotSearch' + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} + +// 初始化盘点概况 +export function FetchInitStockInfo(params) { + return request({ + url: 'api/queryDeviceAPI/initStockInfo' + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} + +// 根据机构代码获取楼层列表 +export function FetchLibraryFloorListByFondsNo(params) { + return request({ + url: 'api/queryDeviceAPI/getLibraryFloorListByFondsNo' + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} + +// 根据楼层获取区域列表 +export function FetchRegionListByFloorId(params) { + return request({ + url: 'api/queryDeviceAPI/getRegionListByFloorId' + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} + +// 根据区域获取书架列表 +export function FetchShelfListByRegionId(params) { + return request({ + url: 'api/queryDeviceAPI/getShelfListByRegionId' + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} + +// 书架列表 +export function FetchBookShelfDetails(params) { + return request({ + url: 'api/queryDeviceAPI/getBookShelfDetails' + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} + +// 根据书架查看所有层架位 +export function FetchShelfGridAllByShelfIdText(params) { + return request({ + url: 'api/queryDeviceAPI/getShelfGridAllByShelfIdText' + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} + +// 根据书架查看所有层架位(参与盘点) +export function FetchShelfGridAllByShelfId(params) { + return request({ + url: 'api/queryDeviceAPI/getShelfGridAllByShelfId' + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} + +// 根据层架位id获取架位图书 +export function FetchInitBookDetailsByGrids(params) { + return request({ + url: 'api/queryDeviceAPI/initBookDetailsByGrids' + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} + +// 图书详情 +export function FetchInitBookDetailsSearchInto(params) { + return request({ + url: 'api/queryDeviceAPI/initBookDetailsSearchInto' + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} + +// 初始化热门图书 +export function FetchInitHotBookList(params) { + return request({ + url: 'api/queryDeviceAPI/initHotBookList' + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} + +// 初始化热门架位 +export function FetchInitHotShelfList(params) { + return request({ + url: 'api/queryDeviceAPI/initHotShelfList' + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} + +// 根据bookRecNo查看图书详细信息 +export function FetchBookDetaisByBookRecNo(params) { + return request({ + url: 'api/queryDeviceAPI/getBookDetaisByBookRecNo' + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} + +export default { + FetchFindBooksByQuery, + FetchInitStockInfo, + FetchFindHotSearch, + FetchLibraryFloorListByFondsNo, + FetchRegionListByFloorId, + FetchShelfListByRegionId, + FetchBookShelfDetails, + FetchShelfGridAllByShelfIdText, + FetchShelfGridAllByShelfId, + FetchInitBookDetailsByGrids, + FetchInitHotBookList, + FetchInitHotShelfList, + FetchBookDetaisByBookRecNo +} diff --git a/src/assets/fonts/HuXiaoBoNanShenTi.otf b/src/assets/fonts/HuXiaoBoNanShenTi.otf new file mode 100644 index 0000000..4cdf94c Binary files /dev/null and b/src/assets/fonts/HuXiaoBoNanShenTi.otf differ diff --git a/src/assets/fonts/YouSheBiaoTiHei.ttf b/src/assets/fonts/YouSheBiaoTiHei.ttf new file mode 100644 index 0000000..3729151 Binary files /dev/null and b/src/assets/fonts/YouSheBiaoTiHei.ttf differ diff --git a/src/assets/fonts/ZhenyanGB.ttf b/src/assets/fonts/ZhenyanGB.ttf new file mode 100644 index 0000000..207e103 Binary files /dev/null and b/src/assets/fonts/ZhenyanGB.ttf differ diff --git a/src/assets/fonts/fonts.css b/src/assets/fonts/fonts.css new file mode 100644 index 0000000..6d695c6 --- /dev/null +++ b/src/assets/fonts/fonts.css @@ -0,0 +1,19 @@ +@font-face { + font-family: "ZhenyanGB"; + src: url('ZhenyanGB.ttf'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: "YouSheBiaoTiHei"; + src: url('YouSheBiaoTiHei.ttf'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: "HuXiaoBoNanShenTi"; + src: url('HuXiaoBoNanShenTi.otf'); + font-weight: normal; + font-style: normal; +} \ No newline at end of file diff --git a/src/assets/iconfont/iconfont.css b/src/assets/iconfont/iconfont.css new file mode 100644 index 0000000..3e6f252 --- /dev/null +++ b/src/assets/iconfont/iconfont.css @@ -0,0 +1,627 @@ +@font-face { + font-family: "iconfont"; /* Project id 3966148 */ + src: url('iconfont.woff2?t=1736498949884') format('woff2'), + url('iconfont.woff?t=1736498949884') format('woff'), + url('iconfont.ttf?t=1736498949884') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-zhongduanjiankong:before { + content: "\e691"; +} + +.icon-lianjieduankai:before { + content: "\e600"; +} + +.icon-stop:before { + content: "\e714"; +} + +.icon-zhuangtai1:before { + content: "\e690"; +} + +.icon-zhuangtai2:before { + content: "\e6bc"; +} + +.icon-biaoqian:before { + content: "\e693"; +} + +.icon-_biaoqian-:before { + content: "\e68f"; +} + +.icon-shuju:before { + content: "\e68e"; +} + +.icon-duolouceng:before { + content: "\e87c"; +} + +.icon-shujia:before { + content: "\e68c"; +} + +.icon-hangzhengquyuguanli:before { + content: "\e68d"; +} + +.icon-quyu1:before { + content: "\e68b"; +} + +.icon-gongsi:before { + content: "\e689"; +} + +.icon-louceng:before { + content: "\e68a"; +} + +.icon-wodeshujia:before { + content: "\e688"; +} + +.icon-ceshi:before { + content: "\e687"; +} + +.icon-yuanchengkongzhi:before { + content: "\e7d4"; +} + +.icon-attachment:before { + content: "\e6a9"; +} + +.icon-zhuti:before { + content: "\e686"; +} + +.icon-gengduo:before { + content: "\e670"; +} + +.icon-huoqu:before { + content: "\e674"; +} + +.icon-dayin:before { + content: "\e67b"; +} + +.icon-guaqi:before { + content: "\e67c"; +} + +.icon-dangantongji:before { + content: "\e685"; +} + +.icon-sulan:before { + content: "\e63b"; +} + +.icon-jiesuan:before { + content: "\e649"; +} + +.icon-rengongqueren:before { + content: "\e659"; +} + +.icon-shengchengpandiandan:before { + content: "\e663"; +} + +.icon-yijiao:before { + content: "\e669"; +} + +.icon-shanchu1:before { + content: "\e66f"; +} + +.icon-jiarujieyueche:before { + content: "\e67d"; +} + +.icon-liuchengfaqi:before { + content: "\e67e"; +} + +.icon-cuowu1:before { + content: "\e67f"; +} + +.icon-danganliyong:before { + content: "\e680"; +} + +.icon-fou:before { + content: "\e681"; +} + +.icon-shi:before { + content: "\e682"; +} + +.icon-dengdai:before { + content: "\e683"; +} + +.icon-jieyueche-ding:before { + content: "\e684"; +} + +.icon-ruku:before { + content: "\e671"; +} + +.icon-yulan:before { + content: "\e672"; +} + +.icon-chuku:before { + content: "\e673"; +} + +.icon-mijijia:before { + content: "\e675"; +} + +.icon-shuaxin:before { + content: "\e676"; +} + +.icon-bangding:before { + content: "\e677"; +} + +.icon-quyu:before { + content: "\e678"; +} + +.icon-shebei:before { + content: "\e679"; +} + +.icon-danganbaoguan-fanbai:before { + content: "\e67a"; +} + +.icon-kufang:before { + content: "\e667"; +} + +.icon-chaihe:before { + content: "\e668"; +} + +.icon-zishebeiguanli:before { + content: "\e66a"; +} + +.icon-zidonggengxin:before { + content: "\e66b"; +} + +.icon-jiebang:before { + content: "\e66c"; +} + +.icon-you-fanbai:before { + content: "\e66d"; +} + +.icon-zuo-fanbai:before { + content: "\e66e"; +} + +.icon-duqu:before { + content: "\e664"; +} + +.icon-chexiao:before { + content: "\e665"; +} + +.icon-zhuanghe:before { + content: "\e666"; +} + +.icon-danganguanli-fanbai:before { + content: "\e662"; +} + +.icon-gengduo2:before { + content: "\e661"; +} + +.icon-gengduo1:before { + content: "\e660"; +} + +.icon-wancheng:before { + content: "\e65f"; +} + +.icon-zhengque:before { + content: "\e653"; +} + +.icon-cuowu:before { + content: "\e654"; +} + +.icon-huifu:before { + content: "\e655"; +} + +.icon-dian2:before { + content: "\e656"; +} + +.icon-dian:before { + content: "\e657"; +} + +.icon-shangchuanchenggong:before { + content: "\e658"; +} + +.icon-shangchuanshibai:before { + content: "\e65a"; +} + +.icon-xiaowenjian:before { + content: "\e65b"; +} + +.icon-bendiguajie:before { + content: "\e65c"; +} + +.icon-zhongxinjiance:before { + content: "\e65d"; +} + +.icon-tianjiawenjian:before { + content: "\e65e"; +} + +.icon-shangchuan2:before { + content: "\e650"; +} + +.icon-a-1:before { + content: "\e64f"; +} + +.icon-a-2:before { + content: "\e651"; +} + +.icon-xiazai:before { + content: "\e652"; +} + +.icon-zhengli:before { + content: "\e64e"; +} + +.icon-changgui:before { + content: "\e64d"; +} + +.icon-yuguidangku:before { + content: "\e64b"; +} + +.icon-shoujizhengbian:before { + content: "\e64c"; +} + +.icon-yidong:before { + content: "\e645"; +} + +.icon-piliangchengjian:before { + content: "\e646"; +} + +.icon-hebingchengjian:before { + content: "\e647"; +} + +.icon-danganfenlei:before { + content: "\e648"; +} + +.icon-fenlei:before { + content: "\e64a"; +} + +.icon-tupianyulan:before { + content: "\e644"; +} + +.icon-fabu:before { + content: "\e643"; +} + +.icon-jihuo:before { + content: "\e63d"; +} + +.icon-xiala-shouqi:before { + content: "\e63e"; +} + +.icon-xiala-chakanxinxi:before { + content: "\e63f"; +} + +.icon-chakan:before { + content: "\e640"; +} + +.icon-jiazaigengduo:before { + content: "\e641"; +} + +.icon-quanbuyidu:before { + content: "\e642"; +} + +.icon-shangchuan:before { + content: "\e62b"; +} + +.icon-yonghuyouxiang:before { + content: "\e635"; +} + +.icon-yonghuming:before { + content: "\e636"; +} + +.icon-suoshubumen:before { + content: "\e637"; +} + +.icon-suoshuquanzong:before { + content: "\e638"; +} + +.icon-shoujihaoma:before { + content: "\e639"; +} + +.icon-yonghujiaose:before { + content: "\e63a"; +} + +.icon-xingbie:before { + content: "\e63c"; +} + +.icon-dianzibiao:before { + content: "\e623"; +} + +.icon-yonghuguanli:before { + content: "\e624"; +} + +.icon-danganjieshou:before { + content: "\e625"; +} + +.icon-xitongshezhi2:before { + content: "\e626"; +} + +.icon-danganguanli:before { + content: "\e627"; +} + +.icon-yucundangguanli:before { + content: "\e628"; +} + +.icon-paixu-xia:before { + content: "\e629"; +} + +.icon-paixu-caozuo:before { + content: "\e62a"; +} + +.icon-paixu-shang:before { + content: "\e62c"; +} + +.icon-xinzeng:before { + content: "\e62d"; +} + +.icon-bianji:before { + content: "\e62e"; +} + +.icon-shezhi:before { + content: "\e62f"; +} + +.icon-kuaisushezhi:before { + content: "\e630"; +} + +.icon-shanchu:before { + content: "\e631"; +} + +.icon-paixu:before { + content: "\e632"; +} + +.icon-daochu:before { + content: "\e633"; +} + +.icon-zhongzhi2:before { + content: "\e634"; +} + +.icon-rili:before { + content: "\e604"; +} + +.icon-shouye:before { + content: "\e605"; +} + +.icon-xitongshezhi:before { + content: "\e606"; +} + +.icon-shouqi:before { + content: "\e607"; +} + +.icon-xiala-fanbai:before { + content: "\e608"; +} + +.icon-xiala:before { + content: "\e609"; +} + +.icon-zhuangtai:before { + content: "\e60a"; +} + +.icon-xiaoxi:before { + content: "\e60b"; +} + +.icon-zhongzhi:before { + content: "\e60c"; +} + +.icon-xiala-xia:before { + content: "\e60d"; +} + +.icon-xiala-you:before { + content: "\e60e"; +} + +.icon-xiala-shang:before { + content: "\e60f"; +} + +.icon-kuangxuan-jinyong2:before { + content: "\e610"; +} + +.icon-kuangxuan-xuanze:before { + content: "\e611"; +} + +.icon-kuangxuan-moren:before { + content: "\e612"; +} + +.icon-kuangxuan-jinyong1:before { + content: "\e613"; +} + +.icon-weizhi-copy:before { + content: "\e7d5"; +} + +.icon-xuanzhong:before { + content: "\e614"; +} + +.icon-weixuan:before { + content: "\e615"; +} + +.icon-sousuo:before { + content: "\e616"; +} + +.icon-guan:before { + content: "\e617"; +} + +.icon-kai:before { + content: "\e618"; +} + +.icon-weizhi:before { + content: "\e619"; +} + +.icon-biaoji:before { + content: "\e61a"; +} + +.icon-guanbixiao:before { + content: "\e61b"; +} + +.icon-guanbi:before { + content: "\e61c"; +} + +.icon-zhuyi-hong:before { + content: "\e61d"; +} + +.icon-zhuyi-lan:before { + content: "\e61e"; +} + +.icon-zhuyi-hong-xiao:before { + content: "\e61f"; +} + +.icon-wenjian-xiao:before { + content: "\e620"; +} + +.icon-wenjian-da:before { + content: "\e621"; +} + +.icon-dangan:before { + content: "\e622"; +} + +.icon-yanzhengma:before { + content: "\e602"; +} + +.icon-mima:before { + content: "\e603"; +} + +.icon-zhanghao:before { + content: "\e601"; +} + diff --git a/src/assets/iconfont/iconfont.js b/src/assets/iconfont/iconfont.js new file mode 100644 index 0000000..be5617b --- /dev/null +++ b/src/assets/iconfont/iconfont.js @@ -0,0 +1 @@ +window._iconfont_svg_string_3966148='',(c=>{var a=(l=(l=document.getElementsByTagName("script"))[l.length-1]).getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var h,i,o,t,s,z=function(a,l){l.parentNode.insertBefore(a,l)};if(a&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}h=function(){var a,l=document.createElement("div");l.innerHTML=c._iconfont_svg_string_3966148,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(a=document.body).firstChild?z(l,a.firstChild):a.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(i=function(){document.removeEventListener("DOMContentLoaded",i,!1),h()},document.addEventListener("DOMContentLoaded",i,!1)):document.attachEvent&&(o=h,t=c.document,s=!1,p(),t.onreadystatechange=function(){"complete"==t.readyState&&(t.onreadystatechange=null,v())})}function v(){s||(s=!0,o())}function p(){try{t.documentElement.doScroll("left")}catch(a){return void setTimeout(p,50)}v()}})(window); \ No newline at end of file diff --git a/src/assets/iconfont/iconfont.json b/src/assets/iconfont/iconfont.json new file mode 100644 index 0000000..a60bbcd --- /dev/null +++ b/src/assets/iconfont/iconfont.json @@ -0,0 +1,1080 @@ +{ + "id": "3966148", + "name": "阅行客-电子档案管理xit", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "18610501", + "name": "终端监控", + "font_class": "zhongduanjiankong", + "unicode": "e691", + "unicode_decimal": 59025 + }, + { + "icon_id": "10596948", + "name": "链接断开", + "font_class": "lianjieduankai", + "unicode": "e600", + "unicode_decimal": 58880 + }, + { + "icon_id": "10014347", + "name": "终止", + "font_class": "stop", + "unicode": "e714", + "unicode_decimal": 59156 + }, + { + "icon_id": "13446589", + "name": "状态", + "font_class": "zhuangtai1", + "unicode": "e690", + "unicode_decimal": 59024 + }, + { + "icon_id": "18916458", + "name": "状态", + "font_class": "zhuangtai2", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "4487893", + "name": "标签", + "font_class": "biaoqian", + "unicode": "e693", + "unicode_decimal": 59027 + }, + { + "icon_id": "6796688", + "name": "2_标签-06", + "font_class": "_biaoqian-", + "unicode": "e68f", + "unicode_decimal": 59023 + }, + { + "icon_id": "15392667", + "name": "数据", + "font_class": "shuju", + "unicode": "e68e", + "unicode_decimal": 59022 + }, + { + "icon_id": "10767710", + "name": "多楼层", + "font_class": "duolouceng", + "unicode": "e87c", + "unicode_decimal": 59516 + }, + { + "icon_id": "16328040", + "name": "书架", + "font_class": "shujia", + "unicode": "e68c", + "unicode_decimal": 59020 + }, + { + "icon_id": "23855671", + "name": "行政区域管理", + "font_class": "hangzhengquyuguanli", + "unicode": "e68d", + "unicode_decimal": 59021 + }, + { + "icon_id": "24272021", + "name": "区域", + "font_class": "quyu1", + "unicode": "e68b", + "unicode_decimal": 59019 + }, + { + "icon_id": "6901606", + "name": "公司", + "font_class": "gongsi", + "unicode": "e689", + "unicode_decimal": 59017 + }, + { + "icon_id": "7032903", + "name": "楼层", + "font_class": "louceng", + "unicode": "e68a", + "unicode_decimal": 59018 + }, + { + "icon_id": "15085894", + "name": "我的书架", + "font_class": "wodeshujia", + "unicode": "e688", + "unicode_decimal": 59016 + }, + { + "icon_id": "18585490", + "name": "数据测试名称", + "font_class": "ceshi", + "unicode": "e687", + "unicode_decimal": 59015 + }, + { + "icon_id": "30849212", + "name": "远程控制", + "font_class": "yuanchengkongzhi", + "unicode": "e7d4", + "unicode_decimal": 59348 + }, + { + "icon_id": "265327", + "name": "附件", + "font_class": "attachment", + "unicode": "e6a9", + "unicode_decimal": 59049 + }, + { + "icon_id": "1263393", + "name": "主题", + "font_class": "zhuti", + "unicode": "e686", + "unicode_decimal": 59014 + }, + { + "icon_id": "38782218", + "name": "更多", + "font_class": "gengduo", + "unicode": "e670", + "unicode_decimal": 58992 + }, + { + "icon_id": "38782217", + "name": "获取", + "font_class": "huoqu", + "unicode": "e674", + "unicode_decimal": 58996 + }, + { + "icon_id": "38782216", + "name": "打印", + "font_class": "dayin", + "unicode": "e67b", + "unicode_decimal": 59003 + }, + { + "icon_id": "38782215", + "name": "挂起", + "font_class": "guaqi", + "unicode": "e67c", + "unicode_decimal": 59004 + }, + { + "icon_id": "38782214", + "name": "档案统计", + "font_class": "dangantongji", + "unicode": "e685", + "unicode_decimal": 59013 + }, + { + "icon_id": "38782220", + "name": "速览", + "font_class": "sulan", + "unicode": "e63b", + "unicode_decimal": 58939 + }, + { + "icon_id": "38782223", + "name": "结算", + "font_class": "jiesuan", + "unicode": "e649", + "unicode_decimal": 58953 + }, + { + "icon_id": "38782224", + "name": "人工确认", + "font_class": "rengongqueren", + "unicode": "e659", + "unicode_decimal": 58969 + }, + { + "icon_id": "38782222", + "name": "生成盘点单", + "font_class": "shengchengpandiandan", + "unicode": "e663", + "unicode_decimal": 58979 + }, + { + "icon_id": "38782221", + "name": "移交", + "font_class": "yijiao", + "unicode": "e669", + "unicode_decimal": 58985 + }, + { + "icon_id": "38782219", + "name": "删除", + "font_class": "shanchu1", + "unicode": "e66f", + "unicode_decimal": 58991 + }, + { + "icon_id": "38402334", + "name": "加入借阅车", + "font_class": "jiarujieyueche", + "unicode": "e67d", + "unicode_decimal": 59005 + }, + { + "icon_id": "38402333", + "name": "流程发起", + "font_class": "liuchengfaqi", + "unicode": "e67e", + "unicode_decimal": 59006 + }, + { + "icon_id": "38402329", + "name": "错误", + "font_class": "cuowu1", + "unicode": "e67f", + "unicode_decimal": 59007 + }, + { + "icon_id": "38402332", + "name": "档案利用", + "font_class": "danganliyong", + "unicode": "e680", + "unicode_decimal": 59008 + }, + { + "icon_id": "38402331", + "name": "否", + "font_class": "fou", + "unicode": "e681", + "unicode_decimal": 59009 + }, + { + "icon_id": "38402327", + "name": "是", + "font_class": "shi", + "unicode": "e682", + "unicode_decimal": 59010 + }, + { + "icon_id": "38402328", + "name": "等待", + "font_class": "dengdai", + "unicode": "e683", + "unicode_decimal": 59011 + }, + { + "icon_id": "38402330", + "name": "借阅车-顶", + "font_class": "jieyueche-ding", + "unicode": "e684", + "unicode_decimal": 59012 + }, + { + "icon_id": "37827791", + "name": "入库", + "font_class": "ruku", + "unicode": "e671", + "unicode_decimal": 58993 + }, + { + "icon_id": "37827792", + "name": "预览", + "font_class": "yulan", + "unicode": "e672", + "unicode_decimal": 58994 + }, + { + "icon_id": "37827785", + "name": "出库", + "font_class": "chuku", + "unicode": "e673", + "unicode_decimal": 58995 + }, + { + "icon_id": "37827788", + "name": "密集架", + "font_class": "mijijia", + "unicode": "e675", + "unicode_decimal": 58997 + }, + { + "icon_id": "37827787", + "name": "刷新", + "font_class": "shuaxin", + "unicode": "e676", + "unicode_decimal": 58998 + }, + { + "icon_id": "37827786", + "name": "绑定", + "font_class": "bangding", + "unicode": "e677", + "unicode_decimal": 58999 + }, + { + "icon_id": "37827783", + "name": "区域", + "font_class": "quyu", + "unicode": "e678", + "unicode_decimal": 59000 + }, + { + "icon_id": "37827784", + "name": "设备", + "font_class": "shebei", + "unicode": "e679", + "unicode_decimal": 59001 + }, + { + "icon_id": "37827782", + "name": "档案保管-反白", + "font_class": "danganbaoguan-fanbai", + "unicode": "e67a", + "unicode_decimal": 59002 + }, + { + "icon_id": "37827801", + "name": "库房", + "font_class": "kufang", + "unicode": "e667", + "unicode_decimal": 58983 + }, + { + "icon_id": "37827795", + "name": "拆盒", + "font_class": "chaihe", + "unicode": "e668", + "unicode_decimal": 58984 + }, + { + "icon_id": "37827800", + "name": "子设备管理", + "font_class": "zishebeiguanli", + "unicode": "e66a", + "unicode_decimal": 58986 + }, + { + "icon_id": "37827797", + "name": "自动更新", + "font_class": "zidonggengxin", + "unicode": "e66b", + "unicode_decimal": 58987 + }, + { + "icon_id": "37827798", + "name": "解绑", + "font_class": "jiebang", + "unicode": "e66c", + "unicode_decimal": 58988 + }, + { + "icon_id": "37827790", + "name": "右-反白", + "font_class": "you-fanbai", + "unicode": "e66d", + "unicode_decimal": 58989 + }, + { + "icon_id": "37827793", + "name": "左-反白", + "font_class": "zuo-fanbai", + "unicode": "e66e", + "unicode_decimal": 58990 + }, + { + "icon_id": "37827672", + "name": "读取", + "font_class": "duqu", + "unicode": "e664", + "unicode_decimal": 58980 + }, + { + "icon_id": "37827670", + "name": "撤销", + "font_class": "chexiao", + "unicode": "e665", + "unicode_decimal": 58981 + }, + { + "icon_id": "37827669", + "name": "装盒", + "font_class": "zhuanghe", + "unicode": "e666", + "unicode_decimal": 58982 + }, + { + "icon_id": "37827673", + "name": "档案管理-反白", + "font_class": "danganguanli-fanbai", + "unicode": "e662", + "unicode_decimal": 58978 + }, + { + "icon_id": "37728696", + "name": "更多", + "font_class": "gengduo2", + "unicode": "e661", + "unicode_decimal": 58977 + }, + { + "icon_id": "37728681", + "name": "更多", + "font_class": "gengduo1", + "unicode": "e660", + "unicode_decimal": 58976 + }, + { + "icon_id": "36940610", + "name": "完成", + "font_class": "wancheng", + "unicode": "e65f", + "unicode_decimal": 58975 + }, + { + "icon_id": "35809396", + "name": "正确", + "font_class": "zhengque", + "unicode": "e653", + "unicode_decimal": 58963 + }, + { + "icon_id": "35809397", + "name": "错误", + "font_class": "cuowu", + "unicode": "e654", + "unicode_decimal": 58964 + }, + { + "icon_id": "35809398", + "name": "恢复", + "font_class": "huifu", + "unicode": "e655", + "unicode_decimal": 58965 + }, + { + "icon_id": "35809399", + "name": "点2", + "font_class": "dian2", + "unicode": "e656", + "unicode_decimal": 58966 + }, + { + "icon_id": "35809400", + "name": "点", + "font_class": "dian", + "unicode": "e657", + "unicode_decimal": 58967 + }, + { + "icon_id": "35809401", + "name": "上传成功", + "font_class": "shangchuanchenggong", + "unicode": "e658", + "unicode_decimal": 58968 + }, + { + "icon_id": "35809403", + "name": "上传失败", + "font_class": "shangchuanshibai", + "unicode": "e65a", + "unicode_decimal": 58970 + }, + { + "icon_id": "35809404", + "name": "小文件", + "font_class": "xiaowenjian", + "unicode": "e65b", + "unicode_decimal": 58971 + }, + { + "icon_id": "35809405", + "name": "本地挂接", + "font_class": "bendiguajie", + "unicode": "e65c", + "unicode_decimal": 58972 + }, + { + "icon_id": "35809406", + "name": "重新检测", + "font_class": "zhongxinjiance", + "unicode": "e65d", + "unicode_decimal": 58973 + }, + { + "icon_id": "35809407", + "name": "添加文件", + "font_class": "tianjiawenjian", + "unicode": "e65e", + "unicode_decimal": 58974 + }, + { + "icon_id": "35809370", + "name": "上传2", + "font_class": "shangchuan2", + "unicode": "e650", + "unicode_decimal": 58960 + }, + { + "icon_id": "35809352", + "name": "1", + "font_class": "a-1", + "unicode": "e64f", + "unicode_decimal": 58959 + }, + { + "icon_id": "35809354", + "name": "2", + "font_class": "a-2", + "unicode": "e651", + "unicode_decimal": 58961 + }, + { + "icon_id": "35809355", + "name": "下载", + "font_class": "xiazai", + "unicode": "e652", + "unicode_decimal": 58962 + }, + { + "icon_id": "35809307", + "name": "整理", + "font_class": "zhengli", + "unicode": "e64e", + "unicode_decimal": 58958 + }, + { + "icon_id": "35809305", + "name": "常规", + "font_class": "changgui", + "unicode": "e64d", + "unicode_decimal": 58957 + }, + { + "icon_id": "35809299", + "name": "预归档库", + "font_class": "yuguidangku", + "unicode": "e64b", + "unicode_decimal": 58955 + }, + { + "icon_id": "35809300", + "name": "收集整编", + "font_class": "shoujizhengbian", + "unicode": "e64c", + "unicode_decimal": 58956 + }, + { + "icon_id": "35808830", + "name": "移动", + "font_class": "yidong", + "unicode": "e645", + "unicode_decimal": 58949 + }, + { + "icon_id": "35808831", + "name": "批量成件", + "font_class": "piliangchengjian", + "unicode": "e646", + "unicode_decimal": 58950 + }, + { + "icon_id": "35808833", + "name": "合并成件", + "font_class": "hebingchengjian", + "unicode": "e647", + "unicode_decimal": 58951 + }, + { + "icon_id": "35808942", + "name": "档案分类", + "font_class": "danganfenlei", + "unicode": "e648", + "unicode_decimal": 58952 + }, + { + "icon_id": "35808945", + "name": "分类", + "font_class": "fenlei", + "unicode": "e64a", + "unicode_decimal": 58954 + }, + { + "icon_id": "35165878", + "name": "图片预览", + "font_class": "tupianyulan", + "unicode": "e644", + "unicode_decimal": 58948 + }, + { + "icon_id": "35119672", + "name": "发布", + "font_class": "fabu", + "unicode": "e643", + "unicode_decimal": 58947 + }, + { + "icon_id": "35004712", + "name": "激活", + "font_class": "jihuo", + "unicode": "e63d", + "unicode_decimal": 58941 + }, + { + "icon_id": "35004753", + "name": "下拉-收起", + "font_class": "xiala-shouqi", + "unicode": "e63e", + "unicode_decimal": 58942 + }, + { + "icon_id": "35004754", + "name": "下拉-查看信息", + "font_class": "xiala-chakanxinxi", + "unicode": "e63f", + "unicode_decimal": 58943 + }, + { + "icon_id": "35004755", + "name": "查看", + "font_class": "chakan", + "unicode": "e640", + "unicode_decimal": 58944 + }, + { + "icon_id": "35004756", + "name": "加载更多", + "font_class": "jiazaigengduo", + "unicode": "e641", + "unicode_decimal": 58945 + }, + { + "icon_id": "35004757", + "name": "全部已读", + "font_class": "quanbuyidu", + "unicode": "e642", + "unicode_decimal": 58946 + }, + { + "icon_id": "35004555", + "name": "上传", + "font_class": "shangchuan", + "unicode": "e62b", + "unicode_decimal": 58923 + }, + { + "icon_id": "35004562", + "name": "用户邮箱", + "font_class": "yonghuyouxiang", + "unicode": "e635", + "unicode_decimal": 58933 + }, + { + "icon_id": "35004563", + "name": "用户名", + "font_class": "yonghuming", + "unicode": "e636", + "unicode_decimal": 58934 + }, + { + "icon_id": "35004564", + "name": "所属部门", + "font_class": "suoshubumen", + "unicode": "e637", + "unicode_decimal": 58935 + }, + { + "icon_id": "35004565", + "name": "所属全宗", + "font_class": "suoshuquanzong", + "unicode": "e638", + "unicode_decimal": 58936 + }, + { + "icon_id": "35004566", + "name": "手机号码", + "font_class": "shoujihaoma", + "unicode": "e639", + "unicode_decimal": 58937 + }, + { + "icon_id": "35004567", + "name": "用户角色", + "font_class": "yonghujiaose", + "unicode": "e63a", + "unicode_decimal": 58938 + }, + { + "icon_id": "35004569", + "name": "性别", + "font_class": "xingbie", + "unicode": "e63c", + "unicode_decimal": 58940 + }, + { + "icon_id": "34690983", + "name": "电子表", + "font_class": "dianzibiao", + "unicode": "e623", + "unicode_decimal": 58915 + }, + { + "icon_id": "34690999", + "name": "用户管理", + "font_class": "yonghuguanli", + "unicode": "e624", + "unicode_decimal": 58916 + }, + { + "icon_id": "34691000", + "name": "档案接收", + "font_class": "danganjieshou", + "unicode": "e625", + "unicode_decimal": 58917 + }, + { + "icon_id": "34691001", + "name": "系统设置2", + "font_class": "xitongshezhi2", + "unicode": "e626", + "unicode_decimal": 58918 + }, + { + "icon_id": "34691002", + "name": "档案管理", + "font_class": "danganguanli", + "unicode": "e627", + "unicode_decimal": 58919 + }, + { + "icon_id": "34691003", + "name": "预存档管理", + "font_class": "yucundangguanli", + "unicode": "e628", + "unicode_decimal": 58920 + }, + { + "icon_id": "34691008", + "name": "排序-下", + "font_class": "paixu-xia", + "unicode": "e629", + "unicode_decimal": 58921 + }, + { + "icon_id": "34691009", + "name": "排序-操作", + "font_class": "paixu-caozuo", + "unicode": "e62a", + "unicode_decimal": 58922 + }, + { + "icon_id": "34691011", + "name": "排序-上", + "font_class": "paixu-shang", + "unicode": "e62c", + "unicode_decimal": 58924 + }, + { + "icon_id": "34691028", + "name": "新增", + "font_class": "xinzeng", + "unicode": "e62d", + "unicode_decimal": 58925 + }, + { + "icon_id": "34691029", + "name": "编辑", + "font_class": "bianji", + "unicode": "e62e", + "unicode_decimal": 58926 + }, + { + "icon_id": "34691030", + "name": "设置", + "font_class": "shezhi", + "unicode": "e62f", + "unicode_decimal": 58927 + }, + { + "icon_id": "34691031", + "name": "快速设置", + "font_class": "kuaisushezhi", + "unicode": "e630", + "unicode_decimal": 58928 + }, + { + "icon_id": "34691032", + "name": "删除", + "font_class": "shanchu", + "unicode": "e631", + "unicode_decimal": 58929 + }, + { + "icon_id": "34691039", + "name": "排序", + "font_class": "paixu", + "unicode": "e632", + "unicode_decimal": 58930 + }, + { + "icon_id": "34691040", + "name": "导出", + "font_class": "daochu", + "unicode": "e633", + "unicode_decimal": 58931 + }, + { + "icon_id": "34691041", + "name": "重置2", + "font_class": "zhongzhi2", + "unicode": "e634", + "unicode_decimal": 58932 + }, + { + "icon_id": "34690517", + "name": "日历", + "font_class": "rili", + "unicode": "e604", + "unicode_decimal": 58884 + }, + { + "icon_id": "34690518", + "name": "首页", + "font_class": "shouye", + "unicode": "e605", + "unicode_decimal": 58885 + }, + { + "icon_id": "34690519", + "name": "系统设置", + "font_class": "xitongshezhi", + "unicode": "e606", + "unicode_decimal": 58886 + }, + { + "icon_id": "34690520", + "name": "收起", + "font_class": "shouqi", + "unicode": "e607", + "unicode_decimal": 58887 + }, + { + "icon_id": "34690528", + "name": "下拉-反白", + "font_class": "xiala-fanbai", + "unicode": "e608", + "unicode_decimal": 58888 + }, + { + "icon_id": "34690529", + "name": "下拉", + "font_class": "xiala", + "unicode": "e609", + "unicode_decimal": 58889 + }, + { + "icon_id": "34690630", + "name": "状态", + "font_class": "zhuangtai", + "unicode": "e60a", + "unicode_decimal": 58890 + }, + { + "icon_id": "34690643", + "name": "消息", + "font_class": "xiaoxi", + "unicode": "e60b", + "unicode_decimal": 58891 + }, + { + "icon_id": "34690803", + "name": "重置", + "font_class": "zhongzhi", + "unicode": "e60c", + "unicode_decimal": 58892 + }, + { + "icon_id": "34690892", + "name": "下拉-下", + "font_class": "xiala-xia", + "unicode": "e60d", + "unicode_decimal": 58893 + }, + { + "icon_id": "34690893", + "name": "下拉-右", + "font_class": "xiala-you", + "unicode": "e60e", + "unicode_decimal": 58894 + }, + { + "icon_id": "34690894", + "name": "下拉-上", + "font_class": "xiala-shang", + "unicode": "e60f", + "unicode_decimal": 58895 + }, + { + "icon_id": "34690907", + "name": "框选-禁用2", + "font_class": "kuangxuan-jinyong2", + "unicode": "e610", + "unicode_decimal": 58896 + }, + { + "icon_id": "34690908", + "name": "框选-选择", + "font_class": "kuangxuan-xuanze", + "unicode": "e611", + "unicode_decimal": 58897 + }, + { + "icon_id": "34690909", + "name": "框选-默认", + "font_class": "kuangxuan-moren", + "unicode": "e612", + "unicode_decimal": 58898 + }, + { + "icon_id": "34690910", + "name": "框选-禁用1", + "font_class": "kuangxuan-jinyong1", + "unicode": "e613", + "unicode_decimal": 58899 + }, + { + "icon_id": "40682301", + "name": "位置-copy", + "font_class": "weizhi-copy", + "unicode": "e7d5", + "unicode_decimal": 59349 + }, + { + "icon_id": "34690923", + "name": "选中", + "font_class": "xuanzhong", + "unicode": "e614", + "unicode_decimal": 58900 + }, + { + "icon_id": "34690924", + "name": "未选", + "font_class": "weixuan", + "unicode": "e615", + "unicode_decimal": 58901 + }, + { + "icon_id": "34690925", + "name": "搜索", + "font_class": "sousuo", + "unicode": "e616", + "unicode_decimal": 58902 + }, + { + "icon_id": "34690926", + "name": "关", + "font_class": "guan", + "unicode": "e617", + "unicode_decimal": 58903 + }, + { + "icon_id": "34690927", + "name": "开", + "font_class": "kai", + "unicode": "e618", + "unicode_decimal": 58904 + }, + { + "icon_id": "34690928", + "name": "位置", + "font_class": "weizhi", + "unicode": "e619", + "unicode_decimal": 58905 + }, + { + "icon_id": "34690929", + "name": "标记", + "font_class": "biaoji", + "unicode": "e61a", + "unicode_decimal": 58906 + }, + { + "icon_id": "34690932", + "name": "关闭小", + "font_class": "guanbixiao", + "unicode": "e61b", + "unicode_decimal": 58907 + }, + { + "icon_id": "34690934", + "name": "关闭", + "font_class": "guanbi", + "unicode": "e61c", + "unicode_decimal": 58908 + }, + { + "icon_id": "34690941", + "name": "注意-红", + "font_class": "zhuyi-hong", + "unicode": "e61d", + "unicode_decimal": 58909 + }, + { + "icon_id": "34690942", + "name": "注意-蓝", + "font_class": "zhuyi-lan", + "unicode": "e61e", + "unicode_decimal": 58910 + }, + { + "icon_id": "34690943", + "name": "注意-红-小", + "font_class": "zhuyi-hong-xiao", + "unicode": "e61f", + "unicode_decimal": 58911 + }, + { + "icon_id": "34690966", + "name": "文件-小", + "font_class": "wenjian-xiao", + "unicode": "e620", + "unicode_decimal": 58912 + }, + { + "icon_id": "34690970", + "name": "文件-大", + "font_class": "wenjian-da", + "unicode": "e621", + "unicode_decimal": 58913 + }, + { + "icon_id": "34690973", + "name": "档案", + "font_class": "dangan", + "unicode": "e622", + "unicode_decimal": 58914 + }, + { + "icon_id": "34686145", + "name": "验证码", + "font_class": "yanzhengma", + "unicode": "e602", + "unicode_decimal": 58882 + }, + { + "icon_id": "34686146", + "name": "密码", + "font_class": "mima", + "unicode": "e603", + "unicode_decimal": 58883 + }, + { + "icon_id": "34685701", + "name": "账号", + "font_class": "zhanghao", + "unicode": "e601", + "unicode_decimal": 58881 + } + ] +} diff --git a/src/assets/iconfont/iconfont.ttf b/src/assets/iconfont/iconfont.ttf new file mode 100644 index 0000000..b39f9f4 Binary files /dev/null and b/src/assets/iconfont/iconfont.ttf differ diff --git a/src/assets/iconfont/iconfont.woff b/src/assets/iconfont/iconfont.woff new file mode 100644 index 0000000..b8a208f Binary files /dev/null and b/src/assets/iconfont/iconfont.woff differ diff --git a/src/assets/iconfont/iconfont.woff2 b/src/assets/iconfont/iconfont.woff2 new file mode 100644 index 0000000..4f0bdb3 Binary files /dev/null and b/src/assets/iconfont/iconfont.woff2 differ diff --git a/src/assets/images/bg.png b/src/assets/images/bg.png new file mode 100644 index 0000000..060422d Binary files /dev/null and b/src/assets/images/bg.png differ diff --git a/src/assets/images/border.png b/src/assets/images/border.png new file mode 100644 index 0000000..5f82484 Binary files /dev/null and b/src/assets/images/border.png differ diff --git a/src/assets/images/default-img-bg.jpg b/src/assets/images/default-img-bg.jpg new file mode 100644 index 0000000..b25ad1e Binary files /dev/null and b/src/assets/images/default-img-bg.jpg differ diff --git a/src/assets/images/default-img.png b/src/assets/images/default-img.png new file mode 100644 index 0000000..65fa757 Binary files /dev/null and b/src/assets/images/default-img.png differ diff --git a/src/assets/images/default-img22.png b/src/assets/images/default-img22.png new file mode 100644 index 0000000..048f720 Binary files /dev/null and b/src/assets/images/default-img22.png differ diff --git a/src/assets/images/img10.png b/src/assets/images/img10.png new file mode 100644 index 0000000..8618b7e Binary files /dev/null and b/src/assets/images/img10.png differ diff --git a/src/assets/images/img3.png b/src/assets/images/img3.png new file mode 100644 index 0000000..6e50e4b Binary files /dev/null and b/src/assets/images/img3.png differ diff --git a/src/assets/images/img5.png b/src/assets/images/img5.png new file mode 100644 index 0000000..4bc5d3a Binary files /dev/null and b/src/assets/images/img5.png differ diff --git a/src/assets/images/img6.png b/src/assets/images/img6.png new file mode 100644 index 0000000..25beb1c Binary files /dev/null and b/src/assets/images/img6.png differ diff --git a/src/assets/images/img7.png b/src/assets/images/img7.png new file mode 100644 index 0000000..e22df86 Binary files /dev/null and b/src/assets/images/img7.png differ diff --git a/src/assets/images/img8.png b/src/assets/images/img8.png new file mode 100644 index 0000000..57ab5cb Binary files /dev/null and b/src/assets/images/img8.png differ diff --git a/src/assets/images/img9.png b/src/assets/images/img9.png new file mode 100644 index 0000000..9500c86 Binary files /dev/null and b/src/assets/images/img9.png differ diff --git a/src/assets/images/index/320 180 down.png b/src/assets/images/index/320 180 down.png new file mode 100644 index 0000000..f436b23 Binary files /dev/null and b/src/assets/images/index/320 180 down.png differ diff --git a/src/assets/images/index/320 180 up.png b/src/assets/images/index/320 180 up.png new file mode 100644 index 0000000..2f80140 Binary files /dev/null and b/src/assets/images/index/320 180 up.png differ diff --git a/src/assets/images/index/400 620 left.png b/src/assets/images/index/400 620 left.png new file mode 100644 index 0000000..9e25608 Binary files /dev/null and b/src/assets/images/index/400 620 left.png differ diff --git a/src/assets/images/index/400 620 right.png b/src/assets/images/index/400 620 right.png new file mode 100644 index 0000000..68351c3 Binary files /dev/null and b/src/assets/images/index/400 620 right.png differ diff --git a/src/assets/images/index/760 180 down.png b/src/assets/images/index/760 180 down.png new file mode 100644 index 0000000..475efcb Binary files /dev/null and b/src/assets/images/index/760 180 down.png differ diff --git a/src/assets/images/index/760 180 up.png b/src/assets/images/index/760 180 up.png new file mode 100644 index 0000000..eb388f4 Binary files /dev/null and b/src/assets/images/index/760 180 up.png differ diff --git a/src/assets/images/index/activities.png b/src/assets/images/index/activities.png new file mode 100644 index 0000000..9d440ed Binary files /dev/null and b/src/assets/images/index/activities.png differ diff --git a/src/assets/images/index/bg.png b/src/assets/images/index/bg.png new file mode 100644 index 0000000..6fa4bd0 Binary files /dev/null and b/src/assets/images/index/bg.png differ diff --git a/src/assets/images/index/brief.png b/src/assets/images/index/brief.png new file mode 100644 index 0000000..3d942ba Binary files /dev/null and b/src/assets/images/index/brief.png differ diff --git a/src/assets/images/index/digital.png b/src/assets/images/index/digital.png new file mode 100644 index 0000000..be66dff Binary files /dev/null and b/src/assets/images/index/digital.png differ diff --git a/src/assets/images/index/guide.png b/src/assets/images/index/guide.png new file mode 100644 index 0000000..8699dda Binary files /dev/null and b/src/assets/images/index/guide.png differ diff --git a/src/assets/images/index/logo.png b/src/assets/images/index/logo.png new file mode 100644 index 0000000..8897e7e Binary files /dev/null and b/src/assets/images/index/logo.png differ diff --git a/src/assets/images/index/newbook.png b/src/assets/images/index/newbook.png new file mode 100644 index 0000000..41a671e Binary files /dev/null and b/src/assets/images/index/newbook.png differ diff --git a/src/assets/images/index/search.png b/src/assets/images/index/search.png new file mode 100644 index 0000000..3eea258 Binary files /dev/null and b/src/assets/images/index/search.png differ diff --git a/src/assets/images/index/title.png b/src/assets/images/index/title.png new file mode 100644 index 0000000..af5d270 Binary files /dev/null and b/src/assets/images/index/title.png differ diff --git a/src/assets/images/list-title.png b/src/assets/images/list-title.png new file mode 100644 index 0000000..0124410 Binary files /dev/null and b/src/assets/images/list-title.png differ diff --git a/src/assets/images/local-bg.png b/src/assets/images/local-bg.png new file mode 100644 index 0000000..a8c037f Binary files /dev/null and b/src/assets/images/local-bg.png differ diff --git a/src/assets/images/shad2.png b/src/assets/images/shad2.png new file mode 100644 index 0000000..737335f Binary files /dev/null and b/src/assets/images/shad2.png differ diff --git a/src/assets/images/shelf01.png b/src/assets/images/shelf01.png new file mode 100644 index 0000000..1501bd2 Binary files /dev/null and b/src/assets/images/shelf01.png differ diff --git a/src/assets/images/shelf02.png b/src/assets/images/shelf02.png new file mode 100644 index 0000000..71d1dbc Binary files /dev/null and b/src/assets/images/shelf02.png differ diff --git a/src/assets/images/shelf03.png b/src/assets/images/shelf03.png new file mode 100644 index 0000000..5568510 Binary files /dev/null and b/src/assets/images/shelf03.png differ diff --git a/src/assets/images/shelf04.png b/src/assets/images/shelf04.png new file mode 100644 index 0000000..4a0b789 Binary files /dev/null and b/src/assets/images/shelf04.png differ diff --git a/src/assets/images/shelf05.png b/src/assets/images/shelf05.png new file mode 100644 index 0000000..3065cd3 Binary files /dev/null and b/src/assets/images/shelf05.png differ diff --git a/src/assets/images/shelf06.png b/src/assets/images/shelf06.png new file mode 100644 index 0000000..8df7aff Binary files /dev/null and b/src/assets/images/shelf06.png differ diff --git a/src/assets/images/top-bg.png b/src/assets/images/top-bg.png new file mode 100644 index 0000000..813bdbc Binary files /dev/null and b/src/assets/images/top-bg.png differ diff --git a/src/assets/images/top.png b/src/assets/images/top.png new file mode 100644 index 0000000..7b4e011 Binary files /dev/null and b/src/assets/images/top.png differ diff --git a/src/assets/logo.png b/src/assets/logo.png new file mode 100644 index 0000000..f3d2503 Binary files /dev/null and b/src/assets/logo.png differ diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss new file mode 100644 index 0000000..6cff303 --- /dev/null +++ b/src/assets/styles/index.scss @@ -0,0 +1,829 @@ +.content-main{ + width: calc(100%); + height: calc(100vh); + background: url("~@/assets/images/bg.png") left top; + background-size: 100% 100%; +} +.search-main{ + background-color: #fff; + border-radius: 8px; + .search-content{ + display: flex; + justify-content: flex-start; + align-items: center; + .el-button{ + height: 56px; + font-size: 24px; + border: 1px solid #C6C6E2; + } + .input-search{ + flex: 1; + display: flex; + margin: 0 8px; + border: 1px solid #C6C6E2; + border-radius: 8px; + overflow: hidden; + ::v-deep .el-input{ + flex: 1; + .el-input__inner{ + font-size: 20px; + height: 56px; + border: none; + } + } + .el-button{ + display: block; + padding-left: 48px; + background: url('~@/assets/images/img5.png') no-repeat 12px center #0348F3; + background-size: 24px 24px; + border-radius: 0 8px 8px 0; + border: none; + } + } + } + + .hot-keyword{ + font-size: 24px; + p{ + padding: 16px 0 10px 0; + } + .keyword-item{ + display: flex; + justify-content: flex-start; + align-items: center; + span{ + display: block; + padding: 0 12px; + height: 44px; + line-height: 44px; + font-size: 20px; + background-color: #F9F9FD; + color: #737475; + border-radius: 8px; + margin-right: 12px; + &.active{ + background-color: #5A86F4; + color: #fff; + } + } + } + } +} + + +.box-style{ + // margin-top: 20px; + border-radius: 4px; + border: 1px solid #EBEEF5; + background-color: #FFF; + overflow: hidden; + color: #303133; + -webkit-transition: .3s; + transition: .3s; + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1); + padding: 20px; +} + +// 图书列表 +.book-content{ + margin-top: 16px; + padding: 20px 24px; + background-color: #fff; + border-radius: 8px; +} +.result{ + font-size: 16px; + color: #737475; + margin-bottom: 10px; + span{ + color: #5A86F4; + } +} +.book-all-list{ + display: flex; + flex-wrap: wrap; + justify-content: space-between; + height: calc(100% - 28px); + overflow: hidden; + overflow-y: scroll; +} +.book-item{ + width: calc(100% / 2 - 20px); + margin: 20px 10px 20px 0; +} +.load-data{ + width: 100%; + padding: 15px 0; + text-align: center; +} +.book-info{ + display: flex; + justify-content: space-between; + .book-img{ + display: flex; + align-items: center; + width: 160px; + height: 200px; + margin-right: 17px; + // background-color: #f1f1f1; + overflow: hidden; + img{ + display: block; + width: 100%; + } + } + .book-txt{ + flex: 1; + h4{ + font-size: 28px; + line-height: 40px; + } + div{ + font-size: 20px; + height: 32px; + line-height: 32px; + margin-top: 8px; + } + .book-autor{ + display: inline-block; + padding: 0 8px; + // border: 1px solid #C6C6E2; + color: #737475; + border-radius: 4px; + } + + } + + .to-book-more{ + font-size: 20px; + width: 100px; + height: 40px; + line-height: 40px; + padding: 0 8px; + color: #fff; + background-color: #5A86F4; + border-radius: 4px; + } +} + +.book-intro{ + font-size: 20px; + height: 32px; + line-height: 32px; + height: 96px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 3; + overflow-y: scroll; + margin-top: 10px; +} + +.bookList-wrap{ + display: flex; + justify-content: space-between; + margin-top: 16px; + height: calc(100vh - 418px); +} + +.book-content2{ + flex: 1; + margin-left: 20px; + padding: 20px 24px; + background-color: #fff; + border-radius: 8px; + .book-all-list{ + display: block; + } + .book-item{ + width: 100%; + margin: 0 10px 20px 0; + } + .book-txt{ + position: relative; + } +} + +.bookList-left{ + width: 310px; + height: 100%; + padding: 24px 16px 0 16px; + background-color: #fff; + border-radius: 8px; + overflow: hidden; + overflow-y: scroll; +} + +.filter-header{ + position: relative; + padding-left: 20px; + font-size: 28px; + font-weight: 600; + line-height: 30px; + &::before{ + position: absolute; + left: 0; + top: 50%; + content: ""; + width: 8px; + height: 26px; + background-color: #5A86F4; + transform: translateY(-50%); + } +} + +.ranking{ + .el-carousel{ + margin-top: 14px; + } + .ranking-img{ + display: flex; + align-items: center; + width: 140px; + height: 200px; + background-color: #f1f1f1; + overflow: hidden; + img{ + display: block; + width: 100%; + } + } + .ranking-book-detail{ + .book-info{ + position: relative; + padding: 10px 10px 18px 16px; + background-color: #F9F9FD; + border: 1px solid #C6C6E2; + border-radius: 8px; + h5{ + font-size: 24px; + } + .book-author{ + padding: 10px 0; + font-size: 18px; + color: #FE6902; + span:first-child{ + padding-right: 10px; + border-right: 1px solid #E9E9F4; + } + span:last-child{ + padding-left: 10px; + } + } + .book-intro{ + opacity: .6; + } + .ranking-status{ + position: absolute; + right: 10px; + top: -22px; + width: 46px; + height: 50px; + + &.num-one{ + background: url('~@/assets/images/img7.png') no-repeat; + background-size: 46px 50px; + } + &.num-two{ + background: url('~@/assets/images/img8.png') no-repeat; + background-size: 46px 50px; + } + &.num-three{ + background: url('~@/assets/images/img9.png') no-repeat; + background-size: 46px 50px; + } + } + } + .book-click-num{ + display: flex; + justify-content: space-between; + padding: 6px 6px 6px 16px; + margin-top: 8px; + background-color: #F9F9FD; + border: 1px solid #C6C6E2; + border-radius: 8px; + span{ + display: block; + font-size: 24px; + height: 42px; + line-height: 42px; + &.click-num{ + padding-left: 28px; + font-size: 24px; + background: url('~@/assets/images/img6.png') no-repeat left center; + background-size: 24px 24px; + } + &.detail-btn{ + font-size: 20px; + padding: 0 12px; + background-color: #5A86F4; + color: #fff; + border-radius: 8px; + } + } + } + } +} + +.ranking-list-bottom{ + margin-top: 10px; + li{ + display: flex; + justify-content: space-between; + align-items: center; + padding: 24px 0 16px 0; + border-bottom: 1px solid #C6C6E2; + font-size: 22px; + span{ + display: block; + margin-right: 30px; + background: url('~@/assets/images/img3.png') no-repeat center bottom; + background-size: 48px 13px; + } + } +} + + +.book-place{ + padding: 0 27px 0 32px; + background-color: #F8F8FD; + h4{ + position: relative; + padding-left: 18px; + font-size: 28px; + line-height: 40px; + color: #191A1A; + &::before{ + position: absolute; + left: 0; + top: 50%; + content: ""; + width: 7px; + height: 26px; + background-color: #191A1A; + transform: translateY(-50%); + } + } + .book-place-list{ + li{ + display: flex; + justify-content: space-between; + padding: 14px 0; + font-size: 25px; + line-height: 40px; + border-bottom: 1px solid #C6C6E2; + span{ + position: relative; + width: 57px; + color: #000; + &::before{ + position: absolute; + bottom: 6px; + left: 0; + content: ""; + width: 16px; + height: 7px; + background-color: #5A86F4; + opacity: .4; + } + } + .book-num{ + width: 230px; + } + .place-detail{ + flex: 1; + text-align: right; + padding-right: 56px; + color: #000; + background: url('~@/assets/images/img10.png') no-repeat right center; + background-size: 39px 38px; + } + } + } +} + +.book-bottom{ + position: relative; + display: flex; + justify-content: center; + padding: 24px 0; + z-index: 999999; + span{ + display: block; + width: 212px; + height: 57px; + line-height: 53px; + font-size: 25px; + text-align: center; + background: rgba(90,134,244,0.1); + border-radius: 29px; + border: 2px solid #5A86F4; + color: #5A86F4; + } +} + + + +.positionDialog{ + .book-detail{ + position: relative; + display: flex; + justify-content: flex-start; + padding: 10px 30px !important; + background-color: #F6F8FC; + li{ + font-size: 18px; + line-height: 40px; + margin-right: 20px; + font-weight: bold; + span{ + display: inline-block; + text-align: right; + margin-right: 20px; + color: #0C0E1E; + font-weight: normal; + } + i{ + font-style: normal; + padding: 0 8px; + } + } + } + .position-content{ + display: flex; + justify-content: space-between; + align-items: flex-start; + padding: 20px !important; + h5{ + font-size: 18px; + color: #0C0E1E; + } + .position-left{ + width: 500px; + overflow: hidden; + ::v-deep .venue-preview{ + height: 500px; + } + } + .position-right{ + width: 400px; + margin-left: 20px; + } + } + + .shelf-top{ + display: flex; + justify-content: space-around; + align-items: center; + text-align: center; + margin-top: 30px; + p{ + font-size: 16px; + color: #fff; + height: 30px; + line-height: 26px; + background: url('~@/assets/images/shelf04.png') no-repeat center top; + background-size: auto 100%; + } + } + + .data-shelf-row{ + display: flex; + flex: 1; + flex-wrap: wrap; + text-align: center; + .data-shelf-cell{ + position: relative; + font-size: 16px; + color: #0C0E1E; + background: url('~@/assets/images/shelf02.png') repeat-x left top; + background-size: 20% 100%; + border-radius: 3px; + cursor: pointer; + &::before{ + content: ""; + position: absolute; + left: 0; + top: 0; + width: 6px; + height: 38px; + background: url('~@/assets/images/shelf01.png') no-repeat left top; + background-size: 100% 100%; + } + &::after{ + content: ""; + position: absolute; + right: -4px; + top: 0; + width: 6px; + height: 38px; + background: url('~@/assets/images/shelf01.png') no-repeat left top; + background-size: 100% 100%; + } + .cell-name{ + display: block; + width: 100%; + line-height: 38px; + } + &.active{ + color: #fff; + span{ + position: relative; + display: block; + &::before{ + position: absolute; + top: 0; + left: 6px; + content: ''; + width: 98%; + height: 100%; + background-color: rgba(255,0,0,.3); + } + } + } + } + } + +} + +.tooltip-style, +.popover-external-set { + width: 250px; + background:rgba(0,0,0,1); + color: #fff; + border-radius: 6px; +} + +.dataScreening-header{ + display: flex; + justify-content: space-between; + align-items: center; + color: #0C0E1E; + background-color: #fff; + margin-bottom: 20px; + h4{ + flex: 1; + } + .bookshelf-area{ + text-align: right; + position: relative; + display: flex; + justify-content: flex-start; + align-items: center; + padding: 4px 10px; + a{ + font-weight: bold; + font-size: 16px; + display: block; + padding: 10px; + i{ + margin-right: 10px; + } + } + span{ + font-size: 14px; + display: block; + padding: 0 6px; + } + .double-click-btn{ + position: inherit; + margin-left: 20px; + font-weight: normal; + border: 1px solid #545b65; + border-radius: 13px; + line-height: 18px; + background-color: #e2e9f3; + } + } +} + +.shelf-top{ + display: flex; + justify-content: space-around; + align-items: center; + text-align: center; + margin-top: 30px; + p{ + font-size: 12px; + color: #fff; + height: 30px; + line-height: 26px; + background: url('~@/assets/images/shelf04.png') no-repeat center top; + background-size: auto 100%; + } +} + +.data-shelf-row{ + display: flex; + flex: 1; + flex-wrap: wrap; + text-align: center; + .data-shelf-cell{ + position: relative; + font-size: 12px; + color: #0C0E1E; + background: url('~@/assets/images/shelf02.png') repeat-x left top; + background-size: 20% 100%; + border-radius: 3px; + cursor: pointer; + &::before{ + content: ""; + position: absolute; + left: 0; + top: 0; + width: 6px; + height: 38px; + background: url('~@/assets/images/shelf01.png') no-repeat left top; + background-size: 100% 100%; + } + &::after{ + content: ""; + position: absolute; + right: -4px; + top: 0; + width: 6px; + height: 38px; + background: url('~@/assets/images/shelf01.png') no-repeat left top; + background-size: 100% 100%; + } + .cell-name{ + display: block; + width: 100%; + line-height: 38px; + } + &.active{ + color: #fff; + span{ + position: relative; + display: block; + &::before{ + position: absolute; + top: 0; + left: 6px; + content: ''; + width: 98%; + height: 100%; + background-color: rgba(255,0,0,.3); + } + } + } + } +} + +.tag-info{ + display: flex; + justify-content: flex-start; + align-items: center; + position: absolute; + right: 20px; + top: 8px; + p{ + font-size: 16px; + font-weight: bold; + } + .iconfont{ + font-size: 16px; + margin-right: 5px; + } +} + +.tag-sort{ + i{ + color: #0348F3; + } +} + +.tag-place{ + i{ + color: #ED4A41; + } +} + +.tag-in{ + i{ + color: #2ECAAC; + } +} + +.tag-all{ + i{ + color: #0C0E1E; + } +} + +.tab-content{ + position: relative; + background-color: #fff; + .tab-nav{ + display: flex; + justify-content: flex-start; + font-size: 22px; + margin: 0 0 18px 0; + color: #545B65; + border-bottom: 1px solid #EDEFF3; + li{ + margin-right: 60px; + &.active-tab-nav{ + padding-bottom: 10px; + color: #0348F3; + border-bottom: 3px solid #0348F3; + } + } + } +} + +//本架图书页面 +.rack-box{ + padding: 30px 0 0 0; + width: 100%; + .rack-item{ + position: relative; + margin-bottom: 30px; + overflow: hidden; + .rack-box-list{ + height: 200px; + width: 100%; + overflow: hidden; + white-space: nowrap; + background: url('~@/assets/images/shelf02.png') repeat left top; + background-size: 10% 100%; + .list-item{ + display: inline-block; + border: none; + width: 42px; + height: 120px; + background: url('~@/assets/images/shelf03.png') no-repeat left top; + background-size: 100% 100%; + position: relative; + .book-name{ + position: absolute; + left: 15px; + top: 16px; + display: block; + height: 90px; + font-size: 12px; + writing-mode:vertical-rl; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + } + } + } + .rack-floor{ + position: absolute; + left: 0; + bottom: 2px; + height: 50px; + width: 100%; + display: flex; + color: #000; + align-items: center; + justify-content: space-between; + padding: 0 40px; + z-index: 999; + .icon-l,.icon-r{ + font-size: 24px; + } + } +} + +.change-layer{ + display: flex; + justify-content: flex-start; + padding: 20px 0; + li{ + padding: 0 20px; + height: 42px; + line-height: 40px; + margin-right: 10px; + font-size: 20px; + border-radius: 7px; + border: 2px solid #C6C6E2; + &.active{ + color: #fff; + background-color: #0348F3; + border-color: #0348F3; + } + } +} +::v-deep .el-carousel{ + margin: 20px auto; +} +.index-ranking{ + display: flex; + justify-content: space-between; + align-items: flex-start; + margin: 0 44px; + .box-style{ + width: 50%; + &:first-child{ + margin-right: 20px; + } + } + ::v-deep .el-carousel{ + width: 362px; + height: 200px; + } +} \ No newline at end of file diff --git a/src/assets/styles/style.scss b/src/assets/styles/style.scss new file mode 100644 index 0000000..4cd9f79 --- /dev/null +++ b/src/assets/styles/style.scss @@ -0,0 +1,180 @@ +@import '~@/assets/iconfont/iconfont.css'; + +// 全局样式 +* { + margin: 0; + padding: 0; + list-style-type: none; + box-sizing: border-box; + outline: none; +} + +html { + margin: 0; + padding: 0; +} + +body { + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; + background-color: #f1f1f1; + margin: 0; + padding: 0; +} + +a { + color: #343440; + text-decoration: none; +} + +ul{ + margin: 0; + padding: 0; + li{ + list-style: none; + } +} + +.clearfix { + &::after { + content: ""; + display: table; + height: 0; + line-height: 0; + visibility: hidden; + clear: both; + } +} + +/**滚动条的宽度*/ +::-webkit-scrollbar { + width: 10px; + height: 10px; +} + +//滚动条的滑块 +::-webkit-scrollbar-thumb { + background-color: #44A9E4; + border-radius: 5px; +} + +.icon { + width: 1em; + height: 1em; + vertical-align: -0.15em; + fill: currentColor; + overflow: hidden; +} + +//浮动 +.float-r { + float: right; +} + +//文章一行显示,多余省略号显示 +.title-item { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 1; + overflow: hidden; + text-overflow: ellipsis; +} + + +.tooltip-style, +.popover-external-set { + width: 250px; + background:rgba(0,0,0,1); + color: #fff; + border-radius: 6px; +} +.tooltip-style{ + display:none; + position:absolute; +} + +.popover-external-set { + position: fixed; + z-index: 1000; +} + +.tooltip-style, +.popover-content-set{ + .tooltip-top{ + display: flex; + justify-content: space-between; + align-items: center; + font-size: 14px; + height: 40px; + line-height: 40px; + padding: 0 10px; + border-bottom: 1px solid #fff; + } + .tooltip-top span, + .tooltip-top i{ + font-size: 12px; + font-style: normal; + } + ul{ + padding: 10px; + } + ul li{ + display: flex; + justify-content: flex-start; + align-items: center; + line-height: 24px; + font-style: normal; + font-size: 12px; + } + + ul li p{ + width: 60px; + font-weight: bold; + text-align: right; + } + ul li span, + ul li em{ + width: 100px; + display: block; + text-align: right; + font-style: normal; + } + ul li i{ + font-style: normal; + font-weight: bold; + padding: 0 10px; + color: #0348f3; + } + ul li span.percentage, + ul li em.percentage{ + width: auto; + } + + .tag-item{ + display: block; + // width: 50px; + height: 18px; + line-height: 16px; + padding: 0 4px; + border-radius: 3px; + font-size: 12px; + color: #A6ADB6; + border: 1px solid #E6E8ED; + background-color: #F3F5F9; + text-align: center; + &.tag-sort{ + color: #FD7359 !important; + border-color: #FBC0B5 !important; + background-color: #FCECE9 !important; + } + &.tag-place{ + color: #018BFF !important; + border-color: #9BD1FF !important; + background-color: #DCEDFD !important; + } + &.tag-all{ + color: #0C0E1E; + border-color: #545B65 !important; + background-color: #E6E8ED !important; + } + } +} diff --git a/src/common/flexible.js b/src/common/flexible.js new file mode 100644 index 0000000..fdb9fa5 --- /dev/null +++ b/src/common/flexible.js @@ -0,0 +1,147 @@ +(function(win, lib) { + var doc = win.document + var docEl = doc.documentElement + var metaEl = doc.querySelector('meta[name="viewport"]') + var flexibleEl = doc.querySelector('meta[name="flexible"]') + var dpr = 0 + var scale = 0 + var tid + var flexible = lib.flexible || (lib.flexible = {}) + + if (metaEl) { + console.warn('将根据已有的meta标签来设置缩放比例') + var match = metaEl + .getAttribute('content') + // eslint-disable-next-line no-useless-escape + .match(/initial\-scale=([\d\.]+)/) + if (match) { + scale = parseFloat(match[1]) + dpr = parseInt(1 / scale) + } + } else if (flexibleEl) { + var content = flexibleEl.getAttribute('content') + if (content) { + // eslint-disable-next-line no-useless-escape + var initialDpr = content.match(/initial\-dpr=([\d\.]+)/) + // eslint-disable-next-line no-useless-escape + var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/) + if (initialDpr) { + dpr = parseFloat(initialDpr[1]) + scale = parseFloat((1 / dpr).toFixed(2)) + } + if (maximumDpr) { + dpr = parseFloat(maximumDpr[1]) + scale = parseFloat((1 / dpr).toFixed(2)) + } + } + } + + if (!dpr && !scale) { + // eslint-disable-next-line no-unused-vars + var isAndroid = win.navigator.appVersion.match(/android/gi) + var isIPhone = win.navigator.appVersion.match(/iphone/gi) + var devicePixelRatio = win.devicePixelRatio + if (isIPhone) { + // iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案 + if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) { + dpr = 3 + } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)) { + dpr = 2 + } else { + dpr = 1 + } + } else { + // 其他设备下,仍旧使用1倍的方案 + dpr = 1 + } + scale = 1 / dpr + } + + docEl.setAttribute('data-dpr', dpr) + if (!metaEl) { + metaEl = doc.createElement('meta') + metaEl.setAttribute('name', 'viewport') + metaEl.setAttribute( + 'content', + 'initial-scale=' + + scale + + ', maximum-scale=' + + scale + + ', minimum-scale=' + + scale + + ', user-scalable=no' + ) + if (docEl.firstElementChild) { + docEl.firstElementChild.appendChild(metaEl) + } else { + var wrap = doc.createElement('div') + wrap.appendChild(metaEl) + doc.write(wrap.innerHTML) + } + } + + function refreshRem() { + var width = docEl.getBoundingClientRect().width + // 最小1366px,最大适配2560px + if (width / dpr < 1366) { + width = 1366 * dpr + } else if (width / dpr > 2560) { + width = 2560 * dpr + } + // 设置成24等份,设计稿时1920px的,这样1rem就是80px + var rem = width / 24 + docEl.style.fontSize = rem + 'px' + flexible.rem = win.rem = rem + } + + win.addEventListener( + 'resize', + function() { + clearTimeout(tid) + tid = setTimeout(refreshRem, 300) + }, + false + ) + win.addEventListener( + 'pageshow', + function(e) { + if (e.persisted) { + clearTimeout(tid) + tid = setTimeout(refreshRem, 300) + } + }, + false + ) + + if (doc.readyState === 'complete') { + doc.body.style.fontSize = 12 * dpr + 'px' + } else { + doc.addEventListener( + 'DOMContentLoaded', + // eslint-disable-next-line no-unused-vars + function(e) { + doc.body.style.fontSize = 12 * dpr + 'px' + }, + false + ) + } + + refreshRem() + + flexible.dpr = win.dpr = dpr + flexible.refreshRem = refreshRem + flexible.rem2px = function(d) { + var val = parseFloat(d) * this.rem + if (typeof d === 'string' && d.match(/rem$/)) { + val += 'px' + } + return val + } + flexible.px2rem = function(d) { + var val = parseFloat(d) / this.rem + if (typeof d === 'string' && d.match(/px$/)) { + val += 'rem' + } + return val + } +})(window, window['lib'] || (window['lib'] = {})) diff --git a/src/common/scrollMixins.js b/src/common/scrollMixins.js new file mode 100644 index 0000000..21500bc --- /dev/null +++ b/src/common/scrollMixins.js @@ -0,0 +1,61 @@ +export default { + data() { + return { + scrollDom: null, + interval: null, + scrollTimer: null, // 滚动定时器 + pauseTimer: null, // 暂停定时器 + timeout: null, + step: null + } + }, + created() { + }, + mounted() { + // this.dataCompleteFun() + }, + destroyed() { + // 清理定时器 + clearTimeout(this.pauseTimer) + this.pauseTimer = null + clearInterval(this.scrollTimer) + this.scrollTimer = null + // 清理点击监听 + window.document.removeEventListener('click', this.pauseScroll) + }, + methods: { + autoScroll() { + // 滚动长度为0 + if (this.scrollDom.scrollHeight - this.scrollDom.clientHeight > 0) { + // 如果定时器存在 + if (this.scrollTimer) { + // 则先清除 + clearInterval(this.scrollTimer) + clearTimeout(this.pauseTimer) + this.scrollTimer = null + this.pauseTimer = null + } + this.scrollTimer = setInterval(() => { + const scrollHeight = this.scrollDom.scrollHeight + const clientHeight = this.scrollDom.clientHeight + const scroll = scrollHeight - clientHeight + // 获取当前滚动条距离顶部高度 + const scrollTop = this.scrollDom.scrollTop + // 当滚动到底部时,间隔时间后重回顶部开始 + if (scrollTop + this.step >= scroll) { + this.scrollDom.scrollTop = scroll + this.pauseTimer = setTimeout(() => { + this.scrollDom.scrollTop = 0 + this.autoScroll() + }, this.timeout) + } else { // 没有则继续滚动 + this.scrollDom.scrollTop = scrollTop + this.step + } + // console.log(scrollHeight, clientHeight, scroll, scrollTop) + }, this.interval) + } else { + return + } + } + } +} diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..9bd18e4 --- /dev/null +++ b/src/main.js @@ -0,0 +1,39 @@ +import Vue from 'vue' +import App from './App.vue' +import router from './router' +import store from './store' + +// 适配flex +import '@/common/flexible.js' + +// 引入全局css +import './assets/styles/style.scss' +import './assets/iconfont/iconfont.js' +import './assets/fonts/fonts.css' + +import ElementUI from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(ElementUI) + +import axios from 'axios' +Vue.prototype.$axios = axios +// 馆代码 1501 江夏图书馆 1201 东西湖图书馆 FTZN 本地 +// Vue.prototype.libcode = 'FTZN' +Vue.prototype.libcode = '1501' + +import { parseTime } from '@/utils/index.js' +Vue.filter('parseTime', function(time, cFormat) { + return parseTime(time, cFormat) +}) + +// 引入echart +import echarts from 'echarts' +Vue.prototype.$echarts = echarts + +Vue.config.productionTip = false + +new Vue({ + router, + store, + render: (h) => h(App) +}).$mount('#app') diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..b077a9c --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,54 @@ +import Vue from 'vue' +import VueRouter from 'vue-router' + +Vue.use(VueRouter) + +const routes = [ + { + path: '/', + name: 'index', + component: () => import('../views/index.vue'), + meta: { + title: '首页' + } + }, + { + path: '/regions', + name: 'regions', + component: () => import('../views/regionsList.vue'), + meta: { + title: '区域' + } + }, + { + path: '/shelf', + name: 'shelf', + component: () => import('../views/shelfList.vue'), + meta: { + title: '书架' + } + }, + { + path: '/gird', + name: 'gird', + component: () => import('../views/girdList.vue'), + meta: { + title: '架位' + } + }, + { + path: '/bookList', + name: 'bookList', + component: () => import('../views/bookList.vue'), + meta: { + title: '图书列表' + } + } +] + +const router = new VueRouter({ + mode: 'hash', + routes +}) + +export default router diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..b2f39d8 --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,15 @@ +import Vue from 'vue' +import Vuex from 'vuex' + +Vue.use(Vuex) + +export default new Vuex.Store({ + state: { + }, + mutations: { + }, + actions: { + }, + modules: { + } +}) diff --git a/src/utils/index.js b/src/utils/index.js new file mode 100644 index 0000000..b203449 --- /dev/null +++ b/src/utils/index.js @@ -0,0 +1,92 @@ +export function debounce(func, wait, immediate) { + let timeout, args, context, timestamp, result + + const later = function() { + // 据上一次触发时间间隔 + const last = +new Date() - timestamp + + // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait + if (last < wait && last > 0) { + timeout = setTimeout(later, wait - last) + } else { + timeout = null + // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用 + if (!immediate) { + result = func.apply(context, args) + if (!timeout) context = args = null + } + } + } + + return function(...args) { + context = this + timestamp = +new Date() + const callNow = immediate && !timeout + // 如果延时不存在,重新设定延时 + if (!timeout) timeout = setTimeout(later, wait) + if (callNow) { + result = func.apply(context, args) + context = args = null + } + + return result + } +} + +// 获取当前日期时间 +export function getCurrentTime() { + const yy = new Date().getFullYear() + const mm = new Date().getMonth() + 1 + const dd = new Date().getDate() + const hh = new Date().getHours() + const mf = new Date().getMinutes() < 10 ? '0' + new Date().getMinutes() : new Date().getMinutes() + const ss = new Date().getSeconds() < 10 ? '0' + new Date().getSeconds() : new Date().getSeconds() + const time = yy + '年' + mm + '月' + dd + '日 ' + hh + ':' + mf + ':' + ss + return time +} + +/** + * Parse the time to string + * @param {(Object|string|number)} time + * @param {string} cFormat + * @returns {string} + */ +export function parseTime(time, cFormat) { + if (arguments.length === 0) { + return null + } + const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' + let date + if (typeof time === 'undefined' || time === null || time === 'null') { + return '' + } else if (typeof time === 'object') { + date = time + } else { + if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { + time = parseInt(time) + } + if ((typeof time === 'number') && (time.toString().length === 10)) { + time = time * 1000 + } + date = new Date(time) + } + const formatObj = { + y: date.getFullYear(), + m: date.getMonth() + 1, + d: date.getDate(), + h: date.getHours(), + i: date.getMinutes(), + s: date.getSeconds(), + a: date.getDay() + } + const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { + let value = formatObj[key] + // Note: getDay() returns 0 on Sunday + if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] } + if (result.length > 0 && value < 10) { + value = '0' + value + } + return value || 0 + }) + return time_str +} diff --git a/src/utils/request.js b/src/utils/request.js new file mode 100644 index 0000000..1a6e055 --- /dev/null +++ b/src/utils/request.js @@ -0,0 +1,55 @@ +import axios from 'axios' +import { Message } from 'element-ui' + +// 创建axios实例 +const service = axios.create({ + // baseURL: process.env.NODE_ENV === 'production' ? process.env.VUE_APP_BASE_API : '/', // api 的 base_url + baseURL: process.env.NODE_ENV === 'production' ? window.g.ApiUrl : '/', // api 的 base_url + timeout: 1000 * 30, // 请求超时时间 + headers: { + 'Content-Type': 'application/json' + } +}) + +// request拦截器 +service.interceptors.request.use( + config => { + // if (getToken()) { + // config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 + // } + const token = '' // 登录后生成用于识别用户身份,项目不需要直接去掉 + config.headers['Authorization'] = token || '' + return config + }, + error => { + console.error('error: ', error) + Promise.reject(error) + } +) + +// response 拦截器 +service.interceptors.response.use( + response => { + const errorMsg = response.data.errMsg + if (response.status === 200) { + // console.log(response.data.data) + if (response.data instanceof Blob) { + return response.data + } else if (response.data.data) { + return response.data.data + } else { + return response.data + } + } else { + Message.error({ + message: errorMsg, + duration: 5000 + }) + Promise.reject() + } + }, + error => { + return Promise.reject(error) + } +) +export default service diff --git a/src/utils/resizeMixins.js b/src/utils/resizeMixins.js new file mode 100644 index 0000000..dbdffd8 --- /dev/null +++ b/src/utils/resizeMixins.js @@ -0,0 +1,26 @@ +// 混入代码 resize-mixins.js +import { debounce } from '@/utils/index' +const resizeChartMethod = '$__resizeChartMethod' + +export default { + data() { + // 在组件内部将图表init的引用映射到chart属性上 + return { + chart: null + } + }, + created() { + window.addEventListener('resize', this[resizeChartMethod], false) + }, + beforeDestroy() { + window.removeEventListener('reisze', this[resizeChartMethod]) + }, + methods: { + // 通过lodash的防抖函数来控制resize的频率 + [resizeChartMethod]: debounce(function() { + if (this.chart) { + this.chart.resize() + } + }, 100) + } +} diff --git a/src/views/bookList.vue b/src/views/bookList.vue new file mode 100644 index 0000000..839f74d --- /dev/null +++ b/src/views/bookList.vue @@ -0,0 +1,181 @@ + + + + + diff --git a/src/views/girdList.vue b/src/views/girdList.vue new file mode 100644 index 0000000..45aada1 --- /dev/null +++ b/src/views/girdList.vue @@ -0,0 +1,546 @@ + + + + + diff --git a/src/views/index.vue b/src/views/index.vue new file mode 100644 index 0000000..490434c --- /dev/null +++ b/src/views/index.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/src/views/mixins/index.js b/src/views/mixins/index.js new file mode 100644 index 0000000..f6049f8 --- /dev/null +++ b/src/views/mixins/index.js @@ -0,0 +1,344 @@ +import { FetchShelfGridAllByShelfIdText, FetchBookShelfDetails } from '@/api/inquiryMachine' +import defaultImg from '@/assets/images/default-img-bg.jpg' +import { mapGetters } from 'vuex' +import { fabric } from 'fabric' +export const positionCrud = { + mixins: [], + // 组件共用属性 + data() { + return { + positionVisible: false, + positionTitle: '图书定位', + positionContent: {}, + currentMarkData: null, + defaultImg: defaultImg, + imageUrl: defaultImg, + canvasPreview: {}, + width: 900, + height: 600, + drawWidth: 2, // 笔触宽度 + booShelfGrid: [], + layerNum: 0, + rackNum: 0, + cellIndex: 0, + bookShelfDetails: {}, + getGridShelf: '', + getGridFloor: '', + getGridToward: 1 + } + }, + computed: { + ...mapGetters([ + 'user', + 'baseApi' + ]), + cellStyle: function() { + const h = '38px' + let w + if (this.rackNum === 1) { + w = '146px' + } else { + w = '100%/' + this.rackNum + } + return { width: `calc(${w})`, height: `calc(${h})` } + }, + rowStyle: function() { + let w + if (this.rackNum === 1) { + w = 146 * this.rackNum + 'px' + } else { + w = '100%' + } + return { width: `calc(${w})` } + }, + reversedRackNum() { + if (this.booShelfGrid && this.booShelfGrid.length > 0) { + if (parseInt(this.booShelfGrid[0].gridShelf) === this.rackNum) { + return Array.from({ length: this.rackNum }, (_, i) => this.rackNum - i).map(x => x.toString()) + } else { + return Array.from({ length: this.rackNum }, (_, i) => i + 1).map(x => x.toString()) + } + } else { + return [] + } + } + }, + // 组件挂载时的共用方法 + mounted() { + }, + // 组件共用方法 + methods: { + removeAreaPrefix(gridNames) { + const index = gridNames.indexOf('面') + if (index !== -1) { + return gridNames.substring(index + 1) + } + return gridNames + }, + handlePosition(row, type) { + const baseUrl = process.env.NODE_ENV === 'production' ? window.g.ApiUrl : process.env.VUE_APP_BASE_API + this.booShelfGrid = [] + this.currentMarkData = {} + if (this.canvasPreview.lowerCanvasEl) { + this.canvasPreview.clear() + this.canvasPreview.dispose() + } + this.positionVisible = true + console.log('type', type) + let params + if (type !== 'hot') { + this.positionTitle = '图书定位 - 《' + row.bookName + '》' + this.updateParts(row.gridName) + params = { + 'shelfId': row.actualShelfId + } + this.positionContent = row + } else { + this.positionTitle = '架位定位' + params = { + 'shelfId': row.shelf_id + } + this.updateParts(row.grid_name) + } + + FetchBookShelfDetails(params).then(res => { + this.layerNum = res.shelfFloor + this.rackNum = res.shelfShelf + this.bookShelfDetails = res + this.currentMarkData = res + + if (row.regionMap) { + this.imageUrl = baseUrl + '/api/fileRelevant/getImg?imgId=' + row.regionMap + this.$nextTick(() => { + const drawinfo = JSON.parse(res.signPoint) + this.initCanvasPreview(drawinfo, type) + }) + } else { + this.imageUrl = this.defaultImg + } + this.getInitShelfGridByShelfId(this.getGridToward) + }).catch(() => { + }) + }, + updateParts(gridName) { + const parts = gridName.match(/(\d+)区(\d+)排([A-Za-z])面(\d+)架(\d+)层/) + if (parts) { + this.getGridShelf = parts[4] + this.getGridFloor = parts[5] + const toward = parts[3] + if (toward === 'A') { + this.getGridToward = 1 + } else if (toward === 'B') { + this.getGridToward = 2 + } + } + }, + getInitShelfGridByShelfId(toward) { + this.listLoading = true + // rowType 1 单 2 双 + // toward 1 A面 2 B面 + // shelfType 1 '始终最左边为第1架(S型排架)' + // shelfType 2 'A面最左为第1架(B面最左为最后1架)' + // shelfType 3 'B面最左为第1架(A面最左为最后1架)' + // floorType 1 '最顶层为第一层(从上至下)' + // floorType 2 '最底层为第一层(从下至上)' + FetchShelfGridAllByShelfIdText({ 'shelfId': this.bookShelfDetails.id, 'toward': toward }).then(res => { + const sortFunction = toward === 1 ? { + 1: { 1: 'sortBookshelvesLeftTop', 2: 'sortBookshelvesLeftBottom' }, + 2: { 1: 'sortBookshelvesLeftTop', 2: 'sortBookshelvesLeftBottom' }, + 3: { 1: 'sortBookshelvesRightTop', 2: 'sortBookshelvesRightBottom' } + } : { + 1: { 1: 'sortBookshelvesLeftTop', 2: 'sortBookshelvesLeftBottom' }, + 2: { 1: 'sortBookshelvesRightTop', 2: 'sortBookshelvesRightBottom' }, + 3: { 1: 'sortBookshelvesLeftTop', 2: 'sortBookshelvesLeftBottom' } + } + const shelfType = this.bookShelfDetails.shelfType + const floorType = this.bookShelfDetails.floorType + const sortMethod = sortFunction[shelfType][floorType] + this.booShelfGrid = this[sortMethod](res) + + const index = this.booShelfGrid.findIndex((obj) => { + return obj.gridShelf === this.getGridShelf && obj.gridFloor === this.getGridFloor + }) + + this.cellIndex = index + setTimeout(() => { + this.listLoading = false + }, 1000) + }).catch(() => { + }) + }, + // 最左为第一架, 最顶层为第一层 从上往下 + sortBookshelvesLeftTop(data) { + const sortedData = [] + const maxFloor = Math.max(...data.map(item => parseInt(item.gridFloor))) + const maxShelf = Math.max(...data.map(item => parseInt(item.gridShelf.slice(-1)))) + + for (let i = 1; i <= maxFloor; i++) { + for (let j = 1; j <= maxShelf; j++) { + const currentShelf = data.find(item => parseInt(item.gridFloor) === i && parseInt(item.gridShelf.slice(-1)) === j) + if (currentShelf) { + sortedData.push(currentShelf) + } + } + } + return sortedData + }, + // 最右为第一架,最左为最后一架, 最顶层为第一层 从上往下 + sortBookshelvesRightTop(data) { + const sortedData = [] + // 获取最大的楼层数 + const maxFloor = Math.max(...data.map(item => parseInt(item.gridFloor))) + const maxShelf = Math.max(...data.map(item => parseInt(item.gridShelf.match(/\d+$/)[0]))) + for (let i = 1; i <= maxFloor; i++) { + // 从最大的书架层数开始,向下排序 + for (let j = maxShelf; j >= 1; j--) { + const currentShelf = data.find(item => parseInt(item.gridFloor) === i && parseInt(item.gridShelf.match(/\d+$/)[0]) === j) + if (currentShelf) { + sortedData.push(currentShelf) + } + } + } + return sortedData + }, + // 最左为第一架, 最底层为第一层 从下往上 + sortBookshelvesLeftBottom(data) { + const sortedData = [] + // 获取最大的楼层数 + const maxFloor = Math.max(...data.map(item => parseInt(item.gridFloor))) + // 获取最大的书架层数 + const maxShelf = Math.max(...data.map(item => parseInt(item.gridShelf.slice(-1)))) + for (let i = maxFloor; i >= 1; i--) { + for (let j = 1; j <= maxShelf; j++) { + const currentShelf = data.find(item => parseInt(item.gridFloor) === i && parseInt(item.gridShelf.slice(-1)) === j) + if (currentShelf) { + sortedData.push(currentShelf) + } + } + } + return sortedData + }, + // 最左为最后一架, 最底层为第一层 从下往上 + sortBookshelvesRightBottom(data) { + const sortedData = [] + // 获取最大的楼层数 + const maxFloor = Math.max(...data.map(item => parseInt(item.gridFloor))) + const maxShelfPerFloor = data.map(item => parseInt(item.gridShelf.match(/\d+$/)[0])) + .reduce((acc, curr, index, arr) => { + const floor = parseInt(data[index].gridFloor) + if (!acc[floor]) acc[floor] = 1 + if (acc[floor] < curr) acc[floor] = curr + return acc + }, {}) + // 从最大的楼层开始向下遍历 + for (let i = maxFloor; i >= 1; i--) { + // 从最大的书架编号开始向左遍历 + for (let j = maxShelfPerFloor[i] || 1; j >= 1; j--) { + const currentShelf = data.find(item => parseInt(item.gridFloor) === i && parseInt(item.gridShelf.match(/\d+$/)[0]) === j) + if (currentShelf) { + sortedData.push(currentShelf) + } + } + } + return sortedData + }, + initCanvasPreview(drawinfo, type) { + console.log('type222', type) + if (!this.currentMarkData) { + console.error('currentMarkData is null or undefined') + return + } + let canvasId + if (type === 'hot') { + canvasId = `canvasPreview${this.currentMarkData.id}${type}` + } else { + canvasId = `canvasPreview${this.currentMarkData.id}` + } + + this.canvasPreview = new fabric.Canvas(canvasId, { + skipTargetFind: false, + selectable: false, + selection: false + }) + + this.$nextTick(() => { + this.canvasPreview.selectionColor = 'rgba(0,0,0,0.05)' + this.loadDrawPreview(drawinfo) + this.canvasPreview.on('mouse:wheel', this.mouse) + }) + }, + // 鼠标滚轮放大缩小 + mouse(e) { + if (undefined === e) return + let zoom = (e.e.deltaY > 0 ? -0.1 : 0.1) + this.canvasPreview.getZoom() + zoom = Math.max(0.8, zoom) + // 最小为原来的1/10 + zoom = Math.min(3, zoom) + // 最大是原来的3倍 + const zoomPoint = new fabric.Point(e.e.pageX, e.e.pageY) + this.canvasPreview.zoomToPoint(zoomPoint, zoom) + }, + // 回显详情信息 + loadDrawPreview(drawinfo) { + const self = this + const pointGroup = drawinfo.pointInfo + const imgInfo = drawinfo.imgInfo + imgInfo.src = self.imageUrl + // 加载底图 + fabric.util.enlivenObjects([imgInfo], objects => { + objects.forEach(o => { + o.selectable = false + o.hasControls = false + o.centeredScaling = false + self.canvasPreview.add(o) + }) + + // 处理多边形绘制回显操作 + pointGroup.forEach(async(item, index) => { + if (item.pointInfo !== '') { + const polygon = new fabric.Polygon(item.pointInfo, { + name: item.name, + stroke: 'rgba(196, 43, 1, 1)', + strokeWidth: self.drawWidth, + fill: 'rgba(196, 43, 1, 1)', + opacity: 0.5, + selectable: false, + hasBorders: false, + hasControls: false, + originX: 'left', + originY: 'top' + }) + self.canvasPreview.add(polygon) + + polygon.on('mousedown', function(e) { + console.log('Rect' + (index + 1) + 'clicked', e) + console.log('e.target.name', e.target.name) + }) + + polygon.on('mouseover', function(e) { + console.log('e', e) + console.log('e.target', e.target) + console.log('e.target.name', e.target.name) + this.set({ opacity: 0.8, hoverCursor: 'pointer' }) + self.canvasPreview.renderAll() + }) + + polygon.on('mouseout', function() { + this.set({ opacity: 0.5 }) + self.canvasPreview.renderAll() + }) + + // 加载完成后直接对多边形执行zoomToPoint操作 + const center = polygon.getCenterPoint() + self.canvasPreview.zoomToPoint({ x: center.x, y: center.y }, 1.4) + } + }) + }) + self.canvasPreview.renderAll() + }, + handleCloseDialog() { + this.positionVisible = false + this.detailVisible = false + } + } +} diff --git a/src/views/module/bookDetails.vue b/src/views/module/bookDetails.vue new file mode 100644 index 0000000..b587c16 --- /dev/null +++ b/src/views/module/bookDetails.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/src/views/module/canvasPreview.vue b/src/views/module/canvasPreview.vue new file mode 100644 index 0000000..5244a42 --- /dev/null +++ b/src/views/module/canvasPreview.vue @@ -0,0 +1,337 @@ + + + + diff --git a/src/views/module/ranking.vue b/src/views/module/ranking.vue new file mode 100644 index 0000000..f45eb43 --- /dev/null +++ b/src/views/module/ranking.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/src/views/module/search.vue b/src/views/module/search.vue new file mode 100644 index 0000000..9f6b6f4 --- /dev/null +++ b/src/views/module/search.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/src/views/module/shelfRanking.vue b/src/views/module/shelfRanking.vue new file mode 100644 index 0000000..dea1cab --- /dev/null +++ b/src/views/module/shelfRanking.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/src/views/regionsList.vue b/src/views/regionsList.vue new file mode 100644 index 0000000..eb97d3f --- /dev/null +++ b/src/views/regionsList.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/src/views/shelfList.vue b/src/views/shelfList.vue new file mode 100644 index 0000000..061d73b --- /dev/null +++ b/src/views/shelfList.vue @@ -0,0 +1,629 @@ + + + + + diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 0000000..974b738 --- /dev/null +++ b/vue.config.js @@ -0,0 +1,69 @@ +const path = require('path') +const resolve = dir => { + return path.join(__dirname, dir) +} +const name = '江夏区图书馆自助查询机' +module.exports = { + publicPath: process.env.NODE_ENV === 'development' ? '/' : './', + outputDir: 'dist', + assetsDir: 'static', + lintOnSave: process.env.NODE_ENV === 'development', + productionSourceMap: false, + devServer: { + port: 3000, + open: true, + overlay: { + warnings: false, + errors: true + }, + // host: 'localhost', + proxy: { + '/dxhtsg': { + target: process.env.VUE_APP_BASE_API, + changeOrigin: true, + pathRewrite: { + '^/dxhtsg': 'dxhtsg' + } + }, + '/api': { + target: process.env.VUE_APP_BASE_API, + changeOrigin: true, + pathRewrite: { + '^/api': 'api' + } + }, + '/auth': { + target: process.env.VUE_APP_BASE_API, + changeOrigin: true, + pathRewrite: { + '^/auth': 'auth' + } + } + } + }, + configureWebpack: { + name: name, + resolve: { + alias: { + '@': resolve('src') + } + }, + performance: { + hints: 'warning', + // 入口起点的最大体积 + maxEntrypointSize: 50000000, + // 生成文件的最大体积 + maxAssetSize: 30000000 + } + }, + chainWebpack: config => { + config.resolve + .alias.set('_c', resolve('src/components')) + + config.plugin('html') + .tap(args => { + args[0].title = '自助查询机' + return args + }) + } +}