| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- const {
- createParameterGroupConfig,
- createParameterGroupDialogState,
- createParameterDialogState,
- createParameterRegisterChangedData,
- createParameterRegisterDialogState,
- findParameterGroup,
- findParameterRegister,
- getDialogDataTypeState,
- getOption
- } = require('./view-model.js')
- const {
- buildActiveParameterRegisterRows
- } = require('./drag-view-model.js')
- function getParameterGroupsFromState(state = {}) {
- return state.parameterGroups || []
- }
- function createDialogHandlers(parameterGroupService) {
- return {
- updateParameterDialog(changedData) {
- this.setData({
- parameterDialog: {
- ...this.data.parameterDialog,
- ...changedData
- }
- })
- },
- openParameterDraft(event) {
- const groupId = event && event.currentTarget && event.currentTarget.dataset
- ? event.currentTarget.dataset.groupId
- : ''
- const group = groupId ? findParameterGroup(getParameterGroupsFromState(this.data), groupId) : null
- this.updateParameterDialog(createParameterGroupDialogState(group))
- },
- closeParameterDraft() {
- this.parameterGroupLongPressGuard = ''
- this.parameterRegisterLongPressGuard = ''
- this.updateParameterDialog(createParameterDialogState())
- },
- onParameterDraftInput(event) {
- const field = event.currentTarget.dataset.field
- if (!field) return
- const value = event.detail.value
- this.updateParameterDialog({
- [field]: value,
- ...(field === 'structDefinition' ? {
- parsedStructRegisters: [],
- structParsedSummary: ''
- } : {})
- })
- },
- parseParameterStructDefinition() {
- const dialog = this.data.parameterDialog || createParameterDialogState()
- const sourceText = dialog.structDefinition || ''
- if (!sourceText.trim()) {
- if (this.pageToast) this.pageToast.show('请先粘贴结构体定义', 'error')
- return
- }
- const registerType = getOption(this.data.parameterRegisterTypeOptions, dialog.registerTypeIndex)
- if (registerType.key === 'coil' || registerType.key === 'discrete') {
- if (this.pageToast) this.pageToast.show('结构体解析仅支持寄存器类型', 'error')
- return
- }
- try {
- const parsed = parameterGroupService.parseStructDefinition(sourceText)
- const inputRegisterIndex = Math.max(
- 0,
- this.data.parameterRegisterTypeOptions.findIndex((item) => item.key === 'input')
- )
- const inputRegisterType = getOption(this.data.parameterRegisterTypeOptions, inputRegisterIndex)
- this.updateParameterDialog({
- groupName: parsed.name || dialog.groupName,
- parsedStructRegisters: parsed.registers,
- quantity: String(parsed.registers.length),
- registerTypeIndex: inputRegisterIndex,
- registerTypeText: inputRegisterType.label || '',
- structParsedSummary: `${parsed.structName} · ${parsed.registers.length} 个字段`
- })
- if (this.pageToast) this.pageToast.show('结构体解析完成')
- } catch (error) {
- if (this.pageToast) this.pageToast.show(error.message || '结构体解析失败', 'error')
- }
- },
- onParameterDraftTypeChange(event) {
- const registerTypeIndex = Number(event.detail.value)
- const registerType = getOption(this.data.parameterRegisterTypeOptions, registerTypeIndex)
- const clearParsedStruct = registerType.key === 'coil' || registerType.key === 'discrete'
- this.updateParameterDialog({
- ...(clearParsedStruct ? {
- parsedStructRegisters: [],
- structParsedSummary: ''
- } : {}),
- registerTypeIndex,
- registerTypeText: registerType.label || ''
- })
- },
- onParameterDialogDataTypeChange(event) {
- const dataTypeIndex = Number(event.detail.value)
- this.updateParameterDialog(getDialogDataTypeState(
- this.data.parameterDialog,
- this.data.parameterDataTypeOptions,
- dataTypeIndex
- ))
- },
- openParameterGroupEdit(event) {
- const groupId = event.currentTarget.dataset.groupId
- const group = findParameterGroup(getParameterGroupsFromState(this.data), groupId)
- if (!group) return
- this.parameterGroupLongPressGuard = groupId
- this.updateParameterDialog(createParameterGroupDialogState(group))
- },
- openParameterRegisterInfo(event) {
- const groupId = event.currentTarget.dataset.groupId
- const registerIndex = Number(event.currentTarget.dataset.index)
- const registerKey = `${groupId}:${registerIndex}`
- if (this.parameterRegisterLongPressGuard === registerKey) {
- this.parameterRegisterLongPressGuard = ''
- return
- }
- const {
- group,
- register
- } = findParameterRegister(getParameterGroupsFromState(this.data), groupId, registerIndex)
- if (!register) return
- this.updateParameterDialog(createParameterRegisterDialogState('viewRegister', group, register, registerIndex))
- },
- openParameterRegisterEdit(event) {
- const groupId = event.currentTarget.dataset.groupId
- const registerIndex = Number(event.currentTarget.dataset.index)
- const {
- group,
- register
- } = findParameterRegister(getParameterGroupsFromState(this.data), groupId, registerIndex)
- if (!register) return
- this.parameterRegisterLongPressGuard = `${groupId}:${registerIndex}`
- this.updateParameterDialog(createParameterRegisterDialogState('editRegister', group, register, registerIndex))
- },
- async confirmParameterDialog() {
- const dialog = this.data.parameterDialog || createParameterDialogState()
- const mode = dialog.mode
- if (mode === 'createGroup') {
- const group = parameterGroupService.addGroupFromConfig(createParameterGroupConfig(dialog))
- if (group) {
- if (this.pageToast) this.pageToast.show(`${group.name}已添加`)
- this.closeParameterDraft()
- this.setData({
- activeParameterGroup: group,
- activeParameterGroupId: group.id,
- activeParamView: 'parameterGroup',
- activeParameterRegisterRows: buildActiveParameterRegisterRows(group, this.parameterRegisterDrag)
- })
- }
- return
- }
- if (mode === 'editGroup') {
- const group = parameterGroupService.updateGroupConfig(dialog.groupId, createParameterGroupConfig(dialog))
- if (group) {
- if (this.pageToast) this.pageToast.show(`${group.name}已更新`)
- this.closeParameterDraft()
- if (this.data.activeParameterGroupId === group.id) {
- this.setData({
- activeParameterGroup: group,
- activeParameterRegisterRows: buildActiveParameterRegisterRows(group, this.parameterRegisterDrag)
- })
- }
- }
- return
- }
- if (mode === 'editRegister') {
- let changedData
- try {
- changedData = createParameterRegisterChangedData(dialog, this.data.parameterDataTypeOptions)
- } catch (error) {
- if (this.pageToast) this.pageToast.show(error.message || '公式无效', 'error')
- return
- }
- parameterGroupService.updateRegister(dialog.groupId, dialog.registerIndex, changedData)
- if (this.pageToast) this.pageToast.show(`${dialog.name || '寄存器'}已更新`)
- this.closeParameterDraft()
- }
- }
- }
- }
- module.exports = {
- createDialogHandlers
- }
|