From 80e53e9c7668f280b2933adc5f94ff5cab3c2df7 Mon Sep 17 00:00:00 2001 From: herenshan112 Date: Wed, 27 Sep 2023 13:16:33 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=AB=AF=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E8=A1=A8=E5=8D=95=E6=96=B0=E5=A2=9E=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E4=B8=87=E5=86=8C=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/DesignForm/requestapi.ts | 10 +- src/api/DesignForm/type.ts | 6 + src/api/taskapi/management.ts | 58 +++++ src/api/taskapi/types.ts | 57 +++++ src/assets/scss/form.scss | 6 +- src/components/DesignForm/formControlAttr.vue | 53 +++- .../DesignForm/public/form/form.vue | 111 ++++++-- .../DesignForm/public/form/formGroup.vue | 27 +- .../DesignForm/public/form/formItem.vue | 3 +- src/permission.ts | 2 +- src/styles/index.scss | 1 + src/views/sysworkflow/codepage/createform.vue | 1 + src/views/sysworkflow/codepage/page.vue | 14 +- .../taskmanagement/edittaskcustomerform.vue | 238 ++++++++++++++++++ .../taskmanagement/taskcustomerform.vue | 207 +++++++++++++++ .../taskplatform/taskmanagement/taskentry.vue | 112 +++++++++ .../taskplatform/taskmanagement/tasklist.vue | 167 +++++++++++- 17 files changed, 1032 insertions(+), 41 deletions(-) create mode 100644 src/api/taskapi/management.ts create mode 100644 src/api/taskapi/types.ts create mode 100644 src/views/taskplatform/taskmanagement/edittaskcustomerform.vue create mode 100644 src/views/taskplatform/taskmanagement/taskcustomerform.vue create mode 100644 src/views/taskplatform/taskmanagement/taskentry.vue diff --git a/src/api/DesignForm/requestapi.ts b/src/api/DesignForm/requestapi.ts index e8626dce1..aa3b40a2b 100644 --- a/src/api/DesignForm/requestapi.ts +++ b/src/api/DesignForm/requestapi.ts @@ -18,7 +18,7 @@ import { getFormTableStruct, optimizeRepairForm, publicFormTableStruct, - formTabelStruct, + hanziToPinyin, gogoBackFormTabelStruct } from './type'; //自定义表单列表 @@ -159,3 +159,11 @@ export function judgeSubmitCancel(data: any){ data: data }); } +//中文转拼音 +export function chineseToPinyin(data: hanziToPinyin){ + return request({ + url: '/systemapi/public/chinese_to_pinyin', + method: 'post', + data: data + }); +} diff --git a/src/api/DesignForm/type.ts b/src/api/DesignForm/type.ts index 89451ec96..0a3b008ca 100644 --- a/src/api/DesignForm/type.ts +++ b/src/api/DesignForm/type.ts @@ -125,3 +125,9 @@ export interface gogoBackFormTabelStruct extends formTabelStruct{ integer:string; decimal:string; } +//汉字转拼音 +export interface hanziToPinyin{ + title:string; + types:number; + connector:string; +} diff --git a/src/api/taskapi/management.ts b/src/api/taskapi/management.ts new file mode 100644 index 000000000..1270748ea --- /dev/null +++ b/src/api/taskapi/management.ts @@ -0,0 +1,58 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { + TaskLogQuery, + taskLogPageResult, + gainTaskListQuery, + gainTaskListPageResult, + customerFormLogo, + customerFormVersionCont +} from '@/api/taskapi/types' + + +/** + * 非流程表单提交数据记录 + * + * @param TaskLogQuery + */ + export function currencyFormApiSubmit(url:any,data:any){ + return request({ + url: url, + method: 'post', + data:data + }); +} + +/** + * 非流程表单提交数据记录 + * + * @param TaskLogQuery + */ + export function appFormdataLog(data: TaskLogQuery): AxiosPromise { + return request({ + url: '/systemapi/task_management/app_formdata_log', + method: 'post', + data:data + }); +} +/** + * 获取可执行得任务列表 + * + * @param gainTaskListQuery + */ + export function gainTaskList(data: gainTaskListQuery): AxiosPromise { + return request({ + url: '/systemapi/task_management/gain_task_list', + method: 'post', + data:data + }); +} + +//获取自定义表单版本列表 +export function haveCustomerFormVersion(data: customerFormLogo):AxiosPromise { + return request({ + url: '/systemapi/task_management/gain_task_versioncont', + method: 'post', + data: data + }); +} diff --git a/src/api/taskapi/types.ts b/src/api/taskapi/types.ts new file mode 100644 index 000000000..4cd6dcae0 --- /dev/null +++ b/src/api/taskapi/types.ts @@ -0,0 +1,57 @@ +//任务记录 +export interface TaskLogQuery extends PageQuery { + keywords?: string; +} +//任务记录列表 +export interface taskLonCont{ + id:number; + title:string; + creater:number; + creater_time:number; + edit_time:number; + types:number; + version_id:number; + status:number; + masters_key:string; +} + +/** + * 任务记录列表分页 + */ + export type taskLogPageResult = PageResult; + + //获取可执行得任务列表 + export interface gainTaskListQuery extends PageQuery { + status?: number; +} +//执行得任务记录列表 +export interface taskListCont{ + id:string; + name:string; + createrName:string; + createrNumber:string; + createrTame:string; +} +/** + * 获取可执行得任务列表分页 + */ + export type gainTaskListPageResult = PageResult; + + //自定义表单标识符 +export interface customerFormLogo{ + id:string +} + //自定义表单版本内容 +export interface customerFormVersionCont{ + id:number; + tablekey:string; + version:number; + status:number; + mastesform:string; + mastesformjson:string; + creater:number; + time:number; + editTime:number; + table_structure:string; + dict:string; +} diff --git a/src/assets/scss/form.scss b/src/assets/scss/form.scss index 28742b847..e99ec0c6c 100644 --- a/src/assets/scss/form.scss +++ b/src/assets/scss/form.scss @@ -2,7 +2,7 @@ // 左侧栏 $mainColor: #66b1ff; .design-container {margin: 10px !important;display: flex; background-color: #FFFFFF;} -.components-list {width: 250px;padding: 8px 0;overflow-y: auto;height: calc(100vh - 104px);position: relative;overflow-x: hidden; +.components-list {width: 250px;padding: 8px 0;overflow-y: auto;height: calc(100vh - 20px);position: relative;overflow-x: hidden; .title {padding: 8px 12px;position: relative; .template {position: absolute;right: 12px;top: 0;padding: 8px;cursor: pointer} } @@ -35,7 +35,7 @@ $mainColor: #66b1ff; .main-body {flex: 2; border-left: 1px solid #e0e0e0;border-right: 1px solid #e0e0e0;margin: 0;overflow: hidden; .empty-tips {text-align: center;width: 100%;font-size: 20px;color: #ccc;position: absolute;left: 0;top: 100px; } - .main-form { background: #fff;border: 1px dashed #999;margin: 10px;height: calc(100vh - 165px);overflow-y: auto;overflow-x: hidden;position: relative} + .main-form { background: #fff;border: 1px dashed #999;margin: 10px;height: calc(100vh - 85px);overflow-y: auto;overflow-x: hidden;position: relative} } // 中间按钮工具 .main-tools {line-height: 26px;border-bottom: 2px solid #e4e7ed;margin-right: 10px;padding: 8px 0;display: flex;align-items: center;justify-content: flex-end; @@ -119,7 +119,7 @@ $mainColor: #66b1ff; .group {width: 25%} } } -.sidebar-tools {width: 300px;right: 0;top: 0;overflow-y: auto;box-sizing: border-box;padding-bottom: 10px;bottom: 0; height: calc(100vh - 60px); +.sidebar-tools {width: 300px;right: 0;top: 0;overflow-y: auto;box-sizing: border-box;padding-bottom: 10px;bottom: 0; height: calc(100vh - 30px); .form { .el-form-item {margin-bottom: 10px;} } diff --git a/src/components/DesignForm/formControlAttr.vue b/src/components/DesignForm/formControlAttr.vue index 952e49d59..d5d3164ec 100644 --- a/src/components/DesignForm/formControlAttr.vue +++ b/src/components/DesignForm/formControlAttr.vue @@ -12,6 +12,8 @@ import { ElMessage } from 'element-plus' import { formatNumber } from '@/api/DesignForm/utils' import { PublicAtrr } from '@/api/DesignForm/types' +import { chineseToPinyin } from '@/api/DesignForm/requestapi' + const props = withDefaults( //接收父级参数 defineProps<{ formData: any @@ -797,8 +799,42 @@ const controlChange = (obj: any, val: any) => { // 因value:type===inputSlot,这里使用了v-model,影响不大暂不处理 break case 'labelNameVal': - controlData.value.name = val - fileSignAry.push(val) + chineseToPinyin({title:val,types:8,connector:""}) + .then((data:any)=>{ + if(data.code == 0){ + if(data.data != ""){ + if(!fileSignAry.includes(data.data)){ + controlData.value.name = data.data + fileSignAry.push(data.data) + }else{ + let isEnd = true; + do{ + let titleVal = data.data + Rand(10000000,99999999) + if(!fileSignAry.includes(titleVal)){ + controlData.value.name = titleVal; + fileSignAry.push(titleVal); + isEnd=false; + } + }while(isEnd); + } + }else{ + if(!fileSignAry.includes(val)){ + controlData.value.name = val + fileSignAry.push(val) + }else{ + let titleVal = val + Rand(10000000,99999999) + if(!fileSignAry.includes(titleVal)){ + controlData.value.name = titleVal; + fileSignAry.push(titleVal); + } + } + + } + + } + }) + + console.log("字段编辑--fileSignAry--》",fileSignAry) break } @@ -807,6 +843,19 @@ const controlChange = (obj: any, val: any) => { obj.path && getPropByPath(controlData.value, obj.path, newVal) } } +/** +* 获取非负整数随机数 +* @param Min 最小整数 +* @param Max 最大整数 +* @returns 随机数 +*/ +const Rand = (Min: number, Max: number) => { + switch (Min) { + case 0: return Math.round(Math.random() * Max); + case 1: return Math.ceil(Math.random() * Max); + default: return Math.round(Math.random() * (Max - Min) + Min); + } +} // 修改指定路径下的值 const getPropByPath = (obj: any, path: string, val: any) => { let tempObj = obj diff --git a/src/components/DesignForm/public/form/form.vue b/src/components/DesignForm/public/form/form.vue index a81f6f2c7..8c6f36436 100644 --- a/src/components/DesignForm/public/form/form.vue +++ b/src/components/DesignForm/public/form/form.vue @@ -19,6 +19,8 @@ import { import formatResult from '@/utils/DesignForm/formatResult' import formChangeValue from '@/utils/DesignForm/formChangeValue' import { jsonParseStringify } from '@/utils/DesignForm' +//通用提交 +import { currencyFormApiSubmit } from '@/api/taskapi/management' const props = withDefaults( defineProps<{ @@ -32,10 +34,12 @@ const props = withDefaults( editUrl?: string // 表单数据修改保存提交url beforeSubmit?: Function | string // 表单提交前数据处理,可对提交数据处理,新增和保存都会触发 afterSubmit?: Function // 表单提交后,默认提示提交结果,可return false阻止提示 + closeAppSubmit?: Function value?: { [key: string]: any } // 表单初始值,同setValue options?: { [key: string]: any } // 表单组件选项,同setOptions dict?: object // 固定匹配的字典 isSearch?: boolean // 列表里作为筛选使用 + }>(), { type: 1, // 1新增;2修改;3查看(表单模式) ;4查看; 5设计 @@ -120,6 +124,7 @@ const model = ref({}) const getInitModel = () => { const obj = {} forEachGetFormModel(props.formData.list, obj) + console.log("obj===>",obj) model.value = obj } watch( @@ -220,6 +225,11 @@ provide(constGetControlByName, getControlByName) const ruleForm = ref() const validate = (callback: any) => { ruleForm.value.validate((valid: boolean, fields: any) => { + + console.log("ruleForm.value--->filter-->",ruleForm.value) + console.log("getValue--->fields-->",fields) + console.log("getValue--->valid-->",valid) + let fieldValue = fields if (valid) { // 校验通过,返回当前表单的值 @@ -230,6 +240,8 @@ const validate = (callback: any) => { } // 提供一个取值的方法 const getValue = (filter?: boolean) => { + console.log("getValue--->filter-->",filter) + console.log("getValue--->model-->",model) if (filter) { const obj: any = {} for (const key in model.value) { @@ -292,18 +304,33 @@ provide(constFormBtnEvent, (obj: any) => { resetFields() // 重置 break case 'cancel': // 取消返回, - router.go(-1) //这个刷新后可能会失败 + // router.go(-1) //这个刷新后可能会失败 + let notReturn + if (typeof props.closeAppSubmit === 'function') { + notReturn = props.closeAppSubmit() + } break } }) // 获取表单数据,编辑时,外部调用 const getData = (params = {}) => { - const requestUrl = props.formData.config?.requestUrl || props.requestUrl + let requestUrl = props.formData.config?.requestUrl || props.requestUrl if (props.type === 5 || !requestUrl || props.isSearch) { console.error('执行了获取数据方法,但配置有误!') return } - + switch(requestUrl){ + case "getFormContent": + requestUrl ="/systemapi/task_management/look_customer_formdata" + break; + case "saveFormContent": + requestUrl ="/systemapi/task_management/customer_form_adddata" + break; + case "editFormContent": + requestUrl ="/systemapi/task_management/customer_form_editdata" + break; + default: + } loading.value = true const newParams: any = params // 同时可使用props或是events里的事件,根据使用使用其中一种即可 @@ -319,14 +346,11 @@ const getData = (params = {}) => { // 停止数据请求 return } - - console.log("res------执行了获取数据方法,但配置有误----->", requestUrl,newParams2,newParams) - - getRequest(requestUrl, newParams2 ?? newParams) - .then(res => { - // console.log(res) + currencyFormApiSubmit(requestUrl, newParams2 ?? newParams) + .then((res: any) => { loading.value = false const result = res.data + console.log("停止数据请求--->",res) if (result) { let formatRes: any = result // 比较适用通用表单,保存在服务端 @@ -354,15 +378,18 @@ const getData = (params = {}) => { }) } }) - .catch((res: any) => { + .catch(res => { loading.value = false return ElMessage.error(res.message) }) + console.log("res------执行了获取数据方法,但配置有误----->", requestUrl,newParams2,newParams) + + } const submit = (params = {}) => { - const addUrl = props.formData.config?.addUrl || props.addUrl - const editUrl = props.formData.config?.editUrl || props.editUrl - const apiUrl = props.type === 1 ? addUrl : editUrl + let addUrl = props.formData.config?.addUrl || props.addUrl + let editUrl = props.formData.config?.editUrl || props.editUrl + let apiUrl = props.type === 1 ? addUrl : editUrl if (props.isSearch || !apiUrl || loading.value) { if (!props.isSearch && !apiUrl) { console.error( @@ -372,9 +399,28 @@ const submit = (params = {}) => { // 列表里作为筛选时,不提交表单 return } + switch(apiUrl){ + case "getFormContent": + apiUrl ="/systemapi/task_management/look_customer_formdata" + break; + case "saveFormContent": + apiUrl ="/systemapi/task_management/customer_form_adddata" + break; + case "editFormContent": + apiUrl ="/systemapi/task_management/customer_form_editdata" + break; + default: + } + validate((valid: boolean, fields: any) => { + if (valid) { + const formatParams = Object.assign({}, fields, params) + // console.log("params--->",params) + // console.log("fields--->",fields) + // console.log("formatParams-Object-->",formatParams) + let submitParams const beforeSubmit = props.formData.events?.beforeSubmit if (beforeSubmit) { @@ -392,15 +438,29 @@ const submit = (params = {}) => { if (submitParams === false) { return } - loading.value = true + // console.log("beforeSubmit--->",beforeSubmit) + // console.log("props.beforeSubmit--->",props.beforeSubmit) + // console.log("props.beforeSubmit--->",props.beforeSubmit) + + // loading.value = true + // console.log("apiUrl--->",apiUrl) + // console.log("submitParams--->",submitParams) + console.log("formatParams--->",formatParams) // 提交保存表单 - getRequest(apiUrl, submitParams ?? formatParams) + currencyFormApiSubmit(apiUrl, submitParams ?? formatParams) .then((res: any) => { - afterSubmit('success', res) - }) - .catch(res => { - afterSubmit('fail', res) - }) + afterSubmit('success', res) + }) + .catch(res => { + afterSubmit('fail', res) + }) + // getRequest(apiUrl, submitParams ?? formatParams) + // .then((res: any) => { + // afterSubmit('success', res) + // }) + // .catch(res => { + // afterSubmit('fail', res) + // }) } else { // 没通过校验 afterSubmit('validate', fields) @@ -415,7 +475,16 @@ const afterSubmit = (type: string, res: any) => { notReturn = afterSubmit(type, res) } else if (typeof props.afterSubmit === 'function') { notReturn = props.afterSubmit(type, res) + // console.log("notReturn--123456->",props.afterSubmit) } + // console.log("notReturn--->",notReturn) + // console.log("afterSubmit--->",afterSubmit) + // console.log("typeof afterSubmit--->",typeof afterSubmit) + // console.log("type--->",type) + // console.log("res--->",res) + // console.log("props.formData.events--->",props.formData.events) + // console.log("props.formData.events?.afterSubmit--->",props.formData.events?.afterSubmit) + loading.value = false // 不管结果,重置表单,防再次打开时保留上一次的值 // resetFields() @@ -424,7 +493,7 @@ const afterSubmit = (type: string, res: any) => { return } if (type === 'success') { - ElMessage.success(res.message || '保存成功!') + ElMessage.success(res.msg || '保存成功!') } else if (type === 'fail') { ElMessage.error(res.message || '保存失败!') } diff --git a/src/components/DesignForm/public/form/formGroup.vue b/src/components/DesignForm/public/form/formGroup.vue index 183a5df6b..f0492d717 100644 --- a/src/components/DesignForm/public/form/formGroup.vue +++ b/src/components/DesignForm/public/form/formGroup.vue @@ -52,8 +52,19 @@ const activeKey = computed(() => { }) // 禁止容器嵌套 const notNested = (type: string) => { + // const controlType = ['grid', 'table', 'tabs', 'div', 'flex', 'card'] + const controlType = ['grid', 'tabs', 'div', 'card'] + // let kjkdh = controlType.includes(type) + // console.log("禁止容器嵌套",kjkdh,controlType) + return controlType.includes(type) + // return false +} +const notNestedTableFlex = (type: string) => { const controlType = ['grid', 'table', 'tabs', 'div', 'flex', 'card'] + // let kjkdh = controlType.includes(type) + // console.log("禁止容器嵌套",kjkdh,controlType) return controlType.includes(type) + // return false } // 删除或复制 const click = (action: string, index: number, item?: any) => { @@ -86,7 +97,8 @@ const draggableAdd = (evt: any) => { const key = new Date().getTime().toString() const obj: any = dataList.value[newIndex] const isNested = evt.target && evt.target.getAttribute('data-type') // 不能嵌套 - if (isNested === 'not-nested' && notNested(obj.type)) { + // console.log("不能嵌套",obj,isNested) + if ((isNested === 'not-nested' && notNested(obj.type)) || ((isNested === 'not-table' || isNested === 'not-flex') && notNestedTableFlex(obj.type))) { dataList.value.splice(newIndex, 1) return } @@ -158,7 +170,8 @@ const groupClick = (item: any, ele?: string) => { store.setControlAttr(item) // grid时显示添加列按钮 state.gridAdd = item.type === 'grid' - state.clone = !notNested(item.type) + // state.clone = !notNested(item.type) + state.clone = !notNestedTableFlex(item.type) } // 返回栅格宽度 const getFormItemStyle = (ele: FormList) => { @@ -307,7 +320,8 @@ onUnmounted(() => { @@ -370,10 +384,15 @@ onUnmounted(() => { diff --git a/src/views/taskplatform/taskmanagement/edittaskcustomerform.vue b/src/views/taskplatform/taskmanagement/edittaskcustomerform.vue new file mode 100644 index 000000000..4560207e2 --- /dev/null +++ b/src/views/taskplatform/taskmanagement/edittaskcustomerform.vue @@ -0,0 +1,238 @@ + + + + diff --git a/src/views/taskplatform/taskmanagement/taskcustomerform.vue b/src/views/taskplatform/taskmanagement/taskcustomerform.vue new file mode 100644 index 000000000..21730986f --- /dev/null +++ b/src/views/taskplatform/taskmanagement/taskcustomerform.vue @@ -0,0 +1,207 @@ + + + + diff --git a/src/views/taskplatform/taskmanagement/taskentry.vue b/src/views/taskplatform/taskmanagement/taskentry.vue new file mode 100644 index 000000000..ecfbf095c --- /dev/null +++ b/src/views/taskplatform/taskmanagement/taskentry.vue @@ -0,0 +1,112 @@ + + + + diff --git a/src/views/taskplatform/taskmanagement/tasklist.vue b/src/views/taskplatform/taskmanagement/tasklist.vue index 4b7806426..35737a85b 100644 --- a/src/views/taskplatform/taskmanagement/tasklist.vue +++ b/src/views/taskplatform/taskmanagement/tasklist.vue @@ -4,10 +4,175 @@ @ 备注: 任务 -->