392392 :confirmLoading =" loadingParams"
393393 @ok =" confirmIndicatorParams"
394394 @cancel =" cancelIndicatorParams"
395+ @afterClose =" handleParamsModalAfterClose"
395396 :width =" 500"
396397 :maskClosable =" false"
397398 :keyboard =" false"
@@ -746,6 +747,8 @@ export default {
746747 const indicatorParams = ref ([]) // 指标参数声明
747748 const indicatorParamValues = ref ({}) // 用户设置的参数值
748749 const loadingParams = ref (false )
750+ // 保存每个指标的参数值(key: indicatorId, value: { paramName: paramValue })
751+ const savedIndicatorParams = ref ({})
749752
750753 // 折叠状态
751754 const customSectionCollapsed = ref (false ) // 我创建的指标区域是否折叠
@@ -1416,10 +1419,34 @@ export default {
14161419 if (res && res .code === 1 && Array .isArray (res .data ) && res .data .length > 0 ) {
14171420 // 有参数,显示配置弹窗
14181421 indicatorParams .value = res .data
1419- indicatorParamValues .value = {}
1422+ // 获取指标的唯一标识(用于保存参数值)
1423+ const indicatorKey = ` ${ source} -${ indicator .id } `
1424+ // 先检查是否有保存的参数值
1425+ const savedParams = savedIndicatorParams .value [indicatorKey]
1426+ // 先清空,然后逐个设置,确保响应式正常工作
1427+ const newParamValues = {}
14201428 res .data .forEach (p => {
1421- indicatorParamValues .value [p .name ] = p .default
1429+ // 如果有保存的值,使用保存的值;否则使用默认值
1430+ // 需要处理类型转换
1431+ let value = savedParams && savedParams[p .name ] !== undefined
1432+ ? savedParams[p .name ]
1433+ : p .default
1434+
1435+ // 根据参数类型进行类型转换
1436+ if (p .type === ' int' ) {
1437+ value = parseInt (value) || 0
1438+ } else if (p .type === ' float' ) {
1439+ value = parseFloat (value) || 0.0
1440+ } else if (p .type === ' bool' ) {
1441+ value = value === true || value === ' true' || value === 1 || value === ' 1'
1442+ } else {
1443+ value = value || ' '
1444+ }
1445+
1446+ newParamValues[p .name ] = value
14221447 })
1448+ // 一次性设置所有值,确保响应式更新
1449+ indicatorParamValues .value = newParamValues
14231450 pendingIndicator .value = indicator
14241451 pendingSource .value = source
14251452 showParamsModal .value = true
@@ -1440,6 +1467,10 @@ export default {
14401467 // 确认参数配置并运行指标
14411468 const confirmIndicatorParams = () => {
14421469 if (pendingIndicator .value ) {
1470+ // 保存参数值(用于下次打开时使用)
1471+ const indicatorKey = ` ${ pendingSource .value } -${ pendingIndicator .value .id } `
1472+ savedIndicatorParams .value [indicatorKey] = { ... indicatorParamValues .value }
1473+
14431474 // 将参数传递给指标
14441475 const indicatorWithParams = {
14451476 ... pendingIndicator .value ,
@@ -1454,9 +1485,29 @@ export default {
14541485
14551486 // 取消参数配置
14561487 const cancelIndicatorParams = () => {
1488+ // 保存参数值(在关闭前保存)
1489+ saveCurrentParams ()
14571490 showParamsModal .value = false
1458- pendingIndicator .value = null
1459- pendingSource .value = ' '
1491+ // 延迟清空,确保 afterClose 能访问到数据
1492+ setTimeout (() => {
1493+ pendingIndicator .value = null
1494+ pendingSource .value = ' '
1495+ }, 100 )
1496+ }
1497+
1498+ // 保存当前参数值
1499+ const saveCurrentParams = () => {
1500+ if (pendingIndicator .value && pendingSource .value ) {
1501+ const indicatorKey = ` ${ pendingSource .value } -${ pendingIndicator .value .id } `
1502+ // 深拷贝参数值,确保保存的是当前值
1503+ savedIndicatorParams .value [indicatorKey] = JSON .parse (JSON .stringify (indicatorParamValues .value ))
1504+ }
1505+ }
1506+
1507+ // 弹窗关闭后的处理
1508+ const handleParamsModalAfterClose = () => {
1509+ // 确保参数值已保存
1510+ saveCurrentParams ()
14601511 }
14611512
14621513 // 运行指标代码(从编辑器)
@@ -1891,6 +1942,28 @@ export default {
18911942 }
18921943 })
18931944
1945+ // 监听参数值变化,实时保存
1946+ watch (
1947+ () => indicatorParamValues .value ,
1948+ (newVal ) => {
1949+ // 只有在弹窗打开且有 pendingIndicator 时才保存
1950+ if (showParamsModal .value && pendingIndicator .value && pendingSource .value ) {
1951+ const indicatorKey = ` ${ pendingSource .value } -${ pendingIndicator .value .id } `
1952+ // 深拷贝保存,避免引用问题
1953+ savedIndicatorParams .value [indicatorKey] = JSON .parse (JSON .stringify (newVal))
1954+ }
1955+ },
1956+ { deep: true , immediate: false }
1957+ )
1958+
1959+ // 监听参数配置弹窗关闭
1960+ watch (showParamsModal, (newVal ) => {
1961+ if (! newVal) {
1962+ // 弹窗关闭时,确保参数值已保存
1963+ saveCurrentParams ()
1964+ }
1965+ })
1966+
18941967 return {
18951968 userId,
18961969 klineChart,
@@ -1955,6 +2028,7 @@ getMarketColor,
19552028 loadingParams,
19562029 confirmIndicatorParams,
19572030 cancelIndicatorParams,
2031+ handleParamsModalAfterClose,
19582032 // 回测相关
19592033 showBacktestModal,
19602034 backtestIndicator,
0 commit comments