npmrun 4 years ago
parent
commit
c63b84e961
  1. 198
      package-lock.json
  2. 3
      package.json
  3. 9
      src/main/facilities/main/index.ts
  4. 6
      src/render/assets/style/common.scss
  5. 2
      src/render/main.tsx
  6. 55
      src/render/route.tsx
  7. 3
      src/render/views/About/index.module.scss
  8. 25
      src/render/views/About/index.tsx
  9. 12
      src/render/views/Home/index.module.scss
  10. 36
      src/render/views/Home/index.tsx
  11. 13
      src/render/views/Layout/index.module.scss
  12. 117
      src/render/views/Layout/index.tsx
  13. 2
      tsconfig.json
  14. 3
      types/global.d.ts
  15. 4
      vite.config.ts

198
package-lock.json

@ -1258,6 +1258,85 @@
}
}
},
"@blueprintjs/table": {
"version": "3.9.0",
"resolved": "https://registry.nlark.com/@blueprintjs/table/download/@blueprintjs/table-3.9.0.tgz",
"integrity": "sha1-X8tw4o35HzFFYAmYpOJ5AqJk2NI=",
"requires": {
"@blueprintjs/core": "^3.47.0",
"classnames": "^2.2",
"prop-types": "^15.7.2",
"react-lifecycles-compat": "^3.0.4",
"tslib": "~1.13.0"
},
"dependencies": {
"@blueprintjs/core": {
"version": "3.47.0",
"resolved": "https://registry.nlark.com/@blueprintjs/core/download/@blueprintjs/core-3.47.0.tgz",
"integrity": "sha1-vzMVXSJLdCulHG4c9b5FIykDN6c=",
"requires": {
"@blueprintjs/icons": "^3.27.0",
"@types/dom4": "^2.0.1",
"classnames": "^2.2",
"dom4": "^2.1.5",
"normalize.css": "^8.0.1",
"popper.js": "^1.16.1",
"react-lifecycles-compat": "^3.0.4",
"react-popper": "^1.3.7",
"react-transition-group": "^2.9.0",
"resize-observer-polyfill": "^1.5.1",
"tslib": "~1.13.0"
}
},
"@blueprintjs/icons": {
"version": "3.27.0",
"resolved": "https://registry.nlark.com/@blueprintjs/icons/download/@blueprintjs/icons-3.27.0.tgz",
"integrity": "sha1-9MA+i8L5MQ9+rvqrJt2R9lk12kM=",
"requires": {
"classnames": "^2.2",
"tslib": "~1.13.0"
}
},
"dom-helpers": {
"version": "3.4.0",
"resolved": "https://registry.nlark.com/dom-helpers/download/dom-helpers-3.4.0.tgz",
"integrity": "sha1-6bNpcA+Vn2Ls3lprq95LzNkWmvg=",
"requires": {
"@babel/runtime": "^7.1.2"
}
},
"react-popper": {
"version": "1.3.11",
"resolved": "https://registry.npm.taobao.org/react-popper/download/react-popper-1.3.11.tgz",
"integrity": "sha1-osw/Cme3W2bPpi0sQJ+d0fzHH/0=",
"requires": {
"@babel/runtime": "^7.1.2",
"@hypnosphi/create-react-context": "^0.3.1",
"deep-equal": "^1.1.1",
"popper.js": "^1.14.4",
"prop-types": "^15.6.1",
"typed-styles": "^0.0.7",
"warning": "^4.0.2"
}
},
"react-transition-group": {
"version": "2.9.0",
"resolved": "https://registry.nlark.com/react-transition-group/download/react-transition-group-2.9.0.tgz?cache=0&sync_timestamp=1622301030407&other_urls=https%3A%2F%2Fregistry.nlark.com%2Freact-transition-group%2Fdownload%2Freact-transition-group-2.9.0.tgz",
"integrity": "sha1-35zbAleWIRFRpDbGmo87l7WwfI0=",
"requires": {
"dom-helpers": "^3.4.0",
"loose-envify": "^1.4.0",
"prop-types": "^15.6.2",
"react-lifecycles-compat": "^3.0.4"
}
},
"tslib": {
"version": "1.13.0",
"resolved": "https://registry.nlark.com/tslib/download/tslib-1.13.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-1.13.0.tgz",
"integrity": "sha1-yIHhPMcBWJTtkUhi0nZDb6mkcEM="
}
}
},
"@develar/schema-utils": {
"version": "2.6.5",
"resolved": "https://registry.npm.taobao.org/@develar/schema-utils/download/@develar/schema-utils-2.6.5.tgz",
@ -1473,7 +1552,6 @@
"version": "0.3.1",
"resolved": "https://registry.npm.taobao.org/@hypnosphi/create-react-context/download/@hypnosphi/create-react-context-0.3.1.tgz",
"integrity": "sha1-+L/r3HZl9dQmy6N1Pg6cfTFU18Y=",
"dev": true,
"requires": {
"gud": "^1.0.0",
"warning": "^4.0.3"
@ -1825,8 +1903,7 @@
"@types/dom4": {
"version": "2.0.2",
"resolved": "https://registry.nlark.com/@types/dom4/download/@types/dom4-2.0.2.tgz",
"integrity": "sha1-ZJUwPwSWic6TbtMoo+Xt6cUUCO4=",
"dev": true
"integrity": "sha1-ZJUwPwSWic6TbtMoo+Xt6cUUCO4="
},
"@types/eslint": {
"version": "7.28.0",
@ -1873,6 +1950,12 @@
"@types/node": "*"
}
},
"@types/highlight.js": {
"version": "9.12.4",
"resolved": "https://registry.npm.taobao.org/@types/highlight.js/download/@types/highlight.js-9.12.4.tgz",
"integrity": "sha1-jDSWvRtQzASu79aRFAqlcdTb+jQ=",
"dev": true
},
"@types/history": {
"version": "4.7.9",
"resolved": "https://registry.nlark.com/@types/history/download/@types/history-4.7.9.tgz",
@ -1895,6 +1978,29 @@
"integrity": "sha1-7fG/Hb9OBEE8qOWxezt9fVS1mBg=",
"dev": true
},
"@types/linkify-it": {
"version": "3.0.2",
"resolved": "https://registry.nlark.com/@types/linkify-it/download/@types/linkify-it-3.0.2.tgz",
"integrity": "sha1-/SzS7bqn6qx+fzwXSLUqGRQ4Rsk=",
"dev": true
},
"@types/markdown-it": {
"version": "12.0.3",
"resolved": "https://registry.nlark.com/@types/markdown-it/download/@types/markdown-it-12.0.3.tgz",
"integrity": "sha1-YKCTY76714D6yBVEK0fYDxoXvvE=",
"dev": true,
"requires": {
"@types/highlight.js": "^9.7.0",
"@types/linkify-it": "*",
"@types/mdurl": "*"
}
},
"@types/mdurl": {
"version": "1.0.2",
"resolved": "https://registry.nlark.com/@types/mdurl/download/@types/mdurl-1.0.2.tgz",
"integrity": "sha1-4s6dg6YTus8oTHvn1JGUXjnh+Ok=",
"dev": true
},
"@types/minimatch": {
"version": "3.0.5",
"resolved": "https://registry.nlark.com/@types/minimatch/download/@types/minimatch-3.0.5.tgz?cache=0&sync_timestamp=1625616331953&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.5.tgz",
@ -3667,7 +3773,6 @@
"version": "1.0.2",
"resolved": "https://registry.nlark.com/call-bind/download/call-bind-1.0.2.tgz",
"integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
@ -3831,8 +3936,7 @@
"classnames": {
"version": "2.3.1",
"resolved": "https://registry.npm.taobao.org/classnames/download/classnames-2.3.1.tgz?cache=0&sync_timestamp=1617400318265&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclassnames%2Fdownload%2Fclassnames-2.3.1.tgz",
"integrity": "sha1-38+jiR4wbsHa0QXQ6I9EF7hTXo4=",
"dev": true
"integrity": "sha1-38+jiR4wbsHa0QXQ6I9EF7hTXo4="
},
"clean-css": {
"version": "4.2.3",
@ -4330,7 +4434,6 @@
"version": "1.1.1",
"resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz?cache=0&sync_timestamp=1606859714626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.1.1.tgz",
"integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=",
"dev": true,
"requires": {
"is-arguments": "^1.0.4",
"is-date-object": "^1.0.1",
@ -4453,7 +4556,6 @@
"version": "1.1.3",
"resolved": "https://registry.nlark.com/define-properties/download/define-properties-1.1.3.tgz",
"integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=",
"dev": true,
"requires": {
"object-keys": "^1.0.12"
}
@ -4670,8 +4772,7 @@
"dom4": {
"version": "2.1.6",
"resolved": "https://registry.nlark.com/dom4/download/dom4-2.1.6.tgz",
"integrity": "sha1-yQ3wcTSqDb2B7U1roSN7NvwWR3A=",
"dev": true
"integrity": "sha1-yQ3wcTSqDb2B7U1roSN7NvwWR3A="
},
"dot-case": {
"version": "3.0.4",
@ -5010,6 +5111,12 @@
"tapable": "^2.2.0"
}
},
"entities": {
"version": "2.1.0",
"resolved": "https://registry.npm.taobao.org/entities/download/entities-2.1.0.tgz",
"integrity": "sha1-mS0xKc999ocLlsV4WMJJoSD4uLU=",
"dev": true
},
"env-paths": {
"version": "2.2.1",
"resolved": "https://registry.npm.taobao.org/env-paths/download/env-paths-2.2.1.tgz",
@ -5689,7 +5796,6 @@
"version": "1.1.1",
"resolved": "https://registry.nlark.com/get-intrinsic/download/get-intrinsic-1.1.1.tgz",
"integrity": "sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
@ -5869,8 +5975,7 @@
"gud": {
"version": "1.0.0",
"resolved": "https://registry.nlark.com/gud/download/gud-1.0.0.tgz",
"integrity": "sha1-pIlYGxfmpwvsqavjrlfeekmYUsA=",
"dev": true
"integrity": "sha1-pIlYGxfmpwvsqavjrlfeekmYUsA="
},
"handle-thing": {
"version": "2.0.1",
@ -5912,8 +6017,7 @@
"has-symbols": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.2.tgz?cache=0&sync_timestamp=1614443484522&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-symbols%2Fdownload%2Fhas-symbols-1.0.2.tgz",
"integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM=",
"dev": true
"integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM="
},
"has-value": {
"version": "1.0.0",
@ -6420,7 +6524,6 @@
"version": "1.1.0",
"resolved": "https://registry.nlark.com/is-arguments/download/is-arguments-1.1.0.tgz",
"integrity": "sha1-YjUwMd++4HzrNGVqa95Z7+yujdk=",
"dev": true,
"requires": {
"call-bind": "^1.0.0"
}
@ -6474,8 +6577,7 @@
"is-date-object": {
"version": "1.0.4",
"resolved": "https://registry.nlark.com/is-date-object/download/is-date-object-1.0.4.tgz",
"integrity": "sha1-VQz8wDr62gXuo90wmBx7CVUfc+U=",
"dev": true
"integrity": "sha1-VQz8wDr62gXuo90wmBx7CVUfc+U="
},
"is-descriptor": {
"version": "1.0.2",
@ -6603,7 +6705,6 @@
"version": "1.1.3",
"resolved": "https://registry.nlark.com/is-regex/download/is-regex-1.1.3.tgz",
"integrity": "sha1-0Cn5r/ZEi5Prvj8z2scVEf3L758=",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"has-symbols": "^1.0.2"
@ -6903,6 +7004,15 @@
"resolved": "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz",
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
},
"linkify-it": {
"version": "3.0.2",
"resolved": "https://registry.npm.taobao.org/linkify-it/download/linkify-it-3.0.2.tgz",
"integrity": "sha1-9V7ri8HTrnVASeEkqzu1bZd5f7g=",
"dev": true,
"requires": {
"uc.micro": "^1.0.1"
}
},
"loader-runner": {
"version": "4.2.0",
"resolved": "https://registry.npm.taobao.org/loader-runner/download/loader-runner-4.2.0.tgz?cache=0&sync_timestamp=1610027918622&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-4.2.0.tgz",
@ -6965,7 +7075,6 @@
"version": "1.4.0",
"resolved": "https://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz",
"integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=",
"dev": true,
"requires": {
"js-tokens": "^3.0.0 || ^4.0.0"
}
@ -7033,6 +7142,19 @@
"object-visit": "^1.0.0"
}
},
"markdown-it": {
"version": "12.2.0",
"resolved": "https://registry.nlark.com/markdown-it/download/markdown-it-12.2.0.tgz",
"integrity": "sha1-CR9yD9XbIG+A3nqNHxpwNf0NONs=",
"dev": true,
"requires": {
"argparse": "^2.0.1",
"entities": "~2.1.0",
"linkify-it": "^3.0.1",
"mdurl": "^1.0.1",
"uc.micro": "^1.0.5"
}
},
"matcher": {
"version": "3.0.0",
"resolved": "https://registry.npm.taobao.org/matcher/download/matcher-3.0.0.tgz",
@ -7043,6 +7165,12 @@
"escape-string-regexp": "^4.0.0"
}
},
"mdurl": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/mdurl/download/mdurl-1.0.1.tgz",
"integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
"dev": true
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.nlark.com/media-typer/download/media-typer-0.3.0.tgz",
@ -7388,8 +7516,7 @@
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"object-copy": {
"version": "0.1.0",
@ -7463,7 +7590,6 @@
"version": "1.1.5",
"resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.5.tgz?cache=0&sync_timestamp=1613857698573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.5.tgz",
"integrity": "sha1-ud7qpfx/GEag+uzc7sE45XePU6w=",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3"
@ -7472,8 +7598,7 @@
"object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz",
"integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=",
"dev": true
"integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4="
},
"object-visit": {
"version": "1.0.1",
@ -7864,8 +7989,7 @@
"popper.js": {
"version": "1.16.1",
"resolved": "https://registry.npm.taobao.org/popper.js/download/popper.js-1.16.1.tgz",
"integrity": "sha1-KiI8s9x7YhPXQOQDcr5A3kPmWxs=",
"dev": true
"integrity": "sha1-KiI8s9x7YhPXQOQDcr5A3kPmWxs="
},
"portfinder": {
"version": "1.0.28",
@ -7934,7 +8058,6 @@
"version": "15.7.2",
"resolved": "https://registry.npm.taobao.org/prop-types/download/prop-types-15.7.2.tgz?cache=0&sync_timestamp=1615984425557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprop-types%2Fdownload%2Fprop-types-15.7.2.tgz",
"integrity": "sha1-UsQedbjIfnK52TYOAga5ncv/psU=",
"dev": true,
"requires": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
@ -8093,12 +8216,11 @@
"react-lifecycles-compat": {
"version": "3.0.4",
"resolved": "https://registry.nlark.com/react-lifecycles-compat/download/react-lifecycles-compat-3.0.4.tgz",
"integrity": "sha1-TxonOv38jzSIqMUWv9p4+HI1I2I=",
"dev": true
"integrity": "sha1-TxonOv38jzSIqMUWv9p4+HI1I2I="
},
"react-popper": {
"version": "1.3.11",
"resolved": "https://registry.npm.taobao.org/react-popper/download/react-popper-1.3.11.tgz?cache=0&sync_timestamp=1616674786422&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-popper%2Fdownload%2Freact-popper-1.3.11.tgz",
"resolved": "https://registry.npm.taobao.org/react-popper/download/react-popper-1.3.11.tgz",
"integrity": "sha1-osw/Cme3W2bPpi0sQJ+d0fzHH/0=",
"dev": true,
"requires": {
@ -8313,7 +8435,6 @@
"version": "1.3.1",
"resolved": "https://registry.nlark.com/regexp.prototype.flags/download/regexp.prototype.flags-1.3.1.tgz",
"integrity": "sha1-fvNSro0VnnWMDq3Kb4/LTu8HviY=",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3"
@ -8428,8 +8549,7 @@
"resize-observer-polyfill": {
"version": "1.5.1",
"resolved": "https://registry.nlark.com/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz",
"integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ=",
"dev": true
"integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ="
},
"resolve": {
"version": "1.20.0",
@ -9789,8 +9909,7 @@
"typed-styles": {
"version": "0.0.7",
"resolved": "https://registry.npm.taobao.org/typed-styles/download/typed-styles-0.0.7.tgz",
"integrity": "sha1-kzkqAIeUxFlRGf9i3eaAnbxAo9k=",
"dev": true
"integrity": "sha1-kzkqAIeUxFlRGf9i3eaAnbxAo9k="
},
"typedarray": {
"version": "0.0.6",
@ -9837,6 +9956,12 @@
"typescript-compare": "^0.0.2"
}
},
"uc.micro": {
"version": "1.0.6",
"resolved": "https://registry.npm.taobao.org/uc.micro/download/uc.micro-1.0.6.tgz",
"integrity": "sha1-nEEagCpAmpH8bPdAgbq6NLJEmaw=",
"dev": true
},
"unicode-canonical-property-names-ecmascript": {
"version": "1.0.4",
"resolved": "https://registry.nlark.com/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
@ -10207,7 +10332,6 @@
"version": "4.0.3",
"resolved": "https://registry.nlark.com/warning/download/warning-4.0.3.tgz",
"integrity": "sha1-Fungd+uKhtavfWSqHgX9hbRnjKM=",
"dev": true,
"requires": {
"loose-envify": "^1.0.0"
}

3
package.json

@ -37,6 +37,7 @@
"@rollup/plugin-node-resolve": "^13.0.4",
"@rollup/plugin-replace": "^3.0.0",
"@rollup/plugin-typescript": "^8.2.3",
"@types/markdown-it": "^12.0.3",
"@types/minimist": "^1.2.2",
"@types/node": "^15.14.3",
"@types/react": "^17.0.0",
@ -60,6 +61,7 @@
"execa": "^5.1.1",
"i18next": "^20.3.4",
"i18next-browser-languagedetector": "^6.1.2",
"markdown-it": "^12.2.0",
"node-loader": "^2.0.0",
"react": "^17.0.0",
"react-dom": "^17.0.0",
@ -85,6 +87,7 @@
"windicss": "^3.1.3"
},
"dependencies": {
"@blueprintjs/table": "^3.9.0",
"@emotion/react": "^11.4.0",
"@emotion/styled": "^11.3.0",
"framer-motion": "^4.1.17",

9
src/main/facilities/main/index.ts

@ -14,6 +14,7 @@ ipcMain.on("@func:main:hide", () => {
}
})
let cur:string|null = null
export default function showWindow(url?: string) {
if (!Shared.data.mainWindow || Shared.data.mainWindow?.isDestroyed()) {
/**
@ -73,10 +74,16 @@ export default function showWindow(url?: string) {
} else {
Shared.data.mainWindow?.showInactive()
}
url = url === undefined ? '': url
if (cur === url){
return
}
if(!url){
cur = ""
Shared.data.mainWindow.loadURL(getFileUrl(""))
}else{
cur = url
Shared.data.mainWindow.loadURL(getFileUrl(url))
}
console.log(cur)
}

6
src/render/assets/style/common.scss

@ -2,6 +2,7 @@
@import "./reset.scss";
@import "./_font.scss";
@import "@blueprintjs/core/lib/css/blueprint.css";
@import "@blueprintjs/table/lib/css/table.css";
@import "@blueprintjs/icons/lib/css/blueprint-icons.css";
:focus{
@ -34,3 +35,8 @@ a {
.clearfix {
@include clearfix;
}
.container{
max-width: 900px;
margin: 0 auto;
}

2
src/render/main.tsx

@ -10,7 +10,7 @@ import Router from "./AppRouter";
// 静态资源地址变量请用"__static",在html中使用请用__static
console.log(electron);
console.log(__staticVar);
console.log(__staticVar);
ReactDOM.render(
<React.StrictMode>

55
src/render/route.tsx

@ -1,9 +1,33 @@
import Page404 from "@/views/Auth/Page404"
import Login from "@/views/Login"
import React, { lazy } from "react"
import { useLocation } from "react-router-dom"
export const Loading = (props: any) => <div style={{ color: props.color }}>Lodeing.22..</div>
function foundRoute(route: any, name: string, arrIndex?: number[]): any {
if (!arrIndex) {
arrIndex = []
}
for (let i = 0; i < route.length; i++) {
const element = route[i]
if (element.root) {
arrIndex = []
}
arrIndex.push(i)
let lena = element.path.split("/").length
let lenb = name.split("/").length
if (element.path == name && lena == lenb) {
return arrIndex
} else if (element.children) {
let a = foundRoute(element.children, name, arrIndex)
if (a) {
return a
}
}
}
}
let delay =
(Comp: any, duration = 1000) =>
() =>
@ -21,7 +45,7 @@ let delay =
})
)
export default [
const routes = [
{
path: "/about",
component: lazy(() => import("@/views/About")),
@ -84,3 +108,32 @@ export default [
component: Page404,
},
]
export function useRoute(){
const { pathname } = useLocation()
let oroute = JSON.parse(JSON.stringify(routes))
let index = foundRoute(routes, pathname)
let isLayout = true
let curA = null
let curB = null
if (index && index.length) {
let res = oroute[index[0]]
let cur = res
for (let i = 1; i < index.length; i++) {
const element = index[i]
cur.children = [cur.children[element]]
cur = cur.children[element]
}
if (cur) {
cur.children = []
}
if (cur.layout != undefined) {
isLayout = !!cur.layout
}
curA = cur
curB = res
}
return [curA,curB]
}
export default routes

3
src/render/views/About/index.module.scss

@ -0,0 +1,3 @@
.about{
padding: 20px;
}

25
src/render/views/About/index.tsx

@ -1,5 +1,7 @@
import React from "react"
import style from "./index.module.scss"
import { useLocation, Route, Switch, useHistory } from "react-router-dom"
import html from "./a.md"
function Test() {
return <div>test</div>
@ -10,18 +12,23 @@ export default function About(props: any) {
// let location = useLocation()
function back(){
console.log(1231);
history.replace("/about")
}
console.log(html)
return (
<div className="">
<div onClick={() =>back()}> asdasd</div>
<div>22{props.children}{location.href}</div>
<p>sadsa</p>
<p>sadsa</p>
<Route path="/about/aa" exact={true}>
<Test></Test>
</Route>
<div className={`container ${style.about}`}>
<div className={"bp3-running-text bp3-text-large"}>
{html}
</div>
{/*<div onClick={() =>back()}>阿萨 阿松大asdasd</div>*/}
{/*<div>22{props.children}{location.href}</div>*/}
{/*<p>sadsa</p>*/}
{/*<p>sadsa</p>*/}
{/*<Route path="/about/aa" exact={true}>*/}
{/* <Test></Test>*/}
{/*</Route>*/}
</div>
)
}

12
src/render/views/Home/index.module.scss

@ -0,0 +1,12 @@
.container{
padding: 20px;
max-width: 100%;
margin: 0 auto;
.title{
font-size: 25px;
font-weight: bolder;
}
.opeation{
margin: 20px 0;
}
}

36
src/render/views/Home/index.tsx

@ -1,33 +1,53 @@
import { addTodo, removeTodo } from "@/store/action/todo"
import { Button, ButtonGroup } from "@blueprintjs/core"
import { Cell, Column, Table } from "@blueprintjs/table"
import React from "react"
import { connect, useStore } from "react-redux"
import { connect } from "react-redux"
import style from "./index.module.scss"
import { Icon } from "@blueprintjs/core"
export interface HomeProps {
add(text: string): void
todo: ITodo[]
remove(id: number): void
}
function cellRenderer(rowIndex: number) {
return <Cell>{`$${(rowIndex * 10).toFixed(2)}`}</Cell>
}
function Home(props: HomeProps) {
const tabs = [
{icon: "globe", title:"添加闹钟"}
]
return (
<div>sada</div>
<div className={style.container}>
<div className={style.title}></div>
<div className={style.opeation}>
<ButtonGroup>
<Button></Button>
<Button></Button>
</ButtonGroup>
</div>
{/*<HotkeysProvider>*/}
<Table numRows={200}>
<Column name="标题" cellRenderer={cellRenderer}/>
<Column name="时间范围" cellRenderer={cellRenderer}/>
<Column name="操作" cellRenderer={cellRenderer}/>
</Table>
{/*</HotkeysProvider>*/}
</div>
)
}
const mapStateToProps = (state: any) => {
return {
todo: state.todo,
todo: state.todo
}
}
const mapDispatchToProps = (dispatch: any) => ({
add: (text: string) => dispatch(addTodo(text)),
remove: (id: string | number) => dispatch(removeTodo(id)),
remove: (id: string | number) => dispatch(removeTodo(id))
})
export default connect(mapStateToProps, mapDispatchToProps)(Home)

13
src/render/views/Layout/index.module.scss

@ -6,7 +6,7 @@
top: 0;
bottom: 0;
background-color: #2c2c2c;
width: 45px;
width: 55px;
display: flex;
flex-direction: column;
overflow: hidden;
@ -20,6 +20,15 @@
&:hover {
color: #f8ffff;
}
position: relative;
.activeLine{
position: absolute;
left: 0;
top: 6px;
bottom: 6px;
width: 3px;
background-color: white;
}
}
}
.leftList{
@ -28,6 +37,6 @@
}
}
.right{
margin-left: 45px;
margin-left: 55px;
}
}

117
src/render/views/Layout/index.tsx

@ -1,85 +1,66 @@
import React, { ReactElement } from "react"
import { Icon, IconName } from "@blueprintjs/core"
import route, {useRoute} from "@render/route"
import React from "react"
import { NavLink, useLocation } from "react-router-dom"
import style from "./index.module.scss"
import { useLocation } from "react-router-dom"
import { Icon } from "@blueprintjs/core"
import route from "@render/route"
// interface IProps {
// render(): ReactElement
// }
function foundRoute(route:any, name:string, arrIndex?: number[]):any{
if(!arrIndex){
arrIndex = []
export default function Layout(props: any) {
let isLayout = true
let [curRoute, routeList] = useRoute()
if (curRoute.layout != undefined) {
isLayout = !!curRoute.layout
}
for (let i = 0; i < route.length; i++) {
const element = route[i];
if(element.root){
arrIndex = []
}
arrIndex.push(i);
let lena = element.path.split("/").length
let lenb =name.split("/").length
console.log(element.path, name,lena,lenb, element.path == name && lena==lenb);
if(element.path == name && lena==lenb){
return arrIndex
} else if(element.children){
let a = foundRoute(element.children, name, arrIndex);
if(a){
return a
}
}
}
}
export default function (props: any) {
const {pathname} = useLocation()
console.log(pathname);
console.log(route);
let oroute = JSON.parse(JSON.stringify(route))
let index = foundRoute(route, pathname)
console.log(index);
let isLayout = true;
if(index&&index.length){
let res = oroute[index[0]];
let cur = res;
for (let i = 1; i < index.length; i++) {
const element = index[i];
cur.children = [cur.children[element]]
cur = cur.children[element]
}
if(cur){
cur.children = [];
}
console.log(cur);
if(cur.layout!=undefined){
isLayout = !!cur.layout
}
console.log(res);
interface TList {
icon: IconName;
path: string;
title: string;
text: string;
}
const list: TList[]= [
{
path: "/home",
icon: "time",
title: "添加闹钟",
text: "闹钟"
},
{
path: "/about",
icon: "mugshot",
title: "添加闹钟",
text: "关于"
},
]
return (
isLayout?(
isLayout ? (
<div className={style.Layout}>
<div className={style.left}>
<div className={style.leftList}>
<div className={style.leftItem} title={"添加闹钟"}>
<Icon icon="time" size={20}/>
<div></div>
<div className={style.left}>
<div className={style.leftList}>
{list.map((v,i)=>(
<NavLink key={i} replace to={v.path} style={{display: 'block'}}>
<div className={style.leftItem} title={v.title}>
<Icon icon={v.icon} size={20}/>
<div>{v.text}</div>
{v.path==curRoute.path&&(<div className={style.activeLine}></div>)}
</div>
</NavLink>
))}
</div>
</div>
<div className={style.leftListBottom}>
<div className={style.leftItem} title={"设置"}>
<Icon icon="settings" size={20} />
<div className={style.leftListBottom}>
<div className={style.leftItem} title={"设置"}>
<Icon icon="settings" size={20}/>
</div>
</div>
</div>
<div className={style.right}>
<props.render></props.render>
</div>
</div>
<div className={style.right}>
<props.render></props.render>
</div>
<div>sad</div>
</div>
):(<props.render></props.render>)
) : (<props.render></props.render>)
)
}

2
tsconfig.json

@ -23,7 +23,7 @@
"@main/*": ["src/main/*"],
"@src/*": ["src/*"],
"@root/*": ["./*"]
},
}
},
"include": ["src", "types"],
"exclude": ["node_modules"],

3
types/global.d.ts

@ -10,3 +10,6 @@ interface IAction extends IAny{
declare const __static: string;
declare const __staticVar: string;
declare module "*.md"

4
vite.config.ts

@ -5,13 +5,14 @@ const { resolve, join } = require("path")
import electron from "vitejs-plugin-electron"
import { minifyHtml, injectHtml } from "vite-plugin-html"
import replace from '@rollup/plugin-replace';
import md from './plugins/md';
let isDev = process.env.NODE_ENV === "development"
let plugins = []
let staticPath = isDev? '/static': 'static'
plugins.push(
md(),
replace({
preventAssignment: true,
"__static": staticPath,
@ -32,6 +33,7 @@ export default defineConfig({
},
},
server: {
// @ts-ignore
port: +process.env.PORT,
},
build: {

Loading…
Cancel
Save