Commit 695b7f6e authored by mayinghao's avatar mayinghao

初步修改添加产品管理页面

parent 74015538
...@@ -35,14 +35,18 @@ from multipleThread.config import * ...@@ -35,14 +35,18 @@ from multipleThread.config import *
user_now = '' user_now = ''
token = '' token = ''
# 工厂上传登录地址 # 工厂上传登录地址
login_url = 'https://emku.laidecloud.com/console/pc/userLoginByToken.ajax' login_url = 'https://uat.emku.laidecloud.com/console/pc/userLoginByToken.ajax'
# order信息地址 # order信息地址
order_info_url = "https://emku.laidecloud.com/console/productOrder/experimentOrderList.ajax" order_info_url = "https://uat.emku.laidecloud.com/console/productOrder/experimentOrderList.ajax"
# order detail # order detail
order_detail_url = "https://emku.laidecloud.com/console/productOrder/uploadorderdetail.ajax" order_detail_url = "https://uat.emku.laidecloud.com/console/productOrder/uploadorderdetail.ajax"
product_manager_url = "https://uat.emku.laidecloud.com/console/goods/goods_list.ajax"
#获取上传文件列表 #获取上传文件列表
fileupload_url = "https://emku.laidecloud.com/console/productOrder/onupload.ajax" fileupload_url = "https://uat.emku.laidecloud.com/console/productOrder/onupload.ajax"
# 未完成任务列表 # 未完成任务列表
job_list = {} job_list = {}
...@@ -610,6 +614,418 @@ class DeviceTableModel(QAbstractTableModel): ...@@ -610,6 +614,418 @@ class DeviceTableModel(QAbstractTableModel):
self.endResetModel() self.endResetModel()
class DeviceTableModel_product(QAbstractTableModel):
def __init__(self, data, headers, parent=None):
super().__init__(parent)
self._data = data
self._headers = headers
self._filtered_data = data.copy() # 添加过滤后的数据副本
def rowCount(self, parent=QModelIndex()):
return len(self._filtered_data)
def columnCount(self, parent=QModelIndex()):
return len(self._headers)
def data(self, index, role=Qt.DisplayRole):
if not index.isValid():
return None
row = index.row()
col = index.column()
# 表格有多少列就填写数字几
if role == Qt.DisplayRole:
if col >= 5: # 操作列不显示文本
return None
return self._filtered_data[row][col]
elif role == Qt.TextAlignmentRole:
return Qt.AlignCenter
elif role == Qt.BackgroundRole and col == 3:
return QColor(240, 240, 240)
return None
def headerData(self, section, orientation, role=Qt.DisplayRole):
if orientation == Qt.Horizontal and role == Qt.DisplayRole:
return self._headers[section]
return None
def flags(self, index):
flags = super().flags(index)
# 表格有多少列就填写数字几
if index.column() >= 5: # 操作列
flags |= Qt.ItemIsEditable
return flags
def filter_data(self, manufacturer):
print("filter_data")
print(self._data)
"""根据厂商过滤数据"""
self.beginResetModel()
print(manufacturer)
if manufacturer == "所有客户企业":
self._filtered_data = self._data.copy()
else:
self._filtered_data = [device for device in self._data if device[2] == manufacturer]
print(self._filtered_data)
self.endResetModel()
# 导航页
class NavigatorPage(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("导航页")
self.setGeometry(600, 700, 300, 400)
self.equ = None
# 创建垂直布局
layout = QVBoxLayout()
self.setLayout(layout)
menulist = ["订单信息", "产品管理"]
# 创建5个垂直排列的按钮
for i in range(0, 2):
button = QPushButton()
button.setText(menulist[i])
button.setStyleSheet("""
QPushButton {
padding: 15px;
font-size: 16px;
margin: 5px;
border: 1px solid #ccc;
border-radius: 5px;
}
QPushButton:hover {
background-color: #e0e0e0;
}
""")
button.clicked.connect(lambda checked, x=i: self.button_clicked(x))
layout.addWidget(button)
# 添加弹性空间使按钮靠上
layout.addStretch()
def button_clicked(self, button_num):
global token
if button_num == 0:
self.equ = EqipInfoWindow()
elif button_num == 1:
self.equ = productInfoWindow()
# headers = {'token': token,
# 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}
#
# datas = {"start": "0", "draw": "1", "length": str(10)}
# print(token)
# response = requests.post(product_manager_url, headers=headers, data=datas)
# data1 = response.json()
# #print(data1["obj"])
#
# result = []
# single_order = []
# product_info = data1["obj"]["pList"]["result"]
# order_property = ["id", "goods_name", "en_name", "goods_brand", "gc"]
#
# for j in product_info:
# for p in order_property:
# if p == "goods_brand":
# single_order.append(j["goods_brand"]["name"])
# elif p == "gc":
# single_order.append(j["gc"]["className"])
# else:
# single_order.append(j[p])
# result.append(single_order)
# single_order = []
# print(result)
#self.hide()
class productInfoWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("订单信息管理")
self.setGeometry(100, 100, 1500, 655)
# 每页订单数量
self.per_page_size = 10
# 必须文件夹
if not os.path.exists("./upload_tag"):
os.mkdir("./upload_tag")
# 详情页
self.detail_page = None
# 初始化第一页
datas = {"start": "0", "draw": "1", "length": str(self.per_page_size)}
headers = {'token': token,
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}
response = requests.post(product_manager_url, headers=headers, data=datas)
data1 = response.json()
product_info = data1["obj"]["pList"]["result"]
# 总订单数量
list_num = 200
order_property = ["id", "goods_name", "en_name", "goods_brand", "gc"]
# 处理数据
result = []
single_order = []
for j in product_info:
for p in order_property:
if p == "goods_brand":
single_order.append(j["goods_brand"]["name"])
elif p == "gc":
single_order.append(j["gc"]["className"])
else:
single_order.append(j[p])
result.append(single_order)
single_order = []
self.devices = result
central_widget = QWidget()
main_layout = QVBoxLayout(central_widget)
self.filter_layout = QHBoxLayout()
self.filter_label = QLabel("筛选客户企业:")
self.brand_combo = QComboBox()
# 页码选择
self.page_num_label = QLabel("选择页码")
self.page_list_combo = QComboBox()
self.page_list_combo.setFixedSize(80, 20)
self.filter_layout.addWidget(self.filter_label)
self.filter_layout.addWidget(self.brand_combo)
self.filter_layout.addWidget(self.page_num_label)
self.filter_layout.addWidget(self.page_list_combo)
self.filter_layout.addStretch()
self.refresh_button = QPushButton("刷新页面")
self.refresh_button.setContentsMargins(0, 0, 60, 0)
self.filter_layout.addWidget(self.refresh_button)
self.refresh_button.clicked.connect(lambda: (self.update_page_info(1), self.page_list_combo.setCurrentIndex(0)))
main_layout.addLayout(self.filter_layout)
# 获取所有品牌并去重,添加"所有品牌"选项
brands = list(set(device[2] for device in self.devices))
brands.insert(0, "所有客户企业")
self.brand_combo.addItems(brands)
self.brand_combo.currentTextChanged.connect(self.filter_devices)
page_list = [str(x) for x in range(1, self.get_total_page(list_num)+1)]
self.page_list_combo.addItems(page_list)
self.page_list_combo.currentTextChanged.connect(self.update_page_info)
self.headers = ["id", "商品名称", "英文名称", "品牌", "分类名", "上传", "上传"]
self.station_code = {1: "设计", 2: "生产", 3: "售后", 4: "采购", 5: "品保"}
self.order_status_code = {1: "进行中", 2: "已完成", 0: "未开始"}
# 创建模型和视图
self.model = DeviceTableModel_product(self.devices, self.headers)
self.table_view = QTableView()
self.table_view.setModel(self.model)
# 设置表格属性
self.table_view.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.table_view.verticalHeader().setVisible(False)
self.table_view.setSelectionBehavior(QTableView.SelectRows)
self.table_view.setEditTriggers(QTableView.NoEditTriggers)
self.table_view.setColumnHidden(0, True)
# 为操作列添加按钮
for row in range(len(self.devices)):
self.add_operation_buttons(row)
# 布局
main_layout.addWidget(self.table_view)
self.status_label = QLabel()
main_layout.addWidget(self.status_label)
time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
info_append = f"{time_str} 第1页\n"
self.status_label.setText(info_append)
self.setCentralWidget(central_widget)
self.show()
# 更新列表信息
def update_page_info(self, page_num):
page_select_num = int(page_num)
start = (page_select_num-1)*self.per_page_size
datas = {"start": str(start), "draw": str(page_select_num), "length": str(self.per_page_size)}
headers = {'token': token,
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}
response = requests.post(product_manager_url, headers=headers, data=datas)
data1 = response.json()
product_info = data1["obj"]["pList"]["result"]
# 总订单数量
list_num = 200
order_property = ["id", "goods_name", "en_name", "goods_brand", "gc"]
# 处理数据
result = []
single_order = []
for j in product_info:
for p in order_property:
if p == "goods_brand":
single_order.append(j["goods_brand"]["name"])
elif p == "gc":
single_order.append(j["gc"]["className"])
else:
single_order.append(j[p])
result.append(single_order)
single_order = []
self.devices = result
self.model = DeviceTableModel_product(self.devices, self.headers)
self.table_view.setModel(self.model)
time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
info_append = f"{time_str} 第{page_num}页\n"
self.status_label.setText(info_append)
# 更新品牌列表
brands = list(set(device[2] for device in self.devices))
brands.insert(0, "所有客户企业")
self.brand_combo.clear()
self.brand_combo.addItems(brands)
self.brand_combo.currentTextChanged.connect(self.filter_devices)
for row in range(len(self.devices)):
self.add_operation_buttons(row)
def get_total_page(self, total):
if total % self.per_page_size == 0:
return int(total/self.per_page_size)
else:
return int(total/self.per_page_size)+1
# 厂商选择
def filter_devices(self, manufacturer):
"""根据选择的品牌过滤设备"""
print("change")
self.model.filter_data(manufacturer)
self.update_operation_buttons()
def update_operation_buttons(self):
"""更新所有行的操作按钮"""
for row in range(self.model.rowCount()):
self.add_operation_buttons(row)
def add_operation_buttons(self, row):
# 创建操作按钮
btn_edit = QPushButton("生产资料")
# 设置按钮样式
btn_edit.setStyleSheet("background-color: #4CAF50; color: white;")
# 设置按钮大小
btn_edit.setFixedSize(60, 25)
# 创建按钮布局
btn_widget = QWidget()
btn_layout = QHBoxLayout(btn_widget)
btn_layout.addWidget(btn_edit)
btn_layout.setContentsMargins(5, 2, 5, 2)
btn_layout.setSpacing(5)
# 将按钮布局添加到表格第5列
self.table_view.setIndexWidget(
self.model.index(row, 5),
btn_widget
)
btn_edit2 = QPushButton("设计资料")
# 设置按钮样式
btn_edit2.setStyleSheet("background-color: #4CAF50; color: white;")
# 设置按钮大小
btn_edit2.setFixedSize(60, 25)
btn_widget2 = QWidget()
btn_layout2 = QHBoxLayout(btn_widget2)
btn_layout2.addWidget(btn_edit2)
btn_layout2.setContentsMargins(5, 2, 5, 2)
btn_layout2.setSpacing(5)
self.table_view.setIndexWidget(
self.model.index(row, 6),
btn_widget2
)
# 连接信号
btn_edit.clicked.connect(lambda _, r=row: self.edit_device(r))
def nanoseconds_to_date(self, nano_seconds):
timestamp = nano_seconds / 1000
str_date = datetime.datetime.utcfromtimestamp(timestamp).strftime("%Y-%m-%d %H-%M-%S")
return str_date
def handle_close(self):
self.detail_page = None
def edit_device(self, row):
print(self.detail_page)
filtered_device = self.model._filtered_data[row]
# 查找第一个匹配项
original_index = next(i for i, device in enumerate(self.devices) if device[0] == filtered_device[0])
if self.detail_page is None:
datas = {"id": str(self.devices[original_index][0])}
headers = {'token': token,
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}
response = requests.post(order_detail_url, headers=headers, data=datas)
if response.text != "":
print(response.text)
data1 = response.json()
print(data1)
all_orders = []
if len(data1["obj"]["allChilds"]) == 0:
QMessageBox.information(self, "提示", "该项没有其他子订单")
return
for j in data1["obj"]["allChilds"]:
if j["expect_finishtime"] is not None:
expect_date = self.nanoseconds_to_date(j["expect_finishtime"])
else:
expect_date = ""
if j["actual_finishtime"] is not None:
actual_time = self.nanoseconds_to_date(j["actual_finishtime"])
else:
actual_time = ""
order_id = j["id"]
station_true_name = j["station_ture_name"]
if j["userName"] is None:
j["userName"] = ""
if j["trueName"] is None:
j["trueName"] = ""
full_name = j["userName"] + j["trueName"]
order_status = self.order_status_code[j["order_status"]]
tzFiles = []
if len(j["tzFiles"]) > 0:
for file in j["tzFiles"]:
tzFiles.append([station_true_name, file['info'], nanoseconds_to_date(file['addTime']), "图纸文件"])
if len(j["lcFiles"]) > 0:
for file in j["lcFiles"]:
tzFiles.append([station_true_name, file['info'], nanoseconds_to_date(file['addTime']), "BOM文件"])
all_orders.append([order_id, station_true_name, full_name, order_status, expect_date, actual_time, tzFiles])
self.detail_page = OrderDetail(all_orders,self.devices[original_index][0])
self.detail_page.destroyed.connect(self.handle_close)
self.detail_page.show()
else:
QMessageBox.information(self, "提示", "该项没有其他子订单")
else:
self.detail_page.raise_()
self.detail_page.activateWindow()
class EqipInfoWindow(QMainWindow): class EqipInfoWindow(QMainWindow):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
...@@ -836,7 +1252,9 @@ class EqipInfoWindow(QMainWindow): ...@@ -836,7 +1252,9 @@ class EqipInfoWindow(QMainWindow):
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"} 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}
response = requests.post(order_detail_url, headers=headers, data=datas) response = requests.post(order_detail_url, headers=headers, data=datas)
if response.text != "": if response.text != "":
print(response.text)
data1 = response.json() data1 = response.json()
print(data1)
all_orders = [] all_orders = []
if len(data1["obj"]["allChilds"]) == 0: if len(data1["obj"]["allChilds"]) == 0:
QMessageBox.information(self, "提示", "该项没有其他子订单") QMessageBox.information(self, "提示", "该项没有其他子订单")
...@@ -958,6 +1376,7 @@ class LoginWindow(QMainWindow): ...@@ -958,6 +1376,7 @@ class LoginWindow(QMainWindow):
try: try:
response = requests.post(login_url, data=myobj) response = requests.post(login_url, data=myobj)
data = response.json() data = response.json()
print(data)
if data['resMsg'] == "登录成功": if data['resMsg'] == "登录成功":
global user_now, token global user_now, token
user_now = account user_now = account
...@@ -977,6 +1396,12 @@ class LoginWindow(QMainWindow): ...@@ -977,6 +1396,12 @@ class LoginWindow(QMainWindow):
self.pm.add_password("one",account, password, keep_username, keep_password) self.pm.add_password("one",account, password, keep_username, keep_password)
except Exception as e: except Exception as e:
print(e) print(e)
# 有产品管理权限
if data["obj"]["showFlag"]:
self.navigatorPage = NavigatorPage()
self.navigatorPage.show()
else:
self.order_info_page = EqipInfoWindow() self.order_info_page = EqipInfoWindow()
self.order_info_page.show() self.order_info_page.show()
self.close() self.close()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment