add copy
parent
895ba56ed7
commit
13dbe2c784
|
@ -3856,6 +3856,16 @@
|
||||||
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
|
||||||
"integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="
|
"integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="
|
||||||
},
|
},
|
||||||
|
"clipboard": {
|
||||||
|
"version": "2.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.8.tgz",
|
||||||
|
"integrity": "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==",
|
||||||
|
"requires": {
|
||||||
|
"good-listener": "^1.2.2",
|
||||||
|
"select": "^1.1.2",
|
||||||
|
"tiny-emitter": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"cliui": {
|
"cliui": {
|
||||||
"version": "7.0.4",
|
"version": "7.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
|
||||||
|
@ -4032,6 +4042,14 @@
|
||||||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
||||||
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
||||||
},
|
},
|
||||||
|
"copy-to-clipboard": {
|
||||||
|
"version": "3.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz",
|
||||||
|
"integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==",
|
||||||
|
"requires": {
|
||||||
|
"toggle-selection": "^1.0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"core-js": {
|
"core-js": {
|
||||||
"version": "3.20.0",
|
"version": "3.20.0",
|
||||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.0.tgz",
|
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.0.tgz",
|
||||||
|
@ -4475,6 +4493,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
|
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
|
||||||
},
|
},
|
||||||
|
"delegate": {
|
||||||
|
"version": "3.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
|
||||||
|
"integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
|
||||||
|
},
|
||||||
"depd": {
|
"depd": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
|
||||||
|
@ -5920,6 +5943,14 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"good-listener": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
|
||||||
|
"integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
|
||||||
|
"requires": {
|
||||||
|
"delegate": "^3.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"graceful-fs": {
|
"graceful-fs": {
|
||||||
"version": "4.2.8",
|
"version": "4.2.8",
|
||||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
|
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
|
||||||
|
@ -9731,6 +9762,15 @@
|
||||||
"whatwg-fetch": "^3.6.2"
|
"whatwg-fetch": "^3.6.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"react-copy-to-clipboard": {
|
||||||
|
"version": "5.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.4.tgz",
|
||||||
|
"integrity": "sha512-IeVAiNVKjSPeGax/Gmkqfa/+PuMTBhutEvFUaMQLwE2tS0EXrAdgOpWDX26bWTXF3HrioorR7lr08NqeYUWQCQ==",
|
||||||
|
"requires": {
|
||||||
|
"copy-to-clipboard": "^3",
|
||||||
|
"prop-types": "^15.5.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"react-dev-utils": {
|
"react-dev-utils": {
|
||||||
"version": "12.0.0",
|
"version": "12.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.0.tgz",
|
||||||
|
@ -10311,6 +10351,11 @@
|
||||||
"ajv-keywords": "^3.5.2"
|
"ajv-keywords": "^3.5.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"select": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
|
||||||
|
"integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
|
||||||
|
},
|
||||||
"select-hose": {
|
"select-hose": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
|
||||||
|
@ -11021,6 +11066,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
|
||||||
"integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q="
|
"integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q="
|
||||||
},
|
},
|
||||||
|
"tiny-emitter": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
|
||||||
|
},
|
||||||
"tmp": {
|
"tmp": {
|
||||||
"version": "0.2.1",
|
"version": "0.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
|
||||||
|
@ -11047,6 +11097,11 @@
|
||||||
"is-number": "^7.0.0"
|
"is-number": "^7.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"toggle-selection": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
|
||||||
|
"integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI="
|
||||||
|
},
|
||||||
"toidentifier": {
|
"toidentifier": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
"axios": "^0.24.0",
|
"axios": "^0.24.0",
|
||||||
"qrcode": "^1.5.0",
|
"qrcode": "^1.5.0",
|
||||||
"react": "^17.0.2",
|
"react": "^17.0.2",
|
||||||
|
"react-copy-to-clipboard": "^5.0.4",
|
||||||
"react-dom": "^17.0.2",
|
"react-dom": "^17.0.2",
|
||||||
"react-scripts": "5.0.0",
|
"react-scripts": "5.0.0",
|
||||||
"web-vitals": "^2.1.2"
|
"web-vitals": "^2.1.2"
|
||||||
|
|
10
src/App.js
10
src/App.js
|
@ -5,8 +5,8 @@ import waterMarkPng from './images/water-mark.png'
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import SettingFrame from './Components/settingsFrame';
|
import SettingFrame from './Components/settingsFrame';
|
||||||
import QrCode from 'qrcode'
|
import QrCode from 'qrcode'
|
||||||
|
import { BaseUrl } from './constants';
|
||||||
|
|
||||||
var baseUrl = "http://123.56.161.61:1157/"
|
|
||||||
var project = "topwar";
|
var project = "topwar";
|
||||||
class App extends React.Component {
|
class App extends React.Component {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@ -28,7 +28,7 @@ class App extends React.Component {
|
||||||
|
|
||||||
refreshQrCode() {
|
refreshQrCode() {
|
||||||
var {selectedProject} = this.state;
|
var {selectedProject} = this.state;
|
||||||
var rawUrl = encodeURI(baseUrl + selectedProject.HtmlUrl)
|
var rawUrl = encodeURI(BaseUrl + selectedProject.HtmlUrl)
|
||||||
selectedProject.HtmlUrl && QrCode.toDataURL([{ data: rawUrl, mode: 'byte'}], { width: 120 })
|
selectedProject.HtmlUrl && QrCode.toDataURL([{ data: rawUrl, mode: 'byte'}], { width: 120 })
|
||||||
.then((dataUrl) => {
|
.then((dataUrl) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
|
@ -71,8 +71,8 @@ class App extends React.Component {
|
||||||
|
|
||||||
async fetchProjects() {
|
async fetchProjects() {
|
||||||
var url = project
|
var url = project
|
||||||
? `http://123.56.161.61:1157/home/GetServerProjectJsonData?project=${project}`
|
? `${BaseUrl}home/GetServerProjectJsonData?project=${project}`
|
||||||
: 'http://123.56.161.61:1157/home/GetServerJsonData';
|
: `${BaseUrl}home/GetServerJsonData`;
|
||||||
var response = await fetch(url, {
|
var response = await fetch(url, {
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json'
|
'Content-Type': 'application/json'
|
||||||
|
@ -104,7 +104,7 @@ class App extends React.Component {
|
||||||
fileName: this.state.selectedProject.Name,
|
fileName: this.state.selectedProject.Name,
|
||||||
};
|
};
|
||||||
var query = Object.keys(body).map(k => `${k}=${body[k]}`).join('&')
|
var query = Object.keys(body).map(k => `${k}=${body[k]}`).join('&')
|
||||||
fetch(`http://123.56.161.61:1157/home/UpdateFileContentNew?${query}`)
|
fetch(`${BaseUrl}home/UpdateFileContentNew?${query}`)
|
||||||
.then(() => this.refreshProject())
|
.then(() => this.refreshProject())
|
||||||
.catch(e => console.log('update fails', e));
|
.catch(e => console.log('update fails', e));
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,12 @@ import iphoneHPng from '../../images/iphone-h.png'
|
||||||
import iphoneVPng from '../../images/iphone-v.png'
|
import iphoneVPng from '../../images/iphone-v.png'
|
||||||
import ipadHPng from '../../images/iPad-h.png'
|
import ipadHPng from '../../images/iPad-h.png'
|
||||||
import ipadVPng from '../../images/iPad-v.png'
|
import ipadVPng from '../../images/iPad-v.png'
|
||||||
|
import copyPng from '../../images/copy.png'
|
||||||
import refreshButtonPng from '../../images/refresh-button.png'
|
import refreshButtonPng from '../../images/refresh-button.png'
|
||||||
import { useEffect, useState } from 'react'
|
import {CopyToClipboard} from 'react-copy-to-clipboard';
|
||||||
|
import React, { createRef, useEffect, useState } from 'react'
|
||||||
|
import { BaseUrl } from '../../constants'
|
||||||
|
import { Alert, Snackbar } from '@mui/material'
|
||||||
|
|
||||||
var baseUrl = "http://123.56.161.61:1157/"
|
var baseUrl = "http://123.56.161.61:1157/"
|
||||||
var configMap = {
|
var configMap = {
|
||||||
|
@ -49,6 +53,7 @@ var configMap = {
|
||||||
function DeviceFrame(props) {
|
function DeviceFrame(props) {
|
||||||
var [config, setConfig] = useState({})
|
var [config, setConfig] = useState({})
|
||||||
var [cacheKey, setCacheKey] = useState(new Date().getTime());
|
var [cacheKey, setCacheKey] = useState(new Date().getTime());
|
||||||
|
var [openPopup, setOpenPopup] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setConfig(configMap[props.device])
|
setConfig(configMap[props.device])
|
||||||
|
@ -67,10 +72,22 @@ function DeviceFrame(props) {
|
||||||
<img src={refreshButtonPng} alt='refresh' onClick={() => refresh()} className='refreshButton'/>
|
<img src={refreshButtonPng} alt='refresh' onClick={() => refresh()} className='refreshButton'/>
|
||||||
{ props.qrDataUrl &&
|
{ props.qrDataUrl &&
|
||||||
<div className='qrCode'>
|
<div className='qrCode'>
|
||||||
<p style={{ margin: '0' }}>扫一扫,手机预览</p>
|
<p style={{ margin: '0' }}>扫一扫,手机预览
|
||||||
|
<CopyToClipboard text={BaseUrl + props.htmlUrl} onCopy={() => setOpenPopup(true)}>
|
||||||
|
<img style={{ cursor: 'pointer', width: '20px', height: '20px' }} src={copyPng} alt='复制链接'/>
|
||||||
|
</CopyToClipboard>
|
||||||
|
</p>
|
||||||
<img src={props.qrDataUrl} alt='qr code'/>
|
<img src={props.qrDataUrl} alt='qr code'/>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
<Snackbar open={openPopup} onClose={() => setOpenPopup(false)} autoHideDuration={500} anchorOrigin={{
|
||||||
|
vertical: 'top',
|
||||||
|
horizontal: 'right'
|
||||||
|
}}>
|
||||||
|
<Alert severity="success" sx={{ width: '100%' }}>
|
||||||
|
链接复制成功
|
||||||
|
</Alert>
|
||||||
|
</Snackbar>
|
||||||
<div>
|
<div>
|
||||||
<img src={config.bkg} alt='background'/>
|
<img src={config.bkg} alt='background'/>
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import { Alert, Grid, List, ListItem, Snackbar } from '@mui/material';
|
import { Alert, Grid, List, ListItem, Snackbar } from '@mui/material';
|
||||||
import { useEffect, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import './index.css'
|
import './index.css'
|
||||||
import settingCardPng from '../../images/setting-card.png';
|
|
||||||
import checkPng from '../../images/check.png';
|
import checkPng from '../../images/check.png';
|
||||||
import generateButtonPng from '../../images/generate-button.png';
|
import generateButtonPng from '../../images/generate-button.png';
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
export var BaseUrl = "http://123.56.161.61:1157/";
|
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
Loading…
Reference in New Issue