Browse Source

更改版本管理器

v8_master
超级管理员 2 years ago
parent
commit
2c3e4b719f
  1. 5
      src/components/DesignForm/dragControl.vue
  2. 141
      src/components/DesignForm/dragControlNew.vue
  3. 139
      src/components/DesignForm/formVersion.vue
  4. 2
      src/types/components.d.ts
  5. 2
      src/views/sysworkflow/lowcodepage/appFormList.vue
  6. 10
      src/views/sysworkflow/lowcodepage/appPage/appMenus.vue
  7. 121
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/pageForm.vue
  8. 78
      src/views/sysworkflow/lowcodepage/appPage/createAppFormPage.vue
  9. 6
      src/views/sysworkflow/lowcodepage/appPage/index.vue
  10. 3
      src/views/sysworkflow/lowcodepage/index.vue
  11. 19
      src/views/sysworkflow/lowcodepage/pageDesignes.vue

5
src/components/DesignForm/dragControl.vue

@ -41,7 +41,7 @@ const searchField = [
'component',
'button'
]
const designType = inject('formDesignType') as string
const designType = inject('formDesignType') as string // ( app.provide())
const formDataList = ref<any[]>([])
const isSearch = computed(() => {
return designType === 'search'
@ -82,6 +82,7 @@ const useTemplateClick = () => {
useTemplateEl.value.open()
}
const useTemplateSelect = (data: FormData) => {
console.log("使用模版",data);
emits('click', data)
}
const clone = (origin: any) => {
@ -197,7 +198,9 @@ const setupStatus = (val:any) =>{
ref="useTemplateEl"
@click="useTemplateSelect"
/>
<div>版本</div>
{{props.formId}}
<el-tabs v-model="activeName" :stretch="true" class="demo-tabs" @tab-change="handleTabsClick" >
<el-tab-pane v-for="(item,index) in props.versioncont" :key="index" :label="'V'+item.version" :name="item.id" class="tab_pane_body">
<el-button v-if="item.status!=1" type="primary" round @click="setupStatus(item)">启用</el-button>

141
src/components/DesignForm/dragControlNew.vue

@ -0,0 +1,141 @@
<!--
@ 作者: 秦东
@ 时间: 2024-05-09 10:47:19
@ 备注: 自定义表单组件
-->
<script lang='ts' setup>
import controlListData from '@/components/DesignForm/assembly'
import Draggable from 'vuedraggable-es'
import '@/assets/iconfont/iconfont.css'
//
import FormVersion from '@/components/DesignForm/formVersion.vue';
const props = withDefaults(
defineProps<{
tableKey?: number | string,
signCode?: number | string,
}>(),
{}
)
const designType = inject('formDesignType') as string // ( app.provide())
//
const searchField = [
'input',
'radio',
'checkbox',
'select',
'datePicker',
'timePicker',
'inputNumber',
'cascader',
'component',
'button'
]
/**
@ 作者: 秦东
@ 时间: 2024-05-09 10:58:56
@ 功能: 表单组件数据
*/
const controlList = computed(() => {
if (designType === 'search') {
//
const temp: any = []
controlListData.forEach((item: any) => {
if (item.children) {
const filter = item.children.filter((ch: any) => {
return searchField.includes(ch.type)
})
if (filter && filter.length) {
temp.push({ title: item.title, children: filter })
}
}
})
return temp
} else {
return controlListData
}
})
const tableVersion = ref() //
const emits = defineEmits<{
(e: 'versionUpdateForm', value: string): void
}>()
/**
@ 作者: 秦东
@ 时间: 2024-05-09 11:36:59
@ 功能: 启用和禁用版本
*/
const enableOrDisable = (val?:any) =>{
console.log("启用和禁用版本",val)
emits('versionUpdateForm', val)
}
/**
@ 作者: 秦东
@ 时间: 2024-05-09 11:40:15
@ 功能: 打开版本选择页面
*/
const useVersionClick = () => {
tableVersion.value.open()
}
const activities = [
{
content: 'Event start',
timestamp: '2018-04-15',
},
{
content: 'Approved',
timestamp: '2018-04-13',
},
{
content: 'Success',
timestamp: '2018-04-11',
},
]
</script>
<template>
<div class="components-list">
<div v-for="(list, index) in controlList" :key="index">
<div class="title">
{{ list.title }}
<div
class="template"
@click="useVersionClick"
>
版本
</div>
</div>
<draggable
v-model="list.children"
tag="ul"
:group="{ name: 'form', pull: 'clone', put: false }"
ghost-class="ghost"
:sort="false"
:clone="clone"
item-key="key123"
>
<template #item="{ element }">
<li class="fontIcon" :class="[element.type]">
<i v-if="element.iconFont==''" :class="`icon-${element.icon}`"></i>
<i v-if="element.iconFont!=''" :class="`fa ${element.iconFont} `"></i>
<span :title="element.label">{{ element.label }}</span>
</li>
</template>
</draggable>
</div>
</div>
<FormVersion ref="tableVersion" :table-key="props.tableKey" :sign-code="props.signCode" @enableOrDisable="enableOrDisable" />
</template>
<style lang='scss' scoped>
.tab_pane_body{
text-align: center;
}
.fontIcon{
i{
padding: 4px 0px 0 0px;
}
}
</style>

139
src/components/DesignForm/formVersion.vue

@ -0,0 +1,139 @@
<!--
@ 作者: 秦东
@ 时间: 2024-05-08 14:52:03
@ 备注: 版本管理
-->
<script lang='ts' setup>
import { customerFormVersionCont } from '@/api/DesignForm/type'
import { haveCustomerFormVersion,enableVersion } from '@/api/DesignForm/requestapi'
const props = withDefaults(
defineProps<{
tableKey?: number | string,
signCode?: number | string,
}>(),
{}
)
const emits = defineEmits<{
(e: 'click', value: string): void
(e: 'enableOrDisable', value: string): void
}>()
const isOpen = ref(false)
const versionList = ref<customerFormVersionCont[]>([]) //
const loading = ref(false)
/**
@ 作者: 秦东
@ 时间: 2024-05-09 14:21:25
@ 功能: 编辑状态
*/
const setupStatus = (val:any) =>{
enableVersion({id:val.id.toString()})
.then(() =>{
init()
emits('enableOrDisable', val.id.toString())
});
}
/**
@ 作者: 秦东
@ 时间: 2024-05-08 14:55:50
@ 功能: 打开页面
*/
const open = () => {
console.log("open",isOpen)
isOpen.value = true
init()
}
/**
@ 作者: 秦东
@ 时间: 2024-05-08 14:56:13
@ 功能: 初始化数据
*/
const init = () => {
loading.value= true
haveCustomerFormVersion({id:props.tableKey})
.then(({data})=>{
console.log("加载异常-------------->",data)
versionList.value = data
// if(data.length > 0){
// data.forEach((item:any) => {
// if(item.status == 1){
// versionId.value = item.id.toString()
// emits('update:formVersion', item.id.toString())
// }
// });
// }
})
.finally(()=>{loading.value= false})
}
defineExpose({
open
})
/**
@ 作者: 秦东
@ 时间: 2024-05-09 14:03:54
@ 功能: 设置颜色
*/
const setColor = (val:number) => {
if(val == 1){
return "#67C23A"
}else{
return "#F56C6C"
}
}
</script>
<template>
<div
v-if="isOpen"
class="use-template active"
v-loading="loading"
>
<span class="close icon-close" @click="isOpen = false"></span>
<div v-if="versionList.length === 0" class="no-date">暂无版本</div>
<div v-else class="list">
<el-scrollbar class="timeLineBox">
<el-timeline style="max-width: 600px">
<el-timeline-item v-for="item in versionList" :key="item.id" placement="top" :color="setColor(item.status)">
<el-card v-if="item.status==1" >
<el-row>
<el-col>版本V{{ item.version }}</el-col>
<el-col>创建人{{ item.createrName }}</el-col>
<el-col>创建时间{{ item.dayTime }}</el-col>
<el-col style="text-align:right"><el-button text type="success" size="small" disabled>使用中</el-button></el-col>
</el-row>
</el-card>
<el-card v-else >
<el-row>
<el-col>版本V{{ item.version }}</el-col>
<el-col>创建人{{ item.createrName }}</el-col>
<el-col>创建时间{{ item.dayTime }}</el-col>
<el-col style="text-align:right"><el-button type="primary" size="small" @click="setupStatus(item)">启用</el-button></el-col>
</el-row>
</el-card>
</el-timeline-item>
</el-timeline>
</el-scrollbar>
</div>
</div>
</template>
<style lang='scss' scoped>
.use-template{
width:250px;
top: 40px;
.list{
padding: 30px 5px;
}
}
.timeLineBox{
height: calc(100vh - 80px);
::v-deep .el-card__body{
padding:5px;
// color: #FFF;
}
}
</style>

2
src/types/components.d.ts

@ -22,6 +22,7 @@ declare module '@vue/runtime-core' {
DesignLayoutPage: typeof import('./../components/DesignForm/designLayout/designLayoutPage.vue')['default']
DiyIconfont: typeof import('./../components/DesignForm/public/expand/diy-iconfont.vue')['default']
DragControl: typeof import('./../components/DesignForm/dragControl.vue')['default']
DragControlNew: typeof import('./../components/DesignForm/dragControlNew.vue')['default']
ElAffix: typeof import('element-plus/es')['ElAffix']
ElAside: typeof import('element-plus/es')['ElAside']
ElAvatar: typeof import('element-plus/es')['ElAvatar']
@ -105,6 +106,7 @@ declare module '@vue/runtime-core' {
FormGroup1: typeof import('./../components/DesignForm/public/form/formGroup1.vue')['default']
FormItem: typeof import('./../components/DesignForm/public/form/formItem.vue')['default']
FormPageCont: typeof import('./../components/DesignForm/tableListPage/formPageCont.vue')['default']
FormVersion: typeof import('./../components/DesignForm/formVersion.vue')['default']
FormWord: typeof import('./../components/workflow/dialog/formWord.vue')['default']
GithubCorner: typeof import('./../components/GithubCorner/index.vue')['default']
Hamburger: typeof import('./../components/Hamburger/index.vue')['default']

2
src/views/sysworkflow/lowcodepage/appFormList.vue

@ -294,7 +294,7 @@ const fanyePage = (val: number) =>{
<LowCodeFormPage v-if="addFormIsShow" :drawer-with="props.drawerWith" v-model:form-key="formId" @refreshPage="refreshPage" />
<DesignAPPpage v-model:is-show="appPageShow" v-model:form-key="appKey" :drawer-with="props.drawerWith" @refreshPage="getFormAppList" />
<DesignAPPpage v-model:is-show="appPageShow" v-model:form-key="appKey" :group-key="props.groupId" :drawer-with="props.drawerWith" @refreshPage="getFormAppList" />
<el-drawer
v-model="lookPageIsShow"

10
src/views/sysworkflow/lowcodepage/appPage/appMenus.vue

@ -39,6 +39,10 @@ const props = defineProps({
type:Number,
default:0
},
groupKey:{
type:String,
default:""
}
});
const svgIsShow = ref(false)
const emits = defineEmits(["update:menusTree"]);
@ -218,12 +222,14 @@ const saveAppFormIsShow = ref(false)
@ 时间: 2024-05-07 11:21:39
@ 功能: 新增表单页面
*/
const createNewPage = () => {
const creetMenuId = ref("")
const createNewPage = (val?:string) => {
creetMenuId.value = val.toString();
saveAppFormIsShow.value = true;
}
</script>
<template>
<CreateAppFormPage v-if="saveAppFormIsShow" v-model:is-show="saveAppFormIsShow" :drawer-with="props.drawerWith" :app-cont="props.appCont" />
<CreateAppFormPage v-if="saveAppFormIsShow" v-model:is-show="saveAppFormIsShow" :drawer-with="props.drawerWith" :form-Key="props.formKey" :app-cont="props.appCont" :group-key="props.groupKey" :menu-id="creetMenuId" />
<el-tree
:data="appMenuTree"
draggable

121
src/views/sysworkflow/lowcodepage/appPage/appPageForm/pageForm.vue

@ -4,18 +4,131 @@
@ 备注: 自定义表单
-->
<script lang='ts' setup>
import { useRoute, useRouter } from 'vue-router'
import { json2string,objToStringify,string2json,stringToObj } from '@/utils/DesignForm/form'
import { customerFormVersionCont } from '@/api/DesignForm/type'
import { FormData,formStruct,DrawerStruct, VideoMsg } from '@/api/DesignForm/types'
//
import DragControl from '@/components/DesignForm/dragControl.vue';
const props = defineProps({
appCont:{
type:Object,
default(){
return {}
}
},
formKey:{
type:String,
default:""
},
groupKey:{
type:String,
default:""
},
formVersion:{
type:String,
default:""
},
formconfigcont:{
type:Object,
default(){
return {}
}
},
state:{
type:Object,
default(){
return {}
}
}
});
const emits = defineEmits<{
(e: 'update:state', val: formStruct): void
(e: 'update:formKey', val: string): void
(e: 'update:formVersion', val: string): void
(e: 'judgeFormIsEdit', val: boolean): void
(e: 'runNextWindows', val: number): void
(e: 'closeFormPage'): void
}>()
const state = computed({
get() {
return props.state
},
set(val: formStruct) {
emits('update:state', val)
}
});
const formKeyVal = computed({
get() {
return props.formKey
},
set(val: formStruct) {
emits('update:formKey', val)
}
});
const versionCont = ref<customerFormVersionCont[]>([]) //
//
const searchCheckField = (data: FormData) => {
state.value.formData.list.push(data)
}
//
const selectTemplate = (data: FormData) => {
state.value.formData = stringToObj(objToStringify(data))
}
//
const editversionstaus = (id:string) =>{
}
//
const openAceEditDrawer = (params: any) => {
}
</script>
<template>
<el-aside class="asideBox">Aside</el-aside>
<el-main class="mainBox">Main</el-main>
<el-aside class="asideBox">Aside</el-aside>
<el-aside class="asideBox leftBox">
<DragControl
v-model:versionid="props.formVersion"
:formid="state.formOtherData.source"
:versioncont="versionCont"
@click-check="searchCheckField"
@click="selectTemplate"
@editversionstaus="editversionstaus"
/>
</el-aside>
<el-main class="mainBox rightBox">
</el-main>
<el-aside class="asideBox">
<form-control-attr
ref="formControlAttrEl"
v-model:formOtherData="state.formOtherData"
:form-data="state.formData.form"
:form-config="state.formData.config"
:customerformid="props.groupKey"
:form-list="state.formData.list"
:form-info="state.formData"
@open-dialog="openAceEditDrawer"
/>
</el-aside>
</template>
<style lang='scss' scoped>
.asideBox{
height: calc(100vh - 40px);
width: 300px;
overflow-y : auto;
.leftBox{
width: 250px;
}
.rightBox{
width: 300px;
}
}
.mainBox{
border-left: 1px solid #ECECEC;

78
src/views/sysworkflow/lowcodepage/appPage/createAppFormPage.vue

@ -4,6 +4,10 @@
@ 备注: 编辑表单
-->
<script lang='ts' setup>
import { useRoute, useRouter } from 'vue-router'
import { customerFormConfig,formStruct } from '@/api/DesignForm/types'
import { getProductionMarkForm } from '@/api/DesignForm/requestapi'
import PageForm from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/pageForm.vue"
import PageFlow from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/pageFlow.vue"
import PageList from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/pageList.vue"
@ -22,10 +26,57 @@ const props = defineProps({
type:Number,
default:0
},
formKey:{
type:String,
default:""
},
groupKey:{
type:String,
default:""
},
menuId:{
type:String,
default:""
}
});
const emits = defineEmits(["update:isShow"]);
const tabsActive = ref(1)
const route: any = useRoute().query || {}
const formConfigCont = reactive<customerFormConfig>({
formName:"",
formlogo:""
})
//ID
const formVersion = ref<string>("")
const state = reactive<formStruct>({
formData: {
list: [],
form: {
size: 'default',
name:'',
formName: formConfigCont.formName
},
config: {
groupKey:props.formGroupKey
},
styles:{
divStyle:{},
labelStyle:{},
inputStyle:{}
},
purview:[]
},
editor: {},
loading: false,
formDataPreview: {},
previewVisible: false, //
designType: route.type, // search
formDict: {},
formOtherData: {
source: route.source || '',
formName: formConfigCont.formName
}
})
/**
@ 作者: 秦东
@ 时间: 2024-05-07 15:11:24
@ -34,6 +85,20 @@ const tabsActive = ref(1)
const closeSavePageForm = () =>{
emits("update:isShow",false)
}
onBeforeMount(() => {
getProductionMarkForm()
.then(({data})=>{
formConfigCont.formlogo = data.formlogo
formConfigCont.formName = data.formname
state.formData.form.name = data.formlogo
state.formData.form.formName = data.formname
state.formOtherData.formName = data.formname
})
.finally(()=>{
})
})
</script>
<template>
<el-drawer v-model="props.isShow" title="设置/编辑自定义表单" :with-header="false" :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true" :size="props.drawerWith">
@ -55,10 +120,10 @@ const closeSavePageForm = () =>{
<el-tooltip
class="box-item"
effect="dark"
:content="props.appCont.appName"
:content="state.formData.form.formName"
placement="bottom"
>
<el-text class="w-150px mb-2" truncated>未命名表单</el-text>
<el-text class="w-150px mb-2" truncated>{{ state.formData.form.formName }}</el-text>
</el-tooltip>
</el-space>
</div>
@ -73,13 +138,14 @@ const closeSavePageForm = () =>{
</el-tabs>
</div>
<div class="headRight">
{{ props.menuId }}
<el-button type="danger" size="small" @click="closeSavePageForm" >关闭</el-button>
</div>
</el-header>
<el-container>
<PageForm v-if="tabsActive==1" />
<PageFlow v-if="tabsActive==2" />
<PageList v-if="tabsActive==3" />
<PageForm v-if="tabsActive==1" :form-Key="props.formKey" :app-cont="props.appCont" :group-key="props.groupKey" v-model:state="state" v-model:form-version="formVersion" :formconfigcont="formConfigCont" />
<PageFlow v-if="tabsActive==2" :form-Key="props.formKey" :app-cont="props.appCont" :group-key="props.groupKey" />
<PageList v-if="tabsActive==3" :form-Key="props.formKey" :app-cont="props.appCont" :group-key="props.groupKey" />
</el-container>
</el-container>
</div>

6
src/views/sysworkflow/lowcodepage/appPage/index.vue

@ -24,6 +24,10 @@ const props = defineProps({
isShow:{
type: Boolean,
default: false,
},
groupKey:{
type:String,
default:""
}
});
const emits = defineEmits(["update:isShow","update:svgName","refreshPage"]);
@ -253,7 +257,7 @@ const addAppPageForm = (key?:string) => {
</el-menu-item>
</el-menu> -->
<AppMenus :form-Key="formKey" v-model:menus-tree="menusTree" :app-cont="appCont" :drawer-with="props.drawerWith" />
<AppMenus :form-Key="props.formKey" v-model:menus-tree="menusTree" :group-key="props.groupKey" :app-cont="appCont" :drawer-with="props.drawerWith" />

3
src/views/sysworkflow/lowcodepage/index.vue

@ -56,6 +56,7 @@ const handleCommand = (command: string,groupId: string) => {
createApp(sendInfo)
.then((data)=>{
formKey.value = data.data.uuid
groupKey.value = groupId.toString()
nextTick(() =>{
appPageShow.value = true
});
@ -209,7 +210,7 @@ const getRongQiAttr = () => {
<el-pagination layout="prev, pager, next" v-model:current-page="page" :page-size="pageSize" :total="pageTotal" />
</div>
<DesignAPPpage v-model:is-show="appPageShow" :drawer-with="drawerWith" v-model:form-key="formKey" @refreshPage="refreshPage" />
<DesignAPPpage v-model:is-show="appPageShow" :drawer-with="drawerWith" v-model:form-key="formKey" :group-key="groupKey" @refreshPage="refreshPage" />
<LowCodeFormPage v-if="addFormIsShow" :drawer-with="drawerWith" v-model:form-key="formKey" :form-group-key="formGroupKey" @refreshPage="refreshPage" />
<LowCodeFormGroupPage v-if="addFormGroupIsShow" :drawer-with="drawerGroupWith" :group-key="groupKey" @refreshPage="refreshPage" />

19
src/views/sysworkflow/lowcodepage/pageDesignes.vue

@ -19,6 +19,7 @@ import { submitAndCancelButton,cancelButton,submitButton } from "@/api/DesignFor
//
import DragControl from '@/components/DesignForm/dragControl.vue';
import DragControlNew from '@/components/DesignForm/dragControlNew.vue';
import HeadTools from '@/components/DesignForm/public/headTools.vue';
// import HeadTools from '@/components/DesignForm/public/headToolsNew.vue';
import FormDesign from '@/components/DesignForm/public/form/form.vue'
@ -55,6 +56,7 @@ const emits = defineEmits<{
(e: 'judgeFormIsEdit', val: boolean): void
(e: 'runNextWindows', val: number): void
(e: 'closeFormPage'): void
(e: 'verTabsClick'): void
}>()
const state = computed({
@ -565,16 +567,31 @@ onMounted(() => {
// watch(() =>versionId.value ,(val:string)=>{
// emits('update:formVersion', val)
// })
/**
@ 作者: 秦东
@ 时间: 2024-05-09 14:29:06
@ 功能: 根据启用版本进行加载页面
*/
const versionUpdateForm = (val:string) => {
console.log("加载异常-------111------->",val)
versionId.value = val
getInitData()
}
</script>
<template>
<div class="design_container">
<DragControl
<!-- <DragControl
v-model:versionid="versionId"
:formid="state.formOtherData.source"
:versioncont="versionCont"
@click-check="searchCheckField"
@click="selectTemplate"
@editversionstaus="editversionstaus"
/> -->
<DragControlNew
:table-key="state.formData.form.name"
@versionUpdateForm="versionUpdateForm"
/>
<div class="main-body">
<HeadTools v-loading="state.loading" :customerformid="formKeyVal" @click="headToolClick" />

Loading…
Cancel
Save