zhaogongxue vor 1 Jahr
Ursprung
Commit
1bf49f3691
100 geänderte Dateien mit 2445 neuen und 450 gelöschten Zeilen
  1. 8 0
      components/xinyu-canvas-drawer/changelog.md
  2. 8 0
      components/xinyu-canvas-drawer/components/xinyu-canvas-drawer/index.vue
  3. 496 0
      components/xinyu-canvas-drawer/index.vue
  4. 85 0
      components/xinyu-canvas-drawer/package.json
  5. 47 0
      components/xinyu-canvas-drawer/qrcode/QR8bitByte.js
  6. 28 0
      components/xinyu-canvas-drawer/qrcode/QRBitBuffer.js
  7. 129 0
      components/xinyu-canvas-drawer/qrcode/QRCode.js
  8. 42 0
      components/xinyu-canvas-drawer/qrcode/QRCodeLimitLength.js
  9. 299 0
      components/xinyu-canvas-drawer/qrcode/QRCodeModel.js
  10. 6 0
      components/xinyu-canvas-drawer/qrcode/QRErrorCorrectLevel.js
  11. 10 0
      components/xinyu-canvas-drawer/qrcode/QRMaskPattern.js
  12. 30 0
      components/xinyu-canvas-drawer/qrcode/QRMath.js
  13. 6 0
      components/xinyu-canvas-drawer/qrcode/QRMode.js
  14. 45 0
      components/xinyu-canvas-drawer/qrcode/QRPolynomial.js
  15. 202 0
      components/xinyu-canvas-drawer/qrcode/QRRSBlock.js
  16. 219 0
      components/xinyu-canvas-drawer/qrcode/QRUtil.js
  17. 52 0
      components/xinyu-canvas-drawer/readme.md
  18. 501 0
      components/xinyu-canvas-drawer/xinyu-cross-canvas/xinyu-cross-canvas.vue
  19. 15 11
      pages/index/index.vue
  20. 1 1
      pages/login/login.vue
  21. 9 5
      pages/luntan/luntan.vue
  22. 1 0
      pages/xiaoxi/xiaoxi.vue
  23. 3 15
      pagesA/yaoqing.vue
  24. 55 19
      pagesC/my-luntan.vue
  25. 5 1
      pagesD/invite-list.vue
  26. 15 27
      pagesD/mingxi.vue
  27. 72 6
      pagesD/my-fapiao.vue
  28. 25 30
      pagesD/order-info.vue
  29. 7 4
      pagesD/preview.vue
  30. 19 6
      pagesD/resume.vue
  31. 5 4
      pagesD/yongjin.vue
  32. 0 4
      unpackage/dist/build/mp-weixin/app.js
  33. 0 147
      unpackage/dist/build/mp-weixin/app.json
  34. 0 3
      unpackage/dist/build/mp-weixin/app.wxss
  35. 0 0
      unpackage/dist/build/mp-weixin/common/main.js
  36. 0 0
      unpackage/dist/build/mp-weixin/common/main.wxss
  37. 0 2
      unpackage/dist/build/mp-weixin/common/runtime.js
  38. 0 0
      unpackage/dist/build/mp-weixin/common/vendor.js
  39. 0 0
      unpackage/dist/build/mp-weixin/components/hx-invite/hx-invite.js
  40. 0 7
      unpackage/dist/build/mp-weixin/components/hx-invite/hx-invite.json
  41. 0 0
      unpackage/dist/build/mp-weixin/components/hx-invite/hx-invite.wxml
  42. 0 0
      unpackage/dist/build/mp-weixin/components/hx-invite/hx-invite.wxss
  43. 0 0
      unpackage/dist/build/mp-weixin/components/hx-order/hx-order.js
  44. 0 7
      unpackage/dist/build/mp-weixin/components/hx-order/hx-order.json
  45. 0 0
      unpackage/dist/build/mp-weixin/components/hx-order/hx-order.wxml
  46. 0 0
      unpackage/dist/build/mp-weixin/components/hx-order/hx-order.wxss
  47. 0 10
      unpackage/dist/build/mp-weixin/components/hx-school/hx-school.js
  48. 0 1
      unpackage/dist/build/mp-weixin/components/hx-school/hx-school.wxml
  49. 0 1
      unpackage/dist/build/mp-weixin/components/hx-school/hx-school.wxss
  50. 0 0
      unpackage/dist/build/mp-weixin/components/zhao-chat/zhao-chat.js
  51. 0 4
      unpackage/dist/build/mp-weixin/components/zhao-chat/zhao-chat.json
  52. 0 0
      unpackage/dist/build/mp-weixin/components/zhao-chat/zhao-chat.wxml
  53. 0 0
      unpackage/dist/build/mp-weixin/components/zhao-chat/zhao-chat.wxss
  54. 0 0
      unpackage/dist/build/mp-weixin/components/zhao-shaixuan/zhao-shaixuan.js
  55. 0 9
      unpackage/dist/build/mp-weixin/components/zhao-shaixuan/zhao-shaixuan.json
  56. 0 0
      unpackage/dist/build/mp-weixin/components/zhao-shaixuan/zhao-shaixuan.wxml
  57. 0 0
      unpackage/dist/build/mp-weixin/components/zhao-shaixuan/zhao-shaixuan.wxss
  58. 0 10
      unpackage/dist/build/mp-weixin/components/zhao-text/zhao-text.js
  59. 0 4
      unpackage/dist/build/mp-weixin/components/zhao-text/zhao-text.json
  60. 0 1
      unpackage/dist/build/mp-weixin/components/zhao-text/zhao-text.wxml
  61. 0 1
      unpackage/dist/build/mp-weixin/components/zhao-text/zhao-text.wxss
  62. 0 10
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u--input/u--input.js
  63. 0 6
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u--input/u--input.json
  64. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u--input/u--input.wxml
  65. 0 10
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u--text/u--text.js
  66. 0 6
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u--text/u--text.json
  67. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u--text/u--text.wxml
  68. 0 0
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-badge/u-badge.js
  69. 0 4
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-badge/u-badge.json
  70. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-badge/u-badge.wxml
  71. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-badge/u-badge.wxss
  72. 0 0
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-button/u-button.js
  73. 0 7
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-button/u-button.json
  74. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-button/u-button.wxml
  75. 0 0
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-button/u-button.wxss
  76. 0 10
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-checkbox-group/u-checkbox-group.js
  77. 0 4
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-checkbox-group/u-checkbox-group.json
  78. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-checkbox-group/u-checkbox-group.wxml
  79. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-checkbox-group/u-checkbox-group.wxss
  80. 0 0
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-checkbox/u-checkbox.js
  81. 0 6
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-checkbox/u-checkbox.json
  82. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-checkbox/u-checkbox.wxml
  83. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-checkbox/u-checkbox.wxss
  84. 0 0
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-code/u-code.js
  85. 0 4
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-code/u-code.json
  86. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-code/u-code.wxml
  87. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-code/u-code.wxss
  88. 0 0
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-datetime-picker/u-datetime-picker.js
  89. 0 6
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-datetime-picker/u-datetime-picker.json
  90. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-datetime-picker/u-datetime-picker.wxml
  91. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-datetime-picker/u-datetime-picker.wxss
  92. 0 0
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-empty/u-empty.js
  93. 0 6
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-empty/u-empty.json
  94. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-empty/u-empty.wxml
  95. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-empty/u-empty.wxss
  96. 0 10
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-gap/u-gap.js
  97. 0 4
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-gap/u-gap.json
  98. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-gap/u-gap.wxml
  99. 0 1
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-gap/u-gap.wxss
  100. 0 0
      unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-icon/u-icon.js

+ 8 - 0
components/xinyu-canvas-drawer/changelog.md

@@ -0,0 +1,8 @@
+## 2.0.4(2022-11-17)
+兼容了字节跳动、支付宝小程序
+## 2.0.3(2022-11-16)
+修复微信小程序console报错的问题
+## 2.0.2(2022-11-16)
+修复ReadMe.md
+## 2.0.1(2022-11-16)
+修复导入

+ 8 - 0
components/xinyu-canvas-drawer/components/xinyu-canvas-drawer/index.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 496 - 0
components/xinyu-canvas-drawer/index.vue

@@ -0,0 +1,496 @@
+<template>
+	<view class="CANVAS_DRAWER">
+		<xinyu-cross-canvas :width.sync="widthTemp" :height.sync="heightTemp" :styleWidth="widthTemp"
+			:styleHeight="heightTemp" id="CANVAS_DRAWER_TEMP" ref="CANVAS_DRAWER_TEMP"></xinyu-cross-canvas>
+		<xinyu-cross-canvas :width.sync="width" :height.sync="height" :styleWidth="width" :styleHeight="height"
+			id="CANVAS_DRAWER" ref="CANVAS_DRAWER"></xinyu-cross-canvas>
+	</view>
+</template>
+<script>
+	/**
+	 * xinyu-canvas-drawer Canvas绘制器
+	 * @description 本组件可用于所有需要进行Canvas绘图的场景。绘制的Canvas组件会被放置到屏幕外面,不会显示在屏幕上。调用draw方法后返回值为图片的base64。
+	 * 【注意】本组件需要使用ref调用draw方法并await!
+	 * @property {Number} width 待绘制的实际图片的宽度,不可以中途修改宽度与高度
+	 * @property {Number} height 待绘制的实际图片的高度,不可以中途修改宽度与高度
+	 * @example 
+	 * <xinyu-canvas-drawer ref="poster" :width="750" :height="847"></xinyu-canvas-drawer>
+	 */
+	import XinyuCrossCanvas from "./xinyu-cross-canvas/xinyu-cross-canvas.vue";
+	import QRCode from "./qrcode/QRCode.js";
+	export default {
+		name: 'xinyu-canvas-drawer',
+		props: {
+			width: Number, //待绘制的实际画布的宽度数值,实际画布宽度以px计
+			height: Number //待绘制的实际画布的高度数值,实际画布高度以px计
+		},
+		data() {
+			return {
+				widthTemp: 255,
+				heightTemp: 255,
+				backgroundColor: "", //背景色,请使用setBackgroundColor方法设置。如果该值为空,则表示该canvas没有画背景色。
+				waitingList: [] //所有待渲染数据。只有在调用draw方法时才会进行渲染。
+			};
+		},
+		components: {
+			XinyuCrossCanvas
+		},
+		methods: {
+			/**
+			 * init方法
+			 * @description 本方法为初始化海报绘制组件方法,初始化后本组件的所有方法才可使用
+			 * @example await init()
+			 * @return {VueComponent} 当前实例对象,以便链式调用。
+			 */
+			async init() {
+				let canvas = this.$refs.CANVAS_DRAWER;
+				let canvasTemp = this.$refs.CANVAS_DRAWER_TEMP;
+				while (!(canvas && canvasTemp)) { //兼容字节跳动小程序
+					canvas = this.$refs.CANVAS_DRAWER;
+					canvasTemp = this.$refs.CANVAS_DRAWER_TEMP;
+					await new Promise((recv) => setTimeout(recv, 200));
+				}
+				await canvas.init();
+				await canvasTemp.init();
+				this.canvas = canvas;
+				this.canvas_temp = canvasTemp;
+				return this;
+			},
+			/**
+			 * setBackgroundColor方法
+			 * @description 本方法设置待绘制的背景色
+			 * @property {String} color 待绘制的背景颜色
+			 * @example setBackgroundColor("#FFFFFF")
+			 * @return {VueComponent} 当前实例对象,以便链式调用。
+			 */
+			setBackgroundColor(color) {
+				this.backgroundColor = color;
+				return this;
+			},
+			/**
+			 * addImage方法
+			 * @description 本方法用于向Canvas上添加图片(添加的层级会按照链式顺序从下到上叠加,下同)
+			 * @property {String} image 待绘制的图片,网络图片与本地图片均可(本地图片需要使用require("@/static/...")方式引入),网络图片在微信小程序中必须是要在微信download中信任的域名下的图片。
+			 * @property {Number} x 待绘制的图片左上角的实际画布坐标X
+			 * @property {Number} y 待绘制的图片左上角的实际画布坐标Y
+			 * @property {Number} w 待绘制的图片在实际画布中的宽度
+			 * @property {Number} h 待绘制的图片在实际画布中的高度
+			 * @property {Boolean} isRound 是否是圆图,该项为真时直径为w,h参数将没有意义
+			 * @example addImage("https://www.baidu.com/img/flexible/logo/pc/result.png",0,0,500,700);
+			 * @return {VueComponent} 当前实例对象,以便链式调用。
+			 */
+			addImage(image, x, y, w, h, isRound) {
+				this.waitingList.push({
+					type: "image",
+					data: {
+						image,
+						x,
+						y,
+						w,
+						h,
+						isRound: !!isRound
+					}
+				});
+				return this;
+			},
+			/**
+			 * addQRCode方法
+			 * @description 本方法用于向Canvas上添加二维码
+			 * @property {String} text 待生成二维码的文本。
+			 * @property {Number} x 待绘制的二维码左上角的实际画布坐标X
+			 * @property {Number} y 待绘制的二维码左上角的实际画布坐标Y
+			 * @property {Number} w 待绘制的二维码在实际画布中的宽度
+			 * @property {Number} h 待绘制的二维码在实际画布中的高度
+			 * @property {Object} extraConfig QRCode的额外配置项
+			 * @example addQRCode("测试生成",0,0,500,700);
+			 * @return {VueComponent} 当前实例对象,以便链式调用。
+			 */
+			addQRCode(text, x, y, w, h, extraConfig) {
+				if (!extraConfig)
+					extraConfig = {};
+				this.waitingList.push({
+					type: "qrcode",
+					data: {
+						text,
+						x,
+						y,
+						w,
+						h,
+						extraConfig
+					}
+				});
+				return this;
+			},
+			/**
+			 * addText方法
+			 * @description 本方法用于向Canvas上添加文本
+			 * @property {String} text 待绘制的文本,如果带有换行符\n或宽度超过maxWidth且isWrap为真时会根据lineHeight进行换行。如果宽度超过maxWidth但isWrap为假时超出部分会被省略号...代替。
+			 * @property {Number} x 待绘制的文本左上角的实际画布坐标X
+			 * @property {Number} y 待绘制的文本左上角的实际画布坐标Y
+			 * @property {Number} size 待绘制的文本大小(单位与画布实际大小一致,为px)
+			 * @property {String} color 待绘制的文本颜色
+			 * @property {Number} maxWidth 待绘制的文本在实际画布中的限制宽度(单位与画布实际大小一致,为px),如果超过此宽度则根据isWrap进行换行或省略
+			 * @property {Boolean} isWrap 待绘制的文本在超出限制宽度时是否换行,为真时换行,否则省略。
+			 * @property {Number} lineHeight 待绘制的文本距离的顶部Y坐标下一行顶部Y坐标的距离(单位与画布实际大小一致,为px)。
+			 * @example addText("百度一下,你就知道", 19, 708, 34, "#1A59FE", 453, false, 40);
+			 * @return {VueComponent} 当前实例对象,以便链式调用。
+			 */
+			addText(text, x, y, size, color, maxWidth, isWrap, lineHeight) {
+				if (!maxWidth)
+					maxWidth = 99999;
+				if (!lineHeight)
+					lineHeight = size;
+				this.waitingList.push({
+					type: "text",
+					data: {
+						text,
+						x,
+						y,
+						size,
+						color,
+						maxWidth,
+						isWrap: !!isWrap,
+						lineHeight: lineHeight
+					}
+				});
+				return this;
+			},
+			/**
+			 * addRect方法
+			 * @description 本方法用于向Canvas上添加矩形,通常用于设计图的背景色区域填充
+			 * @property {Number} x 待绘制的矩形左上角的实际画布坐标X
+			 * @property {Number} y 待绘制的矩形左上角的实际画布坐标Y
+			 * @property {Number} w 待绘制的矩形在实际画布中的宽度
+			 * @property {Number} h 待绘制的矩形在实际画布中的高度
+			 * @property {String} color 待绘制的矩形颜色
+			 * @example addRect(0, 690, 750, 158, "#FEFEFE")
+			 * @return {VueComponent} 当前实例对象,以便链式调用。
+			 */
+			addRect(x, y, w, h, color) {
+				this.waitingList.push({
+					type: "rect",
+					data: {
+						x,
+						y,
+						w,
+						h,
+						color
+					}
+				});
+				return this;
+			},
+			/**
+			 * addCustom方法
+			 * @description 本方法用于满足自定义绘制的需求。
+			 * 【注意】不要在该方法中进行绘制(调用draw方法),绘制应交给draw方法最终统一绘制。
+			 * @property {Function} func 回调函数,参数为当前Canvas的Context对象。考虑到异步情况,请为该方法返回Promise对象或将该方法设置为async方法。
+			 * @example addCustom(async (canvas)=>{
+					await canvas.setContextProp("fillStyle", "#000000");
+					await canvas.callContextMethod("moveTo", [10, 10]);
+					await canvas.callContextMethod("rect", [10, 10, 100, 50]);
+					await canvas.callContextMethod("lineTo", [110, 60]);
+					await canvas.callContextMethod("stroke", []);
+				});
+			 * @return {VueComponent} 当前实例对象,以便链式调用。
+			 */
+			addCustom(func) {
+				this.waitingList.push({
+					type: "custom",
+					data: func
+				});
+				return this;
+			},
+			/**
+			 * calcTextLinesWithNewLine方法
+			 * @description 本方法用于获取文本在实际绘制时的所有行数组,用户可根据行数乘以行高计算出完整高度。
+			 * @property {String} text 待绘制的文本,如果带有换行符\n或宽度超过maxWidth且isWrap为真时会根据lineHeight进行换行。如果宽度超过maxWidth但isWrap为假时超出部分会被省略号...代替。
+			 * @property {Number} size 待绘制的文本大小(单位与画布实际大小一致,为px)
+			 * @property {Number} maxWidth 待绘制的文本在实际画布中的限制宽度(单位与画布实际大小一致,为px),如果超过此宽度则根据isWrap进行换行或省略
+			 * @property {Boolean} isWrap 待绘制的文本在超出限制宽度时是否换行,为真时换行,否则省略。
+			 * @example addText("百度一下,你就知道", 34, 453, false);
+			 * @return {Array} 包含每行文字的数组。例:["百度一下,你","就知道"]。当isWrap为false时数组中的最后一个字符串可能会以...结尾。
+			 */
+			async calcTextLinesWithNewLine(text, size, maxWidth, isWrap) {
+				let lines = [];
+				let arr = text.split("\n");
+				for (let i = 0; i < arr.length; i++) {
+					let line = arr[i];
+					lines = lines.concat(await this.calcTextLines(line, size, maxWidth, isWrap));
+				}
+				return lines;
+			},
+			/**
+			 * calcTextLines方法
+			 * @description 本方法为不转换换行符时获取所有行。本方法为组件私有方法,请不要调用。
+			 * @property {String} text 待绘制的文本,如果带有换行符\n或宽度超过maxWidth且isWrap为真时会根据lineHeight进行换行。如果宽度超过maxWidth但isWrap为假时超出部分会被省略号...代替。
+			 * @property {Number} size 待绘制的文本大小(单位与画布实际大小一致,为px)
+			 * @property {Number} maxWidth 待绘制的文本在实际画布中的限制宽度(单位与画布实际大小一致,为px),如果超过此宽度则根据isWrap进行换行或省略
+			 * @property {Boolean} isWrap 待绘制的文本在超出限制宽度时是否换行,为真时换行,否则省略。
+			 * @example calcTextLines("百度一下,你就知道", 34, 453, false);
+			 * @return {Array} 包含每行文字的数组。例:["百度一下,你","就知道"]。当isWrap为false时数组中的最后一个字符串可能会以...结尾。
+			 */
+			async calcTextLines(text, size, maxWidth, isWrap) {
+				await this.canvas.setContextProp('font', size + 'px sans-serif');
+				let charArr = text.split("");
+				let ret = [];
+				if (!isWrap)
+					maxWidth -= (await this.canvas.callContextMethod("measureText", ["..."])).width;
+				while (charArr.length != 0) {
+					let i;
+					for (i = 0; i < charArr.length; i++) {
+						let w = (await this.canvas.callContextMethod("measureText", [charArr.slice(0, i + 1).join(
+								"")]))
+							.width;
+						if (w > maxWidth) {
+							break;
+						}
+					}
+					ret.push(charArr.splice(0, i + 1).join(""));
+					if (!isWrap) {
+						if (charArr.length != 0)
+							return ret + "...";
+						else
+							return ret;
+					}
+				}
+				return ret;
+			},
+			/**
+			 * calcTextWidth方法
+			 * @description 可以通过本方法获取对应文本绘制后的宽度。
+			 * @property {String} text 待绘制的文本,如果带有换行符\n或宽度超过maxWidth且isWrap为真时会根据lineHeight进行换行。如果宽度超过maxWidth但isWrap为假时超出部分会被省略号...代替。
+			 * @property {Number} size 待绘制的文本大小(单位与画布实际大小一致,为px)
+			 * @example calcTextWidth("百度一下,你就知道", 34);
+			 * @return {Number} 文字的宽度。
+			 */
+			async calcTextWidth(text, size) {
+				await this.canvas.setContextProp('font', size + 'px sans-serif');
+				return (await this.canvas.callContextMethod("measureText", [text])).width;
+			},
+			/**
+			 * clear方法
+			 * @description 本方法用于重置Canvas。
+			 * @example clear();
+			 * @return {VueComponent} 当前实例对象,以便链式调用。
+			 */
+			async clear() {
+				await this.canvas.callContextMethod("clearRect", [0, 0, this.width, this.height]);
+				this.backgroundColor = "";
+				this.waitingList = [];
+				this.src = "";
+				return this;
+			},
+			/**
+			 * getImageInfo方法
+			 * @description 本方法用于获取图片的宽高等信息,本地图片不能使用该方法。
+			 * @property {String} src 图片完整url。
+			 * @example getImageInfo("https://www.baidu.com/img/flexible/logo/pc/result.png");
+			 * @return {Promise} Promise对象,成功时返回uni.getImageInfo的success情况下的回调对象,否则throw错误。
+			 */
+			async getImageInfo(src) {
+				let that = this;
+				return await new Promise((recv, recj) => {
+					uni.getImageInfo({
+						src: src,
+						success: (res) => {
+							if (res.errMsg == 'getImageInfo:ok') {
+								res.key = src;
+								recv(JSON.parse(JSON.stringify(res)));
+							} else
+								recj(res.errMsg);
+						},
+						fail(e) {
+							recj(e);
+						}
+					});
+				});
+			},
+			async loadImage(src) {
+				return await this.canvas.loadImage(src);
+			},
+			/**
+			 * draw方法
+			 * @description 本方法用于实际加载网络图片及异步绘制。可以await该方法实现体验优化。
+			 * @example draw();
+			 * @return {Promise} 返回Promise对象,当图片下载错误或渲染错误时该方法会throw错误,请务必使用try catch来捕获!
+			 */
+			async draw() {
+				let sid = 1;
+				let list = [];
+				for (let wid = 0; wid < this.waitingList.length; wid++) {
+					let item = this.waitingList[wid];
+					if (item.type == "image") {
+						let ret = JSON.parse(JSON.stringify(item));
+						if (ret.data.isRound) {
+							let d = Math.min(ret.data.w, ret.data.h);
+							let r = Math.floor(d / 2);
+							await this.canvas_temp.refreshWidthHeight(d, d);
+							await this.canvas_temp.callContextMethod('save', []);
+							await this.canvas_temp.callContextMethod('clearRect', [0, 0, d, d]);
+							await this.canvas_temp.callContextMethod('arc', [r, r, r, 0, 2 * Math.PI]);
+							await this.canvas_temp.callContextMethod('fill', []);
+							await this.canvas_temp.callContextMethod('clip', []);
+							await this.canvas_temp.callContextMethod('drawImage', [ret.data.image, 0, 0, d, d]);
+							ret.data.image = await this.canvas_temp.callContextMethod('toDataURL', []);
+							await this.canvas_temp.callContextMethod('restore', []);
+						}
+						list.push(ret);
+					} else if (item.type == "custom") {
+						let t = JSON.parse(JSON.stringify(item));
+						t.data = item.data;
+						list.push(t);
+					} else if (item.type == "qrcode") {
+						let config = {
+							x: 0,
+							y: 0,
+							width: 256,
+							height: 256
+						};
+						for (let i in item.data.extraConfig)
+							config[i] = item.data.extraConfig[i];
+						await this.canvas_temp.refreshWidthHeight(256, 256);
+						await this.canvas_temp.callContextMethod('clearRect', [0, 0, 256, 256]);
+						await this.canvas_temp.setContextProp('fillStyle', "#FFFFFF");
+						await this.canvas_temp.callContextMethod('fillRect', [0, 0, 256, 256]);
+						let wh = await (new QRCode(this.canvas_temp, config)).calcCode(item.data.text);
+						await this.canvas_temp.refreshWidthHeight(wh.width, wh.height);
+						await this.canvas_temp.callContextMethod('clearRect', [0, 0, 256, 256]);
+						let ret = JSON.parse(JSON.stringify(item));
+						await (new QRCode(this.canvas_temp, config)).makeCode(item.data.text);
+						ret.data.image = await this.canvas_temp.callContextMethod('toDataURL', []);
+						list.push(ret);
+					} else
+						list.push(JSON.parse(JSON.stringify(item)));
+				};
+				if (this.backgroundColor != "") {
+					await this.canvas.setContextProp('fillStyle', this.backgroundColor);
+					await this.canvas.callContextMethod('fillRect', [0, 0, this.width, this.height]);
+				}
+				for (let itemIndex = 0; itemIndex < list.length; itemIndex++) {
+					let item = list[itemIndex];
+					if (item.type == "image") {
+						await this.canvas.callContextMethod('drawImage', [item.data.image, item.data.x, item.data.y,
+							item.data.w, item.data.h
+						]);
+					} else if (item.type == "text") {
+						await this.canvas.setContextProp('textBaseline', 'top');
+						await this.canvas.setContextProp('font', item.data.size + 'px sans-serif');
+						await this.canvas.setContextProp('fillStyle', item.data.color);
+						let textArr = await this.calcTextLinesWithNewLine(item.data.text, item.data.size, item.data
+							.maxWidth, item.data.isWrap);
+						for (let line = 0; line < textArr.length; line++)
+							await this.canvas.callContextMethod('fillText', [textArr[line], item.data.x, item.data.y +
+								line *
+								item.data.lineHeight
+							]);
+					} else if (item.type == "rect") {
+						await this.canvas.setContextProp('fillStyle', item.data.color);
+						await this.canvas.callContextMethod('fillRect', [item.data.x, item.data.y, item.data.w, item
+							.data.h
+						]);
+					} else if (item.type == "qrcode") {
+						await this.canvas.callContextMethod('drawImage', [item.data.image, item.data.x, item.data.y,
+							item.data.w, item.data.h
+						]);
+					} else if (item.type == "custom")
+						await item.data(this.canvas);
+				};
+				return await this.canvas.callContextMethod('toDataURL', []);
+			},
+			/**
+			 * saveImageToPhotosAlbum方法
+			 * @description 本方法用于将本实例的src保存到本地相册种。
+			 * @example saveImageToPhotosAlbum(src);
+			 * @return {Promise} 返回Promise对象,当发生错误时该方法会throw错误,请务必使用try catch来捕获!
+			 */
+			saveImageToPhotosAlbum(src) {
+				// #ifndef H5
+				return new Promise(async (recv, recj) => {
+					// #ifdef MP
+					if (src.startsWith("data:image")) {
+						let base64 = src.substring(src.indexOf(",") + 1);
+						// #ifdef MP-WEIXIN
+						let tmpFile = wx.env.USER_DATA_PATH + "/" + Date.now() + ".png";
+						// #endif
+						// #ifdef MP-ALIPAY
+						let tmpFile = my.env.USER_DATA_PATH + "/" + Date.now() + ".png";
+						// #endif
+						// #ifdef MP-TOUTIAO
+						let tmpFile = tt.env.USER_DATA_PATH + "/" + Date.now() + ".png";
+						// #endif
+						await new Promise((recv1) => {
+							uni.getFileSystemManager().writeFile({
+								filePath: tmpFile,
+								data: base64,
+								encoding: 'base64',
+								success: recv1
+							})
+						});
+						src = tmpFile;
+					}
+					// #endif
+					// #ifdef APP-PLUS
+					if (src.startsWith("data:image")) {
+						const url = "_doc/" + Date.now() + ".png";
+						const bitmap = new plus.nativeObj.Bitmap("base64");
+						await new Promise((recv1) => bitmap.loadBase64Data(src, recv1));
+						await new Promise((recv1) => bitmap.save(url, {
+							overwrite: true
+						}, () => {
+							bitmap.clear();
+							recv1();
+						}, () => {
+							bitmap.clear();
+							recj();
+						}));
+						src = url;
+					}
+					// #endif
+					uni.saveImageToPhotosAlbum({
+						filePath: src,
+						success: () => {
+							recv();
+						},
+						fail: (e) => {
+							recj(e);
+						}
+					});
+				});
+				// #endif
+				// #ifdef H5
+				return new Promise((recv, recj) => {
+					let base64 = src;
+					let arr = base64.split(',');
+					let bytes = atob(arr[1]);
+					let ab = new ArrayBuffer(bytes.length);
+					let ia = new Uint8Array(ab);
+					for (let i = 0; i < bytes.length; i++) {
+						ia[i] = bytes.charCodeAt(i);
+					}
+					let blob = new Blob([ab], {
+						type: 'application/octet-stream'
+					});
+					let url = URL.createObjectURL(blob);
+					let a = document.createElement('a');
+					a.href = url;
+					a.download = new Date().valueOf() + ".png";
+					let e = document.createEvent('MouseEvents');
+					e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0,
+						null);
+					a.dispatchEvent(e);
+					URL.revokeObjectURL(url);
+					recv();
+				});
+				// #endif
+			}
+		}
+	}
+</script>
+
+<style scoped>
+	.CANVAS_DRAWER {
+		position: fixed;
+		left: 750rpx;
+		top: 0rpx;
+	}
+</style>

+ 85 - 0
components/xinyu-canvas-drawer/package.json

@@ -0,0 +1,85 @@
+{
+  "id": "xinyu-canvas-drawer",
+  "displayName": "海报绘制组件",
+  "version": "2.0.4",
+  "description": "使用canvas绘制图片的一款组件,可用于海报、分享图等各种图的绘制,多端通用,内聚了所有图片加载处理的过程",
+  "keywords": [
+    "海报",
+    "canvas",
+    "生成海报",
+    "生成二维码",
+    "图片处理"
+],
+  "repository": "https://github.com/similing4/xinyu-canvas-drawer-uniapp",
+  "engines": {
+    "HBuilderX": "^3.6.0"
+  },
+  "dcloudext": {
+    "type": "component-vue",
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "插件不采集任何数据",
+      "permissions": "保存图片时需要用户授权保存到相册"
+    },
+    "npmurl": ""
+  },
+  "uni_modules": {
+    "dependencies": [],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "Vue": {
+          "vue2": "y",
+          "vue3": "y"
+        },
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "n"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "u",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "n",
+          "字节跳动": "y",
+          "QQ": "n",
+          "钉钉": "n",
+          "快手": "n",
+          "飞书": "n",
+          "京东": "n"
+        },
+        "快应用": {
+          "华为": "n",
+          "联盟": "n"
+        }
+      }
+    }
+  }
+}

+ 47 - 0
components/xinyu-canvas-drawer/qrcode/QR8bitByte.js

@@ -0,0 +1,47 @@
+import QRMode from "./QRMode.js";
+export default class QR8bitByte {
+	mode = QRMode.MODE_8BIT_BYTE;
+	data = null;
+	parsedData = [];
+	constructor(data) {
+		this.data = data;
+		for (var i = 0, l = this.data.length; i < l; i++) {
+			var byteArray = [];
+			var code = this.data.charCodeAt(i);
+
+			if (code > 0x10000) {
+				byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);
+				byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);
+				byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);
+				byteArray[3] = 0x80 | (code & 0x3F);
+			} else if (code > 0x800) {
+				byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);
+				byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);
+				byteArray[2] = 0x80 | (code & 0x3F);
+			} else if (code > 0x80) {
+				byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);
+				byteArray[1] = 0x80 | (code & 0x3F);
+			} else {
+				byteArray[0] = code;
+			}
+
+			this.parsedData.push(byteArray);
+		}
+
+		this.parsedData = Array.prototype.concat.apply([], this.parsedData);
+
+		if (this.parsedData.length != this.data.length) {
+			this.parsedData.unshift(191);
+			this.parsedData.unshift(187);
+			this.parsedData.unshift(239);
+		}
+	}
+	getLength(buffer) {
+		return this.parsedData.length;
+	}
+	write(buffer) {
+		for (var i = 0, l = this.parsedData.length; i < l; i++) {
+			buffer.put(this.parsedData[i], 8);
+		}
+	}
+}

+ 28 - 0
components/xinyu-canvas-drawer/qrcode/QRBitBuffer.js

@@ -0,0 +1,28 @@
+export default class QRBitBuffer {
+	constructor() {
+		this.buffer = [];
+		this.length = 0;
+	}
+	get(index) {
+		var bufIndex = Math.floor(index / 8);
+		return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) == 1;
+	}
+	put(num, length) {
+		for (var i = 0; i < length; i++) {
+			this.putBit(((num >>> (length - i - 1)) & 1) == 1);
+		}
+	}
+	getLengthInBits() {
+		return this.length;
+	}
+	putBit(bit) {
+		var bufIndex = Math.floor(this.length / 8);
+		if (this.buffer.length <= bufIndex) {
+			this.buffer.push(0);
+		}
+		if (bit) {
+			this.buffer[bufIndex] |= (0x80 >>> (this.length % 8));
+		}
+		this.length++;
+	}
+};

+ 129 - 0
components/xinyu-canvas-drawer/qrcode/QRCode.js

@@ -0,0 +1,129 @@
+// 整改自 https://github.com/davidshimjs/qrcodejs
+import QRErrorCorrectLevel from "./QRErrorCorrectLevel.js";
+import QRCodeLimitLength from "./QRCodeLimitLength.js";
+import QRCodeModel from "./QRCodeModel.js";
+export default class QRCode {
+	_htOption = {
+		x: 0,
+		y: 0,
+		width: 256,
+		height: 256,
+		typeNumber: 4,
+		colorDark: "#000000",
+		colorLight: "#ffffff",
+		correctLevel: QRErrorCorrectLevel.M
+	};
+	_oQRCode = null;
+	_context = null;
+	constructor(context, vOption) {
+		if (typeof vOption === 'string') {
+			vOption = {
+				text: vOption
+			};
+		}
+		if (vOption) {
+			for (var i in vOption) {
+				this._htOption[i] = vOption[i];
+			}
+		}
+		this._context = context
+	}
+
+	async makeCode(sText) {
+		this._oQRCode = new QRCodeModel(this._getTypeNumber(sText, this._htOption.correctLevel), this._htOption
+			.correctLevel);
+		this._oQRCode.addData(sText);
+		this._oQRCode.make();
+		return await this.makeImage(true);
+	}
+
+	async calcCode(sText) {
+		this._oQRCode = new QRCodeModel(this._getTypeNumber(sText, this._htOption.correctLevel), this._htOption
+			.correctLevel);
+		this._oQRCode.addData(sText);
+		this._oQRCode.make();
+		return await this.makeImage(false);
+	}
+	/**
+	 * Get the type by string length
+	 * 
+	 * @private
+	 * @param {String} sText
+	 * @param {Number} nCorrectLevel
+	 * @return {Number} type
+	 */
+	_getTypeNumber(sText, nCorrectLevel) {
+		var nType = 1;
+		var length = QRCode._getUTF8Length(sText);
+
+		for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) {
+			var nLimit = 0;
+
+			switch (nCorrectLevel) {
+				case QRErrorCorrectLevel.L:
+					nLimit = QRCodeLimitLength[i][0];
+					break;
+				case QRErrorCorrectLevel.M:
+					nLimit = QRCodeLimitLength[i][1];
+					break;
+				case QRErrorCorrectLevel.Q:
+					nLimit = QRCodeLimitLength[i][2];
+					break;
+				case QRErrorCorrectLevel.H:
+					nLimit = QRCodeLimitLength[i][3];
+					break;
+			}
+
+			if (length <= nLimit) {
+				break;
+			} else {
+				nType++;
+			}
+		}
+
+		if (nType > QRCodeLimitLength.length) {
+			throw new Error("Too long data");
+		}
+
+		return nType;
+	}
+
+	static _getUTF8Length(sText) {
+		var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a');
+		return replacedText.length + (replacedText.length != sText ? 3 : 0);
+	}
+
+	async makeImage(needDraw) {
+		var _oContext = this._context
+		var _htOption = this._htOption;
+		var oQRCode = this._oQRCode
+		var padding = 0;
+		if (_htOption.padding)
+			padding = _htOption.padding;
+
+		var nCount = oQRCode.getModuleCount();
+		var nWidth = Math.floor((_htOption.width - 2 * padding) / nCount);
+		var nHeight = Math.floor((_htOption.height - 2 * padding) / nCount);
+		if (needDraw) {
+			let list = [];
+			for (var row = 0; row < nCount; row++) {
+				for (var col = 0; col < nCount; col++) {
+					var nLeft = col * nWidth + padding + _htOption.x;
+					var nTop = row * nHeight + padding + _htOption.y;
+					list.push({
+						fillStyle: oQRCode.isDark(row, col) ? _htOption.colorDark : _htOption.colorLight,
+						x: nLeft,
+						y: nTop,
+						w: nWidth,
+						h: nHeight
+					});
+				}
+			}
+			await _oContext.fillRectList(list);
+		}
+		return {
+			width: nWidth * nCount + 2 * padding,
+			height: nHeight * nCount + 2 * padding
+		}
+	}
+}

+ 42 - 0
components/xinyu-canvas-drawer/qrcode/QRCodeLimitLength.js

@@ -0,0 +1,42 @@
+export default [
+	[17, 14, 11, 7],
+	[32, 26, 20, 14],
+	[53, 42, 32, 24],
+	[78, 62, 46, 34],
+	[106, 84, 60, 44],
+	[134, 106, 74, 58],
+	[154, 122, 86, 64],
+	[192, 152, 108, 84],
+	[230, 180, 130, 98],
+	[271, 213, 151, 119],
+	[321, 251, 177, 137],
+	[367, 287, 203, 155],
+	[425, 331, 241, 177],
+	[458, 362, 258, 194],
+	[520, 412, 292, 220],
+	[586, 450, 322, 250],
+	[644, 504, 364, 280],
+	[718, 560, 394, 310],
+	[792, 624, 442, 338],
+	[858, 666, 482, 382],
+	[929, 711, 509, 403],
+	[1003, 779, 565, 439],
+	[1091, 857, 611, 461],
+	[1171, 911, 661, 511],
+	[1273, 997, 715, 535],
+	[1367, 1059, 751, 593],
+	[1465, 1125, 805, 625],
+	[1528, 1190, 868, 658],
+	[1628, 1264, 908, 698],
+	[1732, 1370, 982, 742],
+	[1840, 1452, 1030, 790],
+	[1952, 1538, 1112, 842],
+	[2068, 1628, 1168, 898],
+	[2188, 1722, 1228, 958],
+	[2303, 1809, 1283, 983],
+	[2431, 1911, 1351, 1051],
+	[2563, 1989, 1423, 1093],
+	[2699, 2099, 1499, 1139],
+	[2809, 2213, 1579, 1219],
+	[2953, 2331, 1663, 1273]
+];

+ 299 - 0
components/xinyu-canvas-drawer/qrcode/QRCodeModel.js

@@ -0,0 +1,299 @@
+import QR8bitByte from "./QR8bitByte.js";
+import QRUtil from "./QRUtil.js";
+import QRPolynomial from "./QRPolynomial.js";
+import QRRSBlock from "./QRRSBlock.js";
+import QRBitBuffer from "./QRBitBuffer.js";
+export default class QRCodeModel {
+	static PAD0 = 0xEC;
+	static PAD1 = 0x11;
+	typeNumber = null;
+	errorCorrectLevel = null;
+	modules = null;
+	moduleCount = 0;
+	dataCache = null;
+	dataList = [];
+	constructor(typeNumber, errorCorrectLevel) {
+		this.typeNumber = typeNumber;
+		this.errorCorrectLevel = errorCorrectLevel;
+	}
+	addData(data) {
+		var newData = new QR8bitByte(data);
+		this.dataList.push(newData);
+		this.dataCache = null;
+	}
+	isDark(row, col) {
+		if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {
+			throw new Error(row + "," + col);
+		}
+		return this.modules[row][col];
+	}
+	getModuleCount() {
+		return this.moduleCount;
+	}
+	make() {
+		this.makeImpl(false, this.getBestMaskPattern());
+	}
+	makeImpl(test, maskPattern) {
+		this.moduleCount = this.typeNumber * 4 + 17;
+		this.modules = new Array(this.moduleCount);
+		for (var row = 0; row < this.moduleCount; row++) {
+			this.modules[row] = new Array(this.moduleCount);
+			for (var col = 0; col < this.moduleCount; col++) {
+				this.modules[row][col] = null;
+			}
+		}
+		this.setupPositionProbePattern(0, 0);
+		this.setupPositionProbePattern(this.moduleCount - 7, 0);
+		this.setupPositionProbePattern(0, this.moduleCount - 7);
+		this.setupPositionAdjustPattern();
+		this.setupTimingPattern();
+		this.setupTypeInfo(test, maskPattern);
+		if (this.typeNumber >= 7) {
+			this.setupTypeNumber(test);
+		}
+		if (this.dataCache == null) {
+			this.dataCache = QRCodeModel.createData(this.typeNumber, this.errorCorrectLevel, this
+				.dataList);
+		}
+		this.mapData(this.dataCache, maskPattern);
+	}
+	setupPositionProbePattern(row, col) {
+		for (var r = -1; r <= 7; r++) {
+			if (row + r <= -1 || this.moduleCount <= row + r) continue;
+			for (var c = -1; c <= 7; c++) {
+				if (col + c <= -1 || this.moduleCount <= col + c) continue;
+				if ((0 <= r && r <= 6 && (c == 0 || c == 6)) || (0 <= c && c <= 6 && (r == 0 || r ==
+						6)) || (2 <= r && r <= 4 && 2 <= c && c <= 4)) {
+					this.modules[row + r][col + c] = true;
+				} else {
+					this.modules[row + r][col + c] = false;
+				}
+			}
+		}
+	}
+	getBestMaskPattern() {
+		var minLostPoint = 0;
+		var pattern = 0;
+		for (var i = 0; i < 8; i++) {
+			this.makeImpl(true, i);
+			var lostPoint = QRUtil.getLostPoint(this);
+			if (i == 0 || minLostPoint > lostPoint) {
+				minLostPoint = lostPoint;
+				pattern = i;
+			}
+		}
+		return pattern;
+	}
+	createMovieClip(target_mc, instance_name, depth) {
+		var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);
+		var cs = 1;
+		this.make();
+		for (var row = 0; row < this.modules.length; row++) {
+			var y = row * cs;
+			for (var col = 0; col < this.modules[row].length; col++) {
+				var x = col * cs;
+				var dark = this.modules[row][col];
+				if (dark) {
+					qr_mc.beginFill(0, 100);
+					qr_mc.moveTo(x, y);
+					qr_mc.lineTo(x + cs, y);
+					qr_mc.lineTo(x + cs, y + cs);
+					qr_mc.lineTo(x, y + cs);
+					qr_mc.endFill();
+				}
+			}
+		}
+		return qr_mc;
+	}
+	setupTimingPattern() {
+		for (var r = 8; r < this.moduleCount - 8; r++) {
+			if (this.modules[r][6] != null) {
+				continue;
+			}
+			this.modules[r][6] = (r % 2 == 0);
+		}
+		for (var c = 8; c < this.moduleCount - 8; c++) {
+			if (this.modules[6][c] != null) {
+				continue;
+			}
+			this.modules[6][c] = (c % 2 == 0);
+		}
+	}
+	setupPositionAdjustPattern() {
+		var pos = QRUtil.getPatternPosition(this.typeNumber);
+		for (var i = 0; i < pos.length; i++) {
+			for (var j = 0; j < pos.length; j++) {
+				var row = pos[i];
+				var col = pos[j];
+				if (this.modules[row][col] != null) {
+					continue;
+				}
+				for (var r = -2; r <= 2; r++) {
+					for (var c = -2; c <= 2; c++) {
+						if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {
+							this.modules[row + r][col + c] = true;
+						} else {
+							this.modules[row + r][col + c] = false;
+						}
+					}
+				}
+			}
+		}
+	}
+	setupTypeNumber(test) {
+		var bits = QRUtil.getBCHTypeNumber(this.typeNumber);
+		for (var i = 0; i < 18; i++) {
+			var mod = (!test && ((bits >> i) & 1) == 1);
+			this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;
+		}
+		for (var i = 0; i < 18; i++) {
+			var mod = (!test && ((bits >> i) & 1) == 1);
+			this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
+		}
+	}
+	setupTypeInfo(test, maskPattern) {
+		var data = (this.errorCorrectLevel << 3) | maskPattern;
+		var bits = QRUtil.getBCHTypeInfo(data);
+		for (var i = 0; i < 15; i++) {
+			var mod = (!test && ((bits >> i) & 1) == 1);
+			if (i < 6) {
+				this.modules[i][8] = mod;
+			} else if (i < 8) {
+				this.modules[i + 1][8] = mod;
+			} else {
+				this.modules[this.moduleCount - 15 + i][8] = mod;
+			}
+		}
+		for (var i = 0; i < 15; i++) {
+			var mod = (!test && ((bits >> i) & 1) == 1);
+			if (i < 8) {
+				this.modules[8][this.moduleCount - i - 1] = mod;
+			} else if (i < 9) {
+				this.modules[8][15 - i - 1 + 1] = mod;
+			} else {
+				this.modules[8][15 - i - 1] = mod;
+			}
+		}
+		this.modules[this.moduleCount - 8][8] = (!test);
+	}
+	mapData(data, maskPattern) {
+		var inc = -1;
+		var row = this.moduleCount - 1;
+		var bitIndex = 7;
+		var byteIndex = 0;
+		for (var col = this.moduleCount - 1; col > 0; col -= 2) {
+			if (col == 6) col--;
+			while (true) {
+				for (var c = 0; c < 2; c++) {
+					if (this.modules[row][col - c] == null) {
+						var dark = false;
+						if (byteIndex < data.length) {
+							dark = (((data[byteIndex] >>> bitIndex) & 1) == 1);
+						}
+						var mask = QRUtil.getMask(maskPattern, row, col - c);
+						if (mask) {
+							dark = !dark;
+						}
+						this.modules[row][col - c] = dark;
+						bitIndex--;
+						if (bitIndex == -1) {
+							byteIndex++;
+							bitIndex = 7;
+						}
+					}
+				}
+				row += inc;
+				if (row < 0 || this.moduleCount <= row) {
+					row -= inc;
+					inc = -inc;
+					break;
+				}
+			}
+		}
+	}
+	static createData(typeNumber, errorCorrectLevel, dataList) {
+		var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
+		var buffer = new QRBitBuffer();
+		for (var i = 0; i < dataList.length; i++) {
+			var data = dataList[i];
+			buffer.put(data.mode, 4);
+			buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));
+			data.write(buffer);
+		}
+		var totalDataCount = 0;
+		for (var i = 0; i < rsBlocks.length; i++) {
+			totalDataCount += rsBlocks[i].dataCount;
+		}
+		if (buffer.getLengthInBits() > totalDataCount * 8) {
+			throw new Error("code length overflow. (" +
+				buffer.getLengthInBits() +
+				">" +
+				totalDataCount * 8 +
+				")");
+		}
+		if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
+			buffer.put(0, 4);
+		}
+		while (buffer.getLengthInBits() % 8 != 0) {
+			buffer.putBit(false);
+		}
+		while (true) {
+			if (buffer.getLengthInBits() >= totalDataCount * 8) {
+				break;
+			}
+			buffer.put(QRCodeModel.PAD0, 8);
+			if (buffer.getLengthInBits() >= totalDataCount * 8) {
+				break;
+			}
+			buffer.put(QRCodeModel.PAD1, 8);
+		}
+		return QRCodeModel.createBytes(buffer, rsBlocks);
+	}
+	static createBytes(buffer, rsBlocks) {
+		var offset = 0;
+		var maxDcCount = 0;
+		var maxEcCount = 0;
+		var dcdata = new Array(rsBlocks.length);
+		var ecdata = new Array(rsBlocks.length);
+		for (var r = 0; r < rsBlocks.length; r++) {
+			var dcCount = rsBlocks[r].dataCount;
+			var ecCount = rsBlocks[r].totalCount - dcCount;
+			maxDcCount = Math.max(maxDcCount, dcCount);
+			maxEcCount = Math.max(maxEcCount, ecCount);
+			dcdata[r] = new Array(dcCount);
+			for (var i = 0; i < dcdata[r].length; i++) {
+				dcdata[r][i] = 0xff & buffer.buffer[i + offset];
+			}
+			offset += dcCount;
+			var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
+			var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);
+			var modPoly = rawPoly.mod(rsPoly);
+			ecdata[r] = new Array(rsPoly.getLength() - 1);
+			for (var i = 0; i < ecdata[r].length; i++) {
+				var modIndex = i + modPoly.getLength() - ecdata[r].length;
+				ecdata[r][i] = (modIndex >= 0) ? modPoly.get(modIndex) : 0;
+			}
+		}
+		var totalCodeCount = 0;
+		for (var i = 0; i < rsBlocks.length; i++) {
+			totalCodeCount += rsBlocks[i].totalCount;
+		}
+		var data = new Array(totalCodeCount);
+		var index = 0;
+		for (var i = 0; i < maxDcCount; i++) {
+			for (var r = 0; r < rsBlocks.length; r++) {
+				if (i < dcdata[r].length) {
+					data[index++] = dcdata[r][i];
+				}
+			}
+		}
+		for (var i = 0; i < maxEcCount; i++) {
+			for (var r = 0; r < rsBlocks.length; r++) {
+				if (i < ecdata[r].length) {
+					data[index++] = ecdata[r][i];
+				}
+			}
+		}
+		return data;
+	}
+};

+ 6 - 0
components/xinyu-canvas-drawer/qrcode/QRErrorCorrectLevel.js

@@ -0,0 +1,6 @@
+export default {
+	L: 1,
+	M: 0,
+	Q: 3,
+	H: 2
+};

+ 10 - 0
components/xinyu-canvas-drawer/qrcode/QRMaskPattern.js

@@ -0,0 +1,10 @@
+export default {
+	PATTERN000: 0,
+	PATTERN001: 1,
+	PATTERN010: 2,
+	PATTERN011: 3,
+	PATTERN100: 4,
+	PATTERN101: 5,
+	PATTERN110: 6,
+	PATTERN111: 7
+};

+ 30 - 0
components/xinyu-canvas-drawer/qrcode/QRMath.js

@@ -0,0 +1,30 @@
+class QRMath {
+	static EXP_TABLE = new Array(256);
+	static LOG_TABLE = new Array(256);
+	static glog(n) {
+		if (n < 1) {
+			throw new Error("glog(" + n + ")");
+		}
+		return QRMath.LOG_TABLE[n];
+	}
+	static gexp(n) {
+		while (n < 0) {
+			n += 255;
+		}
+		while (n >= 256) {
+			n -= 255;
+		}
+		return QRMath.EXP_TABLE[n];
+	}
+};
+for (var i = 0; i < 8; i++) {
+	QRMath.EXP_TABLE[i] = 1 << i;
+}
+for (var i = 8; i < 256; i++) {
+	QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath
+		.EXP_TABLE[i - 8];
+}
+for (var i = 0; i < 255; i++) {
+	QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
+}
+export default QRMath;

+ 6 - 0
components/xinyu-canvas-drawer/qrcode/QRMode.js

@@ -0,0 +1,6 @@
+export default {
+	MODE_NUMBER: 1 << 0,
+	MODE_ALPHA_NUM: 1 << 1,
+	MODE_8BIT_BYTE: 1 << 2,
+	MODE_KANJI: 1 << 3
+};

+ 45 - 0
components/xinyu-canvas-drawer/qrcode/QRPolynomial.js

@@ -0,0 +1,45 @@
+import QRMath from "./QRMath";
+export default class QRPolynomial {
+	constructor(num, shift) {
+		if (num.length == undefined) {
+			throw new Error(num.length + "/" + shift);
+		}
+		var offset = 0;
+		while (offset < num.length && num[offset] == 0) {
+			offset++;
+		}
+		this.num = new Array(num.length - offset + shift);
+		for (var i = 0; i < num.length - offset; i++) {
+			this.num[i] = num[i + offset];
+		}
+	}
+	get(index) {
+		return this.num[index];
+	}
+	getLength() {
+		return this.num.length;
+	}
+	multiply(e) {
+		var num = new Array(this.getLength() + e.getLength() - 1);
+		for (var i = 0; i < this.getLength(); i++) {
+			for (var j = 0; j < e.getLength(); j++) {
+				num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)));
+			}
+		}
+		return new QRPolynomial(num, 0);
+	}
+	mod(e) {
+		if (this.getLength() - e.getLength() < 0) {
+			return this;
+		}
+		var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));
+		var num = new Array(this.getLength());
+		for (var i = 0; i < this.getLength(); i++) {
+			num[i] = this.get(i);
+		}
+		for (var i = 0; i < e.getLength(); i++) {
+			num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);
+		}
+		return new QRPolynomial(num, 0).mod(e);
+	}
+};

+ 202 - 0
components/xinyu-canvas-drawer/qrcode/QRRSBlock.js

@@ -0,0 +1,202 @@
+import QRErrorCorrectLevel from "./QRErrorCorrectLevel.js";
+export default class QRRSBlock {
+	static RS_BLOCK_TABLE = [
+		[1, 26, 19],
+		[1, 26, 16],
+		[1, 26, 13],
+		[1, 26, 9],
+		[1, 44, 34],
+		[1, 44, 28],
+		[1, 44, 22],
+		[1, 44, 16],
+		[1, 70, 55],
+		[1, 70, 44],
+		[2, 35, 17],
+		[2, 35, 13],
+		[1, 100, 80],
+		[2, 50, 32],
+		[2, 50, 24],
+		[4, 25, 9],
+		[1, 134, 108],
+		[2, 67, 43],
+		[2, 33, 15, 2, 34, 16],
+		[2, 33, 11, 2, 34, 12],
+		[2, 86, 68],
+		[4, 43, 27],
+		[4, 43, 19],
+		[4, 43, 15],
+		[2, 98, 78],
+		[4, 49, 31],
+		[2, 32, 14, 4, 33, 15],
+		[4, 39, 13, 1, 40, 14],
+		[2, 121, 97],
+		[2, 60, 38, 2, 61, 39],
+		[4, 40, 18, 2, 41, 19],
+		[4, 40, 14, 2, 41, 15],
+		[2, 146, 116],
+		[3, 58, 36, 2, 59, 37],
+		[4, 36, 16, 4, 37, 17],
+		[4, 36, 12, 4, 37, 13],
+		[2, 86, 68, 2, 87, 69],
+		[4, 69, 43, 1, 70, 44],
+		[6, 43, 19, 2, 44, 20],
+		[6, 43, 15, 2, 44, 16],
+		[4, 101, 81],
+		[1, 80, 50, 4, 81, 51],
+		[4, 50, 22, 4, 51, 23],
+		[3, 36, 12, 8, 37, 13],
+		[2, 116, 92, 2, 117, 93],
+		[6, 58, 36, 2, 59, 37],
+		[4, 46, 20, 6, 47, 21],
+		[7, 42, 14, 4, 43, 15],
+		[4, 133, 107],
+		[8, 59, 37, 1, 60, 38],
+		[8, 44, 20, 4, 45, 21],
+		[12, 33, 11, 4, 34, 12],
+		[3, 145, 115, 1, 146, 116],
+		[4, 64, 40, 5, 65, 41],
+		[11, 36, 16, 5, 37, 17],
+		[11, 36, 12, 5, 37, 13],
+		[5, 109, 87, 1, 110, 88],
+		[5, 65, 41, 5, 66, 42],
+		[5, 54, 24, 7, 55, 25],
+		[11, 36, 12],
+		[5, 122, 98, 1, 123, 99],
+		[7, 73, 45, 3, 74, 46],
+		[15, 43, 19, 2, 44, 20],
+		[3, 45, 15, 13, 46, 16],
+		[1, 135, 107, 5, 136, 108],
+		[10, 74, 46, 1, 75, 47],
+		[1, 50, 22, 15, 51, 23],
+		[2, 42, 14, 17, 43, 15],
+		[5, 150, 120, 1, 151, 121],
+		[9, 69, 43, 4, 70, 44],
+		[17, 50, 22, 1, 51, 23],
+		[2, 42, 14, 19, 43, 15],
+		[3, 141, 113, 4, 142, 114],
+		[3, 70, 44, 11, 71, 45],
+		[17, 47, 21, 4, 48, 22],
+		[9, 39, 13, 16, 40, 14],
+		[3, 135, 107, 5, 136, 108],
+		[3, 67, 41, 13, 68, 42],
+		[15, 54, 24, 5, 55, 25],
+		[15, 43, 15, 10, 44, 16],
+		[4, 144, 116, 4, 145, 117],
+		[17, 68, 42],
+		[17, 50, 22, 6, 51, 23],
+		[19, 46, 16, 6, 47, 17],
+		[2, 139, 111, 7, 140, 112],
+		[17, 74, 46],
+		[7, 54, 24, 16, 55, 25],
+		[34, 37, 13],
+		[4, 151, 121, 5, 152, 122],
+		[4, 75, 47, 14, 76, 48],
+		[11, 54, 24, 14, 55, 25],
+		[16, 45, 15, 14, 46, 16],
+		[6, 147, 117, 4, 148, 118],
+		[6, 73, 45, 14, 74, 46],
+		[11, 54, 24, 16, 55, 25],
+		[30, 46, 16, 2, 47, 17],
+		[8, 132, 106, 4, 133, 107],
+		[8, 75, 47, 13, 76, 48],
+		[7, 54, 24, 22, 55, 25],
+		[22, 45, 15, 13, 46, 16],
+		[10, 142, 114, 2, 143, 115],
+		[19, 74, 46, 4, 75, 47],
+		[28, 50, 22, 6, 51, 23],
+		[33, 46, 16, 4, 47, 17],
+		[8, 152, 122, 4, 153, 123],
+		[22, 73, 45, 3, 74, 46],
+		[8, 53, 23, 26, 54, 24],
+		[12, 45, 15, 28, 46, 16],
+		[3, 147, 117, 10, 148, 118],
+		[3, 73, 45, 23, 74, 46],
+		[4, 54, 24, 31, 55, 25],
+		[11, 45, 15, 31, 46, 16],
+		[7, 146, 116, 7, 147, 117],
+		[21, 73, 45, 7, 74, 46],
+		[1, 53, 23, 37, 54, 24],
+		[19, 45, 15, 26, 46, 16],
+		[5, 145, 115, 10, 146, 116],
+		[19, 75, 47, 10, 76, 48],
+		[15, 54, 24, 25, 55, 25],
+		[23, 45, 15, 25, 46, 16],
+		[13, 145, 115, 3, 146, 116],
+		[2, 74, 46, 29, 75, 47],
+		[42, 54, 24, 1, 55, 25],
+		[23, 45, 15, 28, 46, 16],
+		[17, 145, 115],
+		[10, 74, 46, 23, 75, 47],
+		[10, 54, 24, 35, 55, 25],
+		[19, 45, 15, 35, 46, 16],
+		[17, 145, 115, 1, 146, 116],
+		[14, 74, 46, 21, 75, 47],
+		[29, 54, 24, 19, 55, 25],
+		[11, 45, 15, 46, 46, 16],
+		[13, 145, 115, 6, 146, 116],
+		[14, 74, 46, 23, 75, 47],
+		[44, 54, 24, 7, 55, 25],
+		[59, 46, 16, 1, 47, 17],
+		[12, 151, 121, 7, 152, 122],
+		[12, 75, 47, 26, 76, 48],
+		[39, 54, 24, 14, 55, 25],
+		[22, 45, 15, 41, 46, 16],
+		[6, 151, 121, 14, 152, 122],
+		[6, 75, 47, 34, 76, 48],
+		[46, 54, 24, 10, 55, 25],
+		[2, 45, 15, 64, 46, 16],
+		[17, 152, 122, 4, 153, 123],
+		[29, 74, 46, 14, 75, 47],
+		[49, 54, 24, 10, 55, 25],
+		[24, 45, 15, 46, 46, 16],
+		[4, 152, 122, 18, 153, 123],
+		[13, 74, 46, 32, 75, 47],
+		[48, 54, 24, 14, 55, 25],
+		[42, 45, 15, 32, 46, 16],
+		[20, 147, 117, 4, 148, 118],
+		[40, 75, 47, 7, 76, 48],
+		[43, 54, 24, 22, 55, 25],
+		[10, 45, 15, 67, 46, 16],
+		[19, 148, 118, 6, 149, 119],
+		[18, 75, 47, 31, 76, 48],
+		[34, 54, 24, 34, 55, 25],
+		[20, 45, 15, 61, 46, 16]
+	];
+	constructor(totalCount, dataCount) {
+		this.totalCount = totalCount;
+		this.dataCount = dataCount;
+	}
+
+	static getRSBlocks(typeNumber, errorCorrectLevel) {
+		var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
+		if (rsBlock == undefined) {
+			throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" +
+				errorCorrectLevel);
+		}
+		var length = rsBlock.length / 3;
+		var list = [];
+		for (var i = 0; i < length; i++) {
+			var count = rsBlock[i * 3 + 0];
+			var totalCount = rsBlock[i * 3 + 1];
+			var dataCount = rsBlock[i * 3 + 2];
+			for (var j = 0; j < count; j++) {
+				list.push(new QRRSBlock(totalCount, dataCount));
+			}
+		}
+		return list;
+	}
+	static getRsBlockTable(typeNumber, errorCorrectLevel) {
+		switch (errorCorrectLevel) {
+			case QRErrorCorrectLevel.L:
+				return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
+			case QRErrorCorrectLevel.M:
+				return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
+			case QRErrorCorrectLevel.Q:
+				return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
+			case QRErrorCorrectLevel.H:
+				return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
+			default:
+				return undefined;
+		}
+	}
+}

+ 219 - 0
components/xinyu-canvas-drawer/qrcode/QRUtil.js

@@ -0,0 +1,219 @@
+import QRMaskPattern from "./QRMaskPattern.js";
+import QRPolynomial from "./QRPolynomial.js";
+import QRMode from "./QRMode.js";
+import QRMath from "./QRMath.js";
+export default class QRUtil {
+	static PATTERN_POSITION_TABLE = [
+		[],
+		[6, 18],
+		[6, 22],
+		[6, 26],
+		[6, 30],
+		[6, 34],
+		[6, 22, 38],
+		[6, 24, 42],
+		[6, 26, 46],
+		[6, 28, 50],
+		[6, 30, 54],
+		[6, 32, 58],
+		[6, 34, 62],
+		[6, 26, 46, 66],
+		[6, 26, 48, 70],
+		[6, 26, 50, 74],
+		[6, 30, 54, 78],
+		[6, 30, 56, 82],
+		[6, 30, 58, 86],
+		[6, 34, 62, 90],
+		[6, 28, 50, 72, 94],
+		[6, 26, 50, 74, 98],
+		[6, 30, 54, 78, 102],
+		[6, 28, 54, 80, 106],
+		[6, 32, 58, 84, 110],
+		[6, 30, 58, 86, 114],
+		[6, 34, 62, 90, 118],
+		[6, 26, 50, 74, 98, 122],
+		[6, 30, 54, 78, 102, 126],
+		[6, 26, 52, 78, 104, 130],
+		[6, 30, 56, 82, 108, 134],
+		[6, 34, 60, 86, 112, 138],
+		[6, 30, 58, 86, 114, 142],
+		[6, 34, 62, 90, 118, 146],
+		[6, 30, 54, 78, 102, 126, 150],
+		[6, 24, 50, 76, 102, 128, 154],
+		[6, 28, 54, 80, 106, 132, 158],
+		[6, 32, 58, 84, 110, 136, 162],
+		[6, 26, 54, 82, 110, 138, 166],
+		[6, 30, 58, 86, 114, 142, 170]
+	];
+	static G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);
+	static G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);
+	static G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);
+	static getBCHTypeInfo(data) {
+		var d = data << 10;
+		while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
+			d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15)));
+		}
+		return ((data << 10) | d) ^ QRUtil.G15_MASK;
+	}
+	static getBCHTypeNumber(data) {
+		var d = data << 12;
+		while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
+			d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18)));
+		}
+		return (data << 12) | d;
+	}
+	static getBCHDigit(data) {
+		var digit = 0;
+		while (data != 0) {
+			digit++;
+			data >>>= 1;
+		}
+		return digit;
+	}
+	static getPatternPosition(typeNumber) {
+		return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];
+	}
+	static getMask(maskPattern, i, j) {
+		switch (maskPattern) {
+			case QRMaskPattern.PATTERN000:
+				return (i + j) % 2 == 0;
+			case QRMaskPattern.PATTERN001:
+				return i % 2 == 0;
+			case QRMaskPattern.PATTERN010:
+				return j % 3 == 0;
+			case QRMaskPattern.PATTERN011:
+				return (i + j) % 3 == 0;
+			case QRMaskPattern.PATTERN100:
+				return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
+			case QRMaskPattern.PATTERN101:
+				return (i * j) % 2 + (i * j) % 3 == 0;
+			case QRMaskPattern.PATTERN110:
+				return ((i * j) % 2 + (i * j) % 3) % 2 == 0;
+			case QRMaskPattern.PATTERN111:
+				return ((i * j) % 3 + (i + j) % 2) % 2 == 0;
+			default:
+				throw new Error("bad maskPattern:" + maskPattern);
+		}
+	}
+	static getErrorCorrectPolynomial(errorCorrectLength) {
+		var a = new QRPolynomial([1], 0);
+		for (var i = 0; i < errorCorrectLength; i++) {
+			a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0));
+		}
+		return a;
+	}
+	static getLengthInBits(mode, type) {
+		if (1 <= type && type < 10) {
+			switch (mode) {
+				case QRMode.MODE_NUMBER:
+					return 10;
+				case QRMode.MODE_ALPHA_NUM:
+					return 9;
+				case QRMode.MODE_8BIT_BYTE:
+					return 8;
+				case QRMode.MODE_KANJI:
+					return 8;
+				default:
+					throw new Error("mode:" + mode);
+			}
+		} else if (type < 27) {
+			switch (mode) {
+				case QRMode.MODE_NUMBER:
+					return 12;
+				case QRMode.MODE_ALPHA_NUM:
+					return 11;
+				case QRMode.MODE_8BIT_BYTE:
+					return 16;
+				case QRMode.MODE_KANJI:
+					return 10;
+				default:
+					throw new Error("mode:" + mode);
+			}
+		} else if (type < 41) {
+			switch (mode) {
+				case QRMode.MODE_NUMBER:
+					return 14;
+				case QRMode.MODE_ALPHA_NUM:
+					return 13;
+				case QRMode.MODE_8BIT_BYTE:
+					return 16;
+				case QRMode.MODE_KANJI:
+					return 12;
+				default:
+					throw new Error("mode:" + mode);
+			}
+		} else {
+			throw new Error("type:" + type);
+		}
+	}
+	static getLostPoint(qrCode) {
+		var moduleCount = qrCode.getModuleCount();
+		var lostPoint = 0;
+		for (var row = 0; row < moduleCount; row++) {
+			for (var col = 0; col < moduleCount; col++) {
+				var sameCount = 0;
+				var dark = qrCode.isDark(row, col);
+				for (var r = -1; r <= 1; r++) {
+					if (row + r < 0 || moduleCount <= row + r) {
+						continue;
+					}
+					for (var c = -1; c <= 1; c++) {
+						if (col + c < 0 || moduleCount <= col + c) {
+							continue;
+						}
+						if (r == 0 && c == 0) {
+							continue;
+						}
+						if (dark == qrCode.isDark(row + r, col + c)) {
+							sameCount++;
+						}
+					}
+				}
+				if (sameCount > 5) {
+					lostPoint += (3 + sameCount - 5);
+				}
+			}
+		}
+		for (var row = 0; row < moduleCount - 1; row++) {
+			for (var col = 0; col < moduleCount - 1; col++) {
+				var count = 0;
+				if (qrCode.isDark(row, col)) count++;
+				if (qrCode.isDark(row + 1, col)) count++;
+				if (qrCode.isDark(row, col + 1)) count++;
+				if (qrCode.isDark(row + 1, col + 1)) count++;
+				if (count == 0 || count == 4) {
+					lostPoint += 3;
+				}
+			}
+		}
+		for (var row = 0; row < moduleCount; row++) {
+			for (var col = 0; col < moduleCount - 6; col++) {
+				if (qrCode.isDark(row, col) && !qrCode.isDark(row, col + 1) && qrCode.isDark(row, col +
+						2) && qrCode.isDark(row, col + 3) && qrCode.isDark(row, col + 4) && !qrCode
+					.isDark(row, col + 5) && qrCode.isDark(row, col + 6)) {
+					lostPoint += 40;
+				}
+			}
+		}
+		for (var col = 0; col < moduleCount; col++) {
+			for (var row = 0; row < moduleCount - 6; row++) {
+				if (qrCode.isDark(row, col) && !qrCode.isDark(row + 1, col) && qrCode.isDark(row + 2,
+						col) && qrCode.isDark(row + 3, col) && qrCode.isDark(row + 4, col) && !qrCode
+					.isDark(row + 5, col) && qrCode.isDark(row + 6, col)) {
+					lostPoint += 40;
+				}
+			}
+		}
+		var darkCount = 0;
+		for (var col = 0; col < moduleCount; col++) {
+			for (var row = 0; row < moduleCount; row++) {
+				if (qrCode.isDark(row, col)) {
+					darkCount++;
+				}
+			}
+		}
+		var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
+		lostPoint += ratio * 10;
+		return lostPoint;
+	}
+};

+ 52 - 0
components/xinyu-canvas-drawer/readme.md

@@ -0,0 +1,52 @@
+# xinyu-canvas-drawer-uniapp
+uniapp中使用canvas绘制图片的一款组件,可用于海报、分享图等各种图的绘制,多端通用,内聚了所有图片加载处理的过程。组件由原本的旧版Canvas改为现在的Canvas2D,兼容了微信小程序、APP、网页H5三端,修复了二维码的绘制问题!
+
+# 引入教程:
+在页面中引入组件并注册:
+```js
+import XinyuCanvasDrawer from "@/uni_modules/xinyu-canvas-drawer/index.vue";
+export default{
+	components: {
+		XinyuCanvasDrawer
+	}
+}
+```
+在页面中使用:
+```html
+<xinyu-canvas-drawer ref="poster" :width="750" :height="750"></xinyu-canvas-drawer>
+<image :src="src" style="width: 750rpx;height: 750rpx;"></image>
+```
+
+# 组件介绍
+其中width为待绘制的图片目标宽度,height为目标高度,单位为px。这个尺寸的canvas不会显示在页面上,渲染过程会在页面外部进行。
+渲染的图片过程需要通过js部分控制,执行draw方法后的Promise返回的内容为图片的Base64编码,可以通过脚本逻辑控制后续处理~
+
+# 渲染过程
+渲染过程采用链式操作方法,此方法只能在mounted之后运行,因为没有mounted时$refs.poster是undefined:
+```js
+let posterRef = this.$refs.poster;
+uni.showLoading({
+	title: "渲染海报中"
+});
+this.src = await posterRef
+	.setBackgroundColor("#F4F4F4") //指定渲染图片的背景色
+	.addRect(0, 0, 750, 198, "#FEFEFE") //绘制矩形
+	.addImage(require("@/static/logo.jpg"), 32, 48, 98, 98, true) //绘制圆图片,如果不绘制圆图片最后一个参数可以不传或传false,当最后一个参数为true时圆形的直径为w,h参数将没有意义
+	.addQRCode("http://www.shengxinyustudio.com", 585, 22, 130, 130) //绘制二维码(不要太长否则会扫不出来)
+	.addText("扫码查看我的主页", 581, 159, 20, "#333333") //绘制文本
+	.addImage(require("@/static/logo.jpg"), 19, 219, 707, 451) //绘制云端图片时第一个参数直接传云端图片地址即可,不需要require。注意不要跨域
+	.addRect(0, 690, 750, 158, "#FEFEFE")
+	.addText("欢迎来到我的网站", 19, 708, 34, "#1A59FE", 453, false)
+	.draw();
+uni.hideLoading();
+```
+链式操作内置了背景图设置、矩形的绘制、本地/云端图片的绘制、二维码绘制与文本绘制五种绘制功能。最终draw方法返回的是Promise对象,也只有调用draw方法await成功后才可以认为渲染完成了。
+
+# 保存图片
+保存图片过程我已经集成了,只需要通过ref调用即可~
+```js
+this.$refs.poster.saveImageToPhotosAlbum(this.src);
+```
+
+# 更多
+更多的内容就不细说了。组件中有完整的代码注释哦~ 本代码我会持续更新!

+ 501 - 0
components/xinyu-canvas-drawer/xinyu-cross-canvas/xinyu-cross-canvas.vue

@@ -0,0 +1,501 @@
+<template>
+	<view>
+		<view
+			:style="{width: styleWidth == -1 ? rpx(750) : rpx(styleWidth),height: styleHeight == -1 ? '100vh' : rpx(styleWidth)}">
+			<!-- #ifdef MP-ALIPAY -->
+			<canvas type="2d" :disable-scroll="true"
+				:style="{width: styleWidth == -1 ? rpx(750) : rpx(styleWidth),height: styleHeight == -1 ? '100vh' : rpx(styleWidth)}"
+				@touchstart="onTouch('start', $event)" @touchmove="onTouch('move', $event)"
+				@touchend="onTouch('end', $event)" :id="id" @ready="onCanvasInitReadyAlipay"></canvas>
+			<!-- #endif -->
+			<!-- #ifdef MP-WEIXIN || MP-TOUTIAO -->
+			<canvas type="2d" :disable-scroll="true"
+				:style="{width: styleWidth == -1 ? rpx(750) : rpx(styleWidth),height: styleHeight == -1 ? '100vh' : rpx(styleWidth)}"
+				@touchstart="onTouch('start', $event)" @touchmove="onTouch('move', $event)"
+				@touchend="onTouch('end', $event)" :id="id"></canvas>
+			<!-- #endif -->
+			<!-- #ifndef MP -->
+			<view :renderjs_data="renderjsContextProp" :change:renderjs_data="xinyucrosscanvas.setContextPropRenderjs">
+			</view>
+			<view :renderjs_data="renderjsContextMethodCall"
+				:change:renderjs_data="xinyucrosscanvas.callContextMethodRenderjs">
+			</view>
+			<view :renderjs_data="renderjsData" :change:renderjs_data="xinyucrosscanvas.refreshDataRenderjs"></view>
+			<view :renderjs_data="renderJSMountedEvent" :change:renderjs_data="xinyucrosscanvas.onMountedRenderjs">
+			</view>
+			<view :renderjs_data="renderJSLoadImage" :change:renderjs_data="xinyucrosscanvas.loadImageRenderjs">
+			</view>
+			<view class="xinyucrosscanvas"></view>
+			<!-- #endif -->
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			id: {
+				type: String,
+				default: "xinyu_cross_canvas"
+			},
+			styleWidth: {
+				type: Number,
+				default: -1
+			},
+			styleHeight: {
+				type: Number,
+				default: -1
+			},
+			width: {
+				type: Number,
+				default: 750
+			},
+			height: {
+				type: Number,
+				default: 1506
+			}
+		},
+		data() {
+			return {
+				renderjsData: null,
+				renderJSMountedEvent: false,
+				renderjsContextProp: null,
+				renderjsContextMethodCall: null,
+				renderJSLoadImage: null,
+				inited: false,
+				recvMethod: {},
+				currentGenerateIndex: 0,
+				downXY: {
+					x: 0,
+					y: 0
+				},
+			};
+		},
+		async mounted() {
+			this.imageHash = [];
+			this.refreshRenderJS();
+			this.renderJSMountedEvent = true;
+			// #ifdef MP-WEIXIN || MP-TOUTIAO
+			await this.onCanvasInitReady();
+			this.inited = true;
+			// #endif
+		},
+		methods: {
+			async refreshWidthHeight(width, height) {
+				this.$emit("input:width", width);
+				this.$emit("input:height", height);
+				// #ifdef MP
+				if (this.canvas) {
+					this.canvas.width = width;
+					this.canvas.height = height;
+				}
+				// #endif
+				// #ifndef MP
+				await new Promise((recv) => {
+					this.renderjsData = this.generateObject({
+						widthRenderJS: width,
+						heightRenderJS: height
+					});
+					this.recvMethod.refreshRenderJSCallback = recv;
+				});
+				delete this.recvMethod.refreshRenderJSCallback;
+				// #endif
+			},
+			generateObject(obj) {
+				obj.__ = Date.now() + "_" + this.currentGenerateIndex++;
+				return obj;
+			},
+			rpx(rpx) {
+				return uni.upx2px(rpx) + 'px';
+			},
+			onInitFinished() {
+				this.inited = true;
+			},
+			onRenderCallback(callbackObject) {
+				let {
+					func,
+					param
+				} = callbackObject;
+				if (this.recvMethod[func])
+					this.recvMethod[func].apply(this.recvMethod[func], [param]);
+			},
+			onTouchREvent(e) {
+				this.$emit("ctouch", e);
+			},
+			onTClick(e) {
+				this.$emit("cclick", e);
+			},
+			onTouch(type, e) {
+				const px = Math.round(e.changedTouches[0].x / uni.getSystemInfoSync().screenWidth * this.width);
+				const py = Math.round(e.changedTouches[0].y / uni.getSystemInfoSync().screenHeight * this.height);
+				this.$emit("touch", {
+					type,
+					px,
+					py
+				});
+				if (type == "start") {
+					this.downXY.x = px;
+					this.downXY.y = py;
+				} else if (type == "end") {
+					if ((this.downXY.x - px) * (this.downXY.x - px) + (this.downXY.y - py) * (this.downXY.y - py) < 64)
+						this.onTClick({
+							px,
+							py
+						});
+					this.downXY.x = 0;
+					this.downXY.y = 0;
+				}
+			},
+			getImageHash(src) {
+				let ret = this.imageHash.filter((t) => t.key == src);
+				if (ret.length > 0)
+					return ret[0].val;
+				return null;
+			},
+			setImageHash(src, image) {
+				this.imageHash.push({
+					key: src,
+					val: image
+				});
+			},
+			async loadImage(src) {
+				// #ifdef MP
+				await new Promise((recv) => {
+					if (this.getImageHash(src))
+						return recv(this.getImageHash(src));
+					const img = this.canvas.createImage();
+					this.setImageHash(src, img);
+					img.onload = () => {
+						recv(img);
+					};
+					img.src = src;
+				});
+				// #endif
+				// #ifndef MP
+				await new Promise((recv) => {
+					if (src == this.renderJSLoadImage)
+						return recv();
+					this.renderJSLoadImage = src;
+					this.recvMethod.loadImageRenderJSCallback = recv;
+				});
+				delete this.recvMethod.loadImageRenderJSCallback;
+				// #endif
+				return src;
+			},
+			async loadImageCacheMP(src) {
+				return await new Promise((recv) => {
+					if (this.getImageHash(src))
+						return recv(this.getImageHash(src));
+					const img = this.canvas.createImage();
+					this.setImageHash(src, img);
+					img.onload = () => {
+						recv(img);
+					};
+					img.src = src;
+				});
+			},
+			async drawImage(src, methodParams) {
+				// #ifdef MP
+				let image = await this.loadImageCacheMP(src);
+				this.context["drawImage"].apply(this.context, [image].concat(methodParams));
+				// #endif
+				// #ifndef MP
+				await new Promise((recv) => {
+					this.renderjsContextMethodCall = this.generateObject({
+						methodName: "drawImage",
+						methodParams: [src].concat(methodParams)
+					});
+					this.recvMethod.callContextMethodCallback = recv;
+				});
+				delete this.recvMethod.callContextMethodCallback;
+				// #endif
+			},
+			async init() {
+				while (true) {
+					if (this.inited)
+						return;
+					await this.refreshRenderJS();
+					await new Promise((t) => setTimeout(t, 200));
+				}
+			},
+			async onCanvasInitReady() {
+				await new Promise((recv) => {
+					uni.createSelectorQuery()
+						.in(this)
+						.select("#" + this.id)
+						.fields({
+							node: true,
+							size: true
+						})
+						.exec((res) => {
+							this.canvas = res[0].node;
+							this.canvas.width = this.width;
+							this.canvas.height = this.height;
+							this.context = this.canvas.getContext("2d");
+							recv();
+						});
+				});
+			},
+			async onCanvasInitReadyAlipay() {
+				await new Promise((recv) => {
+					my.createSelectorQuery()
+						.in(this)
+						.select("#" + this.id)
+						.node()
+						.exec((res) => {
+							this.canvas = res[0].node;
+							this.canvas.width = this.width;
+							this.canvas.height = this.height;
+							this.context = this.canvas.getContext("2d");
+							this.inited = true;
+							recv();
+						});
+				});
+			},
+			async refreshRenderJS() {
+				// #ifdef MP
+				if (this.canvas && (this.canvas.width != this.width || this.canvas.height != this.height)) {
+					this.canvas.width = this.width;
+					this.canvas.height = this.height;
+				}
+				// #endif
+				// #ifndef MP
+				await new Promise((recv) => {
+					this.renderjsData = this.generateObject({
+						styleWidthRenderJS: this.styleWidth == -1 ? uni.upx2px(750) : uni.upx2px(this
+							.styleWidth),
+						styleHeightRenderJS: this.styleHeight == -1 ? -1 : uni.upx2px(this
+							.styleHeight),
+						widthRenderJS: this.width,
+						heightRenderJS: this.height
+					});
+					this.recvMethod.refreshRenderJSCallback = recv;
+				});
+				delete this.recvMethod.refreshRenderJSCallback;
+				// #endif
+			},
+			async setContextProp(key, val) {
+				// #ifdef MP
+				this.context[key] = val;
+				// #endif
+				// #ifndef MP
+				await new Promise((recv) => {
+					this.renderjsContextProp = this.generateObject({
+						key,
+						val
+					});
+					this.recvMethod.setContextPropCallback = recv;
+				});
+				delete this.recvMethod.setContextPropCallback;
+				// #endif
+			},
+			async callContextMethod(methodName, methodParams) {
+				if (methodName == "drawImage")
+					return await this.drawImage(methodParams[0], methodParams.slice(1));
+				// #ifdef MP
+				if (methodName == "toDataURL") {
+					return this.canvas.toDataURL.apply(this.canvas, methodParams);
+				}
+				return this.context[methodName].apply(this.context, methodParams);
+				// #endif
+				// #ifndef MP
+				let ret = await new Promise((recv) => {
+					this.renderjsContextMethodCall = this.generateObject({
+						methodName,
+						methodParams
+					});
+					this.recvMethod.callContextMethodCallback = recv;
+				});
+				delete this.recvMethod.callContextMethodCallback;
+				return ret;
+				// #endif
+			},
+			async fillRectList(rectList) {
+				// #ifdef MP
+				for (let i in rectList) {
+					this.context.fillStyle = rectList[i].fillStyle;
+					this.context.fillRect(rectList[i].x, rectList[i].y, rectList[i].w, rectList[i].h);
+				}
+				// #endif
+				// #ifndef MP
+				let ret = await new Promise((recv) => {
+					this.renderjsContextMethodCall = this.generateObject({
+						methodName: "fillRectList",
+						methodParams: [rectList]
+					});
+					this.recvMethod.callContextMethodCallback = recv;
+				});
+				delete this.recvMethod.callContextMethodCallback;
+				return ret;
+				// #endif
+			}
+		}
+	}
+</script>
+
+<script module="xinyucrosscanvas" lang="renderjs">
+	// #ifndef MP
+	export default {
+		data() {
+			return {
+				canvasRenderJS: null,
+				contextRenderJS: null,
+				styleWidthRenderJS: -1,
+				styleHeightRenderJS: -1,
+				widthRenderJS: 750,
+				heightRenderJS: 1506,
+				initedRenderJS: false,
+				downXYRenderJS: {
+					x: 0,
+					y: 0
+				},
+				imageHashRenderJS: []
+			};
+		},
+		methods: {
+			getImageHashRenderjs(src) {
+				let ret = this.imageHashRenderJS.filter((t) => t.key == src);
+				if (ret.length > 0)
+					return ret[0].val;
+				return null;
+			},
+			setImageHashRenderjs(src, image) {
+				this.imageHashRenderJS.push({
+					key: src,
+					val: image
+				});
+			},
+			onMountedRenderjs(bool) {
+				if (!bool || this.initedRenderJS)
+					return;
+				this.initedRenderJS = true;
+				this.canvasRenderJS = document.createElement("canvas");
+				this.canvasRenderJS.style.width = this.styleWidthRenderJS + 'px';
+				this.canvasRenderJS.style.height = (this.styleHeightRenderJS == -1 ? window.innerHeight : this
+					.styleHeightRenderJS) + 'px';
+				this.canvasRenderJS.width = this.widthRenderJS;
+				this.canvasRenderJS.height = this.heightRenderJS;
+				this.contextRenderJS = this.canvasRenderJS.getContext('2d');
+				this.canvasRenderJS.ontouchstart = (e) => {
+					this.onRenderjsTouch('start', e);
+				};
+				this.canvasRenderJS.ontouchmove = (e) => {
+					this.onRenderjsTouch('move', e);
+				};
+				this.canvasRenderJS.ontouchend = (e) => {
+					this.onRenderjsTouch('end', e);
+				};
+				document.getElementsByClassName("xinyucrosscanvas")[0].appendChild(this.canvasRenderJS);
+				this.$ownerInstance.callMethod("onInitFinished");
+			},
+			refreshDataRenderjs(data) {
+				if (data == null)
+					return;
+
+				if (this.canvasRenderJS != null) {
+					if (data.widthRenderJS != this.widthRenderJS || data.heightRenderJS != this.heightRenderJS) {
+						this.canvasRenderJS.width = data.widthRenderJS;
+						this.canvasRenderJS.height = data.heightRenderJS;
+					}
+					this.canvasRenderJS.style.width = this.styleWidthRenderJS + 'px';
+					this.canvasRenderJS.style.height = (this.styleHeightRenderJS == -1 ? window.innerHeight : this
+						.styleHeightRenderJS) + 'px';
+				}
+
+				Object.assign(this, data);
+				this.$nextTick(() => {
+					this.$ownerInstance.callMethod("onRenderCallback", {
+						func: "refreshRenderJSCallback",
+						param: null
+					});
+				});
+			},
+			async loadImageRenderjs(src) {
+				if (src != null)
+					await this.loadRenderJSImageCache(src);
+				this.$ownerInstance.callMethod("onRenderCallback", {
+					func: "loadImageRenderJSCallback",
+					param: null
+				});
+			},
+			async loadRenderJSImageCache(src) {
+				if (src.startsWith("/"))
+					src = "." + src;
+				return await new Promise((recv) => {
+					if (this.getImageHashRenderjs(src))
+						return recv(this.getImageHashRenderjs(src));
+					const img = new Image();
+					img.setAttribute("crossOrigin", 'anonymous');
+					this.setImageHashRenderjs(src, img);
+					img.onload = () => {
+						recv(img);
+					};
+					img.src = src;
+					if (img.complete)
+						recv(img);
+				});
+			},
+			setContextPropRenderjs(prop) {
+				if (prop == null)
+					return;
+				this.contextRenderJS[prop.key] = prop.val;
+				this.$ownerInstance.callMethod("onRenderCallback", {
+					func: "setContextPropCallback",
+					param: null
+				});
+			},
+			async callContextMethodRenderjs(prop) {
+				if (prop == null)
+					return;
+				let ret = null;
+				if (prop.methodName == "drawImage") {
+					let param = prop.methodParams.slice(0);
+					param[0] = await this.loadRenderJSImageCache(param[0]);
+					ret = this.contextRenderJS.drawImage.apply(this.contextRenderJS, param);
+				} else if (prop.methodName == "toDataURL") {
+					ret = this.canvasRenderJS.toDataURL.apply(this.canvasRenderJS, prop.methodParams);
+				} else if (prop.methodName == "fillRectList") {
+					let rectList = prop.methodParams[0];
+					for (let i in rectList) {
+						this.contextRenderJS.fillStyle = rectList[i].fillStyle;
+						this.contextRenderJS.fillRect(rectList[i].x, rectList[i].y, rectList[i].w, rectList[i].h);
+					}
+				} else
+					ret = this.contextRenderJS[prop.methodName].apply(this.contextRenderJS, prop.methodParams);
+				this.$ownerInstance.callMethod("onRenderCallback", {
+					func: "callContextMethodCallback",
+					param: ret
+				});
+			},
+			onRenderjsTouch(type, e) {
+				let canvasPosition = this.canvasRenderJS.getBoundingClientRect();
+				const px = Math.round((e.changedTouches[0].clientX - canvasPosition.x) / uni.getSystemInfoSync()
+					.screenWidth * this.width);
+				const py = Math.round((e.changedTouches[0].clientY - canvasPosition.y) / uni.getSystemInfoSync()
+					.screenHeight * this.height);
+				this.$ownerInstance.callMethod("onTouchREvent", {
+					type,
+					px,
+					py
+				});
+				if (type == "start") {
+					this.downXYRenderJS.x = px;
+					this.downXYRenderJS.y = py;
+				} else if (type == "end") {
+					if ((this.downXYRenderJS.x - px) * (this.downXYRenderJS.x - px) + (this.downXYRenderJS.y - py) * (this
+							.downXYRenderJS.y - py) < 64)
+						this.$ownerInstance.callMethod("onTClick", {
+							px,
+							py
+						});
+					this.downXYRenderJS.x = 0;
+					this.downXYRenderJS.y = 0;
+				}
+			}
+		}
+	};
+	// #endif
+</script>
+
+<style>
+</style>

+ 15 - 11
pages/index/index.vue

@@ -1,9 +1,8 @@
 <template>
 	<view class="index-page">
 		<view class="index-navbar">
-			<view style="position: relative;overflow: hidden;" :style="{'height': 'calc('+navheight+'px + 322rpx  )'}">
-				<image class="index-bg" src="../../static/images/index-header.png"
-					:style="{'height': 'calc('+navheight+'px + 322rpx  )'}" mode=""></image>
+			<view style="position: relative;overflow: hidden;">
+				<image :style="{height:tab1==1?'130rpx':''}" class="index-bg" src="../../static/images/index-header.png" mode=""></image>
 				<u-navbar :fixed="false" bgColor='rgba(0,0,0,0)' placeholder:safeAreaInsetTop="true" ref="nav">
 					<view id="height" class="index-header  u-flex u-row-between" slot="left"
 						style="position: relative;">
@@ -14,7 +13,7 @@
 							    fontWeight: 'bold',
 							}" :inactiveStyle="{
 							    color: '#606266',
-							}" itemStyle=" padding-right: 15px; height: 34px;" @click="TabsTop">
+							}" itemStyle="font-size:36rpx; padding-right: 15px; height: 34px;" @click="TabsTop">
 							</u-tabs>
 						</view>
 						<view class="" style="" @click="toindexsearch">
@@ -42,9 +41,9 @@
 						<scroll-view scroll-x="true" class="" style="white-space: nowrap;width: 500rpx;">
 							<text style="margin-right: 10rpx;display: inline-block;"
 								v-for="(item,index) in job_intention" :key="index"
-								@click="changeid(index,item.category_industry_id)"
+								@click="changeid(index,item.category_job_id)"
 								:style="{'color' : index==colo?'#000':'#606266'}">
-								{{item.category_industry_name||""}}
+								{{item.category_job_name||""}}
 							</text>
 						</scroll-view>
 						<!-- <scroll-view></scroll-view> -->
@@ -200,6 +199,7 @@
 				job_intention: [],
 				id: "",
 				navheight: null,
+				category_job_id: "",
 				colo: 0,
 			}
 		},
@@ -246,7 +246,7 @@
 			},
 			changeid(index, id) {
 				this.colo = index
-				this.category_industry_id = id
+				this.category_job_id = id
 				console.log(id);
 				this.getlist()
 			},
@@ -360,7 +360,7 @@
 					search_data: {
 						...this.search_data,
 						city_id: this.city.id,
-						category_industry_id: this.category_industry_id
+						category_job_id: this.category_job_id
 					}
 				}).then(res => {
 					if (this.page == 1) {
@@ -482,7 +482,7 @@
 		align-items: center;
 		width: 750rpx;
 		height: 70vh;
-		margin-top: 180rpx;
+		// margin-top: 180rpx;
 
 		text {
 			width: 312rpx;
@@ -718,7 +718,7 @@
 
 
 			.header-down {
-				height: 92rpx;
+				// height: 92rpx;
 				padding: 20rpx 24rpx;
 				box-sizing: border-box;
 
@@ -762,7 +762,7 @@
 				left: 0;
 				z-index: -1;
 				width: 750rpx;
-				height: 352rpx;
+				// height: 352rpx;
 
 			}
 		}
@@ -810,4 +810,8 @@
 	::v-deep .u-navbar__content__left {
 		padding: 0 !important;
 	}
+
+	::v-deep #height .u-tabs__wrapper__nav__item__text {
+		font-size: 36rpx !important;
+	}
 </style>

+ 1 - 1
pages/login/login.vue

@@ -49,7 +49,7 @@
 			jumpToAnotherMiniProgram() {
 				uni.navigateToMiniProgram({
 					appId: 'wxdb719dbe12fa668b',
-					path: '/pages/index/index' // 要跳转的小程序路由地址
+					path: '/pages/login/login' // 要跳转的小程序路由地址
 				})
 			},
 			toxieyi(type) {

+ 9 - 5
pages/luntan/luntan.vue

@@ -10,15 +10,15 @@
 						style="width: 64rpx ; height: 64rpx; border-radius: 50rpx;" mode=""></image>
 				</view>
 				<view id="height" class="index-header  u-flex u-row-between" slot="right" style="position: relative;">
-
 					<view class="navbar-right u-flex u-flex-1">
 						<!-- <view class="right-icon">
 							<u-icon name="search" size="44"></u-icon>
 						</view> -->
 						<view class="luntan-search u-flex">
-							<u-icon name="search" size="22"></u-icon>
-							<!-- 				<input style="width: 280rpx;" type="text" placeholderStyle="font-size:30rpx"
-								placeholder="搜索你感兴趣的内容" v-model="keyword1" confirm-type="search" @confirm="tosearch(1)"> -->
+							<input v-if="searchshow" style="width: 280rpx;" type="text"
+								placeholderStyle="font-size:30rpx" placeholder="搜索你感兴趣的内容" v-model="keyword1"
+								confirm-type="search" @input="tosearch(1)" @clear='tosearch(1)'>
+							<u-icon @click="search_show" name="search" size="22"></u-icon>
 						</view>
 						<view class="right-icon" @click="toxiaoxi">
 							<u-badge type="error" count="7" :offset="[-8,-8]"></u-badge>
@@ -48,7 +48,7 @@
 				<zhao-text v-if="item.content" :text="item.content"></zhao-text>
 				<view v-if="item.images" class="luntan-img u-flex u-flex-wrap u-row-between">
 					<image :src="a" v-for="(a,b) in item.images.split(',')" :key="b"
-						@click.stop="openimg(item.images.split(','),b)" mode="aspectFill"></image>
+						@click.stop="openimg(item.images.split(','),b)" mode="scaleToFill"></image>
 					<view style="width: 210rpx;"></view>
 				</view>
 				<view class="quanzi-box u-flex" v-if="item.circle" @click.stop="toquanzi(item)">
@@ -139,6 +139,7 @@
 				page: 1,
 				list: [],
 				total: 0,
+				searchshow: false,
 				userinfo: {
 					group_info: {}
 				},
@@ -164,6 +165,9 @@
 			}
 		},
 		methods: {
+			search_show() {
+				this.searchshow = !this.searchshow
+			},
 			quxiaoguanzhu(item) {
 				uni.showLoading({
 					mask: true,

+ 1 - 0
pages/xiaoxi/xiaoxi.vue

@@ -181,6 +181,7 @@
 		methods: {
 			change(index) {
 				this.current = index
+				this.list = []
 				this.tabs2 = 0,
 					this.tabs1 = 0
 				this.getlist()

+ 3 - 15
pagesA/yaoqing.vue

@@ -10,9 +10,6 @@
 		<view class="login-btn2" @click="touserinfo1(1)">
 			下一步
 		</view>
-<!-- 		<view class="tiaoguo" @click="touserinfo1(2)">
-			跳过
-		</view> -->
 	</view>
 </template>
 
@@ -28,20 +25,11 @@
 		},
 		methods: {
 			touserinfo1(type) {
-				// if(type == 1){
-				// 	if(!this.invitation_code){
-				// 		this.$u.toast('请输入您的邀请码')
-				// 		return
-				// 	}
-				// }
-				if(this.invitation_code){
-					uni.setStorageSync("invitation_code",this.invitation_code)
+				if (this.invitation_code) {
+					uni.setStorageSync("invitation_code", this.invitation_code)
 				}
-				// uni.navigateTo({
-				// 	url: "/pagesA/userinfo?invitation_code=" + this.invitation_code
-				// })
 				uni.navigateTo({
-					url: "/pagesA/jianlichange"   
+					url: "/pagesA/jianlichange"
 				})
 			}
 		}

+ 55 - 19
pagesC/my-luntan.vue

@@ -86,7 +86,7 @@
 							<view class="u-flex">
 								<text class="text1">{{item.group.title}}</text>
 							</view>
-							<text class="text2">{{item.article_count}}条内容|{{item.group.follow_count}}人关注</text>
+							<text class="text2">{{item.article_count}}条内容|{{item.group.follow_count||0}}人关注</text>
 						</view>
 						<u-icon name="arrow-right" color="rgba(76, 76, 76, 0.4)"></u-icon>
 					</view>
@@ -100,9 +100,8 @@
 								<text class="text1">{{item.title}}</text>
 								<!-- <image class="img" v-if="user_id == userinfo.id" src="static/quanzi-edit.png" mode=""></image> -->
 							</view>
-							<text class="text2">{{item.article_count}}条内容|{{item.follow_count}}人关注</text>
+							<text class="text2">{{item.article_count||0}}条内容|{{item.follow_count||0}}人关注</text>
 						</view>
-
 						<view @click.stop="del(item)" class="" v-if="user_id == userinfo.id">
 							<u-icon name="more-dot-fill" color="rgba(76, 76, 76, 0.4)"></u-icon>
 						</view>
@@ -111,7 +110,10 @@
 				</view>
 			</view>
 		</view>
-
+		<u-popup :show="del_show" mode="bottom" :round="28" :safe-area-inset-bottom="true">
+			<view class="del" @click="del1">删除</view>
+			<view class="cancel" @click="close">取消</view>
+		</u-popup>
 	</view>
 </template>
 
@@ -143,7 +145,9 @@
 				page1: 1,
 				list1: [],
 				total1: 0,
-				isshow: false
+				isshow: false,
+				del_show: false,
+				del_id: '',
 			}
 		},
 		onLoad(option) {
@@ -179,25 +183,36 @@
 			}
 		},
 		methods: {
+			close(){
+				 this.del_show = false
+			},
 			del(item) {
-				uni.showActionSheet({
-					itemList: ['删除'],
+				this.del_show = true
+				this.del_id = item.id
+			},
+			del1() {
+				let _this = this
+				uni.showModal({
+					title: "确定删除吗",
+					content: "内容删除后将无法恢复,请谨慎考虑",
+					cancelText: '我再想想',
+					confirmText: '确定删除',
+					confirmColor: '#0C66C2',
 					success: (e) => {
-						if (e.tapIndex == 0) {
+						if (e.confirm) {
 							del_group({
-								id: item.id
-							}).then(res => {
-								this.$u.toast(res.msg)
-								if (res.code == 1) {
-									setTimeout(() => {
-										this.page = 1
-										this.list1 = []
-										this.usergrouplist()
-									}, 800)
-								}
+								id: _this.del_id
+							}).then((res) => {
+								_this.$u.toast(res.msg)
+								_this.del_show = false
+								_this.del_item = {}
+								_this.page1 = 1
+								_this.list1 = []
+								_this.getlist()
 							})
+						} else {
+							_this.close
 						}
-
 					}
 				})
 			},
@@ -325,6 +340,27 @@
 </script>
 
 <style lang="scss">
+	.del {
+		font-size: 32rpx;
+		font-family: PingFangSC, PingFang SC;
+		font-weight: 500;
+		color: #333333;
+		padding: 46rpx 0 30rpx;
+		text-align: center;
+		width: 100%;
+		border-bottom: 16rpx solid #f6f6f6;
+	}
+
+	.cancel {
+		font-size: 32rpx;
+		font-family: PingFangSC, PingFang SC;
+		font-weight: 400;
+		color: #333333;
+		text-align: center;
+		width: 100%;
+		padding: 40rpx 0;
+	}
+
 	.my-luntan {
 		position: relative;
 

+ 5 - 1
pagesD/invite-list.vue

@@ -48,7 +48,8 @@
 	import {
 		invite_list,
 		get_agreement_detail,
-		parent_info
+		parent_info,
+		commissionData
 	} from "@/units/inquire.js"
 	export default {
 		data() {
@@ -104,6 +105,9 @@
 				}).then((res) => {
 					this.content = res.data.content
 				})
+				commissionData().then((res) => {
+					this.sum = Number(res.data.invite).toFixed(1)
+				})
 			},
 			changetab(index) {
 				this.tab_active = index

+ 15 - 27
pagesD/mingxi.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="page">
-		<view class="" :style="{height:tab1==0?'356rpx':'175rpx'}"
-			style="background: #fff;padding: 0 32rpx;border-bottom: 2rpx solid rgba(0, 0, 0, 0);">
+		<!-- :style="{height:tab1==0?'356rpx':'175rpx'}" -->
+		<view class="" style="background: #fff;padding: 0 32rpx 20rpx;border-bottom: 2rpx solid rgba(0, 0, 0, 0);">
 			<u-navbar :fixed="false" bgColor='rgba(0,0,0,0)' placeholder :safeAreaInsetTop="true" @leftClick="return1">
 				<view class="index-header  u-flex u-row-between" slot="center" style="position: relative;">
 					<view class="" style="margin-left: -11rpx;">
@@ -18,22 +18,23 @@
 			</u-navbar>
 			<view v-if="tab1 ==0" class="search u-flex" style="margin-top: 20rpx;">
 				<u-icon name="search"></u-icon>
-				<input type="text" placeholder="请输入关键词搜索" v-model="job_name">
+				<input type="text" placeholder="请输入关键词搜索" v-model="keywords" @confirm="commission_list">
+				<!-- <input v-model="keywords" type="text" class="text1" placeholder="请输入关键词搜索" @confirm="search"> -->
 			</view>
 			<view v-if="tab1 ==0" class="shaixuan u-flex u-row-between"
 				style="margin-top: 20rpx;border-top:2rpx solid #f6f6f6 ;padding-top: 16rpx;">
 				<view class="u-flex" @click="showtime = true">
 					<text style="margin-right: 14rpx;">{{date || '选择时间'}}</text>
-					<u-icon name="arrow-down-fill" size="16"></u-icon>
+					<u-icon name="arrow-down-fill" size="8"></u-icon>
 				</view>
 				<view class="u-flex" @click="show = true">
 					<text style="margin-right: 14rpx;">{{label}}</text>
-					<u-icon name="arrow-down-fill" size="16"></u-icon>
+					<u-icon name="arrow-down-fill" size="8"></u-icon>
 				</view>
 			</view>
 		</view>
 		<view class="content">
-			<view class="" v-if="tab1 == 0">
+			<view class="" style="margin-top: -20rpx;" v-if="tab1 == 0">
 				<view class="" v-if="source_type == 'order'" style="border: 2rpx solid rgba(0,0,0,0);">
 					<view style="margin-top: 20rpx;" class="list" v-for="(item,index) in list " :key="item.id">
 						<view class="u-flex u-row-between">
@@ -228,13 +229,13 @@
 							<view class="u-flex u-row-between leftf">
 								<text class="leftff">提现状态</text>
 								<text v-if="item.withdraw_status=='withdrawing'"
-									style="color:  rgba(250, 143, 0, 0.8);background-color:rgba(250, 143, 0, 0.5);padding: 3rpx;">提现中</text>
+									style="color:  rgba(250, 143, 0, 0.8);background-color:rgba(250, 143, 0, 0.1);padding: 3rpx;">提现中</text>
 								<text v-if="item.withdraw_status=='success'"
-									style="color:  rgba(53, 170, 31, 0.8);background-color:rgba(53, 170, 31, 0.5);padding: 3rpx;">已提现</text>
+									style="color:  rgba(53, 170, 31, 0.8);background-color:rgba(53, 170, 31, 0.1);padding: 3rpx;">已提现</text>
 								<text v-if="item.withdraw_status=='withdraw'"
-									style="color:  rgba(12, 102, 194, 0.8);background-color:rgba(12, 102, 194, 0.5);padding: 3rpx;">已申请</text>
+									style="color:  rgba(12, 102, 194, 0.8);background-color:rgba(12, 102, 194, 0.1);padding: 3rpx;">已申请</text>
 								<text v-if="item.withdraw_status=='failed'"
-									style="color: rgba(219, 15, 15, 0.8);background-color:rgba(219, 15, 15, 0.5);padding: 3rpx;">提现失败</text>
+									style="color: rgba(219, 15, 15, 0.8);background-color:rgba(219, 15, 15, 0.1);padding: 3rpx;">提现失败</text>
 							</view>
 						</view>
 					</view>
@@ -307,6 +308,7 @@
 	export default {
 		data() {
 			return {
+				keywords: '',
 				show: false,
 				showtime: false,
 				tab1: 0,
@@ -405,7 +407,7 @@
 				commission_list({
 					// source_type: "order",
 					source_type: this.source_type,
-					job_name: this.job_name,
+					keywords: this.keywords,
 					is_confirm: "",
 					date: this.date,
 				}).then(res => {
@@ -530,28 +532,14 @@
 		}
 	}
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 	.page {
 		height: 100vh;
 
 		.content {
-			padding: 0 24rpx;
+			padding: 20rpx 24rpx 0;
 			background: #F3F3F3;
 			min-height: 78vh;
+			// margin-top: 20rpx;
 
 
 			.list {

+ 72 - 6
pagesD/my-fapiao.vue

@@ -8,7 +8,7 @@
 			<image src="../static/images/logo.png" mode="" class="logo"></image>
 			<view class="title">内核招聘</view>
 			<view class="subtitle">邀请你注册内核招聘,完成注册可获得超值奖励</view>
-			<!-- <image src="" mode="" class="code-img"></image> -->
+			<image :src="data.invitation_code_url" mode="" class="code-img"></image>
 			<view class="code-text vflex acenter">
 				<view class="hflex acenter jcenter">
 					<view class="text">邀请码</view>
@@ -26,10 +26,12 @@
 			<u-icon name="arrow-rightward" color="rgba(68,68,68,.4)" size="14"></u-icon>
 		</view>
 		<view class="" style="height: 40rpx;"></view>
+		<canvas-drawer ref="poster" :width="646" :height="842"></canvas-drawer>
 	</view>
 </template>
 
 <script>
+	import CanvasDrawer from "@/components/xinyu-canvas-drawer/components/xinyu-canvas-drawer/index.vue";
 	import {
 		index,
 		invite_list
@@ -41,18 +43,55 @@
 				num: 0,
 				list: [],
 				money: 0,
+				data:{},
+				isCanvasLoading: false,
+				src: '',
 			};
 		},
+		components: {
+			CanvasDrawer
+		},
 		onLoad() {
 			this.getuser()
 			this.getlist()
 		},
+		onShareAppMessage() {
+			return {
+				path: '',
+				// imageUrl: this.data.invitation_code,
+				title: '内核招聘'
+			}
+		},
+		async mounted() {
+			let posterRef = this.$refs.poster;
+			uni.showLoading({
+				title: "渲染海报中"
+			});
+			await posterRef.init();
+			this.src = await posterRef
+				.setBackgroundColor("#fff") //指定渲染图片的背景色
+				// .addRect(0, 0, 750, 198, "#FEFEFE") //绘制矩形
+				.addImage(require("@/static/images/logo.png"), 268, 48, 107,
+					107) //绘制圆图片,如果不绘制圆图片最后一个参数可以不传或传false,当最后一个参数为true时圆形的直径为w,h参数将没有意义
+				// .addQRCode(, 585, 22, 130, 130) //绘制二维码(不要太长否则会扫不出来)
+				.addText("内核招聘", 252, 208, 36, "#222222") //绘制文本
+				.addText("邀请你注册内核招聘,完成注册可获得超值奖励", 92, 282, 22, "#555555") //绘制文本	
+				.addImage(this.data.invitation_code_url, 218, 370, 210,
+					210) //绘制云端图片时第一个参数直接传云端图片地址即可,不需要require。注意不要跨域
+				.addRect(50, 646, 546, 112, "#F3F3F3")
+				.addText("邀请码", 150, 678, 36, "#222222")
+				.addText("|", 306, 678, 36, "#E0E0E0")
+				.addText(this.data.invitation_code, 354, 678, 36, "#222222")
+				.draw();
+			this.isCanvasLoading = true;
+			uni.hideLoading();
+			this.$forceUpdate();
+		},
 		methods: {
 			getuser() {
 				index().then((res) => {
-					console.log(res);
 					this.code = res.data.invitation_code
-					this.money = res.data.money
+					this.data = res.data
 				})
 			},
 			getlist() {
@@ -72,13 +111,39 @@
 				})
 			},
 			save() {
-
+				if (!this.isCanvasLoading)
+					return this.alert("稍安勿躁,图片还没有加载完哦~");
+				let posterRef = this.$refs.poster;
+				posterRef.saveImageToPhotosAlbum(this.src).then(() => {
+					uni.showModal({
+						title: '提示',
+						content: '保存成功',
+						success(res) {
+							if (res.confirm) {
+								// return recv();
+							} else if (res.cancel) {
+								// return recj();
+							}
+						}
+					});
+				}).catch((e) => {
+					uni.showModal({
+						title: '提示',
+						content: '保存失败',
+						success(res) {
+							if (res.confirm) {
+								return recv();
+							} else if (res.cancel) {
+								return recj();
+							}
+						}
+					});
+				});
 			},
 			invite() {},
 			tolist() {
-				console.log(this.money);
 				uni.navigateTo({
-					url: '/pagesD/invite-list?money=' + this.money
+					url: '/pagesD/invite-list'
 				})
 			},
 		}
@@ -145,6 +210,7 @@
 				height: 210rpx;
 				margin-bottom: 66rpx;
 			}
+
 			.code-text {
 				width: 546rpx;
 				background: #F3F3F3;

+ 25 - 30
pagesD/order-info.vue

@@ -54,7 +54,7 @@
 			<view class="header-title u-flex" @click="showjinzhan = true" v-if="detail.stage == 'offer'">
 				<!-- <text class="text1" v-if="detail.offer_status == 'pending'">待反馈</text> -->
 				<text class="text1" v-if="detail.offer_status == 'unissued'">待发放offer</text>
-				<text class="text1" v-if="detail.offer_status == 'issued'">待反馈r</text>
+				<text class="text1" v-if="detail.offer_status == 'issued'">待反馈</text>
 				<text class="text1" v-if="detail.offer_status == 'accepted'">已接受</text>
 				<text class="text1" v-if="detail.offer_status == 'rejected'">已拒绝</text>
 				<text class="text1" v-if="detail.offer_status == 'failed'">已淘汰</text>
@@ -240,7 +240,8 @@
 					<text>{{detail.resume_education_experience[0].name}}·{{detail.resume_education_experience[0].major}}</text>
 				</view> -->
 				<view class="content" style="position: relative;">
-					<image src="static/images/fufei.png" style="width: 112rpx; height: 38rpx;position: absolute;top: 0;left: -10rpx;" mode=""></image>
+					<image v-if="detail.is_pay_for_job==1" src="static/images/fufei.png"
+						style="width: 112rpx; height: 38rpx;position: absolute;top: 0;left: -10rpx;" mode=""></image>
 					<view class="u-flex u-row-between ">
 						<view class="u-flex">
 							<view class="font">{{detail.job.job_name}}</view>
@@ -256,24 +257,24 @@
 					</view>
 					<view class="u-flex" style="margin-bottom: 24rpx;">
 
-						<view class="tabs" v-if="detail.company.province || detail.company.city">
-							{{detail.company.province}}{{detail.company.city}}
+						<view class="tabs">
+							{{detail.company.province||''}}{{detail.company.city||''}}
 						</view>
 						<view class="tabs">
-							{{detail.job.education_name}}
+							{{detail.job.education_name ||''}}
 						</view>
 						<view class="tabs">
-							{{detail.job.experience_name}}
+							{{detail.job.experience_name ||''}}
 						</view>
 					</view>
 					<view class="u-flex u-row-between u-col-center">
 						<view class=" u-flex u-col-center">
-							<image :src="detail.recommend_info.avatar" mode=""
+							<image :src="detail.hr.avatar" mode=""
 								style="width: 50rpx;height: 50rpx;border-radius: 50%;">
 							</image>
 							<view class="" style="margin-left: 16rpx;">
-								<text>{{detail.recommend_info.username}}</text>·
-								<text>{{detail.recommend_info.type}}</text>
+								<text>{{detail.hr.name}}</text>·
+								<text>{{detail.hr.job}}</text>
 							</view>
 						</view>
 					</view>
@@ -412,7 +413,7 @@
 			</view>
 		</view>
 		<view class="safe-area-inset-bottom"></view>
-		<u-popup :show="showjinzhan" mode="bottom" border-radius="32" height="900" :closeable="true"
+		<u-popup :show="showjinzhan" mode="bottom" border-radius="32" height="450" :closeable="true"
 			@close="showjinzhan = false">
 			<view class="order-jindu-popup">
 				<view class="order-jindu-header u-flex">
@@ -420,27 +421,21 @@
 					<text>订单时长进展:{{gettime()}}</text>
 				</view>
 				<view class="order-jindu-body">
-					<!-- 				<view class="body-user u-flex u-row-between">
-						<image :src="detail.recommend_info.avatar" class="user-img" mode=""></image>
-						<view class="user-center u-flex-col">
-							<text class="text1">{{detail.recommend_info.username}}</text>
-							<text class="text2">{{detail.recommend_info.type}}</text>
-						</view>
-						<text class="jubao-btn" @click="showjubao = true">举报</text>
-					</view> -->
-					<view class="body-item u-flex u-col-top" v-for="(item,index) in logs" :key="index">
-						<view class="item-left u-flex-col u-col-center">
-							<view class="first-box u-flex u-row-center" v-if="index == 0">
-								<text></text>
+					<scroll-view style="height: 770rpx;" scroll-y="true">
+						<view class="body-item u-flex u-col-top" v-for="(item,index) in logs" :key="index">
+							<view class="item-left u-flex-col u-col-center">
+								<view class="first-box u-flex u-row-center" v-if="index == 0">
+									<text></text>
+								</view>
+								<view class="last-box" v-else></view>
+								<view class="left-xian" v-if="index < (logs.length - 1)"></view>
+							</view>
+							<view class="item-right u-flex-col" :style="{opacity: index == 0 ? 1 : 0.5}">
+								<text>{{item.content}}</text>
+								<text>{{item.createtime}}</text>
 							</view>
-							<view class="last-box" v-else></view>
-							<view class="left-xian" v-if="index < (logs.length - 1)"></view>
-						</view>
-						<view class="item-right u-flex-col" :style="{opacity: index == 0 ? 1 : 0.5}">
-							<text>{{item.content}}</text>
-							<text>{{item.createtime}}</text>
 						</view>
-					</view>
+					</scroll-view>
 				</view>
 			</view>
 		</u-popup>
@@ -1169,7 +1164,7 @@
 		.order-jindu-popup {
 			padding: 0 20rpx;
 			background: #F3F3F3;
-			min-height: 900rpx;
+			max-height: 900rpx;
 
 			.order-jindu-body {
 				width: 710rpx;

+ 7 - 4
pagesD/preview.vue

@@ -16,8 +16,8 @@
 				</view>
 				<view class="" style="position: relative;">
 					<image style="width: 136rpx;height: 136rpx;border-radius:50%;" :src="from.avatar" mode=""></image>
-					<image  v-if="sex == male" src="../static/images/nan.png" style="height:34rpx;width: 34rpx;position: absolute;top: 100rpx;
-					left: 100rpx;" mode=""></image>	
+					<image v-if="sex == male" src="../static/images/nan.png" style="height:34rpx;width: 34rpx;position: absolute;top: 100rpx;
+					left: 100rpx;" mode=""></image>
 					<image v-if="sex == female" src="../static/images/nv.png" style="height:34rpx;width: 34rpx;position: absolute;top: 100rpx;
 					left: 100rpx;" mode=""></image>
 					<!-- <image src="../static/images/nv.png" style="height:34rpx;width: 34rpx;"  mode=""></image> -->
@@ -45,7 +45,10 @@
 			<view class="" style="border-top:2rpx solid #F0F0F0;margin-top: 32rpx;">
 				<view class="u-flex u-row-between">
 					<text class="title">求职意向</text>
-					<text>{{from.job_status_name}}</text>
+					<text class="title" style="font-size: 26rpx;
+font-family: PingFangSC, PingFang SC;
+font-weight: 400;
+color: #222222;">{{from.job_status_name}}</text>
 					<!-- <u-icon @click="toapply(1)" name="plus-circle" size="20"></u-icon> -->
 				</view>
 				<view class="" style="margin-top: 40rpx;margin-bottom: 20rpx;" v-for="(item,index) in job_intention1"
@@ -213,7 +216,7 @@ color: #333333;">
 					job_status_id: "", //string	求职状态ID
 					job_status_name: "", //求职状态名称
 					domicile_city: '',
-					sex:''
+					sex: ''
 				},
 				//求职意向
 				job_intention: {

+ 19 - 6
pagesD/resume.vue

@@ -23,7 +23,8 @@
 				</view>
 				<view class="mar">
 					<view type="text" placeholder="编辑优势亮点,展示我的独特态度" v-model="from.personal_advantage">
-						{{from.personal_advantage}}</view>
+						{{from.personal_advantage}}
+					</view>
 				</view>
 			</view>
 			<view class="" style="border-top:2rpx solid #F0F0F0;margin-top: 32rpx;">
@@ -62,7 +63,7 @@
 					<view class="u-flex u-row-between" style="margin-top:40rpx ;">
 						<text>{{item.company_name}}</text>
 						<view class="u-flex">
-							<text class="time" >{{item.start_time}}-{{item.end_time}}</text>
+							<text class="time">{{item.start_time}}-{{item.end_time}}</text>
 							<u-icon name="arrow-right" size="12"></u-icon>
 						</view>
 					</view>
@@ -88,7 +89,7 @@ color: #333333;">
 					<view class="u-flex u-row-between">
 						<text>{{item.company_name}}</text>
 						<view class="u-flex">
-							<text class="time" >{{item.start_time}}-{{item.end_time}}</text>
+							<text class="time">{{item.start_time}}-{{item.end_time}}</text>
 							<u-icon name="arrow-right" size="12"></u-icon>
 						</view>
 					</view>
@@ -158,7 +159,7 @@ color: #333333;">
 					<!-- <u-icon name="plus-circle" size="20"></u-icon> -->
 				</view>
 				<view class="mar">
-					<input type="text" placeholder="请输入附加消息">
+					<input @confirm="touptate" v-model="from.additional_info" type="text" placeholder="请输入附加消息">
 				</view>
 			</view>
 			<view class="" style="height: 60rpx;"></view>
@@ -340,6 +341,15 @@ color: #333333;">
 			this.resumeDetail()
 		},
 		methods: {
+			touptate() {
+				update({
+					additional_info: this.from.additional_info,
+					source_type: "resume",
+					source_id: this.jlid
+				}).then(res => {
+					this.resumeDetail()
+				})
+			},
 			toupload() {
 				uni.navigateTo({
 					url: "/pagesD/upload",
@@ -372,7 +382,7 @@ color: #333333;">
 					url: "/pagesD/language?type=" + type + "&id=" + id
 				})
 			},
-			toteach(type,id) {
+			toteach(type, id) {
 				uni.navigateTo({
 					url: "/pagesD/teach?type=" + type + "&id=" + id
 				})
@@ -437,6 +447,7 @@ color: #333333;">
 			resumeDetail() {
 				resumeDetail().then(res => {
 					this.from.avatar = res.data.avatar
+					this.from.additional_info = res.data.additional_info
 					this.from.personal_advantage = res.data.personal_advantage
 					this.jlid = res.data.id
 					this.from.name = res.data.name
@@ -483,12 +494,14 @@ color: #333333;">
 		font-weight: 400;
 		color: #888888;
 	}
+
 	.top-font {
 		font-size: 26rpx;
 		font-family: SFPro, SFPro;
 		font-weight: 400;
 		color: #555555;
 	}
+
 	.enter {
 		background: #0C66C2;
 		border-radius: 12rpx;
@@ -553,7 +566,7 @@ color: #333333;">
 	}
 
 	.mar {
-		margin-top: 20rpx;  
+		margin-top: 20rpx;
 	}
 
 	.title {

+ 5 - 4
pagesD/yongjin.vue

@@ -95,14 +95,15 @@
 			<view class="list-item u-flex u-row-between" v-for="(item,index) in list" :key="index"
 				v-if="list.length > 0">
 				<view class="u-flex-col">
-					<view class=""></view>
-					<text v-if="item.souce_type=='invite'||item.souce_type=='order'"
+					<!-- 					<text v-if="item.souce_type=='invite'||item.souce_type=='order'"
 						class="text1">{{item.source_type_name}}入账</text>
 					<text v-else class="text1">佣金提现</text>
+					<text class="text2">{{item.createtime}}</text> -->
+					<text class="text1">{{item.source_type_name}}</text>
 					<text class="text2">{{item.createtime}}</text>
 				</view>
-				<text class="text3" v-if="item.type=='income'" style="color: #35AA1F;">+{{item.amount}}</text>
-				<text class="text3" v-else style="color: #E02020;">-{{item.amount}}</text>
+				<text class="text3" v-if="item.type=='income'" style="color: #35AA1F;">{{item.amount}}</text>
+				<text class="text3" v-else style="color: #E02020;">{{item.amount}}</text>
 			</view>
 			<view style="height: 61vh;justify-content: center;" class="u-flex" v-if="list.length == 0">
 				<u-empty text="暂无数据" mode="list"></u-empty>

+ 0 - 4
unpackage/dist/build/mp-weixin/app.js

@@ -1,4 +0,0 @@
-
-require('./common/runtime.js')
-require('./common/vendor.js')
-require('./common/main.js')

+ 0 - 147
unpackage/dist/build/mp-weixin/app.json

@@ -1,147 +0,0 @@
-{
-  "pages": [
-    "pages/index/index",
-    "pages/login/login",
-    "pages/luntan/luntan",
-    "pages/xiaoxi/xiaoxi",
-    "pages/mine/mine",
-    "pages/zixun/zixun"
-  ],
-  "subPackages": [
-    {
-      "root": "pagesA",
-      "pages": [
-        "tel-login",
-        "jianlichange",
-        "yaoqing",
-        "userinfo",
-        "jianli",
-        "work",
-        "Project ",
-        "description",
-        "teach",
-        "expectation",
-        "xieyi",
-        "change-hangye1",
-        "change-hangye",
-        "change-zhiwei",
-        "index-search",
-        "upload"
-      ]
-    },
-    {
-      "root": "pagesB",
-      "pages": [
-        "details",
-        "gongsi-info",
-        "general",
-        "general-info",
-        "zixun-info"
-      ]
-    },
-    {
-      "root": "pagesC",
-      "pages": [
-        "luntan-info",
-        "my-luntan",
-        "quanzi-info",
-        "xiaoxi-list",
-        "add-luntan",
-        "add-luntan-over",
-        "add-quanzi",
-        "add-quanzi-over",
-        "changyong-add",
-        "changyong-list",
-        "chat"
-      ]
-    },
-    {
-      "root": "pagesD",
-      "pages": [
-        "userinfo",
-        "resume",
-        "my-fapiao",
-        "my-shoucang",
-        "look",
-        "shezhi",
-        "change-tel",
-        "change-pwd",
-        "xiaoxi",
-        "zhaohu",
-        "my-order",
-        "renzheng",
-        "order-info",
-        "apply",
-        "apply1",
-        "yongjin",
-        "tixian",
-        "bank-add",
-        "yinsi",
-        "setbank",
-        "bank-card",
-        "mingxi",
-        "tixian1",
-        "personal-infor",
-        "work",
-        "advantage",
-        "project",
-        "teach",
-        "language",
-        "certificate",
-        "skill",
-        "preview",
-        "zixun-info",
-        "change-name",
-        "dakuan",
-        "fujian",
-        "upload",
-        "change-jianli",
-        "dingdan/dingdan",
-        "invite-list",
-        "pay"
-      ]
-    }
-  ],
-  "window": {
-    "navigationBarTextStyle": "black",
-    "navigationBarBackgroundColor": "#fff",
-    "backgroundColor": "#F8F8F8"
-  },
-  "tabBar": {
-    "selectedColor": "#0C66C2",
-    "color": "#818389",
-    "list": [
-      {
-        "iconPath": "static/images/index.png",
-        "selectedIconPath": "static/images/index1.png",
-        "text": "职位",
-        "pagePath": "pages/index/index"
-      },
-      {
-        "iconPath": "static/images/luntan.png",
-        "selectedIconPath": "static/images/luntan1.png",
-        "text": "论坛",
-        "pagePath": "pages/luntan/luntan"
-      },
-      {
-        "iconPath": "static/images/zixun.png",
-        "selectedIconPath": "static/images/zixun.png",
-        "text": "资讯",
-        "pagePath": "pages/zixun/zixun"
-      },
-      {
-        "iconPath": "static/images/xiaoxi.png",
-        "selectedIconPath": "static/images/xiaoxi1.png",
-        "text": "消息",
-        "pagePath": "pages/xiaoxi/xiaoxi"
-      },
-      {
-        "iconPath": "static/images/mine.png",
-        "selectedIconPath": "static/images/mine1.png",
-        "text": "我的",
-        "pagePath": "pages/mine/mine"
-      }
-    ]
-  },
-  "usingComponents": {}
-}

+ 0 - 3
unpackage/dist/build/mp-weixin/app.wxss

@@ -1,3 +0,0 @@
-@import './common/main.wxss';
-
-[data-custom-hidden="true"],[bind-data-custom-hidden="true"]{display: none !important;}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/common/main.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/common/main.wxss


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 2
unpackage/dist/build/mp-weixin/common/runtime.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/common/vendor.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/components/hx-invite/hx-invite.js


+ 0 - 7
unpackage/dist/build/mp-weixin/components/hx-invite/hx-invite.json

@@ -1,7 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {
-    "u-checkbox-group": "/node-modules/uview-ui/components/u-checkbox-group/u-checkbox-group",
-    "u-checkbox": "/node-modules/uview-ui/components/u-checkbox/u-checkbox"
-  }
-}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/components/hx-invite/hx-invite.wxml


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/components/hx-invite/hx-invite.wxss


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/components/hx-order/hx-order.js


+ 0 - 7
unpackage/dist/build/mp-weixin/components/hx-order/hx-order.json

@@ -1,7 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {
-    "u-checkbox-group": "/node-modules/uview-ui/components/u-checkbox-group/u-checkbox-group",
-    "u-checkbox": "/node-modules/uview-ui/components/u-checkbox/u-checkbox"
-  }
-}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/components/hx-order/hx-order.wxml


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/components/hx-order/hx-order.wxss


+ 0 - 10
unpackage/dist/build/mp-weixin/components/hx-school/hx-school.js

@@ -1,10 +0,0 @@
-(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["components/hx-school/hx-school"],{1313:function(t,i,e){},1841:function(t,i,e){"use strict";var n=e("1313"),a=e.n(n);a.a},6081:function(t,i,e){"use strict";e.r(i);var n=e("c7ed"),a=e("9bf8");for(var c in a)["default"].indexOf(c)<0&&function(t){e.d(i,t,(function(){return a[t]}))}(c);e("1841");var o=e("f0c5"),s=Object(o["a"])(a["default"],n["b"],n["c"],!1,null,"e097f9f4",null,!1,n["a"],void 0);i["default"]=s.exports},"750b":function(t,i,e){"use strict";(function(t){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var n=e("2e9d"),a={onReachBottom:function(){this.activityget_list.length!=this.total&&(this.page++,this.activitygetlist())},data:function(){return{page:1,activityget_list:[]}},mounted:function(){console.log(111),this.activitygetlist()},props:{search:""},methods:{tishi:function(t){1==t?this.$u.toast("活动已过期"):this.$u.toast("活动未开始")},togeneral:function(i){t.navigateTo({url:"/pagesB/general?id="+i})},activitygetlist:function(){var t=this;console.log(111),(0,n.activityget_list)({page:this.page,search:this.search}).then((function(i){console.log(i),1==t.page?t.activityget_list=i.data.data:t.activityget_list=t.activityget_list.concat(i.data.data)}))}}};i.default=a}).call(this,e("543d")["default"])},"9bf8":function(t,i,e){"use strict";e.r(i);var n=e("750b"),a=e.n(n);for(var c in n)["default"].indexOf(c)<0&&function(t){e.d(i,t,(function(){return n[t]}))}(c);i["default"]=a.a},c7ed:function(t,i,e){"use strict";e.d(i,"b",(function(){return n})),e.d(i,"c",(function(){return a})),e.d(i,"a",(function(){}));var n=function(){var t=this,i=t.$createElement,e=(t._self._c,t.__map(t.activityget_list,(function(i,e){var n=t.__get_orig(i),a=i.start_time.replaceAll("-","."),c=i.end_time.replaceAll("-",".").slice(-5);return{$orig:n,g0:a,g1:c}})));t.$mp.data=Object.assign({},{$root:{l0:e}})},a=[]}}]);
-;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([
-    'components/hx-school/hx-school-create-component',
-    {
-        'components/hx-school/hx-school-create-component':(function(module, exports, __webpack_require__){
-            __webpack_require__('543d')['createComponent'](__webpack_require__("6081"))
-        })
-    },
-    [['components/hx-school/hx-school-create-component']]
-]);

+ 0 - 1
unpackage/dist/build/mp-weixin/components/hx-school/hx-school.wxml

@@ -1 +0,0 @@
-<view class="data-v-e097f9f4"><block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="id"><view class="list data-v-e097f9f4"><view class="u-flex data-v-e097f9f4"><image style="width:92rpx;height:92rpx;" src="{{item.$orig.school.logo}}" mode class="data-v-e097f9f4"></image><view style="margin-left:20rpx;" class="data-v-e097f9f4"><text class="fontsty data-v-e097f9f4">{{item.$orig.title}}</text><view class="font data-v-e097f9f4"><text class="data-v-e097f9f4">活动时间:</text><text class="data-v-e097f9f4">{{item.g0+"-"+item.g1}}</text></view></view></view><view class="border u-row-between data-v-e097f9f4"><view class="data-v-e097f9f4"></view><block wx:if="{{item.$orig.status==2}}"><view data-event-opts="{{[['tap',[['togeneral',['$0'],[[['activityget_list','id',item.$orig.id,'id']]]]]]]}}" class="btn data-v-e097f9f4" bindtap="__e">查看活动</view></block><block wx:if="{{item.$orig.status==3}}"><view data-event-opts="{{[['tap',[['tishi',[1]]]]]}}" class="btn data-v-e097f9f4" style="background:#d3d3d3;" bindtap="__e">查看活动</view></block><block wx:if="{{item.$orig.status==1}}"><view data-event-opts="{{[['tap',[['tishi',[2]]]]]}}" class="btn data-v-e097f9f4" style="background:#d3d3d3;" bindtap="__e">查看活动</view></block></view></view></block></view>

+ 0 - 1
unpackage/dist/build/mp-weixin/components/hx-school/hx-school.wxss

@@ -1 +0,0 @@
-.list.data-v-e097f9f4{padding:32rpx 20rpx 24rpx 28rpx;background:#fff;border-radius:16rpx;margin-top:20rpx}.list .fontsty.data-v-e097f9f4{font-size:32rpx;font-family:SFPro-Medium,SFPro;font-weight:500;color:#222}.list .font.data-v-e097f9f4{font-size:24rpx;font-family:SFPro-Regular,SFPro;font-weight:400;color:#555;margin-top:14rpx}.list .border.data-v-e097f9f4{margin-top:28rpx;border-top:2rpx solid #f3f3f3;display:flex}.list .btn.data-v-e097f9f4{width:164rpx;height:68rpx;line-height:68rpx;margin-top:22rpx;background:#0c66c2;border-radius:10rpx;font-size:28rpx;font-family:PingFangSC-Regular,PingFang SC;font-weight:400;color:#fff;margin-right:0!important;text-align:center}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/components/zhao-chat/zhao-chat.js


+ 0 - 4
unpackage/dist/build/mp-weixin/components/zhao-chat/zhao-chat.json

@@ -1,4 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {}
-}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/components/zhao-chat/zhao-chat.wxml


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/components/zhao-chat/zhao-chat.wxss


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/components/zhao-shaixuan/zhao-shaixuan.js


+ 0 - 9
unpackage/dist/build/mp-weixin/components/zhao-shaixuan/zhao-shaixuan.json

@@ -1,9 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {
-    "u-popup": "/node-modules/uview-ui/components/u-popup/u-popup",
-    "u-icon": "/node-modules/uview-ui/components/u-icon/u-icon",
-    "u-modal": "/node-modules/uview-ui/components/u-modal/u-modal",
-    "u-picker": "/node-modules/uview-ui/components/u-picker/u-picker"
-  }
-}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/components/zhao-shaixuan/zhao-shaixuan.wxml


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/components/zhao-shaixuan/zhao-shaixuan.wxss


+ 0 - 10
unpackage/dist/build/mp-weixin/components/zhao-text/zhao-text.js

@@ -1,10 +0,0 @@
-(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["components/zhao-text/zhao-text"],{"12c3":function(t,n,e){"use strict";(function(t){Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var e={props:{text:{type:String,default:""}},data:function(){return{showmore:!1,show:!1}},created:function(){},mounted:function(){var n=this,e=t.createSelectorQuery().in(this);e.select("#text").boundingClientRect((function(t){t.height>110&&(n.showmore=!0),n.show=!0})).exec()},methods:{}};n.default=e}).call(this,e("543d")["default"])},"5e1d":function(t,n,e){},a6b1:function(t,n,e){"use strict";e.r(n);var o=e("dbbd"),u=e("caa3");for(var c in u)["default"].indexOf(c)<0&&function(t){e.d(n,t,(function(){return u[t]}))}(c);e("b03d");var a=e("f0c5"),i=Object(a["a"])(u["default"],o["b"],o["c"],!1,null,null,null,!1,o["a"],void 0);n["default"]=i.exports},b03d:function(t,n,e){"use strict";var o=e("5e1d"),u=e.n(o);u.a},caa3:function(t,n,e){"use strict";e.r(n);var o=e("12c3"),u=e.n(o);for(var c in o)["default"].indexOf(c)<0&&function(t){e.d(n,t,(function(){return o[t]}))}(c);n["default"]=u.a},dbbd:function(t,n,e){"use strict";e.d(n,"b",(function(){return o})),e.d(n,"c",(function(){return u})),e.d(n,"a",(function(){}));var o=function(){var t=this,n=t.$createElement;t._self._c;t._isMounted||(t.e0=function(n){n.stopPropagation(),t.showmore=!1})},u=[]}}]);
-;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([
-    'components/zhao-text/zhao-text-create-component',
-    {
-        'components/zhao-text/zhao-text-create-component':(function(module, exports, __webpack_require__){
-            __webpack_require__('543d')['createComponent'](__webpack_require__("a6b1"))
-        })
-    },
-    [['components/zhao-text/zhao-text-create-component']]
-]);

+ 0 - 4
unpackage/dist/build/mp-weixin/components/zhao-text/zhao-text.json

@@ -1,4 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {}
-}

+ 0 - 1
unpackage/dist/build/mp-weixin/components/zhao-text/zhao-text.wxml

@@ -1 +0,0 @@
-<view class="zhao-text"><view class="position-text" id="text">{{''+text+''}}</view><block wx:if="{{show}}"><view class="{{['text',(showmore)?'line5':'']}}">{{''+text+''}}</view></block><block wx:if="{{showmore}}"><view class="text-more"><text>...</text><text data-event-opts="{{[['tap',[['e0',['$event']]]]]}}" catchtap="__e">全文</text></view></block></view>

+ 0 - 1
unpackage/dist/build/mp-weixin/components/zhao-text/zhao-text.wxss

@@ -1 +0,0 @@
-.zhao-text{position:relative;overflow:hidden}.zhao-text .position-text{position:absolute;z-index:-100;font-size:15px;font-family:PingFangSC-Regular,PingFang SC;font-weight:400;color:#333;line-height:21px;text-align:justify;width:100%}.zhao-text .text-more{position:absolute;bottom:0;right:0;line-height:21px;font-size:15px;background-color:#fff}.zhao-text .text-more text:first-child{color:#333;letter-spacing:2rpx}.zhao-text .text-more text:last-child{color:#0c66c2;margin-left:2rpx}.zhao-text .line5{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:5;overflow:hidden}.zhao-text .text{font-size:15px;font-family:PingFangSC-Regular,PingFang SC;font-weight:400;color:#333;line-height:21px;text-align:justify}

+ 0 - 10
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u--input/u--input.js

@@ -1,10 +0,0 @@
-(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["node-modules/uview-ui/components/u--input/u--input"],{2603:function(n,e,u){"use strict";u.r(e);var t=u("c08e"),i=u("f003");for(var o in i)["default"].indexOf(o)<0&&function(n){u.d(e,n,(function(){return i[n]}))}(o);var r=u("f0c5"),c=Object(r["a"])(i["default"],t["b"],t["c"],!1,null,null,null,!1,t["a"],void 0);e["default"]=c.exports},"9657a":function(n,e,u){"use strict";(function(n){var t=u("4ea4");Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=t(u("f963")),o={name:"u--input",mixins:[n.$u.mpMixin,i.default,n.$u.mixin],components:{uvInput:function(){Promise.all([u.e("common/vendor"),u.e("node-modules/uview-ui/components/u-input/u-input")]).then(function(){return resolve(u("9a5e"))}.bind(null,u)).catch(u.oe)}}};e.default=o}).call(this,u("543d")["default"])},c08e:function(n,e,u){"use strict";u.d(e,"b",(function(){return t})),u.d(e,"c",(function(){return i})),u.d(e,"a",(function(){}));var t=function(){var n=this,e=n.$createElement;n._self._c;n._isMounted||(n.e0=function(e){return n.$emit("blur",e)},n.e1=function(e){return n.$emit("change",e)},n.e2=function(e){return n.$emit("input",e)},n.e3=function(e){return n.$emit("confirm",e)})},i=[]},f003:function(n,e,u){"use strict";u.r(e);var t=u("9657a"),i=u.n(t);for(var o in t)["default"].indexOf(o)<0&&function(n){u.d(e,n,(function(){return t[n]}))}(o);e["default"]=i.a}}]);
-;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([
-    'node-modules/uview-ui/components/u--input/u--input-create-component',
-    {
-        'node-modules/uview-ui/components/u--input/u--input-create-component':(function(module, exports, __webpack_require__){
-            __webpack_require__('543d')['createComponent'](__webpack_require__("2603"))
-        })
-    },
-    [['node-modules/uview-ui/components/u--input/u--input-create-component']]
-]);

+ 0 - 6
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u--input/u--input.json

@@ -1,6 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {
-    "uv-input": "/node-modules/uview-ui/components/u-input/u-input"
-  }
-}

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u--input/u--input.wxml

@@ -1 +0,0 @@
-<uv-input vue-id="3215cba6-1" value="{{value}}" type="{{type}}" fixed="{{fixed}}" disabled="{{disabled}}" disabledColor="{{disabledColor}}" clearable="{{clearable}}" password="{{password}}" maxlength="{{maxlength}}" placeholder="{{placeholder}}" placeholderClass="{{placeholderClass}}" placeholderStyle="{{placeholderStyle}}" showWordLimit="{{showWordLimit}}" confirmType="{{confirmType}}" confirmHold="{{confirmHold}}" holdKeyboard="{{holdKeyboard}}" focus="{{focus}}" autoBlur="{{autoBlur}}" disableDefaultPadding="{{disableDefaultPadding}}" cursor="{{cursor}}" cursorSpacing="{{cursorSpacing}}" selectionStart="{{selectionStart}}" selectionEnd="{{selectionEnd}}" adjustPosition="{{adjustPosition}}" inputAlign="{{inputAlign}}" fontSize="{{fontSize}}" color="{{color}}" prefixIcon="{{prefixIcon}}" suffixIcon="{{suffixIcon}}" suffixIconStyle="{{suffixIconStyle}}" prefixIconStyle="{{prefixIconStyle}}" border="{{border}}" readonly="{{readonly}}" shape="{{shape}}" customStyle="{{customStyle}}" formatter="{{formatter}}" ignoreCompositionEvent="{{ignoreCompositionEvent}}" data-event-opts="{{[['^focus',[['$emit',['focus']]]],['^blur',[['e0']]],['^keyboardheightchange',[['$emit',['keyboardheightchange']]]],['^change',[['e1']]],['^input',[['e2']]],['^confirm',[['e3']]],['^clear',[['$emit',['clear']]]],['^click',[['$emit',['click']]]]]}}" bind:focus="__e" bind:blur="__e" bind:keyboardheightchange="__e" bind:change="__e" bind:input="__e" bind:confirm="__e" bind:clear="__e" bind:click="__e" bind:__l="__l" vue-slots="{{['default']}}"><slot name="prefix"></slot><slot name="suffix"></slot></uv-input>

+ 0 - 10
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u--text/u--text.js

@@ -1,10 +0,0 @@
-(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["node-modules/uview-ui/components/u--text/u--text"],{"344c":function(e,n,t){"use strict";(function(e){var u=t("4ea4");Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var o=u(t("ba2f")),i={name:"u--text",mixins:[e.$u.mpMixin,o.default,e.$u.mixin],components:{uvText:function(){Promise.all([t.e("common/vendor"),t.e("node-modules/uview-ui/components/u-text/u-text")]).then(function(){return resolve(t("a90b"))}.bind(null,t)).catch(t.oe)}}};n.default=i}).call(this,t("543d")["default"])},a50b:function(e,n,t){"use strict";t.r(n);var u=t("ce42"),o=t("e64d");for(var i in o)["default"].indexOf(i)<0&&function(e){t.d(n,e,(function(){return o[e]}))}(i);var c=t("f0c5"),a=Object(c["a"])(o["default"],u["b"],u["c"],!1,null,null,null,!1,u["a"],void 0);n["default"]=a.exports},ce42:function(e,n,t){"use strict";t.d(n,"b",(function(){return u})),t.d(n,"c",(function(){return o})),t.d(n,"a",(function(){}));var u=function(){var e=this.$createElement;this._self._c},o=[]},e64d:function(e,n,t){"use strict";t.r(n);var u=t("344c"),o=t.n(u);for(var i in u)["default"].indexOf(i)<0&&function(e){t.d(n,e,(function(){return u[e]}))}(i);n["default"]=o.a}}]);
-;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([
-    'node-modules/uview-ui/components/u--text/u--text-create-component',
-    {
-        'node-modules/uview-ui/components/u--text/u--text-create-component':(function(module, exports, __webpack_require__){
-            __webpack_require__('543d')['createComponent'](__webpack_require__("a50b"))
-        })
-    },
-    [['node-modules/uview-ui/components/u--text/u--text-create-component']]
-]);

+ 0 - 6
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u--text/u--text.json

@@ -1,6 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {
-    "uv-text": "/node-modules/uview-ui/components/u-text/u-text"
-  }
-}

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u--text/u--text.wxml

@@ -1 +0,0 @@
-<uv-text vue-id="48c60447-1" type="{{type}}" show="{{show}}" text="{{text}}" prefixIcon="{{prefixIcon}}" suffixIcon="{{suffixIcon}}" mode="{{mode}}" href="{{href}}" format="{{format}}" call="{{call}}" openType="{{openType}}" bold="{{bold}}" block="{{block}}" lines="{{lines}}" color="{{color}}" decoration="{{decoration}}" size="{{size}}" iconStyle="{{iconStyle}}" margin="{{margin}}" lineHeight="{{lineHeight}}" align="{{align}}" wordWrap="{{wordWrap}}" customStyle="{{customStyle}}" data-event-opts="{{[['^click',[['$emit',['click']]]]]}}" bind:click="__e" bind:__l="__l"></uv-text>

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-badge/u-badge.js


+ 0 - 4
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-badge/u-badge.json

@@ -1,4 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {}
-}

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-badge/u-badge.wxml

@@ -1 +0,0 @@
-<block wx:if="{{$root.m0}}"><text class="{{['u-badge','data-v-231d324e',isDot?'u-badge--dot':'u-badge--not-dot',inverted&&'u-badge--inverted',shape==='horn'&&'u-badge--horn','u-badge--'+type+(inverted?'--inverted':'')]}}" style="{{$root.s0}}">{{isDot?'':showValue}}</text></block>

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-badge/u-badge.wxss

@@ -1 +0,0 @@
-view.data-v-231d324e, scroll-view.data-v-231d324e, swiper-item.data-v-231d324e{display:flex;flex-direction:column;flex-shrink:0;flex-grow:0;flex-basis:auto;align-items:stretch;align-content:flex-start}.u-badge.data-v-231d324e{border-top-right-radius:100px;border-top-left-radius:100px;border-bottom-left-radius:100px;border-bottom-right-radius:100px;display:flex;flex-direction:row;line-height:11px;text-align:center;font-size:11px;color:#fff}.u-badge--dot.data-v-231d324e{height:8px;width:8px}.u-badge--inverted.data-v-231d324e{font-size:13px}.u-badge--not-dot.data-v-231d324e{padding:2px 5px}.u-badge--horn.data-v-231d324e{border-bottom-left-radius:0}.u-badge--primary.data-v-231d324e{background-color:#3c9cff}.u-badge--primary--inverted.data-v-231d324e{color:#3c9cff}.u-badge--error.data-v-231d324e{background-color:#f56c6c}.u-badge--error--inverted.data-v-231d324e{color:#f56c6c}.u-badge--success.data-v-231d324e{background-color:#5ac725}.u-badge--success--inverted.data-v-231d324e{color:#5ac725}.u-badge--info.data-v-231d324e{background-color:#909399}.u-badge--info--inverted.data-v-231d324e{color:#909399}.u-badge--warning.data-v-231d324e{background-color:#f9ae3d}.u-badge--warning--inverted.data-v-231d324e{color:#f9ae3d}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-button/u-button.js


+ 0 - 7
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-button/u-button.json

@@ -1,7 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {
-    "u-loading-icon": "/node-modules/uview-ui/components/u-loading-icon/u-loading-icon",
-    "u-icon": "/node-modules/uview-ui/components/u-icon/u-icon"
-  }
-}

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-button/u-button.wxml

@@ -1 +0,0 @@
-<button class="{{['u-button','u-reset-button','data-v-18373a4f',bemClass]}}" style="{{$root.s0}}" hover-start-time="{{$root.m0}}" hover-stay-time="{{$root.m1}}" form-type="{{formType}}" open-type="{{openType}}" app-parameter="{{appParameter}}" hover-stop-propagation="{{hoverStopPropagation}}" send-message-title="{{sendMessageTitle}}" send-message-path="{{sendMessagePath}}" lang="{{lang}}" data-name="{{dataName}}" session-from="{{sessionFrom}}" send-message-img="{{sendMessageImg}}" show-message-card="{{showMessageCard}}" hover-class="{{!disabled&&!loading?'u-button--active':''}}" data-event-opts="{{[['getphonenumber',[['getphonenumber',['$event']]]],['getuserinfo',[['getuserinfo',['$event']]]],['error',[['error',['$event']]]],['opensetting',[['opensetting',['$event']]]],['launchapp',[['launchapp',['$event']]]],['tap',[['clickHandler',['$event']]]]]}}" bindgetphonenumber="__e" bindgetuserinfo="__e" binderror="__e" bindopensetting="__e" bindlaunchapp="__e" bindtap="__e"><block wx:if="{{loading}}"><u-loading-icon vue-id="113d4a8d-1" mode="{{loadingMode}}" size="{{loadingSize*1.15}}" color="{{loadingColor}}" class="data-v-18373a4f" bind:__l="__l"></u-loading-icon><text class="u-button__loading-text data-v-18373a4f" style="{{'font-size:'+(textSize+'px')+';'}}">{{loadingText||text}}</text></block><block wx:else><block wx:if="{{icon}}"><u-icon vue-id="113d4a8d-2" name="{{icon}}" color="{{iconColorCom}}" size="{{textSize*1.35}}" customStyle="{{({marginRight:'2px'})}}" class="data-v-18373a4f" bind:__l="__l"></u-icon></block><block wx:if="{{$slots.default}}"><slot></slot></block><block wx:else><text class="u-button__text data-v-18373a4f" style="{{'font-size:'+(textSize+'px')+';'}}">{{text}}</text></block></block></button>

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-button/u-button.wxss


+ 0 - 10
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-checkbox-group/u-checkbox-group.js

@@ -1,10 +0,0 @@
-(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["node-modules/uview-ui/components/u-checkbox-group/u-checkbox-group"],{"111b":function(t,n,e){"use strict";e.r(n);var i=e("2845"),u=e("73c8");for(var c in u)["default"].indexOf(c)<0&&function(t){e.d(n,t,(function(){return u[t]}))}(c);e("b329");var a=e("f0c5"),o=Object(a["a"])(u["default"],i["b"],i["c"],!1,null,"5907e1fa",null,!1,i["a"],void 0);n["default"]=o.exports},2845:function(t,n,e){"use strict";e.d(n,"b",(function(){return i})),e.d(n,"c",(function(){return u})),e.d(n,"a",(function(){}));var i=function(){var t=this.$createElement;this._self._c},u=[]},"73c8":function(t,n,e){"use strict";e.r(n);var i=e("a8e7"),u=e.n(i);for(var c in i)["default"].indexOf(c)<0&&function(t){e.d(n,t,(function(){return i[t]}))}(c);n["default"]=u.a},"9fa6":function(t,n,e){},a8e7:function(t,n,e){"use strict";(function(t){var i=e("4ea4");Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var u=i(e("285e")),c={name:"u-checkbox-group",mixins:[t.$u.mpMixin,t.$u.mixin,u.default],computed:{parentData:function(){return[this.value,this.disabled,this.inactiveColor,this.activeColor,this.size,this.labelDisabled,this.shape,this.iconSize,this.borderBottom,this.placement]},bemClass:function(){return this.bem("checkbox-group",["placement"])}},watch:{parentData:function(){this.children.length&&this.children.map((function(t){"function"===typeof t.init&&t.init()}))}},data:function(){return{}},created:function(){this.children=[]},methods:{unCheckedOther:function(t){var n=[];this.children.map((function(t){t.isChecked&&n.push(t.name)})),this.$emit("change",n),this.$emit("input",n)}}};n.default=c}).call(this,e("543d")["default"])},b329:function(t,n,e){"use strict";var i=e("9fa6"),u=e.n(i);u.a}}]);
-;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([
-    'node-modules/uview-ui/components/u-checkbox-group/u-checkbox-group-create-component',
-    {
-        'node-modules/uview-ui/components/u-checkbox-group/u-checkbox-group-create-component':(function(module, exports, __webpack_require__){
-            __webpack_require__('543d')['createComponent'](__webpack_require__("111b"))
-        })
-    },
-    [['node-modules/uview-ui/components/u-checkbox-group/u-checkbox-group-create-component']]
-]);

+ 0 - 4
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-checkbox-group/u-checkbox-group.json

@@ -1,4 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {}
-}

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-checkbox-group/u-checkbox-group.wxml

@@ -1 +0,0 @@
-<view class="{{['u-checkbox-group','data-v-5907e1fa',bemClass]}}"><slot></slot></view>

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-checkbox-group/u-checkbox-group.wxss

@@ -1 +0,0 @@
-view.data-v-5907e1fa, scroll-view.data-v-5907e1fa, swiper-item.data-v-5907e1fa{display:flex;flex-direction:column;flex-shrink:0;flex-grow:0;flex-basis:auto;align-items:stretch;align-content:flex-start}.u-checkbox-group--row.data-v-5907e1fa{display:flex;flex-direction:row}.u-checkbox-group--column.data-v-5907e1fa{display:flex;flex-direction:column}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-checkbox/u-checkbox.js


+ 0 - 6
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-checkbox/u-checkbox.json

@@ -1,6 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {
-    "u-icon": "/node-modules/uview-ui/components/u-icon/u-icon"
-  }
-}

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-checkbox/u-checkbox.wxml

@@ -1 +0,0 @@
-<view data-event-opts="{{[['tap',[['wrapperClickHandler',['$event']]]]]}}" class="{{['u-checkbox','data-v-ef1d2b94','u-checkbox-label--'+parentData.iconPlacement,parentData.borderBottom&&parentData.placement==='column'&&'u-border-bottom']}}" style="{{$root.s0}}" catchtap="__e"><view data-event-opts="{{[['tap',[['iconClickHandler',['$event']]]]]}}" class="{{['u-checkbox__icon-wrap','data-v-ef1d2b94',iconClasses]}}" style="{{$root.s1}}" catchtap="__e"><block wx:if="{{$slots.icon}}"><slot name="icon"></slot></block><block wx:else><u-icon class="u-checkbox__icon-wrap__icon data-v-ef1d2b94" vue-id="0009dd26-1" name="checkbox-mark" size="{{elIconSize}}" color="{{elIconColor}}" bind:__l="__l"></u-icon></block></view><text data-event-opts="{{[['tap',[['labelClickHandler',['$event']]]]]}}" style="{{'color:'+(elDisabled?elInactiveColor:elLabelColor)+';'+('font-size:'+(elLabelSize)+';')+('line-height:'+(elLabelSize)+';')}}" catchtap="__e" class="data-v-ef1d2b94">{{label}}</text></view>

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-checkbox/u-checkbox.wxss

@@ -1 +0,0 @@
-view.data-v-ef1d2b94, scroll-view.data-v-ef1d2b94, swiper-item.data-v-ef1d2b94{display:flex;flex-direction:column;flex-shrink:0;flex-grow:0;flex-basis:auto;align-items:stretch;align-content:flex-start}.u-checkbox.data-v-ef1d2b94{display:flex;flex-direction:row;overflow:hidden;flex-direction:row;align-items:center}.u-checkbox-label--left.data-v-ef1d2b94{flex-direction:row}.u-checkbox-label--right.data-v-ef1d2b94{flex-direction:row-reverse;justify-content:space-between}.u-checkbox__icon-wrap.data-v-ef1d2b94{box-sizing:border-box;transition-property:border-color,background-color,color;transition-duration:.2s;color:#606266;display:flex;flex-direction:row;align-items:center;justify-content:center;color:transparent;text-align:center;margin-right:6px;font-size:6px;border-width:1px;border-color:#c8c9cc;border-style:solid}.u-checkbox__icon-wrap--circle.data-v-ef1d2b94{border-radius:100%}.u-checkbox__icon-wrap--square.data-v-ef1d2b94{border-radius:3px}.u-checkbox__icon-wrap--checked.data-v-ef1d2b94{color:#fff;background-color:red;border-color:#2979ff}.u-checkbox__icon-wrap--disabled.data-v-ef1d2b94{background-color:#ebedf0!important}.u-checkbox__icon-wrap--disabled--checked.data-v-ef1d2b94{color:#c8c9cc!important}.u-checkbox__label.data-v-ef1d2b94{word-wrap:break-word;margin-left:5px;margin-right:12px;color:#606266;font-size:15px}.u-checkbox__label--disabled.data-v-ef1d2b94{color:#c8c9cc}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-code/u-code.js


+ 0 - 4
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-code/u-code.json

@@ -1,4 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {}
-}

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-code/u-code.wxml

@@ -1 +0,0 @@
-<view class="u-code data-v-75cd6d19"></view>

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-code/u-code.wxss

@@ -1 +0,0 @@
-view.data-v-75cd6d19, scroll-view.data-v-75cd6d19, swiper-item.data-v-75cd6d19{display:flex;flex-direction:column;flex-shrink:0;flex-grow:0;flex-basis:auto;align-items:stretch;align-content:flex-start}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-datetime-picker/u-datetime-picker.js


+ 0 - 6
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-datetime-picker/u-datetime-picker.json

@@ -1,6 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {
-    "u-picker": "/node-modules/uview-ui/components/u-picker/u-picker"
-  }
-}

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-datetime-picker/u-datetime-picker.wxml

@@ -1 +0,0 @@
-<u-picker vue-id="01eaed7b-1" show="{{show}}" closeOnClickOverlay="{{closeOnClickOverlay}}" columns="{{columns}}" title="{{title}}" itemHeight="{{itemHeight}}" showToolbar="{{showToolbar}}" visibleItemCount="{{visibleItemCount}}" defaultIndex="{{innerDefaultIndex}}" cancelText="{{cancelText}}" confirmText="{{confirmText}}" cancelColor="{{cancelColor}}" confirmColor="{{confirmColor}}" data-ref="picker" data-event-opts="{{[['^close',[['close']]],['^cancel',[['cancel']]],['^confirm',[['confirm']]],['^change',[['change']]]]}}" bind:close="__e" bind:cancel="__e" bind:confirm="__e" bind:change="__e" class="data-v-e63c31da vue-ref" bind:__l="__l"></u-picker>

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-datetime-picker/u-datetime-picker.wxss

@@ -1 +0,0 @@
-view.data-v-e63c31da, scroll-view.data-v-e63c31da, swiper-item.data-v-e63c31da{display:flex;flex-direction:column;flex-shrink:0;flex-grow:0;flex-basis:auto;align-items:stretch;align-content:flex-start}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-empty/u-empty.js


+ 0 - 6
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-empty/u-empty.json

@@ -1,6 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {
-    "u-icon": "/node-modules/uview-ui/components/u-icon/u-icon"
-  }
-}

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-empty/u-empty.wxml

@@ -1 +0,0 @@
-<block wx:if="{{show}}"><view class="u-empty data-v-1e80f00c" style="{{$root.s0}}"><block wx:if="{{!isSrc}}"><u-icon vue-id="55f7abbe-1" name="{{mode==='message'?'chat':'empty-'+mode}}" size="{{iconSize}}" color="{{iconColor}}" margin-top="14" class="data-v-1e80f00c" bind:__l="__l"></u-icon></block><block wx:else><image style="{{'width:'+($root.g0)+';'+('height:'+($root.g1)+';')}}" src="{{icon}}" mode="widthFix" class="data-v-1e80f00c"></image></block><text class="u-empty__text data-v-1e80f00c" style="{{$root.s1}}">{{text?text:icons[mode]}}</text><block wx:if="{{$slots.default||$slots.$default}}"><view class="u-empty__wrap data-v-1e80f00c"><slot></slot></view></block></view></block>

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-empty/u-empty.wxss

@@ -1 +0,0 @@
-view.data-v-1e80f00c, scroll-view.data-v-1e80f00c, swiper-item.data-v-1e80f00c{display:flex;flex-direction:column;flex-shrink:0;flex-grow:0;flex-basis:auto;align-items:stretch;align-content:flex-start}.u-empty.data-v-1e80f00c{display:flex;flex-direction:row;flex-direction:column;justify-content:center;align-items:center}.u-empty__text.data-v-1e80f00c{display:flex;flex-direction:row;justify-content:center;align-items:center;margin-top:20rpx}.u-slot-wrap.data-v-1e80f00c{display:flex;flex-direction:row;justify-content:center;align-items:center;margin-top:20rpx}

+ 0 - 10
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-gap/u-gap.js

@@ -1,10 +0,0 @@
-(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["node-modules/uview-ui/components/u-gap/u-gap"],{"0710":function(t,n,e){},"1a4c":function(t,n,e){"use strict";(function(t){var i=e("4ea4");Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var a=i(e("3092")),u={name:"u-gap",mixins:[t.$u.mpMixin,t.$u.mixin,a.default],computed:{gapStyle:function(){var n={backgroundColor:this.bgColor,height:t.$u.addUnit(this.height),marginTop:t.$u.addUnit(this.marginTop),marginBottom:t.$u.addUnit(this.marginBottom)};return t.$u.deepMerge(n,t.$u.addStyle(this.customStyle))}}};n.default=u}).call(this,e("543d")["default"])},"7ed35":function(t,n,e){"use strict";e.d(n,"b",(function(){return i})),e.d(n,"c",(function(){return a})),e.d(n,"a",(function(){}));var i=function(){var t=this.$createElement,n=(this._self._c,this.__get_style([this.gapStyle]));this.$mp.data=Object.assign({},{$root:{s0:n}})},a=[]},da70:function(t,n,e){"use strict";e.r(n);var i=e("1a4c"),a=e.n(i);for(var u in i)["default"].indexOf(u)<0&&function(t){e.d(n,t,(function(){return i[t]}))}(u);n["default"]=a.a},ebea:function(t,n,e){"use strict";e.r(n);var i=e("7ed35"),a=e("da70");for(var u in a)["default"].indexOf(u)<0&&function(t){e.d(n,t,(function(){return a[t]}))}(u);e("ef5c");var o=e("f0c5"),r=Object(o["a"])(a["default"],i["b"],i["c"],!1,null,"206e829c",null,!1,i["a"],void 0);n["default"]=r.exports},ef5c:function(t,n,e){"use strict";var i=e("0710"),a=e.n(i);a.a}}]);
-;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([
-    'node-modules/uview-ui/components/u-gap/u-gap-create-component',
-    {
-        'node-modules/uview-ui/components/u-gap/u-gap-create-component':(function(module, exports, __webpack_require__){
-            __webpack_require__('543d')['createComponent'](__webpack_require__("ebea"))
-        })
-    },
-    [['node-modules/uview-ui/components/u-gap/u-gap-create-component']]
-]);

+ 0 - 4
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-gap/u-gap.json

@@ -1,4 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {}
-}

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-gap/u-gap.wxml

@@ -1 +0,0 @@
-<view class="u-gap data-v-206e829c" style="{{$root.s0}}"></view>

+ 0 - 1
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-gap/u-gap.wxss

@@ -1 +0,0 @@
-view.data-v-206e829c, scroll-view.data-v-206e829c, swiper-item.data-v-206e829c{display:flex;flex-direction:column;flex-shrink:0;flex-grow:0;flex-basis:auto;align-items:stretch;align-content:flex-start}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
unpackage/dist/build/mp-weixin/node-modules/uview-ui/components/u-icon/u-icon.js


Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.