# js2table-tools
**Repository Path**: wangziyi-room/js2table-tools
## Basic Information
- **Project Name**: js2table-tools
- **Description**: js描述数据对象,生成支持A4,A3格式的table,使用html2canvas打印
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-05-22
- **Last Updated**: 2025-07-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: JavaScript, HTML
## README
# @hy-tools/job-ticket
js对象生成html表单,支持打印(内置特殊作业8大工作票)
- 支持A4/A3纸张打印
- 支持纵向/横向打印方向
author: wzy
date: 2025-05-29
version: 0.0.1
## 包使用方式:
### 安装
```bash
npm install @hy-tools/job-ticket@latest --registry=http://10.2.163.218:4873/
pnpm install @hy-tools/job-ticket@latest --registry=http://10.2.163.218:4873/
```
### 使用
#### 全局注入
```js
// main.js
import ticket from '@hy-tools/job-ticket'
import '@hy-tools/job-ticket/dist/index.css'
// 其他代码...
app.use(ticket) // 全局注入: $ticketConfig
```
```html
```
- apiParams - 请求接口的参数 (目前接口一般是:licenseId和workPlanId)
- apiHeader - 请求接口的请求头(目前请求头一般是:Authorization)
- type - 作业票类型:HotWork(动火作业)、ConfinedSpace(受限空间)、BlindPlatePlugging(盲板抽堵)、Height(高处)、Lifting(吊装)、TemporaryElectricity(临时用电)、GroundBreaking(动土)、OpenCircuit(断路)、BigTicket(大票)
```js
// 使用功能的vue3(setup)页面内
import { getCurrentInstance } from 'vue'
const instance = getCurrentInstance()
const _ticketConfig = instance?.appContext.config.globalProperties.$ticketConfig
// 下面所有的配置格式,获取到后,都可以再次修改,最终通过config对象,传入组件中即可。
const config = ref(_ticketConfig.getConfig('template')) // template是基础的配置格式;template-complex是最全的配置项,各种复杂配置都在对象里面
// const config = ref(_ticketConfig.getConfig('template-complex'))
// const alltypes = _ticketConfig.getTypes() // 此函数可查看内置的8大作业票配置对象格式(会包含两个特殊配置:一个简略版template,一个完整版template-complex)
```
#### 按需注入
```html
```
- apiParams - 请求接口的参数 (目前接口一般是:licenseId和workPlanId)
- apiHeader - 请求接口的请求头(目前请求头一般是:Authorization)
- type - 作业票类型:HotWork(动火作业)、ConfinedSpace(受限空间)、BlindPlatePlugging(盲板抽堵)、Height(高处)、Lifting(吊装)、TemporaryElectricity(临时用电)、GroundBreaking(动土)、OpenCircuit(断路)、BigTicket(大票)
```js
import { Ticket, ticketConfig } from '@hy-tools/job-ticket'
import '@hy-tools/job-ticket/dist/index.css'
// const alltypes = ticketConfig.getTypes() // 此函数可查看内置的8大作业票配置对象格式(会包含两个特殊配置:一个简略版template,一个完整版template-complex)
// ticketConfig.getConfig('template') 获取到的是对象,可自由修改(按照既定格式),再通过config对象传入组件中即可。
const config = ref(ticketConfig.getConfig('template'))
```
#### 内置8个作业票
- 动火作业(HotWork)
- 受限空间(ConfinedSpace)
- 盲板抽堵(BlindPlatePlugging)
- 高处作业(Height)
- 吊装作业(Lifting)
- 临时用电(TemporaryElectricity)
- 动土作业(GroundBreaking)
- 断路作业(OpenCircuit)
```js
import { Ticket, ticketConfig } from '@hy-tools/job-ticket'
ticketConfig.getConfig('HotWork') // 获取动火作业配置项
```
#### 内置2个特殊表单:template 、template-complex
```js
ticketConfig.getConfig('template') // 可查看对象结构,知悉简单的配置项
ticketConfig.getConfig('template-complex') // 可查看对象结构,知悉复杂的配置项
```
#### 其他非内置的表单信息,可以按照下面的数据结构自行配置
```html
```
```js
import { Ticket } from '@hy-tools/job-ticket'
const config = {
// 数据结构如下展示[参考 template.js 和 复杂的template-complex.js],可自由配置
}
```
#### 配置项说明
```js
// template.js
export default {
title: '表格标题',
header: [
{
label: '左小标题',
value: '****'
},
{
label: '右小标题',
value: '001'
}
], // 生成table顶部的标识信息
columnsNum: 7, // 表格一共多少列数
data: [
[
{
label: '姓名',
value: '张星',
labelStyle: {
width: '85px'
}
},
{
label: '年龄',
value: '31',
labelStyle: {
width: '85px'
}
},
{
label: '职业',
value: '行星防空领事',
labelStyle: {
width: '85px'
}
},
{
label: '头像',
labelConfig: {
rowspan: 3
}, // 跨行跨列
labelStyle: {
width: '100px'
}, // css样式
labelMode: 'img',
labelModeUrl: 'http://localhost:5173/vite.svg',
labelModeStyle: {
margin: 'auto'
}
} // 头像以图片展示
],
[
{
mode: 'NewList',
data: {
columns: [
{ label: '序号', align: 'center|center', style: { width: '60px' } },
{ label: '教育情况' },
{ label: '开始时间' },
{ label: '截止时间' },
{ label: '备注' }
],
list: [
[1, '小学', '2003', '2009', '正常结业'],
[2, '中学', '2009', '2012', '正常结业'],
[3, '高中', '2012', '2015', '正常结业'],
[4, '大学', '2015', '2019', '正常结业']
]
}
} // 新布局:对齐的标准表格list
],
[
{
mode: 'NewTable',
columnsNum: 6,
data: [
[
{ label: '在岗单位', value: '', labelStyle: { width: '100px' } },
{ label: '职称', value: '', labelStyle: { width: '80px' } },
{ label: '职位', value: '', labelStyle: { width: '80px' } }
],
[
{ label: '在岗单位', value: '' },
{ label: '职称', value: '' },
{ label: '职位', value: '' }
],
[
{ label: '在岗单位', value: '' },
{ label: '职称', value: '' },
{ label: '职位', value: '' }
]
]
} // table嵌套table,table不规则
]
],
footer: [
{
label: '操作人:',
value: '张三'
},
{
label: '页码:',
value: '1/1'
},
{
label: '操作时间:',
value: '2024/12/22 10.20.19'
}
] // 生成table的底部信息
}
```
```js
// template-complex.js
export default {
title: {
text: '绿色表格标题',
textHtml: '大标题',
style: {
fontSize: '20px',
color: 'green'
}
}, // 标题复杂格式的配置方式
header: [
{
label: '左小标题',
// lableHtml优先label
labelHtml: '左左左',
value: 'TEST',
valueHtml: '是快到家了分手',
labelStyle: {
fontSize: '14px',
color: 'gray'
},
valueStyle: {
fontSize: '14px',
color: 'orange'
}
},
{
label: '右小标题',
value: '14号字体',
labelStyle: {
fontSize: '14px'
},
valueStyle: {
fontSize: '14px'
}
}
], // 生成table顶部的标识信息(复杂版)
columnsNum: 7, // 表格列数
data: [
[
{
label: '姓名',
labelHtml: '姓
名',
value: '张星',
valueHtml: '张* 星',
labelConfig: {
colspan: 1,
rowspan: 1
},
labelStyle: {
width: '85px',
color: '#339900'
},
valueConfig: {
colspan: 3,
rowspan: 1
},
valueStyle: {
color: 'red',
fontSize: '16px',
fontWeight: 'bold'
// width:['100px','100px','120px'] // 个数跟valueConfig.colspan走
}
},
{
label: '年龄',
value: '31',
labelStyle: {
width: '85px'
}
},
{
label: '头像',
labelConfig: {
rowspan: 3
},
labelStyle: {
width: '100px'
},
labelMode: 'img',
labelModeUrl: 'http://localhost:5173/vite.svg',
labelModeStyle: {
margin: 'auto'
}
}
],
[
{
label: '出生年月',
value: '1997-04-02'
},
{
label: '血型',
value: 'AB型',
// 下面是配置复选框的格式
valueMode: 'checkbox',
valueModeOptions: [
{ label: 'A型', value: 'a' },
{ label: 'B型', value: 'b' },
{ label: 'AB型', value: 'ab' },
{ label: 'O型', value: 'o' }
],
valueModeCheckboxName: 'chkd', // 控件的name
valueModeValue: ['ab', 'o']
}, // 配置复选框
{
label: '身高',
value: '178'
}
],
[
{
label: '体重',
value: '142'
},
{
label: '婚姻状况',
value: '未婚'
},
{
value: '删除线',
valueConfig: {
colspan: 2
},
valueStyle: {
textAlign: 'center',
textDecoration: 'line-through',
color: '#999'
}
}
],
[
{
label: '性别',
value: '男',
// 配置单选框
valueMode: 'radio',
valueModeValue: '1',
valueModeRadioName: '',
valueModeOptions: [
{ label: '男', value: '1' },
{ label: '女', value: '2', labelStyle: { color: 'red' } }
],
valueModeStyle: { color: 'green' }
},
{
label: '民族',
value: '汉'
},
{
label: '行政区划',
value: '行星防御领事<点我可跳转>',
valueConfig: {
colspan: 2
},
// 生成链接
valueMode: 'link',
valueModeUrl: 'http://www.baidu.com/',
valueModeStyle: {
color: '#99AA33'
}
}
],
[
{
mode: 'NewTable',
columnsNum: 6,
data: [
[
{ label: '在岗单位', value: '', labelStyle: { width: '100px' } },
{ label: '职称', value: '', labelStyle: { width: '80px' } },
{
label: '职位',
value: '行星防御指挥长',
labelStyle: { width: '80px' },
valueStyle: {
color: 'burlywood',
fontSize: '14px'
}
}
],
[
{
label: '是否在职',
value: '<-是否在职',
labelMode: 'radio',
labelModeValue: '2',
labelModeOptions: [
{ label: '是', value: '1' },
{ label: '否', value: '2' }
],
labelModeStyle: {
fontSize: '12px'
}
},
{
label: '职称',
labelHtml: 'YM',
value: '',
valueHtml: 'YUWD'
},
{ label: '职位', value: '' }
],
[
{ label: '在岗单位', value: '' },
{
label: '职称',
value: '',
valueMode: 'checkbox',
valueModeOptions: [
{ label: '部长', value: '1' },
{ label: '处长', value: '2', labelStyle: { color: 'red' } },
{ label: '连长', value: '3' }
],
valueModeCheckboxName: 'pad',
valueModeValue: '3',
valueModeStyle: {
color: 'blue'
}
},
{ label: '职位', value: '' }
]
]
}
],
[
{
mode: 'NewList', // NewList比较特殊,请完整看下下面的配置格式
data: {
columns: [
{ label: '序号', align: 'center|center', style: { width: '60px' } },
{ label: '教育情况', width: '100px', align: 'center|right' },
{ label: '开始时间' },
{ label: '截止时间', labelHtml: '日期' },
{
label: '备注【300px宽度】',
width: '300px',
align: 'center|center',
style: {
color: '#11FF99'
}
}
], // 配置表头
list: [
[1, '小学', '2003', '2009', '正常结业'],
[2, '中学', '2009', '2012', '正常结业'], // 简单配置
[
3,
'高中',
{
text: '1',
config: { colspan: 2 }, // 垮列
// 配置复选框
mode: 'checkbox',
modeOptions: [
{ label: '在读', value: '3' },
{ label: '肄业', value: '4' },
{ label: '结业', value: '5' },
{ label: '毕业', value: '6' }
],
modeStyle: {},
modeRadioName: '',
modeValue: ['3', '5'] // 默认值
},
// '2015',
{
text: '正常结业',
textHtml: '李会计哈'
}
], // 复杂配置
[
{
text: '4',
style: {
textAlign: 'right'
}
},
{
text: '大学',
style: {
color: '#AA3377',
fontSize: '12px'
}
},
{
text: '2015[居中]',
style: {
fontSize: '14px',
color: 'red',
textAlign: 'center'
}
},
{
text: '至今',
// 配置超链接
mode: 'link',
modeUrl: 'http://www.baidu.com',
modeStyle: {
borderBottom: '1px solid red',
textDecoration: 'none'
}
},
{
text: '图片一张',
// 配置图片展示
mode: 'img',
modeUrl: 'http://localhost:5173/vite.svg',
modeStyle: {
color: 'red',
margin: 'auto'
}
}
]
] // 二维数组表示的 tbody内部的tr和td
}
}
],
[
{
mode: 'Opinion', // 意见框配置规则如下:
border: 'true', // 表示是否展示边框
layout: 'table', // table | div td内部使用什么布局 【默认table】
data: [
{
label: '作业负责人意见',
labelStyle: { width: '160px', textAlign: 'center' },
value: '同意',
valueStyle: {},
sign: '张三', // 签字信息
signMode: 'img', // 标签sign是张图片
signStyle: {},
signLabel: '人员:', // 签字描述头
signLabelStyle: {},
signParentStyle: { color: 'red' }, // 签字父级容器
time: '2025-12-12 10:10:10', // 时间信息
timeStyle: {},
timeLabel: '时间:', // 时间描述头
timeLabelStyle: {},
timeParentStyle: { flex: 4 } // 时间父级容器
},
{ label: '所在单位意见', value: '同意', sign: '麻子', time: '2025-12-15 09:21:02' }
]
}
]
],
footer: [
{
label: '操作人:',
value: '张三',
labelStyle: {
fontSize: '12px'
},
valueStyle: {
fontSize: '12px',
color: 'blue'
}
},
{
label: '页码:',
value: '1/1',
valueHtml: '1/3',
labelStyle: {
fontSize: '12px'
},
valueStyle: {
fontSize: '12px'
// color: 'red'
}
},
{
label: '操作时间:',
value: '2024/12/22 10.20.19',
labelStyle: {
fontSize: '12px',
color: 'green'
},
valueStyle: {
fontSize: '12px'
}
}
] // 生成table底部信息
}
```