new files
15
vue3-element-admin-thin/.editorconfig
Normal file
@ -0,0 +1,15 @@
|
||||
# http://editorconfig.org
|
||||
root = true
|
||||
|
||||
# 表示所有文件适用
|
||||
[*]
|
||||
charset = utf-8 # 设置文件字符集为 utf-8
|
||||
end_of_line = lf # 控制换行类型(lf | cr | crlf)
|
||||
indent_style = space # 缩进风格(tab | space)
|
||||
indent_size = 2 # 缩进大小
|
||||
insert_final_newline = true # 始终在文件末尾插入一个新行
|
||||
|
||||
# 表示仅 md 文件适用以下规则
|
||||
[*.md]
|
||||
max_line_length = off # 关闭最大行长度限制
|
||||
trim_trailing_whitespace = false # 关闭末尾空格修剪
|
11
vue3-element-admin-thin/.env.development
Normal file
@ -0,0 +1,11 @@
|
||||
# 应用端口
|
||||
VITE_APP_PORT = 3000
|
||||
|
||||
# 代理前缀
|
||||
VITE_APP_BASE_API = '/dev-api'
|
||||
|
||||
# 接口地址
|
||||
VITE_APP_API_URL = http://vapi.youlai.tech
|
||||
|
||||
# 是否启用 Mock 服务
|
||||
VITE_MOCK_DEV_SERVER = true
|
3
vue3-element-admin-thin/.env.production
Normal file
@ -0,0 +1,3 @@
|
||||
# 代理前缀
|
||||
VITE_APP_BASE_API = '/prod-api'
|
||||
|
14
vue3-element-admin-thin/.eslintignore
Normal file
@ -0,0 +1,14 @@
|
||||
dist
|
||||
node_modules
|
||||
public
|
||||
.husky
|
||||
.vscode
|
||||
.idea
|
||||
*.sh
|
||||
*.md
|
||||
|
||||
src/assets
|
||||
|
||||
.eslintrc.cjs
|
||||
.prettierrc.cjs
|
||||
.stylelintrc.cjs
|
309
vue3-element-admin-thin/.eslintrc-auto-import.json
Normal file
@ -0,0 +1,309 @@
|
||||
{
|
||||
"globals": {
|
||||
"Component": true,
|
||||
"ComponentPublicInstance": true,
|
||||
"ComputedRef": true,
|
||||
"EffectScope": true,
|
||||
"ElMessage": true,
|
||||
"ElMessageBox": true,
|
||||
"ElNotification": true,
|
||||
"InjectionKey": true,
|
||||
"PropType": true,
|
||||
"Ref": true,
|
||||
"VNode": true,
|
||||
"asyncComputed": true,
|
||||
"autoResetRef": true,
|
||||
"computed": true,
|
||||
"computedAsync": true,
|
||||
"computedEager": true,
|
||||
"computedInject": true,
|
||||
"computedWithControl": true,
|
||||
"controlledComputed": true,
|
||||
"controlledRef": true,
|
||||
"createApp": true,
|
||||
"createEventHook": true,
|
||||
"createGlobalState": true,
|
||||
"createInjectionState": true,
|
||||
"createReactiveFn": true,
|
||||
"createReusableTemplate": true,
|
||||
"createSharedComposable": true,
|
||||
"createTemplatePromise": true,
|
||||
"createUnrefFn": true,
|
||||
"customRef": true,
|
||||
"debouncedRef": true,
|
||||
"debouncedWatch": true,
|
||||
"defineAsyncComponent": true,
|
||||
"defineComponent": true,
|
||||
"eagerComputed": true,
|
||||
"effectScope": true,
|
||||
"extendRef": true,
|
||||
"getCurrentInstance": true,
|
||||
"getCurrentScope": true,
|
||||
"h": true,
|
||||
"ignorableWatch": true,
|
||||
"inject": true,
|
||||
"isDefined": true,
|
||||
"isProxy": true,
|
||||
"isReactive": true,
|
||||
"isReadonly": true,
|
||||
"isRef": true,
|
||||
"makeDestructurable": true,
|
||||
"markRaw": true,
|
||||
"nextTick": true,
|
||||
"onActivated": true,
|
||||
"onBeforeMount": true,
|
||||
"onBeforeUnmount": true,
|
||||
"onBeforeUpdate": true,
|
||||
"onClickOutside": true,
|
||||
"onDeactivated": true,
|
||||
"onErrorCaptured": true,
|
||||
"onKeyStroke": true,
|
||||
"onLongPress": true,
|
||||
"onMounted": true,
|
||||
"onRenderTracked": true,
|
||||
"onRenderTriggered": true,
|
||||
"onScopeDispose": true,
|
||||
"onServerPrefetch": true,
|
||||
"onStartTyping": true,
|
||||
"onUnmounted": true,
|
||||
"onUpdated": true,
|
||||
"pausableWatch": true,
|
||||
"provide": true,
|
||||
"reactify": true,
|
||||
"reactifyObject": true,
|
||||
"reactive": true,
|
||||
"reactiveComputed": true,
|
||||
"reactiveOmit": true,
|
||||
"reactivePick": true,
|
||||
"readonly": true,
|
||||
"ref": true,
|
||||
"refAutoReset": true,
|
||||
"refDebounced": true,
|
||||
"refDefault": true,
|
||||
"refThrottled": true,
|
||||
"refWithControl": true,
|
||||
"resolveComponent": true,
|
||||
"resolveRef": true,
|
||||
"resolveUnref": true,
|
||||
"shallowReactive": true,
|
||||
"shallowReadonly": true,
|
||||
"shallowRef": true,
|
||||
"syncRef": true,
|
||||
"syncRefs": true,
|
||||
"templateRef": true,
|
||||
"throttledRef": true,
|
||||
"throttledWatch": true,
|
||||
"toRaw": true,
|
||||
"toReactive": true,
|
||||
"toRef": true,
|
||||
"toRefs": true,
|
||||
"toValue": true,
|
||||
"triggerRef": true,
|
||||
"tryOnBeforeMount": true,
|
||||
"tryOnBeforeUnmount": true,
|
||||
"tryOnMounted": true,
|
||||
"tryOnScopeDispose": true,
|
||||
"tryOnUnmounted": true,
|
||||
"unref": true,
|
||||
"unrefElement": true,
|
||||
"until": true,
|
||||
"useActiveElement": true,
|
||||
"useAnimate": true,
|
||||
"useArrayDifference": true,
|
||||
"useArrayEvery": true,
|
||||
"useArrayFilter": true,
|
||||
"useArrayFind": true,
|
||||
"useArrayFindIndex": true,
|
||||
"useArrayFindLast": true,
|
||||
"useArrayIncludes": true,
|
||||
"useArrayJoin": true,
|
||||
"useArrayMap": true,
|
||||
"useArrayReduce": true,
|
||||
"useArraySome": true,
|
||||
"useArrayUnique": true,
|
||||
"useAsyncQueue": true,
|
||||
"useAsyncState": true,
|
||||
"useAttrs": true,
|
||||
"useBase64": true,
|
||||
"useBattery": true,
|
||||
"useBluetooth": true,
|
||||
"useBreakpoints": true,
|
||||
"useBroadcastChannel": true,
|
||||
"useBrowserLocation": true,
|
||||
"useCached": true,
|
||||
"useClipboard": true,
|
||||
"useCloned": true,
|
||||
"useColorMode": true,
|
||||
"useConfirmDialog": true,
|
||||
"useCounter": true,
|
||||
"useCssModule": true,
|
||||
"useCssVar": true,
|
||||
"useCssVars": true,
|
||||
"useCurrentElement": true,
|
||||
"useCycleList": true,
|
||||
"useDark": true,
|
||||
"useDateFormat": true,
|
||||
"useDebounce": true,
|
||||
"useDebounceFn": true,
|
||||
"useDebouncedRefHistory": true,
|
||||
"useDeviceMotion": true,
|
||||
"useDeviceOrientation": true,
|
||||
"useDevicePixelRatio": true,
|
||||
"useDevicesList": true,
|
||||
"useDisplayMedia": true,
|
||||
"useDocumentVisibility": true,
|
||||
"useDraggable": true,
|
||||
"useDropZone": true,
|
||||
"useElementBounding": true,
|
||||
"useElementByPoint": true,
|
||||
"useElementHover": true,
|
||||
"useElementSize": true,
|
||||
"useElementVisibility": true,
|
||||
"useEventBus": true,
|
||||
"useEventListener": true,
|
||||
"useEventSource": true,
|
||||
"useEyeDropper": true,
|
||||
"useFavicon": true,
|
||||
"useFetch": true,
|
||||
"useFileDialog": true,
|
||||
"useFileSystemAccess": true,
|
||||
"useFocus": true,
|
||||
"useFocusWithin": true,
|
||||
"useFps": true,
|
||||
"useFullscreen": true,
|
||||
"useGamepad": true,
|
||||
"useGeolocation": true,
|
||||
"useIdle": true,
|
||||
"useImage": true,
|
||||
"useInfiniteScroll": true,
|
||||
"useIntersectionObserver": true,
|
||||
"useInterval": true,
|
||||
"useIntervalFn": true,
|
||||
"useKeyModifier": true,
|
||||
"useLastChanged": true,
|
||||
"useLocalStorage": true,
|
||||
"useMagicKeys": true,
|
||||
"useManualRefHistory": true,
|
||||
"useMediaControls": true,
|
||||
"useMediaQuery": true,
|
||||
"useMemoize": true,
|
||||
"useMemory": true,
|
||||
"useMounted": true,
|
||||
"useMouse": true,
|
||||
"useMouseInElement": true,
|
||||
"useMousePressed": true,
|
||||
"useMutationObserver": true,
|
||||
"useNavigatorLanguage": true,
|
||||
"useNetwork": true,
|
||||
"useNow": true,
|
||||
"useObjectUrl": true,
|
||||
"useOffsetPagination": true,
|
||||
"useOnline": true,
|
||||
"usePageLeave": true,
|
||||
"useParallax": true,
|
||||
"useParentElement": true,
|
||||
"usePerformanceObserver": true,
|
||||
"usePermission": true,
|
||||
"usePointer": true,
|
||||
"usePointerLock": true,
|
||||
"usePointerSwipe": true,
|
||||
"usePreferredColorScheme": true,
|
||||
"usePreferredContrast": true,
|
||||
"usePreferredDark": true,
|
||||
"usePreferredLanguages": true,
|
||||
"usePreferredReducedMotion": true,
|
||||
"usePrevious": true,
|
||||
"useRafFn": true,
|
||||
"useRefHistory": true,
|
||||
"useResizeObserver": true,
|
||||
"useScreenOrientation": true,
|
||||
"useScreenSafeArea": true,
|
||||
"useScriptTag": true,
|
||||
"useScroll": true,
|
||||
"useScrollLock": true,
|
||||
"useSessionStorage": true,
|
||||
"useShare": true,
|
||||
"useSlots": true,
|
||||
"useSorted": true,
|
||||
"useSpeechRecognition": true,
|
||||
"useSpeechSynthesis": true,
|
||||
"useStepper": true,
|
||||
"useStorage": true,
|
||||
"useStorageAsync": true,
|
||||
"useStyleTag": true,
|
||||
"useSupported": true,
|
||||
"useSwipe": true,
|
||||
"useTemplateRefsList": true,
|
||||
"useTextDirection": true,
|
||||
"useTextSelection": true,
|
||||
"useTextareaAutosize": true,
|
||||
"useThrottle": true,
|
||||
"useThrottleFn": true,
|
||||
"useThrottledRefHistory": true,
|
||||
"useTimeAgo": true,
|
||||
"useTimeout": true,
|
||||
"useTimeoutFn": true,
|
||||
"useTimeoutPoll": true,
|
||||
"useTimestamp": true,
|
||||
"useTitle": true,
|
||||
"useToNumber": true,
|
||||
"useToString": true,
|
||||
"useToggle": true,
|
||||
"useTransition": true,
|
||||
"useUrlSearchParams": true,
|
||||
"useUserMedia": true,
|
||||
"useVModel": true,
|
||||
"useVModels": true,
|
||||
"useVibrate": true,
|
||||
"useVirtualList": true,
|
||||
"useWakeLock": true,
|
||||
"useWebNotification": true,
|
||||
"useWebSocket": true,
|
||||
"useWebWorker": true,
|
||||
"useWebWorkerFn": true,
|
||||
"useWindowFocus": true,
|
||||
"useWindowScroll": true,
|
||||
"useWindowSize": true,
|
||||
"watch": true,
|
||||
"watchArray": true,
|
||||
"watchAtMost": true,
|
||||
"watchDebounced": true,
|
||||
"watchDeep": true,
|
||||
"watchEffect": true,
|
||||
"watchIgnorable": true,
|
||||
"watchImmediate": true,
|
||||
"watchOnce": true,
|
||||
"watchPausable": true,
|
||||
"watchPostEffect": true,
|
||||
"watchSyncEffect": true,
|
||||
"watchThrottled": true,
|
||||
"watchTriggerable": true,
|
||||
"watchWithFilter": true,
|
||||
"whenever": true,
|
||||
"ExtractDefaultPropTypes": true,
|
||||
"ExtractPropTypes": true,
|
||||
"ExtractPublicPropTypes": true,
|
||||
"WritableComputedRef": true,
|
||||
"acceptHMRUpdate": true,
|
||||
"createPinia": true,
|
||||
"defineStore": true,
|
||||
"getActivePinia": true,
|
||||
"injectLocal": true,
|
||||
"mapActions": true,
|
||||
"mapGetters": true,
|
||||
"mapState": true,
|
||||
"mapStores": true,
|
||||
"mapWritableState": true,
|
||||
"onBeforeRouteLeave": true,
|
||||
"onBeforeRouteUpdate": true,
|
||||
"provideLocal": true,
|
||||
"setActivePinia": true,
|
||||
"setMapStoreSuffix": true,
|
||||
"storeToRefs": true,
|
||||
"useClipboardItems": true,
|
||||
"useI18n": true,
|
||||
"useLink": true,
|
||||
"useRoute": true,
|
||||
"useRouter": true
|
||||
}
|
||||
}
|
88
vue3-element-admin-thin/.eslintrc.cjs
Normal file
@ -0,0 +1,88 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
env: {
|
||||
browser: true,
|
||||
es2021: true,
|
||||
node: true,
|
||||
},
|
||||
parser: "vue-eslint-parser",
|
||||
extends: [
|
||||
// https://eslint.vuejs.org/user-guide/#usage
|
||||
"plugin:vue/vue3-recommended",
|
||||
"./.eslintrc-auto-import.json",
|
||||
"prettier",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"plugin:prettier/recommended",
|
||||
],
|
||||
parserOptions: {
|
||||
ecmaVersion: "latest",
|
||||
sourceType: "module",
|
||||
parser: "@typescript-eslint/parser",
|
||||
project: "./tsconfig.*?.json",
|
||||
createDefaultProgram: false,
|
||||
extraFileExtensions: [".vue"],
|
||||
},
|
||||
plugins: ["vue", "@typescript-eslint"],
|
||||
rules: {
|
||||
// https://eslint.vuejs.org/rules/#priority-a-essential-error-prevention
|
||||
"vue/multi-word-component-names": "off",
|
||||
"vue/no-v-model-argument": "off",
|
||||
"vue/script-setup-uses-vars": "error",
|
||||
"vue/no-reserved-component-names": "off",
|
||||
"vue/custom-event-name-casing": "off",
|
||||
"vue/attributes-order": "off",
|
||||
"vue/one-component-per-file": "off",
|
||||
"vue/html-closing-bracket-newline": "off",
|
||||
"vue/max-attributes-per-line": "off",
|
||||
"vue/multiline-html-element-content-newline": "off",
|
||||
"vue/singleline-html-element-content-newline": "off",
|
||||
"vue/attribute-hyphenation": "off",
|
||||
"vue/require-default-prop": "off",
|
||||
"vue/require-explicit-emits": "off",
|
||||
"vue/html-self-closing": [
|
||||
"error",
|
||||
{
|
||||
html: {
|
||||
void: "always",
|
||||
normal: "never",
|
||||
component: "always",
|
||||
},
|
||||
svg: "always",
|
||||
math: "always",
|
||||
},
|
||||
],
|
||||
|
||||
"@typescript-eslint/no-empty-function": "off", // 关闭空方法检查
|
||||
"@typescript-eslint/no-explicit-any": "off", // 关闭any类型的警告
|
||||
"@typescript-eslint/no-non-null-assertion": "off",
|
||||
"@typescript-eslint/ban-ts-ignore": "off",
|
||||
"@typescript-eslint/ban-ts-comment": "off",
|
||||
"@typescript-eslint/ban-types": "off",
|
||||
"@typescript-eslint/explicit-function-return-type": "off",
|
||||
"@typescript-eslint/no-explicit-any": "off",
|
||||
"@typescript-eslint/no-var-requires": "off",
|
||||
"@typescript-eslint/no-empty-function": "off",
|
||||
"@typescript-eslint/no-use-before-define": "off",
|
||||
"@typescript-eslint/no-non-null-assertion": "off",
|
||||
"@typescript-eslint/explicit-module-boundary-types": "off",
|
||||
"@typescript-eslint/no-unused-vars": "off",
|
||||
|
||||
"prettier/prettier": [
|
||||
"error",
|
||||
{
|
||||
useTabs: false, // 不使用制表符
|
||||
},
|
||||
],
|
||||
},
|
||||
// eslint不能对html文件生效
|
||||
overrides: [
|
||||
{
|
||||
files: ["*.html"],
|
||||
processor: "vue/.vue",
|
||||
},
|
||||
],
|
||||
// https://eslint.org/docs/latest/use/configure/language-options#specifying-globals
|
||||
globals: {
|
||||
OptionType: "readonly",
|
||||
},
|
||||
};
|
18
vue3-element-admin-thin/.gitignore
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
node_modules
|
||||
.DS_Store
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
.history
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.local
|
||||
|
||||
package-lock.json
|
||||
pnpm-lock.yaml
|
||||
stats.html
|
1
vue3-element-admin-thin/.husky/commit-msg
Normal file
@ -0,0 +1 @@
|
||||
npx --no-install commitlint --edit $1
|
1
vue3-element-admin-thin/.husky/pre-commit
Normal file
@ -0,0 +1 @@
|
||||
npm run lint:lint-staged
|
11
vue3-element-admin-thin/.prettierignore
Normal file
@ -0,0 +1,11 @@
|
||||
dist
|
||||
node_modules
|
||||
public
|
||||
.husky
|
||||
.vscode
|
||||
.idea
|
||||
*.sh
|
||||
*.md
|
||||
|
||||
src/assets
|
||||
stats.html
|
46
vue3-element-admin-thin/.prettierrc.cjs
Normal file
@ -0,0 +1,46 @@
|
||||
module.exports = {
|
||||
// (x)=>{},单个参数箭头函数是否显示小括号。(always:始终显示;avoid:省略括号。默认:always)
|
||||
arrowParens: "always",
|
||||
// 开始标签的右尖括号是否跟随在最后一行属性末尾,默认false
|
||||
bracketSameLine: false,
|
||||
// 对象字面量的括号之间打印空格 (true - Example: { foo: bar } ; false - Example: {foo:bar})
|
||||
bracketSpacing: true,
|
||||
// 是否格式化一些文件中被嵌入的代码片段的风格(auto|off;默认auto)
|
||||
embeddedLanguageFormatting: "auto",
|
||||
// 指定 HTML 文件的空格敏感度 (css|strict|ignore;默认css)
|
||||
htmlWhitespaceSensitivity: "ignore",
|
||||
// 当文件已经被 Prettier 格式化之后,是否会在文件顶部插入一个特殊的 @format 标记,默认false
|
||||
insertPragma: false,
|
||||
// 在 JSX 中使用单引号替代双引号,默认false
|
||||
jsxSingleQuote: false,
|
||||
// 每行最多字符数量,超出换行(默认80)
|
||||
printWidth: 80,
|
||||
// 超出打印宽度 (always | never | preserve )
|
||||
proseWrap: "preserve",
|
||||
// 对象属性是否使用引号(as-needed | consistent | preserve;默认as-needed:对象的属性需要加引号才添加;)
|
||||
quoteProps: "as-needed",
|
||||
// 是否只格式化在文件顶部包含特定注释(@prettier| @format)的文件,默认false
|
||||
requirePragma: false,
|
||||
// 结尾添加分号
|
||||
semi: true,
|
||||
// 使用单引号 (true:单引号;false:双引号)
|
||||
singleQuote: false,
|
||||
// 缩进空格数,默认2个空格
|
||||
tabWidth: 2,
|
||||
// 元素末尾是否加逗号,默认es5: ES5中的 objects, arrays 等会添加逗号,TypeScript 中的 type 后不加逗号
|
||||
trailingComma: "es5",
|
||||
// 指定缩进方式,空格或tab,默认false,即使用空格
|
||||
useTabs: false,
|
||||
// vue 文件中是否缩进 <style> 和 <script> 标签,默认 false
|
||||
vueIndentScriptAndStyle: false,
|
||||
|
||||
endOfLine: "auto",
|
||||
overrides: [
|
||||
{
|
||||
files: "*.html",
|
||||
options: {
|
||||
parser: "html",
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
11
vue3-element-admin-thin/.stylelintignore
Normal file
@ -0,0 +1,11 @@
|
||||
dist
|
||||
node_modules
|
||||
public
|
||||
.husky
|
||||
.vscode
|
||||
.idea
|
||||
*.sh
|
||||
*.md
|
||||
|
||||
src/assets
|
||||
stats.html
|
51
vue3-element-admin-thin/.stylelintrc.cjs
Normal file
@ -0,0 +1,51 @@
|
||||
module.exports = {
|
||||
// 继承推荐规范配置
|
||||
extends: [
|
||||
"stylelint-config-standard",
|
||||
"stylelint-config-recommended-scss",
|
||||
"stylelint-config-recommended-vue/scss",
|
||||
"stylelint-config-html/vue",
|
||||
"stylelint-config-recess-order",
|
||||
],
|
||||
// 指定不同文件对应的解析器
|
||||
overrides: [
|
||||
{
|
||||
files: ["**/*.{vue,html}"],
|
||||
customSyntax: "postcss-html",
|
||||
},
|
||||
{
|
||||
files: ["**/*.{css,scss}"],
|
||||
customSyntax: "postcss-scss",
|
||||
},
|
||||
],
|
||||
// 自定义规则
|
||||
rules: {
|
||||
"import-notation": "string", // 指定导入CSS文件的方式("string"|"url")
|
||||
"selector-class-pattern": null, // 选择器类名命名规则
|
||||
"custom-property-pattern": null, // 自定义属性命名规则
|
||||
"keyframes-name-pattern": null, // 动画帧节点样式命名规则
|
||||
"no-descending-specificity": null, // 允许无降序特异性
|
||||
"no-empty-source": null, // 允许空样式
|
||||
// 允许 global 、export 、deep伪类
|
||||
"selector-pseudo-class-no-unknown": [
|
||||
true,
|
||||
{
|
||||
ignorePseudoClasses: ["global", "export", "deep"],
|
||||
},
|
||||
],
|
||||
// 允许未知属性
|
||||
"property-no-unknown": [
|
||||
true,
|
||||
{
|
||||
ignoreProperties: [],
|
||||
},
|
||||
],
|
||||
// 允许未知规则
|
||||
"at-rule-no-unknown": [
|
||||
true,
|
||||
{
|
||||
ignoreAtRules: ["apply", "use", "forward"],
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
11
vue3-element-admin-thin/.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"vue.volar",
|
||||
"antfu.unocss",
|
||||
"lokalise.i18n-ally",
|
||||
"dbaeumer.vscode-eslint",
|
||||
"esbenp.prettier-vscode",
|
||||
"stylelint.vscode-stylelint",
|
||||
"editorconfig.editorconfig"
|
||||
]
|
||||
}
|
80
vue3-element-admin-thin/.vscode/settings.json
vendored
Normal file
@ -0,0 +1,80 @@
|
||||
{
|
||||
"typescript.tsdk": "./node_modules/typescript/lib",
|
||||
"npm.packageManager": "pnpm",
|
||||
"editor.tabSize": 2,
|
||||
"editor.formatOnSave": true,
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"editor.quickSuggestions": {
|
||||
"other": true,
|
||||
"comments": true,
|
||||
"strings": true
|
||||
},
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll": "explicit",
|
||||
"source.fixAll.eslint": "explicit",
|
||||
"source.fixAll.stylelint": "explicit"
|
||||
},
|
||||
"files.eol": "\n",
|
||||
"search.exclude": {
|
||||
"**/node_modules": true,
|
||||
"**/*.log": true,
|
||||
"**/*.log*": true,
|
||||
"**/bower_components": true,
|
||||
"**/dist": true,
|
||||
"**/elehukouben": true,
|
||||
"**/.git": true,
|
||||
"**/.gitignore": true,
|
||||
"**/.svn": true,
|
||||
"**/.DS_Store": true,
|
||||
"**/.idea": true,
|
||||
"**/.vscode": false,
|
||||
"**/yarn.lock": true,
|
||||
"**/tmp": true,
|
||||
"out": true,
|
||||
"dist": true,
|
||||
"node_modules": true,
|
||||
"CHANGELOG.md": true,
|
||||
"examples": true,
|
||||
"res": true,
|
||||
"screenshots": true,
|
||||
"yarn-error.log": true,
|
||||
"**/.yarn": true
|
||||
},
|
||||
"files.exclude": {
|
||||
"**/.cache": true,
|
||||
"**/.editorconfig": true,
|
||||
"**/.eslintcache": true,
|
||||
"**/bower_components": true,
|
||||
"**/.idea": true,
|
||||
"**/tmp": true,
|
||||
"**/.git": true,
|
||||
"**/.svn": true,
|
||||
"**/.hg": true,
|
||||
"**/CVS": true,
|
||||
"**/.DS_Store": true
|
||||
},
|
||||
"files.watcherExclude": {
|
||||
"**/.git/objects/**": true,
|
||||
"**/.git/subtree-cache/**": true,
|
||||
"**/.vscode/**": true,
|
||||
"**/node_modules/**": true,
|
||||
"**/tmp/**": true,
|
||||
"**/bower_components/**": true,
|
||||
"**/dist/**": true,
|
||||
"**/yarn.lock": true
|
||||
},
|
||||
"i18n-ally.keystyle": "nested",
|
||||
"i18n-ally.sortKeys": true,
|
||||
"i18n-ally.namespace": false,
|
||||
"i18n-ally.pathMatcher": "{namespaces}/{locale}.{ext}",
|
||||
"i18n-ally.enabledParsers": ["ts"],
|
||||
"i18n-ally.sourceLanguage": "en",
|
||||
"i18n-ally.displayLanguage": "zh-CN",
|
||||
"i18n-ally.enabledFrameworks": [
|
||||
"vue",
|
||||
"react"
|
||||
],
|
||||
"i18n-ally.localesPaths": [
|
||||
"src/lang"
|
||||
],
|
||||
}
|
23
vue3-element-admin-thin/.vscode/vue3.0.code-snippets
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"Vue3.0快速生成模板": {
|
||||
"scope": "vue",
|
||||
"prefix": "Vue3.0",
|
||||
"body": [
|
||||
"<template>",
|
||||
" <div>${1:test}</div>",
|
||||
"</template>",
|
||||
"",
|
||||
"<script lang=\"ts\">",
|
||||
"export default {",
|
||||
" setup() {",
|
||||
" return {};",
|
||||
" },",
|
||||
"};",
|
||||
"</script>",
|
||||
"",
|
||||
"<style lang=\"scss\" scoped></style>",
|
||||
""
|
||||
],
|
||||
"description": "Vue3.0"
|
||||
}
|
||||
}
|
17
vue3-element-admin-thin/.vscode/vue3.2.code-snippets
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"Vue3.2+快速生成模板": {
|
||||
"scope": "vue",
|
||||
"prefix": "Vue3.2+",
|
||||
"body": [
|
||||
"<script setup lang=\"ts\"></script>",
|
||||
"",
|
||||
"<template>",
|
||||
" <div>${1:test}</div>",
|
||||
"</template>",
|
||||
"",
|
||||
"<style lang=\"scss\" scoped></style>",
|
||||
""
|
||||
],
|
||||
"description": "Vue3.2+"
|
||||
}
|
||||
}
|
21
vue3-element-admin-thin/.vscode/vue3.3.code-snippets
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"Vue3.3+defineOptions快速生成模板": {
|
||||
"scope": "vue",
|
||||
"prefix": "Vue3.3+",
|
||||
"body": [
|
||||
"<script setup lang=\"ts\">",
|
||||
"defineOptions({",
|
||||
" name: \"\",",
|
||||
"});",
|
||||
"</script>",
|
||||
"",
|
||||
"<template>",
|
||||
" <div>${1:test}</div>",
|
||||
"</template>",
|
||||
"",
|
||||
"<style lang=\"scss\" scoped></style>",
|
||||
""
|
||||
],
|
||||
"description": "Vue3.3+defineOptions快速生成模板"
|
||||
}
|
||||
}
|
21
vue3-element-admin-thin/LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021-present 有来开源组织
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
165
vue3-element-admin-thin/README.en-US.md
Normal file
@ -0,0 +1,165 @@
|
||||
|
||||
<div align="center">
|
||||
<img alt="vue3-element-admin" width="80" height="80" src="./src/assets/logo.png">
|
||||
<h1>vue3-element-admin</h1>
|
||||
|
||||
<img src="https://img.shields.io/badge/Vue-3.4.35-brightgreen.svg"/>
|
||||
<img src="https://img.shields.io/badge/Vite-5.3.5-green.svg"/>
|
||||
<img src="https://img.shields.io/badge/Element Plus-2.7.8-blue.svg"/>
|
||||
<img src="https://img.shields.io/badge/license-MIT-green.svg"/>
|
||||
<a href="https://gitee.com/youlaiorg" target="_blank">
|
||||
<img src="https://img.shields.io/badge/Author-有来开源组织-orange.svg"/>
|
||||
</a>
|
||||
</div>
|
||||
|
||||

|
||||
|
||||
<div align="center">
|
||||
<a target="_blank" href="http://vue3.youlai.tech">👀 Live Preview</a> | <a target="_blank" href="https://juejin.cn/post/7228990409909108793">📖 Read Documentation</a> | 🌐 <a href="./README.md">中文
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
## Introduction
|
||||
|
||||
[vue3-element-admin](https://gitee.com/youlaiorg/vue3-element-admin) is a free and open-source admin template for backend management frontend, built with popular technologies such as Vue3, Vite5, TypeScript, Element-Plus, and Pinia (with accompanying [backend source code](https://gitee.com/youlaiorg/youlai-boot)).
|
||||
|
||||
|
||||
|
||||
|
||||
## Project Features
|
||||
|
||||
- **Simple and Easy-to-use**: Upgraded version of [vue-element-admin](https://gitee.com/panjiachen/vue-element-admin) for Vue3, with minimal encapsulation and easy to get started.
|
||||
|
||||
- **Data Interaction**: Support both local `Mock` data and remote API. Comes with [Java backend source code](https://gitee.com/youlaiorg/youlai-boot) and online API documentation.
|
||||
|
||||
- **Permission Management**: Complete permission system for users, roles, menus, dictionaries, and departments.
|
||||
|
||||
- **Essential Infrastructure**: Dynamic routing, button permissions, internationalization, code style, Git commit conventions, and common component encapsulation.
|
||||
|
||||
- **Continuous Updates**: Since 2021, the project has maintained an open-source status with continuous updates, integrating new tools and dependencies in real time, and has accumulated a broad user base.
|
||||
|
||||
## Project Preview
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## Project Links
|
||||
|
||||
| Project | Gitee | Github | GitCode |
|
||||
| ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
| Frontend | [vue3-element-admin](https://gitee.com/youlaiorg/vue3-element-admin) | [vue3-element-admin](https://github.com/youlaitech/vue3-element-admin) | [vue3-element-admin](https://gitcode.net/youlai/vue3-element-admin) |
|
||||
| Backend | [youlai-boot](https://gitee.com/youlaiorg/youlai-boot) | [youlai-boot](https://github.com/haoxianrui/youlai-boot.git) | [youlai-boot](https://gitcode.net/youlai/youlai-boot) |
|
||||
|
||||
## Environment Setup
|
||||
|
||||
| Environment | Name and Version | Download Link |
|
||||
| -------------------- | :----------------------------------------------------------- | ------------------------------------------------------------ |
|
||||
| **Development Tool** | VSCode | [Download](https://code.visualstudio.com/Download) |
|
||||
| **Runtime Environment** | Node ≥18 | [Download](http://nodejs.cn/download) |
|
||||
|
||||
|
||||
## Project Setup
|
||||
|
||||
```bash
|
||||
# Clone the repository
|
||||
git clone https://gitee.com/youlaiorg/vue3-element-admin.git
|
||||
|
||||
# Change directory
|
||||
cd vue3-element-admin
|
||||
|
||||
# Install pnpm
|
||||
npm install pnpm -g
|
||||
|
||||
# Install dependencies
|
||||
pnpm install
|
||||
|
||||
# Start the project
|
||||
pnpm run dev
|
||||
```
|
||||
|
||||
## Project Deployment
|
||||
|
||||
```bash
|
||||
# Build the project
|
||||
pnpm run build
|
||||
|
||||
# Upload files to the remote server
|
||||
Copy the files generated in the `dist` directory to the `/usr/share/nginx/html` directory.
|
||||
|
||||
# nginx.cofig configuration
|
||||
server {
|
||||
listen 80;
|
||||
server_name localhost;
|
||||
location / {
|
||||
root /usr/share/nginx/html;
|
||||
index index.html index.htm;
|
||||
}
|
||||
# Reverse proxy configuration
|
||||
location /prod-api/ {
|
||||
proxy_pass http://vapi.youlai.tech/; # Replace vapi.youlai.tech with your backend API address
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Local Mock
|
||||
|
||||
The project supports both online API and local mock API. By default, it uses the online API. If you want to switch to the mock API, modify the value of `VITE_MOCK_DEV_SERVER` in the `.env.development` file to `true`.
|
||||
|
||||
## Backend API
|
||||
|
||||
> If you have a basic understanding of Java development, follow these steps to convert online API to local backend API and set up a full-stack development environment.
|
||||
|
||||
1. Get the backend source code based on `Java` and `SpringBoot` from [youlai-boot](https://gitee.com/youlaiorg/youlai-boot.git).
|
||||
2. Follow the instructions in the backend project's README.md to set up the local environment.
|
||||
3. Modify the value of `VITE_APP_API_URL` in the `.env.development` file to `http://localhost:8989`, replacing it with the backend API URL.
|
||||
|
||||
## Notes
|
||||
|
||||
- **Auto import plugin is disabled by default**
|
||||
|
||||
Component type declarations have been automatically generated for the template project. If you add and use new components, follow the instructions in the screenshot to enable automatic generation. After automatic generation is complete, remember to set it back to `false` to avoid conflicts.
|
||||
|
||||

|
||||
|
||||
- **Blank page when accessing the project**
|
||||
|
||||
Try upgrading your browser, as older browser engines may not support certain new JavaScript syntax, such as optional chaining operator `?.`.
|
||||
|
||||
- **Red highlight on project components, functions, and imports**
|
||||
|
||||
Restart VSCode to try again.
|
||||
|
||||
- **Other issues**
|
||||
|
||||
If you have any other issues or suggestions, please open an [issue](https://gitee.com/youlaiorg/vue3-element-admin/issues/new).
|
||||
|
||||
## Project Documentation
|
||||
|
||||
- [Building a Backend Management System from Scratch with Vue3, Vite, TypeScript, and Element-Plus](https://blog.csdn.net/u013737132/article/details/130191394)
|
||||
|
||||
- [ESLint+Prettier+Stylelint+EditorConfig for Standardized and Unified Frontend Code Style](https://blog.csdn.net/u013737132/article/details/130190788)
|
||||
- [Git Commit Conventions with Husky, Lint-staged, Commitlint, Commitizen, and cz-git](https://blog.csdn.net/u013737132/article/details/130191363)
|
||||
|
||||
## Commit Conventions
|
||||
|
||||
Execute `pnpm run commit` to invoke interactive git commit and complete the information input and selection according to the prompts.
|
||||
|
||||

|
||||
|
||||
## Community 🚀
|
||||
|
||||
> **Follow "Youlai Tech" WeChat Official Account to get the QR code for the community.**
|
||||
>
|
||||
> If the QR code for the community has expired, please add my WeChat (haoxianrui) and indicate whether you are interested in "Frontend", "Backend", or "Full Stack" to get the latest QR code.
|
||||
>
|
||||
> This measure is taken to ensure the quality of the community and prevent marketing advertising from infiltrating. Thank you for your understanding!
|
||||
|
||||
| Official Account | Community |
|
||||
|:----:|:----:|
|
||||
|  |  |
|
||||
|
191
vue3-element-admin-thin/README.md
Normal file
@ -0,0 +1,191 @@
|
||||
|
||||
<div align="center">
|
||||
<img alt="vue3-element-admin" width="80" height="80" src="./src/assets/logo.png">
|
||||
<h1>vue3-element-admin</h1>
|
||||
|
||||
<img src="https://img.shields.io/badge/Vue-3.4.35-brightgreen.svg"/>
|
||||
<img src="https://img.shields.io/badge/Vite-5.3.5-green.svg"/>
|
||||
<img src="https://img.shields.io/badge/Element Plus-2.7.8-blue.svg"/>
|
||||
<img src="https://img.shields.io/badge/license-MIT-green.svg"/>
|
||||
<a href="https://gitee.com/youlaiorg" target="_blank">
|
||||
<img src="https://img.shields.io/badge/Author-有来开源组织-orange.svg"/>
|
||||
</a>
|
||||
</div>
|
||||
|
||||

|
||||
|
||||
|
||||
<div align="center">
|
||||
<a target="_blank" href="http://vue3.youlai.tech">🔍 在线预览</a> | <a target="_blank" href="https://juejin.cn/post/7228990409909108793">📖 阅读文档</a> | <a href="./README.en-US.md">🌐English
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
## 项目简介
|
||||
|
||||
[vue3-element-admin](https://gitee.com/youlaiorg/vue3-element-admin) 是基于 Vue3 + Vite5+ TypeScript5 + Element-Plus + Pinia 等主流技术栈构建的免费开源的中后台管理的前端模板(配套[Java 后端源码](https://gitee.com/youlaiorg/youlai-boot))。
|
||||
|
||||
|
||||
## 项目特色
|
||||
|
||||
- **简洁易用**:基于 [vue-element-admin](https://gitee.com/panjiachen/vue-element-admin) 升级的 Vue3 版本,无过渡封装 ,易上手。
|
||||
|
||||
- **数据交互**:同时支持本地 `Mock` 和线上接口,配套 [Java 后端源码](https://gitee.com/youlaiorg/youlai-boot)和[在线接口文档](https://www.apifox.cn/apidoc/shared-195e783f-4d85-4235-a038-eec696de4ea5)。
|
||||
|
||||
- **权限管理**:用户、角色、菜单、字典、部门等完善的权限系统功能。
|
||||
|
||||
- **基础设施**:动态路由、按钮权限、国际化、代码规范、Git 提交规范、常用组件封装。
|
||||
|
||||
- **持续更新**:项目持续开源更新,实时更新工具和依赖。
|
||||
|
||||
|
||||
|
||||
## 项目预览
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 项目地址
|
||||
|
||||
| 项目 | Gitee | Github |
|
||||
| ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
| 前端 | [vue3-element-admin](https://gitee.com/youlaiorg/vue3-element-admin) | [vue3-element-admin](https://github.com/youlaitech/vue3-element-admin) | [vue3-element-admin](https://gitcode.net/youlai/vue3-element-admin) |
|
||||
| 精简版 | [vue3-element-admin-thin](https://gitee.com/cshaptx4869/vue3-element-admin-thin) | [vue3-element-admin-thin](https://github.com/youlaitech/vue3-element-admin-thin) |
|
||||
| 后端 | [youlai-boot](https://gitee.com/youlaiorg/youlai-boot) | [youlai-boot](https://github.com/haoxianrui/youlai-boot.git) |
|
||||
|
||||
## 环境准备
|
||||
|
||||
| 环境 | 名称版本 | 下载地址 |
|
||||
| -------------------- | :----------------------------------------------------------- | ------------------------------------------------------------ |
|
||||
| **开发工具** | VSCode | [下载](https://code.visualstudio.com/Download) |
|
||||
| **运行环境** | Node ≥18 (其中 20.6.0 版本不可用) | [下载](http://nodejs.cn/download) |
|
||||
|
||||
|
||||
## 项目启动
|
||||
|
||||
```bash
|
||||
# 克隆代码
|
||||
git clone https://gitee.com/youlaiorg/vue3-element-admin.git
|
||||
|
||||
# 切换目录
|
||||
cd vue3-element-admin
|
||||
|
||||
# 安装 pnpm
|
||||
npm install pnpm -g
|
||||
|
||||
# 设置镜像源(可忽略)
|
||||
pnpm config set registry https://registry.npmmirror.com
|
||||
|
||||
# 安装依赖
|
||||
pnpm install
|
||||
|
||||
# 启动运行
|
||||
pnpm run dev
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 项目部署
|
||||
|
||||
```bash
|
||||
# 项目打包
|
||||
pnpm run build
|
||||
|
||||
# 上传文件至远程服务器
|
||||
将本地打包生成的 dist 目录下的所有文件拷贝至服务器的 /usr/share/nginx/html 目录。
|
||||
|
||||
# nginx.cofig 配置
|
||||
server {
|
||||
listen 80;
|
||||
server_name localhost;
|
||||
location / {
|
||||
root /usr/share/nginx/html;
|
||||
index index.html index.htm;
|
||||
}
|
||||
# 反向代理配置
|
||||
location /prod-api/ {
|
||||
# vapi.youlai.tech 替换后端API地址,注意保留后面的斜杠 /
|
||||
proxy_pass http://vapi.youlai.tech/;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 本地Mock
|
||||
|
||||
项目同时支持在线和本地 Mock 接口,默认使用线上接口,如需替换为 Mock 接口,修改文件 `.env.development` 的 `VITE_MOCK_DEV_SERVER` 为 `true` **即可**。
|
||||
|
||||
## 后端接口
|
||||
|
||||
> 如果您具备Java开发基础,按照以下步骤将在线接口转为本地后端接口,创建企业级前后端分离开发环境,助您走向全栈之路。
|
||||
|
||||
1. 获取基于 `Java` 和 `SpringBoot` 开发的后端 [youlai-boot](https://gitee.com/youlaiorg/youlai-boot.git) 源码。
|
||||
2. 根据后端工程的说明文档 [README.md](https://gitee.com/youlaiorg/youlai-boot#%E9%A1%B9%E7%9B%AE%E8%BF%90%E8%A1%8C) 完成本地启动。
|
||||
3. 修改 `.env.development` 文件中的 `VITE_APP_API_URL` 的值,将其从 http://vapi.youlai.tech 更改为 http://localhost:8989。
|
||||
|
||||
|
||||
## 注意事项
|
||||
|
||||
- **自动导入插件自动生成默认关闭**
|
||||
|
||||
模板项目的组件类型声明已自动生成。如果添加和使用新的组件,请按照图示方法开启自动生成。在自动生成完成后,记得将其设置为 `false`,避免重复执行引发冲突。
|
||||
|
||||

|
||||
|
||||
- **项目启动浏览器访问空白**
|
||||
|
||||
请升级浏览器尝试,低版本浏览器内核可能不支持某些新的 JavaScript 语法,比如可选链操作符 `?.`。
|
||||
|
||||
- **项目同步仓库更新升级**
|
||||
|
||||
项目同步仓库更新升级之后,建议 `pnpm install` 安装更新依赖之后启动 。
|
||||
|
||||
- **项目组件、函数和引用爆红**
|
||||
|
||||
重启 VSCode 尝试
|
||||
|
||||
- **其他问题**
|
||||
|
||||
如果有其他问题或者建议,建议 [ISSUE](https://gitee.com/youlaiorg/vue3-element-admin/issues/new)
|
||||
|
||||
|
||||
|
||||
## 项目文档
|
||||
|
||||
- [基于 Vue3 + Vite + TypeScript + Element-Plus 从0到1搭建后台管理系统](https://blog.csdn.net/u013737132/article/details/130191394)
|
||||
|
||||
- [ESLint+Prettier+Stylelint+EditorConfig 约束和统一前端代码规范](https://blog.csdn.net/u013737132/article/details/130190788)
|
||||
- [Husky + Lint-staged + Commitlint + Commitizen + cz-git 配置 Git 提交规范](https://blog.csdn.net/u013737132/article/details/130191363)
|
||||
|
||||
|
||||
## 提交规范
|
||||
|
||||
执行 `pnpm run commit` 唤起 git commit 交互,根据提示完成信息的输入和选择。
|
||||
|
||||

|
||||
|
||||
|
||||
## 项目统计
|
||||
|
||||

|
||||
|
||||
|
||||
Thanks to all the contributors!
|
||||
|
||||
[](https://github.com/youlaitech/vue3-element-admin/graphs/contributors)
|
||||
|
||||
|
||||
## 交流群🚀
|
||||
|
||||
> **关注「有来技术」公众号,获取交流群二维码。**
|
||||
>
|
||||
> 如果交流群的二维码过期,请加微信(haoxianrui)并备注「前端」、「后端」或「全栈」以获取最新二维码。
|
||||
>
|
||||
> 为确保交流群质量,防止营销广告人群混入,我们采取了此措施。望各位理解!
|
||||
|
||||
| 公众号 | 交流群 |
|
||||
|:----:|:----:|
|
||||
|  |  |
|
||||
|
94
vue3-element-admin-thin/commitlint.config.cjs
Normal file
@ -0,0 +1,94 @@
|
||||
module.exports = {
|
||||
// 继承的规则
|
||||
extends: ["@commitlint/config-conventional"],
|
||||
// 自定义规则
|
||||
rules: {
|
||||
// @see https://commitlint.js.org/#/reference-rules
|
||||
|
||||
// 提交类型枚举,git提交type必须是以下类型
|
||||
"type-enum": [
|
||||
2,
|
||||
"always",
|
||||
[
|
||||
"feat", // 新增功能
|
||||
"fix", // 修复缺陷
|
||||
"docs", // 文档变更
|
||||
"style", // 代码格式(不影响功能,例如空格、分号等格式修正)
|
||||
"refactor", // 代码重构(不包括 bug 修复、功能新增)
|
||||
"perf", // 性能优化
|
||||
"test", // 添加疏漏测试或已有测试改动
|
||||
"build", // 构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等)
|
||||
"ci", // 修改 CI 配置、脚本
|
||||
"revert", // 回滚 commit
|
||||
"chore", // 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)
|
||||
],
|
||||
],
|
||||
"subject-case": [0], // subject大小写不做校验
|
||||
},
|
||||
|
||||
prompt: {
|
||||
messages: {
|
||||
type: "选择你要提交的类型 :",
|
||||
scope: "选择一个提交范围(可选):",
|
||||
customScope: "请输入自定义的提交范围 :",
|
||||
subject: "填写简短精炼的变更描述 :\n",
|
||||
body: '填写更加详细的变更描述(可选)。使用 "|" 换行 :\n',
|
||||
breaking: '列举非兼容性重大的变更(可选)。使用 "|" 换行 :\n',
|
||||
footerPrefixesSelect: "选择关联issue前缀(可选):",
|
||||
customFooterPrefix: "输入自定义issue前缀 :",
|
||||
footer: "列举关联issue (可选) 例如: #31, #I3244 :\n",
|
||||
generatingByAI: "正在通过 AI 生成你的提交简短描述...",
|
||||
generatedSelectByAI: "选择一个 AI 生成的简短描述:",
|
||||
confirmCommit: "是否提交或修改commit ?",
|
||||
},
|
||||
// prettier-ignore
|
||||
types: [
|
||||
{ value: "feat", name: "特性: ✨ 新增功能", emoji: ":sparkles:" },
|
||||
{ value: "fix", name: "修复: 🐛 修复缺陷", emoji: ":bug:" },
|
||||
{ value: "docs", name: "文档: 📝 文档变更(更新README文件,或者注释)", emoji: ":memo:" },
|
||||
{ value: "style", name: "格式: 🌈 代码格式(空格、格式化、缺失的分号等)", emoji: ":lipstick:" },
|
||||
{ value: "refactor", name: "重构: 🔄 代码重构(不修复错误也不添加特性的代码更改)", emoji: ":recycle:" },
|
||||
{ value: "perf", name: "性能: 🚀 性能优化", emoji: ":zap:" },
|
||||
{ value: "test", name: "测试: 🧪 添加疏漏测试或已有测试改动", emoji: ":white_check_mark:"},
|
||||
{ value: "build", name: "构建: 📦️ 构建流程、外部依赖变更(如升级 npm 包、修改 vite 配置等)", emoji: ":package:"},
|
||||
{ value: "ci", name: "集成: ⚙️ 修改 CI 配置、脚本", emoji: ":ferris_wheel:"},
|
||||
{ value: "revert", name: "回退: ↩️ 回滚 commit",emoji: ":rewind:"},
|
||||
{ value: "chore", name: "其他: 🛠️ 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)", emoji: ":hammer:"},
|
||||
{ value: "wip", name: "开发中: 🚧 开发阶段临时提交", emoji: ":construction:"},
|
||||
],
|
||||
useEmoji: true,
|
||||
emojiAlign: "center",
|
||||
useAI: false,
|
||||
aiNumber: 1,
|
||||
themeColorCode: "",
|
||||
scopes: [],
|
||||
allowCustomScopes: true,
|
||||
allowEmptyScopes: true,
|
||||
customScopesAlign: "bottom",
|
||||
customScopesAlias: "custom",
|
||||
emptyScopesAlias: "empty",
|
||||
upperCaseSubject: false,
|
||||
markBreakingChangeMode: false,
|
||||
allowBreakingChanges: ["feat", "fix"],
|
||||
breaklineNumber: 100,
|
||||
breaklineChar: "|",
|
||||
skipQuestions: [],
|
||||
issuePrefixes: [
|
||||
{ value: "closed", name: "closed: ISSUES has been processed" },
|
||||
],
|
||||
customIssuePrefixAlign: "top",
|
||||
emptyIssuePrefixAlias: "skip",
|
||||
customIssuePrefixAlias: "custom",
|
||||
allowCustomIssuePrefix: true,
|
||||
allowEmptyIssuePrefix: true,
|
||||
confirmColorize: true,
|
||||
maxHeaderLength: Infinity,
|
||||
maxSubjectLength: Infinity,
|
||||
minSubjectLength: 0,
|
||||
scopeOverrides: undefined,
|
||||
defaultBody: "",
|
||||
defaultIssues: "",
|
||||
defaultScope: "",
|
||||
defaultSubject: "",
|
||||
},
|
||||
};
|
99
vue3-element-admin-thin/index.html
Normal file
@ -0,0 +1,99 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta
|
||||
name="description"
|
||||
content="Vue3 + Vite5 + TypeScript5 + Element-Plus 的后台管理模板,配套接口文档和后端源码,vue-element-admin 的 Vue3 版本"
|
||||
/>
|
||||
<meta
|
||||
name="keywords"
|
||||
content="vue,element-plus,typescript,vue-element-admin,vue3-element-admin"
|
||||
/>
|
||||
<title>vue3-element-admin</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app">
|
||||
<!--加载动画-->
|
||||
<div class="mesh-loader">
|
||||
<div class="set-one">
|
||||
<div class="circle"></div>
|
||||
<div class="circle"></div>
|
||||
</div>
|
||||
<div class="set-two">
|
||||
<div class="circle"></div>
|
||||
<div class="circle"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
|
||||
<style>
|
||||
html,
|
||||
body,
|
||||
#app {
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.mesh-loader {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.mesh-loader .circle {
|
||||
position: absolute;
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
margin: -12.5px;
|
||||
background: #03a9f4;
|
||||
border-radius: 50%;
|
||||
animation: mesh 3s ease-in-out infinite -1.5s;
|
||||
}
|
||||
|
||||
.mesh-loader > div .circle:last-child {
|
||||
animation-delay: 0s;
|
||||
}
|
||||
|
||||
.mesh-loader > div {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
}
|
||||
|
||||
.mesh-loader > div:last-child {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
@keyframes mesh {
|
||||
0% {
|
||||
transform: rotate(0);
|
||||
transform-origin: 50% -100%;
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: rotate(360deg);
|
||||
transform-origin: 50% -100%;
|
||||
}
|
||||
|
||||
50.00001% {
|
||||
transform: rotate(0deg);
|
||||
transform-origin: 50% 200%;
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
transform-origin: 50% 200%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</body>
|
||||
</html>
|
21
vue3-element-admin-thin/licenses/vue-element-admin/LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017-present PanJiaChen
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
21
vue3-element-admin-thin/licenses/vue3-element-admin/LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021-present 有来开源组织
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
43
vue3-element-admin-thin/mock/auth.mock.ts
Normal file
@ -0,0 +1,43 @@
|
||||
import { defineMock } from "./base";
|
||||
|
||||
export default defineMock([
|
||||
{
|
||||
url: "auth/captcha",
|
||||
method: ["GET"],
|
||||
body: {
|
||||
code: "00000",
|
||||
data: {
|
||||
captchaKey: "534b8ef2b0a24121bec76391ddd159f9",
|
||||
captchaBase64:
|
||||
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAkCAIAAADNSmkJAAAFKUlEQVR4Xu2ZXUwcVRiGV70wMWo08V5NvPXCrDbFaGpMaZW2hqQxaoiJTRsaMBCNSYtpa2JTKiFSelFa+Q/QZcMWqEhBlh+htbEpZhMrBQrlJ0hBywLLyrJ0WZbje3bqOvPNLHPWrDvdOE9ONmfe78zkzMs335wzWJhJQrBQweS/wTQ6QWgYHdoIOcecOe05O+t2WkutO+p2ZF3Ksg/YV9ZW6FATYajR3nveg60H9327r3O8c35lHgp+r05dPdJzBL73TPSQ8SaCKIxGLsPlop+K0JHrEkPuoT31e5qGmmjARACF0agYyGVNlyVm/pzZXrN9fHGcBkz0UBid+31u93i3XFFT80vN8cvHqWqih8Lo1NpUqS5vwh3vnd223VQ10UNh9NbyrcFQUK6oCawHUipSqGqiB83oBf+CXFGDMp1mS6OqiR4Ko7FexkpOrqhpHGw82nOUqiZ6KIzGrkRuorW0dJMmOy+hOCfYGzb2RBFv6HRO0gEJw/U7y+pgL1bwmTxexN6sZ31TdEwEhdG+gA+7EqyXpUO1uZH20cWL8hMTRt1N9tBXzCJrOIRoCPJpSO2RAp4HmtCdIfZ+2JWgEBN9LbR28seTGU0Zue1tMLp+YIAMSADzfvbkKX4/eb28j4YODiGin3heqmIlLja5hAUCu+nmGY3JWKvpMAlqNGgebsauBOvlqSX+JEx7p7EbTLen53XlzfmWUioqXikrc68Y8N2juJ/fyVsNChGHEE//rBANYWaZz+TRQqpLaBgNsPfDrgSpbS21YtV87IdjrlkX9JZbt5DOma2t9ITo5F+5glN22WwL/n+yDv00mw06orKxOqQ5+J04hhViwzAXETIcJDVm8uxZqktoGx2Nj9t43Wgaul/ERQiGQvtbWnDWgZYW9CXlQFjZ/7ciyHNn+Z2MexTimIeLz59TiIln0M1e+IbPpOAaDUnEYPTi6iqKxpbycs/qKo1tCslfKcffPn9enuMiPPY1vxO/ckeFQ4h46cdGqUWoidE/y54q5tPY5WDrGzQqIXot4BgchEE57e00IMCw2/1qZSVO/7SjA78o9INzcxsbrL+fnTnDDh9mmZn8F30oG1Hm+nABv5mQMopDS/h1HxtqTzWbABMe9sxpPoe9zezeOo1GELqWhPS8t46M0IAYHbdvR1aHbaOjbjfLz2eFhez6dba4yAfgF30o0BFVE8+Mjh/wFxPI+I5mAEHU6Ls+38vhTFwOBGhMDF8gkFpbC5ffsdv/uBs6dIj19dExEtARVXv9YNbop8NFY3aZ6gRRo+tu3IBHnzmdNCBMXldXJKPfL74WzWUJRE+coDUknqsOdZXQbAJYwluVTbOZI3Qt8GFzMwxyjo3RgBiN4fr+elXVpZGRLWXl6PdOTtJBSlBDUK/lnIrjOlrtqWYTQDJaF6FrTXu9sOa1ysrVoM5HVE1GFxZQcyJ/p+xzv6K/rbr6N6+XDpUBl0tKFIrbz78qWB6YnWFMCBld4XLBms+7df75ook/GNzb0GCV7U1Qfz9p64TyQWNjYD3qe9rj4SMJtQP3MyjSDPzWIRHPjH7X4YAvfXoPuyZf9Pbi3PcuXIh4mp3NllYC6XY79C+jl2o8PBipxjnBttn4MgMNnWgfcRJGPI2OL8hTj3LloIlmRicvBhiNykvecpqoa3RSY4DRcLAwyicuOepVR1JjgNFYHWONHL04czTX0UmNAUYD7Pr+xc4wqTHGaBb2OtZvHUmNYUazcA2J6etdUmOk0f8rTKMTxF91RG0D1SwYGwAAAABJRU5ErkJggg==",
|
||||
},
|
||||
msg: "一切ok",
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
url: "auth/login",
|
||||
method: ["POST"],
|
||||
body: {
|
||||
code: "00000",
|
||||
data: {
|
||||
accessToken:
|
||||
"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImp0aSI6IjE2YWJkNTlkOTAxNzQwZDliYmI3ZjczODBhZDkyNzNhIiwidXNlcklkIjoyLCJ1c2VybmFtZSI6ImFkbWluIiwiZGVwdElkIjoxLCJkYXRhU2NvcGUiOjEsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iXSwiZXhwIjoxNjkxMTAzMzgyfQ.P4cuIfmPepl3HuguhMS7NXn5a7IUPpsLbmtA_rHOhHk",
|
||||
tokenType: "Bearer",
|
||||
refreshToken: null,
|
||||
expires: null,
|
||||
},
|
||||
msg: "一切ok",
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
url: "auth/logout",
|
||||
method: ["DELETE"],
|
||||
body: {
|
||||
code: "00000",
|
||||
data: {},
|
||||
msg: "string",
|
||||
},
|
||||
},
|
||||
]);
|
10
vue3-element-admin-thin/mock/base.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import path from "path";
|
||||
import { createDefineMock } from "vite-plugin-mock-dev-server";
|
||||
|
||||
export const defineMock = createDefineMock((mock) => {
|
||||
// 拼接url
|
||||
mock.url = path.join(
|
||||
import.meta.env.VITE_APP_BASE_API + "/api/v1/",
|
||||
mock.url
|
||||
);
|
||||
});
|
207
vue3-element-admin-thin/mock/log.mock.ts
Normal file
@ -0,0 +1,207 @@
|
||||
import { defineMock } from "./base";
|
||||
|
||||
export default defineMock([
|
||||
{
|
||||
url: "logs/page",
|
||||
method: ["GET"],
|
||||
body: {
|
||||
code: "00000",
|
||||
data: {
|
||||
list: [
|
||||
{
|
||||
id: 36192,
|
||||
module: "菜单",
|
||||
content: "菜单列表",
|
||||
requestUri: "/api/v1/menus",
|
||||
method: null,
|
||||
ip: "183.156.148.241",
|
||||
region: "浙江省 杭州市",
|
||||
browser: "Chrome 109.0.0.0",
|
||||
os: "OSX",
|
||||
executionTime: 5,
|
||||
createBy: null,
|
||||
createTime: "2024-07-07 20:38:47",
|
||||
operator: "系统管理员",
|
||||
},
|
||||
{
|
||||
id: 36190,
|
||||
module: "字典",
|
||||
content: "字典分页列表",
|
||||
requestUri: "/api/v1/dict/page",
|
||||
method: null,
|
||||
ip: "183.156.148.241",
|
||||
region: "浙江省 杭州市",
|
||||
browser: "Chrome 109.0.0.0",
|
||||
os: "OSX",
|
||||
executionTime: 9,
|
||||
createBy: null,
|
||||
createTime: "2024-07-07 20:38:45",
|
||||
operator: "系统管理员",
|
||||
},
|
||||
{
|
||||
id: 36193,
|
||||
module: "部门",
|
||||
content: "部门列表",
|
||||
requestUri: "/api/v1/dept",
|
||||
method: null,
|
||||
ip: "192.168.31.134",
|
||||
region: "0 内网IP",
|
||||
browser: "Chrome 125.0.0.0",
|
||||
os: "Windows 10 or Windows Server 2016",
|
||||
executionTime: 27,
|
||||
createBy: null,
|
||||
createTime: "2024-07-07 20:38:45",
|
||||
operator: "系统管理员",
|
||||
},
|
||||
{
|
||||
id: 36191,
|
||||
module: "菜单",
|
||||
content: "菜单列表",
|
||||
requestUri: "/api/v1/menus",
|
||||
method: null,
|
||||
ip: "192.168.31.134",
|
||||
region: "0 内网IP",
|
||||
browser: "Chrome 125.0.0.0",
|
||||
os: "Windows 10 or Windows Server 2016",
|
||||
executionTime: 39,
|
||||
createBy: null,
|
||||
createTime: "2024-07-07 20:38:44",
|
||||
operator: "系统管理员",
|
||||
},
|
||||
{
|
||||
id: 36189,
|
||||
module: "角色",
|
||||
content: "角色分页列表",
|
||||
requestUri: "/api/v1/roles/page",
|
||||
method: null,
|
||||
ip: "192.168.31.134",
|
||||
region: "0 内网IP",
|
||||
browser: "Chrome 125.0.0.0",
|
||||
os: "Windows 10 or Windows Server 2016",
|
||||
executionTime: 55,
|
||||
createBy: null,
|
||||
createTime: "2024-07-07 20:38:43",
|
||||
operator: "系统管理员",
|
||||
},
|
||||
{
|
||||
id: 36188,
|
||||
module: "用户",
|
||||
content: "用户分页列表",
|
||||
requestUri: "/api/v1/users/page",
|
||||
method: null,
|
||||
ip: "192.168.31.134",
|
||||
region: "0 内网IP",
|
||||
browser: "Chrome 125.0.0.0",
|
||||
os: "Windows 10 or Windows Server 2016",
|
||||
executionTime: 92,
|
||||
createBy: null,
|
||||
createTime: "2024-07-07 20:38:42",
|
||||
operator: "系统管理员",
|
||||
},
|
||||
{
|
||||
id: 36187,
|
||||
module: "登录",
|
||||
content: "登录",
|
||||
requestUri: "/api/v1/auth/login",
|
||||
method: null,
|
||||
ip: "192.168.31.134",
|
||||
region: "0 内网IP",
|
||||
browser: "Chrome 125.0.0.0",
|
||||
os: "Windows 10 or Windows Server 2016",
|
||||
executionTime: 19340,
|
||||
createBy: null,
|
||||
createTime: "2024-07-07 20:38:09",
|
||||
operator: "系统管理员",
|
||||
},
|
||||
{
|
||||
id: 36186,
|
||||
module: "登录",
|
||||
content: "登录",
|
||||
requestUri: "/api/v1/auth/login",
|
||||
method: null,
|
||||
ip: "192.168.31.134",
|
||||
region: "0 内网IP",
|
||||
browser: "Chrome 125.0.0.0",
|
||||
os: "Windows 10 or Windows Server 2016",
|
||||
executionTime: 19869,
|
||||
createBy: null,
|
||||
createTime: "2024-07-07 20:37:59",
|
||||
operator: "系统管理员",
|
||||
},
|
||||
{
|
||||
id: 36185,
|
||||
module: "登录",
|
||||
content: "登录",
|
||||
requestUri: "/api/v1/auth/login",
|
||||
method: null,
|
||||
ip: "112.103.111.59",
|
||||
region: "黑龙江省 哈尔滨市",
|
||||
browser: "Chrome 97.0.4692.98",
|
||||
os: "Android",
|
||||
executionTime: 96,
|
||||
createBy: null,
|
||||
createTime: "2024-07-07 20:37:21",
|
||||
operator: "系统管理员",
|
||||
},
|
||||
{
|
||||
id: 36184,
|
||||
module: "登录",
|
||||
content: "登录",
|
||||
requestUri: "/api/v1/auth/login",
|
||||
method: null,
|
||||
ip: "114.86.204.190",
|
||||
region: "上海 上海市",
|
||||
browser: "Chrome 125.0.0.0",
|
||||
os: "Windows 10 or Windows Server 2016",
|
||||
executionTime: 89,
|
||||
createBy: null,
|
||||
createTime: "2024-07-07 20:29:37",
|
||||
operator: "系统管理员",
|
||||
},
|
||||
],
|
||||
total: 36188,
|
||||
},
|
||||
msg: "一切ok",
|
||||
},
|
||||
},
|
||||
{
|
||||
url: "logs/visit-trend",
|
||||
method: ["GET"],
|
||||
body: {
|
||||
code: "00000",
|
||||
data: {
|
||||
dates: [
|
||||
"2025-04-30",
|
||||
"2025-05-01",
|
||||
"2025-05-02",
|
||||
"2025-05-03",
|
||||
"2025-05-04",
|
||||
"2025-05-05",
|
||||
"2025-05-06",
|
||||
"2025-05-07",
|
||||
],
|
||||
pvList: [53, 24, 26, 32, 44, 25, 34, 31],
|
||||
uvList: null,
|
||||
ipList: [3, 2, 0, 0, 4, 4, 5, 1],
|
||||
},
|
||||
msg: "一切ok",
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
url: "logs/visit-stats",
|
||||
method: ["GET"],
|
||||
body: {
|
||||
code: "00000",
|
||||
data: {
|
||||
todayPvCount: 1629,
|
||||
totalPvCount: 286086,
|
||||
pvGrowthRate: -0.65,
|
||||
todayIpCount: 169,
|
||||
totalIpCount: 19985,
|
||||
ipGrowthRate: -0.57,
|
||||
},
|
||||
msg: "一切ok",
|
||||
},
|
||||
},
|
||||
]);
|
201
vue3-element-admin-thin/mock/menu.mock.ts
Normal file
@ -0,0 +1,201 @@
|
||||
import { defineMock } from "./base";
|
||||
|
||||
export default defineMock([
|
||||
{
|
||||
url: "menus/routes",
|
||||
method: ["GET"],
|
||||
body: {
|
||||
code: "00000",
|
||||
data: [
|
||||
// {
|
||||
// path: "/outpatient-emergency",
|
||||
// component: "Layout",
|
||||
// name: "/outpatient-emergency",
|
||||
// meta: {
|
||||
// title: "医生门急诊工作站",
|
||||
// icon: "cascader",
|
||||
// hidden: false,
|
||||
// alwaysShow: true,
|
||||
// params: null,
|
||||
// },
|
||||
// children: [
|
||||
// {
|
||||
// path: "index",
|
||||
// component: "outpatient-emergency/index",
|
||||
// name: "OutpatientEmergencyIndex",
|
||||
// meta: {
|
||||
// title: "index",
|
||||
// icon: "",
|
||||
// hidden: false,
|
||||
// alwaysShow: false,
|
||||
// params: null,
|
||||
// },
|
||||
// children: [
|
||||
// {
|
||||
// path: "outpatient-emergency-EMR",
|
||||
// component:
|
||||
// "outpatient-emergency/sub-items/outpatient-emergency-EMR",
|
||||
// name: "OutpatientEmergencyEMR",
|
||||
// meta: {
|
||||
// title: "门诊病历",
|
||||
// icon: "",
|
||||
// hidden: false,
|
||||
// alwaysShow: true,
|
||||
// params: null,
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// path: "outpatient-diagnosis",
|
||||
// component:
|
||||
// "outpatient-emergency/sub-items/outpatient-diagnosis",
|
||||
// name: "OutpatientDiagnosis",
|
||||
// meta: {
|
||||
// title: "门诊诊断",
|
||||
// icon: "",
|
||||
// hidden: false,
|
||||
// alwaysShow: true,
|
||||
// params: null,
|
||||
// },
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
{
|
||||
path: "/outpatient-emergency",
|
||||
component: "Layout",
|
||||
name: "/outpatient-emergency",
|
||||
meta: {
|
||||
title: "医生门急诊工作站",
|
||||
icon: "cascader",
|
||||
hidden: false,
|
||||
alwaysShow: true,
|
||||
params: null,
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: "index",
|
||||
component: "outpatient-emergency/index",
|
||||
meta: {
|
||||
alwaysShow: true,
|
||||
hidden: false,
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: "outpatient-emergency-EMR",
|
||||
component:
|
||||
"outpatient-emergency/sub-items/outpatient-emergency-EMR",
|
||||
name: "OutpatientEmergencyEMR",
|
||||
meta: {
|
||||
title: "门诊病历",
|
||||
hidden: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: "outpatient-diagnosis",
|
||||
component:
|
||||
"outpatient-emergency/sub-items/outpatient-diagnosis",
|
||||
name: "OutpatientDiagnosis",
|
||||
meta: {
|
||||
title: "门诊诊断",
|
||||
hidden: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: "prescription",
|
||||
component: "outpatient-emergency/sub-items/prescription",
|
||||
name: "Prescription",
|
||||
meta: {
|
||||
title: "处方管理",
|
||||
hidden: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: "examination-request-form",
|
||||
component:
|
||||
"outpatient-emergency/sub-items/examination-request-form",
|
||||
name: "OutpatientExaminationRequestForm",
|
||||
meta: {
|
||||
title: "检查申请单",
|
||||
hidden: false,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/residency",
|
||||
component: "Layout",
|
||||
name: "/residency",
|
||||
meta: {
|
||||
title: "医生住院工作站",
|
||||
icon: "cascader",
|
||||
hidden: false,
|
||||
alwaysShow: true,
|
||||
params: null,
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: "index",
|
||||
component: "residency/index",
|
||||
meta: {
|
||||
alwaysShow: true,
|
||||
hidden: false,
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: "select-patient",
|
||||
component: "residency/sub-items/select-patient",
|
||||
name: "SelectPatient",
|
||||
meta: {
|
||||
title: "选择病人",
|
||||
hidden: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: "residence-instructions",
|
||||
component: "residency/sub-items/residence-instructions",
|
||||
name: "ResidenceInstructions",
|
||||
meta: {
|
||||
title: "住院医嘱",
|
||||
hidden: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: "hospitalization-diagnosis",
|
||||
component: "residency/sub-items/diagnostic-surgery",
|
||||
name: "DiagnosticSurgery",
|
||||
meta: {
|
||||
title: "诊断手术",
|
||||
hidden: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: "examination-request-form",
|
||||
component: "residency/sub-items/examination-request-form",
|
||||
name: "ResidencyExaminationRequestForm",
|
||||
meta: {
|
||||
title: "检查申请单",
|
||||
hidden: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: "printing-of-doctor-order-form",
|
||||
component:
|
||||
"residency/sub-items/printing-of-doctor-order-form",
|
||||
name: "PrintingOfDoctorOrderForm",
|
||||
meta: {
|
||||
title: "医嘱单打印",
|
||||
hidden: false,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
msg: "一切ok",
|
||||
},
|
||||
},
|
||||
]);
|
178
vue3-element-admin-thin/mock/patient.mock.ts
Normal file
@ -0,0 +1,178 @@
|
||||
import { defineMock } from "./base";
|
||||
|
||||
export default defineMock([
|
||||
{
|
||||
url: "patients/basic",
|
||||
method: ["GET"],
|
||||
body: {
|
||||
code: "00000",
|
||||
data: {
|
||||
patients: [
|
||||
{
|
||||
patientId: 1,
|
||||
patientName: "张三",
|
||||
patientSex: "男",
|
||||
patientAge: 30,
|
||||
patientIdCard: "123456789012345678",
|
||||
patientPhone: "13800138000",
|
||||
patientAddress: "北京市朝阳区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 2,
|
||||
patientName: "李四",
|
||||
patientSex: "女",
|
||||
patientAge: 25,
|
||||
patientIdCard: "987654321098765432",
|
||||
patientPhone: "13900139000",
|
||||
patientAddress: "上海市浦东新区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 3,
|
||||
patientName: "王五",
|
||||
patientSex: "男",
|
||||
patientAge: 40,
|
||||
patientIdCard: "123456789012345678",
|
||||
patientPhone: "13700137000",
|
||||
patientAddress: "广州市天河区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 4,
|
||||
patientName: "赵六",
|
||||
patientSex: "女",
|
||||
patientAge: 35,
|
||||
patientIdCard: "987654321098765432",
|
||||
patientPhone: "13600136000",
|
||||
patientAddress: "深圳市南山区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 5,
|
||||
patientName: "钱七",
|
||||
patientSex: "男",
|
||||
patientAge: 28,
|
||||
patientIdCard: "123456789012345678",
|
||||
patientPhone: "13500135000",
|
||||
patientAddress: "杭州市西湖区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 6,
|
||||
patientName: "孙八",
|
||||
patientSex: "女",
|
||||
patientAge: 32,
|
||||
patientIdCard: "987654321098765432",
|
||||
patientPhone: "13400134000",
|
||||
patientAddress: "南京市鼓楼区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 7,
|
||||
patientName: "周九",
|
||||
patientSex: "男",
|
||||
patientAge: 45,
|
||||
patientIdCard: "123456789012345678",
|
||||
patientPhone: "13300133000",
|
||||
patientAddress: "武汉市洪山区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 8,
|
||||
patientName: "吴十",
|
||||
patientSex: "女",
|
||||
patientAge: 29,
|
||||
patientIdCard: "987654321098765432",
|
||||
patientPhone: "13200132000",
|
||||
patientAddress: "重庆市渝中区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 9,
|
||||
patientName: "郑十一",
|
||||
patientSex: "男",
|
||||
patientAge: 38,
|
||||
patientIdCard: "123456789012345678",
|
||||
patientPhone: "13100131000",
|
||||
patientAddress: "天津市和平区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 10,
|
||||
patientName: "冯十二",
|
||||
patientSex: "女",
|
||||
patientAge: 26,
|
||||
patientIdCard: "987654321098765432",
|
||||
patientPhone: "13000130000",
|
||||
patientAddress: "西安市碑林区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 11,
|
||||
patientName: "陈十三",
|
||||
patientSex: "男",
|
||||
patientAge: 31,
|
||||
patientIdCard: "123456789012345678",
|
||||
patientPhone: "12900129000",
|
||||
patientAddress: "成都市锦江区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 12,
|
||||
patientName: "褚十四",
|
||||
patientSex: "女",
|
||||
patientAge: 36,
|
||||
patientIdCard: "987654321098765432",
|
||||
patientPhone: "12800128000",
|
||||
patientAddress: "苏州市姑苏区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 13,
|
||||
patientName: "卫十五",
|
||||
patientSex: "男",
|
||||
patientAge: 41,
|
||||
patientIdCard: "123456789012345678",
|
||||
patientPhone: "12700127000",
|
||||
patientAddress: "厦门市思明区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 14,
|
||||
patientName: "蒋十六",
|
||||
patientSex: "女",
|
||||
patientAge: 27,
|
||||
patientIdCard: "987654321098765432",
|
||||
patientPhone: "12600126000",
|
||||
patientAddress: "福州市鼓楼区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 15,
|
||||
patientName: "沈十七",
|
||||
patientSex: "男",
|
||||
patientAge: 34,
|
||||
patientIdCard: "123456789012345678",
|
||||
patientPhone: "12500125000",
|
||||
patientAddress: "哈尔滨市道里区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 16,
|
||||
patientName: "韩十八",
|
||||
patientSex: "女",
|
||||
patientAge: 39,
|
||||
patientIdCard: "987654321098765432",
|
||||
patientPhone: "12400124000",
|
||||
patientAddress: "长春市南关区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 17,
|
||||
patientName: "杨十九",
|
||||
patientSex: "男",
|
||||
patientAge: 42,
|
||||
patientIdCard: "123456789012345678",
|
||||
patientPhone: "12300123000",
|
||||
patientAddress: "沈阳市和平区某小区",
|
||||
},
|
||||
{
|
||||
patientId: 18,
|
||||
patientName: "朱二十",
|
||||
patientSex: "女",
|
||||
patientAge: 24,
|
||||
patientIdCard: "987654321098765432",
|
||||
patientPhone: "12200122000",
|
||||
patientAddress: "大连市中山区某小区",
|
||||
},
|
||||
],
|
||||
},
|
||||
msg: "一切ok",
|
||||
},
|
||||
},
|
||||
]);
|
44
vue3-element-admin-thin/mock/user.mock.ts
Normal file
@ -0,0 +1,44 @@
|
||||
import { defineMock } from "./base";
|
||||
|
||||
export default defineMock([
|
||||
{
|
||||
url: "users/me",
|
||||
method: ["GET"],
|
||||
body: {
|
||||
code: "00000",
|
||||
data: {
|
||||
userId: 2,
|
||||
nickname: "张医生",
|
||||
username: "admin",
|
||||
avatar:
|
||||
"https://i.miji.bid/2025/05/06/6e2939944a47f6d258a49454984438cb.md.png",
|
||||
roles: ["ROOT"],
|
||||
perms: [
|
||||
"sys:menu:delete",
|
||||
"sys:dept:edit",
|
||||
"sys:dict_type:add",
|
||||
"sys:dict:edit",
|
||||
"sys:dict:delete",
|
||||
"sys:dict_type:edit",
|
||||
"sys:menu:add",
|
||||
"sys:user:add",
|
||||
"sys:role:edit",
|
||||
"sys:dept:delete",
|
||||
"sys:user:edit",
|
||||
"sys:user:delete",
|
||||
"sys:user:password:reset",
|
||||
"sys:dept:add",
|
||||
"sys:role:delete",
|
||||
"sys:dict_type:delete",
|
||||
"sys:menu:edit",
|
||||
"sys:dict:add",
|
||||
"sys:role:add",
|
||||
"sys:user:query",
|
||||
"sys:user:export",
|
||||
"sys:user:import",
|
||||
],
|
||||
},
|
||||
msg: "一切ok",
|
||||
},
|
||||
},
|
||||
]);
|
114
vue3-element-admin-thin/package.json
Normal file
@ -0,0 +1,114 @@
|
||||
{
|
||||
"name": "医生工作站",
|
||||
"version": "2.13.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vue-tsc --noEmit & vite build",
|
||||
"preview": "vite preview",
|
||||
"build-only": "vite build",
|
||||
"type-check": "vue-tsc --noEmit",
|
||||
"lint:eslint": "eslint --fix --ext .ts,.js,.vue ./src ",
|
||||
"lint:prettier": "prettier --write \"**/*.{js,cjs,ts,json,tsx,css,less,scss,vue,html,md}\"",
|
||||
"lint:stylelint": "stylelint \"**/*.{css,scss,vue}\" --fix",
|
||||
"lint:lint-staged": "lint-staged",
|
||||
"preinstall": "npx only-allow pnpm",
|
||||
"prepare": "husky",
|
||||
"commit": "git-cz"
|
||||
},
|
||||
"config": {
|
||||
"commitizen": {
|
||||
"path": "node_modules/cz-git"
|
||||
}
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{js,ts}": [
|
||||
"eslint --fix",
|
||||
"prettier --write"
|
||||
],
|
||||
"*.{cjs,json}": [
|
||||
"prettier --write"
|
||||
],
|
||||
"*.{vue,html}": [
|
||||
"eslint --fix",
|
||||
"prettier --write",
|
||||
"stylelint --fix"
|
||||
],
|
||||
"*.{scss,css}": [
|
||||
"stylelint --fix",
|
||||
"prettier --write"
|
||||
],
|
||||
"*.md": [
|
||||
"prettier --write"
|
||||
]
|
||||
},
|
||||
"dependencies": {
|
||||
"@element-plus/icons-vue": "^2.3.1",
|
||||
"@vueuse/core": "^10.11.1",
|
||||
"animate.css": "^4.1.1",
|
||||
"axios": "^1.7.4",
|
||||
"echarts": "^5.6.0",
|
||||
"element-plus": "^2.8.0",
|
||||
"nprogress": "^0.2.0",
|
||||
"path-browserify": "^1.0.1",
|
||||
"path-to-regexp": "^6.2.2",
|
||||
"pinia": "^2.2.2",
|
||||
"qs": "^6.13.0",
|
||||
"vue": "^3.4.38",
|
||||
"vue-i18n": "9.9.1",
|
||||
"vue-router": "^4.4.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^18.6.1",
|
||||
"@commitlint/config-conventional": "^18.6.3",
|
||||
"@iconify-json/ep": "^1.1.16",
|
||||
"@types/node": "^20.14.15",
|
||||
"@types/nprogress": "^0.2.3",
|
||||
"@types/path-browserify": "^1.0.2",
|
||||
"@types/qs": "^6.9.15",
|
||||
"@typescript-eslint/eslint-plugin": "^7.18.0",
|
||||
"@typescript-eslint/parser": "^7.18.0",
|
||||
"@vitejs/plugin-vue": "^5.1.2",
|
||||
"@vitejs/plugin-vue-jsx": "^3.1.0",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"commitizen": "^4.3.0",
|
||||
"cz-git": "^1.9.4",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-import": "^2.29.1",
|
||||
"eslint-plugin-prettier": "^5.2.1",
|
||||
"eslint-plugin-vue": "^9.27.0",
|
||||
"fast-glob": "^3.3.2",
|
||||
"husky": "^9.1.4",
|
||||
"lint-staged": "^15.2.9",
|
||||
"postcss": "^8.4.41",
|
||||
"postcss-html": "^1.7.0",
|
||||
"postcss-scss": "^4.0.9",
|
||||
"prettier": "^3.3.3",
|
||||
"sass": "^1.77.8",
|
||||
"stylelint": "^16.8.2",
|
||||
"stylelint-config-html": "^1.1.0",
|
||||
"stylelint-config-recess-order": "^4.6.0",
|
||||
"stylelint-config-recommended-scss": "^14.1.0",
|
||||
"stylelint-config-recommended-vue": "^1.5.0",
|
||||
"stylelint-config-standard": "^36.0.1",
|
||||
"terser": "^5.31.6",
|
||||
"typescript": "^5.5.4",
|
||||
"unocss": "^0.58.9",
|
||||
"unplugin-auto-import": "^0.17.8",
|
||||
"unplugin-icons": "^0.18.5",
|
||||
"unplugin-vue-components": "^0.26.0",
|
||||
"vite": "^5.4.1",
|
||||
"vite-plugin-mock-dev-server": "^1.7.1",
|
||||
"vite-plugin-svg-icons": "^2.0.1",
|
||||
"vite-plugin-vue-devtools": "^7.3.8",
|
||||
"vue-tsc": "^2.0.29"
|
||||
},
|
||||
"repository": "https://gitee.com/youlaiorg/vue3-element-admin.git",
|
||||
"author": "有来开源组织",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
}
|
||||
}
|
48
vue3-element-admin-thin/public/editor.html
Normal file
@ -0,0 +1,48 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<link rel="stylesheet" href="./vender/jquery/zTreeStyle/zTreeStyle.css" type="text/css">
|
||||
<script src = "./vender/jquery/jquery.js"></script>
|
||||
<script src = "./vender/date97/WdatePicker.js"></script>
|
||||
<script src = "./vender/jquery/jquery.ztree.core.min.js"></script>
|
||||
<script src = "./vender/jquery/jquery.ztree.exedit.min.js"></script>
|
||||
<script src = "./vender/jquery/jquery.ztree.exhide.min.js"></script>
|
||||
<script src = "./vender/codemirror.js"></script>
|
||||
<script src = "./vender/fabric.js"></script>
|
||||
<!-- 局域网环境, 请下载 editor.js替换以下路径 -->
|
||||
<script src="js/editor.js"></script>
|
||||
<script>
|
||||
$(function() {
|
||||
//配置项可以不设置,会使用默认设置
|
||||
let option = {
|
||||
license:'gaR8jJur/A30SFnd5RHwJT4vNz7zuTe+5UVjd3EztbJyrcUa2ZMAc0WXBJZMJs5D+lpGh+a7p49pT8G1di9alwDwAzKnsz0BTNhHKUsLrU4uMy6I5iQ6l0OMB76w/VP2u1Qf8PCJQiO388mrc8dEcEZjeSVls1O3GedGINg3Od0=',
|
||||
mode:'form', //默认模式 form:表单模式,design:设计模式
|
||||
pdfUrl:'https://www.x-emr.cn/pdf/post', //pdf生成服务
|
||||
dictionary: [ //知识库
|
||||
{name: '体征', isParent:true, treeUrl:'https://www.x-emr.cn/dict?category=20', itemUrl:'https://www.x-emr.cn/dictitem'},
|
||||
{name: '症状', isParent:true, treeUrl:'https://www.x-emr.cn/dict?category=20', itemUrl:'https://www.x-emr.cn/dictitem'},
|
||||
{name: '卫生信息数据元', isParent:true, treeUrl:'https://www.x-emr.cn/dict?category=40', itemUrl:'https://www.x-emr.cn/dictitem'},
|
||||
{name: '电子病历数据集', isParent:true, treeUrl:'https://www.x-emr.cn/dict?category=50', itemUrl:'https://www.x-emr.cn/dictitem'},
|
||||
{name: '国家医保标准', isParent:true, treeUrl:'https://www.x-emr.cn/dict?category=80', itemUrl:'https://www.x-emr.cn/dictitem'},
|
||||
{name: '省数据平台标准', isParent:true, treeUrl:'https://www.x-emr.cn/dict?category=90', itemUrl:'https://www.x-emr.cn/dictitem'},
|
||||
]
|
||||
}
|
||||
|
||||
//从模块的Editor组件中获取mode,doc,lang属性 (该段代码可删除)
|
||||
let mode = window.frameElement.getAttribute('mode')
|
||||
let doc = window.frameElement.getAttribute('doc')
|
||||
let lang = window.frameElement.getAttribute('lang')
|
||||
mode? option.mode = mode: null
|
||||
lang? option.lang = lang: null
|
||||
|
||||
//初始化编辑器(初始化代码可以放入组件的load事件中)
|
||||
editor.init(option).then(()=>{
|
||||
doc? editor.loadUrl(doc) : null
|
||||
})
|
||||
|
||||
})
|
||||
</script>
|
||||
</head>
|
||||
<body></body>
|
||||
</html>
|
BIN
vue3-element-admin-thin/public/favicon.ico
Normal file
After Width: | Height: | Size: 4.2 KiB |
1
vue3-element-admin-thin/public/js/editor.js
Normal file
48
vue3-element-admin-thin/public/mock/assess_table.html
Normal file
@ -0,0 +1,48 @@
|
||||
<div id="_page" style="margin: 0px auto; background: rgb(255, 255, 255); width: 210mm; min-height: 297mm; transform: scale(1, 1); transform-origin: 50% 0px 0px;" pagekind="A4" direct="portrait"><div id="_header" style="min-height: 0.65cm; padding-left: 0.65cm; padding-right: 0.65cm; padding-top: 0.65cm; position: relative; outline: none;" contenteditable="false" class="">
|
||||
<div style="text-align: center; "> </div>
|
||||
<div style="text-align: center;font-size: 15px;"><span>姓名:</span>
|
||||
<field tabindex="0" id="name" type="Text" contenteditable="true" class="input blank" title="姓名" value="姓名" name="name" data-code="" data-expression="" multiline="false" validate="false" format="" style="display: inline-block; min-width: 60px;">姓名</field>
|
||||
<span> 科室:</span>
|
||||
<field tabindex="0" id="department" type="Text" contenteditable="true" class="input blank" title="科室" value="科室" name="department" data-code="" data-expression="" multiline="false" validate="false" format="" style="display: inline-block; min-width: 60px;">科室</field><span> 床号:</span>
|
||||
<field tabindex="0" id="bed_number" type="Text" contenteditable="true" class="input blank" title="床号" value="床号" name="bed_number" data-code="" data-expression="" multiline="false" validate="false" format="" style="display: inline-block; min-width: 60px;">床号</field><span title="" contenteditable="false"> 住院号:</span>
|
||||
<field tabindex="0" id="admission_number" type="Text" contenteditable="true" class="input blank" title="住院号" value="文本输入域" name="admission_number" data-code="" data-expression="" multiline="false" validate="false" format="" style="display: inline-block; min-width: 60px;">住院号</field><span> 病案号:</span>
|
||||
<field tabindex="0" id="medical_record_number" type="Text" contenteditable="true" class="input blank" title="病案号" value="文本输入域" name="medical_record_number" data-code="" data-expression="" multiline="false" validate="false" format="" style="display: inline-block; min-width: 60px;">病案号</field>
|
||||
</div>
|
||||
</div><div id="_body" style="min-height: calc(1024.25px); padding-left: 0.65cm; padding-right: 0.65cm;" contenteditable="false" class=""><div class="Section0" style=""><p class="MsoNormal" style="margin-top:10.2500pt;margin-left:213.2000pt;mso-outline-level:1;"><span style="letter-spacing: 0.9pt; font-weight: bold; font-size: 16pt;">抑郁焦虑表</span></p><table class="16" id="" title="" data-field="" style="border-width: 1px; border-color: rgb(0, 0, 0);"><colgroup><col style="width: 421px;"><col style="width: 304px;"></colgroup><tbody style=""><tr style="height: 72.8pt"><td colspan="2" class=""><p class="15" style="margin-top: 1pt; margin-left: 26.1pt; line-height: 1.5;"><span style="letter-spacing: 0.266667px; font-size: 10.5pt;">1)我对以往感兴趣的事情还是有兴趣</span></p><p class="15" style="margin-left:24.7500pt;"><group type="radio" id="radio0" style="font-size: 10.5pt;"><input type="radio" id="radio0__0" name="radio0" value="0" checked="true"><label for="radio0__0">肯定一样——0分</label><br><input type="radio" id="radio0__1" name="radio0" value="1" style=""><label for="radio0__1">不像以前那样——1分</label><br><input type="radio" id="radio0__2" name="radio0" value="2"><label for="radio0__2">只有一点——2分</label><br><input type="radio" id="radio0__3" name="radio0" value="3"><label for="radio0__3">基本上没有了——3分</label><br></group><br></p></td></tr><tr style="height:72.5000pt"><td colspan="2" class="" style="border-color: rgb(0, 0, 0)"><p class="15" style="margin-top:1.5500pt;margin-left:25.5000pt;line-height:15.6500pt;
|
||||
mso-line-height-rule:exactly;"><span style="font-size: 12px; letter-spacing: 0.333333px;">2</span><span style="letter-spacing: 0.333333px; font-size: 10.5pt;">)我能够哈哈大笑,并看到事物好的一面</span></p><p class="15" style="margin-left:24.7500pt;"><group type="radio" id="radio1" style="font-size: 10.5pt;"><input type="radio" id="radio1__0" name="radio1" value="0" checked="true"><label for="radio1__0">我经常这样——0分</label><br><input type="radio" id="radio1__1" name="radio1" value="1"><label for="radio1__1">现在已经不太这样了——1分</label><br><input type="radio" id="radio1__2" name="radio1" value="2"><label for="radio1__2">现在肯定是不太多了——2分</label><br><input type="radio" id="radio1__3" name="radio1" value="3"><label for="radio1__3">根本没有——3分</label><br></group><br></p></td></tr><tr style="height: 72.55pt;"><td colspan="2" class="" style="border-color: rgb(0, 0, 0);"><p class="15" style="margin-top:2.2500pt;margin-left:25.6000pt;"><span style="letter-spacing: 0.15pt; font-size: 9pt;">3</span><span style="letter-spacing: 0.15pt; font-size: 10.5pt;">)我感到愉快</span></p><p class="15" style="margin-top: 5.2pt; margin-left: 24.75pt; line-height: 15.7pt;"><span style="letter-spacing: -0.65pt; position: relative; top: -5pt;"><group type="radio" id="radio2" style="font-size: 10.5pt;"><input type="radio" id="radio2__0" name="radio2" value="0" checked="true"><label for="radio2__0">大多数时间——0分</label><br><input type="radio" id="radio2__1" name="radio2" value="1"><label for="radio2__1">有时——1分</label><br><input type="radio" id="radio2__2" name="radio2" value="2"><label for="radio2__2">并不经常——2分</label><br><input type="radio" id="radio2__3" name="radio2" value="3"><label for="radio2__3">根本没有——3分</label><br></group><br></span></p></td></tr><tr style="height: 72.55pt;"><td colspan="2" class="" style="border-color: rgb(0, 0, 0)"><p class="15" style="margin-top: 3.1pt; margin-left: 25.35pt; line-height: 1.5;"><span style="letter-spacing: 0.25pt; font-size: 9pt;">4</span><span style="font-size: 10.5pt; line-height: 1.5;"><span style="letter-spacing: 0.25pt;">)我对自己的仪容失去兴趣</span><o:p></o:p></span></p><p class="15" style="margin-top: 5.2pt; margin-left: 24.75pt; line-height: 1.5;"><span style="letter-spacing: -0.85pt; position: relative; top: -5pt; line-height: 1.5;"><group type="radio" id="radio3" style="font-size: 10.5pt; line-height: 1.5;"><input type="radio" id="radio30" name="radio3" value="0" checked="true"><label for="radio30">我仍然像以往一样关心——0分</label><br><input type="radio" id="radio31" name="radio3" value="1"><label for="radio31">我可能不是非常关心——1分</label><br><input type="radio" id="radio32" name="radio3" value="2"><label for="radio32">并不像我应该做的那样关心我——2分</label><br><input type="radio" id="radio33" name="radio3" value="3"><label for="radio33">肯定——3分</label><br></group><span style="font-size: 10.5pt; line-height: 1.5;"><br></span></span></p></td></tr><tr style="height: 72.55pt"><td colspan="2" class="" style="border-color: rgb(0, 0, 0)"><p class="15" style="margin-top: 3.8pt; margin-left: 25.6pt; line-height: 1.5;"><span style="font-size: 10.5pt; line-height: 1.5;"><span style="letter-spacing: 0.2pt; position: relative; top: -5pt;">5)我对一切都是乐观地向前看</span><o:p style=""></o:p></span></p><p class="15" style="margin-left: 24.75pt;"><span style="letter-spacing: -0.45pt;"><group type="radio" id="radio4" style="font-size: 10.5pt;"><input type="radio" id="radio40" name="radio4" value="0" checked="true"><label for="radio40">差不多是这样做——0分</label><br><input type="radio" id="radio41" name="radio4" value="1"><label for="radio41">并不完全是这样做的——1分</label><br><input type="radio" id="radio42" name="radio4" value="2"><label for="radio42">很少这样做——2分</label><br><input type="radio" id="radio43" name="radio4" value="3"><label for="radio43">几乎从不这样做——3分</label><br></group><br></span></p></td></tr><tr style="height: 108px"><td colspan="2" class="" style="border-color: rgb(0, 0, 0)"><p class="15" style="margin-top:4.5000pt;margin-left:25.5000pt;line-height:15.7500pt;
|
||||
mso-line-height-rule:exactly;"><span style="font-size: 10.5pt;"><span style="letter-spacing: 0.25pt; position: relative; top: -5pt;">6)我好像感到情绪在渐渐低落</span><o:p></o:p></span></p><p class="15" style="margin-left:24.7500pt;"><span style="letter-spacing: -0.75pt;"><group type="radio" id="radio5" style="font-size: 10.5pt;"><input type="radio" id="radio5__0" name="radio5" value="0" checked="true"><label for="radio5__0">根本没有——0分</label><br><input type="radio" id="radio5__1" name="radio5" value="1"><label for="radio5__1">有时——1分</label><br><input type="radio" id="radio5__2" name="radio5" value="2"><label for="radio5__2">很经常——2分</label><br><input type="radio" id="radio5__3" name="radio5" value="3"><label for="radio5__3">几乎所有时间——3分</label><br></group><br></span></p></td></tr><tr style="height: 118px"><td colspan="2" class="" style="border-color: rgb(0, 0, 0);"><p class="15" style="margin-top:3.2500pt;margin-left:25.5000pt;"><span style="font-size: 10.5pt;"><span style="letter-spacing: 0.25pt;">7)我能欣赏一本好书或意向好的广播或电视节目</span><o:p></o:p></span></p><p class="15" style="margin-top: 5.25pt; margin-left: 24.75pt; line-height: 15.7pt;"><group type="radio" id="radio6" style="font-size: 10.5pt;"><input type="radio" id="radio6__0" name="radio6" value="0"><label for="radio6__0">常常如此——0分</label><br><input type="radio" id="radio6__1" name="radio6" value="1" checked="true"><label for="radio6__1">有时——1分</label><br><input type="radio" id="radio6__2" name="radio6" value="2"><label for="radio6__2">并非经常——2分</label><br><input type="radio" id="radio6__3" name="radio6" value="3"><label for="radio6__3">很少——3分</label><br></group><br></p></td></tr><tr style="height: 38px"><td class="" style="border-color: rgb(0, 0, 0)"><p class="15" style="margin-top:9.5000pt;margin-left:25.4000pt;"><span style="letter-spacing: 0.1pt; font-size: 10.5pt;"><font face="宋体" style="">抑郁得分(</font>0-21分)</span><span style="font-size: 9pt;"><o:p></o:p></span></p></td><td class=""><p class="MsoNormal" style=""><span style="font-family: Arial; font-size: 10.5pt;"><span> </span><field tabindex="0" id="total1" type="Text" contenteditable="true" class="input" title="文本输入域" value="1" name="total1" data-code="" data-expression="= radio0 + radio1 + radio2 + radio3 + radio4 + radio5 + radio6" multiline="false" validate="false" format="" style="display: inline-block; min-width: 100px; text-align: left;">1</field> </span></p></td></tr>
|
||||
|
||||
|
||||
|
||||
<tr style="height: 72.55pt"><td colspan="2" class="" style="border-color: rgb(0, 0, 0)"><p class="15" style="margin-top:1.7500pt;margin-left:26.1000pt;"><span style="letter-spacing: 0.1pt; font-size: 10.5pt;">1)我感到紧张(或痛苦)</span></p><p class="15" style="margin-top: 5.2pt; margin-left: 24.75pt; line-height: 15.7pt;"><span style="font-size: 10.5pt;"><group type="radio" id="radio7" style=""><input type="radio" id="radio7__0" name="radio7" value="0" checked="true"><label for="radio7__0">根本没有——0分</label><br><input type="radio" id="radio7__1" name="radio7" value="1"><label for="radio7__1">有时候——1分</label><br><input type="radio" id="radio7__2" name="radio7" value="2"><label for="radio7__2">大多时候——2分</label><br><input type="radio" id="radio7__3" name="radio7" value="3"><label for="radio7__3">几乎所有时候——3分</label><br></group><span> </span></span></p></td></tr><tr style="height: 138px;"><td colspan="2" class="" style="border-color: rgb(0, 0, 0);"><p class="15" style="margin-top:2.5000pt;margin-left:25.5000pt;line-height:15.7000pt;
|
||||
mso-line-height-rule:exactly;"><span style="font-size: 10.5pt;"><span style="letter-spacing: 0.25pt; position: relative; top: -5pt;">2)我感到有点害怕好像预感到什么可怕的事情要发生</span><o:p></o:p></span></p><p class="15" style="margin-left: 24.75pt;"><group type="radio" id="radio8" style="font-size: 10.5pt;"><input type="radio" id="radio8__0" name="radio8" value="0" checked="true"><label for="radio8__0">根本没有——0分</label><br><input type="radio" id="radio8__1" name="radio8" value="1"><label for="radio8__1">有一点,但并不使我苦恼——1分</label><br><input type="radio" id="radio8__2" name="radio8" value="2"><label for="radio8__2">是有,不太严重——2分</label><br><input type="radio" id="radio8__3" name="radio8" value="3"><label for="radio8__3">非常肯定和十分严重——3分</label><br></group><br></p></td></tr><tr style="height: 127px;"><td colspan="2" class="" style="border-color: rgb(0, 0, 0);"><p class="MsoNormal" style="text-indent: 30px;"><span style="font-size: 10.5pt;">3)我的心中充满烦恼</span></p><p class="MsoNormal" style="margin-left: 24.75pt;"><span style="font-size: 10.5pt;"><group type="radio" id="radio9" style=""><input type="radio" id="radio90" name="radio9" value="0" checked="true"><label for="radio90">根本没有——0分</label><br><input type="radio" id="radio91" name="radio9" value="1" style=""><label for="radio91">有时候——1分</label><br><input type="radio" id="radio92" name="radio9" value="2"><label for="radio92">大多时候——2分</label><br><input type="radio" id="radio93" name="radio9" value="3"><label for="radio93">几乎所有时候——3分</label><br></group></span></p></td></tr><tr class="" style=""><td colspan="2">
|
||||
|
||||
<!--StartFragment--><p class="15" style="margin-top:1.9000pt;margin-left:25.3500pt;line-height:15.6500pt;
|
||||
mso-line-height-rule:exactly;"><span style="font-size: 10.5pt;"><span style="letter-spacing: 0.25pt; position: relative; top: -5pt;">4)我能够安闲而轻松地坐着</span><o:p></o:p></span></p><p class="15" style="margin-left: 24.75pt;"><group type="radio" id="radio10" style=""><input type="radio" id="radio100" name="radio10" value="0" checked="true"><label for="radio100">肯定--0分</label><br><input type="radio" id="radio101" name="radio10" value="1"><label for="radio101">经常--1分</label><br><input type="radio" id="radio102" name="radio10" value="2"><label for="radio102">并不经常--2分</label><br><input type="radio" id="radio103" name="radio10" value="3"><label for="radio103">更本没有--3分</label><br></group></p><!--EndFragment-->
|
||||
|
||||
</td></tr><tr class="" style=""><td colspan="2" style="">
|
||||
|
||||
<!--StartFragment--><p class="15" style="margin-top:2.9500pt;margin-left:25.6000pt;"><span style="font-size: 10.5pt;"><span style="letter-spacing: 0.25pt;">5)我有点坐立不安,好像感到非要活动不可</span><o:p></o:p></span></p><p class="15" style="margin-top: 5.2pt; margin-left: 24.75pt; line-height: 15.75pt;"><group type="radio" id="radio11" style=""><input type="radio" id="radio11__0" name="radio11" value="0" checked="true"><label for="radio11__0">根本没有——0分</label><br><input type="radio" id="radio11__1" name="radio11" value="1"><label for="radio11__1">并不很少——1分</label><br><input type="radio" id="radio11__2" name="radio11" value="2"><label for="radio11__2">是不少——2分</label><br><input type="radio" id="radio11__3" name="radio11" value="3"><label for="radio11__3">确实非常多——3分</label><br></group></p><!--EndFragment-->
|
||||
|
||||
</td></tr><tr class=""><td colspan="2" style=""><span>
|
||||
|
||||
</span><!--StartFragment--><p class="15" style="margin-top:3.9500pt;margin-left:25.5000pt;"><span style="letter-spacing: 0.2pt; font-size: 9pt;">6)</span><span style="font-size: 10.5pt;"><span style="letter-spacing: 0.2pt;">我突然发现有恐慌感</span><o:p></o:p></span></p><p class="15" style="margin-top:5.2000pt;margin-left:24.7500pt;line-height:15.7500pt;
|
||||
mso-line-height-rule:exactly;"><group type="radio" id="radio12" style=""><input type="radio" id="radio12__0" name="radio12" value="0" checked="true"><label for="radio12__0">根本没有——0分</label><br><input type="radio" id="radio12__1" name="radio12" value="1"><label for="radio12__1">并非经常——1分</label><br><input type="radio" id="radio12__2" name="radio12" value="2"><label for="radio12__2">非常肯定,十分严重——2分</label><br><input type="radio" id="radio12__3" name="radio12" value="3"><label for="radio12__3">确实很经常——3分</label><br></group></p><!--EndFragment--><span>
|
||||
|
||||
</span></td></tr><tr class="" style=""><td colspan="2" style=""><span>
|
||||
|
||||
</span><!--StartFragment--><p class="15" style="margin-top:2.9500pt;margin-left:25.6500pt;line-height:15.7500pt;
|
||||
mso-line-height-rule:exactly;"><span style="font-size: 10.5pt;"><span style="letter-spacing: 0.25pt; position: relative; top: -5pt;">7)我感到有点害怕,好像某个内脏器官变化了</span><o:p></o:p></span></p><p class="15" style="margin-left: 24.75pt;"><group type="radio" id="radio13" style=""><input type="radio" id="radio13__0" name="radio13" value="0" checked="true"><label for="radio13__0">根本没有——0分</label><br><input type="radio" id="radio13__1" name="radio13" value="1"><label for="radio13__1">有时——1分</label><br><input type="radio" id="radio13__2" name="radio13" value="2"><label for="radio13__2">很经常——2分</label><br><input type="radio" id="radio13__3" name="radio13" value="3"><label for="radio13__3">非常经常——3分</label><br></group></p><!--EndFragment--><span>
|
||||
|
||||
</span></td></tr><tr style="height: 35px"><td class="" id="" title="" style="border-color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); vertical-align: middle; text-align: center"><p class="15" style="text-align: center; margin-top: 0pt; margin-left: 0pt;"><span style="letter-spacing: 0.1pt; font-size: 10.5pt;"><font face="宋体" style=""></font>
|
||||
|
||||
<!--StartFragment-->焦虑得分</span></p></td><td class="" style="border-width: 1pt; border-color: rgb(0, 0, 0)"><field tabindex="0" id="total2" name="total2" type="Text" contenteditable="true" class="input" title="文本输入域" value="0" data-code="" data-expression="= radio7 + radio8 + radio9 + radio10 + radio11 + radio12 + radio13" multiline="false" validate="false" format="" style="display: inline-block; min-width: 100px; text-align: left;">0</field><span> </span></td></tr><tr class=""><td colspan="1"><span>
|
||||
|
||||
</span><!--StartFragment--><p class="15" style="margin-top:1.7500pt;margin-left:129.0500pt;"><span style="font-size: 10.5pt;"><span>结果</span><o:p></o:p></span></p><p class="15" style="margin-top:0.0500pt;margin-right:0.6500pt;margin-left:124.2000pt;
|
||||
text-indent:-97.2500pt;"><span style="font-size: 10.5pt;"><span style="letter-spacing: 0.2pt;"><font face="宋体">(</font>0-7分为阴性;8-10为轻度;11-14分为</span><span style="letter-spacing: 0.15pt;"><font face="宋体">中度</font>;15-21分为</span> <span style="letter-spacing: -0.1pt;">重</span><span style="letter-spacing: -0.1pt;">度)</span></span></p><!--EndFragment--><span>
|
||||
|
||||
</span></td><td colspan="1" class=""><field tabindex="0" id="field_4" name="field_4" type="Text" contenteditable="true" class="input" title="文本输入域" value="1" data-code="" data-expression="=total1 + total2" multiline="false" validate="false" format="" style="display: inline-block; min-width: 100px; text-align: left;">1</field> <br></td></tr></tbody></table></div><p class="MsoNormal" style="margin-left:90.0500pt;"><span style="position:absolute;z-index:1;margin-left:75.5000px;
|
||||
margin-top:112.3333px;width:680.0000px;height:0.0000px;"><br></span><span style="position:absolute;z-index:1;margin-left:75.5000px;
|
||||
margin-top:112.3333px;width:680.0000px;height:0.0000px;"><br></span><span style="position:absolute;z-index:1;margin-left:75.5000px;
|
||||
margin-top:112.3333px;width:680.0000px;height:0.0000px;"><br></span></p><br></div><div id="_footer" style="position: relative; min-height: 0.65cm; padding-left: 0.65cm; padding-right: 0.65cm; padding-bottom: 0.65cm; outline: none;" contenteditable="false" class=""></div>
|
||||
</div>
|
140
vue3-element-admin-thin/public/mock/bind_data.html
Normal file
@ -0,0 +1,140 @@
|
||||
|
||||
<div id="_page"
|
||||
style="margin: 0px auto; background: rgb(255, 255, 255); width: 209.5mm; min-height: 148mm; transform: scale(1, 1); transform-origin: 50% 0px 0px;"
|
||||
pagekind="A5" direct="landscape">
|
||||
<div id="_header"
|
||||
style="outline: none; min-height: 0.5cm; padding-left: 1cm; padding-right: 1cm; padding-top: 0.65cm; position: relative;"
|
||||
contenteditable="false" class="">
|
||||
<div style="text-align: center; line-height: 1.5;"><span
|
||||
style="font-size: x-large; font-weight: 700;">成都中医药大学附属医院</span></div>
|
||||
<div style="text-align: center; line-height: 1;"><span
|
||||
style="font-weight: bold; font-size: large;">电子病历</span></div>
|
||||
<div style="text-align: center;"><span
|
||||
style="font-weight: bold; font-family: 楷体; line-height: 1; color: rgb(255, 255, 255); font-size: 5pt;">.</span>
|
||||
</div>
|
||||
</div>
|
||||
<div id="_body" style="min-height: calc(472.441px); padding-left: 1cm; padding-right: 1cm;"
|
||||
contenteditable="false" class="">
|
||||
<div style="text-align: left;" domain="" code="" title="" contenteditable="false"><span
|
||||
style="font-size: small; text-align: justify; font-weight: bold;" domain="" code="" title=""
|
||||
contenteditable="false">姓名:</span>
|
||||
<field tabindex="0" id="pat_name" type="Text" contenteditable="false" class="input" title="姓名"
|
||||
name="pat_name" data-code="" data-expression="" multiline="false" validate="false" format=""
|
||||
style="font-size: small; text-align: justify;" value=""></field><span
|
||||
style="font-size: small; text-align: justify;"> </span><span
|
||||
style="font-size: small; text-align: justify; font-weight: bold;" domain="" code="" title=""
|
||||
contenteditable="false">性别:</span>
|
||||
<field tabindex="0" id="pat_sex" type="Text" contenteditable="false" class="input" title="性别" value="男"
|
||||
name="pat_sex" data-code="" data-expression="" multiline="false" validate="false" format=""
|
||||
style="font-size: small; text-align: justify;">男</field><span
|
||||
style="font-size: small; text-align: justify;"> </span><span
|
||||
style="font-size: small; text-align: justify; font-weight: bold;" domain="" code="" title=""
|
||||
contenteditable="false">年龄:</span>
|
||||
<field tabindex="0" id="pat_age" type="Text" contenteditable="false" class="input" title="年龄"
|
||||
name="pat_age" data-code="" data-expression="" multiline="false" validate="false" format=""
|
||||
style="font-size: small; text-align: justify;" value=""></field><span
|
||||
style="font-size: small; text-align: justify;"> </span><span
|
||||
style="font-size: small; text-align: justify; font-weight: bold;" domain="" code="" title=""
|
||||
contenteditable="false">就诊科室:</span>
|
||||
<field tabindex="0" id="visit_dept" type="Text" contenteditable="false" class="input" title="就诊科室"
|
||||
name="visit_dept" data-code="" data-expression="" multiline="false" validate="false" format=""
|
||||
style="font-size: small; text-align: justify;" value="风湿免疫科">风湿免疫科</field><span
|
||||
style="font-size: small; text-align: justify; font-weight: bold;" domain="" code="" title=""
|
||||
contenteditable="false"> 就诊号:</span>
|
||||
<field tabindex="0" type="Text" contenteditable="false" class="input" title="就诊号" data-code=""
|
||||
data-expression="" multiline="false" validate="false" format="" style="font-size: small;" domain=""
|
||||
code="" required="false" inputmode="" id="pat_id" name="pat_id" value="MZ07882405098">
|
||||
MZ07882405098</field><span style="font-size: small; text-align: justify;"> </span>
|
||||
</div>
|
||||
<div style="text-align: justify; line-height: 2;"><span style="line-height: 2;"><span
|
||||
style="font-weight: 700; line-height: 2;">
|
||||
<hr style="font-size: small;"><span style="font-size: 9pt;">就诊时间:</span>
|
||||
</span>
|
||||
<field tabindex="0" id="visit_time" type="Text" class="input" title="就诊时间" name="visit_time"
|
||||
data-code="" data-expression="" multiline="false" validate="false" format=""
|
||||
style="font-size: 9pt;" value="2024-05-09 14:21:52">2024-05-09 14:21:52</field>
|
||||
<field tabindex="0" type="Text" class="blank input" title="就诊时间" name="visit_time" data-code=""
|
||||
data-expression="" multiline="false" validate="false" format=""
|
||||
style="font-weight: 700; font-size: 9pt;"> </field>
|
||||
</span><span style="font-size: 9pt; line-height: 2;">
|
||||
<group type="radio" id="firstcall" domain="" code="" style=""><input type="radio" id="firstcall__0"
|
||||
name="firstcall" value="1" checked><label for="firstcall__0">初诊</label><input type="radio"
|
||||
id="firstcall__1" name="firstcall" value="2"><label for="firstcall__1">复诊</label></group>
|
||||
</span></div>
|
||||
<div style="text-align: justify; line-height: 2;"><span style="font-size: 9pt; line-height: 2;"><span
|
||||
style="font-weight: bold;">联系电话:</span>
|
||||
<field tabindex="0" id="pat_phone" type="Text" class="input" title="联系电话" name="pat_phone"
|
||||
data-code="" data-expression="" multiline="false" validate="false" format=""
|
||||
contenteditable="true" style="" value=""></field><span style="" domain=""
|
||||
code="" title=" "><span style="font-weight: bold;"> 家庭住址:</span>
|
||||
<field tabindex="0" id="pat_address" name="pat_address" type="Text" contenteditable="true"
|
||||
class="blank input" title="地址" domain="" code="" multiline="true" required="false" format=""
|
||||
inputmode="" data-expression="" value="">地址</field>
|
||||
</span>
|
||||
</span></div>
|
||||
<div style="text-align: justify; line-height: 2;"><span style="font-size: 9pt; line-height: 2;"><span
|
||||
style="font-weight: bold;">主诉:</span>
|
||||
<field tabindex="0" id="pat_appeal" name="pat_appeal" type="Text" contenteditable="true"
|
||||
class="input" title="主诉" domain="" code="" multiline="true" required="false" format=""
|
||||
inputmode="" data-expression="" style="" value=""></field><span
|
||||
style="font-weight: bold;"> </span>
|
||||
</span></div>
|
||||
<div style="text-align: justify; line-height: 2;"><span style="font-size: 9pt; line-height: 2;"><span
|
||||
style="" title="" domain="" code=""><span style="font-weight: bold;">现病史:</span>
|
||||
<field tabindex="0" id="pat_now_history" name="pat_now_history" type="Text"
|
||||
contenteditable="true" class="input" title="病史" domain="" code="" multiline="true"
|
||||
required="false" format="" inputmode="" data-expression="" style=""
|
||||
value=""></field><span
|
||||
style="font-weight: bold;"> </span>
|
||||
</span></span></div>
|
||||
<div style="text-align: justify; line-height: 2;"><span style="font-size: 9pt; line-height: 2;"><span
|
||||
style="font-weight: bold;">既往史:</span>
|
||||
<field tabindex="0" id="pat_past_history" name="pat_past_history" type="Text" contenteditable="true"
|
||||
class="blank input" title="既往史" domain="" code="" multiline="true" required="false" format=""
|
||||
inputmode="" data-expression="" style="">既往史</field><span
|
||||
style="font-weight: bold;"> </span>
|
||||
</span></div>
|
||||
<div style="text-align: justify; line-height: 2;" domain="" code="" title=" "><span
|
||||
style="font-size: 9pt; line-height: 2;"><span style="font-weight: bold;">过敏史:</span>
|
||||
<field tabindex="0" id="pat_allergy_history" name="pat_allergy_history" type="Text"
|
||||
contenteditable="true" class="blank input" title="过敏史" domain="" code="" multiline="true"
|
||||
required="false" format="" inputmode="" data-expression="" style="">过敏史</field><span
|
||||
style="font-weight: bold;"> </span>
|
||||
</span></div>
|
||||
<div style="text-align: justify; line-height: 2;"><span style="font-size: 9pt; line-height: 2;"><span
|
||||
style="font-weight: bold;">诊断:</span>
|
||||
<field tabindex="0" id="diagnosis" name="diagnosis" type="Text" contenteditable="true" class="input"
|
||||
title="诊断" domain="" code="" multiline="true" required="false" format="" inputmode=""
|
||||
data-expression="" style="" value=""></field>
|
||||
</span></div>
|
||||
<div style="text-align: justify; line-height: 2;"><span style="font-size: 12px;"><span
|
||||
style="font-weight: 700;">处方:</span>
|
||||
<field tabindex="0" id="presc" name="presc" type="Text" contenteditable="false" class="input"
|
||||
title="处方" domain="" code="" multiline="true" required="false" format="" inputmode=""
|
||||
data-expression="" style="" value=""></field><span style="font-weight: 700;"> </span>
|
||||
</span></div>
|
||||
<div style="text-align: justify; line-height: 2;"><span style="font-size: 9pt; line-height: 2;"><span
|
||||
style="font-weight: bold;">建议:</span>
|
||||
<field tabindex="0" id="advice" type="Text" contenteditable="true" class="input" title="建议" domain="" code=""
|
||||
multiline="true" required="false" format="" inputmode="" data-expression="" style=""
|
||||
value="在用药过程中有任何身体不适,请及时前往实体医院就诊">在用药过程中有任何身体不适,请及时前往实体医院就诊</field><span
|
||||
style="font-weight: bold;"> </span>
|
||||
</span></div>
|
||||
<div style="text-align: justify; line-height: 2;"><span style="font-size: 9pt; line-height: 2;"><span
|
||||
style="font-weight: bold;"><br></span></span></div>
|
||||
<div style="text-align: justify; line-height: 2;" domain="" code="" title="" contenteditable="false"><span
|
||||
style="font-weight: bold; line-height: 2; font-size: 9pt;">医师签字:</span>
|
||||
<field tabindex="0" id="doctor_name" type="Text" contenteditable="false" class="input" title="医师签字"
|
||||
name="doctor_name" data-code="" data-expression="" multiline="false" validate="false" format=""
|
||||
style="line-height: 2; font-size: 9pt;" domain="" code="" required="false" inputmode="" value="贾连荣">
|
||||
张某某</field><span style="line-height: 2; font-size: 9pt;">
|
||||
<span style="font-weight: bold; line-height: 2;">手签:</span></span>
|
||||
</div>
|
||||
</div>
|
||||
<div id="_footer"
|
||||
style="outline: none; position: relative; min-height: 0.5cm; padding-left: 1cm; padding-right: 1cm; padding-bottom: 0.65cm;"
|
||||
contenteditable="false" class="">
|
||||
<div style="text-align: center;"><span style="font-size: small;">第<field page="pageNum" style="">#</field>
|
||||
页,共<field page="pageTotal" style="">#</field>页</span></div>
|
||||
</div>
|
||||
</div>
|
37
vue3-element-admin-thin/public/mock/data_table.html
Normal file
10
vue3-element-admin-thin/public/mock/en_us.html
Normal file
75
vue3-element-admin-thin/public/mock/sign.html
Normal file
@ -0,0 +1,75 @@
|
||||
|
||||
<div id="_page" style="margin: 0px auto; background: rgb(255, 255, 255); width: 210mm; min-height: 297mm; transform: scale(1, 1); transform-origin: 50% 0px 0px;" pagekind="A4" direct="portrait">
|
||||
<div id="_header" style="outline: none; min-height: 0.99cm; padding-left: 1.5cm; padding-right: 1.5cm; padding-top: 0.99cm; position: relative;" contenteditable="false" class="">
|
||||
<p style=" font-family: 宋体; font-size: 15.75pt; text-align: Center;">
|
||||
<label style=" font-family: 宋体; font-size: 15.75pt; font-weight: bold; text-align: Center;">云南城投昆明妇女儿童医院</label>
|
||||
</p><p style=" font-family: 宋体; font-size: 14.25pt; text-align: Center;">
|
||||
<label style=" font-family: 宋体; font-size: 15.75pt; font-weight: bold;">麻醉知情同意书</label>
|
||||
</p></div>
|
||||
|
||||
<div id="_body" style="outline:none;min-height: calc(297mm - 0.99cm - 0.48cm - 0.99cm - 1.5cm);padding-left:1.5cm;padding-right:1.5cm;" contenteditable="false" class="">
|
||||
<p style=" font-family: 宋体; font-size: 14.25pt;">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">姓名:</label>
|
||||
<field tabindex="0" id="姓名" name="姓名" class="blank" style=" font-family: 仿宋; font-size: 14.25pt;" contenteditable="true" type="Text" value="" title="姓名">姓名</field>
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;"> 性别:</label>
|
||||
<field tabindex="0" id="性别" name="性别" class="blank" style=" font-family: 仿宋; font-size: 14.25pt;" contenteditable="true" type="Text" value="" title="性别">性别</field>
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;"> 年龄:</label>
|
||||
<field tabindex="0" id="年龄" name="年龄" class="blank" style=" font-family: 仿宋; font-size: 14.25pt;" contenteditable="true" type="Text" value="" title="年龄">年龄</field>
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;"> 门诊号:</label>
|
||||
<field tabindex="0" id="病历号" name="病历号" class="blank" style=" font-family: 仿宋; font-size: 14.25pt;" contenteditable="true" type="Text" value="" title="病历号" data-code="" validate="false" format="">病历号</field> <label style=" font-family: 仿宋; font-size: 14.25pt;">科室:</label>
|
||||
<field tabindex="0" id="科室" name="科室" class="blank" style=" font-family: 仿宋; font-size: 14.25pt;" contenteditable="true" type="Text" value="" title="{科室}">科室</field> <label style=" font-family: 仿宋; font-size: 14.25pt;"> 床号:</label>
|
||||
<field tabindex="0" id="日期" name="日期" class="blank" style=" font-family: 仿宋; font-size: 14.25pt;" contenteditable="true" type="Text" value="" title="床号">床号</field>
|
||||
</p><p style=" font-family: 仿宋; font-size: 14.25pt;">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">诊断:</label>
|
||||
<field tabindex="0" id="诊断" name="诊断" class="blank" style=" font-family: 仿宋; font-size: 14.25pt;" contenteditable="true" type="Text" value="" title="诊断" data-code="" validate="false" format="">诊断</field> <label style=" font-family: 仿宋; font-size: 14.25pt;">执行检查手术: </label>
|
||||
<field tabindex="0" class="blank" style=" font-family: 仿宋; font-size: 14.25pt;" contenteditable="true" type="Text" value="" title="执行手术">执行手术</field>
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;"> 体重: </label>
|
||||
<field tabindex="0" id="体重" name="体重" class="blank" style=" font-family: 仿宋; font-size: 14.25pt;" contenteditable="true" type="Text" value="" title="体重" data-code="" validate="false" format="alpha">{体重}</field>
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">k</label>
|
||||
</p><p style=" font-family: 宋体; font-size: 14.25pt;">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">任何麻醉均有风险性,在根据患者病情,切实做好麻醉前准备并按操作规范认真做好麻醉工 作及范防范措施情况下,仍有可能发生以下难以避免的麻醉意外及并发症:</label>
|
||||
</p><p style=" font-family: 宋体; font-size: 14.25pt;">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">1、根据麻醉需要及操作规范,遵照《中华人民共和国药典》要求使用各种麻醉药物和输液用液体 后,由于患者体制原因,出现输液反应,过敏、高敏反应,致热源反应等,甚至导致过敏性休 克、呼吸心跳停止; </label>
|
||||
</p><p style=" font-family: 宋体; font-size: 14.25pt;">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">2、麻醉期间可能发生恶心、呕吐、返流误吸、喉水肿、喉痉挛,导致气道梗阻,窒息;</label>
|
||||
<label style=" font-family: 宋体; font-size: 14.25pt;"> </label>
|
||||
</p><p style=" font-family: 宋体; font-size: 14.25pt;">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">3、呼吸抑制甚至短暂呼吸暂停;血压下降;心率减慢;严重者可能发生心跳呼吸骤停; </label>
|
||||
</p><p style=" font-family: 宋体; font-size: 14.25pt;">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">4、因麻醉诱发原有隐患匿性疾病发作,如哮喘、癫痫、心脑血管意外等; </label>
|
||||
</p><p style=" font-family: 宋体; font-size: 14.25pt;">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">5、因抢救需要气管插管,可能损伤患者口唇、牙齿、引起反流误吸、气道痉挛、窒息; </label>
|
||||
</p><p style=" font-family: 宋体; font-size: 14.25pt;">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">6、其他难以预料的并发症及意外。 </label>
|
||||
</p><p style=" font-family: 宋体; font-size: 14.25pt;">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">麻醉后注意事项 </label>
|
||||
</p><p style=" font-family: 宋体; font-size: 14.25pt;">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">1、麻醉结束后2小时内不要饮水、进食; </label>
|
||||
</p><p style=" font-family: 宋体; font-size: 14.25pt;">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">2、接受麻醉后当天,不能驾驶机动车,骑自行车及电动车,不能经行精细操作工作和高空作业; </label>
|
||||
</p><p style=" font-family: 宋体; font-size: 14.25pt;">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">3、麻醉结束后,请在医院观察休息一段时间,待麻醉医生认可后,方能离开; </label>
|
||||
</p><p style=" font-family: 宋体; font-size: 14.25pt;">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">我们将以良好的医德医术为患者实行麻醉,力争将麻醉风险降低到最低程度,保障患者安全。上 述情况以对患者及家属说明,并对患者方提出的问题作了详细的解答,经慎重考虑,患者及家属 对麻醉可能出现的风险表示充分的理解,同意要求实行麻醉,签字为证:</label>
|
||||
</p><p style="undefined" id="" title="患者签名">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">患者本人签字</label><img type="sign" alt="双击手写签名" style="width: 120px; height: 40px;" draggable="false" id="patient-sign" name="patient-sign" title=""><span style="font-size: 14.25pt;"> 签字时间_____年___月___日___ 时____分 </span></p><p style=" font-family: 仿宋; font-size: 14.25pt;">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">患者家属签字</label><img type="sign" alt="双击手写签名" style="width: 120px; height: 40px;" draggable="false" id="patient-family-sign" name="patient-family-sign" title="家属签名"><span style="font-size: 14.25pt;">与患者关系_____</span></p><p style=" font-family: 仿宋; font-size: 14.25pt; text-align: Center;"><br></p><p style=" font-family: 宋体; font-size: 12pt; text-align: Right;">
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">麻醉医师签名: <img readonly style="width: 120px; height: 80px;" type="sign" alt="医生签名" id="doctor-sign" name="doctor-sign" title="医生签名"> </label>
|
||||
</p><p style=" font-family: 宋体; font-size: 12pt; text-align: Right;">
|
||||
<field tabindex="0" class="blank" style=" font-family: 仿宋; font-size: 14.25pt;" contenteditable="true" type="Text" value="" title=""></field>
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">年</label>
|
||||
<field tabindex="0" class="blank" style=" font-family: 仿宋; font-size: 14.25pt;" contenteditable="true" type="Text" value="" title=""></field>
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">月</label>
|
||||
<field tabindex="0" class="blank" style=" font-family: 仿宋; font-size: 14.25pt;" contenteditable="true" type="Text" value="" title=""></field>
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">日</label>
|
||||
<field tabindex="0" class="blank" style=" font-family: 仿宋; font-size: 14.25pt;" contenteditable="true" type="Text" value="" title=""></field>
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">时</label>
|
||||
<field tabindex="0" class="blank" style=" font-family: 仿宋; font-size: 14.25pt;" contenteditable="true" type="Text" value="" title=""></field>
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt;">分</label>
|
||||
<label style=" font-family: 仿宋; font-size: 14.25pt; text-align: Right;"> </label>
|
||||
</p></div>
|
||||
|
||||
<div id="_footer" style="outline:none; position:relative;min-height:1.5cm;padding-left:1.5cm;padding-right:1.5cm;padding-bottom:0.48cm;" contenteditable="false" class="">
|
||||
<p style=""><label style=" font-family: 宋体; font-size: 10.5pt; color: #323232;"> </label> </p></div>
|
||||
|
||||
</div>
|
12
vue3-element-admin-thin/public/mock/yizhu.html
Normal file
1368
vue3-element-admin-thin/public/mock/zh-bo.html
Normal file
1167
vue3-element-admin-thin/public/mock/zh-tw.html
Normal file
1167
vue3-element-admin-thin/public/mock/zh-ug.html
Normal file
802
vue3-element-admin-thin/public/mock/临时医嘱单.html
Normal file
941
vue3-element-admin-thin/public/mock/门诊检查申请单.html
Normal file
3670
vue3-element-admin-thin/public/vender/JsBarcode.all.js
Normal file
1
vue3-element-admin-thin/public/vender/codemirror.js
Normal file
@ -0,0 +1,66 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/xml; charset=gb2312" />
|
||||
<title>My97DatePicker</title>
|
||||
<script type="text/javascript" src="config.js" charset=gb2312></script>
|
||||
<script>
|
||||
//var l = location;
|
||||
if(parent==window)
|
||||
location.href = 'http://www.my97.net';
|
||||
/*
|
||||
else{
|
||||
var start=l.href.indexOf('#')+1;
|
||||
if(start>0){
|
||||
document.domain = l.href.substr(start);
|
||||
}
|
||||
}
|
||||
*/
|
||||
var $d, $dp, $pdp = parent.$dp, $dt, $tdt, $sdt, $lastInput, $IE=$pdp.ie, $FF = $pdp.ff,$OPERA=$pdp.opera, $ny, $cMark = false;
|
||||
|
||||
//˵<><CBB5><EFBFBD><EFBFBD>flat<61><74>ʱ,<2C><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>$dp
|
||||
if ($pdp.eCont) {
|
||||
$dp = {};
|
||||
for (var p in $pdp) {
|
||||
$dp[p] = $pdp[p];
|
||||
}
|
||||
}
|
||||
else{
|
||||
$dp = $pdp;
|
||||
}
|
||||
|
||||
$dp.getLangIndex = function(name){
|
||||
var arr = langList;
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
if (arr[i].name == name) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
$dp.getLang = function(name){
|
||||
var index = $dp.getLangIndex(name);
|
||||
if (index == -1) {
|
||||
index = 0;
|
||||
}
|
||||
return langList[index];
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
$dp.realLang = $dp.getLang($dp.lang);
|
||||
document.write("<script src='lang/" + $dp.realLang.name + ".js' charset='" + $dp.realLang.charset + "'><\/script>");
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>Ƥ<EFBFBD><C6A4><EFBFBD>б<EFBFBD><D0B1>ļ<EFBFBD>
|
||||
for (var i = 0; i < skinList.length; i++) {
|
||||
document.write('<link rel="stylesheet" type="text/css" href="skin/' + skinList[i].name + '/datepicker.css" title="' + skinList[i].name + '" charset="' + skinList[i].charset + '" disabled="true"/>');
|
||||
}
|
||||
|
||||
</script>
|
||||
<script type="text/javascript" src="calendar.js" charset="gb2312"></script>
|
||||
</head>
|
||||
<body leftmargin="0" topmargin="0" onLoad="$c.autoSize()" tabindex=0>
|
||||
</body>
|
||||
</html>
|
||||
<script>
|
||||
new My97DP();
|
||||
</script>
|
678
vue3-element-admin-thin/public/vender/date97/WdatePicker.js
Normal file
@ -0,0 +1,678 @@
|
||||
/*
|
||||
* My97 DatePicker 4.8.5
|
||||
* License: http://www.my97.net/license.asp
|
||||
*/
|
||||
var $dp, WdatePicker;
|
||||
(function () {
|
||||
var Config = {
|
||||
$langList: [{
|
||||
name: 'en',
|
||||
charset: 'UTF-8'
|
||||
},
|
||||
{
|
||||
name: 'zh-cn',
|
||||
charset: 'gb2312'
|
||||
},
|
||||
{
|
||||
name: 'zh-tw',
|
||||
charset: 'GBK'
|
||||
}
|
||||
],
|
||||
$skinList: [{
|
||||
name: 'default',
|
||||
charset: 'gb2312'
|
||||
},
|
||||
{
|
||||
name: 'whyGreen',
|
||||
charset: 'gb2312'
|
||||
},
|
||||
{
|
||||
name: 'blue',
|
||||
charset: 'gb2312'
|
||||
},
|
||||
{
|
||||
name: 'green',
|
||||
charset: 'gb2312'
|
||||
},
|
||||
{
|
||||
name: 'simple',
|
||||
charset: 'gb2312'
|
||||
},
|
||||
{
|
||||
name: 'ext',
|
||||
charset: 'gb2312'
|
||||
},
|
||||
{
|
||||
name: 'blueFresh',
|
||||
charset: 'gb2312'
|
||||
},
|
||||
{
|
||||
name: 'twoer',
|
||||
charset: 'gb2312'
|
||||
},
|
||||
{
|
||||
name: 'YcloudRed',
|
||||
charset: 'gb2312'
|
||||
},
|
||||
{
|
||||
name: 'thinkpap',
|
||||
charset: 'gb2312'
|
||||
}
|
||||
],
|
||||
$wdate: false,
|
||||
$crossFrame: false,
|
||||
$preLoad: false,
|
||||
$dpPath: '',
|
||||
doubleCalendar: false,
|
||||
enableKeyboard: true,
|
||||
enableInputMask: true,
|
||||
autoUpdateOnChanged: null,
|
||||
weekMethod: 'MSExcel',
|
||||
position: {},
|
||||
lang: 'auto',
|
||||
skin: 'default',
|
||||
dateFmt: 'yyyy年MM月dd日 HH时mm分',
|
||||
realDateFmt: 'yyyy-MM-dd',
|
||||
realTimeFmt: 'HH:mm:ss',
|
||||
realFullFmt: '%Date %Time',
|
||||
minDate: '0001-01-01 00:00:00',
|
||||
maxDate: '9999-12-31 23:59:59',
|
||||
minTime: '00:00:00',
|
||||
maxTime: '23:59:59',
|
||||
startDate: '',
|
||||
alwaysUseStartDate: false,
|
||||
yearOffset: 1911,
|
||||
firstDayOfWeek: 0,
|
||||
isShowWeek: false,
|
||||
highLineWeekDay: true,
|
||||
isShowClear: true,
|
||||
isShowToday: true,
|
||||
isShowOK: true,
|
||||
isShowOthers: true,
|
||||
readOnly: false,
|
||||
errDealMode: 0,
|
||||
autoPickDate: null,
|
||||
qsEnabled: true,
|
||||
autoShowQS: false,
|
||||
hmsMenuCfg: {
|
||||
H: [1, 6],
|
||||
m: [5, 6],
|
||||
s: [15, 4]
|
||||
},
|
||||
|
||||
opposite: false,
|
||||
specialDates: null,
|
||||
specialDays: null,
|
||||
disabledDates: null,
|
||||
disabledDays: null,
|
||||
onpicking: null,
|
||||
onpicked: null,
|
||||
onclearing: null,
|
||||
oncleared: null,
|
||||
ychanging: null,
|
||||
ychanged: null,
|
||||
Mchanging: null,
|
||||
Mchanged: null,
|
||||
dchanging: null,
|
||||
dchanged: null,
|
||||
Hchanging: null,
|
||||
Hchanged: null,
|
||||
mchanging: null,
|
||||
mchanged: null,
|
||||
schanging: null,
|
||||
schanged: null,
|
||||
eCont: null,
|
||||
vel: null,
|
||||
elProp: '',
|
||||
errMsg: '',
|
||||
quickSel: [],
|
||||
has: {},
|
||||
getRealLang: function () {
|
||||
var arr = Config.$langList;
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
if (arr[i].name == this.lang) {
|
||||
return arr[i]
|
||||
}
|
||||
}
|
||||
return arr[0]
|
||||
}
|
||||
};
|
||||
WdatePicker = main;
|
||||
var w = window,
|
||||
emptyEl = {
|
||||
innerHTML: ''
|
||||
},
|
||||
d = 'document',
|
||||
de = 'documentElement',
|
||||
tag = 'getElementsByTagName',
|
||||
dptop, jsPath, $IE, $FF, $OPERA;
|
||||
var ua = navigator.userAgent,
|
||||
isTablet = /(?:iPad|PlayBook)/.test(ua) || (/(?:Android)/.test(ua) && !/(?:Mobile)/.test(ua)),
|
||||
isPhone = /(?:iPhone)/.test(ua) || /(?:Android)/.test(ua) && /(?:Mobile)/.test(ua);
|
||||
var appName = navigator.appName;
|
||||
if (appName == 'Microsoft Internet Explorer') $IE = true;
|
||||
else if (appName == 'Opera') $OPERA = true;
|
||||
else $FF = true;
|
||||
jsPath = Config.$dpPath || getJsPath();
|
||||
if (Config.$wdate) {
|
||||
loadCSS(jsPath + 'skin/WdatePicker.css')
|
||||
}
|
||||
dptop = w;
|
||||
if (Config.$crossFrame) {
|
||||
try {
|
||||
while (dptop.parent != dptop && dptop.parent[d][tag]('frameset').length == 0) {
|
||||
dptop = dptop.parent
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
if (!dptop.$dp) {
|
||||
dptop.$dp = {
|
||||
ff: $FF,
|
||||
ie: $IE,
|
||||
opera: $OPERA,
|
||||
status: 0,
|
||||
defMinDate: Config.minDate,
|
||||
defMaxDate: Config.maxDate,
|
||||
isTablet: isTablet,
|
||||
isPhone: isPhone,
|
||||
isTouch: isTablet || isPhone
|
||||
}
|
||||
}
|
||||
initTopDP();
|
||||
if (Config.$preLoad && $dp.status == 0) {
|
||||
dpAttachEvent(w, 'onload', function () {
|
||||
main(null, true)
|
||||
})
|
||||
}
|
||||
var docEventName = $dp.isTouch ? 'ontouchstart' : 'onmousedown';
|
||||
if (!w[d].docMD) {
|
||||
dpAttachEvent(w[d], docEventName, disposeDP, true);
|
||||
w[d].docMD = true
|
||||
}
|
||||
if (!dptop[d].docMD) {
|
||||
dpAttachEvent(dptop[d], docEventName, disposeDP, true);
|
||||
dptop[d].docMD = true
|
||||
}
|
||||
dpAttachEvent(w, 'onunload', function () {
|
||||
if ($dp.dd) {
|
||||
display($dp.dd, "none")
|
||||
}
|
||||
});
|
||||
|
||||
function initTopDP() {
|
||||
try {
|
||||
dptop[d], dptop.$dp = dptop.$dp || {}
|
||||
} catch (e) {
|
||||
dptop = w;
|
||||
$dp = $dp || {}
|
||||
}
|
||||
var obj = {
|
||||
win: w,
|
||||
$: function (el) {
|
||||
return (typeof el == 'string') ? w[d].getElementById(el) : el
|
||||
},
|
||||
$D: function (id, arg) {
|
||||
return this.$DV(this.$(id).value, arg)
|
||||
},
|
||||
$DV: function (v, arg) {
|
||||
if (v != '') {
|
||||
this.dt = $dp.cal.splitDate(v, $dp.cal.dateFmt);
|
||||
if (arg) {
|
||||
for (var p in arg) {
|
||||
if (this.dt[p] === undefined) {
|
||||
this.errMsg = 'invalid property:' + p
|
||||
} else {
|
||||
this.dt[p] += arg[p];
|
||||
if (p == 'M') {
|
||||
var offset = arg['M'] > 0 ? 1 : 0;
|
||||
var tmpday = new Date(this.dt['y'], this.dt['M'], 0).getDate();
|
||||
this.dt['d'] = Math.min(tmpday + offset, this.dt['d'])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.dt.refresh()) {
|
||||
return this.dt
|
||||
}
|
||||
}
|
||||
return ''
|
||||
},
|
||||
show: function () {
|
||||
var divs = dptop[d].getElementsByTagName('div'),
|
||||
maxZIndex = 1e5;
|
||||
for (var i = 0; i < divs.length; i++) {
|
||||
var curZ = parseInt(divs[i].style.zIndex);
|
||||
if (curZ > maxZIndex) {
|
||||
maxZIndex = curZ
|
||||
}
|
||||
}
|
||||
this.dd.style.zIndex = maxZIndex + 2;
|
||||
display(this.dd, "block");
|
||||
display(this.dd.firstChild, "")
|
||||
},
|
||||
unbind: function (el) {
|
||||
el = this.$(el);
|
||||
if (el.initcfg) {
|
||||
dpDetachEvent(el, 'onclick', function () {
|
||||
main(el.initcfg)
|
||||
});
|
||||
dpDetachEvent(el, 'onfocus', function () {
|
||||
main(el.initcfg)
|
||||
})
|
||||
}
|
||||
},
|
||||
hide: function () {
|
||||
display(this.dd, "none")
|
||||
},
|
||||
attachEvent: dpAttachEvent
|
||||
};
|
||||
for (var p in obj) {
|
||||
dptop.$dp[p] = obj[p];
|
||||
}
|
||||
$dp = dptop.$dp
|
||||
}
|
||||
|
||||
function dpAttachEvent(o, sType, fHandler, useCapture) {
|
||||
if (o.addEventListener) {
|
||||
var shortTypeName = sType.replace(/on/, "");
|
||||
fHandler._ieEmuEventHandler = function (e) {
|
||||
return fHandler(e)
|
||||
};
|
||||
o.addEventListener(shortTypeName, fHandler._ieEmuEventHandler, useCapture)
|
||||
} else {
|
||||
o.attachEvent(sType, fHandler)
|
||||
}
|
||||
}
|
||||
|
||||
function dpDetachEvent(o, sType, fHandler) {
|
||||
if (o.removeEventListener) {
|
||||
var shortTypeName = sType.replace(/on/, "");
|
||||
fHandler._ieEmuEventHandler = function (e) {
|
||||
return fHandler(e)
|
||||
};
|
||||
o.removeEventListener(shortTypeName, fHandler._ieEmuEventHandler, false)
|
||||
} else {
|
||||
o.detachEvent(sType, fHandler)
|
||||
}
|
||||
}
|
||||
|
||||
function compareCfg(o1, o2, issub) {
|
||||
if (typeof o1 != typeof o2) return false;
|
||||
if (typeof o1 == 'object') {
|
||||
if (!issub) {
|
||||
for (var o in o1) {
|
||||
if (typeof o2[o] == 'undefined') return false;
|
||||
if (!compareCfg(o1[o], o2[o], true)) return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
} else if (typeof o1 == 'function' && typeof o2 == 'function') {
|
||||
return o1.toString() == o2.toString()
|
||||
} else {
|
||||
return o1 == o2
|
||||
}
|
||||
}
|
||||
|
||||
function getJsPath() {
|
||||
var path, tmp, scripts = w[d][tag]("script");
|
||||
for (var i = 0; i < scripts.length; i++) {
|
||||
path = scripts[i].getAttribute('src') || '';
|
||||
path = path.substr(0, path.toLowerCase().indexOf('wdatepicker.js'));
|
||||
var tmp = path.lastIndexOf("/");
|
||||
if (tmp > 0) path = path.substring(0, tmp + 1);
|
||||
if (path) break
|
||||
}
|
||||
return path
|
||||
}
|
||||
|
||||
function loadCSS(path, title, charset) {
|
||||
var head = w[d][tag]('HEAD').item(0),
|
||||
style = w[d].createElement('link');
|
||||
if (head) {
|
||||
style.href = path;
|
||||
style.rel = 'stylesheet';
|
||||
style.type = 'text/css';
|
||||
if (title) style.title = title;
|
||||
if (charset) style.charset = charset;
|
||||
head.appendChild(style)
|
||||
}
|
||||
}
|
||||
|
||||
function getAbsM(w) {
|
||||
w = w || dptop;
|
||||
var lm = 0,
|
||||
tm = 0;
|
||||
while (w != dptop) {
|
||||
var ifs = w.parent[d][tag]('iframe');
|
||||
for (var i = 0; i < ifs.length; i++) {
|
||||
try {
|
||||
if (ifs[i].contentWindow == w) {
|
||||
var rc = getBound(ifs[i]);
|
||||
lm += rc.left;
|
||||
tm += rc.top;
|
||||
break
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
w = w.parent
|
||||
}
|
||||
return {
|
||||
'leftM': lm,
|
||||
'topM': tm
|
||||
}
|
||||
}
|
||||
|
||||
function getBound(o, ignoreScr) {
|
||||
if (o.getBoundingClientRect) {
|
||||
return o.getBoundingClientRect()
|
||||
} else {
|
||||
var patterns = {
|
||||
ROOT_TAG: /^body|html$/i,
|
||||
OP_SCROLL: /^(?:inline|table-row)$/i
|
||||
};
|
||||
var hssFixed = false,
|
||||
win = null,
|
||||
t = o.offsetTop,
|
||||
l = o.offsetLeft,
|
||||
r = o.offsetWidth,
|
||||
b = o.offsetHeight;
|
||||
var parentNode = o.offsetParent;
|
||||
if (parentNode != o) {
|
||||
while (parentNode) {
|
||||
l += parentNode.offsetLeft;
|
||||
t += parentNode.offsetTop;
|
||||
if (getStyle(parentNode, 'position').toLowerCase() == 'fixed') hssFixed = true;
|
||||
else if (parentNode.tagName.toLowerCase() == "body") win = parentNode.ownerDocument.defaultView;
|
||||
parentNode = parentNode.offsetParent
|
||||
}
|
||||
}
|
||||
parentNode = o.parentNode;
|
||||
while (parentNode.tagName && !patterns.ROOT_TAG.test(parentNode.tagName)) {
|
||||
if (parentNode.scrollTop || parentNode.scrollLeft) {
|
||||
if (!patterns.OP_SCROLL.test(display(parentNode))) {
|
||||
if (!$OPERA || parentNode.style.overflow !== 'visible') {
|
||||
l -= parentNode.scrollLeft;
|
||||
t -= parentNode.scrollTop
|
||||
}
|
||||
}
|
||||
}
|
||||
parentNode = parentNode.parentNode
|
||||
}
|
||||
if (!hssFixed) {
|
||||
var scr = getScroll(win);
|
||||
l -= scr.left;
|
||||
t -= scr.top
|
||||
}
|
||||
r += l;
|
||||
b += t;
|
||||
return {
|
||||
'left': l,
|
||||
'top': t,
|
||||
'right': r,
|
||||
'bottom': b
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getWH(w) {
|
||||
w = w || dptop;
|
||||
var doc = w[d],
|
||||
width = (w.innerWidth) ? w.innerWidth : (doc[de] && doc[de].clientWidth) ? doc[de].clientWidth : doc.body.offsetWidth,
|
||||
height = (w.innerHeight) ? w.innerHeight : (doc[de] && doc[de].clientHeight) ? doc[de].clientHeight : doc.body.offsetHeight;
|
||||
return {
|
||||
'width': width,
|
||||
'height': height
|
||||
}
|
||||
}
|
||||
|
||||
function getScroll(w) {
|
||||
w = w || dptop;
|
||||
var doc = w[d],
|
||||
doce = doc[de],
|
||||
db = doc.body;
|
||||
doc = (doce && doce.scrollTop != null && (doce.scrollTop > db.scrollTop || doce.scrollLeft > db.scrollLeft)) ? doce : db;
|
||||
return {
|
||||
'top': doc.scrollTop,
|
||||
'left': doc.scrollLeft
|
||||
}
|
||||
}
|
||||
|
||||
function disposeDP(e) {
|
||||
try {
|
||||
var src = e ? (e.srcElement || e.target) : null;
|
||||
if ($dp.cal && !$dp.eCont && $dp.dd && src != $dp.el && $dp.dd.style.display == 'block') {
|
||||
$dp.cal.close()
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
function dpLoaded() {
|
||||
$dp.status = 2
|
||||
}
|
||||
var isDptopReady, dptopInterval;
|
||||
|
||||
function main(initcfg, preLoad) {
|
||||
if (!$dp) return;
|
||||
initcfg.el = initcfg.el || w[d].activeElement;
|
||||
if ($dp.isTouch) {
|
||||
try {
|
||||
initcfg.el.readOnly = true;
|
||||
initcfg.el.blur()
|
||||
} catch (e) {}
|
||||
}
|
||||
initTopDP();
|
||||
var cfg = {};
|
||||
for (var p in initcfg) {
|
||||
cfg[p] = initcfg[p]
|
||||
}
|
||||
for (var p in Config) {
|
||||
if (p.substring(0, 1) != '$' && cfg[p] === undefined) {
|
||||
cfg[p] = Config[p]
|
||||
}
|
||||
}
|
||||
if (preLoad) {
|
||||
if (!dptopReady()) {
|
||||
dptopInterval = dptopInterval || setInterval(function () {
|
||||
if (dptop[d].readyState == 'complete') {
|
||||
clearInterval(dptopInterval);
|
||||
}
|
||||
main(null, true)
|
||||
}, 50);
|
||||
return
|
||||
}
|
||||
if ($dp.status == 0) {
|
||||
$dp.status = 1;
|
||||
cfg.el = emptyEl;
|
||||
showPicker(cfg, true)
|
||||
} else {
|
||||
return
|
||||
}
|
||||
} else if (cfg.eCont) {
|
||||
cfg.eCont = $dp.$(cfg.eCont);
|
||||
cfg.el = emptyEl;
|
||||
cfg.autoPickDate = true;
|
||||
cfg.qsEnabled = false;
|
||||
showPicker(cfg)
|
||||
} else {
|
||||
if (Config.$preLoad && $dp.status != 2) return;
|
||||
if (!cfg.el) {
|
||||
var evt = SearchEvent();
|
||||
if (w.event === evt || evt) {
|
||||
cfg.srcEl = evt.srcElement || evt.target;
|
||||
evt.cancelBubble = true
|
||||
}
|
||||
}
|
||||
cfg.el = cfg.el = $dp.$(cfg.el || cfg.srcEl);
|
||||
if (cfg.el == null) {
|
||||
alert('WdatePicker:el is null!\nexample:onclick="WdatePicker({el:this})"');
|
||||
return
|
||||
}
|
||||
try {
|
||||
if (!cfg.el || cfg.el['My97Mark'] === true || cfg.el.disabled || ($dp.dd && display($dp.dd) != 'none' && $dp.dd.style.left != '-970px')) {
|
||||
if (cfg.el['My97Mark']) cfg.el['My97Mark'] = false;
|
||||
return
|
||||
}
|
||||
} catch (e) {}
|
||||
if (evt && cfg.el.nodeType == 1 && !compareCfg(cfg.el.initcfg, initcfg)) {
|
||||
$dp.unbind(cfg.el);
|
||||
dpAttachEvent(cfg.el, evt.type == 'focus' ? 'onclick' : 'onfocus', function () {
|
||||
main(initcfg)
|
||||
});
|
||||
cfg.el.initcfg = initcfg;
|
||||
}
|
||||
showPicker(cfg)
|
||||
}
|
||||
|
||||
function dptopReady() {
|
||||
if ($IE && dptop != w && dptop[d].readyState != 'complete') return false;
|
||||
return true
|
||||
}
|
||||
|
||||
function SearchEvent() {
|
||||
if ($FF) {
|
||||
try {
|
||||
var count = 0;
|
||||
func = SearchEvent.caller;
|
||||
while (func != null) {
|
||||
var arg0 = func.arguments[0];
|
||||
if (arg0 && (arg0 + '').indexOf('Event') >= 0 || (count++) > 97) {
|
||||
return arg0
|
||||
}
|
||||
func = func.caller
|
||||
}
|
||||
} catch (e) {}
|
||||
return null
|
||||
}
|
||||
return event
|
||||
}
|
||||
}
|
||||
|
||||
function getStyle(obj, attribute) {
|
||||
return obj.currentStyle ? obj.currentStyle[attribute] : document.defaultView.getComputedStyle(obj, false)[attribute]
|
||||
}
|
||||
|
||||
function display(obj, value) {
|
||||
if (obj) {
|
||||
if (value != null) obj.style.display = value;
|
||||
else return getStyle(obj, 'display')
|
||||
}
|
||||
}
|
||||
|
||||
function showPicker(cfg, preLoad) {
|
||||
var nodeName = cfg.el ? cfg.el.nodeName : 'INPUT';
|
||||
if (preLoad || cfg.eCont || new RegExp(/input|textarea|div|field|span|p|a/ig).test(nodeName)) {
|
||||
cfg.elProp = cfg.elProp || nodeName == 'INPUT' ? 'value' : 'innerHTML'
|
||||
} else {
|
||||
return
|
||||
}
|
||||
if (cfg.lang == 'auto') {
|
||||
cfg.lang = $IE ? navigator.browserLanguage.toLowerCase() : navigator.language.toLowerCase()
|
||||
}
|
||||
if (!cfg.eCont) {
|
||||
for (var p in cfg) {
|
||||
$dp[p] = cfg[p]
|
||||
}
|
||||
}
|
||||
if (!$dp.dd || cfg.eCont || ($dp.dd && (cfg.getRealLang().name != $dp.dd.lang || cfg.skin != $dp.dd.skin))) {
|
||||
if (cfg.eCont) {
|
||||
ddInit(cfg.eCont, cfg)
|
||||
} else {
|
||||
$dp.dd = dptop[d].createElement("DIV");
|
||||
$dp.dd.style.cssText = 'position:absolute';
|
||||
dptop[d].body.appendChild($dp.dd);
|
||||
ddInit($dp.dd, cfg);
|
||||
if (preLoad) {
|
||||
$dp.dd.style.left = $dp.dd.style.top = '-970px'
|
||||
} else {
|
||||
$dp.show();
|
||||
setPos($dp)
|
||||
}
|
||||
}
|
||||
} else if ($dp.cal) {
|
||||
$dp.show();
|
||||
$dp.cal.init();
|
||||
if (!$dp.eCont) setPos($dp)
|
||||
}
|
||||
|
||||
function ddInit(cont, cfg) {
|
||||
var dm = dptop[d].domain,
|
||||
isCross = false,
|
||||
defHtml = '<iframe hideFocus=true width=9 height=7 frameborder=0 border=0 scrolling=no src="about:blank"></iframe>';
|
||||
cont.innerHTML = defHtml;
|
||||
var langList = Config.$langList,
|
||||
skinList = Config.$skinList,
|
||||
doc;
|
||||
try {
|
||||
doc = cont.lastChild.contentWindow[d]
|
||||
} catch (e) {
|
||||
isCross = true;
|
||||
cont.removeChild(cont.lastChild);
|
||||
var ifr = dptop[d].createElement("iframe");
|
||||
ifr.hideFocus = true;
|
||||
ifr.frameBorder = 0;
|
||||
ifr.scrolling = 'no';
|
||||
ifr.src = "javascript:(function(){var d=document;d.open();d.domain='" + dm + "';})()";
|
||||
cont.appendChild(ifr);
|
||||
setTimeout(function () {
|
||||
doc = cont.lastChild.contentWindow[d];
|
||||
ddWrite()
|
||||
}, 97);
|
||||
return
|
||||
}
|
||||
ddWrite();
|
||||
|
||||
function ddWrite() {
|
||||
var realLang = cfg.getRealLang(),
|
||||
ver = '4.9.0b3';
|
||||
cont.lang = realLang.name;
|
||||
cont.skin = cfg.skin;
|
||||
var h = ['<head><script>', '', 'var doc=document, $d, $dp, $cfg=doc.cfg, $pdp = parent.$dp, $dt, $tdt, $sdt, $lastInput, $IE=$pdp.ie, $FF = $pdp.ff,$OPERA=$pdp.opera, $ny, $cMark = false;', 'if($cfg.eCont){$dp = {};for(var p in $pdp)$dp[p]=$pdp[p];}else{$dp=$pdp;};for(var p in $cfg){$dp[p]=$cfg[p];}', 'if(!$dp.isTouch)doc.oncontextmenu=function(){try{$c._fillQS(!$dp.has.d,1);showB($d.qsDivSel);}catch(e){};return false;};', '</script><script src=', jsPath, 'lang/', realLang.name, '.js?' + ver + ' charset=', realLang.charset, '></script>'];
|
||||
if (isCross) h[1] = 'document.domain="' + dm + '";';
|
||||
for (var i = 0; i < skinList.length; i++) {
|
||||
if (skinList[i].name == cfg.skin) {
|
||||
h.push('<link rel="stylesheet" type="text/css" href="' + jsPath + 'skin/' + skinList[i].name + '/datepicker.css?');
|
||||
h.push(ver);
|
||||
h.push('" charset="' + skinList[i].charset + '"/>')
|
||||
}
|
||||
}
|
||||
h.push('<script src="' + jsPath + 'calendar.js?');
|
||||
h.push(ver);
|
||||
h.push('"></script>');
|
||||
h.push('</head><body leftmargin="0" topmargin="0" tabindex=0></body></html>');
|
||||
h.push('<script>var t;t=t||setInterval(function(){if((typeof(doc.ready)=="boolean"&&doc.ready)||doc.readyState=="complete"){new My97DP();$cfg.onload();$c.autoSize();$cfg.setPos($dp);clearInterval(t);}},20);</script>');
|
||||
cfg.setPos = setPos;
|
||||
cfg.onload = dpLoaded;
|
||||
doc.write('<html>');
|
||||
doc.cfg = cfg;
|
||||
doc.write(h.join(''));
|
||||
doc.close()
|
||||
}
|
||||
}
|
||||
|
||||
function setPos(dp) {
|
||||
var l = dp.position.left,
|
||||
t = dp.position.top,
|
||||
el = dp.el;
|
||||
if (el == emptyEl) return;
|
||||
if (el != dp.srcEl && (display(el) == 'none' || el.type == 'hidden')) el = dp.srcEl;
|
||||
var objxy = getBound(el),
|
||||
mm = getAbsM(w),
|
||||
currWH = getWH(dptop),
|
||||
scr = getScroll(dptop),
|
||||
ddHeight = $dp.dd.offsetHeight,
|
||||
ddWidth = $dp.dd.offsetWidth;
|
||||
if (isNaN(t)) t = 0;
|
||||
if ((mm.topM + objxy.bottom + ddHeight > currWH.height) && (mm.topM + objxy.top - ddHeight > 0)) {
|
||||
t += scr.top + mm.topM + objxy.top - ddHeight - 2
|
||||
} else {
|
||||
t += scr.top + mm.topM + objxy.bottom;
|
||||
var offsetT = t - scr.top + ddHeight - currWH.height;
|
||||
if (offsetT > 0) t -= offsetT
|
||||
}
|
||||
if (isNaN(l)) l = 0;
|
||||
l += scr.left + Math.min(mm.leftM + objxy.left, currWH.width - ddWidth - 5) - ($IE ? 2 : 0);
|
||||
dp.dd.style.top = (t + 2) + 'px';
|
||||
dp.dd.style.left = l + 'px'
|
||||
}
|
||||
}
|
||||
})();
|
5
vue3-element-admin-thin/public/vender/date97/calendar.js
Normal file
14
vue3-element-admin-thin/public/vender/date97/lang/en.js
Normal file
@ -0,0 +1,14 @@
|
||||
var $lang={
|
||||
errAlertMsg: "Invalid date or the date out of range,redo or not?",
|
||||
aWeekStr: ["wk", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
|
||||
aLongWeekStr:["wk","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
|
||||
aMonStr: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
|
||||
aLongMonStr: ["January","February","March","April","May","June","July","August","September","October","November","December"],
|
||||
clearStr: "Clear",
|
||||
todayStr: "Today",
|
||||
okStr: "OK",
|
||||
updateStr: "OK",
|
||||
timeStr: "Time",
|
||||
quickStr: "Quick Selection",
|
||||
err_1: 'MinDate Cannot be bigger than MaxDate!'
|
||||
}
|
14
vue3-element-admin-thin/public/vender/date97/lang/zh-cn.js
Normal file
@ -0,0 +1,14 @@
|
||||
var $lang={
|
||||
errAlertMsg: "\u4E0D\u5408\u6CD5\u7684\u65E5\u671F\u683C\u5F0F\u6216\u8005\u65E5\u671F\u8D85\u51FA\u9650\u5B9A\u8303\u56F4,\u9700\u8981\u64A4\u9500\u5417?",
|
||||
aWeekStr: ["\u5468","\u65E5","\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D"],
|
||||
aLongWeekStr:["\u5468","\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"],
|
||||
aMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00","\u5341\u4E8C"],
|
||||
aLongMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"],
|
||||
clearStr: "\u6E05\u7A7A",
|
||||
todayStr: "\u4ECA\u5929",
|
||||
okStr: "\u786E\u5B9A",
|
||||
updateStr: "\u786E\u5B9A",
|
||||
timeStr: "\u65F6\u95F4",
|
||||
quickStr: "\u5FEB\u901F\u9009\u62E9",
|
||||
err_1: '\u6700\u5C0F\u65E5\u671F\u4E0D\u80FD\u5927\u4E8E\u6700\u5927\u65E5\u671F!'
|
||||
}
|
14
vue3-element-admin-thin/public/vender/date97/lang/zh-tw.js
Normal file
@ -0,0 +1,14 @@
|
||||
var $lang={
|
||||
errAlertMsg: "\u4E0D\u5408\u6CD5\u7684\u65E5\u671F\u683C\u5F0F\u6216\u8005\u65E5\u671F\u8D85\u51FA\u9650\u5B9A\u7BC4\u570D,\u9700\u8981\u64A4\u92B7\u55CE?",
|
||||
aWeekStr: ["\u5468","\u65E5","\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D"],
|
||||
aLongWeekStr:["\u5468","\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"],
|
||||
aMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00","\u5341\u4E8C"],
|
||||
aLongMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"],
|
||||
clearStr: "\u6E05\u7A7A",
|
||||
todayStr: "\u4ECA\u5929",
|
||||
okStr: "\u78BA\u5B9A",
|
||||
updateStr: "\u78BA\u5B9A",
|
||||
timeStr: "\u6642\u9593",
|
||||
quickStr: "\u5FEB\u901F\u9078\u64C7",
|
||||
err_1: '\u6700\u5C0F\u65E5\u671F\u4E0D\u80FD\u5927\u65BC\u6700\u5927\u65E5\u671F!'
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
.Wdate{
|
||||
border:#999 1px solid;
|
||||
height:20px;
|
||||
background:#fff url(datePicker.gif) no-repeat right;
|
||||
}
|
||||
.Wdate::-ms-clear{display:none;}
|
||||
|
||||
.WdateFmtErr{
|
||||
font-weight:bold;
|
||||
color:red;
|
||||
}
|
BIN
vue3-element-admin-thin/public/vender/date97/skin/datePicker.gif
Normal file
After Width: | Height: | Size: 1.0 KiB |
@ -0,0 +1,328 @@
|
||||
/**
|
||||
* yyh & kimi from mb518.com
|
||||
* 2019-3-25
|
||||
**/
|
||||
.WdateDiv {
|
||||
width: 216px;
|
||||
background-color: #FFF;
|
||||
border-radius: 5px;
|
||||
border: 1px solid #cecece;
|
||||
}
|
||||
|
||||
.WdateDiv2 {
|
||||
width: 432px;
|
||||
}
|
||||
|
||||
.WdateDiv > div:nth-child(3) {
|
||||
padding: 0px 0.375em;
|
||||
}
|
||||
|
||||
.WdateDiv .NavImg a {
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
|
||||
.WdateDiv .NavImgll a {
|
||||
float: left;
|
||||
background: url(img.gif) no-repeat;
|
||||
background-size: 400%;
|
||||
}
|
||||
|
||||
.WdateDiv .NavImgl a {
|
||||
float: left;
|
||||
background: url(img.gif) no-repeat -1em 0;
|
||||
background-size: 400%;
|
||||
}
|
||||
|
||||
.WdateDiv .NavImgr a {
|
||||
float: right;
|
||||
background: url(img.gif) no-repeat -2em 0;
|
||||
background-size: 400%;
|
||||
}
|
||||
|
||||
.WdateDiv .NavImgrr a {
|
||||
float: right;
|
||||
background: url(img.gif) no-repeat -3em 0;
|
||||
background-size: 400%;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTitle {
|
||||
height: 1.875em;
|
||||
padding: 0.1875em 0.3125em;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTitle > div:nth-child(3),
|
||||
.WdateDiv #dpTitle > div:nth-child(4) {
|
||||
margin: 0px 0.8125em;
|
||||
}
|
||||
|
||||
.WdateDiv .yminput {
|
||||
margin-top: 0.375em;
|
||||
text-align: center;
|
||||
border: 0px;
|
||||
height: 1.75em;
|
||||
width: 3.125em;
|
||||
color: #333;
|
||||
background-color: #eefaff;
|
||||
outline: none;
|
||||
cursor: pointer;
|
||||
font-size: 0.8125em;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.WdateDiv .yminputfocus {
|
||||
font-size: 0.8125em;
|
||||
margin-top: 0.375em;
|
||||
text-align: center;
|
||||
border: 0;
|
||||
color: #333;
|
||||
height: 1.25em;
|
||||
width: 3.125em;
|
||||
outline: none;
|
||||
background-color: #eefaff;
|
||||
}
|
||||
|
||||
.WdateDiv .menuSel {
|
||||
z-index: 1;
|
||||
position: absolute;
|
||||
background-color: #FFFFFF;
|
||||
display: none;
|
||||
padding: 0.3125em;
|
||||
border-radius: 3px;
|
||||
box-shadow: rgb(204, 204, 204) 0px 0px 2px 2px;
|
||||
}
|
||||
|
||||
.WdateDiv .menu {
|
||||
cursor: pointer;
|
||||
background-color: #fff;
|
||||
color: #333;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.WdateDiv .menuOn {
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
background-color: #d6f2ff;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.WdateDiv .invalidMenu {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
.WdateDiv .YMenu {
|
||||
margin-top: 1.875em;
|
||||
}
|
||||
|
||||
.WdateDiv .MMenu {
|
||||
margin-top: 1.875em;
|
||||
box-shadow: rgb(204, 204, 204) 0px 0px 2px 2px;
|
||||
padding: 0.3125em;
|
||||
border-radius: 3px;
|
||||
*width: 3.875em;
|
||||
}
|
||||
|
||||
.WdateDiv .hhMenu {
|
||||
margin-top: -5.625em;
|
||||
margin-left: 1.625em;
|
||||
}
|
||||
|
||||
.WdateDiv .mmMenu {
|
||||
margin-top: -2.875em;
|
||||
margin-left: 1.625em;
|
||||
}
|
||||
|
||||
.WdateDiv .ssMenu {
|
||||
margin-top: -1.5em;
|
||||
margin-left: 1.625em;
|
||||
}
|
||||
|
||||
.WdateDiv .Wweek {
|
||||
text-align: center;
|
||||
background: #DAF3F5;
|
||||
border-right: #BDEBEE 1px solid;
|
||||
}
|
||||
|
||||
.WdateDiv .MTitle {
|
||||
background-color: #f3f3f3;
|
||||
border-radius: 5px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.WdateDiv .WdayTable2 {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.WdateDiv .WdayTable2 table {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.WdateDiv .WdayTable {
|
||||
font-size: 0.75em;
|
||||
line-height: 1.5em;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.WdateDiv .WdayTable td {
|
||||
text-align: center;
|
||||
border-bottom: 1px solid #f3f3f3;
|
||||
padding: 0.1875em 0;
|
||||
}
|
||||
|
||||
.WdateDiv .Wday {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.WdateDiv .WdayOn {
|
||||
cursor: pointer;
|
||||
border-radius: 3px;
|
||||
background-color: #C0EBEF;
|
||||
}
|
||||
|
||||
.WdateDiv .Wwday {
|
||||
cursor: pointer;
|
||||
color: #ab1e1e;
|
||||
}
|
||||
|
||||
.WdateDiv .WwdayOn {
|
||||
cursor: pointer;
|
||||
border-radius: 3px;
|
||||
background-color: #C0EBEF;
|
||||
}
|
||||
|
||||
.WdateDiv .Wtoday {
|
||||
cursor: pointer;
|
||||
color: blue;
|
||||
}
|
||||
|
||||
.WdateDiv .Wselday {
|
||||
background-color: #35baf6;
|
||||
border-radius: 3px;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.WdateDiv .WspecialDay {
|
||||
background-color: #66F4DF;
|
||||
}
|
||||
|
||||
.WdateDiv .WotherDay {
|
||||
cursor: pointer;
|
||||
color: #8585e1;
|
||||
}
|
||||
|
||||
.WdateDiv .WotherDayOn {
|
||||
cursor: pointer;
|
||||
background-color: #d6f2ff;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.WdateDiv .WinvalidDay {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime {
|
||||
margin: 0.1875em 0 0.1875em 0.625em;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime #dpTimeStr {
|
||||
margin-left: 0.0625em;
|
||||
color: #333;
|
||||
font-size: 0.75em;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime table:nth-child(4) {
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime table:nth-child(-n+3) {
|
||||
font-size: 0.75em;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime input {
|
||||
-webkit-appearance: none;
|
||||
font-size: 0.75em;
|
||||
height: 1.25em;
|
||||
width: 1.875em;
|
||||
text-align: center;
|
||||
color: #333;
|
||||
border: 0;
|
||||
background-color: #eefaff;
|
||||
border-radius: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime input:disabled {
|
||||
background-color: #e7e7e7;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime .tB {
|
||||
border-right: 0px;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime .tE {
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime .tm {
|
||||
width: 0.9375em;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
/*.WdateDiv #dpTime button {
|
||||
font-size: 0.75em;
|
||||
}*/
|
||||
|
||||
.WdateDiv #dpTime #dpTimeUp {
|
||||
height: 0.625em;
|
||||
width: 0.8125em;
|
||||
border: 0px;
|
||||
background: url(img.gif) no-repeat -2em -1em;
|
||||
background-size: 450%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime #dpTimeDown {
|
||||
height: 0.625em;
|
||||
width: 0.8125em;
|
||||
border: 0px;
|
||||
background: url(img.gif) no-repeat -2em -1.625em;
|
||||
background-size: 450%;
|
||||
}
|
||||
|
||||
.WdateDiv #dpQS {
|
||||
float: left;
|
||||
margin-right: 0.1875em;
|
||||
margin-top: 0.3125em;
|
||||
background: url(img.gif) no-repeat 0px -1em;
|
||||
background-size: 320%;
|
||||
width: 1.25em;
|
||||
height: 1.25em;
|
||||
cursor: pointer;
|
||||
margin-left: 0.375em;
|
||||
}
|
||||
|
||||
.WdateDiv #dpControl {
|
||||
text-align: right;
|
||||
margin-top: 0.1875em;
|
||||
padding: 0 0.3125em;
|
||||
padding-bottom: 0.1875em;
|
||||
}
|
||||
|
||||
.WdateDiv .dpButton {
|
||||
font-size: 0.75em;
|
||||
-webkit-appearance: none;
|
||||
padding-top: 0;
|
||||
height: 1.75em;
|
||||
width: 2.8125em;
|
||||
border: 0;
|
||||
margin-top: 0.1875em;
|
||||
margin-right: 0.1875em;
|
||||
background: #35baf6;
|
||||
color: #fff;
|
||||
border-radius: 0;
|
||||
}
|
After Width: | Height: | Size: 2.4 KiB |
@ -0,0 +1,309 @@
|
||||
/*
|
||||
* My97 DatePicker 4.7
|
||||
* Ƥ<><C6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:ext
|
||||
* Ƥ<><C6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:CssRain
|
||||
* <20><><EFBFBD><EFBFBD>blog:http://www.CssRain.cn
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:cssrain@gmail.com
|
||||
*/
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DIV */
|
||||
.WdateDiv{
|
||||
width:180px;
|
||||
background-color:#fff;
|
||||
border:1px solid #718BB7;
|
||||
}
|
||||
/* ˫<><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD> */
|
||||
.WdateDiv2{
|
||||
width:360px;
|
||||
}
|
||||
.WdateDiv *{font-size:9pt;}
|
||||
|
||||
/****************************
|
||||
* <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC> ȫ<><C8AB><EFBFBD><EFBFBD>A<EFBFBD><41>ǩ
|
||||
***************************/
|
||||
.WdateDiv .NavImg a{
|
||||
margin-top:3px;
|
||||
cursor:pointer;
|
||||
display:block;
|
||||
width:15px;
|
||||
height:15px;
|
||||
}
|
||||
.WdateDiv .NavImgll a{
|
||||
background:url(left-btn2.gif) no-repeat center center;
|
||||
float:left;
|
||||
margin-left:2px;
|
||||
}
|
||||
.WdateDiv .NavImgl a{
|
||||
background:url(left-btn.gif) no-repeat center center;
|
||||
float:left;
|
||||
margin-left:2px;
|
||||
}
|
||||
.WdateDiv .NavImgr a{
|
||||
background:url(right-btn.gif) no-repeat center center;
|
||||
float:right;
|
||||
margin-right:2px;
|
||||
}
|
||||
.WdateDiv .NavImgrr a{
|
||||
background:url(right-btn2.gif) no-repeat center center;
|
||||
float:right;
|
||||
margin-right:2px;
|
||||
}
|
||||
|
||||
/****************************
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
***************************/
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD> DIV */
|
||||
.WdateDiv #dpTitle{
|
||||
height:22px;
|
||||
background:transparent url(hd-sprite.gif) repeat-x scroll 0 -83px;
|
||||
color:#FFFFFF;
|
||||
font-family:"sans serif",tahoma,verdana,helvetica;
|
||||
font-size:12px;
|
||||
font-size-adjust:none;
|
||||
font-stretch:normal;
|
||||
font-style:normal;
|
||||
font-variant:normal;
|
||||
font-weight:bold;
|
||||
padding-top:2px;
|
||||
}
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> INPUT */
|
||||
.WdateDiv .yminput{
|
||||
margin-top:2px;
|
||||
text-align:center;
|
||||
border:0px;
|
||||
height:20px;
|
||||
width:50px;
|
||||
color:#FFF;
|
||||
background-color:transparent;
|
||||
cursor:pointer;
|
||||
}
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʽ INPUT */
|
||||
.WdateDiv .yminputfocus{
|
||||
margin-top:2px;
|
||||
text-align:center;
|
||||
border:#939393 1px solid;
|
||||
font-weight:bold;
|
||||
color:#034c50;
|
||||
height:16px;
|
||||
width:50px;
|
||||
}
|
||||
/* <20>˵<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD> DIV */
|
||||
.WdateDiv .menuSel{
|
||||
z-index:1;
|
||||
position:absolute;
|
||||
background-color:#FFFFFF;
|
||||
border:1px solid #718BB7;
|
||||
display:none;
|
||||
}
|
||||
/* <20>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>ʽ TD */
|
||||
.WdateDiv .menu{
|
||||
cursor:pointer;
|
||||
background-color:#fff;
|
||||
color:#11777C;
|
||||
}
|
||||
/* <20>˵<EFBFBD><CBB5><EFBFBD>mouseover<65><72>ʽ TD */
|
||||
.WdateDiv .menuOn{
|
||||
cursor:pointer;
|
||||
background-color: #B3CEEF;
|
||||
}
|
||||
/* <20>˵<EFBFBD><CBB5><EFBFBD>Чʱ<D0A7><CAB1><EFBFBD><EFBFBD>ʽ TD */
|
||||
.WdateDiv .invalidMenu{
|
||||
color:#aaa;
|
||||
}
|
||||
/* <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB> DIV */
|
||||
.WdateDiv .YMenu{
|
||||
margin-top:16px;
|
||||
}
|
||||
/* <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB> DIV */
|
||||
.WdateDiv .MMenu{
|
||||
margin-top:16px;
|
||||
*width:62px;
|
||||
}
|
||||
/* ʱѡ<CAB1><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> DIV */
|
||||
.WdateDiv .hhMenu{
|
||||
margin-top:-90px;
|
||||
margin-left:26px;
|
||||
}
|
||||
/* <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> DIV */
|
||||
.WdateDiv .mmMenu{
|
||||
margin-top:-46px;
|
||||
margin-left:26px;
|
||||
}
|
||||
/* <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> DIV */
|
||||
.WdateDiv .ssMenu{
|
||||
margin-top:-24px;
|
||||
margin-left:26px;
|
||||
}
|
||||
|
||||
/****************************
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
***************************/
|
||||
.WdateDiv .Wweek {
|
||||
text-align:center;
|
||||
background:#DAF3F5;
|
||||
border-right:#BDEBEE 1px solid;
|
||||
}
|
||||
/****************************
|
||||
* <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
***************************/
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TR */
|
||||
.WdateDiv .MTitle{
|
||||
color:#233D6D;
|
||||
background:#DFECFB url(glass-bg.gif) repeat-x scroll left top;
|
||||
color:#233D6D;
|
||||
cursor:default;
|
||||
font-size:10px;
|
||||
padding-top:2px;
|
||||
}
|
||||
.WdateDiv .MTitle td{
|
||||
border-bottom:1px solid #A3BAD9;
|
||||
}
|
||||
.WdateDiv .WdayTable2{
|
||||
border-collapse:collapse;
|
||||
border:black 1px solid;
|
||||
}
|
||||
.WdateDiv .WdayTable2 table{
|
||||
border:0;
|
||||
}
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TABLE */
|
||||
.WdateDiv .WdayTable{
|
||||
line-height:20px;
|
||||
color:black;
|
||||
}
|
||||
.WdateDiv .WdayTable td{
|
||||
text-align:center;
|
||||
}
|
||||
/* <20><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD>ʽ TD */
|
||||
.WdateDiv .Wday{
|
||||
cursor:pointer;
|
||||
}
|
||||
/* <20><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>mouseover<65><72>ʽ TD */
|
||||
.WdateDiv .WdayOn{
|
||||
cursor:pointer;
|
||||
background-color:#B3CEEF;
|
||||
}
|
||||
/* <20><>ĩ<EFBFBD><C4A9><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD>ʽ TD */
|
||||
.WdateDiv .Wwday{
|
||||
cursor:pointer;
|
||||
color:#ab1e1e;
|
||||
}
|
||||
/* <20><>ĩ<EFBFBD><C4A9><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>mouseover<65><72>ʽ TD */
|
||||
.WdateDiv .WwdayOn{
|
||||
cursor:pointer;
|
||||
background-color:#B3CEEF;
|
||||
}
|
||||
.WdateDiv .Wtoday{
|
||||
cursor:pointer;
|
||||
color:red;
|
||||
}
|
||||
.WdateDiv .Wselday{
|
||||
background-color:#B3CEEF;
|
||||
}
|
||||
.WdateDiv .WspecialDay{
|
||||
background-color:#66F4DF;
|
||||
}
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>·ݵ<C2B7><DDB5><EFBFBD><EFBFBD><EFBFBD> */
|
||||
.WdateDiv .WotherDay{
|
||||
cursor:pointer;
|
||||
color:#AAAAAA;
|
||||
}
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>·ݵ<C2B7><DDB5><EFBFBD><EFBFBD><EFBFBD>mouseover<65><72>ʽ */
|
||||
.WdateDiv .WotherDayOn{
|
||||
cursor:pointer;
|
||||
background-color:#B3CEEF;
|
||||
}
|
||||
/* <20><>Ч<EFBFBD><D0A7><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>ʽ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD>ʽ,<2C><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
.WdateDiv .WinvalidDay{
|
||||
color:#aaa;
|
||||
}
|
||||
|
||||
/****************************
|
||||
* ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
***************************/
|
||||
/* ʱ<><CAB1><EFBFBD><EFBFBD> DIV */
|
||||
.WdateDiv #dpTime{
|
||||
width:120px;
|
||||
text-align:left;
|
||||
margin-left:32px;
|
||||
height:20px;
|
||||
line-height:20px;
|
||||
padding-top:1px;
|
||||
}
|
||||
/* ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPAN */
|
||||
.WdateDiv #dpTime #dpTimeStr{
|
||||
margin-left:1px;
|
||||
color:#233D6D;
|
||||
}
|
||||
/* ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> INPUT */
|
||||
.WdateDiv #dpTime input{
|
||||
height:16px;
|
||||
width:18px;
|
||||
text-align:center;
|
||||
color:#333;
|
||||
border:#A3BAD9 1px solid;
|
||||
}
|
||||
/* ʱ<><CAB1> ʱ INPUT */
|
||||
.WdateDiv #dpTime .tB{
|
||||
border-right:0px;
|
||||
}
|
||||
/* ʱ<><CAB1> <20>ֺͼ<D6BA><CDBC><EFBFBD><EFBFBD><EFBFBD> ':' INPUT */
|
||||
.WdateDiv #dpTime .tE{
|
||||
border-left:0;
|
||||
border-right:0;
|
||||
}
|
||||
/* ʱ<><CAB1> <20><> INPUT */
|
||||
.WdateDiv #dpTime .tm{
|
||||
width:7px;
|
||||
border-left:0;
|
||||
border-right:0;
|
||||
}
|
||||
/* ʱ<><CAB1><EFBFBD>ұߵ<D2B1><DFB5><EFBFBD><EFBFBD>ϰ<EFBFBD>ť BUTTON */
|
||||
.WdateDiv #dpTime #dpTimeUp{
|
||||
height:8px;
|
||||
width:13px;
|
||||
border:0px;
|
||||
background:url(img.gif) no-repeat -32px -16px;
|
||||
cursor:pointer;
|
||||
margin-bottom:0;
|
||||
padding-bottom:0;
|
||||
}
|
||||
/* ʱ<><CAB1><EFBFBD>ұߵ<D2B1><DFB5><EFBFBD><EFBFBD>°<EFBFBD>ť BUTTON */
|
||||
.WdateDiv #dpTime #dpTimeDown{
|
||||
height:8px;
|
||||
width:13px;
|
||||
border:0px;
|
||||
background:url(img.gif) no-repeat -48px -16px;
|
||||
cursor:pointer;
|
||||
margin-top:0;
|
||||
padding-top:0;
|
||||
}
|
||||
/****************************
|
||||
* <20><><EFBFBD><EFBFBD>
|
||||
***************************/
|
||||
.WdateDiv #dpQS {
|
||||
float:left;
|
||||
margin-left:3px;
|
||||
margin-top:9px;
|
||||
background:url(dateselect.gif) no-repeat;
|
||||
width:20px;
|
||||
height:20px;
|
||||
cursor:pointer;
|
||||
}
|
||||
.WdateDiv #dpControl {
|
||||
text-align:right;
|
||||
margin-top:3px;
|
||||
background:#DFECFB url(glass-bg.gif) repeat-x scroll left top;
|
||||
border-top:1px solid #A3BAD9;
|
||||
padding:4px;
|
||||
}
|
||||
.WdateDiv .dpButton{
|
||||
width:44px;
|
||||
height:22px;
|
||||
background:#083772 none repeat scroll 0 0;
|
||||
border-color:#3366CC #000055 #000055 #3366CC;
|
||||
border-style:solid;
|
||||
border-width:1px;
|
||||
color:white;
|
||||
cursor:pointer;
|
||||
|
||||
}
|
After Width: | Height: | Size: 190 B |
After Width: | Height: | Size: 873 B |
After Width: | Height: | Size: 1.1 KiB |
BIN
vue3-element-admin-thin/public/vender/date97/skin/ext/img.gif
Normal file
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 870 B |
After Width: | Height: | Size: 113 B |
After Width: | Height: | Size: 871 B |
After Width: | Height: | Size: 113 B |
After Width: | Height: | Size: 307 B |
@ -0,0 +1,256 @@
|
||||
/*
|
||||
* My97 DatePicker 4.8 Skin:whyGreen
|
||||
*/
|
||||
.WdateDiv{
|
||||
width:180px;
|
||||
background-color:#fff;
|
||||
border:#C5E1E4 1px solid;
|
||||
padding:2px;
|
||||
}
|
||||
|
||||
.WdateDiv2{
|
||||
width:360px;
|
||||
}
|
||||
.WdateDiv *{font-size:9pt;}
|
||||
|
||||
.WdateDiv .NavImg a{
|
||||
cursor:pointer;
|
||||
display:block;
|
||||
width:16px;
|
||||
height:16px;
|
||||
margin-top:1px;
|
||||
}
|
||||
|
||||
.WdateDiv .NavImgll a{
|
||||
float:left;
|
||||
background:url(img.gif) no-repeat;
|
||||
}
|
||||
.WdateDiv .NavImgl a{
|
||||
float:left;
|
||||
background:url(img.gif) no-repeat -16px 0px;
|
||||
}
|
||||
.WdateDiv .NavImgr a{
|
||||
float:right;
|
||||
background:url(img.gif) no-repeat -32px 0px;
|
||||
}
|
||||
.WdateDiv .NavImgrr a{
|
||||
float:right;
|
||||
background:url(img.gif) no-repeat -48px 0px;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTitle{
|
||||
height:24px;
|
||||
padding:1px;
|
||||
border:#c5d9e8 1px solid;
|
||||
background:url(bg.jpg);
|
||||
margin-bottom:2px;
|
||||
}
|
||||
|
||||
.WdateDiv .yminput{
|
||||
margin-top:2px;
|
||||
text-align:center;
|
||||
border:0px;
|
||||
height:20px;
|
||||
width:50px;
|
||||
color:#034c50;
|
||||
background-color:transparent;
|
||||
cursor:pointer;
|
||||
}
|
||||
|
||||
.WdateDiv .yminputfocus{
|
||||
margin-top:2px;
|
||||
text-align:center;
|
||||
border:#939393 1px solid;
|
||||
font-weight:bold;
|
||||
color:#034c50;
|
||||
height:20px;
|
||||
width:50px;
|
||||
}
|
||||
|
||||
.WdateDiv .menuSel{
|
||||
z-index:1;
|
||||
position:absolute;
|
||||
background-color:#FFFFFF;
|
||||
border:#A3C6C8 1px solid;
|
||||
display:none;
|
||||
}
|
||||
|
||||
.WdateDiv .menu{
|
||||
cursor:pointer;
|
||||
background-color:#fff;
|
||||
color:#11777C;
|
||||
}
|
||||
|
||||
.WdateDiv .menuOn{
|
||||
cursor:pointer;
|
||||
background-color:#BEEBEE;
|
||||
}
|
||||
|
||||
.WdateDiv .invalidMenu{
|
||||
color:#aaa;
|
||||
}
|
||||
|
||||
.WdateDiv .YMenu{
|
||||
margin-top:20px;
|
||||
}
|
||||
|
||||
.WdateDiv .MMenu{
|
||||
margin-top:20px;
|
||||
*width:62px;
|
||||
}
|
||||
|
||||
.WdateDiv .hhMenu{
|
||||
margin-top:-90px;
|
||||
margin-left:26px;
|
||||
}
|
||||
|
||||
.WdateDiv .mmMenu{
|
||||
margin-top:-46px;
|
||||
margin-left:26px;
|
||||
}
|
||||
|
||||
.WdateDiv .ssMenu{
|
||||
margin-top:-24px;
|
||||
margin-left:26px;
|
||||
}
|
||||
|
||||
.WdateDiv .Wweek {
|
||||
text-align:center;
|
||||
background:#DAF3F5;
|
||||
border-right:#BDEBEE 1px solid;
|
||||
}
|
||||
|
||||
.WdateDiv .MTitle{
|
||||
color:#13777e;
|
||||
background-color:#bdebee;
|
||||
}
|
||||
.WdateDiv .WdayTable2{
|
||||
border-collapse:collapse;
|
||||
border:#BEE9F0 1px solid;
|
||||
}
|
||||
.WdateDiv .WdayTable2 table{
|
||||
border:0;
|
||||
}
|
||||
|
||||
.WdateDiv .WdayTable{
|
||||
line-height:20px;
|
||||
color:#13777e;
|
||||
background-color:#edfbfb;
|
||||
border:#BEE9F0 1px solid;
|
||||
}
|
||||
.WdateDiv .WdayTable td{
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.WdateDiv .Wday{
|
||||
cursor:pointer;
|
||||
}
|
||||
|
||||
.WdateDiv .WdayOn{
|
||||
cursor:pointer;
|
||||
background-color:#74d2d9 ;
|
||||
}
|
||||
|
||||
.WdateDiv .Wwday{
|
||||
cursor:pointer;
|
||||
color:#ab1e1e;
|
||||
}
|
||||
|
||||
.WdateDiv .WwdayOn{
|
||||
cursor:pointer;
|
||||
background-color:#74d2d9;
|
||||
}
|
||||
.WdateDiv .Wtoday{
|
||||
cursor:pointer;
|
||||
color:blue;
|
||||
}
|
||||
.WdateDiv .Wselday{
|
||||
background-color:#A7E2E7;
|
||||
}
|
||||
.WdateDiv .WspecialDay{
|
||||
background-color:#66F4DF;
|
||||
}
|
||||
|
||||
.WdateDiv .WotherDay{
|
||||
cursor:pointer;
|
||||
color:#0099CC;
|
||||
}
|
||||
|
||||
.WdateDiv .WotherDayOn{
|
||||
cursor:pointer;
|
||||
background-color:#C0EBEF;
|
||||
}
|
||||
|
||||
.WdateDiv .WinvalidDay{
|
||||
color:#aaa;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime{
|
||||
float:left;
|
||||
margin-top:3px;
|
||||
margin-right:30px;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime #dpTimeStr{
|
||||
margin-left:1px;
|
||||
color:#497F7F;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime input{
|
||||
height:20px;
|
||||
width:18px;
|
||||
text-align:center;
|
||||
color:#333;
|
||||
border:#61CAD0 1px solid;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime .tB{
|
||||
border-right:0px;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime .tE{
|
||||
border-left:0;
|
||||
border-right:0;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime .tm{
|
||||
width:7px;
|
||||
border-left:0;
|
||||
border-right:0;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime #dpTimeUp{
|
||||
height:10px;
|
||||
width:13px;
|
||||
border:0px;
|
||||
background:url(img.gif) no-repeat -32px -16px;
|
||||
}
|
||||
|
||||
.WdateDiv #dpTime #dpTimeDown{
|
||||
height:10px;
|
||||
width:13px;
|
||||
border:0px;
|
||||
background:url(img.gif) no-repeat -48px -16px;
|
||||
}
|
||||
|
||||
.WdateDiv #dpQS {
|
||||
float:left;
|
||||
margin-right:3px;
|
||||
margin-top:3px;
|
||||
background:url(img.gif) no-repeat 0px -16px;
|
||||
width:20px;
|
||||
height:20px;
|
||||
cursor:pointer;
|
||||
}
|
||||
.WdateDiv #dpControl {
|
||||
text-align:right;
|
||||
margin-top:3px;
|
||||
}
|
||||
.WdateDiv .dpButton{
|
||||
height:20px;
|
||||
width:45px;
|
||||
margin-top:2px;
|
||||
border:#38B1B9 1px solid;
|
||||
background-color:#CFEBEE;
|
||||
color:#08575B;
|
||||
}
|
After Width: | Height: | Size: 1.6 KiB |
1627
vue3-element-admin-thin/public/vender/diff.js
Normal file
31187
vue3-element-admin-thin/public/vender/fabric.js
Normal file
BIN
vue3-element-admin-thin/public/vender/fonts/mui.ttf
Normal file
190
vue3-element-admin-thin/public/vender/jquery/jquery.base64.js
Normal file
@ -0,0 +1,190 @@
|
||||
/*jslint adsafe: false, bitwise: true, browser: true, cap: false, css: false,
|
||||
debug: false, devel: true, eqeqeq: true, es5: false, evil: false,
|
||||
forin: false, fragment: false, immed: true, laxbreak: false, newcap: true,
|
||||
nomen: false, on: false, onevar: true, passfail: false, plusplus: true,
|
||||
regexp: false, rhino: true, safe: false, strict: false, sub: false,
|
||||
undef: true, white: false, widget: false, windows: false */
|
||||
/*global jQuery: false, window: false */
|
||||
"use strict";
|
||||
|
||||
/*
|
||||
* Original code (c) 2010 Nick Galbreath
|
||||
* http://code.google.com/p/stringencoders/source/browse/#svn/trunk/javascript
|
||||
*
|
||||
* jQuery port (c) 2010 Carlo Zottmann
|
||||
* http://github.com/carlo/jquery-base64
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
* files (the "Software"), to deal in the Software without
|
||||
* restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* base64 encode/decode compatible with window.btoa/atob
|
||||
*
|
||||
* window.atob/btoa is a Firefox extension to convert binary data (the "b")
|
||||
* to base64 (ascii, the "a").
|
||||
*
|
||||
* It is also found in Safari and Chrome. It is not available in IE.
|
||||
*
|
||||
* if (!window.btoa) window.btoa = $.base64.encode
|
||||
* if (!window.atob) window.atob = $.base64.decode
|
||||
*
|
||||
* The original spec's for atob/btoa are a bit lacking
|
||||
* https://developer.mozilla.org/en/DOM/window.atob
|
||||
* https://developer.mozilla.org/en/DOM/window.btoa
|
||||
*
|
||||
* window.btoa and $.base64.encode takes a string where charCodeAt is [0,255]
|
||||
* If any character is not [0,255], then an exception is thrown.
|
||||
*
|
||||
* window.atob and $.base64.decode take a base64-encoded string
|
||||
* If the input length is not a multiple of 4, or contains invalid characters
|
||||
* then an exception is thrown.
|
||||
*/
|
||||
|
||||
jQuery.base64 = ( function( $ ) {
|
||||
|
||||
var _PADCHAR = "=",
|
||||
_ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
|
||||
_VERSION = "1.0";
|
||||
|
||||
|
||||
function _getbyte64( s, i ) {
|
||||
// This is oddly fast, except on Chrome/V8.
|
||||
// Minimal or no improvement in performance by using a
|
||||
// object with properties mapping chars to value (eg. 'A': 0)
|
||||
|
||||
var idx = _ALPHA.indexOf( s.charAt( i ) );
|
||||
|
||||
if ( idx === -1 ) {
|
||||
throw "Cannot decode base64";
|
||||
}
|
||||
|
||||
return idx;
|
||||
}
|
||||
|
||||
|
||||
function _decode( s ) {
|
||||
var pads = 0,
|
||||
i,
|
||||
b10,
|
||||
imax = s.length,
|
||||
x = [];
|
||||
|
||||
s = String( s );
|
||||
|
||||
if ( imax === 0 ) {
|
||||
return s;
|
||||
}
|
||||
|
||||
if ( imax % 4 !== 0 ) {
|
||||
throw "Cannot decode base64";
|
||||
}
|
||||
|
||||
if ( s.charAt( imax - 1 ) === _PADCHAR ) {
|
||||
pads = 1;
|
||||
|
||||
if ( s.charAt( imax - 2 ) === _PADCHAR ) {
|
||||
pads = 2;
|
||||
}
|
||||
|
||||
// either way, we want to ignore this last block
|
||||
imax -= 4;
|
||||
}
|
||||
|
||||
for ( i = 0; i < imax; i += 4 ) {
|
||||
b10 = ( _getbyte64( s, i ) << 18 ) | ( _getbyte64( s, i + 1 ) << 12 ) | ( _getbyte64( s, i + 2 ) << 6 ) | _getbyte64( s, i + 3 );
|
||||
x.push( String.fromCharCode( b10 >> 16, ( b10 >> 8 ) & 0xff, b10 & 0xff ) );
|
||||
}
|
||||
|
||||
switch ( pads ) {
|
||||
case 1:
|
||||
b10 = ( _getbyte64( s, i ) << 18 ) | ( _getbyte64( s, i + 1 ) << 12 ) | ( _getbyte64( s, i + 2 ) << 6 );
|
||||
x.push( String.fromCharCode( b10 >> 16, ( b10 >> 8 ) & 0xff ) );
|
||||
break;
|
||||
|
||||
case 2:
|
||||
b10 = ( _getbyte64( s, i ) << 18) | ( _getbyte64( s, i + 1 ) << 12 );
|
||||
x.push( String.fromCharCode( b10 >> 16 ) );
|
||||
break;
|
||||
}
|
||||
|
||||
return x.join( "" );
|
||||
}
|
||||
|
||||
|
||||
function _getbyte( s, i ) {
|
||||
var x = s.charCodeAt( i );
|
||||
|
||||
if ( x > 255 ) {
|
||||
throw "INVALID_CHARACTER_ERR: DOM Exception 5";
|
||||
}
|
||||
|
||||
return x;
|
||||
}
|
||||
|
||||
|
||||
function _encode( s ) {
|
||||
if ( arguments.length !== 1 ) {
|
||||
throw "SyntaxError: exactly one argument required";
|
||||
}
|
||||
|
||||
s = String( s );
|
||||
|
||||
var i,
|
||||
b10,
|
||||
x = [],
|
||||
imax = s.length - s.length % 3;
|
||||
|
||||
if ( s.length === 0 ) {
|
||||
return s;
|
||||
}
|
||||
|
||||
for ( i = 0; i < imax; i += 3 ) {
|
||||
b10 = ( _getbyte( s, i ) << 16 ) | ( _getbyte( s, i + 1 ) << 8 ) | _getbyte( s, i + 2 );
|
||||
x.push( _ALPHA.charAt( b10 >> 18 ) );
|
||||
x.push( _ALPHA.charAt( ( b10 >> 12 ) & 0x3F ) );
|
||||
x.push( _ALPHA.charAt( ( b10 >> 6 ) & 0x3f ) );
|
||||
x.push( _ALPHA.charAt( b10 & 0x3f ) );
|
||||
}
|
||||
|
||||
switch ( s.length - imax ) {
|
||||
case 1:
|
||||
b10 = _getbyte( s, i ) << 16;
|
||||
x.push( _ALPHA.charAt( b10 >> 18 ) + _ALPHA.charAt( ( b10 >> 12 ) & 0x3F ) + _PADCHAR + _PADCHAR );
|
||||
break;
|
||||
|
||||
case 2:
|
||||
b10 = ( _getbyte( s, i ) << 16 ) | ( _getbyte( s, i + 1 ) << 8 );
|
||||
x.push( _ALPHA.charAt( b10 >> 18 ) + _ALPHA.charAt( ( b10 >> 12 ) & 0x3F ) + _ALPHA.charAt( ( b10 >> 6 ) & 0x3f ) + _PADCHAR );
|
||||
break;
|
||||
}
|
||||
|
||||
return x.join( "" );
|
||||
}
|
||||
|
||||
|
||||
return {
|
||||
decode: _decode,
|
||||
encode: _encode,
|
||||
VERSION: _VERSION
|
||||
};
|
||||
|
||||
}( jQuery ) );
|
||||
|
10872
vue3-element-admin-thin/public/vender/jquery/jquery.js
vendored
Normal file
255
vue3-element-admin-thin/public/vender/jquery/jquery.print.js
Normal file
@ -0,0 +1,255 @@
|
||||
/* @license
|
||||
* jQuery.print, version 1.5.1
|
||||
* (c) Sathvik Ponangi, Doers' Guild
|
||||
* Licence: CC-By (http://creativecommons.org/licenses/by/3.0/)
|
||||
*--------------------------------------------------------------------------*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
// A nice closure for our definitions
|
||||
function getjQueryObject(string) {
|
||||
// Make string a vaild jQuery thing
|
||||
var jqObj = $("");
|
||||
try {
|
||||
jqObj = $(string)
|
||||
.clone();
|
||||
} catch (e) {
|
||||
jqObj = $("<span />")
|
||||
.html(string);
|
||||
}
|
||||
return jqObj;
|
||||
}
|
||||
|
||||
function printFrame(frameWindow, content, options) {
|
||||
// Print the selected window/iframe
|
||||
var def = $.Deferred();
|
||||
try {
|
||||
frameWindow = frameWindow.contentWindow || frameWindow.contentDocument || frameWindow;
|
||||
var wdoc = frameWindow.document || frameWindow.contentDocument || frameWindow;
|
||||
if(options.doctype) {
|
||||
wdoc.write(options.doctype);
|
||||
}
|
||||
wdoc.write(content);
|
||||
wdoc.close();
|
||||
var printed = false;
|
||||
var callPrint = function () {
|
||||
if(printed) {
|
||||
return;
|
||||
}
|
||||
// Fix for IE : Allow it to render the iframe
|
||||
frameWindow.focus();
|
||||
try {
|
||||
// Fix for IE11 - printng the whole page instead of the iframe content
|
||||
if (!frameWindow.document.execCommand('print', false, null)) {
|
||||
// document.execCommand returns false if it failed -http://stackoverflow.com/a/21336448/937891
|
||||
frameWindow.print();
|
||||
}
|
||||
// focus body as it is losing focus in iPad and content not getting printed
|
||||
$('body').focus();
|
||||
} catch (e) {
|
||||
frameWindow.print();
|
||||
}
|
||||
frameWindow.close();
|
||||
printed = true;
|
||||
def.resolve();
|
||||
}
|
||||
// Print once the frame window loads - seems to work for the new-window option but unreliable for the iframe
|
||||
$(frameWindow).on("load", callPrint);
|
||||
// Fallback to printing directly if the frame doesn't fire the load event for whatever reason
|
||||
setTimeout(callPrint, options.timeout);
|
||||
} catch (err) {
|
||||
def.reject(err);
|
||||
}
|
||||
return def;
|
||||
}
|
||||
|
||||
function printContentInIFrame(content, options) {
|
||||
var $iframe = $(options.iframe + "");
|
||||
var iframeCount = $iframe.length;
|
||||
if (iframeCount === 0) {
|
||||
// Create a new iFrame if none is given
|
||||
$iframe = $('<iframe height="0" width="0" border="0" wmode="Opaque"/>')
|
||||
.prependTo('body')
|
||||
.css({
|
||||
"position": "absolute",
|
||||
"top": -999,
|
||||
"left": -999
|
||||
});
|
||||
}
|
||||
var frameWindow = $iframe.get(0);
|
||||
return printFrame(frameWindow, content, options)
|
||||
.done(function () {
|
||||
// Success
|
||||
setTimeout(function () {
|
||||
// Wait for IE
|
||||
if (iframeCount === 0) {
|
||||
// Destroy the iframe if created here
|
||||
$iframe.remove();
|
||||
}
|
||||
}, 1000);
|
||||
})
|
||||
.fail(function (err) {
|
||||
// Use the pop-up method if iframe fails for some reason
|
||||
console.error("Failed to print from iframe", err);
|
||||
printContentInNewWindow(content, options);
|
||||
})
|
||||
.always(function () {
|
||||
try {
|
||||
options.deferred.resolve();
|
||||
} catch (err) {
|
||||
console.warn('Error notifying deferred', err);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function printContentInNewWindow(content, options) {
|
||||
// Open a new window and print selected content
|
||||
var frameWindow = window.open();
|
||||
return printFrame(frameWindow, content, options)
|
||||
.always(function () {
|
||||
try {
|
||||
options.deferred.resolve();
|
||||
} catch (err) {
|
||||
console.warn('Error notifying deferred', err);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function isNode(o) {
|
||||
/* http://stackoverflow.com/a/384380/937891 */
|
||||
return !!(typeof Node === "object" ? o instanceof Node : o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName === "string");
|
||||
}
|
||||
$.print = $.fn.print = function () {
|
||||
// Print a given set of elements
|
||||
var options, $this, self = this;
|
||||
// console.log("Printing", this, arguments);
|
||||
if (self instanceof $) {
|
||||
// Get the node if it is a jQuery object
|
||||
self = self.get(0);
|
||||
}
|
||||
if (isNode(self)) {
|
||||
// If `this` is a HTML element, i.e. for
|
||||
// $(selector).print()
|
||||
$this = $(self);
|
||||
if (arguments.length > 0) {
|
||||
options = arguments[0];
|
||||
}
|
||||
} else {
|
||||
if (arguments.length > 0) {
|
||||
// $.print(selector,options)
|
||||
$this = $(arguments[0]);
|
||||
if (isNode($this[0])) {
|
||||
if (arguments.length > 1) {
|
||||
options = arguments[1];
|
||||
}
|
||||
} else {
|
||||
// $.print(options)
|
||||
options = arguments[0];
|
||||
$this = $("html");
|
||||
}
|
||||
} else {
|
||||
// $.print()
|
||||
$this = $("html");
|
||||
}
|
||||
}
|
||||
// Default options
|
||||
var defaults = {
|
||||
globalStyles: true,
|
||||
mediaPrint: false,
|
||||
stylesheet: null,
|
||||
noPrintSelector: ".no-print",
|
||||
iframe: true,
|
||||
append: null,
|
||||
prepend: null,
|
||||
manuallyCopyFormValues: true,
|
||||
deferred: $.Deferred(),
|
||||
timeout: 750,
|
||||
title: null,
|
||||
doctype: '<!doctype html>'
|
||||
};
|
||||
// Merge with user-options
|
||||
options = $.extend({}, defaults, (options || {}));
|
||||
var $styles = $("");
|
||||
if (options.globalStyles) {
|
||||
// Apply the stlyes from the current sheet to the printed page
|
||||
$styles = $("style, link, meta, base, title");
|
||||
} else if (options.mediaPrint) {
|
||||
// Apply the media-print stylesheet
|
||||
$styles = $("link[media=print]");
|
||||
}
|
||||
if (options.stylesheet) {
|
||||
// Add a custom stylesheet if given
|
||||
$styles = $.merge($styles, $('<link rel="stylesheet" href="' + options.stylesheet + '">'));
|
||||
}
|
||||
// Create a copy of the element to print
|
||||
var copy = $this.clone();
|
||||
// Wrap it in a span to get the HTML markup string
|
||||
copy = $("<span/>")
|
||||
.append(copy);
|
||||
// Remove unwanted elements
|
||||
copy.find(options.noPrintSelector)
|
||||
.remove();
|
||||
// Add in the styles
|
||||
copy.append($styles.clone());
|
||||
// Update title
|
||||
if (options.title) {
|
||||
var title = $("title", copy);
|
||||
if (title.length === 0) {
|
||||
title = $("<title />");
|
||||
copy.append(title);
|
||||
}
|
||||
title.text(options.title);
|
||||
}
|
||||
// Appedned content
|
||||
copy.append(getjQueryObject(options.append));
|
||||
// Prepended content
|
||||
copy.prepend(getjQueryObject(options.prepend));
|
||||
if (options.manuallyCopyFormValues) {
|
||||
// Manually copy form values into the HTML for printing user-modified input fields
|
||||
// http://stackoverflow.com/a/26707753
|
||||
copy.find("input")
|
||||
.each(function () {
|
||||
var $field = $(this);
|
||||
if ($field.is("[type='radio']") || $field.is("[type='checkbox']")) {
|
||||
if ($field.prop("checked")) {
|
||||
$field.attr("checked", "checked");
|
||||
}
|
||||
} else {
|
||||
$field.attr("value", $field.val());
|
||||
}
|
||||
});
|
||||
copy.find("select").each(function () {
|
||||
var $field = $(this);
|
||||
$field.find(":selected").attr("selected", "selected");
|
||||
});
|
||||
copy.find("textarea").each(function () {
|
||||
// Fix for https://github.com/DoersGuild/jQuery.print/issues/18#issuecomment-96451589
|
||||
var $field = $(this);
|
||||
$field.text($field.val());
|
||||
});
|
||||
}
|
||||
// Get the HTML markup string
|
||||
var content = copy.html();
|
||||
// Notify with generated markup & cloned elements - useful for logging, etc
|
||||
try {
|
||||
options.deferred.notify('generated_markup', content, copy);
|
||||
} catch (err) {
|
||||
console.warn('Error notifying deferred', err);
|
||||
}
|
||||
// Destroy the copy
|
||||
copy.remove();
|
||||
if (options.iframe) {
|
||||
// Use an iframe for printing
|
||||
try {
|
||||
printContentInIFrame(content, options);
|
||||
} catch (e) {
|
||||
// Use the pop-up method if iframe fails for some reason
|
||||
console.error("Failed to print from iframe", e.stack, e.message);
|
||||
printContentInNewWindow(content, options);
|
||||
}
|
||||
} else {
|
||||
// Use a new window for printing
|
||||
printContentInNewWindow(content, options);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
})(jQuery);
|
1
vue3-element-admin-thin/public/vender/jquery/jquery.ztree.core.min.js
vendored
Normal file
1
vue3-element-admin-thin/public/vender/jquery/jquery.ztree.exedit.min.js
vendored
Normal file
1
vue3-element-admin-thin/public/vender/jquery/jquery.ztree.exhide.min.js
vendored
Normal file
After Width: | Height: | Size: 601 B |
After Width: | Height: | Size: 580 B |
After Width: | Height: | Size: 570 B |
After Width: | Height: | Size: 762 B |
After Width: | Height: | Size: 399 B |
After Width: | Height: | Size: 710 B |
After Width: | Height: | Size: 432 B |
After Width: | Height: | Size: 534 B |
After Width: | Height: | Size: 529 B |
After Width: | Height: | Size: 467 B |
After Width: | Height: | Size: 45 B |
After Width: | Height: | Size: 381 B |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 14 KiB |
@ -0,0 +1,97 @@
|
||||
/*-------------------------------------
|
||||
zTree Style
|
||||
|
||||
version: 3.5.19
|
||||
author: Hunter.z
|
||||
email: hunter.z@263.net
|
||||
website: http://code.google.com/p/jquerytree/
|
||||
|
||||
-------------------------------------*/
|
||||
|
||||
.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif}
|
||||
.ztree {margin:0; padding:5px; color:#333}
|
||||
.ztree li{padding:0; margin:0; list-style:none; line-height:14px; text-align:left; white-space:nowrap; outline:0}
|
||||
.ztree li ul{ margin:0; padding:0 0 0 18px}
|
||||
.ztree li ul.line{ background:url(./img/line_conn.gif) 0 0 repeat-y;}
|
||||
|
||||
.ztree li a {padding:1px 3px 0 0; margin:0; cursor:pointer; height:17px; color:#333; background-color: transparent;
|
||||
text-decoration:none; vertical-align:top; display: inline-block}
|
||||
.ztree li a:hover {text-decoration:underline}
|
||||
.ztree li a.curSelectedNode {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;}
|
||||
.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;}
|
||||
.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#316AC5; color:white; height:16px; border:1px #316AC5 solid;
|
||||
opacity:0.8; filter:alpha(opacity=80)}
|
||||
.ztree li a.tmpTargetNode_prev {}
|
||||
.ztree li a.tmpTargetNode_next {}
|
||||
.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0;
|
||||
font-size:12px; border:1px #7EC4CC solid; *border:0px}
|
||||
.ztree li span {line-height:16px; margin-right:2px}
|
||||
.ztree li span.button {line-height:0; margin:0; width:16px; height:16px; display: inline-block; vertical-align:middle;
|
||||
border:0 none; cursor: pointer;outline:none;
|
||||
background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
|
||||
background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")}
|
||||
|
||||
.ztree li span.button.chk {width:13px; height:13px; margin:0 3px 0 0; cursor: auto}
|
||||
.ztree li span.button.chk.checkbox_false_full {background-position:0 0}
|
||||
.ztree li span.button.chk.checkbox_false_full_focus {background-position:0 -14px}
|
||||
.ztree li span.button.chk.checkbox_false_part {background-position:0 -28px}
|
||||
.ztree li span.button.chk.checkbox_false_part_focus {background-position:0 -42px}
|
||||
.ztree li span.button.chk.checkbox_false_disable {background-position:0 -56px}
|
||||
.ztree li span.button.chk.checkbox_true_full {background-position:-14px 0}
|
||||
.ztree li span.button.chk.checkbox_true_full_focus {background-position:-14px -14px}
|
||||
.ztree li span.button.chk.checkbox_true_part {background-position:-14px -28px}
|
||||
.ztree li span.button.chk.checkbox_true_part_focus {background-position:-14px -42px}
|
||||
.ztree li span.button.chk.checkbox_true_disable {background-position:-14px -56px}
|
||||
.ztree li span.button.chk.radio_false_full {background-position:-28px 0}
|
||||
.ztree li span.button.chk.radio_false_full_focus {background-position:-28px -14px}
|
||||
.ztree li span.button.chk.radio_false_part {background-position:-28px -28px}
|
||||
.ztree li span.button.chk.radio_false_part_focus {background-position:-28px -42px}
|
||||
.ztree li span.button.chk.radio_false_disable {background-position:-28px -56px}
|
||||
.ztree li span.button.chk.radio_true_full {background-position:-42px 0}
|
||||
.ztree li span.button.chk.radio_true_full_focus {background-position:-42px -14px}
|
||||
.ztree li span.button.chk.radio_true_part {background-position:-42px -28px}
|
||||
.ztree li span.button.chk.radio_true_part_focus {background-position:-42px -42px}
|
||||
.ztree li span.button.chk.radio_true_disable {background-position:-42px -56px}
|
||||
|
||||
.ztree li span.button.switch {width:18px; height:18px}
|
||||
.ztree li span.button.root_open{background-position:-92px -54px}
|
||||
.ztree li span.button.root_close{background-position:-74px -54px}
|
||||
.ztree li span.button.roots_open{background-position:-92px 0}
|
||||
.ztree li span.button.roots_close{background-position:-74px 0}
|
||||
.ztree li span.button.center_open{background-position:-92px -18px}
|
||||
.ztree li span.button.center_close{background-position:-74px -18px}
|
||||
.ztree li span.button.bottom_open{background-position:-92px -36px}
|
||||
.ztree li span.button.bottom_close{background-position:-74px -36px}
|
||||
.ztree li span.button.noline_open{background-position:-92px -72px}
|
||||
.ztree li span.button.noline_close{background-position:-74px -72px}
|
||||
.ztree li span.button.root_docu{ background:none;}
|
||||
.ztree li span.button.roots_docu{background-position:-56px 0}
|
||||
.ztree li span.button.center_docu{background-position:-56px -18px}
|
||||
.ztree li span.button.bottom_docu{background-position:-56px -36px}
|
||||
.ztree li span.button.noline_docu{ background:none;}
|
||||
|
||||
.ztree li span.button.ico_open{margin-right:2px; background-position:-110px -16px; vertical-align:top; *vertical-align:middle}
|
||||
.ztree li span.button.ico_close{margin-right:2px; background-position:-110px 0; vertical-align:top; *vertical-align:middle}
|
||||
.ztree li span.button.ico_docu{margin-right:2px; background-position:-110px -32px; vertical-align:top; *vertical-align:middle}
|
||||
.ztree li span.button.edit {margin-right:2px; background-position:-110px -48px; vertical-align:top; *vertical-align:middle}
|
||||
.ztree li span.button.remove {margin-right:2px; background-position:-110px -64px; vertical-align:top; *vertical-align:middle}
|
||||
|
||||
.ztree li span.button.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}
|
||||
|
||||
ul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)}
|
||||
|
||||
span.tmpzTreeMove_arrow {width:16px; height:16px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;
|
||||
background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
|
||||
background-position:-110px -80px; background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")}
|
||||
|
||||
ul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)}
|
||||
.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}
|
||||
|
||||
/* level style*/
|
||||
/*.ztree li span.button.level0 {
|
||||
display:none;
|
||||
}
|
||||
.ztree li ul.level0 {
|
||||
padding:0;
|
||||
background:none;
|
||||
}*/
|
5
vue3-element-admin-thin/public/vender/mui/mui.min.css
vendored
Normal file
6
vue3-element-admin-thin/public/vender/mui/mui.min.js
vendored
Normal file
7
vue3-element-admin-thin/public/vender/mui/mui.picker.min.css
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
/**
|
||||
* 选择列表插件
|
||||
* varstion 2.0.0
|
||||
* by Houfeng
|
||||
* Houfeng@DCloud.io
|
||||
**/
|
||||
.mui-pciker-list li,.mui-picker,.mui-picker-inner{box-sizing:border-box;overflow:hidden}.mui-picker{background-color:#ddd;position:relative;height:200px;border:1px solid rgba(0,0,0,.1);-webkit-user-select:none;user-select:none}.mui-dtpicker,.mui-poppicker{left:0;background-color:#eee;box-shadow:0 -5px 7px 0 rgba(0,0,0,.1);-webkit-transition:.3s;width:100%}.mui-picker-inner{position:relative;width:100%;height:100%;-webkit-mask-box-image:-webkit-linear-gradient(bottom,transparent,transparent 5%,#fff 20%,#fff 80%,transparent 95%,transparent);-webkit-mask-box-image:linear-gradient(top,transparent,transparent 5%,#fff 20%,#fff 80%,transparent 95%,transparent)}.mui-pciker-list,.mui-pciker-rule{box-sizing:border-box;padding:0;margin:-18px 0 0;width:100%;height:36px;line-height:36px;position:absolute;left:0;top:50%}.mui-pciker-rule-bg{z-index:0}.mui-pciker-rule-ft{z-index:2;border-top:solid 1px rgba(0,0,0,.1);border-bottom:solid 1px rgba(0,0,0,.1)}.mui-pciker-list{z-index:1;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform:perspective(750pt) rotateY(0) rotateX(0);transform:perspective(750pt) rotateY(0) rotateX(0)}.mui-pciker-list li{width:100%;height:100%;position:absolute;text-align:center;vertical-align:middle;-webkit-backface-visibility:hidden;backface-visibility:hidden;font-size:1pc;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;color:#888;padding:0 8px;white-space:nowrap;-webkit-text-overflow:ellipsis;text-overflow:ellipsis;cursor:default;visibility:hidden}.mui-pciker-list li.highlight,.mui-pciker-list li.visible{visibility:visible}.mui-pciker-list li.highlight{color:#222}.mui-poppicker{position:fixed;z-index:999;border-top:solid 1px #ccc;bottom:0;-webkit-transform:translateY(300px)}.mui-poppicker.mui-active{-webkit-transform:translateY(0)}.mui-android-5-1 .mui-poppicker{bottom:-300px;-webkit-transition-property:bottom;-webkit-transform:none}.mui-android-5-1 .mui-poppicker.mui-active{bottom:0;-webkit-transition-property:bottom;-webkit-transform:none}.mui-poppicker-header{padding:6px;font-size:14px;color:#888}.mui-poppicker-header .mui-btn{font-size:9pt;padding:5px 10px}.mui-poppicker-btn-cancel{float:left}.mui-poppicker-btn-ok{float:right}.mui-poppicker-clear{clear:both;height:0;line-height:0;font-size:0;overflow:hidden}.mui-poppicker-body{position:relative;width:100%;height:200px;border-top:solid 1px #ddd}.mui-poppicker-body .mui-picker{width:100%;height:100%;margin:0;border:none;float:left}.mui-dtpicker{position:fixed;z-index:999999;border-top:solid 1px #ccc;bottom:0;-webkit-transform:translateY(300px)}.mui-dtpicker.mui-active{-webkit-transform:translateY(0)}.mui-dtpicker-active-for-page{overflow:hidden!important}.mui-android-5-1 .mui-dtpicker{bottom:-300px;-webkit-transition-property:bottom;-webkit-transform:none}.mui-android-5-1 .mui-dtpicker.mui-active{bottom:0;-webkit-transition-property:bottom;-webkit-transform:none}.mui-dtpicker-header{padding:6px;font-size:14px;color:#888}.mui-dtpicker-header button{font-size:9pt;padding:5px 10px}.mui-dtpicker-header button:last-child{float:right}.mui-dtpicker-body{position:relative;width:100%;height:200px}.mui-ios .mui-dtpicker-body{-webkit-perspective:75pc;perspective:75pc;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.mui-dtpicker-title h5{display:inline-block;width:20%;margin:0;padding:8px;text-align:center;border-top:solid 1px #ddd;background-color:#f0f0f0;border-bottom:solid 1px #ccc}[data-type=hour] [data-id=title-i],[data-type=hour] [data-id=picker-i],[data-type=month] [data-id=title-i],[data-type=month] [data-id=picker-d],[data-type=month] [data-id=title-d],[data-type=month] [data-id=picker-h],[data-type=month] [data-id=title-h],[data-type=month] [data-id=picker-i],[data-type=time] [data-id=picker-y],[data-type=time] [data-id=picker-m],[data-type=time] [data-id=picker-d],[data-type=time] [data-id=title-y],[data-type=time] [data-id=title-m],[data-type=time] [data-id=title-d],[data-type=date] [data-id=title-i],[data-type=date] [data-id=picker-h],[data-type=date] [data-id=title-h],[data-type=date] [data-id=picker-i]{display:none}.mui-dtpicker .mui-picker{width:20%;height:100%;margin:0;float:left;border:none}[data-type=hour] [data-id=picker-h],[data-type=hour] [data-id=title-h],[data-type=datetime] [data-id=picker-h],[data-type=datetime] [data-id=title-h]{border-left:dotted 1px #ccc}[data-type=datetime] .mui-picker,[data-type=time] .mui-dtpicker-title h5{width:20%}[data-type=date] .mui-dtpicker-title h5,[data-type=date] .mui-picker{width:33.3%}[data-type=hour] .mui-dtpicker-title h5,[data-type=hour] .mui-picker{width:25%}[data-type=month] .mui-dtpicker-title h5,[data-type=month] .mui-picker,[data-type=time] .mui-dtpicker-title h5,[data-type=time] .mui-picker{width:50%}
|