|
|
|
@ -7,9 +7,7 @@ |
|
|
|
import { ref, onMounted,toRaw} from 'vue'; |
|
|
|
import {getPrintTemplate,savePrintTemplate} from '@/api/DesignForm/requestapi' |
|
|
|
import printHtmlRender from '@/components/DesignForm/tableListPage/printHtmlRender.vue' |
|
|
|
import {fieldTree,pageConfig} from '@/components/DesignForm/tableListPage/printHtmlRender.vue' |
|
|
|
import { fieldList } from '@/views/sysworkflow/codepage/mathFunction'; |
|
|
|
import { extend } from 'dayjs'; |
|
|
|
import { fieldTree,PageConfig} from '@/components/DesignForm/tableListPage/printHtmlRender.vue' |
|
|
|
|
|
|
|
interface fieldTreeEx extends fieldTree{ |
|
|
|
unitName?:string; |
|
|
|
@ -24,10 +22,13 @@ const htmlRenderData=ref<any[]>([]) |
|
|
|
let defaultCheckList:string[]=[] |
|
|
|
const treeLoaded=ref(false) //处理树首次渲染时,数据未加载的情况 |
|
|
|
const fieldTreeRef=ref() |
|
|
|
const pageConfig=ref<pageConfig>({width:'210mm',height:'297mm',horizontal:"vtal",pagesize:"A4"}) |
|
|
|
const objPageConfig = ref<Record<string, any>>({width:'210mm',height:'297mm',horizontal:"vtal",pagesize:"A4", pagebrow:[],qrcode:false}) |
|
|
|
const pageSize=ref('A4') |
|
|
|
const pageDret=ref('vtal') |
|
|
|
|
|
|
|
//定义页眉页脚的数据,取自pageConfig的字段 |
|
|
|
const systemType:string[]=["founder","founderTime","deptOrg","serialNumber"] |
|
|
|
|
|
|
|
|
|
|
|
const props = defineProps({ |
|
|
|
appCont: { |
|
|
|
@ -71,40 +72,40 @@ function safeStringify(obj, space = 2) { |
|
|
|
}, space); |
|
|
|
} |
|
|
|
|
|
|
|
function updatePageConfig(cmd:string){ |
|
|
|
const updatePageConfig=(cmd:string)=>{ |
|
|
|
switch(cmd){ |
|
|
|
case "A4": |
|
|
|
pageConfig.value.pagesize="A4" |
|
|
|
pageConfig.value.width="210mm" |
|
|
|
pageConfig.value.height="297mm" |
|
|
|
objPageConfig.value.pagesize="A4" |
|
|
|
objPageConfig.value.width="210mm" |
|
|
|
objPageConfig.value.height="297mm" |
|
|
|
break |
|
|
|
case "A5": |
|
|
|
pageConfig.value.pagesize="A5" |
|
|
|
pageConfig.value.width="148mm" |
|
|
|
pageConfig.value.height="210mm" |
|
|
|
objPageConfig.value.pagesize="A5" |
|
|
|
objPageConfig.value.width="148mm" |
|
|
|
objPageConfig.value.height="210mm" |
|
|
|
break |
|
|
|
case "htal": |
|
|
|
pageConfig.value.horizontal="htal" |
|
|
|
objPageConfig.value.horizontal="htal" |
|
|
|
break |
|
|
|
default: |
|
|
|
pageConfig.value.horizontal="vtal" |
|
|
|
objPageConfig.value.horizontal="vtal" |
|
|
|
} |
|
|
|
|
|
|
|
if(pageConfig.value.horizontal=="htal"){ |
|
|
|
if(pageConfig.value.width<pageConfig.value.height){ |
|
|
|
let a=pageConfig.value.width |
|
|
|
pageConfig.value.width=pageConfig.value.height |
|
|
|
pageConfig.value.height=a |
|
|
|
if(objPageConfig.value.horizontal=="htal"){ |
|
|
|
if(objPageConfig.value.width<objPageConfig.value.height){ |
|
|
|
let a=objPageConfig.value.width |
|
|
|
objPageConfig.value.width=objPageConfig.value.height |
|
|
|
objPageConfig.value.height=a |
|
|
|
} |
|
|
|
}else if(pageConfig.value.width>pageConfig.value.height){ |
|
|
|
let a=pageConfig.value.width |
|
|
|
pageConfig.value.width=pageConfig.value.height |
|
|
|
pageConfig.value.height=a |
|
|
|
}else if(objPageConfig.value.width>objPageConfig.value.height){ |
|
|
|
let a=objPageConfig.value.width |
|
|
|
objPageConfig.value.width=objPageConfig.value.height |
|
|
|
objPageConfig.value.height=a |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//保存模板 |
|
|
|
function onSaveTreeData(){ |
|
|
|
const onSaveTreeData=()=>{ |
|
|
|
let str:string=safeStringify(htmlRenderData.value) |
|
|
|
let strtree:string=safeStringify(fieldTreeRef.value.data) |
|
|
|
savePrintTemplate({ |
|
|
|
@ -114,7 +115,7 @@ function onSaveTreeData(){ |
|
|
|
formkey:props.formKey, |
|
|
|
formtemplatejson:str, |
|
|
|
treedatajson:strtree, |
|
|
|
pageconfigjson:JSON.stringify(pageConfig.value), |
|
|
|
pageconfigjson:JSON.stringify(objPageConfig.value), |
|
|
|
nodecheckedlist:JSON.stringify(fieldTreeRef.value.getCheckedKeys()) //包含了半选状态 |
|
|
|
}).then(resp=>{ |
|
|
|
if (resp.code!=200){ |
|
|
|
@ -132,7 +133,7 @@ function onSaveTreeData(){ |
|
|
|
} |
|
|
|
|
|
|
|
//递归结构字段 |
|
|
|
function deepLoop(item:fieldTreeEx){ |
|
|
|
const deepLoop=(item:fieldTreeEx)=>{ |
|
|
|
let data:fieldTree |
|
|
|
|
|
|
|
switch(item.type){ |
|
|
|
@ -187,7 +188,7 @@ function deepLoop(item:fieldTreeEx){ |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function refreshPrintPage(){ |
|
|
|
const refreshPrintPage=()=>{ |
|
|
|
//如果上面是htmlmode,且已经存编辑过了,后面就不再重新构造模板数据了 |
|
|
|
let section:fieldTree[]=[] |
|
|
|
let keys:string[]=[] |
|
|
|
@ -257,9 +258,9 @@ onMounted(async ()=>{ |
|
|
|
defaultCheckList=JSON.parse(resp.data.nodecheckedlist) |
|
|
|
} |
|
|
|
if(resp.data.pageconfigjson!=""){ |
|
|
|
pageConfig.value=JSON.parse(resp.data.pageconfigjson) |
|
|
|
pageDret.value=pageConfig.value.horizontal??"vtal" |
|
|
|
pageSize.value=pageConfig.value.pagesize??"A4" |
|
|
|
objPageConfig.value = JSON.parse(resp.data.pageconfigjson) |
|
|
|
pageDret.value = objPageConfig.value.horizontal ?? "vtal" |
|
|
|
pageSize.value = objPageConfig.value.pagesize ?? "A4" |
|
|
|
} |
|
|
|
}).catch((err)=>{ |
|
|
|
ElMessage({ |
|
|
|
@ -268,11 +269,22 @@ onMounted(async ()=>{ |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
if(printMode.value!="custom" &&fieldTreeData.value.length==0){ |
|
|
|
props.state.formData.list.forEach(item=>{ |
|
|
|
fieldTreeData.value.push(deepLoop(item)) |
|
|
|
}) |
|
|
|
/*********************为解决pageconfig字段的问题**************************/ |
|
|
|
let newForm:boolean; |
|
|
|
if(fieldTreeData.value.length==0){ |
|
|
|
newForm=true; |
|
|
|
} |
|
|
|
props.state.formData.list.forEach((item:fieldTreeEx)=>{ |
|
|
|
if(systemType.includes(item.type)) { |
|
|
|
//需要记录这种type的真实字段 |
|
|
|
objPageConfig.value[item.type as keyof PageConfig]=item.name??"" |
|
|
|
} |
|
|
|
//无论新表单还是已保存过的表单,都要处理objPageConfig字段的问题,但是fieldTreeData只有在新表单的时候需要初始化 |
|
|
|
if(newForm){ |
|
|
|
fieldTreeData.value.push(deepLoop(item)) |
|
|
|
} |
|
|
|
}) |
|
|
|
/********************************************************************/ |
|
|
|
treeLoaded.value=true |
|
|
|
//printMode 没有内容说明是新打印表单,没有定制过模板 |
|
|
|
|
|
|
|
@ -285,7 +297,7 @@ onMounted(async ()=>{ |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
function updateNodeData(val:fieldTree,val2:boolean,val3:boolean){ |
|
|
|
const updateNodeData=(val:fieldTree,val2:boolean,val3:boolean)=>{ |
|
|
|
if(val2 && val3){ |
|
|
|
val.checked=0 |
|
|
|
}else if(val2 || val3){ |
|
|
|
@ -303,7 +315,16 @@ function updateNodeData(val:fieldTree,val2:boolean,val3:boolean){ |
|
|
|
<el-tab-pane label="默认" name="html"> |
|
|
|
<div style="display: grid; grid-template-columns: 1fr 4fr;"> |
|
|
|
<div class="hiprintEpContainer" > |
|
|
|
业务字段 <el-button @click="onSaveTreeData">保存模板</el-button> |
|
|
|
<el-button type="primary" @click="onSaveTreeData">保存模板</el-button> |
|
|
|
<span>系统字段</span> |
|
|
|
<el-checkbox-group v-model="objPageConfig.pagebrow" class="basic_fields"> |
|
|
|
<el-checkbox label="创建人" value="founder" /> |
|
|
|
<el-checkbox label="创建时间" value="founderTime" /> |
|
|
|
<el-checkbox label="所属部门" value="deptOrg" /> |
|
|
|
<el-checkbox label="表单编号" value="serialNumber" /> |
|
|
|
</el-checkbox-group> |
|
|
|
<el-checkbox style="margin-left: 22px;" v-model="objPageConfig.qrcode" label="表单二维码" /> |
|
|
|
<span>业务字段</span> |
|
|
|
<el-tree |
|
|
|
v-if="treeLoaded" |
|
|
|
ref="fieldTreeRef" |
|
|
|
@ -333,8 +354,8 @@ function updateNodeData(val:fieldTree,val2:boolean,val3:boolean){ |
|
|
|
<el-radio-button label="纵向" value="vtal" /> |
|
|
|
</el-radio-group> |
|
|
|
</div> |
|
|
|
<div style="margin: 5px; border: 1px dashed black;overflow-y: scroll; scrollbar-width: none;" :style="{width: pageConfig.width,height:pageConfig.height}"> |
|
|
|
<printHtmlRender :name="props.state.formOtherData.formName" :width="pageConfig.width" :field-tree="htmlRenderData" /> |
|
|
|
<div style="margin: 5px; border: 1px dashed black;overflow-y: scroll; scrollbar-width: none;" :style="{width: objPageConfig.width,height:objPageConfig.height}"> |
|
|
|
<printHtmlRender :name="props.state.formOtherData.formName" :form-data="htmlRenderData" :pageConfig="objPageConfig" :field-tree="htmlRenderData"/> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
@ -347,7 +368,7 @@ function updateNodeData(val:fieldTree,val2:boolean,val3:boolean){ |
|
|
|
</el-tabs> |
|
|
|
</template> |
|
|
|
<style lang="scss" scoped> |
|
|
|
.hiprintEpContainer,dropTable, .PrintElementOptionSetting{ |
|
|
|
.hiprintEpContainer,dropTable{ |
|
|
|
border: 1px solid black; |
|
|
|
margin: 5px; |
|
|
|
display: flex; |
|
|
|
@ -355,6 +376,14 @@ function updateNodeData(val:fieldTree,val2:boolean,val3:boolean){ |
|
|
|
flex-wrap: wrap; |
|
|
|
align-content: flex-start; |
|
|
|
width: 300px; |
|
|
|
button{ |
|
|
|
margin-top: 5px; |
|
|
|
margin-left: 10px; |
|
|
|
} |
|
|
|
>span{ |
|
|
|
margin-left: 10px; |
|
|
|
font-weight: bold; |
|
|
|
} |
|
|
|
} |
|
|
|
.defaultContainer{ |
|
|
|
border: 1px solid black; |
|
|
|
@ -364,7 +393,13 @@ function updateNodeData(val:fieldTree,val2:boolean,val3:boolean){ |
|
|
|
flex-direction: column; |
|
|
|
overflow-y: scroll; |
|
|
|
} |
|
|
|
|
|
|
|
.basic_fields{ |
|
|
|
display: flex; |
|
|
|
flex-direction: column; |
|
|
|
.el-checkbox{ |
|
|
|
margin-left: 22px; |
|
|
|
} |
|
|
|
} |
|
|
|
.el-tabs--left .el-tabs__header.is-left { |
|
|
|
margin-right: 0; |
|
|
|
} |
|
|
|
|