tweak ui
This commit is contained in:
		
							parent
							
								
									41ed9a1a72
								
							
						
					
					
						commit
						408142647c
					
				
					 6 changed files with 8 additions and 402 deletions
				
			
		|  | @ -1,28 +1,23 @@ | |||
| <template> | ||||
| <FormBase> | ||||
| 	<FormInfo warn>{{ $ts._accountDelete.mayTakeTime }}</FormInfo> | ||||
| 	<FormInfo>{{ $ts._accountDelete.sendEmail }}</FormInfo> | ||||
| 	<FormButton v-if="!$i.isDeleted" danger @click="deleteAccount">{{ $ts._accountDelete.requestAccountDelete }}</FormButton> | ||||
| <div class="_formRoot"> | ||||
| 	<FormInfo warn class="_formBlock">{{ $ts._accountDelete.mayTakeTime }}</FormInfo> | ||||
| 	<FormInfo class="_formBlock">{{ $ts._accountDelete.sendEmail }}</FormInfo> | ||||
| 	<FormButton v-if="!$i.isDeleted" danger class="_formBlock" @click="deleteAccount">{{ $ts._accountDelete.requestAccountDelete }}</FormButton> | ||||
| 	<FormButton v-else disabled>{{ $ts._accountDelete.inProgress }}</FormButton> | ||||
| </FormBase> | ||||
| </div> | ||||
| </template> | ||||
| 
 | ||||
| <script lang="ts"> | ||||
| import { defineAsyncComponent, defineComponent } from 'vue'; | ||||
| import FormInfo from '@/components/debobigego/info.vue'; | ||||
| import FormBase from '@/components/debobigego/base.vue'; | ||||
| import FormGroup from '@/components/debobigego/group.vue'; | ||||
| import FormButton from '@/components/debobigego/button.vue'; | ||||
| import FormInfo from '@/components/ui/info.vue'; | ||||
| import FormButton from '@/components/ui/button.vue'; | ||||
| import * as os from '@/os'; | ||||
| import { debug } from '@/config'; | ||||
| import { signout } from '@/account'; | ||||
| import * as symbols from '@/symbols'; | ||||
| 
 | ||||
| export default defineComponent({ | ||||
| 	components: { | ||||
| 		FormBase, | ||||
| 		FormButton, | ||||
| 		FormGroup, | ||||
| 		FormInfo, | ||||
| 	}, | ||||
| 
 | ||||
|  | @ -35,7 +30,6 @@ export default defineComponent({ | |||
| 				icon: 'fas fa-exclamation-triangle', | ||||
| 				bg: 'var(--bg)', | ||||
| 			}, | ||||
| 			debug, | ||||
| 		} | ||||
| 	}, | ||||
| 
 | ||||
|  |  | |||
|  | @ -218,32 +218,14 @@ export default defineComponent({ | |||
| 				case 'plugin/manage': return defineAsyncComponent(() => import('./plugin.manage.vue')); | ||||
| 				case 'import-export': return defineAsyncComponent(() => import('./import-export.vue')); | ||||
| 				case 'account-info': return defineAsyncComponent(() => import('./account-info.vue')); | ||||
| 				case 'registry': return defineAsyncComponent(() => import('./registry.vue')); | ||||
| 				case 'delete-account': return defineAsyncComponent(() => import('./delete-account.vue')); | ||||
| 			} | ||||
| 			if (page.value.startsWith('registry/keys/system/')) { | ||||
| 				return defineAsyncComponent(() => import('./registry.keys.vue')); | ||||
| 			} | ||||
| 			if (page.value.startsWith('registry/value/system/')) { | ||||
| 				return defineAsyncComponent(() => import('./registry.value.vue')); | ||||
| 			} | ||||
| 			return null; | ||||
| 		}); | ||||
| 
 | ||||
| 		watch(component, () => { | ||||
| 			pageProps.value = {}; | ||||
| 
 | ||||
| 			if (page.value) { | ||||
| 				if (page.value.startsWith('registry/keys/system/')) { | ||||
| 					pageProps.value.scope = page.value.replace('registry/keys/system/', '').split('/'); | ||||
| 				} | ||||
| 				if (page.value.startsWith('registry/value/system/')) { | ||||
| 					const path = page.value.replace('registry/value/system/', '').split('/'); | ||||
| 					pageProps.value.xKey = path.pop(); | ||||
| 					pageProps.value.scope = path; | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			nextTick(() => { | ||||
| 				scroll(el.value, { top: 0 }); | ||||
| 			}); | ||||
|  |  | |||
|  | @ -8,21 +8,6 @@ | |||
| 
 | ||||
| 	<FormLink to="/settings/account-info" class="_formBlock">{{ $ts.accountInfo }}</FormLink> | ||||
| 
 | ||||
| 	<FormSection> | ||||
| 		<template #label>{{ $ts.developer }}</template> | ||||
| 		<FormSwitch v-model="debug" @update:modelValue="changeDebug" class="_formBlock"> | ||||
| 			DEBUG MODE | ||||
| 		</FormSwitch> | ||||
| 		<template v-if="debug"> | ||||
| 			<FormButton @click="taskmanager">Task Manager</FormButton> | ||||
| 		</template> | ||||
| 	</FormSection> | ||||
| 
 | ||||
| 	<FormLink to="/settings/registry" class="_formBlock"><template #icon><i class="fas fa-cogs"></i></template>{{ $ts.registry }}</FormLink> | ||||
| 
 | ||||
| 	<FormLink to="/bios" behavior="browser" class="_formBlock"><template #icon><i class="fas fa-door-open"></i></template>BIOS</FormLink> | ||||
| 	<FormLink to="/cli" behavior="browser" class="_formBlock"><template #icon><i class="fas fa-door-open"></i></template>CLI</FormLink> | ||||
| 
 | ||||
| 	<FormLink to="/settings/delete-account" class="_formBlock"><template #icon><i class="fas fa-exclamation-triangle"></i></template>{{ $ts.closeAccount }}</FormLink> | ||||
| </div> | ||||
| </template> | ||||
|  | @ -30,10 +15,8 @@ | |||
| <script lang="ts"> | ||||
| import { defineAsyncComponent, defineComponent } from 'vue'; | ||||
| import FormSwitch from '@/components/form/switch.vue'; | ||||
| import FormSelect from '@/components/form/select.vue'; | ||||
| import FormSection from '@/components/form/section.vue'; | ||||
| import FormLink from '@/components/debobigego/link.vue'; | ||||
| import FormButton from '@/components/debobigego/button.vue'; | ||||
| import FormLink from '@/components/form/link.vue'; | ||||
| import * as os from '@/os'; | ||||
| import { debug } from '@/config'; | ||||
| import { defaultStore } from '@/store'; | ||||
|  | @ -42,10 +25,8 @@ import * as symbols from '@/symbols'; | |||
| 
 | ||||
| export default defineComponent({ | ||||
| 	components: { | ||||
| 		FormSelect, | ||||
| 		FormSection, | ||||
| 		FormSwitch, | ||||
| 		FormButton, | ||||
| 		FormLink, | ||||
| 	}, | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,114 +0,0 @@ | |||
| <template> | ||||
| <FormBase> | ||||
| 	<FormGroup> | ||||
| 		<FormKeyValueView> | ||||
| 			<template #key>{{ $ts._registry.domain }}</template> | ||||
| 			<template #value>{{ $ts.system }}</template> | ||||
| 		</FormKeyValueView> | ||||
| 		<FormKeyValueView> | ||||
| 			<template #key>{{ $ts._registry.scope }}</template> | ||||
| 			<template #value>{{ scope.join('/') }}</template> | ||||
| 		</FormKeyValueView> | ||||
| 	</FormGroup> | ||||
| 	 | ||||
| 	<FormGroup v-if="keys"> | ||||
| 		<template #label>{{ $ts._registry.keys }}</template> | ||||
| 		<FormLink v-for="key in keys" :to="`/settings/registry/value/system/${scope.join('/')}/${key[0]}`" class="_monospace">{{ key[0] }}<template #suffix>{{ key[1].toUpperCase() }}</template></FormLink> | ||||
| 	</FormGroup> | ||||
| 
 | ||||
| 	<FormButton primary @click="createKey">{{ $ts._registry.createKey }}</FormButton> | ||||
| </FormBase> | ||||
| </template> | ||||
| 
 | ||||
| <script lang="ts"> | ||||
| import { defineAsyncComponent, defineComponent } from 'vue'; | ||||
| import * as JSON5 from 'json5'; | ||||
| import FormSwitch from '@/components/form/switch.vue'; | ||||
| import FormSelect from '@/components/form/select.vue'; | ||||
| import FormLink from '@/components/debobigego/link.vue'; | ||||
| import FormBase from '@/components/debobigego/base.vue'; | ||||
| import FormGroup from '@/components/debobigego/group.vue'; | ||||
| import FormButton from '@/components/debobigego/button.vue'; | ||||
| import FormKeyValueView from '@/components/debobigego/key-value-view.vue'; | ||||
| import * as os from '@/os'; | ||||
| import * as symbols from '@/symbols'; | ||||
| 
 | ||||
| export default defineComponent({ | ||||
| 	components: { | ||||
| 		FormBase, | ||||
| 		FormSelect, | ||||
| 		FormSwitch, | ||||
| 		FormButton, | ||||
| 		FormLink, | ||||
| 		FormGroup, | ||||
| 		FormKeyValueView, | ||||
| 	}, | ||||
| 
 | ||||
| 	props: { | ||||
| 		scope: { | ||||
| 			required: true | ||||
| 		} | ||||
| 	}, | ||||
| 
 | ||||
| 	emits: ['info'], | ||||
| 	 | ||||
| 	data() { | ||||
| 		return { | ||||
| 			[symbols.PAGE_INFO]: { | ||||
| 				title: this.$ts.registry, | ||||
| 				icon: 'fas fa-cogs', | ||||
| 				bg: 'var(--bg)', | ||||
| 			}, | ||||
| 			keys: null, | ||||
| 		} | ||||
| 	}, | ||||
| 
 | ||||
| 	watch: { | ||||
| 		scope() { | ||||
| 			this.fetch(); | ||||
| 		} | ||||
| 	}, | ||||
| 
 | ||||
| 	mounted() { | ||||
| 		this.$emit('info', this[symbols.PAGE_INFO]); | ||||
| 		this.fetch(); | ||||
| 	}, | ||||
| 
 | ||||
| 	methods: { | ||||
| 		fetch() { | ||||
| 			os.api('i/registry/keys-with-type', { | ||||
| 				scope: this.scope | ||||
| 			}).then(keys => { | ||||
| 				this.keys = Object.entries(keys).sort((a, b) => a[0].localeCompare(b[0])); | ||||
| 			}); | ||||
| 		}, | ||||
| 
 | ||||
| 		async createKey() { | ||||
| 			const { canceled, result } = await os.form(this.$ts._registry.createKey, { | ||||
| 				key: { | ||||
| 					type: 'string', | ||||
| 					label: this.$ts._registry.key, | ||||
| 				}, | ||||
| 				value: { | ||||
| 					type: 'string', | ||||
| 					multiline: true, | ||||
| 					label: this.$ts.value, | ||||
| 				}, | ||||
| 				scope: { | ||||
| 					type: 'string', | ||||
| 					label: this.$ts._registry.scope, | ||||
| 					default: this.scope.join('/') | ||||
| 				} | ||||
| 			}); | ||||
| 			if (canceled) return; | ||||
| 			os.apiWithDialog('i/registry/set', { | ||||
| 				scope: result.scope.split('/'), | ||||
| 				key: result.key, | ||||
| 				value: JSON5.parse(result.value), | ||||
| 			}).then(() => { | ||||
| 				this.fetch(); | ||||
| 			}); | ||||
| 		} | ||||
| 	} | ||||
| }); | ||||
| </script> | ||||
|  | @ -1,147 +0,0 @@ | |||
| <template> | ||||
| <FormBase> | ||||
| 	<FormInfo warn>{{ $ts.editTheseSettingsMayBreakAccount }}</FormInfo> | ||||
| 
 | ||||
| 	<template v-if="value"> | ||||
| 		<FormGroup> | ||||
| 			<FormKeyValueView> | ||||
| 				<template #key>{{ $ts._registry.domain }}</template> | ||||
| 				<template #value>{{ $ts.system }}</template> | ||||
| 			</FormKeyValueView> | ||||
| 			<FormKeyValueView> | ||||
| 				<template #key>{{ $ts._registry.scope }}</template> | ||||
| 				<template #value>{{ scope.join('/') }}</template> | ||||
| 			</FormKeyValueView> | ||||
| 			<FormKeyValueView> | ||||
| 				<template #key>{{ $ts._registry.key }}</template> | ||||
| 				<template #value>{{ xKey }}</template> | ||||
| 			</FormKeyValueView> | ||||
| 		</FormGroup> | ||||
| 
 | ||||
| 		<FormGroup> | ||||
| 			<FormTextarea v-model="valueForEditor" tall class="_monospace" style="tab-size: 2;"> | ||||
| 				<span>{{ $ts.value }} (JSON)</span> | ||||
| 			</FormTextarea> | ||||
| 			<FormButton primary @click="save"><i class="fas fa-save"></i> {{ $ts.save }}</FormButton> | ||||
| 		</FormGroup> | ||||
| 
 | ||||
| 		<FormKeyValueView> | ||||
| 			<template #key>{{ $ts.updatedAt }}</template> | ||||
| 			<template #value><MkTime :time="value.updatedAt" mode="detail"/></template> | ||||
| 		</FormKeyValueView> | ||||
| 
 | ||||
| 		<FormButton danger @click="del"><i class="fas fa-trash"></i> {{ $ts.delete }}</FormButton> | ||||
| 	</template> | ||||
| </FormBase> | ||||
| </template> | ||||
| 
 | ||||
| <script lang="ts"> | ||||
| import { defineAsyncComponent, defineComponent } from 'vue'; | ||||
| import * as JSON5 from 'json5'; | ||||
| import FormInfo from '@/components/debobigego/info.vue'; | ||||
| import FormSwitch from '@/components/form/switch.vue'; | ||||
| import FormSelect from '@/components/form/select.vue'; | ||||
| import FormTextarea from '@/components/form/textarea.vue'; | ||||
| import FormBase from '@/components/debobigego/base.vue'; | ||||
| import FormGroup from '@/components/debobigego/group.vue'; | ||||
| import FormButton from '@/components/debobigego/button.vue'; | ||||
| import FormKeyValueView from '@/components/debobigego/key-value-view.vue'; | ||||
| import * as os from '@/os'; | ||||
| import * as symbols from '@/symbols'; | ||||
| 
 | ||||
| export default defineComponent({ | ||||
| 	components: { | ||||
| 		FormInfo, | ||||
| 		FormBase, | ||||
| 		FormSelect, | ||||
| 		FormSwitch, | ||||
| 		FormButton, | ||||
| 		FormTextarea, | ||||
| 		FormGroup, | ||||
| 		FormKeyValueView, | ||||
| 	}, | ||||
| 
 | ||||
| 	props: { | ||||
| 		scope: { | ||||
| 			required: true | ||||
| 		}, | ||||
| 		xKey: { | ||||
| 			required: true | ||||
| 		}, | ||||
| 	}, | ||||
| 
 | ||||
| 	emits: ['info'], | ||||
| 	 | ||||
| 	data() { | ||||
| 		return { | ||||
| 			[symbols.PAGE_INFO]: { | ||||
| 				title: this.$ts.registry, | ||||
| 				icon: 'fas fa-cogs', | ||||
| 				bg: 'var(--bg)', | ||||
| 			}, | ||||
| 			value: null, | ||||
| 			valueForEditor: null, | ||||
| 		} | ||||
| 	}, | ||||
| 
 | ||||
| 	watch: { | ||||
| 		key() { | ||||
| 			this.fetch(); | ||||
| 		}, | ||||
| 	}, | ||||
| 
 | ||||
| 	mounted() { | ||||
| 		this.$emit('info', this[symbols.PAGE_INFO]); | ||||
| 		this.fetch(); | ||||
| 	}, | ||||
| 
 | ||||
| 	methods: { | ||||
| 		fetch() { | ||||
| 			os.api('i/registry/get-detail', { | ||||
| 				scope: this.scope, | ||||
| 				key: this.xKey | ||||
| 			}).then(value => { | ||||
| 				this.value = value; | ||||
| 				this.valueForEditor = JSON5.stringify(this.value.value, null, '\t'); | ||||
| 			}); | ||||
| 		}, | ||||
| 
 | ||||
| 		save() { | ||||
| 			try { | ||||
| 				JSON5.parse(this.valueForEditor); | ||||
| 			} catch (e) { | ||||
| 				os.alert({ | ||||
| 					type: 'error', | ||||
| 					text: this.$ts.invalidValue | ||||
| 				}); | ||||
| 				return; | ||||
| 			} | ||||
| 
 | ||||
| 			os.confirm({ | ||||
| 				type: 'warning', | ||||
| 				text: this.$ts.saveConfirm, | ||||
| 			}).then(({ canceled }) => { | ||||
| 				if (canceled) return; | ||||
| 				os.apiWithDialog('i/registry/set', { | ||||
| 					scope: this.scope, | ||||
| 					key: this.xKey, | ||||
| 					value: JSON5.parse(this.valueForEditor) | ||||
| 				}); | ||||
| 			}); | ||||
| 		}, | ||||
| 
 | ||||
| 		del() { | ||||
| 			os.confirm({ | ||||
| 				type: 'warning', | ||||
| 				text: this.$ts.deleteConfirm, | ||||
| 			}).then(({ canceled }) => { | ||||
| 				if (canceled) return; | ||||
| 				os.apiWithDialog('i/registry/remove', { | ||||
| 					scope: this.scope, | ||||
| 					key: this.xKey | ||||
| 				}); | ||||
| 			}); | ||||
| 		} | ||||
| 	} | ||||
| }); | ||||
| </script> | ||||
|  | @ -1,90 +0,0 @@ | |||
| <template> | ||||
| <FormBase> | ||||
| 	<FormGroup v-if="scopes"> | ||||
| 		<template #label>{{ $ts.system }}</template> | ||||
| 		<FormLink v-for="scope in scopes" :to="`/settings/registry/keys/system/${scope.join('/')}`" class="_monospace">{{ scope.join('/') }}</FormLink> | ||||
| 	</FormGroup> | ||||
| 	<FormButton primary @click="createKey">{{ $ts._registry.createKey }}</FormButton> | ||||
| </FormBase> | ||||
| </template> | ||||
| 
 | ||||
| <script lang="ts"> | ||||
| import { defineAsyncComponent, defineComponent } from 'vue'; | ||||
| import * as JSON5 from 'json5'; | ||||
| import FormSwitch from '@/components/form/switch.vue'; | ||||
| import FormSelect from '@/components/form/select.vue'; | ||||
| import FormLink from '@/components/debobigego/link.vue'; | ||||
| import FormBase from '@/components/debobigego/base.vue'; | ||||
| import FormGroup from '@/components/debobigego/group.vue'; | ||||
| import FormButton from '@/components/debobigego/button.vue'; | ||||
| import FormKeyValueView from '@/components/debobigego/key-value-view.vue'; | ||||
| import * as os from '@/os'; | ||||
| import * as symbols from '@/symbols'; | ||||
| 
 | ||||
| export default defineComponent({ | ||||
| 	components: { | ||||
| 		FormBase, | ||||
| 		FormSelect, | ||||
| 		FormSwitch, | ||||
| 		FormButton, | ||||
| 		FormLink, | ||||
| 		FormGroup, | ||||
| 		FormKeyValueView, | ||||
| 	}, | ||||
| 
 | ||||
| 	emits: ['info'], | ||||
| 	 | ||||
| 	data() { | ||||
| 		return { | ||||
| 			[symbols.PAGE_INFO]: { | ||||
| 				title: this.$ts.registry, | ||||
| 				icon: 'fas fa-cogs', | ||||
| 				bg: 'var(--bg)', | ||||
| 			}, | ||||
| 			scopes: null, | ||||
| 		} | ||||
| 	}, | ||||
| 
 | ||||
| 	created() { | ||||
| 		this.fetch(); | ||||
| 	}, | ||||
| 
 | ||||
| 	mounted() { | ||||
| 		this.$emit('info', this[symbols.PAGE_INFO]); | ||||
| 	}, | ||||
| 
 | ||||
| 	methods: { | ||||
| 		fetch() { | ||||
| 			os.api('i/registry/scopes').then(scopes => { | ||||
| 				this.scopes = scopes.slice().sort((a, b) => a.join('/').localeCompare(b.join('/'))); | ||||
| 			}); | ||||
| 		}, | ||||
| 
 | ||||
| 		async createKey() { | ||||
| 			const { canceled, result } = await os.form(this.$ts._registry.createKey, { | ||||
| 				key: { | ||||
| 					type: 'string', | ||||
| 					label: this.$ts._registry.key, | ||||
| 				}, | ||||
| 				value: { | ||||
| 					type: 'string', | ||||
| 					multiline: true, | ||||
| 					label: this.$ts.value, | ||||
| 				}, | ||||
| 				scope: { | ||||
| 					type: 'string', | ||||
| 					label: this.$ts._registry.scope, | ||||
| 				} | ||||
| 			}); | ||||
| 			if (canceled) return; | ||||
| 			os.apiWithDialog('i/registry/set', { | ||||
| 				scope: result.scope.split('/'), | ||||
| 				key: result.key, | ||||
| 				value: JSON5.parse(result.value), | ||||
| 			}).then(() => { | ||||
| 				this.fetch(); | ||||
| 			}); | ||||
| 		} | ||||
| 	} | ||||
| }); | ||||
| </script> | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue