Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
EMUAFactory
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mayinghao
EMUAFactory
Commits
695b7f6e
Commit
695b7f6e
authored
Sep 25, 2025
by
mayinghao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
初步修改添加产品管理页面
parent
74015538
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
431 additions
and
6 deletions
+431
-6
main.py
main.py
+431
-6
No files found.
main.py
View file @
695b7f6e
...
...
@@ -35,14 +35,18 @@ from multipleThread.config import *
user_now
=
''
token
=
''
# 工厂上传登录地址
login_url
=
'https://emku.laidecloud.com/console/pc/userLoginByToken.ajax'
login_url
=
'https://
uat.
emku.laidecloud.com/console/pc/userLoginByToken.ajax'
# 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_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
=
{}
...
...
@@ -610,6 +614,418 @@ class DeviceTableModel(QAbstractTableModel):
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
):
def
__init__
(
self
):
super
()
.
__init__
()
...
...
@@ -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"
}
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
,
"提示"
,
"该项没有其他子订单"
)
...
...
@@ -958,6 +1376,7 @@ class LoginWindow(QMainWindow):
try
:
response
=
requests
.
post
(
login_url
,
data
=
myobj
)
data
=
response
.
json
()
print
(
data
)
if
data
[
'resMsg'
]
==
"登录成功"
:
global
user_now
,
token
user_now
=
account
...
...
@@ -977,6 +1396,12 @@ class LoginWindow(QMainWindow):
self
.
pm
.
add_password
(
"one"
,
account
,
password
,
keep_username
,
keep_password
)
except
Exception
as
e
:
print
(
e
)
# 有产品管理权限
if
data
[
"obj"
][
"showFlag"
]:
self
.
navigatorPage
=
NavigatorPage
()
self
.
navigatorPage
.
show
()
else
:
self
.
order_info_page
=
EqipInfoWindow
()
self
.
order_info_page
.
show
()
self
.
close
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment