Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
T
TF-MOM-WEB
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
TFMOM
TF-MOM-WEB
Commits
e3f9c11b
Commit
e3f9c11b
authored
Jul 09, 2024
by
jingnan
👀
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
实物构型管理功能开发代码暂存
parent
de6b238c
Show whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
3852 additions
and
4 deletions
+3852
-4
u118.png
applications/architecture-dee/public/icons/u118.png
+0
-0
u123.png
applications/architecture-dee/public/icons/u123.png
+0
-0
u126.png
applications/architecture-dee/public/icons/u126.png
+0
-0
u156.png
applications/architecture-dee/public/icons/u156.png
+0
-0
u188.png
applications/architecture-dee/public/icons/u188.png
+0
-0
u212.svg
applications/architecture-dee/public/icons/u212.svg
+6
-0
u96.png
applications/architecture-dee/public/icons/u96.png
+0
-0
inventory.js
applications/dee-mes/src/api/inventory.js
+239
-0
Form.vue
...nents/physicalConfigurationManagement/components/Form.vue
+155
-0
Tree.vue
...nents/physicalConfigurationManagement/components/Tree.vue
+560
-0
left.vue
...nents/physicalConfigurationManagement/components/left.vue
+257
-0
index.vue
...icalConfigurationManagement/components/material/index.vue
+323
-0
table.vue
...icalConfigurationManagement/components/material/table.vue
+220
-0
index.vue
...sicalConfigurationManagement/components/preview/index.vue
+104
-0
index.vue
...sicalConfigurationManagement/components/quality/index.vue
+322
-0
table.vue
...sicalConfigurationManagement/components/quality/table.vue
+128
-0
right.vue
...ents/physicalConfigurationManagement/components/right.vue
+134
-0
index.vue
...icalConfigurationManagement/components/schedule/index.vue
+261
-0
table.vue
...icalConfigurationManagement/components/schedule/table.vue
+200
-0
dialog.vue
...calConfigurationManagement/components/supplier/dialog.vue
+155
-0
index.vue
...icalConfigurationManagement/components/supplier/index.vue
+72
-0
table.vue
...icalConfigurationManagement/components/supplier/table.vue
+501
-0
index.vue
...ents/components/physicalConfigurationManagement/index.vue
+211
-0
apply-app.vue
.../dee-task-center/src/views/home/compontents/apply-app.vue
+4
-4
No files found.
applications/architecture-dee/public/icons/u118.png
0 → 100644
View file @
e3f9c11b
1.08 KB
applications/architecture-dee/public/icons/u123.png
0 → 100644
View file @
e3f9c11b
1.29 KB
applications/architecture-dee/public/icons/u126.png
0 → 100644
View file @
e3f9c11b
1.54 KB
applications/architecture-dee/public/icons/u156.png
0 → 100644
View file @
e3f9c11b
1.14 KB
applications/architecture-dee/public/icons/u188.png
0 → 100644
View file @
e3f9c11b
1.39 KB
applications/architecture-dee/public/icons/u212.svg
0 → 100644
View file @
e3f9c11b
<?xml version="1.0" encoding="utf-8"?>
<svg
version=
"1.1"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"28px"
height=
"26px"
xmlns=
"http://www.w3.org/2000/svg"
>
<g
transform=
"matrix(1 0 0 1 -499 -486 )"
>
<path
d=
"M 26.5714285714287 5.19661458333337 C 26.9971988795519 5.36588541666663 27.327731092437 5.60850694444446 27.5630252100841 5.92447916666663 C 28.0112044817927 6.56770833333337 28.1120448179272 7.29557291666663 27.8655462184875 8.10807291666663 L 23.2436974789916 23.4440104166666 C 23.0308123249299 24.1662326388889 22.6022408963586 24.7727864583334 21.9579831932774 25.263671875 C 21.313725490196 25.7545572916666 20.6274509803923 26 19.8991596638655 26 L 4.38655462184875 26 C 3.52380952380963 26 2.6918767507002 25.6981336805555 1.89075630252091 25.0944010416666 C 1.08963585434185 24.4906684027778 0.532212885153967 23.7486979166666 0.218487394957947 22.8684895833334 C -0.0504201680671486 22.1124131944445 -0.0616246498600503 21.3958333333334 0.184873949579924 20.71875 C 0.184873949579924 20.6736111111111 0.201680672268822 20.5212673611111 0.235294117647072 20.26171875 C 0.268907563025323 20.0021701388889 0.291316526610672 19.7934027777778 0.302521008403346 19.6354166666666 C 0.31372549019602 19.5451388888889 0.296918767506895 19.423828125 0.252100840336198 19.271484375 C 0.207282913165272 19.119140625 0.190476190476147 19.0091145833334 0.201680672268822 18.94140625 C 0.224089635854398 18.8172743055555 0.268907563025323 18.6987847222222 0.336134453781597 18.5859375 C 0.403361344537871 18.4730902777778 0.495798319327832 18.3404947916666 0.613445378151255 18.1881510416666 C 0.731092436974677 18.0358072916666 0.823529411764639 17.9032118055555 0.890756302520913 17.7903645833334 C 1.14845938375356 17.3615451388889 1.40056022408953 16.8452690972222 1.64705882352951 16.2415364583334 C 1.89355742296925 15.6378038194445 2.06162464986005 15.1215277777778 2.15126050420167 14.6927083333334 C 2.18487394957992 14.5798611111111 2.18767507002804 14.4105902777778 2.15966386554624 14.1848958333334 C 2.13165266106444 13.9592013888889 2.12885154061632 13.8012152777778 2.15126050420167 13.7109375 C 2.18487394957992 13.5868055555555 2.280112044818 13.4288194444445 2.43697478991589 13.2369791666666 C 2.59383753501402 13.0451388888889 2.68907563025209 12.9153645833334 2.72268907563034 12.84765625 C 2.95798319327741 12.44140625 3.19327731092426 11.9223090277778 3.42857142857133 11.2903645833334 C 3.6638655462184 10.6584201388889 3.8039215686274 10.1506076388889 3.84873949579833 9.76692708333337 C 3.859943977591 9.66536458333337 3.84593837535022 9.48480902777783 3.80672268907574 9.22526041666663 C 3.76750700280104 8.96571180555554 3.77030812324938 8.80772569444446 3.81512605042008 8.75130208333337 C 3.859943977591 8.60460069444446 3.98319327731087 8.43250868055554 4.18487394957992 8.23502604166663 C 4.38655462184875 8.03754340277783 4.50980392156862 7.91059027777783 4.55462184873954 7.85416666666663 C 4.76750700280104 7.56076388888892 5.00560224089645 7.083984375 5.26890756302532 6.423828125 C 5.53221288515397 5.763671875 5.68627450980398 5.21918402777783 5.73109243697468 4.79036458333337 C 5.74229691876758 4.70008680555554 5.72549019607845 4.55620659722217 5.68067226890753 4.35872395833337 C 5.6358543417366 4.16124131944446 5.62464985994393 4.01171875 5.64705882352951 3.91015625 C 5.66946778711485 3.81987847222217 5.719887955182 3.71831597222217 5.79831932773118 3.60546875 C 5.87675070028013 3.49262152777783 5.97759103641465 3.36284722222217 6.10084033613452 3.21614583333337 C 6.2240896358544 3.06944444444446 6.31932773109247 2.95095486111109 6.38655462184875 2.86067708333331 C 6.47619047619037 2.72526041666669 6.56862745098033 2.55316840277777 6.6638655462184 2.34440104166669 C 6.75910364145648 2.13563368055554 6.84313725490188 1.93815104166669 6.9159663865546 1.751953125 C 6.98879551820733 1.56575520833331 7.07843137254895 1.36263020833331 7.18487394957992 1.142578125 C 7.29131652661067 0.922526041666686 7.40056022408953 0.741970486111086 7.51260504201673 0.600911458333314 C 7.62464985994393 0.459852430555543 7.77310924369749 0.327256944444457 7.95798319327741 0.203125 C 8.14285714285711 0.0789930555555429 8.34453781512616 0.0141059027777715 8.56302521008411 0.00846354166668561 C 8.78151260504205 0.00282118055554292 9.04761904761904 0.0338541666666856 9.36134453781506 0.1015625 L 9.34453781512616 0.15234375 C 9.77030812324938 0.05078125 10.0560224089636 0 10.2016806722688 0 L 22.9915966386554 0 C 23.8207282913165 0 24.4593837535015 0.315972222222229 24.90756302521 0.947916666666686 C 25.3557422969188 1.57986111111109 25.4565826330531 2.31336805555554 25.2100840336134 3.1484375 L 20.6050420168067 18.484375 C 20.2016806722688 19.8272569444445 19.8011204481793 20.693359375 19.4033613445379 21.0826822916666 C 19.0056022408965 21.4720052083334 18.2857142857142 21.6666666666666 17.2436974789916 21.6666666666666 L 2.63865546218494 21.6666666666666 C 2.3361344537816 21.6666666666666 2.12324929971987 21.7513020833334 2 21.9205729166666 C 1.87675070028013 22.1011284722222 1.87114845938368 22.34375 1.98319327731087 22.6484375 C 2.2521008403362 23.4383680555555 3.05882352941171 23.8333333333334 4.40336134453787 23.8333333333334 L 19.9159663865546 23.8333333333334 C 20.2408963585435 23.8333333333334 20.5546218487395 23.7458767361111 20.8571428571429 23.5709635416666 C 21.1596638655462 23.3960503472222 21.3557422969188 23.1618923611111 21.4453781512605 22.8684895833334 L 26.4873949579833 6.16145833333337 C 26.5658263305322 5.91319444444446 26.593837535014 5.59157986111109 26.5714285714287 5.19661458333337 Z M 10.0336134453783 4.875 L 9.68067226890753 5.95833333333337 C 9.6358543417366 6.10503472222217 9.64705882352951 6.23198784722217 9.71428571428578 6.33919270833337 C 9.78151260504205 6.44639756944446 9.89355742296925 6.5 10.0504201680671 7 L 20.2689075630251 7 C 20.4145658263305 6.5 20.5574229691877 6.44639756944446 20.6974789915967 6.33919270833337 C 20.8375350140057 6.23198784722217 20.9299719887956 6.10503472222217 20.9747899159663 5.95833333333337 L 21.327731092437 4.875 C 21.372549019608 4.72829861111109 21.3613445378151 4.60134548611109 21.2941176470588 4.494140625 C 21.2268907563025 4.38693576388891 21.1148459383753 4.33333333333337 20.9579831932774 4.33333333333337 L 10.7394957983192 4.33333333333337 C 10.593837535014 4.33333333333337 10.4509803921569 4.38693576388891 10.3109243697479 4.494140625 C 10.1708683473389 4.60134548611109 10.0784313725489 4.72829861111109 10.0336134453783 4.875 Z M 8.63865546218494 9.20833333333337 L 8.28571428571422 10.2916666666666 C 8.24089635854352 10.4383680555555 8.2521008403362 10.5653211805555 8.31932773109247 10.6725260416666 C 8.38655462184875 10.7797309027778 8.49859943977594 10.8333333333334 8.65546218487384 11 L 18.873949579832 11 C 19.0196078431372 10.8333333333334 19.1624649859943 10.7797309027778 19.3025210084033 10.6725260416666 C 19.4425770308123 10.5653211805555 19.5350140056023 10.4383680555555 19.579831932773 10.2916666666666 L 19.9327731092437 9.20833333333337 C 19.9775910364147 9.06163194444446 19.9663865546217 8.93467881944446 19.8991596638655 8.82747395833337 C 19.8319327731092 8.72026909722217 19.719887955182 8.66666666666663 19.5630252100841 9 L 9.34453781512616 9 C 9.19887955182071 8.66666666666663 9.0560224089636 8.72026909722217 8.9159663865546 8.82747395833337 C 8.7759103641456 8.93467881944446 8.68347338935564 9.06163194444446 8.63865546218494 9.20833333333337 Z "
fill-rule=
"nonzero"
fill=
"#9dc3e6"
stroke=
"none"
transform=
"matrix(1 0 0 1 499 486 )"
/>
</g>
</svg>
\ No newline at end of file
applications/architecture-dee/public/icons/u96.png
0 → 100644
View file @
e3f9c11b
1.51 KB
applications/dee-mes/src/api/inventory.js
0 → 100644
View file @
e3f9c11b
/*
* @Author: gjn
* @Date: 2024-07-08 10:39:44
* @Description:
*/
import
{
post
,
del
,
put
,
downloadPDF
}
from
'../utils/http.js'
/**
* 库存台账
*/
// 查询库存台账
export
function
getInventoryList
(
params
)
{
return
post
(
'/Inventory/find/recursion'
,
params
)
}
// 查询库存台账
export
function
getCustomInventoryList
(
params
)
{
return
post
(
'/Inventory/list/recursion'
,
params
)
}
/**
* 库存流水
*/
// 查询库存流水台账
export
function
getInventoryFlowList
(
params
)
{
return
post
(
'/InventoryFlow/find/recursion'
,
params
)
}
// 查询库存流水台账
export
function
getCustomInventoryFlowList
(
params
)
{
return
post
(
'/InventoryFlow/list/recursion'
,
params
)
}
/**
*不合格/试验报废数查询
*/
// 不合格数查询
export
function
getUnacceptedTable
(
params
)
{
return
post
(
'/DxWorkflowTask/listCustomQueryByNoPass/findTest'
,
params
)
}
// 试验报废查询
export
function
getScrappedTable
(
params
)
{
return
post
(
'/DxWorkflowTask/listCustomQueryIsDestroy/findExperment'
,
params
)
}
/**
* 入厂检验
*/
// 查询入厂检验的表单
export
function
getInStorageRequestList
(
params
)
{
return
post
(
'/DxWorkflowTask/inStorageTestTaskList'
,
params
)
}
export
function
getInStorageRequestListAmount
(
params
)
{
return
post
(
'/DxWorkflowTask/inStorageTestTaskList/amount'
,
params
)
}
// 验收单保存
export
function
saveCheckNo
(
params
)
{
return
post
(
'/JobResponseInTest/recursion'
,
params
)
}
// 验收单初始化
export
function
getCheckNoList
(
params
)
{
return
post
(
'/JobResponseInTest/find/recursion'
,
params
)
}
// 入厂试验附件保存
export
function
saveExpe
(
params
)
{
return
post
(
'/JobResponseInStorage/recursion'
,
params
)
}
// 入厂试验附件初始化
export
function
getExpeList
(
params
)
{
return
post
(
'/JobResponseInStorage/find/recursion'
,
params
)
}
// 驳回
export
function
reject
(
params
,
reason
)
{
return
post
(
`/DxWorkflowTask/apply/reject?taskIds=
${
params
.
join
(
','
)}
&assignee=
${
localStorage
.
getItem
(
'userId'
)}
&backReason=
${
reason
}
`
,
{})
}
// 检验界面驳回
export
function
inspectReject
(
params
)
{
return
post
(
`/DxWorkflowTask/apply/reject/all`
,
params
)
}
// 入厂检验界面检验完成
export
function
inspectPass
(
params
)
{
return
post
(
`/StorageRequestItem/purchaseApply/change/tranGm403BillItemInfoVo`
,
params
)
}
// 检验完成
export
function
pass
(
params
)
{
return
post
(
`/DxWorkflowTask/apply/pass?taskIds=
${
params
.
join
(
','
)}
&assignee=
${
localStorage
.
getItem
(
'userId'
)}
`
,
{})
}
// 检验申请
export
function
check
(
params
,
userIds
)
{
//
return
post
(
`/StorageRequestItem/purchaseApply/check?taskIds=
${
params
.
join
(
','
)}
&assignee=
${
localStorage
.
getItem
(
'userId'
)}
&userIds=
${
userIds
.
join
(
','
)}
`
,
{})
}
// 试验申请
export
function
experiment
(
params
,
userIds
)
{
return
post
(
`/StorageRequestItem/purchaseApply/experiment?taskIds=
${
params
.
join
(
','
)}
&assignee=
${
localStorage
.
getItem
(
'userId'
)}
&userIds=
${
userIds
.
join
(
','
)}
`
,
{})
}
// 例外放行
export
function
except
(
params
)
{
return
post
(
`/StorageRequestItem/purchaseApply/except?taskIds=
${
params
.
join
(
','
)}
&assignee=
${
localStorage
.
getItem
(
'userId'
)}
`
,
{})
}
// 判断选中的数据是否已经走过例外放行申请
export
function
getExcept
(
params
)
{
return
post
(
`/StorageRequestItem/getExceptIds?itemIds=
${
params
.
join
(
','
)}
`
,
{})
}
// 基准路径
export
function
downloadPdfHandle
()
{
return
downloadPDF
()
}
/**
* 供外出库
*/
// 出库
// export function searchOutStorage(params) {
// return post(`/OutStorageRequest/find/recursion`, params)
// }
// 我的待办,己办任务,办结任务 //领用出库and配套出库and供外出库
export
function
searchOutStorageTask
(
params
)
{
return
post
(
`/OutStorageRequest/list/task`
,
params
)
}
// 我的请求 ////领用出库and配套出库and供外出库
export
function
searchSelfRequest
(
params
)
{
return
post
(
`/OutStorageRequest/selfRequest`
,
params
)
}
export
function
searchOutStorage
(
params
)
{
return
post
(
`/OutStorageRequest/userAndOutList/findRecursion`
,
params
)
}
// 领用出库审核查询
export
function
searchOutStorageExamine
(
params
)
{
return
post
(
`/DxWorkflowTask/outStorageTaskList`
,
params
)
}
// 供外出库审核
export
function
externalDeliveryApproval
(
params
)
{
return
post
(
`/OutStorageRequest/getAllByUrlName`
,
params
)
}
// 新增
export
function
outStorageAdd
(
params
)
{
return
post
(
`/OutStorageRequest/recursion`
,
params
)
}
export
function
outStorageAddUpdate
(
id
,
params
)
{
return
post
(
`/StorageRequestItem/saveUse?outId=
${
id
}
`
,
params
)
}
// 编辑`
export
function
outStorageEdit
(
params
)
{
return
put
(
`/OutStorageRequest`
,
params
)
}
// 查询库房
export
function
DxProductUnitUsageLink
(
params
)
{
return
post
(
`/DxProductUnitUsageLink/find/recursion`
,
params
)
}
// 单个删除
export
function
outStorageDel
(
id
)
{
return
post
(
`/OutStorageRequest/purchaseApply/delete?ids=
${
id
}
`
)
}
// 申请明细
// 查询
export
function
searchStorageRequest
(
params
)
{
return
post
(
`/StorageRequestItem/find/recursion`
,
params
)
}
// 单个删除
export
function
storageRequestDel
(
id
)
{
return
del
(
`/StorageRequestItem/
${
id
}
`
)
}
// 机型代码接口
export
function
getAircraftType
(
params
)
{
return
post
(
'/DxProductDef/find/recursion'
,
params
)
}
// 物料查询
export
function
getDxProcessMaterial
(
params
)
{
return
post
(
'/DxProcessMaterial/find/recursion'
,
params
)
}
// 子表删除
export
function
removeMaterial
(
params
)
{
return
post
(
'/InventoryRequestUsageLink/recursion'
,
params
)
}
// 供外出库申请
// 提交申请
export
function
submitOutPass
(
params
,
userIds
)
{
return
post
(
`/OutStorageRequest/outApply/submit?applyIds=
${
params
.
join
(
','
)}
&assignee=
${
localStorage
.
getItem
(
'userId'
)}
&userIdList=
${
userIds
}
`
)
}
// 提交申请
export
function
submitPass
(
params
)
{
return
post
(
`/OutStorageRequest/outApply/submit?applyIds=
${
params
.
join
(
','
)}
&assignee=
${
localStorage
.
getItem
(
'userId'
)}
`
)
}
// 驳回
export
function
rejectOutStorage
(
params
,
reason
)
{
return
post
(
`OutStorageRequest/apply/back?applyIds=
${
params
.
join
(
','
)}
&assignee=
${
localStorage
.
getItem
(
'userId'
)}
&backReason=
${
reason
}
`
)
}
// 领用校验是否存在申请明细
export
function
OutStorageRequestCheck
(
params
)
{
return
post
(
`/OutStorageRequest/reviewRequestApplicationBefore/check?outStorageRequestIds=
${
params
.
join
(
','
)}
`
)
}
// 三期处理台账查询
export
function
InStorageExpireInventory
(
params
)
{
return
post
(
'/DxWorkflowTask/outStorageTaskList'
,
params
)
}
// 三期处理申请
export
function
InStorageExpireApply
(
params
)
{
return
post
(
'/InventoryRequestExpire/threeStageTreatment/dealWith'
,
params
)
}
// 通过当前明细的id获取流程任务的id
export
function
getProcessId
(
params
)
{
return
post
(
`/DxProcessOperation/find/recursion`
,
params
)
}
// 装配执行 编辑器 附件上传 获取
export
function
assemblyExecutionUpload
(
params
)
{
return
post
(
`/DxProcessOperation/find/recursion`
,
params
)
}
// 装配执行 编辑器 附件上传 保存
export
function
AttachmentPreservation
(
params
)
{
return
post
(
`/DxProcessOperation/recursion`
,
params
)
}
/**
* 召回处理数据获取
* @param {*} params
* @returns
*/
export
function
recallProcess
(
params
)
{
return
post
(
'/DxWorkflowTask/outStorageTaskLists'
,
params
)
}
applications/dee-mes/src/privateComponents/components/physicalConfigurationManagement/components/Form.vue
0 → 100644
View file @
e3f9c11b
<
template
>
<section>
<div
class=
"physicalConfigurationManagement-from"
>
<div
class=
"icon-wrapper"
>
<img
src=
"/icons/r-access.png"
class=
"icon"
>
<span>
架次查询
</span>
</div>
<el-form
ref=
"ruleForm"
:model=
"form"
label-width=
"70px"
>
<el-form-item
label=
"机型:"
prop=
"model"
>
<el-select
v-model=
"form.model"
clearable
@
change=
"getAddRecursion"
>
<el-option
v-for=
"item in dataModel"
:key=
"item.id"
:label=
"item.resName"
:value=
"item.resCode"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"架次:"
prop=
"sortie"
>
<el-select
v-model=
"form.sortie"
filterable
clearable
:loading=
"sortiesLoading"
@
change=
"getTreeData"
>
<el-option
v-for=
"item in dataSortie"
:key=
"item.id"
:label=
"item.serialNo"
:value=
"item.serialNo"
/>
</el-select>
</el-form-item>
</el-form>
</div>
</section>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
form
:
{
model
:
''
,
sortie
:
''
},
dataModel
:
[],
sortiesLoading
:
true
,
dataSortie
:
[],
isCollapse
:
false
}
},
mounted
()
{
this
.
getModelData
()
},
methods
:
{
/**
* 获取机型
*/
getModelData
()
{
this
.
modelData
=
[]
const
params
=
{
'searchItems'
:
{
'items'
:
[]
},
'sortItem'
:
[{
'fieldName'
:
'modifyTime'
,
'sortOrder'
:
'asc'
}]
}
this
.
$api
.
searchApi
(
'AircraftType'
,
params
).
then
((
res
)
=>
{
if
(
res
.
items
&&
res
.
items
.
content
&&
res
.
items
.
content
.
length
)
{
this
.
dataModel
=
res
.
items
.
content
.
map
(
p
=>
{
return
{
id
:
p
.
id
,
resCode
:
p
.
defCode
,
resName
:
p
.
defName
}
})
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{
this
.
$nextTick
(()
=>
{
this
.
form
.
model
=
this
.
dataModel
[
0
].
resCode
this
.
getAddRecursion
()
})
})
},
/**
* 获取架次数据
*/
getAddRecursion
()
{
this
.
sortiesLoading
=
true
const
params
=
{
'searchItems'
:
{
'items'
:
[{
'fieldName'
:
'aircraftTypeId'
,
'operator'
:
'EQ'
,
'value'
:
this
.
dataModel
.
filter
(
p
=>
p
.
resCode
===
this
.
form
.
model
)[
0
].
id
}]
},
sortItem
:
[{
fieldName
:
'defCode'
,
sortOrder
:
'asc'
}]
}
this
.
dataSortie
=
[]
this
.
$api
.
searchApi
(
'AircraftSorties'
,
params
)
.
then
((
res
)
=>
{
if
(
res
.
items
&&
res
.
items
.
content
&&
res
.
items
.
content
.
length
)
{
this
.
dataSortie
=
res
.
items
.
content
.
map
(
p
=>
{
return
{
id
:
p
.
id
,
serialNo
:
p
.
defCode
}
})
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{
this
.
$nextTick
(()
=>
{
if
(
this
.
dataSortie
.
length
)
this
.
form
.
sortie
=
this
.
dataSortie
[
0
].
serialNo
this
.
sortiesLoading
=
false
this
.
$parent
.
$parent
.
$refs
.
right
.
handleClick
()
this
.
getTreeData
()
})
})
},
getTreeData
()
{
this
.
$parent
.
$refs
.
tree
.
getTreeData
()
}
}
}
</
script
>
<
style
lang=
"scss"
>
.physicalConfigurationManagement-from
{
border
:
1px
solid
#ccc
;
border-radius
:
8px
;
box-sizing
:
border-box
;
padding
:
20px
;
.el-select
{
width
:
100%
;
}
.el-form-item
:last-child
{
margin-bottom
:
0px
;
}
.form-btn
{
text-align
:
center
;
}
.icon-wrapper
{
.icon
,
span
{
vertical-align
:
middle
;
}
margin-bottom
:
10px
;
}
}
</
style
>
applications/dee-mes/src/privateComponents/components/physicalConfigurationManagement/components/Tree.vue
0 → 100644
View file @
e3f9c11b
<
template
>
<section
class=
"physicalConfigurationManagement-left-tree"
>
<el-input
v-model=
"nameOrNum"
clearable
placeholder=
"请输入内容"
/>
<el-tree
ref=
"tree"
class=
"tree"
:data=
"treeData"
node-key=
"id"
lazy
:load=
"loadNode"
accordion
:default-expanded-keys=
"defaultExpandedKeys"
:props=
"defaultProps"
:highlight-current=
"true"
:expand-on-click-node=
"false"
@
node-click=
"handleNodeClick"
>
<span
slot-scope=
"
{ data, node }"
class="custom-tree-node changeText"
:class="data.state"
>
<span
class=
"tree-row"
>
<i
:class=
"'tree' + node.level"
/>
<span
class=
"label"
:title=
"data.serialNumber"
>
{{
data
.
serialNumber
}}
</span>
<span
v-show=
"node.level > 1"
>
{{
","
+
data
.
name
}}
</span>
<span
v-show=
"node.level > 3"
>
{{
","
+
data
.
gaceVersion
}}
</span>
</span>
</span>
</el-tree>
</section>
</
template
>
<
script
>
// import { post } from '@/utils/http'
export
default
{
name
:
'Tree'
,
props
:
{
searchForm
:
{
type
:
Object
,
default
:
()
=>
{}
}
},
data
()
{
return
{
nameOrNum
:
''
,
treeData
:
[],
defaultExpandedKeys
:
[],
rowData
:
{},
defaultProps
:
{
children
:
'dxProcessPlanVos'
,
label
:
'serialNumber'
,
isLeaf
:
'isLeaf'
}
}
},
watch
:
{
nameOrNum
:
{
handler
:
function
(
keyword
)
{
// this.getExtPosition()
// const spans = document.getElementsByClassName('changeText')
// if (spans.length > 0) {
// for (let i = 0; i
<
spans
.
length
;
i
++
)
{
// var labelText = spans[i].textContent
// const reg = keyword
// .replace(/\(/g, '\\(')
// .replace(/\)/g, '\\)')
// .replace(/\./g, '\\.')
// const allVal = labelText.match(new RegExp(reg, 'ig'))
// if (allVal) {
// const newAllVal = [...new Set(allVal)]
// for (let j = 0; j
<
newAllVal
.
length
;
j
++
)
{
// if (newAllVal[j]) {
// const tp = newAllVal[j]
// .replace(/\(/g, '\\(')
// .replace(/\)/g, '\\)')
// .replace(/\./g, '\\.')
// labelText = labelText.replace(
// new RegExp(tp, 'g'),
// '*' + newAllVal[j] + '*'
// )
// }
// }
// for (let k = 0; k
<
allVal
.
length
;
k
++
)
{
// if (allVal[k]) {
// labelText = labelText.replace(
// '*' + allVal[k] + '*',
// '
<
span
style
=
"color:blue"
>
' +
// allVal[k] +
// '
<
/span>
'
// )
// }
// }
// }
// spans[i].innerHTML = labelText
// }
// }
}
},
rowData
:
{
immediate
:
true
,
deep
:
true
,
handler
(
val
)
{
this
.
$bus
.
$emit
(
'treeCurrentRowData'
,
val
)
}
}
},
mounted
()
{},
methods
:
{
handleNodeClick
(
data
,
node
,
options
)
{
const
cnode
=
this
.
$refs
.
tree
.
getNode
(
this
.
rowData
.
id
)
const
assembly
=
this
.
$parent
.
$parent
.
$parent
.
$parent
.
$refs
.
right
const
table
=
assembly
&&
assembly
.
$refs
[
assembly
.
activeName
].
$refs
.
table
if
(
assembly
.
activeName
===
'BRecord'
||
assembly
.
activeName
===
'CRecord'
||
assembly
.
activeName
===
'ERecord'
)
{
if
(
node
.
level
<
3
)
{
node
.
isCurrent
=
false
cnode
.
isCurrent
=
true
}
else
{
cnode
.
isCurrent
=
false
node
.
isCurrent
=
true
this
.
rowData
=
data
table
.
tablePagination
.
currentPage
=
1
table
.
tablePagination
.
pageSize
=
10
table
.
init
()
}
}
else
{
if
(
node
.
level
<
4
)
{
node
.
isCurrent
=
false
cnode
.
isCurrent
=
true
}
else
{
cnode
.
isCurrent
=
false
node
.
isCurrent
=
true
this
.
rowData
=
data
if
(
this
.
$parent
.
$parent
.
$parent
.
$parent
.
$refs
.
right
.
activeName
===
'FPreview'
)
{
assembly
.
$refs
[
assembly
.
activeName
].
init
()
}
else
{
table
.
tablePagination
.
currentPage
=
1
table
.
tablePagination
.
pageSize
=
10
table
.
init
()
}
}
}
},
getCurVal
(
data
)
{
if
(
data
.
length
&&
data
[
0
].
dxProcessPlanVos
)
{
this
.
defaultExpandedKeys
.
push
(
data
[
0
].
id
)
this
.
getCurVal
(
data
[
0
].
dxProcessPlanVos
)
}
else
{
this
.
$nextTick
(()
=>
{
const
node
=
this
.
$refs
.
tree
.
getNode
(
data
[
0
].
id
)
node
.
isCurrent
=
true
this
.
rowData
=
data
[
0
]
})
}
},
setBRecordOrCRecord
()
{
const
node
=
this
.
$refs
.
tree
.
getNode
(
this
.
rowData
.
id
)
if
(
node
&&
node
.
level
===
3
)
{
node
.
isCurrent
=
false
node
.
childNodes
[
0
].
isCurrent
=
true
this
.
rowData
=
node
.
childNodes
[
0
].
data
}
},
loadNode
(
node
,
resolve
)
{
this
.
requestUrl
=
''
if
(
node
.
level
===
0
)
{
this
.
getExtPosition
(
resolve
)
// return resolve(this.treeData)
}
if
(
node
.
level
===
1
)
{
return
resolve
(
node
.
data
.
dxProcessPlanVos
)
}
else
if
(
node
.
level
===
2
)
{
if
(
node
.
data
)
{
this
.
getCASData
(
node
,
resolve
)
}
}
else
if
(
node
.
level
===
3
)
{
if
(
node
.
data
)
{
this
.
getJoExecutePlan
(
node
,
resolve
)
}
}
},
/**
* 获取树结站位数据
*/
getExtPosition
(
resolve
)
{
const
params
=
{
'searchItems'
:
{
'children'
:
[
{
'items'
:
[
{
'fieldName'
:
'aircraftSortiesId'
,
'operator'
:
'EQ'
,
'value'
:
this
.
searchForm
.
sorties
||
''
}
],
'operator'
:
'AND'
},
{
'items'
:
[
{
'fieldName'
:
'extPositionLinks.target.sourceExtProcessUsageLink.target.sourceExtProcessUsageLink.target.serialNumber'
,
'operator'
:
'LIKE'
,
'value'
:
this
.
nameOrNum
||
''
},
{
'fieldName'
:
'extPositionLinks.target.sourceExtProcessUsageLink.target.sourceExtProcessUsageLink.target.sourceExtProcessUsageLink.target.serialNumber'
,
'operator'
:
'LIKE'
,
'value'
:
this
.
nameOrNum
||
''
}
],
'operator'
:
'OR'
}
]
},
'openProps'
:
[],
'sortItem'
:
[
{
'fieldName'
:
'serialNumber'
,
'sortOrder'
:
'desc'
}
]
}
this
.
$api
.
searchApi
(
'ExtPosition'
,
params
).
then
((
res
)
=>
{
const
data
=
res
.
items
.
content
||
[]
data
.
map
((
item
)
=>
{
if
(
item
.
extPositionLinks
)
{
item
.
dxProcessPlanVos
=
item
.
extPositionLinks
.
map
(
es
=>
{
return
{
serialNumber
:
es
.
target
.
serialNumber
,
name
:
es
.
target
.
name
,
id
:
es
.
id
,
gaceVersion
:
es
.
target
.
gaceVersion
,
state
:
es
.
isOk
?
'Delivery'
:
'Finish'
}
})
}
if
(
item
.
extPositionPlans
&&
item
.
extPositionPlans
.
length
)
{
item
.
state
=
item
.
extPositionPlans
[
0
].
planState
||
null
}
})
this
.
treeData
=
[
{
serialNumber
:
`BBOM-
${
this
.
searchForm
.
modelName
}
-
${
this
.
searchForm
.
sortiesName
}
`
,
name
:
''
,
gaceVersion
:
''
,
dxProcessPlanVos
:
data
,
state
:
''
}
]
this
.
defaultExpandedKeys
=
[]
this
.
treeData
.
length
&&
this
.
getCurVal
(
this
.
treeData
)
return
resolve
(
this
.
treeData
)
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{
this
.
$nextTick
(()
=>
{
const
assembly
=
this
.
$parent
.
$parent
.
$parent
.
$parent
.
$refs
.
right
if
(
assembly
.
activeName
===
'FPreview'
)
{
assembly
.
$refs
[
assembly
.
activeName
].
init
()
}
else
{
assembly
.
$refs
[
assembly
.
activeName
].
$refs
.
table
.
init
()
}
})
})
},
/**
* 获取树结CAS数据
*/
getCASData
(
node
,
resolve
)
{
const
params
=
{
'searchItems'
:
{
'children'
:
[
{
'items'
:
[
{
'fieldName'
:
'sorties'
,
'operator'
:
'EQ'
,
'value'
:
this
.
searchForm
.
sortiesName
||
''
},
{
'fieldName'
:
'positionNumber'
,
'operator'
:
'EQ'
,
'value'
:
node
.
data
.
serialNumber
||
''
},
{
'fieldName'
:
'subTypeName'
,
'operator'
:
'EQ'
,
'value'
:
'ExtProcessPlanAssemblyUnit'
}
],
'operator'
:
'AND'
},
{
'items'
:
[
{
'fieldName'
:
'sourceExtProcessUsageLink.target.sourceExtProcessUsageLink.target.serialNumber'
,
'operator'
:
'LIKE'
,
'value'
:
this
.
nameOrNum
||
''
},
{
'fieldName'
:
'sourceExtProcessUsageLink.target.sourceExtProcessUsageLink.target.sourceExtProcessUsageLink.target.serialNumber'
,
'operator'
:
'LIKE'
,
'value'
:
this
.
nameOrNum
||
''
}
],
'operator'
:
'OR'
}
]
},
'openProps'
:
[
{
'name'
:
'wrProduction'
}
],
'sortItem'
:
[
{
'fieldName'
:
'serialNumber'
,
'sortOrder'
:
'desc'
}
]
}
this
.
$api
.
searchApi
(
'ExtProcessPlan'
,
params
)
.
then
((
res
)
=>
{
res
.
items
.
content
.
forEach
(
element
=>
{
if
(
element
.
wrProduction
&&
element
.
wrProduction
.
length
)
{
element
.
state
=
element
.
wrProduction
[
0
].
planState
||
null
}
element
.
level
=
3
element
.
dxProcessPlanVos
=
[]
})
return
resolve
(
res
.
items
.
content
)
})
.
catch
((
err
)
=>
{
console
.
log
(
err
)
return
resolve
([])
})
.
finally
(()
=>
{})
},
/**
* 获取树结CAS数据
*/
getJoExecutePlan
(
node
,
resolve
)
{
console
.
log
(
'🚀 node:'
,
node
)
const
params
=
{
'searchItems'
:
{
'children'
:
[
{
'items'
:
[
{
'fieldName'
:
'sorties'
,
'operator'
:
'EQ'
,
'value'
:
this
.
searchForm
.
sortiesName
||
''
},
{
'fieldName'
:
'positionNumber'
,
'operator'
:
'EQ'
,
'value'
:
node
.
parent
.
data
.
serialNumber
||
''
},
{
'fieldName'
:
'serialNumber'
,
'operator'
:
'LIKE'
,
'value'
:
node
.
data
.
serialNumber
||
''
},
{
'fieldName'
:
'subTypeName'
,
'operator'
:
'IN'
,
'value'
:
[
'ExtProcessPlanAssembly'
,
'ExtProcessPlanAOR'
]
}
],
'operator'
:
'AND'
},
{
'items'
:
[
{
'fieldName'
:
'serialNumber'
,
'operator'
:
'LIKE'
,
'value'
:
this
.
nameOrNum
||
''
},
{
'fieldName'
:
'sourceExtProcessUsageLink.target.serialNumber'
,
'operator'
:
'LIKE'
,
'value'
:
this
.
nameOrNum
||
''
}
],
'operator'
:
'OR'
}
]
},
'openProps'
:
[
{
'name'
:
'joExecutePlan'
}
],
'sortItem'
:
[
{
'fieldName'
:
'serialNumber'
,
'sortOrder'
:
'desc'
}
]
}
this
.
$api
.
searchApi
(
'ExtProcessPlan'
,
params
)
.
then
((
res
)
=>
{
res
.
items
.
content
.
forEach
(
element
=>
{
if
(
element
.
joExecutePlan
&&
element
.
joExecutePlan
.
length
)
{
element
.
state
=
element
.
joExecutePlan
[
0
].
planState
||
null
}
element
.
level
=
3
element
.
isLeaf
=
true
})
return
resolve
(
res
.
items
.
content
)
})
.
catch
((
err
)
=>
{
console
.
log
(
err
)
return
resolve
([])
})
.
finally
(()
=>
{})
}
}
}
</
script
>
<
style
lang=
"scss"
>
::-webkit-scrollbar
{
width
:
6px
;
height
:
6px
;
}
::-webkit-scrollbar-thumb
{
border-radius
:
100px
;
background
:
#dcdfe6
;
}
.physicalConfigurationManagement-left-tree
{
// margin-top: 20px;
// border: 1px solid #ccc;
border-radius
:
7px
;
box-sizing
:
border-box
;
width
:
100%
;
height
:
calc
(
100%
-
66px
);
// height: 20px;
// flex-grow: 1;
// display: flex;
// flex-direction: column;
>
.el-input
{
padding
:
10px
;
width
:
-
webkit-fill-available
;
// border-bottom: 1px solid #ccc;
}
>
.tree
{
overflow
:
auto
;
padding
:
10px
;
height
:
100%
;
//当前选中项
.el-tree-node
{
width
:
max-content
;
min-width
:
100%
;
}
.el-tree-node.is-current
>
.el-tree-node__content
{
background-color
:
rgb
(
214
,
214
,
214
)
!
important
;
}
.el-tree-node
:focus
>
.el-tree-node__content
{
background-color
:
#fff
;
}
&
.el-tree--highlight-current
.el-tree-node__content
{
&
.disabled
{
color
:
#c0c4cc
;
cursor
:
not
-
allowed
;
background-color
:
#fff
;
}
&
.is-curr
:not
(
.disabled
),
&
:hover:not
(
.disabled
)
{
font-weight
:
bold
;
color
:
rgb
(
31
,
30
,
30
);
background-color
:
rgb
(
214
,
214
,
214
);
}
}
.el-tree-node
{
// margin: 20px 0 !important;
.el-tree-node__content
{
height
:
40px
!
important
;
// &:hover {
// font-weight: bold;
// color: #000;
// }
i
{
display
:
inline-block
;
vertical-align
:
middle
;
margin
:
10px
;
}
.tree1
{
background
:
url("/icons/aircraft.png")
no-repeat
;
width
:
32px
;
height
:
30px
;
}
.tree2
{
width
:
21px
;
height
:
21px
;
background
:
url("/icons/u513.png")
no-repeat
;
background-size
:
contain
;
}
.tree3
{
width
:
21px
;
height
:
21px
;
background
:
url("/icons/u517.png")
no-repeat
;
background-size
:
contain
;
}
.tree4
{
width
:
16px
;
height
:
16px
;
background
:
url("/icons/u96.png")
no-repeat
;
background-size
:
contain
;
}
.tree5
{
width
:
16px
;
height
:
16px
;
background
:
url("/icons/u96.png")
no-repeat
;
background-size
:
contain
;
}
.label
{
vertical-align
:
middle
;
}
.Issued.custom-tree-node
,
.Run.custom-tree-node
,
.New.custom-tree-node
,
.Yes.custom-tree-node
,
.Delivery.custom-tree-node
{
color
:
#0000ff
;
}
.Finish.custom-tree-node
{
color
:
#008000
;
}
.Reserved.custom-tree-node
{
color
:
#ff0000
;
}
.Not.custom-tree-node
{
color
:
#999999
;
}
.Paused.custom-tree-node
{
color
:
#ffff00
;
}
}
}
}
}
</
style
>
applications/dee-mes/src/privateComponents/components/physicalConfigurationManagement/components/left.vue
0 → 100644
View file @
e3f9c11b
<
template
>
<div
class=
"physicalConfigurationManagement_left"
>
<div
class=
"search-box box"
>
<div
class=
"title"
><i
class=
"search-icon"
/><span>
架次搜索
</span></div>
<div
class=
"row"
>
<label>
机型:
</label>
<el-select
v-model=
"form.model"
size=
"mini"
placeholder=
"请选择"
>
<el-option
v-for=
"item in modelData"
:key=
"item.id"
:label=
"item.defName"
:value=
"item.id"
/>
</el-select>
</div>
<div
class=
"row"
>
<label>
架次:
</label>
<el-select
v-model=
"form.sorties"
filterable
clearable
size=
"mini"
placeholder=
"请选择"
:loading=
"sortiesLoading"
>
<el-option
v-for=
"item in sortiesData"
:key=
"item.id"
:label=
"item.defCode"
:value=
"item.id"
/>
</el-select>
</div>
<div
class=
"row"
>
<el-button
size=
"mini"
type=
"primary"
@
click=
"getExtPosition"
>
查询
</el-button>
</div>
</div>
<div
class=
"station-box box"
>
<Tree
ref=
"tree"
:search-form=
"form"
/>
</div>
</div>
</
template
>
<
script
>
// import { post } from '@/utils/http'
import
Tree
from
'./Tree.vue'
export
default
{
name
:
'PhysicalConfigurationManagementLeft'
,
components
:
{
Tree
},
data
()
{
return
{
form
:
{
model
:
''
,
sorties
:
''
},
modelData
:
[],
sortiesLoading
:
true
,
sortiesData
:
[],
defaultProps
:
{
children
:
'children'
,
isLeaf
:
'leaf'
},
treeLoading
:
false
,
treeData
:
[],
defaultExpandedKeys
:
[]
}
},
watch
:
{
'form.model'
:
{
immediate
:
true
,
handler
(
val
)
{
if
(
!
val
)
{
return
}
const
model
=
this
.
modelData
.
find
((
r
)
=>
r
.
id
===
val
)
this
.
$set
(
this
.
form
,
'modelName'
,
(
model
&&
model
.
defName
)
||
''
)
this
.
$set
(
this
.
form
,
'sorties'
,
''
)
this
.
getSortiesData
()
}
},
'form.sorties'
:
{
immediate
:
true
,
handler
(
val
)
{
if
(
!
val
)
{
return
}
const
sorties
=
this
.
sortiesData
.
find
((
r
)
=>
r
.
id
===
val
)
this
.
$set
(
this
.
form
,
'sortiesName'
,
(
sorties
&&
sorties
.
defCode
)
||
''
)
this
.
getExtPosition
()
}
}
},
mounted
()
{
this
.
getModelData
()
},
methods
:
{
/**
* 获取机型
*/
getModelData
()
{
this
.
modelData
=
[]
const
params
=
{
'searchItems'
:
{
'items'
:
[]
},
'sortItem'
:
[{
'fieldName'
:
'modifyTime'
,
'sortOrder'
:
'asc'
}]
}
this
.
$api
.
searchApi
(
'AircraftType'
,
params
).
then
((
res
)
=>
{
if
(
res
.
items
&&
res
.
items
.
content
&&
res
.
items
.
content
.
length
)
{
this
.
modelData
=
res
.
items
.
content
.
map
(
p
=>
{
return
{
id
:
p
.
id
,
defCode
:
p
.
defCode
,
defName
:
p
.
defName
}
})
}
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{
this
.
$nextTick
(()
=>
{
if
(
this
.
modelData
&&
this
.
modelData
.
length
)
{
this
.
form
.
model
=
this
.
modelData
[
0
].
id
}
this
.
getSortiesData
()
})
})
},
/**
* 获取架次数据
*/
getSortiesData
()
{
this
.
sortiesLoading
=
true
const
params
=
{
'searchItems'
:
{
'items'
:
[{
'fieldName'
:
'aircraftTypeId'
,
'operator'
:
'EQ'
,
'value'
:
this
.
form
.
model
||
''
}]
},
sortItem
:
[{
fieldName
:
'defCode'
,
sortOrder
:
'asc'
}]
}
this
.
sortiesData
=
[]
this
.
$api
.
searchApi
(
'AircraftSorties'
,
params
)
.
then
((
res
)
=>
{
if
(
res
.
items
&&
res
.
items
.
content
&&
res
.
items
.
content
.
length
)
{
this
.
sortiesData
=
res
.
items
.
content
.
map
(
p
=>
{
return
{
id
:
p
.
id
,
defCode
:
p
.
defCode
}
})
}
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{
this
.
$nextTick
(()
=>
{
if
(
this
.
sortiesData
&&
this
.
sortiesData
.
length
)
{
this
.
form
.
sorties
=
this
.
sortiesData
[
0
].
id
this
.
$set
(
this
.
form
,
'sortiesName'
,
(
this
.
sortiesData
[
0
].
defCode
)
||
''
)
}
this
.
sortiesLoading
=
false
// this.$parent.$parent.$refs.right.handleClick()
this
.
getExtPosition
()
})
})
},
getExtPosition
()
{
this
.
$refs
.
tree
.
getExtPosition
()
// this.reloadTreeData()
},
// 加载数据
// getExtPosition(level = -1) {
// this.treeLoading = true
// const params = {
// pageFrom: 1,
// pageSize: 9999,
// searchItems: {
// children: [
// {
// items: [
// {
// fieldName: 'aircraftSortiesId', // 架次ID
// operator: 'EQ',
// value: this.form.sorties || ''
// }
// ],
// operator: 'AND'
// }
// ],
// items: [],
// operator: 'AND'
// },
// openProps: [
// {
// name: 'extPositionPlans'
// },
// {
// name: 'extPositionLinks',
// openProps: [
// {
// name: 'target',
// openProps: [
// {
// name: 'wrProduction'
// }
// ]
// }
// ]
// }
// ],
// sortItem: [
// {
// 'fieldName': 'serialNumber',
// 'sortOrder': 'desc'
// }
// ]
// }
// this.$api.searchApi('ExtPosition', params)
// .then((res) => {
// res.items && res.items.content && res.items.content.forEach(element => {
// element.workingStatus = element.extPositionPlans && element.extPositionPlans.length > 0 ? element.extPositionPlans[0].planState : null
// })
// this.treeData = [
// {
// serialNumber: `BBOM-${this.form.modelName}-${this.form.sortiesName}`,
// materName: '',
// gaceVersio: '',
// state: '',
// id: 1,
// children: res.items.content || [],
// level: 0
// }
// ]
// this.defaultExpandedKeys = [1]
// })
// .catch((err) => console.log(err))
// .finally(() => {
// this.treeLoading = false
// })
// },
loadNode
(
node
,
resolve
)
{
if
(
node
.
level
===
0
)
{
return
resolve
([{
name
:
'region'
}])
}
if
(
node
.
level
>
1
)
return
resolve
([])
setTimeout
(()
=>
{
const
data
=
[{
name
:
'leaf'
,
leaf
:
true
},
{
name
:
'zone'
}]
resolve
(
data
)
},
500
)
}
}
}
</
script
>
<
style
lang=
"scss"
>
.physicalConfigurationManagement_left
{
// margin: 4px;
height
:
100%
;
overflow
:
hidden
;
}
</
style
>
applications/dee-mes/src/privateComponents/components/physicalConfigurationManagement/components/material/index.vue
0 → 100644
View file @
e3f9c11b
<!--
* @Author:ljm
* @Date: 2021-04-25
* @LastEditTime:
* @Description: 架次实物构型-记实
* @FilePath: /mes-web/applications/dee-mes/src/views/mes//physicalQualityAndConfiguratioCnontrol/physicalConfigurationManagement/physicalDocumentationOfSorties/index.vue'
-->
<
template
>
<section
class=
"physical-documentation-of-sorties-material"
>
<div
class=
"logo"
>
<img
src=
"/icons/u188.png"
alt=
""
><span>
综合
</span>
</div>
<div
class=
"top"
>
<div
class=
"item"
>
<div>
<div
class=
"left"
>
<img
src=
"/icons/u123.png"
alt=
""
>
<p>
报废
</p>
</div>
<div
class=
"right"
>
<span>
{{
comprehensive
.
scrapQuantity
}}
</span>
/
<span>
{{
comprehensive
.
scrapCount
}}
</span>
</div>
</div>
</div>
<div
class=
"item"
>
<div>
<div
class=
"left"
>
<img
src=
"/icons/u126.png"
alt=
""
>
<p>
代料
</p>
</div>
<div
class=
"right"
>
<span
v-show=
"false"
>
{{
comprehensive
.
materialsQuantity
}}
/
</span>
<span>
{{
comprehensive
.
materialsCount
}}
</span>
</div>
</div>
</div>
<div
class=
"item"
>
<div>
<div
class=
"left"
>
<img
src=
"/icons/u118.png"
alt=
""
>
<p>
串件
</p>
</div>
<div
class=
"right"
>
<span>
{{
comprehensive
.
stringQuantity
}}
</span>
/
<span>
{{
comprehensive
.
stringCount
}}
</span>
</div>
</div>
</div>
</div>
<hr>
<div
class=
"title"
>
<div
class=
"left"
>
<div
class=
"logo"
style=
"margin: 20px 20px 10px 0px"
>
<img
src=
"/icons/u212.svg"
alt=
""
><span>
装配记实
</span>
</div>
<div
class=
"dee-tools"
>
<div
class=
"tools-block"
>
<div
class=
"tool-item"
:disabled=
"preserveDisabled"
style=
"display: flex; flex-direction: row; align-items: center"
@
click=
"exportTable"
>
<img
src=
"/icons/c-export.png"
class=
"icon"
>
<span
class=
"icon-font"
>
MBOM差异导出
</span>
<i
v-show=
"preserveDisabled"
class=
"el-icon-loading"
/>
</div>
</div>
</div>
</div>
<div
class=
"right"
>
<div
class=
"legnd"
>
<div>
<span
/>
<span>
未开始
</span>
</div>
<div>
<span
/>
<span>
执行中
</span>
</div>
<div>
<span
/>
<span>
已完成
</span>
</div>
<div>
<span
/>
<span>
保留
</span>
</div>
<div>
<span
/>
<span>
暂停
</span>
</div>
</div>
</div>
</div>
<div
class=
"bottom"
>
<Table
ref=
"table"
/>
</div>
</section>
</
template
>
<
script
>
import
Table
from
'./table'
import
{
downloadPdfHandle
}
from
'@/api/inventory.js'
import
axios
from
'axios'
export
default
{
name
:
'Material'
,
components
:
{
Table
},
data
()
{
return
{
comprehensive
:
{
scrapQuantity
:
0
,
scrapCount
:
0
,
materialsQuantity
:
0
,
materialsCount
:
0
,
stringQuantity
:
0
,
stringCount
:
0
},
preserveDisabled
:
false
}
},
mounted
()
{},
methods
:
{
getComprehensive
()
{
var
{
model
,
sortie
}
=
this
.
$parent
.
$parent
.
$parent
.
$parent
.
$refs
.
left
.
$refs
.
form
.
form
var
activeName
=
this
.
$parent
.
$parent
.
$parent
.
activeName
this
.
comprehensive
=
[]
this
.
HttpRequest
(
`DxProcessPlan/comprehensive?sorties=
${
sortie
}
&planType=
${
model
}
&number=
${
activeName
}
`
,
{},
'post'
)
.
then
((
res
)
=>
{
if
(
res
.
items
)
{
this
.
comprehensive
=
{
scrapQuantity
:
res
.
items
[
'报废单'
].
countCarry
||
0
,
scrapCount
:
res
.
items
[
'报废单'
].
countAO
||
0
,
materialsQuantity
:
res
.
items
[
'代料单'
].
countCarry
||
0
,
materialsCount
:
res
.
items
[
'代料单'
].
countAO
||
0
,
stringQuantity
:
res
.
items
[
'串件单'
].
countCarry
||
0
,
stringCount
:
res
.
items
[
'串件单'
].
countAO
||
0
}
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{})
},
exportTable
()
{
this
.
preserveDisabled
=
true
const
baseURl
=
downloadPdfHandle
()
var
{
model
,
sortie
}
=
this
.
$parent
.
$parent
.
$parent
.
$parent
.
$refs
.
left
.
$refs
.
form
.
form
axios
({
method
:
'get'
,
url
:
`/DifferenceExcel/download/excel?planType=
${
model
}
&sorties=
${
sortie
}
`
,
baseURL
:
baseURl
,
params
:
{
},
headers
:
{
token
:
`
${
localStorage
.
getItem
(
'token'
)}
`
,
'equipment_id'
:
`
${
localStorage
.
getItem
(
'uid'
)}
`
},
responseType
:
'arraybuffer'
})
.
then
((
res
)
=>
{
const
blob
=
new
Blob
([
res
.
data
],
{
type
:
'application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
})
if
(
window
.
navigator
.
msSaveOrOpenBlob
)
{
navigator
.
msSaveBlob
(
blob
)
}
else
{
const
elink
=
document
.
createElement
(
'a'
)
elink
.
download
=
'MBOM差异表'
+
'.xlsx'
elink
.
style
.
display
=
'none'
elink
.
href
=
URL
.
createObjectURL
(
blob
)
document
.
body
.
appendChild
(
elink
)
elink
.
click
()
document
.
body
.
removeChild
(
elink
)
}
// } else {
// // IE10+下载
// navigator.msSaveBlob(blob)
// }
})
.
catch
((
err
)
=>
{
console
.
error
(
err
)
})
.
finally
(()
=>
{
this
.
preserveDisabled
=
false
})
}
}
}
</
script
>
<
style
lang=
"scss"
>
.physical-documentation-of-sorties-material
{
height
:
100%
;
display
:
flex
;
flex-direction
:
column
;
.logo
{
img
{
width
:
35px
;
height
:
30px
;
vertical-align
:
middle
;
margin-right
:
10px
;
}
span
{
vertical-align
:
middle
;
}
}
.top
{
display
:
flex
;
justify-content
:
space-between
;
.item
{
width
:
280px
;
height
:
100%
;
text-align
:
center
;
>
div
{
display
:
flex
;
height
:
120px
;
margin-top
:
20px
;
margin-bottom
:
20px
;
border
:
1px
solid
#ccc
;
border-radius
:
5px
;
>
div
{
width
:
50%
;
}
.left
{
padding
:
20px
;
box-sizing
:
border-box
;
img
{
width
:
50px
;
height
:
58px
;
margin-bottom
:
5px
;
// height: ;
}
}
.right
{
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
font-size
:
26px
;
font-weight
:
bold
;
>
span
{
&
:first-child
{
color
:
#57ab57
;
}
&
:last-child
{
color
:
#ff0000
;
}
}
}
}
}
}
hr
{
height
:
1px
;
background-color
:
#d2d2d2
;
border
:
none
;
}
>
.title
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
>
.left
{
display
:
flex
;
align-items
:
center
;
.dee-tools
.tool-item
{
&
[
disabled
]
{
cursor
:
no-drop
;
>
span
{
color
:
#c3c3c3
;
}
}
}
}
>
.right
{
display
:
flex
;
>
.legnd
{
display
:
flex
;
position
:
relative
;
>
div
{
align-items
:
center
;
margin-left
:
20px
;
display
:
flex
;
>
span
{
&
:first-child
{
display
:
inline-block
;
width
:
22px
;
height
:
16px
;
margin-right
:
6px
;
}
&
:last-child
{
font-size
:
10px
;
}
}
&
:nth-child
(
1
)
>
span
:first-child
{
background
:
#999999
;
}
&
:nth-child
(
2
)
>
span
:first-child
{
background
:
#0000ff
;
}
&
:nth-child
(
3
)
>
span
:first-child
{
background
:
#008000
;
}
&
:nth-child
(
4
)
>
span
:first-child
{
background
:
#ff0000
;
}
&
:nth-child
(
5
)
>
span
:first-child
{
background
:
#ffff00
;
}
}
}
}
}
.bottom
{
height
:
20px
;
flex-grow
:
1
;
}
}
</
style
>
applications/dee-mes/src/privateComponents/components/physicalConfigurationManagement/components/material/table.vue
0 → 100644
View file @
e3f9c11b
<
template
>
<section
class=
"physical-documentation-of-sorties-material-table"
>
<!-- 表格 -->
<el-table
v-loading=
"loading"
:data=
"tableData"
height=
"calc(100% - 40px)"
border
size=
"mini"
>
<el-table-column
type=
"index"
align=
"center"
label=
"序号"
:width=
"80"
/>
<el-table-column
label=
"数模及文件记实"
align=
"center"
>
<el-table-column
v-for=
"item in colums1"
:key=
"item.key"
:prop=
"item.key"
align=
"center"
:label=
"item.title"
:width=
"item.width"
sortable
show-overflow-tooltip
/></el-table-column>
<el-table-column
label=
"质量单据记实"
align=
"center"
>
<el-table-column
v-for=
"item in colums2"
:key=
"item.key"
:prop=
"item.key"
align=
"center"
:label=
"item.title"
:width=
"item.width"
sortable
show-overflow-tooltip
/>
</el-table-column>
</el-table>
<el-pagination
:current-page=
"tablePagination.currentPage"
:page-sizes=
"tablePagination.pageSizes"
:page-size=
"tablePagination.pageSize"
layout=
"total, sizes, prev, pager, next, jumper"
:total=
"tablePagination.total"
@
size-change=
"setPage"
@
current-change=
"setPage($event, true)"
/>
</section>
</
template
>
<
script
>
export
default
{
components
:
{},
data
()
{
return
{
// 加载中
loading
:
false
,
// 所有可动态配置的表格列
colums1
:
[
{
title
:
'记实编号'
,
show
:
true
,
key
:
'recordNumber'
,
sortable
:
true
,
width
:
120
},
{
title
:
'名称'
,
show
:
true
,
key
:
'recordName'
,
sortable
:
true
},
{
title
:
'类型'
,
show
:
true
,
key
:
'recordType'
,
sortable
:
true
},
{
title
:
'序列号记实'
,
show
:
true
,
key
:
'recordNo'
,
sortable
:
true
,
width
:
120
},
{
title
:
'数量记实'
,
show
:
true
,
key
:
'recordSum'
,
sortable
:
true
,
width
:
120
},
{
title
:
'数模及文件版次记实'
,
show
:
true
,
key
:
'recordBatchNumber'
,
sortable
:
true
,
width
:
180
},
{
title
:
'软件(编号/版本)记实'
,
show
:
true
,
key
:
'recordSoftware'
,
sortable
:
true
,
width
:
180
}
// {
// title: '软件版本记实',
// show: true,
// key: 'recordSoftware',
// sortable: true,
// width: 180
// },
],
colums2
:
[
{
title
:
'不合格品审理单'
,
show
:
true
,
key
:
'recordUnqualified'
,
sortable
:
true
,
width
:
150
},
{
title
:
'代料单'
,
show
:
true
,
key
:
'totalMinutes'
,
sortable
:
true
,
width
:
120
},
{
title
:
'质量问题预审单'
,
show
:
true
,
key
:
'recordQuality'
,
sortable
:
true
,
width
:
180
},
{
title
:
'报废申请单'
,
show
:
true
,
key
:
'recordScrapped'
,
sortable
:
true
,
width
:
120
},
{
title
:
'串件申请单'
,
show
:
true
,
key
:
'recordString'
,
sortable
:
true
,
width
:
120
}
],
tablePagination
:
{
currentPage
:
1
,
pageSize
:
10
,
total
:
0
,
pageSizes
:
[
5
,
10
,
20
,
50
]
},
// 表格数据
tableData
:
[]
}
},
created
()
{},
mounted
()
{},
methods
:
{
// 初始化数据
init
()
{
this
.
tableData
=
[]
var
id
=
this
.
$parent
.
$parent
.
$parent
.
$parent
.
$parent
.
$refs
.
left
.
$refs
.
tree
.
rowData
.
id
var
number
=
this
.
$parent
.
$parent
.
$parent
.
$parent
.
activeName
if
(
!
id
||
!
number
)
{
return
}
this
.
loading
=
true
const
params
=
{
id
:
id
,
number
:
number
,
pageFrom
:
this
.
tablePagination
.
currentPage
,
pageSize
:
this
.
tablePagination
.
pageSize
,
numberOrName
:
this
.
$parent
.
search
}
// 发送请求
this
.
HttpRequest
(
'/DxProcessPlan/planDetails'
,
params
,
'post'
)
.
then
((
res
)
=>
{
if
(
res
.
items
&&
res
.
items
.
physicalRecordDDxPage
&&
res
.
items
.
physicalRecordDDxPage
&&
res
.
items
.
physicalRecordDDxPage
.
content
&&
res
.
items
.
physicalRecordDDxPage
.
content
.
length
)
{
this
.
tableData
=
res
.
items
.
physicalRecordDDxPage
.
content
this
.
tablePagination
.
total
=
res
.
items
.
physicalRecordDDxPage
.
totalElements
}
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{
this
.
loading
=
false
})
},
setPage
(
$event
,
state
)
{
if
(
state
)
{
this
.
tablePagination
.
currentPage
=
$event
}
else
{
this
.
tablePagination
.
currentPage
=
1
this
.
tablePagination
.
pageSize
=
$event
}
this
.
init
()
}
}
}
</
script
>
<
style
lang=
"scss"
>
.physical-documentation-of-sorties-material-table
{
height
:
100%
;
.el-table
thead
th
{
color
:
#2e2e2e
;
font-weight
:
700
;
font-size
:
14px
;
padding
:
0
;
background-color
:
#f3f6f7
;
line-height
:
46px
!
important
;
}
.el-pagination
{
text-align
:
right
;
padding
:
10px
0
;
}
.el-loading-spinner
{
width
:
100%
;
}
}
</
style
>
applications/dee-mes/src/privateComponents/components/physicalConfigurationManagement/components/preview/index.vue
0 → 100644
View file @
e3f9c11b
<!--
* @Author:ljm
* @Date: 2021-04-25
* @LastEditTime: 2024-07-09 16:18:32
* @Description: 架次实物构型-预览
* @FilePath: /mes-web/applications/dee-mes/src/views/mes//physicalQualityAndConfiguratioCnontrol/physicalConfigurationManagement/sortiesPhysicalConfigurationsSame/index.vue'
-->
<
template
>
<section
v-loading=
"loading"
class=
"physical-documentation-of-sorties-preview"
>
<label
v-show=
"showTitle"
:title=
"title"
>
{{
title
}}
</label>
<iframe
:src=
"openUrl"
frameborder=
"0"
/>
</section>
</
template
>
<
script
>
// import { downloadPdfHandle } from '@/api/inventory.js'
// import axios from 'axios'
import
{
get
}
from
'@/utils/http'
export
default
{
name
:
'Preview'
,
data
()
{
return
{
showTitle
:
false
,
title
:
''
,
openUrl
:
''
,
loading
:
false
}
},
mounted
()
{},
methods
:
{
init
()
{
var
id
=
this
.
$parent
.
$parent
.
$parent
.
$parent
.
$parent
.
$parent
.
$refs
.
left
.
$refs
.
tree
.
rowData
.
id
var
number
=
this
.
$parent
.
$parent
.
$parent
.
activeName
if
(
!
id
||
!
number
)
{
return
}
this
.
loading
=
true
this
.
showTitle
=
false
// const baseURl = VUE_APP_BASE_API || process.env.VUE_APP_BASE_API // eslint-disable-line
// axios({
// method: 'POST',
// url: 'ExtProcessPlan/createPDF',
// baseURL: baseURl,
// params: {
// id: id
// },
// headers: { token: `${localStorage.getItem('token')}`, 'equipment_id': `${localStorage.getItem('uid')}` },
// responseType: 'arraybuffer'
// })
get
(
`ExtProcessPlan/createPDF?id=
${
id
}
`
).
then
((
res
)
=>
{
const
blob
=
new
Blob
([
res
.
data
],
{
type
:
'application/pdf'
})
if
(
window
.
navigator
.
msSaveOrOpenBlob
)
{
navigator
.
msSaveBlob
(
blob
)
}
else
{
this
.
openUrl
=
URL
.
createObjectURL
(
blob
)
this
.
$nextTick
(()
=>
{
this
.
loading
=
false
this
.
title
=
this
.
$parent
.
$parent
.
$parent
.
$parent
.
$refs
.
left
.
$refs
.
tree
.
rowData
.
serialNumber
setTimeout
(()
=>
{
this
.
showTitle
=
true
},
1000
)
})
}
}).
catch
(()
=>
{
this
.
loading
=
false
})
}
}
}
</
script
>
<
style
lang=
"scss"
>
.physical-documentation-of-sorties-preview
{
position
:
relative
;
height
:
100%
;
width
:
100%
;
>
button
{
position
:
absolute
;
}
>
label
{
position
:
absolute
;
width
:
calc
(
50%
-
310px
);
z-index
:
9
;
color
:
#fff
;
line-height
:
73px
;
background-color
:
#323639
;
margin-left
:
90px
;
overflow
:
hidden
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
}
iframe
{
width
:
100%
;
height
:
100%
;
border
:
0
;
}
}
</
style
>
applications/dee-mes/src/privateComponents/components/physicalConfigurationManagement/components/quality/index.vue
0 → 100644
View file @
e3f9c11b
<!--
* @Author:ljm
* @Date: 2021-04-25
* @LastEditTime: 2024-07-09 15:12:05
* @Description: 架次实物构型-质量控制
* @FilePath: /mes-web/applications/dee-mes/src/views/mes//physicalQualityAndConfiguratioCnontrol/physicalConfigurationManagement/sortiesPhysicalConfigurationsSame/index.vue'
-->
<
template
>
<section
class=
"physical-documentation-of-sorties-quality"
>
<div
class=
"logo"
>
<img
src=
"/icons/u188.png"
alt=
""
><span>
综合
</span>
</div>
<div
class=
"top"
>
<div
id=
"main"
style=
"width: 100%; height: 300px"
/>
</div>
<hr>
<div
class=
"title"
>
<div
class=
"left"
>
<div
class=
"logo"
style=
"margin: 20px 20px 10px 0px"
>
<img
src=
"/icons/u212.svg"
alt=
""
><span>
明细
</span>
</div>
</div>
<div
class=
"right"
>
<div
class=
"legnd"
>
<div>
<span
/>
<span>
未开始
</span>
</div>
<div>
<span
/>
<span>
执行中
</span>
</div>
<div>
<span
/>
<span>
已完成
</span>
</div>
<div>
<span
/>
<span>
保留
</span>
</div>
<div>
<span
/>
<span>
暂停
</span>
</div>
</div>
</div>
</div>
<Table
ref=
"table"
/>
</section>
</
template
>
<
script
>
import
*
as
echarts
from
'echarts'
import
Table
from
'./table'
export
default
{
name
:
'SortiesPhysicalConfigurationsSame'
,
components
:
{
Table
},
data
()
{
return
{
option
:
{
tooltip
:
{
trigger
:
'axis'
// axisPointer: { // 坐标轴指示器,坐标轴触发有效
// type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
// }
},
legend
:
{
data
:
[
'已发起'
,
'已完成'
,
'审理中'
],
right
:
10
},
barWidth
:
'10%'
,
grid
:
{
left
:
'0%'
,
right
:
'0%'
,
bottom
:
'3%'
,
containLabel
:
true
},
xAxis
:
[
{
type
:
'category'
,
data
:
[
'报废通知单'
,
'不合格品审理单(II III)'
,
'质量问题预审单'
,
'代料申请'
,
'串件申请单'
]
}
],
yAxis
:
[
{
type
:
'value'
}
],
series
:
[
{
name
:
'已发起'
,
type
:
'bar'
,
stack
:
'总量'
,
emphasis
:
{
focus
:
'series'
},
itemStyle
:
{
color
:
'#3BA1FF'
},
data
:
[]
},
{
name
:
'已完成'
,
type
:
'bar'
,
emphasis
:
{
focus
:
'series'
},
itemStyle
:
{
color
:
'#27D47D'
},
data
:
[]
},
{
name
:
'审理中'
,
type
:
'bar'
,
stack
:
'总量'
,
emphasis
:
{
focus
:
'series'
},
itemStyle
:
{
color
:
'#F38B00'
},
data
:
[]
}
]
}
}
},
mounted
()
{
this
.
initEcharts
()
},
methods
:
{
initEcharts
()
{
var
chartDom
=
document
.
getElementById
(
'main'
)
var
that
=
this
var
elementResizeDetectorMaker
=
require
(
'element-resize-detector'
)
// 引入监听dom变化的组件
var
erd
=
elementResizeDetectorMaker
()
// 用于使chart自适应高度和宽度,通过窗体高宽计算容器高宽
// var resizeWorldMapContainer = function() {
// // eslint-disable-line
// chartDom.style.width = chartDom.scrollWidth + 'px'
// chartDom.style.height = chartDom.clientHeight + 'px'
// }
this
.
myChart
=
echarts
.
init
(
chartDom
)
this
.
myChart
.
setOption
(
this
.
option
)
erd
.
listenTo
(
chartDom
,
function
(
element
)
{
// 执行监听
that
.
$nextTick
(
function
()
{
this
.
myChart
.
resize
()
})
})
},
getComprehensive
()
{
var
{
model
,
sortie
}
=
this
.
$parent
.
$parent
.
$parent
.
$parent
.
$parent
.
$parent
.
$refs
.
left
.
form
var
activeName
=
this
.
$parent
.
$parent
.
$parent
.
activeName
this
.
myChart
.
setOption
({
series
:
[
{
data
:
[]
},
{
data
:
[]
},
{
data
:
[]
}
]
})
this
.
HttpRequest
(
`DxProcessPlan/comprehensive?sorties=
${
sortie
}
&planType=
${
model
}
&number=
${
activeName
}
`
,
{},
'post'
)
.
then
((
res
)
=>
{
if
(
res
.
items
)
{
// 发起
var
launch
=
[
res
.
items
[
'报废'
].
countAO
,
res
.
items
[
'不合格'
].
countAO
,
res
.
items
[
'质量问题'
].
countAO
,
res
.
items
[
'器材代料'
].
countAO
,
res
.
items
[
'串件申请单'
].
countAO
]
// 完成
var
Finish
=
[
res
.
items
[
'报废'
].
countNotOk
,
res
.
items
[
'不合格'
].
countNotOk
,
res
.
items
[
'质量问题'
].
countNotOk
,
res
.
items
[
'器材代料'
].
countNotOk
,
res
.
items
[
'串件申请单'
].
countNotOk
]
// 审理
var
hear
=
[
res
.
items
[
'报废'
].
countCarry
,
res
.
items
[
'不合格'
].
countCarry
,
res
.
items
[
'质量问题'
].
countCarry
,
res
.
items
[
'器材代料'
].
countCarry
,
res
.
items
[
'串件申请单'
].
countCarry
]
this
.
myChart
.
setOption
({
series
:
[
{
data
:
launch
},
{
data
:
Finish
},
{
data
:
hear
}
]
})
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{})
}
}
}
</
script
>
<
style
lang=
"scss"
>
.physical-documentation-of-sorties-quality
{
height
:
100%
;
width
:
100%
;
display
:
flex
;
flex-direction
:
column
;
>
.logo
{
&
:first-child
{
position
:
absolute
;
}
img
{
width
:
35px
;
height
:
30px
;
vertical-align
:
middle
;
margin-right
:
10px
;
}
span
{
vertical-align
:
middle
;
}
}
.top
{
display
:
flex
;
height
:
300px
;
width
:
100%
;
justify-content
:
space-between
;
}
hr
{
height
:
1px
;
background-color
:
#d2d2d2
;
border
:
none
;
}
>
.title
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
>
.left
{
display
:
flex
;
align-items
:
center
;
>
.logo
{
white-space
:
nowrap
;
span
{
margin-left
:
20px
;
vertical-align
:
super
;
}
}
}
>
.right
{
display
:
flex
;
>
.legnd
{
display
:
flex
;
position
:
relative
;
>
div
{
align-items
:
center
;
margin-left
:
20px
;
display
:
flex
;
>
span
{
&
:first-child
{
display
:
inline-block
;
width
:
22px
;
height
:
16px
;
margin-right
:
6px
;
}
&
:last-child
{
font-size
:
10px
;
}
}
&
:nth-child
(
1
)
>
span
:first-child
{
background
:
#999999
;
}
&
:nth-child
(
2
)
>
span
:first-child
{
background
:
#0000ff
;
}
&
:nth-child
(
3
)
>
span
:first-child
{
background
:
#008000
;
}
&
:nth-child
(
4
)
>
span
:first-child
{
background
:
#ff0000
;
}
&
:nth-child
(
5
)
>
span
:first-child
{
background
:
#ffff00
;
}
}
}
}
}
}
</
style
>
applications/dee-mes/src/privateComponents/components/physicalConfigurationManagement/components/quality/table.vue
0 → 100644
View file @
e3f9c11b
<
template
>
<section
class=
"sorties-physical-configurations-same-table"
>
<!-- 表格 -->
<el-table
v-loading=
"loading"
:data=
"tableData"
height=
"calc(100% - 40px)"
border
size=
"mini"
>
<el-table-column
type=
"index"
align=
"center"
label=
"序号"
:width=
"80"
/>
<el-table-column
v-for=
"item in colums"
:key=
"item.key"
:prop=
"item.key"
align=
"center"
:label=
"item.title"
:width=
"item.width"
sortable
show-overflow-tooltip
/>
</el-table>
<el-pagination
:current-page=
"tablePagination.currentPage"
:page-sizes=
"tablePagination.pageSizes"
:page-size=
"tablePagination.pageSize"
layout=
"total, sizes, prev, pager, next, jumper"
:total=
"tablePagination.total"
@
size-change=
"setPage"
@
current-change=
"setPage($event, true)"
/>
</section>
</
template
>
<
script
>
export
default
{
components
:
{},
data
()
{
return
{
// 加载中
loading
:
false
,
// 分页
tablePagination
:
{
currentPage
:
1
,
pageSize
:
10
,
total
:
0
,
pageSizes
:
[
5
,
10
,
20
,
50
]
},
// 所有可动态配置的表格列
colums
:
[
{
title
:
'AO号'
,
show
:
true
,
key
:
'aoNumber'
,
sortable
:
true
},
{
title
:
'AO名称'
,
show
:
true
,
key
:
'aoName'
,
sortable
:
true
},
{
title
:
'类型'
,
show
:
true
,
key
:
'type'
,
sortable
:
true
},
{
title
:
'单据编号'
,
show
:
true
,
key
:
'docNumber'
,
sortable
:
true
},
{
title
:
'审理结论'
,
show
:
true
,
key
:
'conclusion'
,
sortable
:
true
},
{
title
:
'审理状态'
,
show
:
true
,
key
:
'status'
,
sortable
:
true
},
{
title
:
'是否闭关'
,
show
:
true
,
key
:
'isClose'
,
sortable
:
true
}
],
// 表格数据
tableData
:
[]
}
},
created
()
{},
mounted
()
{},
methods
:
{
// 初始化数据
init
()
{
this
.
tableData
=
[]
var
id
=
this
.
$parent
.
$parent
.
$parent
.
$parent
.
$parent
.
$refs
.
left
.
$refs
.
tree
.
rowData
.
id
var
number
=
this
.
$parent
.
$parent
.
$parent
.
$parent
.
activeName
if
(
!
id
||
!
number
)
{
return
}
this
.
loading
=
true
const
params
=
{
id
:
id
,
number
:
number
,
pageFrom
:
this
.
tablePagination
.
currentPage
,
pageSize
:
this
.
tablePagination
.
pageSize
,
numberOrName
:
this
.
$parent
.
search
}
// 发送请求
this
.
HttpRequest
(
'/DxProcessPlan/planDetails'
,
params
,
'post'
)
.
then
((
res
)
=>
{
if
(
res
.
items
&&
res
.
items
.
qualityRecordDxPage
&&
res
.
items
.
qualityRecordDxPage
.
content
&&
res
.
items
.
qualityRecordDxPage
.
content
.
length
)
{
this
.
tableData
=
res
.
items
.
qualityRecordDxPage
.
content
this
.
tablePagination
.
total
=
res
.
items
.
qualityRecordDxPage
.
totalElements
}
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{
this
.
loading
=
false
})
},
setPage
(
$event
,
state
)
{
if
(
state
)
{
this
.
tablePagination
.
currentPage
=
$event
}
else
{
this
.
tablePagination
.
currentPage
=
1
this
.
tablePagination
.
pageSize
=
$event
}
this
.
init
()
}
}
}
</
script
>
<
style
lang=
"scss"
>
.sorties-physical-configurations-same-table
{
flex-grow
:
1
;
height
:
20px
;
.el-table
thead
th
{
color
:
#2e2e2e
;
font-weight
:
700
;
font-size
:
14px
;
padding
:
0
;
background-color
:
#f3f6f7
;
line-height
:
46px
!
important
;
}
.el-pagination
{
text-align
:
right
;
padding
:
10px
0
;
}
.el-loading-spinner
{
width
:
100%
;
}
}
</
style
>
applications/dee-mes/src/privateComponents/components/physicalConfigurationManagement/components/right.vue
0 → 100644
View file @
e3f9c11b
<
template
>
<section
class=
"physical-configuration-management-right-content"
>
<el-tabs
v-model=
"activeName"
type=
"card"
@
tab-click=
"handleClick"
>
<el-tab-pane
label=
"进度记实"
name=
"BRecord"
>
<Schedule
ref=
"BRecord"
/>
</el-tab-pane>
<el-tab-pane
label=
"质量记实"
name=
"CRecord"
>
<Quality
ref=
"CRecord"
/>
</el-tab-pane>
<el-tab-pane
label=
"实物记实"
name=
"DRecord"
>
<Material
ref=
"DRecord"
/>
</el-tab-pane>
<!--
<el-tab-pane
label=
"供应商记实"
name=
"ERecord"
>
<Supplier
ref=
"ERecord"
/>
</el-tab-pane>
-->
<el-tab-pane
label=
"预览"
name=
"FPreview"
>
<Preview
ref=
"FPreview"
/>
</el-tab-pane>
</el-tabs>
</section>
</
template
>
<
script
>
// 预览
import
Preview
from
'./preview'
// 进度记实
import
Schedule
from
'./schedule'
// 实物记实
import
Material
from
'./material'
// 质量记实
import
Quality
from
'./quality'
// 供应商记实
// import Supplier from './supplier'
export
default
{
components
:
{
Preview
,
Material
,
Quality
,
Schedule
// Supplier
},
props
:
{
collapse
:
{
type
:
Boolean
,
default
:
()
=>
true
}
},
data
()
{
return
{
activeName
:
''
,
tabPaneData
:
[]
}
},
created
()
{
this
.
$bus
.
$on
(
'treeCurrentRowData'
,
(
data
)
=>
{
this
.
treeRowData
=
JSON
.
parse
(
JSON
.
stringify
(
data
))
})
this
.
getTabs
()
},
methods
:
{
handleClick
()
{
if
(
this
.
activeName
===
'FPreview'
)
{
this
.
$parent
.
$parent
.
$parent
.
$refs
.
left
.
$refs
.
tree
.
setBRecordOrCRecord
()
this
.
$refs
[
this
.
activeName
].
init
()
}
else
if
(
this
.
activeName
===
'ERecord'
)
{
this
.
$refs
[
this
.
activeName
].
$refs
.
table
.
init
()
}
else
{
if
(
this
.
activeName
===
'DRecord'
)
{
this
.
$parent
.
$refs
.
left
.
$refs
.
tree
.
setBRecordOrCRecord
()
}
this
.
$refs
[
this
.
activeName
].
getComprehensive
()
this
.
$refs
[
this
.
activeName
].
$refs
.
table
.
init
()
}
},
getTabs
()
{
this
.
tabPaneData
=
[]
this
.
HttpRequest
(
'DxProcessPlan/rightMenu'
,
{},
'post'
)
.
then
((
res
)
=>
{
if
(
res
.
items
)
{
for
(
var
key
in
res
.
items
)
{
this
.
tabPaneData
.
push
({
key
:
key
,
value
:
res
.
items
[
key
]
})
}
}
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{
this
.
tabPaneData
.
length
&&
this
.
$nextTick
(()
=>
{
this
.
activeName
=
this
.
tabPaneData
[
0
].
key
this
.
handleClick
()
})
})
},
previewPDF
()
{
this
.
$refs
.
FPreview
.
getPdf
()
}
}
}
</
script
>
<
style
lang=
"scss"
>
.physical-configuration-management-right-content
{
// width: 20px;
height
:
100%
;
// flex-grow: 1;
padding
:
20px
;
border
:
1px
solid
#ccc
;
border-radius
:
8px
;
>
button
{
position
:
absolute
;
right
:
42px
;
z-index
:
9999
;
}
.el-tabs
{
height
:
100%
;
width
:
100%
;
overflow
:
hidden
;
.el-tabs__content
{
height
:
calc
(
100%
-
56px
);
width
:
100%
;
.el-tab-pane
{
height
:
100%
;
width
:
100%
;
}
}
}
}
</
style
>
applications/dee-mes/src/privateComponents/components/physicalConfigurationManagement/components/schedule/index.vue
0 → 100644
View file @
e3f9c11b
<!--
* @Author:ljm
* @Date: 2021-04-25
* @LastEditTime: 2024-07-09 14:51:34
* @Description: 架次实物构型-进度
* @FilePath: /mes-web/applications/dee-mes/src/views/mes//physicalQualityAndConfiguratioCnontrol/physicalConfigurationManagement/SortiesPhysicalConfigurationsSchedule/index.vue'
-->
<
template
>
<section
class=
"physical-documentation-of-sorties-schedule"
>
<div
class=
"logo"
>
<img
src=
"/icons/u188.png"
alt=
""
>
<span>
综合
</span>
</div>
<div
class=
"top"
>
<div
v-for=
"item in comprehensive"
:key=
"item.key"
>
<h3>
{{
item
.
key
}}
</h3>
<el-progress
type=
"circle"
:width=
"100"
:stroke-width=
"15"
:color=
"colors"
stroke-linecap=
"square"
show-text
:percentage=
"item.proportion>100?100:item.proportion"
/>
<p>
任务总数:
{{
item
.
countAO
}}
已完成数:
{{
item
.
countCarry
}}
</p>
</div>
</div>
<hr>
<div
class=
"title"
>
<div
class=
"left"
>
<div
class=
"logo"
style=
"margin: 20px 20px 10px 0px"
>
<img
src=
"/icons/u212.svg"
alt=
""
><span>
明细
</span>
</div>
<el-input
v-model=
"search"
placeholder=
"请输入内容"
clearable
@
change=
"getTable"
/>
</div>
<div
class=
"right"
>
<div
class=
"legnd"
>
<div>
<span
/>
<span>
未开始
</span>
</div>
<div>
<span
/>
<span>
执行中
</span>
</div>
<div>
<span
/>
<span>
已完成
</span>
</div>
<div>
<span
/>
<span>
保留
</span>
</div>
<div>
<span
/>
<span>
暂停
</span>
</div>
</div>
</div>
</div>
<Table
ref=
"table"
:tree-row-data=
"treeRowData"
/>
</section>
</
template
>
<
script
>
import
{
post
}
from
'@/utils/http'
import
Table
from
'./table'
export
default
{
name
:
'Schedule'
,
components
:
{
Table
},
props
:
{
treeRowData
:
{
type
:
Object
,
default
:
()
=>
{}
}
},
data
()
{
return
{
comprehensive
:
[
{
key
:
1
,
countAO
:
0
,
countCarry
:
0
,
proportion
:
0
},
{
key
:
2
,
countAO
:
0
,
countCarry
:
0
,
proportion
:
0
},
{
key
:
3
,
countAO
:
0
,
countCarry
:
0
,
proportion
:
0
}
],
search
:
''
,
colors
:
[{
color
:
'#5cb87a'
,
percentage
:
100
}]
}
},
mounted
()
{},
methods
:
{
getComprehensive
()
{
const
{
modelName
,
sortiesName
}
=
this
.
$parent
.
$parent
.
$parent
.
$parent
.
$parent
.
$parent
.
$refs
.
left
.
form
const
activeName
=
this
.
$parent
.
$parent
.
$parent
.
activeName
console
.
log
(
'🚀 activeName:'
,
activeName
)
this
.
comprehensive
=
[
{
key
:
1
,
countAO
:
0
,
countCarry
:
0
,
proportion
:
0
},
{
key
:
2
,
countAO
:
0
,
countCarry
:
0
,
proportion
:
0
},
{
key
:
3
,
countAO
:
0
,
countCarry
:
0
,
proportion
:
0
}
]
post
(
`ExtProcessPlan/comprehensive?sorties=
${
sortiesName
}
&planType=
${
modelName
}
&number=
${
activeName
}
`
,
{},
'post'
)
.
then
((
res
)
=>
{
if
(
res
.
items
)
{
const
comprehensive
=
[]
for
(
const
key
in
res
.
items
)
{
comprehensive
.
push
({
key
:
key
,
sort
:
key
===
'AO'
?
1
:
key
===
'AOR'
?
2
:
3
,
countAO
:
res
.
items
[
key
].
countAO
,
countCarry
:
res
.
items
[
key
].
countCarry
,
proportion
:
res
.
items
[
key
].
countAO
&&
res
.
items
[
key
].
countCarry
?
Math
.
round
(
(
res
.
items
[
key
].
countCarry
/
res
.
items
[
key
].
countAO
)
*
1000
)
/
10
:
0
})
}
this
.
comprehensive
=
comprehensive
.
sort
((
a
,
b
)
=>
a
.
sort
-
b
.
sort
)
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{})
},
getTable
()
{
this
.
$refs
.
table
.
init
()
}
}
}
</
script
>
<
style
lang=
"scss"
>
.physical-documentation-of-sorties-schedule
{
height
:
100%
;
display
:
flex
;
flex-direction
:
column
;
.logo
{
img
{
width
:
35px
;
height
:
30px
;
vertical-align
:
middle
;
margin-right
:
10px
;
}
span
{
vertical-align
:
middle
;
}
}
.top
{
display
:
flex
;
justify-content
:
space-between
;
margin-bottom
:
20px
;
height
:
182px
;
>
div
{
height
:
100%
;
text-align
:
center
;
h3
{
margin-bottom
:
20px
;
}
p
{
margin-top
:
20px
;
}
}
}
hr
{
height
:
1px
;
background-color
:
#d2d2d2
;
border
:
none
;
}
>
.title
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
>
.left
{
display
:
flex
;
align-items
:
center
;
>
.logo
{
white-space
:
nowrap
;
}
}
>
.right
{
display
:
flex
;
>
.legnd
{
display
:
flex
;
position
:
relative
;
>
div
{
align-items
:
center
;
margin-left
:
20px
;
display
:
flex
;
>
span
{
&
:first-child
{
display
:
inline-block
;
width
:
22px
;
height
:
16px
;
margin-right
:
6px
;
}
&
:last-child
{
font-size
:
10px
;
}
}
&
:nth-child
(
1
)
>
span
:first-child
{
background
:
#999999
;
}
&
:nth-child
(
2
)
>
span
:first-child
{
background
:
#0000ff
;
}
&
:nth-child
(
3
)
>
span
:first-child
{
background
:
#008000
;
}
&
:nth-child
(
4
)
>
span
:first-child
{
background
:
#ff0000
;
}
&
:nth-child
(
5
)
>
span
:first-child
{
background
:
#ffff00
;
}
}
}
}
}
}
</
style
>
applications/dee-mes/src/privateComponents/components/physicalConfigurationManagement/components/schedule/table.vue
0 → 100644
View file @
e3f9c11b
<
template
>
<section
class=
"sorties-physical-configurations-schedule-table dee-table"
>
<!-- 表格 -->
<el-table
:data=
"tableData"
height=
"calc(100% - 40px)"
border
size=
"mini"
highlight-current-row
:cell-class-name=
"cellClassName"
>
<el-table-column
type=
"index"
align=
"center"
label=
"序号"
:width=
"80"
/>
<el-table-column
v-for=
"item in colums"
:key=
"item.key"
:prop=
"item.key"
align=
"center"
:label=
"item.title"
:width=
"item.width"
sortable
show-overflow-tooltip
/>
</el-table>
<el-pagination
:current-page=
"tablePagination.currentPage"
:page-sizes=
"tablePagination.pageSizes"
:page-size=
"tablePagination.pageSize"
layout=
"total, sizes, prev, pager, next, jumper"
:total=
"tablePagination.total"
@
size-change=
"setPage"
@
current-change=
"setPage($event, true)"
/>
</section>
</
template
>
<
script
>
import
{
post
}
from
'@/utils/http'
export
default
{
components
:
{},
props
:
{
treeRowData
:
{
type
:
Object
,
default
:
()
=>
{}
}
},
data
()
{
return
{
// 加载中
loading
:
false
,
// 分页
tablePagination
:
{
currentPage
:
1
,
pageSize
:
10
,
total
:
0
,
pageSizes
:
[
5
,
10
,
20
,
50
]
},
colums
:
[
{
title
:
'AO号'
,
show
:
true
,
key
:
'aoName'
,
sortable
:
true
},
{
title
:
'AO名称'
,
show
:
true
,
key
:
'name'
,
sortable
:
true
},
{
title
:
'版本'
,
width
:
'100'
,
show
:
true
,
key
:
'gaceVersion'
,
sortable
:
true
},
{
title
:
'状态'
,
width
:
'100'
,
show
:
true
,
key
:
'stateDisplayName'
,
sortable
:
true
},
{
title
:
'进度'
,
width
:
'100'
,
show
:
true
,
key
:
'progress'
,
sortable
:
true
}
],
// 表格数据
tableData
:
[],
dictOptions
:
[]
}
},
created
()
{},
mounted
()
{
this
.
getDictData
()
},
methods
:
{
// 加载字典数据
async
getDictData
()
{
this
.
dictOptions
=
await
this
.
$utils
.
getDicListByCode
(
'PlanState'
)
},
// 初始化数据
init
()
{
this
.
tableData
=
[]
var
id
=
this
.
$parent
.
$parent
.
$parent
.
$parent
.
$parent
.
$parent
.
$parent
.
$refs
.
left
.
$refs
.
tree
.
rowData
.
id
var
number
=
this
.
$parent
.
$parent
.
$parent
.
$parent
.
activeName
if
(
!
id
||
!
number
)
{
return
}
const
params
=
{
id
:
id
,
number
:
number
,
pageFrom
:
this
.
tablePagination
.
currentPage
,
pageSize
:
this
.
tablePagination
.
pageSize
,
numberOrName
:
this
.
$parent
.
search
}
// 发送请求
post
(
'/ExtProcessPlan/planDetails'
,
params
,
'post'
)
.
then
((
res
)
=>
{
if
(
res
.
items
&&
res
.
items
.
processPlanVOS
&&
res
.
items
.
processPlanVOS
.
content
&&
res
.
items
.
processPlanVOS
.
content
.
length
)
{
this
.
tableData
=
res
.
items
.
processPlanVOS
.
content
.
map
((
p
)
=>
{
return
{
name
:
p
.
name
,
aoName
:
p
.
serialNumber
,
gaceVersion
:
p
.
gaceVersion
,
stateDisplayName
:
p
.
joExecutePlan
&&
this
.
$utils
.
getParamsFromLists
(
this
.
dictOptions
,
'value'
,
p
.
joExecutePlan
[
0
].
planState
,
'label'
),
planStateCode
:
p
.
joExecutePlan
&&
p
.
joExecutePlan
[
0
].
planState
,
progress
:
p
.
isOkOpPlan
+
'/'
+
p
.
allOpPlan
}
})
this
.
tablePagination
.
total
=
res
.
items
.
processPlanVOS
.
totalElements
}
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{
})
},
setPage
(
$event
,
state
)
{
if
(
state
)
{
this
.
tablePagination
.
currentPage
=
$event
}
else
{
this
.
tablePagination
.
currentPage
=
1
this
.
tablePagination
.
pageSize
=
$event
}
this
.
init
()
},
cellClassName
({
row
,
column
,
rowIndex
,
columnIndex
})
{
if
(
column
.
property
===
'stateDisplayName'
)
{
return
'cell '
+
row
.
planStateCode
}
}
}
}
</
script
>
<
style
lang=
"scss"
>
.sorties-physical-configurations-schedule-table
{
flex-grow
:
1
;
height
:
20px
;
.el-table
thead
th
{
color
:
#2e2e2e
;
font-weight
:
700
;
font-size
:
14px
;
padding
:
0
;
background-color
:
#f3f6f7
;
line-height
:
46px
!
important
;
}
.el-pagination
{
text-align
:
right
;
padding
:
10px
0
;
}
.el-loading-spinner
{
width
:
100%
;
}
.Issued.cell
,
.Run.cell
,
.Yes.cell
,
.Delivery.cell
{
background-color
:
#0000ff
;
color
:
#fff
;
}
.Finish.cell
{
background-color
:
#008000
;
color
:
#fff
;
}
.Reserved.cell
{
background-color
:
#ff0000
;
color
:
#fff
;
}
.Not.cell
{
background-color
:
#999999
;
color
:
#fff
;
}
.Paused.cell
{
background-color
:
#ffff00
;
color
:
#fff
;
}
}
</
style
>
applications/dee-mes/src/privateComponents/components/physicalConfigurationManagement/components/supplier/dialog.vue
0 → 100644
View file @
e3f9c11b
<
template
>
<dee-dialog
title=
"附件浏览"
:dialog-visible
.
sync=
"visible"
width=
"50%"
:before-close=
"handleClose"
class=
"sorties-physical-configurations-supplier-dialog"
>
<div>
<!--
<upload-files
v-if=
"uploadVisble"
v-model=
"form.objFileLinks"
/>
-->
</div>
</dee-dialog>
</
template
>
<
script
>
// import UploadFiles from '@/components/Lean/UploadFiles'
export
default
{
// components: { UploadFiles },
data
()
{
return
{
visible
:
false
,
disabled
:
false
,
uploadVisble
:
true
,
form
:
{
results
:
''
,
objFileLinks
:
[]
},
row
:
{},
loading
:
false
}
},
created
()
{},
methods
:
{
// 打开弹出框
open
(
row
=
{})
{
this
.
form
=
{
results
:
''
,
objFileLinks
:
[]
}
this
.
row
=
row
this
.
form
.
results
=
row
.
results
this
.
visible
=
true
this
.
getList
(
row
.
id
)
},
getList
(
sourceId
)
{
this
.
loading
=
true
this
.
uploadVisble
=
false
const
params
=
{
indices
:
[
'ObjFileLink'
],
searchItems
:
{
items
:
[
{
fieldName
:
'sourceId'
,
operator
:
'EQ'
,
value
:
sourceId
}
],
operator
:
'AND'
},
openProps
:
[
{
pageFrom
:
1
,
pageSize
:
1
,
name
:
'target'
}
]
}
this
.
HttpRequest
(
'/FileUtil/checkFile'
,
params
,
'post'
)
.
then
((
res
)
=>
{
this
.
form
.
objFileLinks
=
res
.
items
.
content
[
0
].
objFileLinks
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{
this
.
loading
=
false
this
.
uploadVisble
=
true
})
},
/**
* 保存功能
* 根据是否有id处理创建和编辑逻辑
*/
save
()
{
this
.
updateFile
()
this
.
removeFile
()
},
removeFile
()
{
var
result
=
[]
var
index
=
[]
this
.
form
.
objFileLinks
.
forEach
((
item
,
i
)
=>
{
if
(
item
.
operator
===
'REMOVE'
)
{
result
.
push
({
id
:
item
.
id
})
index
.
push
(
i
)
}
})
index
.
forEach
((
item
)
=>
{
this
.
$delete
(
this
.
form
.
objFileLinks
,
item
)
})
// 发送请求
this
.
HttpRequest
(
'/FileUtil/removeFile'
,
result
,
'post'
)
.
then
((
res
)
=>
{
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{})
},
// 上传附件
updateFile
()
{
var
result
=
[]
this
.
form
.
objFileLinks
.
forEach
((
item
)
=>
{
result
.
push
({
targetId
:
item
.
target
.
id
,
// fileId
targetIdType
:
'Papers'
,
sourceId
:
this
.
row
.
id
,
// 处理单id
sourceIdType
:
'ExamineRecord'
})
})
this
.
disabled
=
true
this
.
HttpRequest
(
'/FileUtil/upload'
,
result
,
'post'
)
.
then
((
res
)
=>
{
this
.
reset
(
'上传'
)
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{
this
.
disabled
=
false
})
},
// 重置弹出框
reset
(
message
)
{
this
.
visible
=
false
this
.
$message
({
message
:
`
${
message
}
成功`
,
type
:
'success'
})
this
.
$emit
(
'reload'
)
this
.
form
=
{
results
:
''
,
objFileLinks
:
[]
}
},
handleClose
()
{
this
.
visible
=
false
}
}
}
</
script
>
<
style
lang=
"scss"
>
.view-dialog
{
.el-form-item__label
,
.dee-table-header
{
display
:
none
!
important
;
}
}
</
style
>
applications/dee-mes/src/privateComponents/components/physicalConfigurationManagement/components/supplier/index.vue
0 → 100644
View file @
e3f9c11b
<
template
>
<div
class=
"sorties-physical-configurations-supplier"
>
<Table
ref=
"table"
@
open=
"(row) => $refs.dialog.open(row)"
/>
<!-- 弹出框 -->
<Dialog
ref=
"dialog"
/>
</div>
</
template
>
<
script
>
import
Table
from
'./table'
import
Dialog
from
'./dialog.vue'
export
default
{
name
:
'Supplier'
,
components
:
{
Table
,
Dialog
},
data
()
{
return
{}
},
created
()
{},
methods
:
{
getComprehensive
()
{}
}
}
</
script
>
<
style
lang=
"scss"
>
.sorties-physical-configurations-supplier
{
height
:
100%
;
display
:
flex
;
flex-direction
:
column
;
>
section
{
height
:
20px
;
flex-grow
:
1
;
display
:
flex
;
flex-direction
:
column
;
>
.el-table
{
height
:
20px
;
flex-grow
:
1
;
}
.el-pagination
{
text-align
:
right
;
padding-top
:
10px
;
}
}
.el-table
thead
th
{
color
:
#2e2e2e
;
font-weight
:
700
;
font-size
:
14px
;
padding
:
0
;
background-color
:
#f3f6f7
;
line-height
:
46px
!
important
;
}
.el-table
.see-excel
{
color
:
#3a8ee6
;
cursor
:
pointer
;
}
}
.sorties-physical-configurations-supplier-dialog
.upload-files
{
.dee-upload-page
,
.el-form-item--small.el-form-item
{
margin-bottom
:
0
!
important
;
}
.dee-table-header
,
.dee-form2
.el-form-item--small
.el-form-item__label
{
display
:
none
;
}
.el-form-item__content
{
padding-left
:
0
!
important
;
}
}
</
style
>
applications/dee-mes/src/privateComponents/components/physicalConfigurationManagement/components/supplier/table.vue
0 → 100644
View file @
e3f9c11b
<
template
>
<section>
<!-- 表格 -->
<!--
<dee-table
ref=
"table"
:loading=
"loading"
:index-row=
"indexRow"
:columns=
"tableColums"
:data=
"tableData"
:options=
"tableOptions"
:pagination=
"tablePagination"
:selection-row=
"selectionRow"
@
cell-class-name=
"cellClassName"
@
cell-click=
"cellClick"
@
selection-change=
"selectionChange"
@
pagination-size-change=
"paginationSizeChange"
@
pagination-current-change=
"paginationCurrentChange"
>
-->
<el-table
ref=
"table"
v-loading=
"loading"
:data=
"tableData"
height=
"100%"
border
size=
"mini"
highlight-current-row
:cell-class-name=
"cellClassName"
@
cell-click=
"cellClick"
>
<el-table-column
type=
"index"
:width=
"80"
label=
"序号"
align=
"center"
/>
<el-table-column
v-for=
"item in tableColums"
:key=
"item.key"
:prop=
"item.key"
align=
"center"
:label=
"item.title"
:width=
"item.width"
:min-width=
"item.minWidth"
show-overflow-tooltip
:formatter=
"item.formatter"
sortable
/>
</el-table>
<el-pagination
:current-page=
"tablePagination.currentPage"
:page-sizes=
"tablePagination.pageSizes"
:page-size=
"tablePagination.pageSize"
layout=
"total, sizes, prev, pager, next, jumper"
:total=
"tablePagination.total"
@
size-change=
"setPage"
@
current-change=
"setPage($event, true)"
/>
</section>
</
template
>
<
script
>
import
{
downloadPdfHandle
}
from
'@/api/inventory.js'
import
axios
from
'axios'
export
default
{
name
:
'IntegrationWithWaveTable'
,
props
:
{},
data
()
{
return
{
// 加载中
loading
:
false
,
// 工具栏
tools
:
[],
// 选中表格列
selectionRow
:
[],
// 分页
tablePagination
:
{
currentPage
:
1
,
pageSize
:
10
,
total
:
0
,
pageSizes
:
[
10
,
20
,
50
]
},
// 序号
indexRow
:
{
title
:
'序号'
,
align
:
'center'
,
width
:
'70'
},
// 器材验收单动态配置的表格列
colums
:
[
{
title
:
'浏览'
,
show
:
true
,
key
:
'fname'
,
align
:
'center'
,
width
:
220
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'验收单'
,
show
:
true
,
key
:
'testNo'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'110'
,
title
:
'是否合格'
,
show
:
true
,
key
:
'isPassCode'
,
sortable
:
true
,
formatter
:
(
row
,
column
,
cellValue
,
index
)
=>
{
if
(
cellValue
===
'Y'
)
{
return
'是'
}
else
{
return
'否'
}
}
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'物料类型'
,
show
:
true
,
key
:
'jobOrder.dxProcessMaterial.resType2.typeCode'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'编码'
,
show
:
true
,
key
:
'jobOrder.dxProcessMaterial.resCode'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'名称'
,
show
:
true
,
key
:
'jobOrder.dxProcessMaterial.resName'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'150'
,
title
:
'型号/牌号/件号'
,
show
:
true
,
key
:
'jobOrder.dxProcessMaterial.modelNo'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'技术条件'
,
show
:
true
,
key
:
'jobOrder.dxProcessMaterial.techSpec'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'规格'
,
show
:
true
,
key
:
'jobOrder.dxProcessMaterial.spec'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'供应状态'
,
show
:
true
,
key
:
'jobOrder.dxProcessMaterial.supplyStatus'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'150'
,
title
:
'热处理/炉/批号'
,
show
:
true
,
key
:
'jobOrder.lotNo'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'170'
,
title
:
'系列号'
,
show
:
true
,
key
:
'jobOrder.serialNo'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'机型'
,
show
:
true
,
key
:
'jobOrder.airModel'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'架次'
,
show
:
true
,
key
:
'jobOrder.sorties'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'130'
,
title
:
'入库单位'
,
show
:
true
,
key
:
'jobOrder.reqUnit'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'库存数量'
,
show
:
true
,
key
:
'storageAmount'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'库房'
,
show
:
true
,
key
:
'jobOrder.storageName'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'库位'
,
show
:
true
,
key
:
'jobOrder.storageUnitName'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'供应商'
,
show
:
true
,
key
:
'jobOrder.supplier.supplierName'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'制造商'
,
show
:
true
,
key
:
'jobOrder.manufacturer'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'到货日期'
,
show
:
true
,
key
:
'jobOrder.arrivalDate'
,
sortable
:
true
,
formatter
:
(
row
,
column
,
cellValue
,
index
)
=>
cellValue
&&
cellValue
.
split
(
' '
).
length
>
1
?
cellValue
.
split
(
' '
)[
0
]
:
'/'
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'生产日期'
,
show
:
true
,
key
:
'jobOrder.producedTime'
,
sortable
:
true
,
formatter
:
(
row
,
column
,
cellValue
,
index
)
=>
cellValue
&&
cellValue
.
split
(
' '
).
length
>
1
?
cellValue
.
split
(
' '
)[
0
]
:
'/'
},
{
align
:
'center'
,
minWidth
:
'150'
,
title
:
'保质期/贮存期'
,
show
:
true
,
key
:
'jobOrder.qualityPeriod'
,
sortable
:
true
,
formatter
:
(
row
,
column
,
cellValue
,
index
)
=>
cellValue
&&
cellValue
.
split
(
' '
).
length
>
1
?
cellValue
.
split
(
' '
)[
0
]
:
'/'
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'最长期'
,
show
:
true
,
key
:
'jobOrder.longPeriod'
,
sortable
:
true
,
formatter
:
(
row
,
column
,
cellValue
,
index
)
=>
cellValue
&&
cellValue
.
split
(
' '
).
length
>
1
?
cellValue
.
split
(
' '
)[
0
]
:
'/'
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'抽查期'
,
show
:
true
,
key
:
'jobOrder.spotCheckPeriodMounch'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'150'
,
title
:
'到货标准/图号'
,
show
:
true
,
key
:
'jobOrder.arrivedDrawNo'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'150'
,
title
:
'到货版次'
,
show
:
true
,
key
:
'jobOrder.arrivalVer'
,
sortable
:
true
},
{
align
:
'center'
,
title
:
'入库单价'
,
show
:
true
,
key
:
'jobOrder.stockUnitPrice'
,
sortable
:
true
,
minWidth
:
120
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'入库金额'
,
show
:
true
,
key
:
'jobOrder.stockPrice'
,
sortable
:
true
},
// 固定 8
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'含税单价'
,
show
:
true
,
key
:
'jobOrder.taxUnitPrice'
,
sortable
:
true
},
{
align
:
'center'
,
minWidth
:
'120'
,
title
:
'含税金额'
,
show
:
true
,
key
:
'jobOrder.taxPrice'
,
sortable
:
true
},
{
align
:
'center'
,
title
:
'报检人'
,
show
:
true
,
key
:
'jobOrder.itemUserName'
,
sortable
:
true
,
minWidth
:
100
},
{
align
:
'center'
,
title
:
'合同号'
,
show
:
true
,
key
:
'jobOrder.contractNo'
,
sortable
:
true
,
minWidth
:
100
},
{
align
:
'center'
,
title
:
'备注'
,
show
:
true
,
key
:
''
,
sortable
:
true
,
minWidth
:
100
}
],
// 默认展示的表格列
tableColums
:
[],
// 表格数据
tableData
:
[],
// 表格样式配置
tableOptions
:
{
stripe
:
true
,
border
:
true
,
height
:
'100%'
}
}
},
watch
:
{},
created
()
{
this
.
setDefaultColums
()
},
mounted
()
{},
methods
:
{
// 设置默认展示列
setDefaultColums
()
{
this
.
tableColums
=
this
.
colums
.
filter
((
item
)
=>
item
.
show
)
},
// 初始化数据
init
()
{
// 设置数据
this
.
loading
=
true
this
.
tableData
=
[]
var
id
=
this
.
$parent
.
$parent
.
$parent
.
$parent
.
$parent
.
$refs
.
left
.
$refs
.
tree
.
rowData
.
id
var
number
=
this
.
$parent
.
$parent
.
$parent
.
$parent
.
activeName
if
(
!
id
||
!
number
)
{
return
}
const
params
=
{
id
:
id
,
number
:
number
,
pageFrom
:
this
.
tablePagination
.
currentPage
,
pageSize
:
this
.
tablePagination
.
pageSize
,
numberOrName
:
this
.
$parent
.
search
}
// 发送请求
this
.
HttpRequest
(
'/DxProcessPlan/planDetails'
,
params
,
'post'
)
.
then
((
res
)
=>
{
this
.
tableData
=
res
.
items
.
jobResponseInStorageVoDxPage
.
content
this
.
tablePagination
.
total
=
res
.
items
.
jobResponseInStorageVoDxPage
.
totalElements
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
this
.
loading
=
false
})
},
cellClick
(
row
,
column
,
cell
,
event
)
{
if
(
column
.
property
===
'fname'
)
{
this
.
handleExport
(
row
)
}
},
/**
* 页码触发
*/
setPage
(
$event
,
state
)
{
if
(
state
)
{
this
.
tablePagination
.
currentPage
=
$event
}
else
{
this
.
tablePagination
.
currentPage
=
1
this
.
tablePagination
.
pageSize
=
$event
}
this
.
init
()
},
// 选择项发生改变
selectionChange
(
val
)
{
this
.
selectionRow
=
val
this
.
$emit
(
'selectionRow'
,
val
)
},
cellClassName
({
row
,
column
,
rowIndex
,
columnIndex
})
{
if
(
column
.
property
===
'fname'
)
{
return
'see-excel'
}
return
'asdasf'
},
handleExport
(
row
)
{
const
baseURl
=
downloadPdfHandle
()
axios
({
method
:
'get'
,
url
:
`/dfs/fileManager/downloadio?fileId=
${
row
.
fileId
}
`
,
baseURL
:
baseURl
,
params
:
{},
headers
:
{
token
:
`
${
localStorage
.
getItem
(
'token'
)}
`
,
'equipment_id'
:
`
${
localStorage
.
getItem
(
'uid'
)}
`
},
responseType
:
'arraybuffer'
})
.
then
((
res
)
=>
{
const
blob
=
new
Blob
([
res
.
data
],
{
type
:
'application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
})
if
(
window
.
navigator
.
msSaveOrOpenBlob
)
{
navigator
.
msSaveBlob
(
blob
)
}
else
{
const
elink
=
document
.
createElement
(
'a'
)
elink
.
download
=
row
.
fname
elink
.
style
.
display
=
'none'
elink
.
href
=
URL
.
createObjectURL
(
blob
)
document
.
body
.
appendChild
(
elink
)
elink
.
click
()
document
.
body
.
removeChild
(
elink
)
}
// } else {
// // IE10+下载
// navigator.msSaveBlob(blob)
// }
})
.
catch
((
err
)
=>
{
console
.
error
(
err
)
})
.
finally
(()
=>
{
this
.
disabled
=
false
this
.
loading
=
false
})
}
}
}
</
script
>
applications/dee-mes/src/privateComponents/components/physicalConfigurationManagement/index.vue
0 → 100644
View file @
e3f9c11b
<!--
* @LastEditTime: 2024-07-09 10:09:20
* @Description: 实物构型管理
-->
<
template
>
<section
class=
"physicalConfigurationManagement"
>
<dee-fold-pane
:min-percent=
"18"
:default-percent=
"18"
split=
"vertical"
class=
"detail-pane"
>
<template
slot=
"paneL"
>
<div
class=
"left-container"
>
<Left
ref=
"left"
/>
</div>
</
template
>
<
template
slot=
"paneR"
>
<div
class=
"right-container"
>
<!-- 223333 -->
<Right
ref=
"right"
:collapse=
"collapse"
/>
</div>
</
template
>
</dee-fold-pane>
</section>
</template>
<
script
>
import
Left
from
'./components/left'
import
Right
from
'./components/right'
export
default
{
name
:
'PhysicalConfigurationManagement'
,
componentName
:
'实物构型管理'
,
components
:
{
Left
,
Right
},
data
()
{
return
{
collapse
:
true
}
},
methods
:
{
handleCollapse
(
val
)
{
// this.collapse = val
}
}
}
</
script
>
<
style
lang=
"scss"
>
.physicalConfigurationManagement
{
width
:
100%
;
height
:
100%
;
padding
:
4px
;
box-sizing
:
border-box
;
.left-container
{
height
:
100%
;
overflow-x
:hidden
;
.search-box
{
height
:
150px
;
font-size
:
14px
;
.title
{
margin-left
:
10px
;
text-align
:
left
;
margin-top
:
10px
;
}
.search-icon
{
display
:
inline-block
;
width
:
21px
;
height
:
21px
;
background
:
url(/icons/r-access.png)
no-repeat
;
background-size
:
contain
;
vertical-align
:
middle
;
}
label
{
margin-right
:
6px
;
display
:
inline-block
;
}
.el-select
{
width
:
calc
(
100%
-
60px
);
}
.row
{
line-height
:
40px
;
height
:
40px
;
text-align
:
center
;
}
}
.station-box
{
height
:
calc
(
100%
-
190px
);
.search-area
{
display
:
flex
;
align-items
:
center
;
justify-content
:flex-start
;
padding
:
6px
0px
;
.search-input
{
// width: calc(100% - 150px);
// flex:1;
margin-right
:
10px
;
}
}
}
.box
{
// width: 100%;
margin
:
4px
;
border
:
1px
solid
#d8d8d8
;
border-radius
:
8px
;
padding
:
4px
;
.plan-tree
{
height
:
100%
;
overflow
:
scroll
;
.highlight-text
{
background
:
yellow
;
}
.el-tree-node
{
width
:
max-content
;
min-width
:
100%
;
}
.el-tree-node.is-current
>
.el-tree-node__content
{
background-color
:
rgb
(
214
,
214
,
214
)
!
important
;
}
.el-tree-node
:focus
>
.el-tree-node__content
{
background-color
:
#fff
;
}
&
.el-tree--highlight-current
.el-tree-node__content
{
&
.disabled
{
color
:
#c0c4cc
;
cursor
:
not
-
allowed
;
background-color
:
#fff
;
}
&
.is-curr
:not
(
.disabled
),
&
:hover:not
(
.disabled
)
{
font-weight
:
bold
;
color
:
rgb
(
31
,
30
,
30
);
background-color
:
rgb
(
214
,
214
,
214
);
}
}
.el-tree-node
{
.el-tree-node__content
{
height
:
40px
!
important
;
.el-tree-node__expand-icon.is-leaf
{
color
:
transparent
!
important
;
}
.el-tree-node__expand-icon
{
color
:
#000
;
font-size
:
24px
;
}
i
{
display
:
inline-block
;
vertical-align
:
middle
;
margin
:
10px
;
}
.tree1
{
background
:
url('/icons/aircraft.png')
no-repeat
;
width
:
32px
;
height
:
30px
;
}
.tree2
{
width
:
21px
;
height
:
21px
;
background
:
url('/icons/u513.png')
no-repeat
;
background-size
:
contain
;
}
.tree3
{
width
:
21px
;
height
:
21px
;
background
:
url('/icons/u517.png')
no-repeat
;
background-size
:
contain
;
}
.label
{
vertical-align
:
middle
;
}
.Issued
,
.Run
,
.New
,
.Yes
,
.Delivery
{
color
:
#0000ff
;
}
.Finish
{
color
:
#008000
;
}
.Reserved
{
color
:
#ff0000
;
}
.Not
{
color
:
#999999
;
}
.Paused
{
color
:
#ffff00
;
}
}
}
}
}
}
.right-container
{
position
:
relative
;
height
:
96%
;
margin-left
:
20px
;
.areaUpdateTip
{
position
:
absolute
;
top
:
20px
;
right
:
40px
;
color
:
#ff0000
;
}
}
}
</
style
>
applications/dee-task-center/src/views/home/compontents/apply-app.vue
View file @
e3f9c11b
...
...
@@ -58,10 +58,6 @@ export default {
icon
:
'/icons/home/报表中心.png'
,
title
:
'报表中心'
},
// {
// icon: '/icons/home/实物构型管理.png',
// title: '实物构型管理'
// },
{
icon
:
'/icons/home/基础数据管理.png'
,
title
:
'基础数据管理'
...
...
@@ -83,6 +79,10 @@ export default {
{
icon
:
'/icons/home/单架次MBOM.png'
,
title
:
'单架次MBOM配置'
},
{
icon
:
'/icons/home/实物构型管理.png'
,
title
:
'实物构型管理'
}
]
}
...
...
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