def revise_content(self):
reply = QMessageBox.question(
self,
'保存记录',
'是否确认保存当前内容到数据库?\n如果有图片必须上传到附件文档!',
QMessageBox.Yes | QMessageBox.No,
QMessageBox.No
)
if reply != QMessageBox.Yes:
return
self.ui.textEdit.setReadOnly(True)
# 获取纯文本内容
text = self.ui.textEdit.toPlainText()
# 定义关心的标题
target_titles = ['名称']
title_pattern = '|'.join(map(re.escape, target_titles))
pattern = rf'【({title_pattern})】(.*?)(?=(?:【|$))'
matches = re.findall(pattern, text, re.DOTALL)
def clean_content(content):
content = content.replace('\ufffd', '') # 清理替换字符
content = re.sub(r'<img\b[^>]*>', '', content) # 移除 img 标签
content = re.sub(r'[a-zA-Z]:\\[^\\<>:"|?*\n]+?\.(?:jpg|jpeg|png|gif|bmp)', '', content) # 本地路径
content = re.sub(r'data:image/[^;]+;base64,[a-zA-Z0-9+/=\s]+', '', content) # base64 图片
content = re.sub(r'\s+', ' ', content).strip()
return content
extracted_content = {
title.strip(): clean_content(content)
for title, content in matches
}
name = extracted_content.get('名称', '').strip()
if not name:
QMessageBox.warning(self, "错误", "未检测到【名称】字段,无法保存!")
return
# 获取 HTML 内容用于存储
html = self.ui.textEdit.toHtml()
# 弹出选择目标表
table_list = [
'古方', '验方', '秘方', '偏方', '单方', '膳食方', '食疗方', '酒疗方', '茶疗方',
'浴蒸方', '泡脚方', '敷药方', '液体膏药方', '黑高药方', '药对', '穴位推拿'
]
table_name, ok = QInputDialog.getItem(
self,
"选择目标表",
"请选择要插入或更新数据的数据库表名:",
table_list,
0, False
)
if not ok:
QMessageBox.warning(self, "取消", "未选择目标表,操作已取消。")
return
# ========== 判断是 INSERT 还是 UPDATE ==========
query = QSqlQuery()
# 先查询是否存在该名称的数据
check_sql = f"SELECT 名称 FROM {table_name} WHERE 名称 = ?"
if not query.prepare(check_sql):
QMessageBox.critical(self, "错误", "数据库查询准备失败!")
print("查询语句准备失败:", query.lastError().text())
return
query.addBindValue(name)
exists = query.exec_() and query.next()
attachment_value = getattr(self, 'current_folder_path', '').strip()
if not attachment_value:
print("⚠️ current_folder_path 不存在或为空,附件字段将留空")
# === 执行 INSERT 或 UPDATE ===
if exists:
# 执行 UPDATE
update_sql = f"""
UPDATE {table_name}
SET 内容 = ?, 附件 = ?
WHERE 名称 = ?
"""
if not query.prepare(update_sql):
QMessageBox.critical(self, "错误", "更新语句准备失败!")
print("UPDATE 准备失败:", query.lastError().text())
return
query.addBindValue(html)
query.addBindValue(attachment_value or "")
query.addBindValue(name) # WHERE 条件
if query.exec_():
show_toast(f"✅ 记录已更新至表 `{table_name}`!")
print(f"更新成功: {name}")
else:
QMessageBox.critical(self, "错误", "更新数据库失败!")
print("更新失败:", query.lastError().text())
else:
# 执行 INSERT
insert_sql = f"""
INSERT INTO {table_name} (名称, 内容, 附件)
VALUES (?, ?, ?)
"""
if not query.prepare(insert_sql):
QMessageBox.critical(self, "错误", "插入语句准备失败!")
print("INSERT 准备失败:", query.lastError().text())
return
query.addBindValue(name)
query.addBindValue(html)
query.addBindValue(attachment_value or "")
if query.exec_():
show_toast(f"🆕 新记录已插入表 `{table_name}`!")
print(f"插入成功: {name}")
else:
QMessageBox.critical(self, "错误", "插入数据库失败!")
print("插入失败:", query.lastError().text())
# 刷新界面数据
self.load_fixed_column_data()
给出完整的修改后的代码