From e92383f760f42050f55aa032c649814deb3b7752 Mon Sep 17 00:00:00 2001 From: schangxiang@126.com <schangxiang@126.com> Date: 周二, 20 5月 2025 18:17:26 +0800 Subject: [PATCH] 组件修改 --- HIAWms/hiawms_web/src/components/DyFormForHighQuery/DyFormForHighQuery.module.scss | 38 ++++--- HIAWms/hiawms_web/src/utils/myformUtils.ts | 102 ++++++++++++++++++++ HIAWms/hiawms_web/src/components/BaseQueryDrawer/BaseQueryDrawer.tsx | 4 HIAWms/hiawms_web/src/utils/myHighQueryUtils.ts | 113 ++++++++++++++++++++++ 4 files changed, 238 insertions(+), 19 deletions(-) diff --git a/HIAWms/hiawms_web/src/components/BaseQueryDrawer/BaseQueryDrawer.tsx b/HIAWms/hiawms_web/src/components/BaseQueryDrawer/BaseQueryDrawer.tsx index 9d144bb..9c82177 100644 --- a/HIAWms/hiawms_web/src/components/BaseQueryDrawer/BaseQueryDrawer.tsx +++ b/HIAWms/hiawms_web/src/components/BaseQueryDrawer/BaseQueryDrawer.tsx @@ -6,7 +6,7 @@ [key: string]: any }>({ // @ts-ignore - name: 'BaseDrawer', + name: 'BaseQueryDrawer', props: { // 閬僵鏄惁鍙偣鍑� clickable: { @@ -49,6 +49,8 @@ > <el-drawer // modal-class={props.clickable ? styles.modal : ''} + //灏嗘娊灞夊己鍒舵寕杞藉埌 body 鍏冪礌涓婏紝纭繚鏍峰紡闅旂鍜屾粴鍔ㄨ涓烘甯革紝涓嶅彈宓屽椤甸潰鐨勫奖鍝� + append-to-body="true" class={{ [styles.informationDrawer]: true, // [styles.informationDrawerPosition]: props.clickable, diff --git a/HIAWms/hiawms_web/src/components/DyFormForHighQuery/DyFormForHighQuery.module.scss b/HIAWms/hiawms_web/src/components/DyFormForHighQuery/DyFormForHighQuery.module.scss index 0fff059..0281c01 100644 --- a/HIAWms/hiawms_web/src/components/DyFormForHighQuery/DyFormForHighQuery.module.scss +++ b/HIAWms/hiawms_web/src/components/DyFormForHighQuery/DyFormForHighQuery.module.scss @@ -1,15 +1,4 @@ .formStyle { - .formItem { - // 绉婚櫎鍥哄畾瀹藉害闄愬埗 - width: auto !important; - margin-right: 0 !important; - } - - .formControl { - flex: 1; // 璁╂帶浠跺崰鎹墿浣欑┖闂� - min-width: 0; // 鍏佽鎺т欢鏀剁缉 - } - .formItemLabel { display: inline-flex; justify-content: flex-end; @@ -25,17 +14,30 @@ margin-left: 10px; } } - :global(.cs-select) { width: 100%; } - - // 绉婚櫎鍥哄畾瀹藉害璁剧疆 :global(.cs-form--inline .cs-form-item) { - width: auto !important; + width: 46%; } - :global(.cs-form--inline .cs-form-item:nth-last-of-type(2n)) { - margin-right: 0 !important; + margin-right: 0; } -} \ No newline at end of file + :global(.cs-date-editor) { + width: 100%; + } +} +.optionLabel { + display: flex; + justify-content: space-between; + align-items: center; +} +.formitemPropsLabel { + display: flex; + justify-content: flex-start; + align-items: center; +} + +.itemDistance { + margin-bottom: 20px !important; +} diff --git a/HIAWms/hiawms_web/src/utils/myHighQueryUtils.ts b/HIAWms/hiawms_web/src/utils/myHighQueryUtils.ts new file mode 100644 index 0000000..52e90cc --- /dev/null +++ b/HIAWms/hiawms_web/src/utils/myHighQueryUtils.ts @@ -0,0 +1,113 @@ + +//楂樼骇鏌ヨ宸ュ叿鏂囦欢 + + /** + * 淇濆瓨褰撳墠楂樼骇鏌ヨ鏁版嵁锛屽悎骞惰繃婊ゅ悗鐨勬暟鎹苟鏇存柊鍝嶅簲寮忔煡璇㈠璞� + * @param {Object} filteredData - 杩囨护鍚庣殑鏌ヨ鏁版嵁瀵硅薄锛屽寘鍚敤鎴疯緭鍏ョ殑鏌ヨ鏉′欢 + * @param {Ref<Object>} _curHighQueryData - Vue鍝嶅簲寮忓璞★紝瀛樺偍褰撳墠瀹屾暣鐨勬煡璇㈡潯浠� + * @param {Ref<Object>} queryForm - Vue鍝嶅簲寮忓璞★紝瀛樺偍琛ㄥ崟杈撳叆鐨勬煡璇㈡潯浠� + * @param {Ref<string>} _searchFormInputAttrs - Vue鍝嶅簲寮忓瓧绗︿覆锛屽瓨鍌ㄦ煡璇㈣〃鍗曠殑杈撳叆灞炴�ч厤缃� + * @returns {void} + * @example + * commonSaveCurHighQueryData( + * { name: 'John', age: 30 }, + * ref({}), + * ref({ searchVal: '', searchVal_FilterMode: 'contains' }), + * ref('name,age,email') + * ); + */ +export const commonSaveCurHighQueryData = (filteredData, _curHighQueryData, queryForm, _searchFormInputAttrs) => { + _curHighQueryData.value = { ..._curHighQueryData.value, ...filteredData }; + setValueForCurHighQueryData(_curHighQueryData, queryForm, _searchFormInputAttrs); +} + +/** + * 涓哄搷搴斿紡鏌ヨ鏁版嵁瀵硅薄璁剧疆鍩虹鏌ヨ鍊� + * @param {Ref<Object>} _curHighQueryData - Vue鍝嶅簲寮忓璞★紝瀛樺偍褰撳墠瀹屾暣鐨勬煡璇㈡潯浠� + * @param {Ref<Object>} queryForm - Vue鍝嶅簲寮忓璞★紝瀛樺偍琛ㄥ崟杈撳叆鐨勬煡璇㈡潯浠� + * @param {Ref<string>} _searchFormInputAttrs - Vue鍝嶅簲寮忓瓧绗︿覆锛屽瓨鍌ㄦ煡璇㈣〃鍗曠殑杈撳叆灞炴�ч厤缃� + * @returns {void} + * @example + * setValueForCurHighQueryData( + * ref({}), + * ref({ searchVal: 'test', searchVal_FilterMode: 'equals' }), + * ref('name,age') + * ); + * // _curHighQueryData.value 灏嗗寘鍚� searchVal, searchVal_FilterMode 鍜� str_searchFormInputAttrs + */ +export const setValueForCurHighQueryData = (_curHighQueryData, queryForm, _searchFormInputAttrs) => { + _curHighQueryData.value.searchVal = queryForm.value.searchVal; + _curHighQueryData.value.searchVal_FilterMode = queryForm.value.searchVal_FilterMode; + _curHighQueryData.value.str_searchFormInputAttrs = _searchFormInputAttrs.value; +} + +/** + * 鍒濆鍖栨煡璇㈣〃鍗曪紝璁剧疆榛樿鍊� + * @param {Ref<Object>} queryForm - Vue鍝嶅簲寮忓璞★紝瀛樺偍琛ㄥ崟杈撳叆鐨勬煡璇㈡潯浠� + * @param {Ref<string>} _searchFormInputAttrs - Vue鍝嶅簲寮忓瓧绗︿覆锛屽瓨鍌ㄦ煡璇㈣〃鍗曠殑杈撳叆灞炴�ч厤缃� + * @param {Array<Object>} arr - 杩囨护妯″紡閫夐」鏁扮粍锛屾瘡涓�夐」鍖呭惈value鍜宭abel灞炴�� + * @returns {void} + * @example + * initQueryForm( + * ref({}), + * ref('name,age'), + * [{ value: 'contains', label: '鍖呭惈' }, { value: 'equals', label: '绛変簬' }] + * ); + * // queryForm.value 灏嗚鍒濆鍖栦负 { searchVal: '', searchVal_FilterMode: 'contains', str_searchFormInputAttrs: 'name,age' } + */ +export const initQueryForm = (queryForm, _searchFormInputAttrs, arr) => { + queryForm.value.searchVal = ''; + queryForm.value.searchVal_FilterMode = arr[0]?.value || ''; + queryForm.value.str_searchFormInputAttrs = _searchFormInputAttrs.value; +} + +/** + * 鑾峰彇楂樼骇鏌ヨ寮瑰嚭妗嗙殑鏌ヨ鍊硷紝杩囨护鏃犳晥鏁版嵁骞剁粍鍚堝畬鏁存煡璇㈡潯浠� + * @param {Object} extraParams - 棰濆鐨勬煡璇㈠弬鏁板璞★紝鍙兘鍖呭惈鐗规畩鏌ヨ鏉′欢 + * @param {Ref<Object>} queryForm - Vue鍝嶅簲寮忓璞★紝瀛樺偍琛ㄥ崟杈撳叆鐨勬煡璇㈡潯浠� + * @param {Ref<string>} _searchFormInputAttrs - Vue鍝嶅簲寮忓瓧绗︿覆锛屽瓨鍌ㄦ煡璇㈣〃鍗曠殑杈撳叆灞炴�ч厤缃� + * @returns {Object} 缁勫悎鍚庣殑鏈夋晥鏌ヨ鏁版嵁瀵硅薄 + * @example + * const queryData = commonGetHighQueryForm( + * { status: 'active', category: 'books' }, + * ref({ searchVal: 'javascript', searchVal_FilterMode: 'contains' }), + * ref('title,author') + * ); + * // 杩斿洖 { status: 'active', category: 'books', searchVal: 'javascript', searchVal_FilterMode: 'contains', str_searchFormInputAttrs: 'title,author' } + */ +export const commonGetHighQueryForm = (extraParams, queryForm, _searchFormInputAttrs) => { + // 杩囨护鎺� undefined 鐨勫�� + let filteredData = Object.assign( + {}, + ...Object.entries(extraParams).map(([key, value]) => + value !== undefined ? { [key]: value } : {} + ) + ); + // 缁勫悎妯$硦鏌ヨ + filteredData.searchVal = queryForm.value.searchVal; + filteredData.searchVal_FilterMode = queryForm.value.searchVal_FilterMode; + filteredData.str_searchFormInputAttrs = _searchFormInputAttrs.value; + return filteredData; +} + +/** + * 鏂扮増鐨勬煡璇㈠脊鍑烘鍏抽棴鏂规硶锛岃幏鍙栬繃婊ゆ暟鎹苟淇濆瓨鍒板搷搴斿紡瀵硅薄 + * @param {Object} extraParams - 棰濆鐨勬煡璇㈠弬鏁板璞★紝鍙兘鍖呭惈鐗规畩鏌ヨ鏉′欢 + * @param {Ref<Object>} queryForm - Vue鍝嶅簲寮忓璞★紝瀛樺偍琛ㄥ崟杈撳叆鐨勬煡璇㈡潯浠� + * @param {Ref<string>} _searchFormInputAttrs - Vue鍝嶅簲寮忓瓧绗︿覆锛屽瓨鍌ㄦ煡璇㈣〃鍗曠殑杈撳叆灞炴�ч厤缃� + * @param {Ref<Object>} _curHighQueryData - Vue鍝嶅簲寮忓璞★紝瀛樺偍褰撳墠瀹屾暣鐨勬煡璇㈡潯浠� + * @returns {Object} 缁勫悎鍚庣殑鏈夋晥鏌ヨ鏁版嵁瀵硅薄 + * @example + * const queryData = GetFilteredData( + * { type: 'article' }, + * ref({ searchVal: 'news', searchVal_FilterMode: 'startsWith' }), + * ref('title,content'), + * ref({}) + * ); + * // 杩斿洖鏈夋晥鏌ヨ鏁版嵁骞舵洿鏂� _curHighQueryData + */ +export const GetFilteredData = (extraParams, queryForm, _searchFormInputAttrs, _curHighQueryData) => { + let filteredData = commonGetHighQueryForm(extraParams, queryForm, _searchFormInputAttrs); + commonSaveCurHighQueryData(filteredData, _curHighQueryData, queryForm, _searchFormInputAttrs); + return filteredData; +} \ No newline at end of file diff --git a/HIAWms/hiawms_web/src/utils/myformUtils.ts b/HIAWms/hiawms_web/src/utils/myformUtils.ts new file mode 100644 index 0000000..4dbd92d --- /dev/null +++ b/HIAWms/hiawms_web/src/utils/myformUtils.ts @@ -0,0 +1,102 @@ + +//琛ㄥ崟宸ュ叿鏂囦欢 +/** + * 閫氱敤楂樼骇鏌ヨ琛ㄥ崟鏁版嵁鏀堕泦鍑芥暟 + * @param {Array} formItems - 琛ㄥ崟閰嶇疆椤规暟缁� + * @param {Object} formData - 琛ㄥ崟鏁版嵁瀵硅薄 + * @returns {Object} - 鏀堕泦鐨勮〃鍗曟暟鎹� + */ +export const collectFormDataForHighQuery = (formItems, formData) => { + const data = {}; + + // 閬嶅巻琛ㄥ崟閰嶇疆鏀堕泦鏁版嵁 + formItems.forEach(item => { + // 鏀堕泦鍩虹瀛楁 + data[item.prop] = formData.value[item.prop] || ''; + + // 鏀堕泦杩囨护妯″紡瀛楁 + if (item.highSelectAttrs && item.highSelectAttrs.prop) { + const filterModeProp = item.highSelectAttrs.prop; + data[filterModeProp] = formData.value[filterModeProp] || ''; + } + }); + + return data; + } + + /** + * 閲嶇疆楂樼骇鏌ヨ鐨勮繃婊ゆā寮� + * @param formItems - 琛ㄥ崟閰嶇疆椤规暟缁� + * @param formData - 琛ㄥ崟鏁版嵁瀵硅薄 + */ + export const onResetForHighSelect = (formItems, formData) => { + // 閬嶅巻鎵�鏈夎〃鍗曞瓧娈� + formItems.forEach(item => { + // 妫�鏌ュ瓧娈垫槸鍚︽湁楂樼骇鏌ヨ鐨勮繃婊ゆā寮忛厤缃� + if (item.highSelectAttrs && item.highSelectAttrs.prop) { + const filterModeProp = item.highSelectAttrs.prop; + const options = item.highSelectAttrs.options || []; + + // 濡傛灉瀛樺湪閫夐」锛屽垯璁剧疆涓虹涓�涓�夐」鐨勫�� + if (options.length > 0) { + // 鍋囪閫夐」鏍煎紡涓� { value, label } 鎴栫被浼肩粨鏋� + const firstValue = options[0].value !== undefined ? options[0].value : options[0]; + formData.value[filterModeProp] = firstValue; + } + } + }); +} + +/** + * 閲嶇疆楂樼骇鏌ヨ + * @param formItems - 琛ㄥ崟閰嶇疆椤规暟缁� + * @param formData - 琛ㄥ崟鏁版嵁瀵硅薄 + */ +export const onResetForHighQuery = (formItems, formData) => { + // 1. 娓呯┖鎵�鏈夊熀纭�瀛楁锛堜笉鍖呭惈杩囨护妯″紡瀛楁锛� + const baseFields = formItems.reduce((acc, item) => { + acc[item.prop] = ''; + return acc; + }, {}); + + // 2. 搴旂敤鍩虹瀛楁鍒濆鍊� + formData.value = { ...baseFields }; +} + + +/** + * 浠庤〃鍗曟暟鎹腑鎻愬彇鏈夋晥灞炴�э紙鎺掗櫎鏃犳晥瀛楁锛�,鎻愪氦淇濆瓨琛ㄥ崟鏁版嵁鏃剁敤 + * @param formData 琛ㄥ崟鏁版嵁瀵硅薄 + * @param excludeFields 闇�瑕佹帓闄ょ殑瀛楁鍒楄〃锛堥粯璁や负 ['id']锛� + * @returns 澶勭悊鍚庣殑鏈夋晥鏁版嵁瀵硅薄 + */ +export const extractFormDataForOnConfirm = (formData) => { + //鍔ㄦ�佽幏鍙� formData 鐨勬墍鏈夊睘鎬у�硷紙鎺掗櫎鏃犳晥灞炴�э紝濡� id锛� + const data = Object.entries(formData.value).reduce((acc, [key, value]) => { + // 杩囨护鎺変笉闇�瑕佹彁浜ょ殑灞炴�э紙濡� id锛屽彲鏍规嵁瀹為檯闇�姹傝皟鏁达級 + if (key !== 'id') { + acc[key] = value + } + return acc + }, {} as Record<string, any>) + return data; + }; + + /** + * 浠庡搷搴旀暟鎹腑鎻愬彇鏈夋晥瀛楁骞惰祴鍊肩粰琛ㄥ崟鏁版嵁,鎵撳紑琛ㄥ崟鏁版嵁鏃剁敤 + * @param res 鍝嶅簲鏁版嵁 + * @param formData 琛ㄥ崟鏁版嵁寮曠敤 + * @param options 閰嶇疆閫夐」 + * @returns 澶勭悊鍚庣殑琛ㄥ崟鏁版嵁 + */ +export function extractAndAssignFormData(res,formData) { + // 鎻愬彇鏈夋晥瀛楁锛堟帓闄や笉闇�瑕佺殑灞炴�э紝濡備复鏃跺瓧娈点�侀潪琛ㄥ崟瀛楁锛� + const { id, ...validFormData } = res; // 淇濈暀 id 鍙牴鎹渶姹傝皟鏁� + + // 鐩存帴璧嬪�硷紙鑷姩杩囨护鏃犳晥灞炴�э級 + formData.value = { + ...validFormData, // 鑷姩缁ф壙鎵�鏈夋湁鏁堝瓧娈� + // 濡傞渶棰濆澶勭悊鐗瑰畾瀛楁锛堝鏃ユ湡鏍煎紡鍖栵級锛屽彲鍦ㄦ琛ュ厖 + // plannedStartTime: formatDate(res.plannedStartTime), + }; + } \ No newline at end of file -- Gitblit v1.9.3