提交 40ffde1f 编写于 作者: B baiy 提交者: ninecents

base64 添加Url Safe 支持 #34

上级 52407cc2
{ {
"name": "c-tool", "name": "c-tool",
"version": "1.3.0", "version": "1.3.1",
"private": true, "private": true,
"scripts": { "scripts": {
"serve": "vue-cli-service serve --port 8081", "serve": "vue-cli-service serve --port 8081",
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
<template slot-scope="{ row }" slot="_value"> <template slot-scope="{ row }" slot="_value">
<div>{{ historyValue(row.value) }}}</div> <div>{{ historyValue(row.value) }}}</div>
</template> </template>
<template slot-scope="{ index,row }" slot="_op"> <template slot-scope="{ index }" slot="_op">
<Button type="primary" size="small" @click="historyView(index)">查看</Button> <Button type="primary" size="small" @click="historyView(index)">查看</Button>
<Button type="primary" style="margin-left: 5px" @click="historyLoad(index)" size="small">加载</Button> <Button type="primary" style="margin-left: 5px" @click="historyLoad(index)" size="small">加载</Button>
</template> </template>
...@@ -85,7 +85,7 @@ export default { ...@@ -85,7 +85,7 @@ export default {
{ {
title: '数据', title: '数据',
slot: '_value', slot: '_value',
ellipsis:true ellipsis:true,
}, },
{ {
title: '操作', title: '操作',
......
<template> <template>
<heightResize ignore :append="['.page-option-block']" @resize="resize"> <div>
<input-block bottom="0px" right="10px"> <Input v-model="current.input" :rows="7" type="textarea" placeholder="内容"></Input>
<autoHeightTextarea :height="height1" v-model="current.input" :placeholder="$t('base64_input')" /> <option-block>
<Upload slot="extra" action="#" :before-upload="handleUpload">
<Button size="small" type="primary" icon="ios-cloud-upload-outline">{{ $t('base64_upload_file') }}</Button>
</Upload>
</input-block>
<option-block class="page-option-block">
<FormItem> <FormItem>
<ButtonGroup> <ButtonGroup>
<Button type="primary" @click="handle('encode')">{{ $t('base64_encode') }}</Button> <Button type="primary" @click="handle('encode')">编码</Button>
<Button type="primary" @click="handle('decode')">{{ $t('base64_decode') }}</Button> <Button type="primary" @click="handle('decode')">解密</Button>
</ButtonGroup> </ButtonGroup>
</FormItem> </FormItem>
<FormItem> <FormItem>
<Checkbox v-model="current.isUriSafe">{{ $t('base64_url_safe') }}</Checkbox> <Checkbox v-model="current.isUriSafe">Url Safe</Checkbox>
</FormItem> </FormItem>
</option-block> </option-block>
<input-block right="10px"> <Input v-model="current.output" :rows="7" type="textarea" placeholder="结果"></Input>
<pasteClipboardFlie @on-paste-file="handleUpload"> </div>
<autoHeightTextarea :height="height2" :value="current.output" :placeholder="$t('base64_output')" />
</pasteClipboardFlie>
</input-block>
</heightResize>
</template> </template>
<script> <script>
import {Base64} from 'js-base64' import { Base64 } from 'js-base64'
import mimeType from 'mime-types'
import moment from "moment";
import pasteClipboardFlie from "./components/pasteClipboardFlie";
import heightResize from "./components/heightResize";
import autoHeightTextarea from "./components/autoHeightTextarea";
export default { export default {
components: { created () {
pasteClipboardFlie, this.current = Object.assign(this.current, this.$getToolData('input'))
heightResize,
autoHeightTextarea
},
created() {
this.$initToolData('input')
}, },
methods: { methods: {
handle(v) { handle (v) {
if (this.current.input) { if (this.current.input) {
if (v === "encode") { if (v === "encode"){
this.current.output = Base64.encode(this.current.input, this.current.isUriSafe) this.current.output = Base64.encode(this.current.input,this.current.isUriSafe)
} else { }
if (this.current.input.trim().indexOf('data:') === 0) { else{
// 文件 base64 内容 this.current.output = Base64.decode(this.current.input)
this.exportFile();
}
else{
this.current.output = Base64.decode(this.current.input)
this.$clipboardCopy(this.current.output)
}
} }
this.current.operation = v this.current.operation = v
this.$clipboardCopy(this.current.output)
this.$saveToolData(this.current) this.$saveToolData(this.current)
} }
}, },
handleUpload(file) {
let r = new FileReader()
r.readAsDataURL(file)
r.onloadend = () => {
this.current.output = r.result
}
return false
},
exportFile() {
let arr = this.current.input.split(','), mime = arr[0].match(/:(.*?);/)[1];
let objectUrl = window.URL.createObjectURL(new Blob([Base64.toUint8Array(arr[1])], {type: mime}));
let aEle = document.createElement("a");
aEle.download = `ctool-base64-decode-${moment().unix()}` + (mimeType.extension(mime) ? `.${mimeType.extension(mime)}` : "");
aEle.href = objectUrl;
aEle.click();
aEle.remove();
window.URL.revokeObjectURL(objectUrl);
},
resize(height){
this.height1 = Math.min(160,Math.ceil(height/2))
this.height2 = height - this.height1
}
}, },
data() { data () {
return { return {
current: { current: {
input: '', input: '',
...@@ -90,9 +45,7 @@ export default { ...@@ -90,9 +45,7 @@ export default {
operation: '', operation: '',
isUriSafe: false, isUriSafe: false,
}, },
height1:100,
height2:100
} }
}, },
} }
</script> </script>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册