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 @@
+
+
+
+
+
+
+
+
+
+
检索结果:{{ totalNum }}册
+
+
+
+
+
![]()
+
+
+
{{ item.title }}
+
{{ item.author }}
+
{{ item.publisher }}
+
ISBN:{{ item.isbn }}
+
+
查看详情
+
+
+
+
暂无更多数据
+
加载中...
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ book.bookName }}
+
+
+
+
+
+
+
+
+
+
+
错序:
{{ baseStockData.length !==0 && baseStockData[index].errorOrderNum }}
({{ baseStockData.length !==0 && baseStockData[index].errorOrderProbo }})
+
错架:
{{ baseStockData.length !==0 &&baseStockData[index].errorShelfNum }}
({{ baseStockData.length !==0 && baseStockData[index].errorShelfProbo }})
+
在架:
{{ baseStockData.length !==0 && baseStockData[index].onShelfNum }}
+
+
+
+
+
+
+
+
+
{{ shelfAllGridData[popoverIndex.layer].books[popoverIndex.book].bookName }}
+ 错序
+ 错架
+
+
+ 索书号
{{ shelfAllGridData[popoverIndex.layer].books[popoverIndex.book].sortmark }}
+ ISBN
{{ shelfAllGridData[popoverIndex.layer].books[popoverIndex.book].isbn }}
+ 著者
{{ shelfAllGridData[popoverIndex.layer].books[popoverIndex.book].bookAuthor }}
+ 出版社
{{ shelfAllGridData[popoverIndex.layer].books[popoverIndex.book].bookPublish }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
![]()
+
+
+
{{ detailData.bookBasics.title }}
+
{{ detailData.bookBasics.author }}
+
{{ detailData.bookBasics.publisher }}
+
ISBN:{{ detailData.bookBasics.isbn }}
+
分类号:{{ detailData.bookBasics.classNo }}
+
+
+
{{ detailData.bookBasics.summary }}
+
+
+
馆藏列表
+
+ -
+ {{ index+1 }}
+
{{ item.sortmark }}
+ {{ getLocation(item) }}
+
+
+
+
+ 关闭
+
+
+
+
+
+
+ - 所属楼层{{ positionContent.floorName }}
+ - 所属区域{{ positionContent.regionName }}
+ - 所属书架{{ positionContent.gridName }}
+
+
+
+
平面图
+
+
+
+
+
![]()
+
![]()
+
+
+
+
书架图
+
+
+ -
+ {{ removeAreaPrefix(cell.gridName) }}
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
{{ item.title }}
+
+
+
+
+
+
+
+
+ -
+ {{ 'TOP'+ (index+4) }}
+
{{ item.title }}
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+ 图书检索
+
+
+
+
+
+
热门检索
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+ - 所属楼层{{ positionContent.floorName }}
+ - 所属区域{{ positionContent.regionName }}
+ - 所属书架{{ positionContent.gridName }}
+
+
+
+
平面图
+
+
+
+
+
![]()
+
![]()
+
+
+
+
书架图
+
+
+ -
+ {{ removeLayerPrefix(cell.gridName) }}
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+ - {{ item.regionName }}
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
{{ cell.onShelfNum }}
+
+
+
+
+
本架概况
+ 2024-11-28 09:46
+
+
+ 架位
{{ removeAreaPrefix(cell.gridName) }}
+ 在架
{{ itemStockData.onShelfNum }}册
+ 错架
{{ itemStockData.errorShelfNum }}册 ({{ itemStockData.errorShelfProbo }})
+ 错序
{{ itemStockData.errorOrderNum }}册({{ itemStockData.errorOrderProbo }})
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
+ })
+ }
+}