diff --git a/package-lock.json b/package-lock.json index f3f49f1..c7d0a6f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1142,6 +1142,11 @@ "@hapi/hoek": "^8.3.0" } }, + "@icons/material": { + "version": "0.2.4", + "resolved": "https://registry.npm.taobao.org/@icons/material/download/@icons/material-0.2.4.tgz", + "integrity": "sha1-6QyfcXaLNzbnbX3WeD/Gwq+oi8g=" + }, "@jest/console": { "version": "24.9.0", "resolved": "https://registry.npm.taobao.org/@jest/console/download/@jest/console-24.9.0.tgz", @@ -8415,6 +8420,11 @@ "object-visit": "^1.0.0" } }, + "material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npm.taobao.org/material-colors/download/material-colors-1.2.6.tgz", + "integrity": "sha1-bRlYhxEmmSzuzHL0vMTY8BCGX0Y=" + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz", @@ -10791,6 +10801,19 @@ } } }, + "react-color": { + "version": "2.18.1", + "resolved": "https://registry.npm.taobao.org/react-color/download/react-color-2.18.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-color%2Fdownload%2Freact-color-2.18.1.tgz", + "integrity": "sha1-LNqMyOBqnixSrTkaMN2tMZckcvQ=", + "requires": { + "@icons/material": "^0.2.4", + "lodash": "^4.17.11", + "material-colors": "^1.2.1", + "prop-types": "^15.5.10", + "reactcss": "^1.2.0", + "tinycolor2": "^1.4.1" + } + }, "react-dev-utils": { "version": "10.2.1", "resolved": "https://registry.npm.taobao.org/react-dev-utils/download/react-dev-utils-10.2.1.tgz?cache=0&sync_timestamp=1584750310214&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-dev-utils%2Fdownload%2Freact-dev-utils-10.2.1.tgz", @@ -11117,6 +11140,14 @@ "workbox-webpack-plugin": "4.3.1" } }, + "reactcss": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/reactcss/download/reactcss-1.2.3.tgz", + "integrity": "sha1-wAATh15Vexzw39mjaKHD2rO1SN0=", + "requires": { + "lodash": "^4.0.1" + } + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-3.0.0.tgz", @@ -12955,6 +12986,11 @@ "resolved": "https://registry.npm.taobao.org/timsort/download/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, + "tinycolor2": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/tinycolor2/download/tinycolor2-1.4.1.tgz", + "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz", diff --git a/package.json b/package.json index 0c28453..0f35c44 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "@testing-library/user-event": "^7.1.2", "prop-types": "^15.7.2", "react": "^16.13.1", + "react-color": "^2.18.1", "react-dom": "^16.13.1", "react-redux": "^7.2.0", "react-scripts": "3.4.1", diff --git a/src/components/Qrcode.css b/src/components/Qrcode.css index 7e5c9c5..5520677 100644 --- a/src/components/Qrcode.css +++ b/src/components/Qrcode.css @@ -434,3 +434,7 @@ select:-moz-focusring { color: transparent; text-shadow: 0 0 0 #000; } + +.Qr-color-picker { + width: 200px; +} diff --git a/src/components/param/ParamColor.js b/src/components/param/ParamColor.js new file mode 100644 index 0000000..3e62e87 --- /dev/null +++ b/src/components/param/ParamColor.js @@ -0,0 +1,22 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import {SliderPicker} from 'react-color'; +import '../Qrcode.css'; + +const ParamColor = ({ rendererIndex, paramIndex, value, onChange }) => ( + +) + +ParamColor.propTypes = { + rendererIndex: PropTypes.number.isRequired, + paramIndex: PropTypes.number.isRequired, + value: PropTypes.string.isRequired, + onChange: PropTypes.func.isRequired, +} + +export default ParamColor; diff --git a/src/components/param/ParamList.js b/src/components/param/ParamList.js index b03b170..fb4f334 100644 --- a/src/components/param/ParamList.js +++ b/src/components/param/ParamList.js @@ -3,6 +3,7 @@ import {ParamTypes} from "../../constant/ParamTypes"; import PropTypes from "prop-types" import ParamTextViewer from "../../containers/param/ParamTextViewer"; import ParamSelectViewer from "../../containers/param/ParamSelectViewer"; +import ParamColorViewer from "../../containers/param/ParamColorViewer"; const ParamList = ({ rendererIndex, paramInfo }) => ( paramInfo.map((item, paramIndex) => { @@ -27,6 +28,16 @@ const ParamList = ({ rendererIndex, paramInfo }) => ( ) } + case ParamTypes.COLOR_EDITOR: { + return ( + + {item.key} + + + + + ) + } } }) ) diff --git a/src/components/param/ParamText.js b/src/components/param/ParamText.js index 50e486d..c573290 100644 --- a/src/components/param/ParamText.js +++ b/src/components/param/ParamText.js @@ -7,7 +7,7 @@ const ParamText = ({ rendererIndex, paramIndex, value, onBlur, onKeyPress }) => type="number" key={"input_" + rendererIndex + "_" + paramIndex} className="Qr-input small-input" - placeholder="10" + placeholder={value} defaultValue={value} onBlur={onBlur} onKeyPress={onKeyPress} diff --git a/src/components/renderer/RendererBase.js b/src/components/renderer/RendererBase.js index 18df062..30c496d 100644 --- a/src/components/renderer/RendererBase.js +++ b/src/components/renderer/RendererBase.js @@ -15,6 +15,8 @@ function listPoints(qrcode, params) { let opacity = params[2] / 100; let posType = params[3]; let id = 0; + let otherColor = params[4]; + let posColor = params[5]; const vw = [3, -3]; const vh = [3, -3]; @@ -27,41 +29,41 @@ function listPoints(qrcode, params) { if (typeTable[x][y] == QRPointType.ALIGN_CENTER || typeTable[x][y] == QRPointType.ALIGN_OTHER || typeTable[x][y] == QRPointType.TIMING) { if (type == 0) - pointList.push() + pointList.push() else if (type == 1) - pointList.push() + pointList.push() else if (type == 2) - pointList.push() + pointList.push() } else if (typeTable[x][y] == QRPointType.POS_CENTER) { if (posType == 0) { - pointList.push(); + pointList.push(); } else if (posType == 1) { - pointList.push() - pointList.push() + pointList.push() + pointList.push() } else if (posType == 2) { - pointList.push() + pointList.push() pointList.push() for (let w = 0; w < vw.length; w++) { - pointList.push() + pointList.push() } for (let h = 0; h < vh.length; h++) { - pointList.push() + pointList.push() } } } else if (typeTable[x][y] == QRPointType.POS_OTHER) { if (posType == 0) { - pointList.push(); + pointList.push(); } } else { if (type == 0) - pointList.push() + pointList.push() else if (type == 1) - pointList.push() + pointList.push() else if (type == 2) - pointList.push() + pointList.push() } } } @@ -101,6 +103,16 @@ function getParamInfo() { "行星", ] }, + { + type: ParamTypes.COLOR_EDITOR, + key: '信息点颜色', + default: '#000000' + }, + { + type: ParamTypes.COLOR_EDITOR, + key: '定位点点颜色', + default: '#000000' + } ]; } diff --git a/src/constant/ParamTypes.js b/src/constant/ParamTypes.js index 74f3fec..c0b5c9b 100644 --- a/src/constant/ParamTypes.js +++ b/src/constant/ParamTypes.js @@ -1,4 +1,6 @@ export const ParamTypes = { TEXT_EDITOR: 1, - SELECTOR: 2 + SELECTOR: 2, + COLOR_EDITOR: 3, + MULTI_CHECK: 4, } diff --git a/src/containers/param/ParamColorViewer.js b/src/containers/param/ParamColorViewer.js new file mode 100644 index 0000000..b225c6f --- /dev/null +++ b/src/containers/param/ParamColorViewer.js @@ -0,0 +1,17 @@ +import { connect } from 'react-redux'; +import {changeParam} from "../../actions"; +import ParamColor from "../../components/param/ParamColor"; + +const mapStateToProps = (state, ownProps) => ({ + rendererIndex: ownProps.rendererIndex, + paramIndex: ownProps.paramIndex, + value: state.paramValue[ownProps.rendererIndex][ownProps.paramIndex] +}) + +const mapDispatchToProps = (dispatch, ownProps) => ({ + onChange: (color) => { + dispatch(changeParam(ownProps.rendererIndex, ownProps.paramIndex, color.hex)) + } +}) + +export default connect(mapStateToProps, mapDispatchToProps)(ParamColor); diff --git a/src/containers/style/StyleListViewer.js b/src/containers/style/StyleListViewer.js index 53b1a8f..0ca61c7 100644 --- a/src/containers/style/StyleListViewer.js +++ b/src/containers/style/StyleListViewer.js @@ -28,7 +28,7 @@ const paramValueBuffer = new Array(16).fill(new Array(16)) const setParamInfo = (renderIndex, paramInfo) => { paramInfoBuffer[renderIndex] = paramInfo - paramValueBuffer[renderIndex] = paramInfo.map(item => parseInt(item.default)) + paramValueBuffer[renderIndex] = paramInfo.map(item => item.default) } const mapStateToProps = state => ({ diff --git a/src/reducers/index.js b/src/reducers/index.js index 7236347..074841f 100644 --- a/src/reducers/index.js +++ b/src/reducers/index.js @@ -16,7 +16,6 @@ const initialState = { } export default function appReducer(state = initialState, action) { - console.log(state) switch (action.type) { case actionTypes.GENERATE_QR_INFO: { let text = action.text; @@ -54,7 +53,7 @@ export default function appReducer(state = initialState, action) { } const newItem = item.slice(); - newItem[action.paramIndex] = parseInt(action.value); + newItem[action.paramIndex] = isNaN(action.value) ? action.value : parseInt(action.value); return newItem; }) });