This commit is contained in:
		
							parent
							
								
									27dfcd9756
								
							
						
					
					
						commit
						954f658ac3
					
				| 
						 | 
				
			
			@ -22,26 +22,115 @@
 | 
			
		|||
        </uni-card>
 | 
			
		||||
 | 
			
		||||
        <uni-card is-shadow is-full spacing="0px" style="margin-top: 10px">
 | 
			
		||||
            <div>
 | 
			
		||||
                
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="img-cont">
 | 
			
		||||
                <image style="width: 100%" :src="codeImg"></image>
 | 
			
		||||
                <div>
 | 
			
		||||
                    <canvas
 | 
			
		||||
                        canvasId="canvas"
 | 
			
		||||
                        class="my-canvas"
 | 
			
		||||
                    ></canvas>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </uni-card>
 | 
			
		||||
    </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
import { ref } from 'vue'
 | 
			
		||||
import { onLoad } from '@dcloudio/uni-app'
 | 
			
		||||
import { nextTick, ref } from 'vue'
 | 
			
		||||
 | 
			
		||||
// 编号
 | 
			
		||||
const code = ref<string>('')
 | 
			
		||||
// 编号图片
 | 
			
		||||
const codeImg = ref<string>('https://web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg')
 | 
			
		||||
 | 
			
		||||
onLoad(() => {
 | 
			
		||||
    nextTick(() => {
 | 
			
		||||
        // 画章
 | 
			
		||||
        chapter('XXX专用章', 'XXX科技股份有限公司')
 | 
			
		||||
    })
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
// 识别
 | 
			
		||||
const handleRecognition = () => {
 | 
			
		||||
    console.log('识别')
 | 
			
		||||
    uni.navigateTo({ url: '/pages/integratedQuery/electronicTag/codeRecognition' })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 绘制章
 | 
			
		||||
const chapter = (text, companyName) => {
 | 
			
		||||
    const ctx = uni.createCanvasContext('canvas')
 | 
			
		||||
 | 
			
		||||
    // 绘制印章边框
 | 
			
		||||
    let width = 82
 | 
			
		||||
    let height = 82
 | 
			
		||||
    ctx.lineWidth = 3
 | 
			
		||||
    ctx.strokeStyle = '#cf4c36'
 | 
			
		||||
    ctx.beginPath()
 | 
			
		||||
    ctx.arc(width, height, 80, 0, Math.PI * 2) // 宽、高、半径
 | 
			
		||||
    ctx.stroke()
 | 
			
		||||
 | 
			
		||||
    // 画五角星
 | 
			
		||||
    create5star(ctx, width, height, 20, '#cf4c36', 0)
 | 
			
		||||
 | 
			
		||||
    // 绘制印章名称
 | 
			
		||||
    ctx.font = '100 13px 宋体'
 | 
			
		||||
    ctx.textBaseline = 'middle' // 设置文本的垂直对齐方式
 | 
			
		||||
    ctx.textAlign = 'center' // 设置文本的水平对对齐方式
 | 
			
		||||
    ctx.lineWidth = 3 // 设置线条的宽度
 | 
			
		||||
    ctx.strokeStyle = '#cf4c36'
 | 
			
		||||
    ctx.strokeText(text, width, height + 50)
 | 
			
		||||
 | 
			
		||||
    // 绘制印章单位
 | 
			
		||||
    ctx.translate(width, height) // 平移到此位置
 | 
			
		||||
    ctx.font = '100 13px 宋体'
 | 
			
		||||
    let count = companyName.length // 字数
 | 
			
		||||
    let angle = (4 * Math.PI) / (3 * (count - 1)) // 字间角度
 | 
			
		||||
    let chars = companyName.split('')
 | 
			
		||||
    let c
 | 
			
		||||
    for (let i = 0; i < count; i++) {
 | 
			
		||||
        c = chars[i] // 需要绘制的字符
 | 
			
		||||
        if (i == 0) {
 | 
			
		||||
            ctx.rotate((5 * Math.PI) / 6)
 | 
			
		||||
        } else {
 | 
			
		||||
            ctx.rotate(angle)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ctx.save()
 | 
			
		||||
        ctx.translate(65, 0) // 平移到此位置,此时字和x轴垂直,公司名称和最外圈的距离
 | 
			
		||||
        ctx.rotate(Math.PI / 2) // 旋转90度,让字平行于x轴
 | 
			
		||||
        ctx.strokeStyle = '#cf4c36' // 设置印章单位字体颜色为较浅的红色
 | 
			
		||||
        ctx.strokeText(c, 0, 0) // 此点为字的中心点
 | 
			
		||||
        ctx.restore()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 执行绘制
 | 
			
		||||
    ctx.draw()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//绘制五角星
 | 
			
		||||
const create5star = (context, sx, sy, radius, color, rotato) => {
 | 
			
		||||
    context.save()
 | 
			
		||||
    context.fillStyle = color
 | 
			
		||||
    context.translate(sx, sy) //移动坐标原点
 | 
			
		||||
    context.rotate(Math.PI + rotato) //旋转
 | 
			
		||||
    context.beginPath() //创建路径
 | 
			
		||||
    // let x = Math.sin(0);
 | 
			
		||||
    // let y = Math.cos(0);
 | 
			
		||||
    let dig = (Math.PI / 5) * 4
 | 
			
		||||
    for (let i = 0; i < 5; i++) {
 | 
			
		||||
        //画五角星的五条边
 | 
			
		||||
        let x = Math.sin(i * dig)
 | 
			
		||||
        let y = Math.cos(i * dig)
 | 
			
		||||
        context.lineTo(x * radius, y * radius)
 | 
			
		||||
    }
 | 
			
		||||
    context.closePath()
 | 
			
		||||
    context.stroke()
 | 
			
		||||
    context.fill()
 | 
			
		||||
    context.restore()
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
| 
						 | 
				
			
			@ -52,6 +141,16 @@ page {
 | 
			
		|||
    padding: 10px;
 | 
			
		||||
    .img-cont {
 | 
			
		||||
        min-height: 100px;
 | 
			
		||||
        margin-top: 20px;
 | 
			
		||||
        /* display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        justify-content: right;
 | 
			
		||||
        position: relative; */
 | 
			
		||||
        .my-canvas {
 | 
			
		||||
            width: 165px;
 | 
			
		||||
            height: 165px;
 | 
			
		||||
            z-index: 9999;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue