feat:add date particle
This commit is contained in:
@@ -44,6 +44,7 @@ import { ControlComponent } from '../../dataset/enum/Control'
|
|||||||
import { formatElementList } from '../../utils/element'
|
import { formatElementList } from '../../utils/element'
|
||||||
import { WorkerManager } from '../worker/WorkerManager'
|
import { WorkerManager } from '../worker/WorkerManager'
|
||||||
import { Previewer } from './particle/previewer/Previewer'
|
import { Previewer } from './particle/previewer/Previewer'
|
||||||
|
import { DateParticle } from './particle/date/DateParticle'
|
||||||
|
|
||||||
export class Draw {
|
export class Draw {
|
||||||
|
|
||||||
@@ -78,6 +79,7 @@ export class Draw {
|
|||||||
private waterMark: Watermark
|
private waterMark: Watermark
|
||||||
private header: Header
|
private header: Header
|
||||||
private hyperlinkParticle: HyperlinkParticle
|
private hyperlinkParticle: HyperlinkParticle
|
||||||
|
private dateParticle: DateParticle
|
||||||
private separatorParticle: SeparatorParticle
|
private separatorParticle: SeparatorParticle
|
||||||
private pageBreakParticle: PageBreakParticle
|
private pageBreakParticle: PageBreakParticle
|
||||||
private superscriptParticle: SuperscriptParticle
|
private superscriptParticle: SuperscriptParticle
|
||||||
@@ -130,6 +132,7 @@ export class Draw {
|
|||||||
this.waterMark = new Watermark(this)
|
this.waterMark = new Watermark(this)
|
||||||
this.header = new Header(this)
|
this.header = new Header(this)
|
||||||
this.hyperlinkParticle = new HyperlinkParticle(this)
|
this.hyperlinkParticle = new HyperlinkParticle(this)
|
||||||
|
this.dateParticle = new DateParticle()
|
||||||
this.separatorParticle = new SeparatorParticle()
|
this.separatorParticle = new SeparatorParticle()
|
||||||
this.pageBreakParticle = new PageBreakParticle(this)
|
this.pageBreakParticle = new PageBreakParticle(this)
|
||||||
this.superscriptParticle = new SuperscriptParticle()
|
this.superscriptParticle = new SuperscriptParticle()
|
||||||
@@ -801,6 +804,9 @@ export class Draw {
|
|||||||
} else if (element.type === ElementType.HYPERLINK) {
|
} else if (element.type === ElementType.HYPERLINK) {
|
||||||
this.textParticle.complete()
|
this.textParticle.complete()
|
||||||
this.hyperlinkParticle.render(ctx, element, x, y + offsetY)
|
this.hyperlinkParticle.render(ctx, element, x, y + offsetY)
|
||||||
|
} else if (element.type === ElementType.DATE) {
|
||||||
|
this.textParticle.complete()
|
||||||
|
this.dateParticle.render(ctx, element, x, y + offsetY)
|
||||||
} else if (element.type === ElementType.SUPERSCRIPT) {
|
} else if (element.type === ElementType.SUPERSCRIPT) {
|
||||||
this.textParticle.complete()
|
this.textParticle.complete()
|
||||||
this.superscriptParticle.render(ctx, element, x, y + offsetY)
|
this.superscriptParticle.render(ctx, element, x, y + offsetY)
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
import { IRowElement } from '../../../../interface/Row'
|
||||||
|
|
||||||
|
export class DateParticle {
|
||||||
|
|
||||||
|
public render(ctx: CanvasRenderingContext2D, element: IRowElement, x: number, y: number) {
|
||||||
|
ctx.save()
|
||||||
|
ctx.font = element.style
|
||||||
|
if (element.color) {
|
||||||
|
ctx.fillStyle = element.color
|
||||||
|
}
|
||||||
|
ctx.fillText(element.value, x, y)
|
||||||
|
ctx.restore()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -47,7 +47,8 @@ export const EDITOR_ELEMENT_ZIP_ATTR: Array<keyof IElement> = [
|
|||||||
'colgroup',
|
'colgroup',
|
||||||
'valueList',
|
'valueList',
|
||||||
'control',
|
'control',
|
||||||
'checkbox'
|
'checkbox',
|
||||||
|
'dateFormat'
|
||||||
]
|
]
|
||||||
|
|
||||||
export const TEXTLIKE_ELEMENT_TYPE: ElementType[] = [
|
export const TEXTLIKE_ELEMENT_TYPE: ElementType[] = [
|
||||||
@@ -55,5 +56,6 @@ export const TEXTLIKE_ELEMENT_TYPE: ElementType[] = [
|
|||||||
ElementType.HYPERLINK,
|
ElementType.HYPERLINK,
|
||||||
ElementType.SUBSCRIPT,
|
ElementType.SUBSCRIPT,
|
||||||
ElementType.SUPERSCRIPT,
|
ElementType.SUPERSCRIPT,
|
||||||
ElementType.CONTROL
|
ElementType.CONTROL,
|
||||||
|
ElementType.DATE
|
||||||
]
|
]
|
||||||
@@ -10,5 +10,6 @@ export enum ElementType {
|
|||||||
CONTROL = 'control',
|
CONTROL = 'control',
|
||||||
CHECKBOX = 'checkbox',
|
CHECKBOX = 'checkbox',
|
||||||
LATEX = 'latex',
|
LATEX = 'latex',
|
||||||
TAB = 'tab'
|
TAB = 'tab',
|
||||||
|
DATE = 'date'
|
||||||
}
|
}
|
||||||
@@ -69,6 +69,11 @@ export interface ILaTexElement {
|
|||||||
laTexSVG?: string;
|
laTexSVG?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface IDateElement {
|
||||||
|
dateFormat?: string;
|
||||||
|
dateId?: string;
|
||||||
|
}
|
||||||
|
|
||||||
export type IElement = IElementBasic
|
export type IElement = IElementBasic
|
||||||
& IElementStyle
|
& IElementStyle
|
||||||
& ITable
|
& ITable
|
||||||
@@ -78,6 +83,7 @@ export type IElement = IElementBasic
|
|||||||
& IControlElement
|
& IControlElement
|
||||||
& ICheckboxElement
|
& ICheckboxElement
|
||||||
& ILaTexElement
|
& ILaTexElement
|
||||||
|
& IDateElement
|
||||||
|
|
||||||
export interface IElementMetrics {
|
export interface IElementMetrics {
|
||||||
width: number;
|
width: number;
|
||||||
|
|||||||
@@ -72,6 +72,31 @@ export function formatElementList(elementList: IElement[], options: IFormatEleme
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
i--
|
i--
|
||||||
|
} else if (el.type === ElementType.DATE) {
|
||||||
|
const valueList = el.valueList || []
|
||||||
|
// 移除父节点
|
||||||
|
elementList.splice(i, 1)
|
||||||
|
// 追加字节点
|
||||||
|
if (valueList.length) {
|
||||||
|
// 元素展开
|
||||||
|
if (valueList[0].value.length > 1) {
|
||||||
|
const deleteValue = valueList.splice(0, 1)[0]
|
||||||
|
const deleteTextList = splitText(deleteValue.value)
|
||||||
|
for (let d = 0; d < deleteTextList.length; d++) {
|
||||||
|
valueList.splice(d, 0, { ...deleteValue, value: deleteTextList[d] })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const dateId = getUUID()
|
||||||
|
for (let v = 0; v < valueList.length; v++) {
|
||||||
|
const value = valueList[v]
|
||||||
|
value.type = el.type
|
||||||
|
value.dateFormat = el.dateFormat
|
||||||
|
value.dateId = dateId
|
||||||
|
elementList.splice(i, 0, value)
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i--
|
||||||
} else if (el.type === ElementType.CONTROL) {
|
} else if (el.type === ElementType.CONTROL) {
|
||||||
const { prefix, postfix, value, placeholder, code, type, valueSets } = el.control!
|
const { prefix, postfix, value, placeholder, code, type, valueSets } = el.control!
|
||||||
const controlId = getUUID()
|
const controlId = getUUID()
|
||||||
@@ -302,6 +327,27 @@ export function zipElementList(payload: IElement[]): IElement[] {
|
|||||||
}
|
}
|
||||||
hyperlinkElement.valueList = zipElementList(valueList)
|
hyperlinkElement.valueList = zipElementList(valueList)
|
||||||
element = hyperlinkElement
|
element = hyperlinkElement
|
||||||
|
} else if (element.type === ElementType.DATE) {
|
||||||
|
const dateId = element.dateId
|
||||||
|
const dateElement: IElement = {
|
||||||
|
type: ElementType.DATE,
|
||||||
|
value: '',
|
||||||
|
dateFormat: element.dateFormat
|
||||||
|
}
|
||||||
|
const valueList: IElement[] = []
|
||||||
|
while (e < elementList.length) {
|
||||||
|
const dateE = elementList[e]
|
||||||
|
if (dateId !== dateE.dateId) {
|
||||||
|
e--
|
||||||
|
break
|
||||||
|
}
|
||||||
|
delete dateE.type
|
||||||
|
delete dateE.dateFormat
|
||||||
|
valueList.push(dateE)
|
||||||
|
e++
|
||||||
|
}
|
||||||
|
dateElement.valueList = zipElementList(valueList)
|
||||||
|
element = dateElement
|
||||||
} else if (element.type === ElementType.CONTROL) {
|
} else if (element.type === ElementType.CONTROL) {
|
||||||
// 控件处理
|
// 控件处理
|
||||||
const controlId = element.controlId
|
const controlId = element.controlId
|
||||||
|
|||||||
+14
@@ -279,6 +279,20 @@ elementList.push(...<IElement[]>[{
|
|||||||
value: '\n'
|
value: '\n'
|
||||||
}])
|
}])
|
||||||
|
|
||||||
|
// 日期选择
|
||||||
|
elementList.push(...<IElement[]>[{
|
||||||
|
value: '签署日期:'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '',
|
||||||
|
valueList: [{
|
||||||
|
value: `2022-08-10 17:30:01`
|
||||||
|
}],
|
||||||
|
type: ElementType.DATE
|
||||||
|
}, {
|
||||||
|
value: '\n'
|
||||||
|
}])
|
||||||
|
|
||||||
// 模拟结尾文本
|
// 模拟结尾文本
|
||||||
elementList.push(...[{
|
elementList.push(...[{
|
||||||
value: '',
|
value: '',
|
||||||
|
|||||||
Reference in New Issue
Block a user