Browse Source

Merge branch 'master' into lwx_v27

lwx_v27
liwenxuan 2 days ago
parent
commit
e6f388b8b1
  1. 22
      src/components/DesignForm/printHtmlRender.ts
  2. 52
      src/components/DesignForm/printHtmlRender.vue
  3. 1
      src/store/modules/orgMember.ts
  4. 21
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/printSetupPage2.vue

22
src/components/DesignForm/printHtmlRender.ts

@ -24,12 +24,13 @@ export const printHtmlPage = async (pformid:string,pappkey:string,pversionid:str
}) })
} }
let noTemplate:boolean=false
await getPrintTemplate({"versionid":pversionid,"formkey":pappkey}).then(resp=>{ await getPrintTemplate({"versionid":pversionid,"formkey":pappkey}).then(resp=>{
title=resp.data.title title=resp.data.title
if(resp.data.formtemplatejson!=""){ if(resp.data.formtemplatejson!=""){
data=JSON.parse(resp.data.formtemplatejson) data=JSON.parse(resp.data.formtemplatejson)
}else{ }else{
noTemplate=true
alert("请先创建打印模板!") alert("请先创建打印模板!")
return return
} }
@ -49,6 +50,8 @@ export const printHtmlPage = async (pformid:string,pappkey:string,pversionid:str
} }
}) })
if(noTemplate) return;
let qrstr=`https://wab.hxgk.group/#/form_table/taskListPage?id=${pformid}&key=${pappkey}& let qrstr=`https://wab.hxgk.group/#/form_table/taskListPage?id=${pformid}&key=${pappkey}&
formid=${pversionid}&formKey=${pformkey}&qrDetailId=${row.id}` formid=${pversionid}&formKey=${pformkey}&qrDetailId=${row.id}`
data.forEach(node=>{ data.forEach(node=>{
@ -91,11 +94,24 @@ const deepLoopForm=(node:fieldTree, row: Record<string, any>)=>{
return return
} }
if(node.type=="tabs"&&node.child){
node.child?.forEach(item=>{deepLoopForm(item,row)})
return
}
if(node.field!=""){ if(node.field!=""){
let rnode:Object;
if (row.hasOwnProperty(node.field!)){// 有这个字段 if (row.hasOwnProperty(node.field!)){// 有这个字段
if (node.type=="table" || node.type=="tabs"){ if (node.type=="table"){
node.data=row[node.field!] node.data=row[node.field!]
}else if(node.type=="select"||node.type=="checkbox"){
const val=row[node.field!]
node.field=""
for(let op of node.options!){
if(op.value==val){
node.field=op.label
break;
}
}
}else{ }else{
node.field=row[node.field!] node.field=row[node.field!]
} }

52
src/components/DesignForm/printHtmlRender.vue

@ -9,6 +9,7 @@ export interface fieldTree{
type:string; type:string;
checked?:number; checked?:number;
data?:[]; data?:[];
options?:[];//select, checkbox... options
child?:fieldTree[] child?:fieldTree[]
} }
@ -38,16 +39,19 @@ const props = withDefaults(defineProps<{
const qrdata=ref("") const qrdata=ref("")
const userName=useUserStore().nickname; const userName=useUserStore().nickname;
function parseDataPicker(val:string){ function parseDataPicker(val:string,vtype:string){
let str:string; let str:string;
if(typeof(val)=="number"){ if(typeof(val)=="number"){
str=new Date(val).toISOString() str=new Date(val).toLocaleString()
}else{ }else{//"";2025-12-17;sheng1chan3ri4qi1;
if(val==""|| val.match(/[a-z]/) ) return val; if(val==""|| val.match(/[a-z-:.]/) ) return val;
str=new Date(parseInt(val)).toISOString() str=new Date(parseInt(val)).toLocaleString()
} }
return str.slice(0,10)+" "+str.slice(11,16) if(vtype.startsWith("time")){
return str.slice(11,16)
}
return str.slice(0,10)
} }
const generateQrCode= ()=>{ const generateQrCode= ()=>{
@ -99,7 +103,7 @@ const getStateText=(val:number)=>{
{{item.name}} {{item.name}}
</span> </span>
<span v-if="item.type !=='datePicker'" class="content">{{item.field}}</span> <span v-if="item.type !=='datePicker'" class="content">{{item.field}}</span>
<span v-else class="content">{{parseDataPicker(item.field)}}</span> <span v-else class="content">{{parseDataPicker(item.field,item.type)}}</span>
</div> </div>
</template> </template>
</div> </div>
@ -121,7 +125,14 @@ const getStateText=(val:number)=>{
<tbody> <tbody>
<tr v-for="(dd, index) in group.data" :key="dd"> <tr v-for="(dd, index) in group.data" :key="dd">
<template v-for="child in group.child"> <template v-for="child in group.child">
<td v-if="child.checked!=2" >{{ dd[child.field]}}</td> <td v-if="child.checked!=2">
<template v-if="child.type.includes('Picker')">
{{parseDataPicker(dd[child.field],child.type)}}
</template>
<template v-else>
{{dd[child.field]}}
</template>
</td>
</template> </template>
</tr> </tr>
</tbody> </tbody>
@ -137,7 +148,7 @@ const getStateText=(val:number)=>{
{{item.name}} {{item.name}}
</span> </span>
<span v-if="item.type !=='datePicker'" class="content">{{item.field}}</span> <span v-if="item.type !=='datePicker'" class="content">{{item.field}}</span>
<span v-else class="content">{{parseDataPicker(item.field)}}</span> <span v-else class="content">{{parseDataPicker(item.field,item.type)}}</span>
</div> </div>
</template> </template>
</div> </div>
@ -160,26 +171,32 @@ const getStateText=(val:number)=>{
<tbody> <tbody>
<tr v-for="(dd, index) in tabs.data" :key="dd"> <tr v-for="(dd, index) in tabs.data" :key="dd">
<template v-for="child in tabs.child"> <template v-for="child in tabs.child">
<td v-if="child.checked!=2" >{{ dd[child.field]}}</td> <td v-if="child.checked!=2" >
<template v-if="child.type.includes('Picker')">
{{parseDataPicker(dd[child.field],child.type)}}
</template>
<template v-else>
{{dd[child.field]}}
</template>
</td>
</template> </template>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
<div v-else class="tabs_cell_box" v-if="tabs.checked!=2"> <div v-else class="section tabs_wide_box" v-if="tabs.checked!=2">
<span class="box_name"> <span class="box_name">
{{tabs.name}} {{tabs.name}}
</span> </span>
<span v-if="tabs.type !=='datePicker'" class="content">{{tabs.field}}</span> <span v-if="tabs.type !=='datePicker'" class="content">{{tabs.field}}</span>
<span v-else class="content">{{parseDataPicker(tabs.field??'')}}</span> <span v-else class="content">{{parseDataPicker(tabs.field??'',tabs.type)}}</span>
</div> </div>
</div> </div>
</div> </div>
<div v-else v-if="group.checked!=2">{{ group }}</div> <div v-else v-if="group.checked!=2 && group.type">{{ group }}</div>
</div> </div>
<div v-if="props.flowList && props.flowList.length>0" class="section_table"> <div v-if="props.flowList && props.flowList.length>0" class="section_table">
<table class="bder_table"> <table class="bder_table">
<caption >审批流程</caption> <caption >审批流程</caption>
@ -265,7 +282,7 @@ div:empty {
.auto_table{ .auto_table{
display: grid; display: grid;
grid-template-columns: 1fr 1fr; grid-template-columns: 1fr 1fr;
border: 1px solid rgb(226, 226, 226); border: 1px solid rgb(200, 200, 200);
} }
.operate_log{ .operate_log{
display: block; display: block;
@ -357,7 +374,7 @@ h5{
} }
/* 原有样式(稍作优化) */ /* 原有样式(稍作优化) */
.cell_box, .tabs_cell_box { .cell_box, .tabs_cell_box, .tabs_wide_box{
border: 1px solid rgb(182, 181, 181); border: 1px solid rgb(182, 181, 181);
margin-right: -1px; /* 水平排列时用右负margin */ margin-right: -1px; /* 水平排列时用右负margin */
margin-bottom: -1px; /* 垂直排列时用下负margin */ margin-bottom: -1px; /* 垂直排列时用下负margin */
@ -383,8 +400,9 @@ h5{
border-left: 1px solid rgb(182, 181, 181); border-left: 1px solid rgb(182, 181, 181);
} }
} }
.tabs_cell_box{ .tabs_cell_box, .tabs_wide_box{
width: 100%; width: 100%;
flex-direction: row;
} }

1
src/store/modules/orgMember.ts

@ -14,6 +14,7 @@ export const useOrgMemberStore = defineStore('orgMember', () => {
const dataTree = ref<OrgMemberItem>({ id: '', name: '', child: [] }) const dataTree = ref<OrgMemberItem>({ id: '', name: '', child: [] })
async function init() { async function init() {
await request({ await request({
url: "/systemapi/app/get_org_everyone_people",//"172.20.2.87:39168", url: "/systemapi/app/get_org_everyone_people",//"172.20.2.87:39168",
method: "post", method: "post",

21
src/views/sysworkflow/lowcodepage/appPage/appPageForm/printSetupPage2.vue

@ -13,6 +13,7 @@ interface fieldTreeEx extends fieldTree{
unitName?:string; unitName?:string;
list?:fieldTreeEx[]; list?:fieldTreeEx[];
columns?:fieldTreeEx[]; columns?:fieldTreeEx[];
options?:[]
} }
const printMode=ref("") const printMode=ref("")
@ -104,6 +105,13 @@ const updatePageConfig=(cmd:string)=>{
} }
} }
const onClearTreeData=()=>{
fieldTreeData.value=[]
props.state.formData.list.forEach((item:fieldTreeEx)=>{
fieldTreeData.value.push(deepLoop(item))
})
}
// //
const onSaveTreeData=()=>{ const onSaveTreeData=()=>{
let str:string=safeStringify(htmlRenderData.value) let str:string=safeStringify(htmlRenderData.value)
@ -146,6 +154,15 @@ const deepLoop=(item:fieldTreeEx)=>{
child:[], child:[],
} }
break; break;
case "select":
case "checkbox":
data={
field:item.name?? "",
type:item.type,
name:item.item ? item.item.label : "",
options: item.options
}
break;
default: default:
data={ data={
field:item.name?? "", field:item.name?? "",
@ -270,14 +287,17 @@ onMounted(async ()=>{
}) })
/*********************为解决pageconfig字段的问题**************************/ /*********************为解决pageconfig字段的问题**************************/
console.log(fieldTreeData.value.length,"length????")
let newForm:boolean; let newForm:boolean;
if(fieldTreeData.value.length==0){ if(fieldTreeData.value.length==0){
newForm=true; newForm=true;
} }
props.state.formData.list.forEach((item:fieldTreeEx)=>{ props.state.formData.list.forEach((item:fieldTreeEx)=>{
if(systemType.includes(item.type)) { if(systemType.includes(item.type)) {
//type //type
objPageConfig.value[item.type as keyof PageConfig]=item.name??"" objPageConfig.value[item.type as keyof PageConfig]=item.name??""
} }
//objPageConfigfieldTreeData //objPageConfigfieldTreeData
if(newForm){ if(newForm){
@ -353,6 +373,7 @@ const updateNodeData=(val:fieldTree,val2:boolean,val3:boolean)=>{
<el-radio-button label="纵向" value="vtal" /> <el-radio-button label="纵向" value="vtal" />
</el-radio-group> </el-radio-group>
<el-button style="position: absolute;right: 190px;" type="primary" @click="onClearTreeData">重置</el-button>
<el-button style="position: absolute;right: 90px;" type="primary" @click="onSaveTreeData">保存模板</el-button> <el-button style="position: absolute;right: 90px;" type="primary" @click="onSaveTreeData">保存模板</el-button>
</div> </div>
<div style="margin: 10px auto; background: white;box-shadow:0px 0px 6px rgba(0,0,0,0.12);overflow-y: scroll; scrollbar-width: none;" <div style="margin: 10px auto; background: white;box-shadow:0px 0px 6px rgba(0,0,0,0.12);overflow-y: scroll; scrollbar-width: none;"

Loading…
Cancel
Save