From 21c5f168f123aeb9ce75285c4f9c174010f66a5b Mon Sep 17 00:00:00 2001 From: sen <90978650+PracticeThink@users.noreply.github.com> Date: Thu, 19 Jun 2025 10:52:58 +0800 Subject: [PATCH 01/30] =?UTF-8?q?=E6=B0=94=E6=B3=A1=E5=A6=82=E6=9E=9C?= =?UTF-8?q?=E6=98=AF=E5=B7=B2=E5=BC=B9=E5=87=BA=E7=8A=B6=E6=80=81=EF=BC=8C?= =?UTF-8?q?=E5=88=99=E4=B8=8D=E9=87=8D=E5=A4=8D=E6=89=A7=E8=A1=8C=E5=90=8E?= =?UTF-8?q?=E7=BB=AD=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../processInstance/detail/ProcessInstanceOperationButton.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue b/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue index 517c204b7..7a5559386 100644 --- a/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue +++ b/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue @@ -685,6 +685,7 @@ watch( /** 弹出气泡卡 */ const openPopover = async (type: string) => { + if (popOverVisible.value[type] === true) return if (type === 'approve') { // 校验流程表单 const valid = await validateNormalForm() From b021a1784bf64234a83380ca26d717fe326a21c2 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Thu, 26 Jun 2025 11:02:54 +0800 Subject: [PATCH 02/30] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E7=94=9F=E6=88=90=E5=99=A8=E6=A0=91=E5=BD=A2=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=99=A8=E4=B8=8D=E6=B8=B2=E6=9F=93=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/formCreate/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/formCreate/index.ts b/src/plugins/formCreate/index.ts index 07d2c51fe..4fb7ca160 100644 --- a/src/plugins/formCreate/index.ts +++ b/src/plugins/formCreate/index.ts @@ -54,7 +54,7 @@ import { ElMessage, ElCollapse, ElCollapseItem, - ElCard, + ElCard, ElTreeSelect // ElFormItem, // ElOption } from 'element-plus' @@ -97,6 +97,7 @@ const components = [ ElTableColumn, ElTabPane, ElTabs, + ElTreeSelect, ElDropdown, ElDropdownMenu, ElDropdownItem, From 8f88c4a09bbd2eac0b2f9bde65ba66c3c81d801e Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 6 Jul 2025 16:18:58 +0800 Subject: [PATCH 03/30] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=89=80?= =?UTF-8?q?=E6=9C=89=E5=87=BD=E6=95=B0=E7=B1=BB=E5=9E=8B=20-=20=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E8=AE=BE=E8=AE=A1=E5=99=A8=E4=BF=9D=E5=AD=98=E5=90=8E?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E5=8F=98=E6=88=90=E5=AD=97=E7=AC=A6=E4=B8=B2?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/formCreate.ts | 115 +++++++++++++++------------------------- 1 file changed, 44 insertions(+), 71 deletions(-) diff --git a/src/utils/formCreate.ts b/src/utils/formCreate.ts index 06fededec..5a0a49a3c 100644 --- a/src/utils/formCreate.ts +++ b/src/utils/formCreate.ts @@ -49,14 +49,17 @@ export const setConfAndFields2 = ( detailPreview = detailPreview.value } - // 解析配置 + // 修复所有函数类型(解决设计器保存后函数变成字符串的问题)。例如说: + // https://t.zsxq.com/rADff + // https://t.zsxq.com/ZfbGt + // https://t.zsxq.com/mHOoj + // https://t.zsxq.com/BSylB const option = JSON.parse(conf) const rule = decodeFields(fields) - // 🔧 修复所有函数类型 - 解决设计器保存后函数变成字符串的问题 const fixFunctions = (obj: any) => { if (obj && typeof obj === 'object') { - Object.keys(obj).forEach(key => { + Object.keys(obj).forEach((key) => { // 检查是否是函数相关的属性 if (isFunctionProperty(key)) { // 如果不是函数类型,重新构建为函数 @@ -70,135 +73,107 @@ export const setConfAndFields2 = ( }) } } - // 判断是否是函数属性 const isFunctionProperty = (key: string): boolean => { const functionKeys = [ - 'beforeFetch', // 请求前处理 - 'afterFetch', // 请求后处理 - 'onSubmit', // 表单提交 - 'onReset', // 表单重置 - 'onChange', // 值变化 - 'onInput', // 输入事件 - 'onClick', // 点击事件 - 'onFocus', // 获取焦点 - 'onBlur', // 失去焦点 - 'onMounted', // 组件挂载 - 'onCreated', // 组件创建 - 'onReload', // 重新加载 - 'remoteMethod', // 远程搜索方法 - 'parseFunc', // 解析函数 - 'validator', // 验证器 - 'asyncValidator', // 异步验证器 - 'formatter', // 格式化函数 - 'parser', // 解析函数 - 'beforeUpload', // 上传前处理 - 'onSuccess', // 成功回调 - 'onError', // 错误回调 - 'onProgress', // 进度回调 - 'onPreview', // 预览回调 - 'onRemove', // 移除回调 - 'onExceed', // 超出限制回调 - 'filterMethod', // 过滤方法 - 'sortMethod', // 排序方法 - 'loadData', // 加载数据 - 'renderContent', // 渲染内容 - 'render' // 渲染函数 + 'beforeFetch', // 请求前处理 + 'afterFetch', // 请求后处理 + 'onSubmit', // 表单提交 + 'onReset', // 表单重置 + 'onChange', // 值变化 + 'onInput', // 输入事件 + 'onClick', // 点击事件 + 'onFocus', // 获取焦点 + 'onBlur', // 失去焦点 + 'onMounted', // 组件挂载 + 'onCreated', // 组件创建 + 'onReload', // 重新加载 + 'remoteMethod', // 远程搜索方法 + 'parseFunc', // 解析函数 + 'validator', // 验证器 + 'asyncValidator', // 异步验证器 + 'formatter', // 格式化函数 + 'parser', // 解析函数 + 'beforeUpload', // 上传前处理 + 'onSuccess', // 成功回调 + 'onError', // 错误回调 + 'onProgress', // 进度回调 + 'onPreview', // 预览回调 + 'onRemove', // 移除回调 + 'onExceed', // 超出限制回调 + 'filterMethod', // 过滤方法 + 'sortMethod', // 排序方法 + 'loadData', // 加载数据 + 'renderContent', // 渲染内容 + 'render' // 渲染函数 ] - // 检查是否以函数相关前缀开头 const functionPrefixes = ['on', 'before', 'after', 'handle'] - - return functionKeys.includes(key) || - functionPrefixes.some(prefix => key.startsWith(prefix)) + return functionKeys.includes(key) || functionPrefixes.some((prefix) => key.startsWith(prefix)) } - // 根据函数名创建默认函数 const createDefaultFunction = (key: string): Function => { switch (key) { case 'beforeFetch': return (config: any) => { - console.log('beforeFetch被调用:', config) - // 添加认证头 const token = localStorage.getItem('token') if (token) { config.headers = { ...config.headers, - 'Authorization': 'Bearer ' + token + Authorization: 'Bearer ' + token } } - // 添加通用请求头 config.headers = { ...config.headers, 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' } - // 添加时间戳防止缓存 config.params = { ...config.params, _t: Date.now() } - return config } - case 'afterFetch': return (data: any) => { - console.log('afterFetch被调用:', data) return data } - case 'onSubmit': - return (formData: any) => { - console.log('onSubmit被调用:', formData) + return (_formData: any) => { return true } - case 'onReset': return () => { - console.log('onReset被调用') return true } - case 'onChange': - return (value: any, oldValue: any) => { - console.log('onChange被调用:', { value, oldValue }) - } - + return (_value: any, _oldValue: any) => {} case 'remoteMethod': return (query: string) => { console.log('remoteMethod被调用:', query) } - case 'parseFunc': return (data: any) => { - console.log('parseFunc被调用:', data) // 默认解析逻辑:如果是数组直接返回,否则尝试获取list属性 if (Array.isArray(data)) { return data } return data?.list || data?.data || [] } - case 'validator': - return (rule: any, value: any, callback: Function) => { - console.log('validator被调用:', { rule, value }) + return (_rule: any, _value: any, callback: Function) => { callback() } - case 'beforeUpload': - return (file: any) => { - console.log('beforeUpload被调用:', file) + return (_file: any) => { return true } - default: // 通用默认函数 return (...args: any[]) => { - console.log(`${key}被调用:`, args) // 对于事件处理函数,返回true表示继续执行 if (key.startsWith('on') || key.startsWith('handle')) { return true @@ -208,11 +183,9 @@ export const setConfAndFields2 = ( } } } - - // 修复option中的所有函数 + // 修复 option 中的所有函数 fixFunctions(option) - - // 修复rule中的所有函数(包括组件的props) + // 修复 rule 中的所有函数(包括组件的 props) if (Array.isArray(rule)) { rule.forEach((item: any) => { fixFunctions(item) From cfa25fc8d046533878d5b996bada7f93399dfc10 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 6 Jul 2025 16:40:59 +0800 Subject: [PATCH 04/30] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E7=94=9F=E6=88=90=E5=99=A8=E6=A0=91=E5=BD=A2=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=99=A8=E4=B8=8D=E6=B8=B2=E6=9F=93=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/formCreate/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plugins/formCreate/index.ts b/src/plugins/formCreate/index.ts index 4fb7ca160..01a57bebc 100644 --- a/src/plugins/formCreate/index.ts +++ b/src/plugins/formCreate/index.ts @@ -54,7 +54,8 @@ import { ElMessage, ElCollapse, ElCollapseItem, - ElCard, ElTreeSelect + ElCard, + ElTreeSelect // ElFormItem, // ElOption } from 'element-plus' @@ -120,7 +121,7 @@ const components = [ Editor, ElCollapse, ElCollapseItem, - ElCard, + ElCard ] // 参考 http://www.form-create.com/v3/element-ui/auto-import.html 文档 From 0efa1e986bf7cf7c8697a5b132268c94bacec627 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 6 Jul 2025 16:45:17 +0800 Subject: [PATCH 05/30] =?UTF-8?q?fix:=20form-create=20API=20=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E6=97=B6=EF=BC=8C=E7=BC=BA=E5=B0=91=20token=20?= =?UTF-8?q?=EF=BC=88https://t.zsxq.com/hK3FO=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/formCreate.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/utils/formCreate.ts b/src/utils/formCreate.ts index 5a0a49a3c..19862f571 100644 --- a/src/utils/formCreate.ts +++ b/src/utils/formCreate.ts @@ -116,7 +116,8 @@ export const setConfAndFields2 = ( switch (key) { case 'beforeFetch': return (config: any) => { - // 添加认证头 + // 添加 Token 认证头。例如说: + // https://t.zsxq.com/hK3FO const token = localStorage.getItem('token') if (token) { config.headers = { From e75ddc40ab06de93c6d9aad54bf2afcad3982296 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 8 Jul 2025 22:19:56 +0800 Subject: [PATCH 06/30] =?UTF-8?q?fix:=20=E4=B8=89=E6=96=B9=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E7=9A=84=E7=BB=91=E5=AE=9A=EF=BC=8C=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=20/system/social-user/get-bind-list=20=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/system/social/user/index.ts | 7 ++++++- src/api/system/user/profile.ts | 4 ---- src/components/Cropper/src/CopperModal.vue | 1 - src/views/Profile/components/UserAvatar.vue | 11 ++++++----- src/views/Profile/components/UserSocial.vue | 16 ++++++++-------- 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/api/system/social/user/index.ts b/src/api/system/social/user/index.ts index f11231b71..9f1631dff 100644 --- a/src/api/system/social/user/index.ts +++ b/src/api/system/social/user/index.ts @@ -14,7 +14,7 @@ export interface SocialUserVO { } // 查询社交用户列表 -export const getSocialUserPage = async (params) => { +export const getSocialUserPage = async (params: any) => { return await request.get({ url: `/system/social-user/page`, params }) } @@ -22,3 +22,8 @@ export const getSocialUserPage = async (params) => { export const getSocialUser = async (id: number) => { return await request.get({ url: `/system/social-user/get?id=` + id }) } + +// 获得绑定社交用户列表 +export const getBindSocialUserList = async () => { + return await request.get({ url: '/system/social-user/get-bind-list' }) +} diff --git a/src/api/system/user/profile.ts b/src/api/system/user/profile.ts index 2e2790129..7ac8df1ce 100644 --- a/src/api/system/user/profile.ts +++ b/src/api/system/user/profile.ts @@ -16,10 +16,6 @@ export interface ProfileVO { id: number name: string }[] - socialUsers: { - type: number - openid: string - }[] email: string mobile: string sex: number diff --git a/src/components/Cropper/src/CopperModal.vue b/src/components/Cropper/src/CopperModal.vue index 05b8d87b9..d9a4e341f 100644 --- a/src/components/Cropper/src/CopperModal.vue +++ b/src/components/Cropper/src/CopperModal.vue @@ -181,7 +181,6 @@ function openModal() { } function closeModal() { - debugger dialogVisible.value = false } diff --git a/src/views/Profile/components/UserAvatar.vue b/src/views/Profile/components/UserAvatar.vue index 8f3bedbf1..23ecc3afe 100644 --- a/src/views/Profile/components/UserAvatar.vue +++ b/src/views/Profile/components/UserAvatar.vue @@ -18,7 +18,6 @@ import { useUserStore } from '@/store/modules/user' import { useUpload } from '@/components/UploadFile/src/useUpload' import { UploadRequestOptions } from 'element-plus/es/components/upload/src/upload' -// TODO @芋艿:合并到 ProfileUser 组件中,更简洁一点 defineOptions({ name: 'UserAvatar' }) defineProps({ @@ -30,10 +29,12 @@ const userStore = useUserStore() const cropperRef = ref() const handelUpload = async ({ data }) => { const { httpRequest } = useUpload() - const avatar = ((await httpRequest({ - file: data, - filename: 'avatar.png', - } as UploadRequestOptions)) as unknown as { data: string }).data + const avatar = ( + (await httpRequest({ + file: data, + filename: 'avatar.png' + } as UploadRequestOptions)) as unknown as { data: string } + ).data await updateUserProfile({ avatar }) // 关闭弹窗,并更新 userStore diff --git a/src/views/Profile/components/UserSocial.vue b/src/views/Profile/components/UserSocial.vue index b7f955be8..8d2535471 100644 --- a/src/views/Profile/components/UserSocial.vue +++ b/src/views/Profile/components/UserSocial.vue @@ -23,7 +23,7 @@ diff --git a/src/components/DiyEditor/components/mobile/NavigationBar/config.ts b/src/components/DiyEditor/components/mobile/NavigationBar/config.ts index 36612a3f3..4fb5e7c9a 100644 --- a/src/components/DiyEditor/components/mobile/NavigationBar/config.ts +++ b/src/components/DiyEditor/components/mobile/NavigationBar/config.ts @@ -45,8 +45,14 @@ export interface NavigationBarCellProperty { imgUrl: string // 图片链接 url: string + // 搜索框:框体颜色 + backgroundColor: string // 搜索框:提示文字 placeholder: string + // 搜索框:提示文字位置 + placeholderPosition: string + // 搜索框:是否显示扫一扫 + showScan: boolean // 搜索框:边框圆角半径 borderRadius: number } diff --git a/src/components/DiyEditor/components/mobile/NavigationBar/index.vue b/src/components/DiyEditor/components/mobile/NavigationBar/index.vue index c5a92b31f..104c6002a 100644 --- a/src/components/DiyEditor/components/mobile/NavigationBar/index.vue +++ b/src/components/DiyEditor/components/mobile/NavigationBar/index.vue @@ -54,9 +54,12 @@ const getCellStyle = (cell: NavigationBarCellProperty) => { const getSearchProp = computed(() => (cell: NavigationBarCellProperty) => { return { height: 30, - showScan: false, + backgroundColor: cell.backgroundColor, + showScan: cell.showScan, placeholder: cell.placeholder, - borderRadius: cell.borderRadius + borderRadius: cell.borderRadius, + textColor: cell.textColor, + placeholderPosition: cell.placeholderPosition } as SearchProperty }) From 52769ee87584229ad0d7236fc4df7910df5169f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=92=E6=B2=93=E5=A6=82=E6=B5=81=E6=98=9F?= <13523376917@163.com> Date: Fri, 25 Jul 2025 03:32:18 +0000 Subject: [PATCH 28/30] update src/views/system/menu/index.vue. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 飒沓如流星 <13523376917@163.com> --- src/views/system/menu/index.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue index a72da7ed7..af3e0ad6a 100644 --- a/src/views/system/menu/index.vue +++ b/src/views/system/menu/index.vue @@ -94,7 +94,7 @@ import { MenuVO } from '@/api/system/menu' import MenuForm from './MenuForm.vue' import DictTag from '@/components/DictTag/src/DictTag.vue' import { Icon } from '@/components/Icon' -import { ElButton, TableV2FixedDir } from 'element-plus' +import { ElButton, TableV2FixedDir, ElSwitch } from 'element-plus' import { checkPermi } from '@/utils/permission' import { CommonStatusEnum } from '@/utils/constants' import { CACHE_KEY, useCache } from '@/hooks/web/useCache' @@ -175,7 +175,7 @@ const columns = [ fixed: TableV2FixedDir.RIGHT, cellRenderer: ({ rowData }) => { // 定义按钮列表 - const buttons = [] + const buttons: InstanceType[] = [] // 检查权限并添加按钮 if (checkPermi(['system:menu:update'])) { From 132a4b5e30a73159c0795c1e6d5d9cd2c8498065 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=92=E6=B2=93=E5=A6=82=E6=B5=81=E6=98=9F?= <13523376917@163.com> Date: Fri, 25 Jul 2025 03:35:48 +0000 Subject: [PATCH 29/30] =?UTF-8?q?update=20src/components/Echart/src/Echart?= =?UTF-8?q?.vue.=20=E5=8F=AF=E8=83=BD=E4=BC=9A=E5=87=BA=E7=8E=B0=E5=BC=82?= =?UTF-8?q?=E6=AD=A5=E5=8A=A0=E8=BD=BD=E6=95=B0=E6=8D=AE=E5=9B=BE=E8=A1=A8?= =?UTF-8?q?=E4=B8=8D=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 飒沓如流星 <13523376917@163.com> --- src/components/Echart/src/Echart.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/Echart/src/Echart.vue b/src/components/Echart/src/Echart.vue index bf22b864e..487f20a8d 100644 --- a/src/components/Echart/src/Echart.vue +++ b/src/components/Echart/src/Echart.vue @@ -72,6 +72,7 @@ watch( (options) => { if (echartRef) { echartRef?.setOption(options) + echartRef?.resize() } }, { From c05d584045e31014728859930f2b73b6848c53ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=92=E6=B2=93=E5=A6=82=E6=B5=81=E6=98=9F?= <13523376917@163.com> Date: Fri, 25 Jul 2025 03:38:09 +0000 Subject: [PATCH 30/30] =?UTF-8?q?update=20src/components/AppLinkInput/AppL?= =?UTF-8?q?inkSelectDialog.vue.=20=E4=BF=AE=E5=A4=8DVscode=20TS=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 飒沓如流星 <13523376917@163.com> --- src/components/AppLinkInput/AppLinkSelectDialog.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/AppLinkInput/AppLinkSelectDialog.vue b/src/components/AppLinkInput/AppLinkSelectDialog.vue index 63f19662e..cdd0b66e9 100644 --- a/src/components/AppLinkInput/AppLinkSelectDialog.vue +++ b/src/components/AppLinkInput/AppLinkSelectDialog.vue @@ -170,7 +170,7 @@ const groupBtnRefs = ref([]) const scrollToGroupBtn = (group: string) => { const groupBtn = groupBtnRefs.value .map((btn: ButtonInstance) => btn['ref']) - .find((ref: Node) => ref.textContent === group) + .find((ref: HTMLButtonElement) => ref.textContent === group) if (groupBtn) { groupScrollbar.value?.setScrollTop(groupBtn.offsetTop) }