You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
314 lines
10 KiB
314 lines
10 KiB
<template>
|
|
<div class="box">
|
|
<div class="title">kr-print-designer 打印模板设计器</div>
|
|
<section>
|
|
<div class="section">模板管理</div>
|
|
<el-table :data="tempList" style="width: 100%" size="mini" border>
|
|
<el-table-column label="模板名称" prop="title"></el-table-column>
|
|
<el-table-column label="模板类型">
|
|
<template slot-scope="scope">
|
|
<span>{{scope.row.type == 1 ? '出库单' : '入库单'}}</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="模板宽高">
|
|
<template slot-scope="scope">
|
|
<span>{{scope.row.width + ' * '+ scope.row.height}}</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="纸张大小">
|
|
<template slot-scope="scope">
|
|
<span>{{scope.row.pageWidth + 'mm * '+ scope.row.pageHeight+'mm'}}</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="right">
|
|
<template slot="header">
|
|
<el-button size="mini" type="primary" @click="openCreate">创建模板</el-button>
|
|
</template>
|
|
<template slot-scope="scope">
|
|
<el-button type="text" size="mini" @click="handleEdit(scope.$index, scope.row ,scope.row.id)">设计</el-button>
|
|
<el-button type="text" size="mini" @click="handlePreview(scope.$index, scope.row)">预览</el-button>
|
|
<el-button type="text" size="mini" @click="handleCopy(scope.row)">复制新增</el-button>
|
|
<el-button
|
|
v-if="!scope.row.default"
|
|
type="text"
|
|
size="mini"
|
|
@click="handleDelete(scope.$index, scope.row)"
|
|
>删除</el-button>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
<el-dialog title="添加模板" :visible.sync="visible" width="310px">
|
|
<el-form ref="form" :model="form" size="small" :rules="rules" label-width="80px">
|
|
<el-form-item label="模板名称" prop="title">
|
|
<el-input v-model="form.title"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="模板类型" prop="type">
|
|
<el-select v-model="form.type">
|
|
<el-option label="出库单" :value="1"></el-option>
|
|
<el-option label="入库单" :value="2"></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item label="模板宽度" prop="width">
|
|
<el-input v-model="form.width"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="模板高度" prop="height">
|
|
<el-input v-model="form.height"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="纸张宽度" prop="pageWidth">
|
|
<el-input v-model="form.pageWidth"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="纸张高度" prop="pageHeight">
|
|
<el-input v-model="form.pageHeight"></el-input>
|
|
</el-form-item>
|
|
</el-form>
|
|
<div slot="footer" class="dialog-footer">
|
|
<el-button size="mini" @click="visible = false">取 消</el-button>
|
|
<el-button type="primary" size="mini" @click="savaTemp">确 定</el-button>
|
|
</div>
|
|
</el-dialog>
|
|
</section>
|
|
<section>
|
|
<div class="section">模板打印测试</div>
|
|
<el-form ref="printForm" :model="printForm" size="small" :rules="printRules" :inline="true">
|
|
<el-form-item label="打印模板" prop="tempIndex">
|
|
<el-select v-model="printForm.tempIndex">
|
|
<el-option
|
|
v-for="(item,index) in tempList"
|
|
:key="index"
|
|
:label="item.title"
|
|
:value="index"
|
|
></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item label="测试数据" prop="data">
|
|
<el-input
|
|
type="textarea"
|
|
style="width:520px"
|
|
:rows="6"
|
|
v-model="printForm.data"
|
|
placeholder="数据模板对应的数据,数据格式为json对象"
|
|
></el-input>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<div>
|
|
<el-button size="mini" type="primary" @click="printPreview(1)">打印预览</el-button>
|
|
</div>
|
|
<div style="margin-top:10px">
|
|
<el-button size="mini" type="success" @click="printPreview(2)">直接打印</el-button>
|
|
</div>
|
|
</el-form-item>
|
|
</el-form>
|
|
</section>
|
|
<section>
|
|
<el-collapse>
|
|
<el-collapse-item title="测试数据" name="1">
|
|
<el-form ref="testData" :model="testData" size="small" :inline="true">
|
|
<el-form-item label="出库数据">
|
|
<el-input
|
|
type="textarea"
|
|
style="width:920px"
|
|
:rows="8"
|
|
v-model="testData.OutStock"
|
|
placeholder="数据模板对应的数据,数据格式为json对象"
|
|
></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="入库数据">
|
|
<el-input
|
|
type="textarea"
|
|
style="width:920px"
|
|
:rows="8"
|
|
v-model="testData.InStock"
|
|
placeholder="数据模板对应的数据,数据格式为json对象"
|
|
></el-input>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-collapse-item>
|
|
</el-collapse>
|
|
</section>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
import { Table, TableColumn, Dialog, MessageBox } from 'element-ui'
|
|
import Vue from 'vue'
|
|
Vue.prototype.$confirm = (...args) => MessageBox.confirm(...args)
|
|
const defaultTemp = () => ({
|
|
title: '',
|
|
type: 1, // 模板类型 1:出库单;2:入库单
|
|
width: '',
|
|
height: '',
|
|
pageWidth: '',
|
|
pageHeight: '',
|
|
tempItems: [],
|
|
})
|
|
import { OutStockData, InStockData } from '../data/test'
|
|
import {
|
|
getTemplateList
|
|
,saveClodopTemplateHeaders
|
|
,saveTemplateHeader
|
|
,deleteClodopTemplate
|
|
} from '../api/base.js'
|
|
export default {
|
|
data() {
|
|
return {
|
|
site : '',
|
|
visible: false,
|
|
value: {},
|
|
tempList: [],
|
|
form: defaultTemp(),
|
|
rules: {
|
|
title: { required: true, message: '请输入模板名称' },
|
|
type: { required: true, message: '请选择模板类型' },
|
|
width: { required: true, message: '请输入模板宽度' },
|
|
height: { required: true, message: '请输入模板高度' },
|
|
pageWidth: { required: true, message: '请输入纸张宽度' },
|
|
pageHeight: { required: true, message: '请输入纸张高度' },
|
|
},
|
|
printForm: {
|
|
tempIndex: '',
|
|
data: '',
|
|
},
|
|
printRules: {
|
|
tempIndex: { required: true, message: '请选择模板' },
|
|
data: { required: true, message: '请输入模板测试数据' },
|
|
},
|
|
testData: {
|
|
OutStock: JSON.stringify(OutStockData),
|
|
InStock: JSON.stringify(InStockData),
|
|
},
|
|
}
|
|
},
|
|
created() {
|
|
Vue.use(Table)
|
|
Vue.use(TableColumn)
|
|
Vue.use(Dialog)
|
|
// this.tempList = JSON.parse(localStorage.getItem('tempList')) || []
|
|
this.getTemplateList()
|
|
},
|
|
|
|
methods: {
|
|
// 获取数据
|
|
getTemplateList(){
|
|
let jsonData = {
|
|
site : this.site,
|
|
}
|
|
getTemplateList(jsonData).then(({data}) =>{
|
|
this.tempList = data.rows;
|
|
})
|
|
},
|
|
// 预览
|
|
handlePreview(index, row) {
|
|
this.$lodop.previewTemp(row)
|
|
},
|
|
// 设计
|
|
handleEdit(index, row ,id) {
|
|
this.$router.push({
|
|
path: '/designer',
|
|
query: {
|
|
index: index,
|
|
id : row.id,
|
|
},
|
|
})
|
|
},
|
|
// 删除
|
|
handleDelete(index, row) {
|
|
this.$confirm('确认删除该条数据吗?', '确认信息')
|
|
.then((isPass) => {
|
|
if (isPass) {
|
|
// this.tempList.splice(index, 1)
|
|
// localStorage.setItem('tempList', JSON.stringify(this.tempList))
|
|
deleteClodopTemplate(row).then(({data}) =>{
|
|
this.getTemplateList()
|
|
})
|
|
}
|
|
})
|
|
.catch()
|
|
},
|
|
handleCopy(row) {
|
|
// let copyTemp = JSON.parse(JSON.stringify(row))
|
|
// copyTemp.title = copyTemp.title + '_copy'
|
|
// copyTemp.default = false
|
|
// copyTemp.insertFlag = true
|
|
|
|
// this.tempList.push(copyTemp)
|
|
// localStorage.setItem('tempList', JSON.stringify(this.tempList))
|
|
this.saveTemplateInfo(row)
|
|
},
|
|
//保存复制新增
|
|
saveTemplateInfo(row){
|
|
let copyTemp = JSON.parse(JSON.stringify(row))
|
|
copyTemp.insertFlag = true
|
|
copyTemp.title = copyTemp.title + '_copy'
|
|
saveClodopTemplateHeaders(copyTemp).then(({data}) =>{
|
|
this.getTemplateList()
|
|
})
|
|
},
|
|
// 新增
|
|
openCreate() {
|
|
this.form = defaultTemp()
|
|
this.visible = true
|
|
},
|
|
// 保存新增
|
|
savaTemp() {
|
|
this.$refs.form.validate((valid) => {
|
|
if (valid) {
|
|
// this.tempList.push(this.form)
|
|
// localStorage.setItem('tempList', JSON.stringify(this.tempList))
|
|
saveTemplateHeader(this.form).then(({data}) =>{
|
|
this.getTemplateList()
|
|
})
|
|
this.visible = false
|
|
}
|
|
})
|
|
},
|
|
/**
|
|
* 测试打印预览/直接打印
|
|
* flag 1:打印预览,2:直接打印
|
|
*/
|
|
printPreview(flag) {
|
|
this.$refs.printForm.validate((valid) => {
|
|
if (valid) {
|
|
let printData
|
|
try {
|
|
printData = JSON.parse(this.printForm.data)
|
|
} catch (err) {
|
|
return this.$message('请输入正确格式的打印数据')
|
|
}
|
|
if (flag == 1) {
|
|
this.$lodop.preview(this.tempList[this.printForm.tempIndex], printData)
|
|
} else {
|
|
this.$confirm('确认直接打印吗?', '确认信息')
|
|
.then((isPass) => {
|
|
if (isPass) {
|
|
this.$lodop.print(this.tempList[this.printForm.tempIndex], printData)
|
|
}
|
|
})
|
|
.catch((err) => {
|
|
console.log(err)
|
|
})
|
|
}
|
|
}
|
|
})
|
|
},
|
|
},
|
|
}
|
|
</script>
|
|
<style scoped>
|
|
.box {
|
|
width: 1000px;
|
|
margin: auto;
|
|
padding: 10px 0;
|
|
font-family: Arial, Helvetica, sans-serif;
|
|
}
|
|
.title {
|
|
text-align: center;
|
|
font-size: 24px;
|
|
color: #1890ff;
|
|
margin: 20px;
|
|
font-weight: bold;
|
|
}
|
|
.section {
|
|
font-size: 18px;
|
|
color: #333333;
|
|
padding: 10px 0;
|
|
}
|
|
</style>
|