From 8f5009a3d57821c2c97690b8419e428967b5e981 Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期一, 03 六月 2024 22:48:41 +0800 Subject: [PATCH] 低代码更新 --- src/views/components/ItemModal.vue | 27 -- src/views/tigerprojects/mes/prod/biz_mes_wo/index.vue | 35 ++ src/views/tigerprojects/system/lowcode/normal/basDefectGrp.ts | 42 +++ src/views/tigerprojects/system/lowcode/normal/data.ts | 82 ++++++ src/views/tigerprojects/system/lowcode/normal/basReasonGrp.ts | 72 ++++++ src/views/tigerprojects/system/lowcode/setting/pageDetail.vue | 155 ++++++++++-- src/api/tigerapi/system.ts | 42 ++ src/views/tigerprojects/system/lowcode/normal/index.vue | 79 ++++++ src/utils/is.ts | 26 ++ src/views/components/NormalModal.vue | 137 +++++++++++ 10 files changed, 619 insertions(+), 78 deletions(-) diff --git a/src/api/tigerapi/system.ts b/src/api/tigerapi/system.ts index 5b47319..3ead966 100644 --- a/src/api/tigerapi/system.ts +++ b/src/api/tigerapi/system.ts @@ -30,7 +30,7 @@ EntityList, } from './model/systemModel'; import { defHttp } from '/@/utils/http/axios'; -import { isNullOrEmpty } from '/@/utils/is'; +import { isNullOrEmpty, isTimeType } from '/@/utils/is'; export enum Api { QueryUrl = '/Base/Query', @@ -655,31 +655,53 @@ /* 閫氱敤鏌ヨ鍒嗛〉 */ export async function getListByPage<T>(params: T) { const Keys = Object.getOwnPropertyNames(params); - let sqlcmd = ''; + let sqlcmd = '1=1 '; + let order = ''; for (const k in Keys) { console.log(`${k}:${Keys[k]}`); if ( !isNullOrEmpty(params[Keys[k]]) && Keys[k] != 'page' && Keys[k] != 'pageSize' && - Keys[k] != 'TABLE_NAME' + Keys[k] != 'TABLE_NAME' && + Keys[k] != 'order' && + Keys[k] != 'field' && + Keys[k] != '0' ) { - sqlcmd += `And ${Keys[k]} like '%${params[Keys[k]]}%'`; + if (!isNullOrEmpty(params[Keys[k]].length) && isTimeType(params[Keys[k]][0])) { + sqlcmd += ` And ${Keys[k]} > '${params[Keys[k]][0]}'`; + sqlcmd += ` And ${Keys[k]} < '${params[Keys[k]][1]}'`; + } else { + sqlcmd += `And ${Keys[k]} like '%${params[Keys[k]]}%'`; + } } } - const rParams = genActionPage(params['TABLE_NAME'], sqlcmd, params['page'], params['pageSize']); + if (!isNullOrEmpty(params['order'])) { + order = params['order'] == 'descend' ? params['field'] + ' desc' : params['field']; + } + const rParams = genAction(params['TABLE_NAME'], { + QueryAble_T: '', + where: sqlcmd, + order: order, + page: { + pageAble_T: 'string', + draw: 1, + pageIndex: params['page'], + pageSize: params['pageSize'], + }, + }); return getListByPageAsync(rParams); } -async function getListByPageAsync(params: ApiActionPage) { - const data = await defHttp.post<ApiActionPage>( - { url: Api.EntityPageList, params }, +async function getListByPageAsync(params: any) { + const data = await defHttp.post( + { url: Api.QueryUrl, params }, { isTransformResponse: false, }, ); const model = { - items: data.Data.data, - total: data.Data.totals, + items: data.Data.page.data, + total: data.Data.page.totals, }; return model; } diff --git a/src/utils/is.ts b/src/utils/is.ts index ae7609c..bc832fa 100644 --- a/src/utils/is.ts +++ b/src/utils/is.ts @@ -100,3 +100,29 @@ const reg = /^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?/; return reg.test(path); } + +export function isTime(value: any): value is Date { + return value instanceof Date && !isNaN(value.getTime()); +} + +export function isTimeViaConstructor(value: any): boolean { + return value instanceof Date || value.constructor === Date; +} + +export function isTimeViaRegExp(value: any): boolean { + return /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/.test(value.toString()); +} + +export function isTimeType(value: string): boolean { + return !isNaN(Date.parse(value)); +} + +// // 绀轰緥 +// const time1 = new Date(); +// console.log(isTime(time1)); // true + +// const time2 = '2023-04-01T12:00:00Z'; +// console.log(isTimeViaRegExp(time2)); // true + +// const notTime = 'hello world'; +// console.log(isTime(notTime)); // false diff --git a/src/views/components/ItemModal.vue b/src/views/components/ItemModal.vue index 36fea02..1f59268 100644 --- a/src/views/components/ItemModal.vue +++ b/src/views/components/ItemModal.vue @@ -55,37 +55,12 @@ sorter: true, width: 180, }, - // { - // title: t('鐗╂枡鎻忚堪'), - // dataIndex: 'ITEM_DESC', - // resizable:true, - // }, - // { - // title: t('鐩樼偣鐘舵��', - // dataIndex: 'STATUS', - // resizable:true, - // }, - // { - // title: t('鐩樼偣缁撴灉', - // dataIndex: 'RESULT', - // resizable:true, - // }, - // { - // title: t('WMS鏁伴噺', - // dataIndex: 'QTY', - // resizable:true, - // }, - // { - // title: t('ACT_QTY', - // dataIndex: 'COUNT_TYPE', - // resizable:true, - // } ]; const emit = defineEmits(['success', 'register']); const checkedKeys = ref<Array<string | number>>([]); const [registerTable, { reload, getForm }] = useTable({ - title: '鐗╂枡鍒楄〃', + title: '鍒楄〃淇℃伅', api: getItemListByPage, columns: ItemColumns, formConfig: { diff --git a/src/views/components/NormalModal.vue b/src/views/components/NormalModal.vue new file mode 100644 index 0000000..863d1c0 --- /dev/null +++ b/src/views/components/NormalModal.vue @@ -0,0 +1,137 @@ +<template> + <BasicModal + width="800px" + :height="600" + v-bind="$attrs" + @register="register" + :title="title" + @ok="handleSubmit" + > + <!-- <div class="pt-3px pr-3px"> + <BasicForm @register="registerForm" :model="model" /> + </div> --> + <div> + <BasicTable @register="registerTable"> + <!-- <template #toolbar> + <a-button type="primary" @click="handleCreate"> 鏂板鐩樼偣 </a-button> + </template> --> + </BasicTable> + </div> + </BasicModal> +</template> +<script lang="ts" setup> + import { ref, unref } from 'vue'; + import { BasicModal, useModalInner } from '/@/components/Modal'; + import { BasicForm, FormSchema, useForm } from '/@/components/Form/index'; + import { BasicTable, BasicColumn, TableAction, useTable } from '/@/components/Table'; + import { useI18n } from '/@/hooks/web/useI18n'; + import { getListByPage } from '/@/api/tigerapi/system'; + + const { t } = useI18n(); + const title = ref(''); + const tableName = ref(''); + const rowKey = ref(''); + const schemas = ref([] as FormSchema[]); + + //鍒楄〃 + const ItemColumns = ref([] as BasicColumn[]); + + const emit = defineEmits(['success', 'register']); + const checkedKeys = ref<Array<string | number>>([]); + const [registerTable, { reload, getForm }] = useTable({ + title: '鍒楄〃淇℃伅', + api: getListByPage, + searchInfo: { TABLE_NAME: tableName }, + columns: ItemColumns, + formConfig: { + labelWidth: 120, + schemas, + }, + useSearchForm: true, + showTableSetting: false, + rowKey: rowKey, + rowSelection: { + selectedRowKeys: checkedKeys, + + type: 'checkbox', + // getCheckboxProps(record: Recordable) { + // // Demo: 绗竴琛岋紙id涓�0锛夌殑閫夋嫨妗嗙鐢� + // if (record.id === '0') { + // return { disabled: true }; + // } else { + // return { disabled: false }; + // } + // }, + onSelect: onSelect, + onSelectAll: onSelectAll, + }, + bordered: true, + showIndexColumn: false, + // actionColumn: { + // width: 80, + // title: '鎿嶄綔', + // dataIndex: 'action', + // slots: { customRender: 'action' }, + // fixed: 'right' //undefined, + // }, + }); + const [register, { setModalProps, closeModal }] = useModalInner((data) => { + setModalProps({ confirmLoading: false }); + data && onDataReceive(data); + }); + + async function onDataReceive(data) { + console.log('Data Received', data); + // 鏂瑰紡1; + // setFieldsValue({ + // field2: data.data, + // field1: data.info, + // }); + title.value = data?.title; + schemas.value = data?.schemas; + ItemColumns.value = data?.ItemColumns; + tableName.value = data?.tableName; + rowKey.value = data?.rowKey; + checkedKeys.value = []; + getForm().resetFields(); + reload(); + } + + // function handleVisibleChange(v) { + // v && props.userData && nextTick(() => onDataReceive(props.userData)); + // } + + async function handleSubmit() { + try { + var values = ''; + // checkedKeys.value.forEach(element => { + // values+=element; + // }); + values = checkedKeys.value.join(','); + closeModal(); + emit('success', { + isUpdate: unref(false), + values: { values, id: 0 }, + }); + } finally { + setModalProps({ confirmLoading: false }); + } + } + function onSelect(record, selected) { + if (selected) { + checkedKeys.value = [...checkedKeys.value, record[rowKey.value]]; + } else { + checkedKeys.value = checkedKeys.value.filter((code) => code !== record[rowKey.value]); + } + } + function onSelectAll(selected, selectedRows, changeRows) { + const changeIds = changeRows.map((item) => item[rowKey.value]); + if (selected) { + checkedKeys.value = [...checkedKeys.value, ...changeIds]; + } else { + checkedKeys.value = checkedKeys.value.filter((code) => { + return !changeIds.includes(code); + }); + } + } +</script> diff --git a/src/views/tigerprojects/mes/prod/biz_mes_wo/index.vue b/src/views/tigerprojects/mes/prod/biz_mes_wo/index.vue index 1f50b61..2b7bc31 100644 --- a/src/views/tigerprojects/mes/prod/biz_mes_wo/index.vue +++ b/src/views/tigerprojects/mes/prod/biz_mes_wo/index.vue @@ -15,7 +15,7 @@ @click="handleSelectItem" preIcon="search|svg" /> - <ItemModal @register="registerItemAdd" @success="handleItemSuccess" /> + <NormalModal @register="registerItemAdd" @success="handleItemSuccess" /> </template> <template #action="{ record }"> <TableAction @@ -70,7 +70,7 @@ import { BasicTable, useTable, TableAction } from '/@/components/Table'; import WoDrawer from './WoDrawer.vue'; import WoModal from './WoModal.vue'; - import ItemModal from '/@/views/components/ItemModal.vue'; + import NormalModal from '/@/views/components/NormalModal.vue'; import { useDrawer } from '/@/components/Drawer'; import { columns, searchFormSchema } from './biz_mes_wo.data'; import { DeleteMesWo } from '/@/api/tigerapi/mes/wo'; @@ -170,8 +170,35 @@ //鐐瑰嚮鎵撳紑鐗╂枡鍒楄〃妗� function handleSelectItem() { openItemModal(true, { - data: 'content', - info: 'Info', + title: '鐗╂枡鍒楄〃', + schemas: [ + { + field: 'ITEM_CODE', + component: 'Input', + label: '鐗╂枡缂栫爜', + colProps: { + span: 12, + }, + }, + ], + ItemColumns: [ + { + title: t('鐗╂枡缂栫爜'), + dataIndex: 'ITEM_CODE', + resizable: true, + sorter: true, + width: 200, + }, + { + title: t('鐗╂枡鍚嶇О'), + dataIndex: 'ITEM_NAME', + resizable: true, + sorter: true, + width: 180, + }, + ], + tableName: 'BAS_ITEM', + rowKey: 'ITEM_CODE', }); } diff --git a/src/views/tigerprojects/system/lowcode/normal/basDefectGrp.ts b/src/views/tigerprojects/system/lowcode/normal/basDefectGrp.ts index 8e5d679..d681855 100644 --- a/src/views/tigerprojects/system/lowcode/normal/basDefectGrp.ts +++ b/src/views/tigerprojects/system/lowcode/normal/basDefectGrp.ts @@ -1,6 +1,8 @@ import { ActionItem, BasicColumn } from '/@/components/Table'; import { useMessage } from '/@/hooks/web/useMessage'; +import { useI18n } from '/@/hooks/web/useI18n'; +const { t } = useI18n(); const { notification } = useMessage(); /* 鑷畾涔夋寜閽柟娉� */ export function DftGrpRelease(reload: Fn, params: {}) { @@ -28,3 +30,43 @@ onClick: () => {}, }, ]; + +export function dftGrpGetSelectSuccess(d, u) { + return { + ITEM_CODE: d.values.values, + }; +} + +export function dftGrpOpenSelectItem(openItemModal: Fn) { + openItemModal(true, { + title: '鐗╂枡鍒楄〃', + schemas: [ + { + field: 'ITEM_CODE', + component: 'Input', + label: '鐗╂枡缂栫爜', + colProps: { + span: 12, + }, + }, + ], + ItemColumns: [ + { + title: t('鐗╂枡缂栫爜'), + dataIndex: 'ITEM_CODE', + resizable: true, + sorter: true, + width: 200, + }, + { + title: t('鐗╂枡鍚嶇О'), + dataIndex: 'ITEM_NAME', + resizable: true, + sorter: true, + width: 180, + }, + ], + tableName: 'BAS_ITEM', + rowKey: 'ITEM_CODE', + }); +} diff --git a/src/views/tigerprojects/system/lowcode/normal/basReasonGrp.ts b/src/views/tigerprojects/system/lowcode/normal/basReasonGrp.ts new file mode 100644 index 0000000..2e93eeb --- /dev/null +++ b/src/views/tigerprojects/system/lowcode/normal/basReasonGrp.ts @@ -0,0 +1,72 @@ +import { ActionItem, BasicColumn } from '/@/components/Table'; +import { useMessage } from '/@/hooks/web/useMessage'; +import { useI18n } from '/@/hooks/web/useI18n'; + +const { t } = useI18n(); +const { notification } = useMessage(); +/* 鑷畾涔夋寜閽柟娉� */ +export function RsGrpRelease(reload: Fn, params: {}) { + console.log('鐐瑰嚮浜嗕笅鍙戞寜閽�'); + notification.success({ + message: '鐐瑰嚮浜嗕笅鍙戞寜閽�', + description: `${params.entityName}`, + duration: 3, + }); + reload(); +} + +export const rsGrpactionColumn: BasicColumn = { + width: 180, + title: '鎿嶄綔', + dataIndex: 'action', + slots: { customRender: 'action' }, + fixed: undefined, +}; + +export const rsGrpActionItem: ActionItem[] = [ + { + icon: 'release|svg', + tooltip: '涓嬪彂', + onClick: () => {}, + }, +]; + +export function rsGrpGetSelectSuccess(d, u) { + return { + RSNG_CODE: d.values.values, + }; +} + +export function rsGrpOpenSelectItem(openItemModal: Fn) { + openItemModal(true, { + title: '涓嶈壇鍘熷洜缁勫垪琛�', + schemas: [ + { + field: 'RSNG_CODE', + component: 'Input', + label: '涓嶈壇鍘熷洜缁勪唬鐮�', + colProps: { + span: 12, + }, + }, + ], + ItemColumns: [ + { + title: t('涓嶈壇鍘熷洜缁勪唬鐮�'), + dataIndex: 'RSNG_CODE', + resizable: true, + sorter: true, + width: 200, + }, + { + title: t('涓嶈壇鍘熷洜缁勫悕绉�'), + dataIndex: 'RSNG_NAME', + resizable: true, + sorter: true, + width: 180, + }, + ], + tableName: 'BAS_REASON_GRP', + rowKey: 'RSNG_CODE', + }); +} diff --git a/src/views/tigerprojects/system/lowcode/normal/data.ts b/src/views/tigerprojects/system/lowcode/normal/data.ts index 4ecce0a..95eb15d 100644 --- a/src/views/tigerprojects/system/lowcode/normal/data.ts +++ b/src/views/tigerprojects/system/lowcode/normal/data.ts @@ -1,6 +1,16 @@ -import { DftGrpRelease, dftGrpActionItem, dftGrpactionColumn } from './basDefectGrp'; +import { + DftGrpRelease, + dftGrpActionItem, + dftGrpOpenSelectItem, + dftGrpGetSelectSuccess, + dftGrpactionColumn, +} from './basDefectGrp'; +import { rsGrpGetSelectSuccess, rsGrpOpenSelectItem } from './basReasonGrp'; import { DeleteEntity } from '/@/api/tigerapi/system'; import { ActionItem, BasicColumn } from '/@/components/Table'; +import { useI18n } from '/@/hooks/web/useI18n'; + +const { t } = useI18n(); export function GetActionsData(params: {}, ...args: Fn[]) { let data = [ @@ -18,7 +28,7 @@ }, }, ] as ActionItem[]; - switch (params.entityName) { + switch (params['entityName']) { case 'BAS_DEFECT_GRP': const _d = dftGrpActionItem; _d[0].onClick = DftGrpRelease.bind(null, args[1], params); @@ -33,9 +43,9 @@ } function deleteRecord(fn: Fn, params: {}) { - console.log(params.record); + console.log(params['record']); //鍒犻櫎 - const apiAction = DeleteEntity(params.record, params.entityName); + const apiAction = DeleteEntity(params['record'], params['entityName']); apiAction.then((action) => { if (action.IsSuccessed) { fn(); @@ -61,3 +71,67 @@ } return data; } + +/* 寮瑰嚭閫夋嫨妗嗛�夋嫨鎴愬姛 */ +export function GetSelectSuccess(d, u, entityName: string) { + let data = {}; + switch (entityName) { + case 'BAS_DEFECT_GRP': + data = dftGrpGetSelectSuccess(d, u); + break; + case 'BAS_REASON_GRP': + data = rsGrpGetSelectSuccess(d, u); + break; + default: + data = { + ITEM_CODE: d.values.values, + }; + break; + } + return data; +} + +/* 鎵撳紑寮瑰嚭閫夋嫨妗� */ +export function OpenSelectItem(openItemModal: Fn, entityName: string) { + switch (entityName) { + case 'BAS_DEFECT_GRP': + dftGrpOpenSelectItem(openItemModal); + break; + case 'BAS_REASON_GRP': + rsGrpOpenSelectItem(openItemModal); + break; + default: + openItemModal(true, { + title: '鐗╂枡鍒楄〃', + schemas: [ + { + field: 'ITEM_CODE', + component: 'Input', + label: '鐗╂枡缂栫爜', + colProps: { + span: 12, + }, + }, + ], + ItemColumns: [ + { + title: t('鐗╂枡缂栫爜'), + dataIndex: 'ITEM_CODE', + resizable: true, + sorter: true, + width: 200, + }, + { + title: t('鐗╂枡鍚嶇О'), + dataIndex: 'ITEM_NAME', + resizable: true, + sorter: true, + width: 180, + }, + ], + tableName: 'BAS_ITEM', + rowKey: 'ITEM_CODE', + }); + break; + } +} diff --git a/src/views/tigerprojects/system/lowcode/normal/index.vue b/src/views/tigerprojects/system/lowcode/normal/index.vue index 1cc1cfa..1b76a4d 100644 --- a/src/views/tigerprojects/system/lowcode/normal/index.vue +++ b/src/views/tigerprojects/system/lowcode/normal/index.vue @@ -7,30 +7,46 @@ <template #action="{ record }"> <TableAction :actions="createActions(record)" /> </template> + <template #form-add="{ field }"> + <a-button + v-if="field" + class="mt-1 ml-1" + size="small" + @click="handleSelectItem" + preIcon="search|svg" + /> + <NormalModal @register="registerItemAdd" @success="handleItemSuccess" /> + </template> </BasicTable> <normalDrawer @register="registerDrawer" @success="handleSuccess" /> </div> </template> <script lang="ts" setup> - import { h, onMounted, ref } from 'vue'; + import { h, onMounted, ref, unref } from 'vue'; import { BasicTable, useTable, TableAction, BasicColumn, FormSchema } from '/@/components/Table'; import { useDrawer } from '/@/components/Drawer'; import normalDrawer from './normalDrawer.vue'; - import { getEntity, getListByPage } from '/@/api/tigerapi/system'; + import NormalModal from '/@/views/components/NormalModal.vue'; + import { GetEnum, getEntity, getListByPage } from '/@/api/tigerapi/system'; import { useGlobSetting } from '/@/hooks/setting'; import { useRoute } from 'vue-router'; import { Tag, Tooltip } from 'ant-design-vue'; import { isNullOrEmpty } from '/@/utils/is'; - import { GetActionColumn, GetActionsData } from './data'; + import { GetActionColumn, GetActionsData, OpenSelectItem, GetSelectSuccess } from './data'; + import { useModal } from '/@/components/Modal'; + import { useLocale } from '/@/locales/useLocale'; + const { getLocale } = useLocale(); const route = useRoute(); const objParams = ref(JSON.parse(decodeURI(route.params?.id as string))); + const entityName = ref(objParams.value.ID); const globSetting = useGlobSetting(); const _columns = ref([]); const _searchFormSchema = ref([]); const _crudFormSchema = ref([]); + const [registerItemAdd, { openModal: openItemModal }] = useModal(); const [registerDrawer, { openDrawer }] = useDrawer(); - const [registerTable, { reload }] = useTable({ + const [registerTable, { getForm, reload }] = useTable({ title: '鍒楄〃淇℃伅', api: getListByPage, searchInfo: { TABLE_NAME: objParams.value.ID }, @@ -97,8 +113,49 @@ sqlcmd: "ASSEMBLY_NAME ='" + objParams.value.ID + "'", entityName: 'SYS_LOW_CODE', }); - _searchFormSchema.value = JSON.parse(data.Data.Items[0].SEARCH_FORM_JSON); - _crudFormSchema.value = JSON.parse(data.Data.Items[0].FORM_JSON); + var searchForms = JSON.parse(data.Data.Items[0].SEARCH_FORM_JSON); + for (const i in searchForms) { + if ( + !isNullOrEmpty(searchForms[i].componentProps) && + !isNullOrEmpty(searchForms[i].componentProps.api) && + searchForms[i].componentProps.api == 'GetEnum' + ) { + searchForms[i].componentProps.api = GetEnum; + searchForms[i].componentProps.params.name = `${objParams.value.ID}+${searchForms[i].field}s`; + searchForms[i].componentProps.labelField = unref(getLocale) == 'zh_CN' ? 'Desc' : 'Name'; + } + if ( + !isNullOrEmpty(searchForms[i].componentProps) && + !isNullOrEmpty(searchForms[i].componentProps.api) && + searchForms[i].componentProps.api == 'getEntity' + ) { + searchForms[i].componentProps.api = getEntity; + searchForms[i].componentProps.resultField = 'Data.Items'; + } + } + _searchFormSchema.value = searchForms; + var _cruds = JSON.parse(data.Data.Items[0].FORM_JSON); + for (const i in _cruds) { + if ( + !isNullOrEmpty(_cruds[i].componentProps) && + !isNullOrEmpty(_cruds[i].componentProps.api) && + _cruds[i].componentProps.api == 'GetEnum' + ) { + _cruds[i].componentProps.api = GetEnum; + _cruds[i].componentProps.params.name = `${objParams.value.ID}+${_cruds[i].field}s`; + _cruds[i].componentProps.labelField = unref(getLocale) == 'zh_CN' ? 'Desc' : 'Name'; + } + if ( + !isNullOrEmpty(_cruds[i].componentProps) && + !isNullOrEmpty(_cruds[i].componentProps.api) && + _cruds[i].componentProps.api == 'getEntity' + ) { + _cruds[i].componentProps.api = getEntity; + _cruds[i].componentProps.resultField = 'Data.Items'; + } + } + _crudFormSchema.value = _cruds; + var objs = JSON.parse(data.Data.Items[0].BASE_FORM_JSON); for (const i in objs) { if (!isNullOrEmpty(objs[i].customRender)) { @@ -113,4 +170,14 @@ } _columns.value = objs; }); + + /* 寮瑰嚭閫夋嫨妗嗛�夋嫨鎴愬姛鍚庝簨浠� */ + function handleItemSuccess(d, u) { + getForm().setFieldsValue(GetSelectSuccess(d, u, getForm().getFieldsValue()['0'])); + } + + /* 寮瑰嚭閫夋嫨妗� */ + function handleSelectItem() { + OpenSelectItem(openItemModal, getForm().getFieldsValue()['0']); + } </script> diff --git a/src/views/tigerprojects/system/lowcode/setting/pageDetail.vue b/src/views/tigerprojects/system/lowcode/setting/pageDetail.vue index b97d7c7..43d5426 100644 --- a/src/views/tigerprojects/system/lowcode/setting/pageDetail.vue +++ b/src/views/tigerprojects/system/lowcode/setting/pageDetail.vue @@ -120,6 +120,9 @@ <template #[item]="{ model, field }" v-for="item in mainwSwSlots" :key="item"> <a-switch v-model:checked="model[field]" /> </template> + <template #[item]="{ model, field }" v-for="item in mainIaSlots" :key="item"> + <a-input v-model:value="model[field]" /> + </template> </BasicForm> </div> </a-card> @@ -195,7 +198,7 @@ </template> <script lang="ts" setup> import { BasicForm, useForm } from '/@/components/Form'; - import { onMounted, ref, unref } from 'vue'; + import { nextTick, onMounted, ref, unref } from 'vue'; import { Card, InputGroup, Select, Input, Switch } from 'ant-design-vue'; import { ApiSelect } from '/@/components/Form/index'; import { useRoute, useRouter } from 'vue-router'; @@ -208,7 +211,7 @@ import { SelectTypes } from 'ant-design-vue/es/select'; import { useMultipleTabStore } from '/@/store/modules/multipleTab'; import { useModal } from '/@/components/Modal'; - import { SaveEntity, getEntityPropertieList } from '/@/api/tigerapi/system'; + import { SaveEntity, getEntity, getEntityPropertieList } from '/@/api/tigerapi/system'; import { EntityPropertie, SYS_LOW_CODE } from '/@/api/tigerapi/model/systemModel'; import { isNullOrEmpty } from '/@/utils/is'; import { useUserStore } from '/@/store/modules/user'; @@ -290,6 +293,9 @@ schemas: mainSchemas, showActionButtonGroup: false, }); + const SearchEntName = ref(''); + const MainEntName = ref(''); + const CrudEntName = ref(''); const objInputs = ref({} as { [key: string]: any }); const mainInputs = ref({} as { [key: string]: any }); const crudInputs = ref({} as { [key: string]: any }); @@ -304,6 +310,7 @@ const crudSwSlots = ref([] as string[]); const mainsSwSlots = ref([] as string[]); const mainwSwSlots = ref([] as string[]); + const mainIaSlots = ref([] as string[]); const crudrSwSlots = ref([] as string[]); const searchSelectVals = ref({} as { [key: string]: any }); const mainSelectVals = ref({} as { [key: string]: any }); @@ -334,17 +341,73 @@ label: 'Checkbox', }, { - value: 'TimePicker', + value: 'RangePicker', label: '鏃堕棿閫夋嫨鍣�', }, { value: 'Switch', label: '寮�鍏�', }, + { + value: 'PoPSelect', + label: '寮瑰嚭閫夋嫨妗�', + }, ]); - onMounted(async () => { - - + onMounted(() => { + if (unref(objParams.value.Update) == '1') { + getEntity({ + sqlcmd: "ID ='" + objParams.value.ID + "'", + entityName: 'SYS_LOW_CODE', + }).then((data) => { + var searchForms = JSON.parse(data.Data.Items[0].SEARCH_FORM_JSON); + SearchEntName.value = data.Data.Items[0].SEARCH_ASSY_NAME; + setFieldsValue({ ASSEMBLY_NAME: data.Data.Items[0].SEARCH_ASSY_NAME }); + for (const i in searchForms) { + if (searchForms[i]['field'] != '0') { + condAdd(); + setFieldsValue({ + [`${SearchEntName.value}${Number(i) + 1}a`]: searchForms[i]['field'], + [`InputNumber${Number(i) + 1}`]: searchForms[i]['colProps'].span, + [`Switch${Number(i) + 1}`]: searchForms[i]['ifShow'], + }); + objInputs.value[`${SearchEntName.value}${Number(i) + 1}a`] = searchForms[i]['label']; + searchSelectVals.value[`${SearchEntName.value}${Number(i) + 1}a`] = searchForms[i][ + 'comp' + ] + ? searchForms[i]['comp'] + : searchForms[i]['component']; + } + } + var crudForms = JSON.parse(data.Data.Items[0].FORM_JSON); + CrudEntName.value = data.Data.Items[0].CRUD_ASSY_NAME; + setFieldsValueCrud({ crudAssemblyName: data.Data.Items[0].CRUD_ASSY_NAME }); + for (const i in crudForms) { + crudCondAdd(); + setFieldsValueCrud({ + [`${CrudEntName.value}${Number(i) + 1}a`]: crudForms[i]['field'], + [`InputNumber${Number(i) + 1}`]: crudForms[i]['colProps'].span, + [`Switch${Number(i) + 1}`]: crudForms[i]['show'], + [`rSwitch${Number(i) + 1}`]: crudForms[i]['required'], + }); + crudInputs.value[`${CrudEntName.value}${Number(i) + 1}a`] = crudForms[i]['label']; + crudSelectVals.value[`${CrudEntName.value}${Number(i) + 1}a`] = crudForms[i]['component']; + } + var objs = JSON.parse(data.Data.Items[0].BASE_FORM_JSON); + MainEntName.value = data.Data.Items[0].ASSEMBLY_NAME; + setFieldsValueMain({ MainAssemblyName: MainEntName.value }); + for (const i in objs) { + mainCondAdd(); + setFieldsValueMain({ + [`${MainEntName.value}${Number(i) + 1}a`]: objs[i]['dataIndex'], + [`Switch${Number(i) + 1}`]: objs[i]['ifShow'], + [`sSwitch${Number(i) + 1}`]: objs[i]['sorter'], + [`wSwitch${Number(i) + 1}`]: objs[i]['resizable'], + [`InputTextArea${Number(i) + 1}`]: objs[i]['customRender'], + }); + mainInputs.value[`${MainEntName.value}${Number(i) + 1}a`] = objs[i]['title']; + } + }); + } }); async function submitAll() { @@ -354,6 +417,7 @@ crudvalidate(), validateMainForm(), ]); + /* 鏌ヨ鏉′欢Json */ const Keys = Object.getOwnPropertyNames(values); var searchjsons = []; @@ -377,6 +441,20 @@ _n++; } if (!isNullOrEmpty(_json) && _n == 6) { + //濡傛灉鏄脊鍑洪�夋嫨妗� + if (_json['component'] == 'PoPSelect') { + _json['component'] = 'Input'; + _json['comp'] = 'PoPSelect'; + searchjsons.push(_json); + _json = {}; + _json['field'] = '0'; + _json['label'] = '1'; + _json['defaultValue'] = ''; + _json['component'] = 'Input'; + _json['colProps'] = { span: 4 }; + _json['ifShow'] = true; + _json['colSlot'] = 'add'; + } searchjsons.push(_json); _json = {}; _n = 0; @@ -413,7 +491,11 @@ : (mainvalues[mKeys[k]] as boolean); i++; } - if (!isNullOrEmpty(mjson) && i == 5) { + if (mKeys[k].toString().startsWith('InputTextArea')) { + mjson['customRender'] = isNullOrEmpty(mainvalues[mKeys[k]]) ? '' : mainvalues[mKeys[k]]; + i++; + } + if (!isNullOrEmpty(mjson) && i == 6) { mjsons.push(mjson); i = 0; mjson = {}; @@ -428,19 +510,19 @@ for (const k in cKeys) { console.log(`${k}:${cKeys[k]}`); if (cKeys[k].toString().startsWith(getFieldsValueCrud().crudAssemblyName)) { - cjson['field'] = isNullOrEmpty(crudvalues[mKeys[k]]) ? '' : crudvalues[cKeys[k]]; - cjson['label'] = isNullOrEmpty(crudvalues[mKeys[k]]) ? '' : crudInputs.value[cKeys[k]]; + cjson['field'] = isNullOrEmpty(crudvalues[cKeys[k]]) ? '' : crudvalues[cKeys[k]]; + cjson['label'] = isNullOrEmpty(crudvalues[cKeys[k]]) ? '' : crudInputs.value[cKeys[k]]; cjson['component'] = crudSelectVals.value[cKeys[k]]; c = c + 3; } if (cKeys[k].toString().startsWith('Switch')) { - cjson['show'] = isNullOrEmpty(crudvalues[mKeys[k]]) + cjson['show'] = isNullOrEmpty(crudvalues[cKeys[k]]) ? false : (crudvalues[cKeys[k]] as boolean); c++; } if (cKeys[k].toString().startsWith('rSwitch')) { - cjson['required'] = isNullOrEmpty(crudvalues[mKeys[k]]) + cjson['required'] = isNullOrEmpty(crudvalues[cKeys[k]]) ? false : (crudvalues[cKeys[k]] as boolean); c++; @@ -457,6 +539,7 @@ } console.log(JSON.stringify(cjsons)); var entity: SYS_LOW_CODE = { + ID: objParams.value.ID, CREATE_USER: useUserStore().getUserInfo.userId as string, UPDATE_USER: useUserStore().getUserInfo.userId as string, SEARCH_FORM_JSON: JSON.stringify(searchjsons), @@ -486,7 +569,7 @@ } function handleEdit(record: Recordable) {} - //鐐瑰嚮鎵撳紑鐗╂枡鍒楄〃妗� + function handleSelecNew() { openNewModal(true, { data: 'content', @@ -517,6 +600,7 @@ Namespace: 'Tiger.Model', }); mainProperties.value = data.items; + MainEntName.value = d.values.values; } async function handleNewSuccess(d, u) { @@ -528,12 +612,19 @@ Namespace: 'Tiger.Model', }); searchProperties.value = data.items; + SearchEntName.value = d.values.values; } - function handleCrudSuccess(d, u) { + async function handleCrudSuccess(d, u) { setFieldsValueCrud({ crudAssemblyName: d.values.values, }); + var data = await getEntityPropertieList({ + StartWith: d.values.values, + Namespace: 'Tiger.Model', + }); + crudProperties.value = data.items; + CrudEntName.value = d.values.values; } function change(value, option, field) { console.log(value, option, field); @@ -557,10 +648,10 @@ appendSchemaByField( [ { - field: `${getFieldsValue().ASSEMBLY_NAME}${n.value}a`, + field: `${SearchEntName.value}${n.value}a`, component: 'InputGroup', label: '瀛楁' + n.value, - // required: true, + //required: true, slot: 'fac' + n.value, colProps: { span: 14 }, }, @@ -589,15 +680,15 @@ ); searchSlots.value.push('fac' + n.value); swSlots.value.push(`sw${n.value}`); - objInputs.value[`${getFieldsValue().ASSEMBLY_NAME}${n.value}a`] = ''; - searchSelectVals.value[`${getFieldsValue().ASSEMBLY_NAME}${n.value}a`] = ''; + objInputs.value[`${SearchEntName.value}${n.value}a`] = ''; + searchSelectVals.value[`${SearchEntName.value}${n.value}a`] = ''; console.log(searchSlots.value); n.value++; } function del(field) { removeSchemaByField([ - `${getFieldsValue().ASSEMBLY_NAME}${field}a`, + `${SearchEntName.value}${field}a`, `Switch${field}`, `InputNumber${field}`, `${field}`, @@ -614,7 +705,7 @@ appendSchemaByFieldMain( [ { - field: `${getFieldsValueMain().MainAssemblyName}${m.value}a`, + field: `${MainEntName.value}${m.value}a`, component: 'InputGroup', label: '瀛楁' + m.value, // required: true, @@ -646,7 +737,12 @@ field: `InputTextArea${m.value}`, component: 'InputTextArea', label: '鑷畾涔夋覆鏌�', + slot: `mainwIa${m.value}`, colProps: { span: 21 }, + componentProps: { + placeholder: '璇风紪杈戞覆鏌撲唬鐮�', + rows: 4, + }, }, { field: `${m.value}`, @@ -662,15 +758,16 @@ mainSwSlots.value.push(`mainSw${m.value}`); mainsSwSlots.value.push(`mainsSw${m.value}`); mainwSwSlots.value.push(`mainwSw${m.value}`); - mainInputs.value[`${getFieldsValueMain().MainAssemblyName}${m.value}a`] = ''; - mainSelectVals.value[`${getFieldsValueMain().MainAssemblyName}${m.value}a`] = ''; + mainIaSlots.value.push(`mainwIa${m.value}`); + mainInputs.value[`${MainEntName.value}${m.value}a`] = ''; + mainSelectVals.value[`${MainEntName.value}${m.value}a`] = ''; console.log(mainSlots.value); m.value++; } function mainDel(field) { removeSchemaByFieldMain([ - `${getFieldsValueMain().MainAssemblyName}${field}a`, + `${MainEntName.value}${field}a`, `Switch${field}`, `sSwitch${field}`, `wSwitch${field}`, @@ -680,6 +777,7 @@ mainSwSlots.value.splice(mainSwSlots.value.indexOf(`mainSw${field}`), 1); mainsSwSlots.value.splice(mainsSwSlots.value.indexOf(`mainsSw${field}`), 1); mainwSwSlots.value.splice(mainwSwSlots.value.indexOf(`mainwSw${field}`), 1); + mainIaSlots.value.splice(mainIaSlots.value.indexOf(`mainwIa${field}`), 1); mainSlots.value.splice(mainSlots.value.indexOf(`mainfac${field}`), 1); if (mainSlots.value.length == 0) { m.value = 1; @@ -691,7 +789,7 @@ appendSchemaByFieldCrud( [ { - field: `${getFieldsValueCrud().crudAssemblyName}${j.value}a`, + field: `${CrudEntName.value}${j.value}a`, component: 'InputGroup', label: '瀛楁' + j.value, // required: true, @@ -731,15 +829,15 @@ crudSlots.value.push('crudfac' + j.value); crudSwSlots.value.push(`crudSw${j.value}`); crudrSwSlots.value.push(`crudrSw${j.value}`); - crudInputs.value[`${getFieldsValueCrud().crudAssemblyName}${j.value}a`] = ''; - crudSelectVals.value[`${getFieldsValueCrud().crudAssemblyName}${j.value}a`] = ''; + crudInputs.value[`${CrudEntName.value}${j.value}a`] = ''; + crudSelectVals.value[`${CrudEntName.value}${j.value}a`] = ''; console.log(crudSlots.value); j.value++; } function crudDel(field) { removeSchemaByFieldCrud([ - `${getFieldsValueCrud().crudAssemblyName}${field}a`, + `${CrudEntName.value}${field}a`, `Switch${field}`, `rSwitch${field}`, `InputNumber${field}`, @@ -761,5 +859,6 @@ <style lang="less" scoped> .high-form { padding-bottom: 48px; - } -</style>: { values: any[]; }: any: { values: any[]; }: any: { values: any[]; }: any: any: any: any: any: any: any + }</style +>: { values: any[]; }: any: { values: any[]; }: any: { values: any[]; }: any: any: any: any: any: +any: any -- Gitblit v1.9.3