BuffMain01.py 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874
  1. import sys
  2. from PyQt6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QHBoxLayout, QWidget, QPushButton, QTabWidget, QLabel, QLineEdit, QTextEdit, QFormLayout, QMessageBox, QTreeWidget, QTreeWidgetItem, QDialog, QVBoxLayout as QDialogVBoxLayout, QLineEdit as QDialogLineEdit, QDialogButtonBox, QCheckBox, QComboBox
  3. from PyQt6.QtCore import Qt
  4. class MainWindow(QMainWindow):
  5. def __init__(self):
  6. super().__init__()
  7. # 初始化 phone_edit_map
  8. self.setup_phone_edit_map()
  9. # 设置窗口标题和大小
  10. self.setWindowTitle("BUFF选品扫货组件")
  11. self.setGeometry(100, 100, 1500, 800)
  12. # 创建一个垂直布局
  13. layout = QVBoxLayout()
  14. layout.setAlignment(Qt.AlignmentFlag.AlignLeft) # 确保垂直布局内容靠左对齐
  15. # 创建一个水平布局来放置按钮
  16. button_layout = QHBoxLayout()
  17. button_layout.setAlignment(Qt.AlignmentFlag.AlignLeft) # 确保水平布局内容靠左对齐
  18. # 创建两个按钮
  19. button1 = QPushButton("选品")
  20. button2 = QPushButton("扫货")
  21. # 创建停止按钮
  22. stop_button1 = QPushButton("停止选品")
  23. stop_button2 = QPushButton("停止扫货")
  24. # 将按钮添加到水平布局中
  25. button_layout.addWidget(button1)
  26. button_layout.addWidget(stop_button1) # 添加停止选品按钮
  27. button_layout.addWidget(button2)
  28. button_layout.addWidget(stop_button2) # 添加停止扫货按钮
  29. # 连接按钮的点击事件
  30. button1.clicked.connect(self.show_selected_phone_number)
  31. stop_button1.clicked.connect(self.stop_selection) # 连接停止选品按钮的点击事件
  32. # 将水平布局添加到垂直布局中
  33. layout.addLayout(button_layout)
  34. # 创建一个Tab容器
  35. self.tab_widget = QTabWidget()
  36. # 向Tab容器中添加10个标签页
  37. for i in range(1, 12): # 修改循环范围,增加一个标签页
  38. tab = QWidget()
  39. tab_layout = QVBoxLayout()
  40. tab_layout.setAlignment(Qt.AlignmentFlag.AlignLeft) # 确保标签页布局内容靠左对齐
  41. if i == 1:
  42. form_layout = self.create_account_info_form("选品")
  43. tab_layout.addLayout(form_layout)
  44. elif i == 2:
  45. form_layout = self.create_account_info_form("扫货")
  46. tab_layout.addLayout(form_layout)
  47. elif i == 3:
  48. tree_layout = self.create_category_info_form()
  49. tab_layout.addLayout(tree_layout)
  50. elif i == 4:
  51. tree_layout = self.create_quality_info_form()
  52. tab_layout.addLayout(tree_layout)
  53. elif i == 5:
  54. tree_layout = self.create_type_info_form()
  55. tab_layout.addLayout(tree_layout)
  56. elif i == 6:
  57. tree_layout = self.create_appearance_info_form()
  58. tab_layout.addLayout(tree_layout)
  59. elif i == 7:
  60. tree_layout = self.create_favorite_info_form()
  61. tab_layout.addLayout(tree_layout)
  62. elif i == 8:
  63. form_layout = self.create_run_config_form()
  64. tab_layout.addLayout(form_layout)
  65. elif i == 9:
  66. label = QLabel("BUFF扫货配置信息") # 修改标题
  67. tab_layout.addWidget(label)
  68. elif i == 10:
  69. self.selection_log_text_edit = QTextEdit() # 创建 QTextEdit 用于显示选品日志
  70. self.selection_log_text_edit.setReadOnly(True) # 设置为只读
  71. tab_layout.addWidget(self.selection_log_text_edit)
  72. elif i == 11: # 新增标签页
  73. label = QLabel("BUFF扫货日志")
  74. tab_layout.addWidget(label)
  75. # 在BUFF扫货日志标签页内加入一个下拉框
  76. dropdown = QComboBox()
  77. dropdown.addItems(["1您好", "2您不好", "3您很好"])
  78. tab_layout.addWidget(dropdown)
  79. tab.setLayout(tab_layout)
  80. if i == 1:
  81. self.tab_widget.addTab(tab, "选品账号信息")
  82. elif i == 2:
  83. self.tab_widget.addTab(tab, "扫货账号信息")
  84. elif i == 3:
  85. self.tab_widget.addTab(tab, "BUFF品类信息")
  86. elif i == 4:
  87. self.tab_widget.addTab(tab, "BUFF品质信息")
  88. elif i == 5:
  89. self.tab_widget.addTab(tab, "BUFF种类信息")
  90. elif i == 6:
  91. self.tab_widget.addTab(tab, "BUFF外观信息")
  92. elif i == 7:
  93. self.tab_widget.addTab(tab, "BUFF收藏品信息")
  94. elif i == 8:
  95. self.tab_widget.addTab(tab, "BUFF选品基础配置")
  96. elif i == 9:
  97. self.tab_widget.addTab(tab, "BUFF扫货配置信息")
  98. elif i == 10:
  99. self.tab_widget.addTab(tab, "BUFF选品日志")
  100. elif i == 11: # 新增标签页
  101. self.tab_widget.addTab(tab, "BUFF扫货日志")
  102. # 将Tab容器添加到布局中
  103. layout.addWidget(self.tab_widget)
  104. # 创建一个中心部件,并将布局设置为中心部件的布局
  105. container = QWidget()
  106. container.setLayout(layout)
  107. # 将中心部件设置为主窗口的中心部件
  108. self.setCentralWidget(container)
  109. def create_account_info_form(self, prefix):
  110. form_layout = QFormLayout()
  111. form_layout.setAlignment(Qt.AlignmentFlag.AlignLeft) # 确保表单布局内容靠左对齐
  112. # 创建输入框及其标签
  113. phone_label = QLabel(f"{prefix}手机号码")
  114. phone_edit = QLineEdit()
  115. phone_edit.setFixedWidth(500) # 设置固定宽度为500像素
  116. form_layout.addRow(phone_label, phone_edit)
  117. email_label = QLabel(f"{prefix}邮箱号")
  118. email_edit = QLineEdit()
  119. email_edit.setFixedWidth(500) # 设置固定宽度为500像素
  120. form_layout.addRow(email_label, email_edit)
  121. email_alias_label = QLabel(f"{prefix}邮箱特殊代码")
  122. email_alias_edit = QLineEdit()
  123. email_alias_edit.setFixedWidth(500) # 设置固定宽度为500像素
  124. form_layout.addRow(email_alias_label, email_alias_edit)
  125. cookie_label = QLabel(f"{prefix}cookie")
  126. cookie_edit = QTextEdit() # 使用QTextEdit代替QLineEdit
  127. cookie_edit.setFixedWidth(500) # 设置固定宽度为500像素
  128. form_layout.addRow(cookie_label, cookie_edit)
  129. # 保存输入框的引用以便后续访问
  130. self.phone_edit_map[prefix] = phone_edit
  131. return form_layout
  132. def create_quality_info_form(self):
  133. layout = QVBoxLayout()
  134. layout.setAlignment(Qt.AlignmentFlag.AlignLeft) # 确保布局内容靠左对齐
  135. # 创建树形控件
  136. self.quality_tree_widget = QTreeWidget()
  137. self.quality_tree_widget.setHeaderLabels(["品质选择", "品质名称", "品质编码"])
  138. self.quality_tree_widget.setColumnCount(3)
  139. self.quality_tree_widget.setSelectionMode(QTreeWidget.SelectionMode.ExtendedSelection)
  140. self.quality_tree_widget.setRootIsDecorated(True) # 启用根节点的装饰
  141. self.quality_tree_widget.setAlternatingRowColors(True) # 设置交替行颜色
  142. self.quality_tree_widget.setStyleSheet("QTreeWidget::item { padding: 5px; }") # 设置项的内边距
  143. # 启用复选框
  144. self.quality_tree_widget.setColumnWidth(0, 50) # 设置品质选择列的宽度
  145. self.quality_tree_widget.setColumnWidth(1, 300) # 设置品质名称列的宽度
  146. self.quality_tree_widget.setColumnWidth(2, 150) # 设置品质编码列的宽度
  147. self.quality_tree_widget.setHeaderItem(QTreeWidgetItem(["品质选择", "品质名称", "品质编码"])) # 设置表头
  148. self.quality_tree_widget.header().setDefaultAlignment(Qt.AlignmentFlag.AlignLeft) # 设置表头对齐方式
  149. # 添加默认数据
  150. default_qualities = [
  151. ("默认品质1", "001"),
  152. ("默认品质2", "002")
  153. ]
  154. for quality_name, quality_code in default_qualities:
  155. item = QTreeWidgetItem(self.quality_tree_widget)
  156. item.setText(1, quality_name)
  157. item.setText(2, quality_code)
  158. checkbox = QCheckBox()
  159. checkbox.setChecked(False)
  160. self.quality_tree_widget.setItemWidget(item, 0, checkbox)
  161. layout.addWidget(self.quality_tree_widget)
  162. # 创建按钮布局
  163. button_layout = QHBoxLayout()
  164. button_layout.setAlignment(Qt.AlignmentFlag.AlignLeft) # 确保按钮布局内容靠左对齐
  165. # 创建添加按钮
  166. add_button = QPushButton("添加")
  167. add_button.clicked.connect(self.add_quality)
  168. button_layout.addWidget(add_button)
  169. # 创建删除按钮
  170. delete_button = QPushButton("删除")
  171. delete_button.clicked.connect(self.delete_quality)
  172. button_layout.addWidget(delete_button)
  173. # 创建编辑按钮
  174. edit_button = QPushButton("编辑")
  175. edit_button.clicked.connect(self.edit_quality)
  176. button_layout.addWidget(edit_button)
  177. layout.addLayout(button_layout)
  178. return layout
  179. def create_type_info_form(self):
  180. layout = QVBoxLayout()
  181. layout.setAlignment(Qt.AlignmentFlag.AlignLeft) # 确保布局内容靠左对齐
  182. # 创建树形控件
  183. self.type_tree_widget = QTreeWidget()
  184. self.type_tree_widget.setHeaderLabels(["选择", "种类名称", "种类编码"])
  185. self.type_tree_widget.setColumnCount(3)
  186. self.type_tree_widget.setSelectionMode(QTreeWidget.SelectionMode.ExtendedSelection)
  187. self.type_tree_widget.setRootIsDecorated(True) # 启用根节点的装饰
  188. self.type_tree_widget.setAlternatingRowColors(True) # 设置交替行颜色
  189. self.type_tree_widget.setStyleSheet("QTreeWidget::item { padding: 5px; }") # 设置项的内边距
  190. # 启用复选框
  191. self.type_tree_widget.setColumnWidth(0, 50) # 设置选择列的宽度
  192. self.type_tree_widget.setColumnWidth(1, 300) # 设置type名称列的宽度
  193. self.type_tree_widget.setColumnWidth(2, 150) # 设置type编码列的宽度
  194. self.type_tree_widget.setHeaderItem(QTreeWidgetItem(["选择", "种类名称", "种类编码"])) # 设置表头
  195. self.type_tree_widget.header().setDefaultAlignment(Qt.AlignmentFlag.AlignLeft) # 设置表头对齐方式
  196. layout.addWidget(self.type_tree_widget)
  197. # 创建按钮布局
  198. button_layout = QHBoxLayout()
  199. button_layout.setAlignment(Qt.AlignmentFlag.AlignLeft) # 确保按钮布局内容靠左对齐
  200. # 创建添加按钮
  201. add_button = QPushButton("添加")
  202. add_button.clicked.connect(self.add_type)
  203. button_layout.addWidget(add_button)
  204. # 创建删除按钮
  205. delete_button = QPushButton("删除")
  206. delete_button.clicked.connect(self.delete_type)
  207. button_layout.addWidget(delete_button)
  208. # 创建编辑按钮
  209. edit_button = QPushButton("编辑")
  210. edit_button.clicked.connect(self.edit_type)
  211. button_layout.addWidget(edit_button)
  212. layout.addLayout(button_layout)
  213. return layout
  214. def create_appearance_info_form(self):
  215. layout = QVBoxLayout()
  216. layout.setAlignment(Qt.AlignmentFlag.AlignLeft) # 确保布局内容靠左对齐
  217. # 创建树形控件
  218. self.appearance_tree_widget = QTreeWidget()
  219. self.appearance_tree_widget.setHeaderLabels(["选择", "外观名称", "外观编码"])
  220. self.appearance_tree_widget.setColumnCount(3)
  221. self.appearance_tree_widget.setSelectionMode(QTreeWidget.SelectionMode.ExtendedSelection)
  222. self.appearance_tree_widget.setRootIsDecorated(True) # 启用根节点的装饰
  223. self.appearance_tree_widget.setAlternatingRowColors(True) # 设置交替行颜色
  224. self.appearance_tree_widget.setStyleSheet("QTreeWidget::item { padding: 5px; }") # 设置项的内边距
  225. # 启用复选框
  226. self.appearance_tree_widget.setColumnWidth(0, 50) # 设置选择列的宽度
  227. self.appearance_tree_widget.setColumnWidth(1, 300) # 设置外观名称列的宽度
  228. self.appearance_tree_widget.setColumnWidth(2, 150) # 设置外观编码列的宽度
  229. self.appearance_tree_widget.setHeaderItem(QTreeWidgetItem(["选择", "外观名称", "外观编码"])) # 设置表头
  230. self.appearance_tree_widget.header().setDefaultAlignment(Qt.AlignmentFlag.AlignLeft) # 设置表头对齐方式
  231. layout.addWidget(self.appearance_tree_widget)
  232. # 创建按钮布局
  233. button_layout = QHBoxLayout()
  234. button_layout.setAlignment(Qt.AlignmentFlag.AlignLeft) # 确保按钮布局内容靠左对齐
  235. # 创建添加按钮
  236. add_button = QPushButton("添加")
  237. add_button.clicked.connect(self.add_appearance)
  238. button_layout.addWidget(add_button)
  239. # 创建删除按钮
  240. delete_button = QPushButton("删除")
  241. delete_button.clicked.connect(self.delete_appearance)
  242. button_layout.addWidget(delete_button)
  243. # 创建编辑按钮
  244. edit_button = QPushButton("编辑")
  245. edit_button.clicked.connect(self.edit_appearance)
  246. button_layout.addWidget(edit_button)
  247. layout.addLayout(button_layout)
  248. return layout
  249. def create_favorite_info_form(self):
  250. layout = QVBoxLayout()
  251. layout.setAlignment(Qt.AlignmentFlag.AlignLeft) # 确保布局内容靠左对齐
  252. # 创建树形控件
  253. self.favorite_tree_widget = QTreeWidget()
  254. self.favorite_tree_widget.setHeaderLabels(["选择", "收藏品名称", "收藏品编码"])
  255. self.favorite_tree_widget.setColumnCount(3)
  256. self.favorite_tree_widget.setSelectionMode(QTreeWidget.SelectionMode.ExtendedSelection)
  257. self.favorite_tree_widget.setRootIsDecorated(True) # 启用根节点的装饰
  258. self.favorite_tree_widget.setAlternatingRowColors(True) # 设置交替行颜色
  259. self.favorite_tree_widget.setStyleSheet("QTreeWidget::item { padding: 5px; }") # 设置项的内边距
  260. # 启用复选框
  261. self.favorite_tree_widget.setColumnWidth(0, 50) # 设置选择列的宽度
  262. self.favorite_tree_widget.setColumnWidth(1, 300) # 设置收藏品名称列的宽度
  263. self.favorite_tree_widget.setColumnWidth(2, 150) # 设置收藏品编码列的宽度
  264. self.favorite_tree_widget.setHeaderItem(QTreeWidgetItem(["选择", "收藏品名称", "收藏品编码"])) # 设置表头
  265. self.favorite_tree_widget.header().setDefaultAlignment(Qt.AlignmentFlag.AlignLeft) # 设置表头对齐方式
  266. layout.addWidget(self.favorite_tree_widget)
  267. # 创建按钮布局
  268. button_layout = QHBoxLayout()
  269. button_layout.setAlignment(Qt.AlignmentFlag.AlignLeft) # 确保按钮布局内容靠左对齐
  270. # 创建添加按钮
  271. add_button = QPushButton("添加")
  272. add_button.clicked.connect(self.add_favorite)
  273. button_layout.addWidget(add_button)
  274. # 创建删除按钮
  275. delete_button = QPushButton("删除")
  276. delete_button.clicked.connect(self.delete_favorite)
  277. button_layout.addWidget(delete_button)
  278. # 创建编辑按钮
  279. edit_button = QPushButton("编辑")
  280. edit_button.clicked.connect(self.edit_favorite)
  281. button_layout.addWidget(edit_button)
  282. layout.addLayout(button_layout)
  283. return layout
  284. def create_run_config_form(self):
  285. form_layout = QFormLayout() # 修改为QFormLayout
  286. form_layout.setAlignment(Qt.AlignmentFlag.AlignLeft) # 确保布局内容靠左对齐
  287. # 创建输入框及其标签
  288. min_price_label = QLabel("选品最低价")
  289. min_price_edit = QLineEdit()
  290. min_price_edit.setFixedWidth(500) # 设置固定宽度为500像素
  291. form_layout.addRow(min_price_label, min_price_edit)
  292. max_price_label = QLabel("选品最高价")
  293. max_price_edit = QLineEdit()
  294. max_price_edit.setFixedWidth(500) # 设置固定宽度为500像素
  295. form_layout.addRow(max_price_label, max_price_edit)
  296. sort_label = QLabel("选品排序模式")
  297. sort_combo = QComboBox()
  298. sort_combo.addItems(["默认", "价格升序", "价格降序", "在售数量降序"])
  299. sort_combo.setCurrentIndex(0) # 设置默认选项为“默认”
  300. sort_combo.setFixedWidth(500) # 设置固定宽度为500像素
  301. form_layout.addRow(sort_label, sort_combo)
  302. # 新增选品停止条件
  303. stop_condition_label = QLabel("选品停止条件")
  304. stop_condition_combo = QComboBox()
  305. stop_condition_combo.addItems(["按照成功数量", "按照扫描商品数量"])
  306. stop_condition_combo.setCurrentIndex(0) # 设置默认选项为“按照成功数量”
  307. stop_condition_combo.setFixedWidth(500) # 设置固定宽度为500像素
  308. form_layout.addRow(stop_condition_label, stop_condition_combo)
  309. # 新增成功数量配置
  310. success_count_label = QLabel("成功数量配置")
  311. success_count_edit = QLineEdit()
  312. success_count_edit.setFixedWidth(500) # 设置固定宽度为500像素
  313. form_layout.addRow(success_count_label, success_count_edit)
  314. # 新增扫描商品的数量
  315. scan_count_label = QLabel("扫描商品的数量")
  316. scan_count_edit = QLineEdit()
  317. scan_count_edit.setFixedWidth(500) # 设置固定宽度为500像素
  318. form_layout.addRow(scan_count_label, scan_count_edit)
  319. # 新增选品接口每页请求多少数量
  320. page_size_label = QLabel("选品接口每页请求多少数量")
  321. page_size_edit = QLineEdit()
  322. page_size_edit.setText("80") # 设置默认值为80
  323. page_size_edit.setFixedWidth(500) # 设置固定宽度为500像素
  324. form_layout.addRow(page_size_label, page_size_edit)
  325. # 新增每次调用BUFF接口暂停多少秒
  326. pause_time_label = QLabel("每次调用BUFF接口暂停多少秒")
  327. pause_time_edit = QLineEdit()
  328. pause_time_edit.setText("10") # 设置默认值为10
  329. pause_time_edit.setFixedWidth(500) # 设置固定宽度为500像素
  330. form_layout.addRow(pause_time_label, pause_time_edit)
  331. return form_layout
  332. def show_selected_phone_number(self):
  333. # 跳转到BUFF选品日志的标签
  334. self.tab_widget.setCurrentIndex(9)
  335. phone_number = self.phone_edit_map["选品"].text()
  336. log_message = f"选品手机号码: {phone_number}\n"
  337. self.selection_log_text_edit.append(log_message) # 将日志信息添加到 QTextEdit 中
  338. # 获取BUFF品类信息标签页所有品类选择选中的编码信息形成数组,处理没有选中的情况
  339. selected_categories = []
  340. for i in range(self.category_tree_widget.topLevelItemCount()):
  341. top_level_item = self.category_tree_widget.topLevelItem(i)
  342. #top_level_item中品类选择选中对应行的品类编码信息
  343. if top_level_item.checkState(0) == Qt.CheckState.Checked:
  344. selected_categories.append(top_level_item.text(2)) # 获取品类编码
  345. print(selected_categories)
  346. def show_shopping_phone_number(self):
  347. # 跳转到BUFF选品日志的标签
  348. self.tab_widget.setCurrentIndex(9)
  349. phone_number = self.phone_edit_map["扫货"].text()
  350. log_message = f"扫货手机号码: {phone_number}\n"
  351. self.selection_log_text_edit.append(log_message) # 将日志信息添加到 QTextEdit 中
  352. # 获取BUFF品类信息标签页所有品类选择选中的编码信息形成数组,处理没有选中的情况
  353. selected_categories = []
  354. for i in range(self.category_tree_widget.topLevelItemCount()):
  355. top_level_item = self.category_tree_widget.topLevelItem(i)
  356. # top_level_item中品类选择选中对应行的品类编码信息
  357. if top_level_item.checkState(0) == Qt.CheckState.Checked:
  358. selected_categories.append(top_level_item.text(2)) # 获取品类编码
  359. log_message = f"选中的品类编码: {', '.join(selected_categories)}\n"
  360. self.selection_log_text_edit.append(log_message) # 将日志信息添加到 QTextEdit 中
  361. # 获取BUFF品质信息标签页所有品质选择选中的编码信息形成数组,处理没有选中的情况
  362. selected_qualities = []
  363. for i in range(self.quality_tree_widget.topLevelItemCount()):
  364. top_level_item = self.quality_tree_widget.topLevelItem(i)
  365. # top_level_item中品质选择选中对应行的品质编码信息
  366. if top_level_item.checkState(0) == Qt.CheckState.Checked:
  367. selected_qualities.append(top_level_item.text(2)) # 获取品质编码
  368. log_message = f"选中的品质编码: {', '.join(selected_qualities)}\n"
  369. self.selection_log_text_edit.append(log_message) # 将日志信息添加到 QTextEdit 中
  370. # 添加停止选品和停止扫货的方法
  371. def stop_selection(self):
  372. QMessageBox.information(self, "停止选品", "选品操作已停止")
  373. def stop_shopping(self):
  374. QMessageBox.information(self, "停止扫货", "扫货操作已停止")
  375. def add_quality(self):
  376. dialog = QualityDialog(self, "添加品质")
  377. if dialog.exec():
  378. quality_name = dialog.quality_edit.text()
  379. quality_code = dialog.quality_code_edit.text()
  380. if quality_name and quality_code:
  381. item = QTreeWidgetItem(self.quality_tree_widget)
  382. item.setText(1, quality_name)
  383. item.setText(2, quality_code)
  384. checkbox = QCheckBox()
  385. checkbox.setChecked(False)
  386. self.quality_tree_widget.setItemWidget(item, 0, checkbox)
  387. def delete_quality(self):
  388. selected_items = self.quality_tree_widget.selectedItems()
  389. for item in selected_items:
  390. index = self.quality_tree_widget.indexOfTopLevelItem(item)
  391. if index != -1:
  392. self.quality_tree_widget.takeTopLevelItem(index)
  393. else:
  394. # 如果不是顶层项,递归删除子项
  395. parent = item.parent()
  396. if parent:
  397. parent.removeChild(item)
  398. def edit_quality(self):
  399. selected_items = self.quality_tree_widget.selectedItems()
  400. if len(selected_items) != 1:
  401. QMessageBox.warning(self, "编辑品质", "请选择一个品质进行编辑")
  402. return
  403. item = selected_items[0]
  404. dialog = QualityDialog(self, "编辑品质", item.text(1), item.text(2))
  405. if dialog.exec():
  406. new_quality_name = dialog.quality_edit.text()
  407. new_quality_code = dialog.quality_code_edit.text()
  408. if new_quality_name and new_quality_code:
  409. item.setText(1, new_quality_name)
  410. item.setText(2, new_quality_code)
  411. def add_type(self):
  412. dialog = TypeDialog(self, "添加种类")
  413. if dialog.exec():
  414. type_name = dialog.type_edit.text()
  415. type_code = dialog.type_code_edit.text()
  416. if type_name and type_code:
  417. item = QTreeWidgetItem(self.type_tree_widget)
  418. item.setText(1, type_name)
  419. item.setText(2, type_code)
  420. checkbox = QCheckBox()
  421. checkbox.setChecked(False)
  422. self.type_tree_widget.setItemWidget(item, 0, checkbox)
  423. def delete_type(self):
  424. selected_items = self.type_tree_widget.selectedItems()
  425. for item in selected_items:
  426. index = self.type_tree_widget.indexOfTopLevelItem(item)
  427. if index != -1:
  428. self.type_tree_widget.takeTopLevelItem(index)
  429. else:
  430. # 如果不是顶层项,递归删除子项
  431. parent = item.parent()
  432. if parent:
  433. parent.removeChild(item)
  434. def edit_type(self):
  435. selected_items = self.type_tree_widget.selectedItems()
  436. if len(selected_items) != 1:
  437. QMessageBox.warning(self, "编辑种类", "请选择一个种类进行编辑")
  438. return
  439. item = selected_items[0]
  440. dialog = TypeDialog(self, "编辑种类", item.text(1), item.text(2))
  441. if dialog.exec():
  442. new_type_name = dialog.type_edit.text()
  443. new_type_code = dialog.type_code_edit.text()
  444. if new_type_name and new_type_code:
  445. item.setText(1, new_type_name)
  446. item.setText(2, new_type_code)
  447. def add_appearance(self):
  448. dialog = AppearanceDialog(self, "添加外观")
  449. if dialog.exec():
  450. appearance_name = dialog.appearance_edit.text()
  451. appearance_code = dialog.appearance_code_edit.text()
  452. if appearance_name and appearance_code:
  453. item = QTreeWidgetItem(self.appearance_tree_widget)
  454. item.setText(1, appearance_name)
  455. item.setText(2, appearance_code)
  456. checkbox = QCheckBox()
  457. checkbox.setChecked(False)
  458. self.appearance_tree_widget.setItemWidget(item, 0, checkbox)
  459. def delete_appearance(self):
  460. selected_items = self.appearance_tree_widget.selectedItems()
  461. for item in selected_items:
  462. index = self.appearance_tree_widget.indexOfTopLevelItem(item)
  463. if index != -1:
  464. self.appearance_tree_widget.takeTopLevelItem(index)
  465. else:
  466. # 如果不是顶层项,递归删除子项
  467. parent = item.parent()
  468. if parent:
  469. parent.removeChild(item)
  470. def edit_appearance(self):
  471. selected_items = self.appearance_tree_widget.selectedItems()
  472. if len(selected_items) != 1:
  473. QMessageBox.warning(self, "编辑外观", "请选择一个外观进行编辑")
  474. return
  475. item = selected_items[0]
  476. dialog = AppearanceDialog(self, "编辑外观", item.text(1), item.text(2))
  477. if dialog.exec():
  478. new_appearance_name = dialog.appearance_edit.text()
  479. new_appearance_code = dialog.appearance_code_edit.text()
  480. if new_appearance_name and new_appearance_code:
  481. item.setText(1, new_appearance_name)
  482. item.setText(2, new_appearance_code)
  483. def add_favorite(self):
  484. dialog = FavoriteDialog(self, "添加收藏品")
  485. if dialog.exec():
  486. favorite_name = dialog.favorite_edit.text()
  487. favorite_code = dialog.favorite_code_edit.text()
  488. if favorite_name and favorite_code:
  489. item = QTreeWidgetItem(self.favorite_tree_widget)
  490. item.setText(1, favorite_name)
  491. item.setText(2, favorite_code)
  492. checkbox = QCheckBox()
  493. checkbox.setChecked(False)
  494. self.favorite_tree_widget.setItemWidget(item, 0, checkbox)
  495. def delete_favorite(self):
  496. selected_items = self.favorite_tree_widget.selectedItems()
  497. for item in selected_items:
  498. index = self.favorite_tree_widget.indexOfTopLevelItem(item)
  499. if index != -1:
  500. self.favorite_tree_widget.takeTopLevelItem(index)
  501. else:
  502. # 如果不是顶层项,递归删除子项
  503. parent = item.parent()
  504. if parent:
  505. parent.removeChild(item)
  506. def edit_favorite(self):
  507. selected_items = self.favorite_tree_widget.selectedItems()
  508. if len(selected_items) != 1:
  509. QMessageBox.warning(self, "编辑收藏品", "请选择一个收藏品进行编辑")
  510. return
  511. item = selected_items[0]
  512. dialog = FavoriteDialog(self, "编辑收藏品", item.text(1), item.text(2))
  513. if dialog.exec():
  514. new_favorite_name = dialog.favorite_edit.text()
  515. new_favorite_code = dialog.favorite_code_edit.text()
  516. if new_favorite_name and new_favorite_code:
  517. item.setText(1, new_favorite_name)
  518. item.setText(2, new_favorite_code)
  519. def setup_phone_edit_map(self):
  520. self.phone_edit_map = {}
  521. def create_category_info_form(self):
  522. layout = QVBoxLayout()
  523. layout.setAlignment(Qt.AlignmentFlag.AlignLeft) # 确保布局内容靠左对齐
  524. # 创建树形控件
  525. self.category_tree_widget = QTreeWidget()
  526. self.category_tree_widget.setHeaderLabels(["品类选择", "品类名称", "品类编码"])
  527. self.category_tree_widget.setColumnCount(3)
  528. self.category_tree_widget.setSelectionMode(QTreeWidget.SelectionMode.ExtendedSelection)
  529. self.category_tree_widget.setRootIsDecorated(True) # 启用根节点的装饰
  530. self.category_tree_widget.setAlternatingRowColors(True) # 设置交替行颜色
  531. self.category_tree_widget.setStyleSheet("QTreeWidget::item { padding: 5px; }") # 设置项的内边距
  532. # 启用复选框
  533. self.category_tree_widget.setColumnWidth(0, 50) # 设置品类选择列的宽度
  534. self.category_tree_widget.setColumnWidth(1, 300) # 设置品类名称列的宽度
  535. self.category_tree_widget.setColumnWidth(2, 150) # 设置品类编码列的宽度
  536. self.category_tree_widget.setHeaderItem(QTreeWidgetItem(["品类选择", "品类名称", "品类编码"])) # 设置表头
  537. self.category_tree_widget.header().setDefaultAlignment(Qt.AlignmentFlag.AlignLeft) # 设置表头对齐方式
  538. # 添加默认数据
  539. default_categories = [
  540. ("默认品类1", "001"),
  541. ("默认品类2", "002")
  542. ]
  543. for category_name, category_code in default_categories:
  544. item = QTreeWidgetItem(self.category_tree_widget)
  545. item.setText(1, category_name)
  546. item.setText(2, category_code)
  547. checkbox = QCheckBox()
  548. checkbox.setChecked(False)
  549. self.category_tree_widget.setItemWidget(item, 0, checkbox)
  550. layout.addWidget(self.category_tree_widget)
  551. # 创建按钮布局
  552. button_layout = QHBoxLayout()
  553. button_layout.setAlignment(Qt.AlignmentFlag.AlignLeft) # 确保按钮布局内容靠左对齐
  554. # 创建添加按钮
  555. add_button = QPushButton("添加")
  556. add_button.clicked.connect(self.add_category)
  557. button_layout.addWidget(add_button)
  558. # 创建删除按钮
  559. delete_button = QPushButton("删除")
  560. delete_button.clicked.connect(self.delete_category)
  561. button_layout.addWidget(delete_button)
  562. # 创建编辑按钮
  563. edit_button = QPushButton("编辑")
  564. edit_button.clicked.connect(self.edit_category)
  565. button_layout.addWidget(edit_button)
  566. layout.addLayout(button_layout)
  567. return layout
  568. def add_category(self):
  569. dialog = CategoryDialog(self, "添加类别")
  570. if dialog.exec():
  571. category_name = dialog.category_edit.text()
  572. category_code = dialog.category_code_edit.text()
  573. if category_name and category_code:
  574. item = QTreeWidgetItem(self.category_tree_widget)
  575. item.setText(1, category_name)
  576. item.setText(2, category_code)
  577. checkbox = QCheckBox()
  578. checkbox.setChecked(False)
  579. self.category_tree_widget.setItemWidget(item, 0, checkbox)
  580. def delete_category(self):
  581. selected_items = self.category_tree_widget.selectedItems()
  582. for item in selected_items:
  583. index = self.category_tree_widget.indexOfTopLevelItem(item)
  584. if index != -1:
  585. self.category_tree_widget.takeTopLevelItem(index)
  586. else:
  587. # 如果不是顶层项,递归删除子项
  588. parent = item.parent()
  589. if parent:
  590. parent.removeChild(item)
  591. def edit_category(self):
  592. selected_items = self.category_tree_widget.selectedItems()
  593. if len(selected_items) != 1:
  594. QMessageBox.warning(self, "编辑类别", "请选择一个类别进行编辑")
  595. return
  596. item = selected_items[0]
  597. dialog = CategoryDialog(self, "编辑类别", item.text(1), item.text(2))
  598. if dialog.exec():
  599. new_category_name = dialog.category_edit.text()
  600. new_category_code = dialog.category_code_edit.text()
  601. if new_category_name and new_category_code:
  602. item.setText(1, new_category_name)
  603. item.setText(2, new_category_code)
  604. class QualityDialog(QDialog):
  605. def __init__(self, parent=None, title="添加品质", initial_name="", initial_code=""):
  606. super().__init__(parent)
  607. self.setWindowTitle(title)
  608. self.setGeometry(100, 100, 400, 150)
  609. layout = QDialogVBoxLayout()
  610. # 品质名称输入框
  611. name_label = QLabel("品质名称")
  612. self.quality_edit = QDialogLineEdit()
  613. self.quality_edit.setText(initial_name)
  614. layout.addWidget(name_label)
  615. layout.addWidget(self.quality_edit)
  616. # 品质编码输入框
  617. code_label = QLabel("品质编码")
  618. self.quality_code_edit = QDialogLineEdit()
  619. self.quality_code_edit.setText(initial_code)
  620. layout.addWidget(code_label)
  621. layout.addWidget(self.quality_code_edit)
  622. button_box = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel)
  623. button_box.accepted.connect(self.accept)
  624. button_box.rejected.connect(self.reject)
  625. layout.addWidget(button_box)
  626. self.setLayout(layout)
  627. class TypeDialog(QDialog):
  628. def __init__(self, parent=None, title="添加种类", initial_name="", initial_code=""):
  629. super().__init__(parent)
  630. self.setWindowTitle(title)
  631. self.setGeometry(100, 100, 400, 150)
  632. layout = QDialogVBoxLayout()
  633. # type名称输入框
  634. name_label = QLabel("种类名称")
  635. self.type_edit = QDialogLineEdit()
  636. self.type_edit.setText(initial_name)
  637. layout.addWidget(name_label)
  638. layout.addWidget(self.type_edit)
  639. # type编码输入框
  640. code_label = QLabel("种类编码")
  641. self.type_code_edit = QDialogLineEdit()
  642. self.type_code_edit.setText(initial_code)
  643. layout.addWidget(code_label)
  644. layout.addWidget(self.type_code_edit)
  645. button_box = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel)
  646. button_box.accepted.connect(self.accept)
  647. button_box.rejected.connect(self.reject)
  648. layout.addWidget(button_box)
  649. self.setLayout(layout)
  650. class AppearanceDialog(QDialog):
  651. def __init__(self, parent=None, title="添加外观", initial_name="", initial_code=""):
  652. super().__init__(parent)
  653. self.setWindowTitle(title)
  654. self.setGeometry(100, 100, 400, 150)
  655. layout = QDialogVBoxLayout()
  656. # 外观名称输入框
  657. name_label = QLabel("外观名称")
  658. self.appearance_edit = QDialogLineEdit()
  659. self.appearance_edit.setText(initial_name)
  660. layout.addWidget(name_label)
  661. layout.addWidget(self.appearance_edit)
  662. # 外观编码输入框
  663. code_label = QLabel("外观编码")
  664. self.appearance_code_edit = QDialogLineEdit()
  665. self.appearance_code_edit.setText(initial_code)
  666. layout.addWidget(code_label)
  667. layout.addWidget(self.appearance_code_edit)
  668. button_box = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel)
  669. button_box.accepted.connect(self.accept)
  670. button_box.rejected.connect(self.reject)
  671. layout.addWidget(button_box)
  672. self.setLayout(layout)
  673. class FavoriteDialog(QDialog):
  674. def __init__(self, parent=None, title="添加收藏品", initial_name="", initial_code=""):
  675. super().__init__(parent)
  676. self.setWindowTitle(title)
  677. self.setGeometry(100, 100, 400, 150)
  678. layout = QDialogVBoxLayout()
  679. # 收藏品名称输入框
  680. name_label = QLabel("收藏品名称")
  681. self.favorite_edit = QDialogLineEdit()
  682. self.favorite_edit.setText(initial_name)
  683. layout.addWidget(name_label)
  684. layout.addWidget(self.favorite_edit)
  685. # 收藏品编码输入框
  686. code_label = QLabel("收藏品编码")
  687. self.favorite_code_edit = QDialogLineEdit()
  688. self.favorite_code_edit.setText(initial_code)
  689. layout.addWidget(code_label)
  690. layout.addWidget(self.favorite_code_edit)
  691. button_box = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel)
  692. button_box.accepted.connect(self.accept)
  693. button_box.rejected.connect(self.reject)
  694. layout.addWidget(button_box)
  695. self.setLayout(layout)
  696. class CategoryDialog(QDialog):
  697. def __init__(self, parent=None, title="添加类别", initial_name="", initial_code=""):
  698. super().__init__(parent)
  699. self.setWindowTitle(title)
  700. self.setGeometry(100, 100, 400, 150)
  701. layout = QDialogVBoxLayout()
  702. # 类别名称输入框
  703. name_label = QLabel("品类名称")
  704. self.category_edit = QDialogLineEdit()
  705. self.category_edit.setText(initial_name)
  706. layout.addWidget(name_label)
  707. layout.addWidget(self.category_edit)
  708. # 类别编码输入框
  709. code_label = QLabel("品类编码")
  710. self.category_code_edit = QDialogLineEdit()
  711. self.category_code_edit.setText(initial_code)
  712. layout.addWidget(code_label)
  713. layout.addWidget(self.category_code_edit)
  714. button_box = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel)
  715. button_box.accepted.connect(self.accept)
  716. button_box.rejected.connect(self.reject)
  717. layout.addWidget(button_box)
  718. self.setLayout(layout)
  719. if __name__ == "__main__":
  720. app = QApplication(sys.argv)
  721. window = MainWindow()
  722. window.show()
  723. sys.exit(app.exec())