Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mes-ui
Project
Project
Details
Activity
Releases
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
周远喜
mes-ui
Commits
aced6700
Commit
aced6700
authored
May 12, 2020
by
renjintao
Browse files
Options
Browse Files
Download
Plain Diff
techenology
parents
03f162f1
0923cab7
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
1327 additions
and
755 deletions
+1327
-755
filed.vue
components/page/filed.vue
+9
-13
user.vue
components/page/user.vue
+5
-4
error.vue
layouts/error.vue
+8
-8
package-lock.json
package-lock.json
+4
-2
compare.vue
pages/aps/results/compare.vue
+54
-81
gantt-header.vue
pages/aps/results/components/gantt-header.vue
+325
-0
gantt.vue
pages/aps/results/gantt.vue
+385
-0
index.vue
pages/aps/results/index.vue
+106
-126
parameter.vue
pages/aps/results/parameter.vue
+0
-279
result.vue
pages/aps/results/result.vue
+8
-30
results.less
pages/aps/results/results.less
+174
-99
execute.less
pages/produce/execute/execute.less
+8
-4
add.vue
pages/technology/details/add.vue
+17
-18
edit.vue
pages/technology/details/edit.vue
+18
-19
add.vue
pages/technology/details/routingStep/add.vue
+18
-19
edit.vue
pages/technology/details/routingStep/edit.vue
+18
-19
index.vue
pages/technology/index.vue
+2
-2
resource.vue
pages/test/resource.vue
+124
-32
treeNode.vue
pages/test/treeNode.vue
+44
-0
No files found.
components/page/filed.vue
View file @
aced6700
...
...
@@ -34,24 +34,21 @@ export default {
border-right: none;
margin: 0 -1px -1px -1px;
box-sizing: border-box;
line-height: 70px;
display: flex;
line-height: 40px;
.label {
background: #
e8eaf1
;
background: #
f7f7f7
;
display: inline-block;
width: 1
0
0px;
width: 1
1
0px;
text-align: right;
padding: 0 5px;
line-height: 40px;
float: left;
height: 100%;
padding: 0 10px 0 0;
border-right: 1px solid #ddd;
}
p {
height: 100%;
word-break: break-all;
word-wrap: break-word;
margin: 0 10px 0 110px;
line-height: 20px;
padding-top: 10px;
flex-grow: 1;
padding-left: 10px;
}
}
.ivu-col-span-24 {
...
...
@@ -65,7 +62,7 @@ export default {
}
}
}
.new
-
detail {
.new
_
detail {
.ivu-row {
width: 100% !important;
.filed-col {
...
...
@@ -76,7 +73,6 @@ export default {
width: 100px;
text-align: right;
line-height: 40px;
float: left;
height: 100%;
font-weight: bold;
}
...
...
components/page/user.vue
View file @
aced6700
...
...
@@ -2,7 +2,7 @@
<Poptip
placement=
"bottom-start"
trigger=
"hover"
width=
"240"
transfer
>
<label
:class=
"css"
>
{{
user
.
name
}}
</label>
<div
slot=
"content"
>
<Avatar
v-if=
"user.face"
size=
"large"
:src=
"
user.face
"
></Avatar>
<Avatar
v-if=
"user.face"
size=
"large"
:src=
"
img
"
></Avatar>
<Avatar
v-else
size=
"large"
...
...
@@ -44,7 +44,8 @@ export default {
loginName
:
""
,
id
:
0
},
css
:
"s0"
css
:
"s0"
,
img
:
''
,
};
},
...
...
@@ -63,8 +64,8 @@ export default {
}
else
if
(
this
.
user
.
status
==
1
)
{
this
.
css
=
"s1"
;
}
if
(
this
.
user
.
face
)
{
this
.
user
.
face
=
fileUrlDown
+
this
.
user
.
face
;
if
(
user
.
face
)
{
this
.
img
=
fileUrlDown
+
user
.
face
;
}
}
}
...
...
layouts/error.vue
View file @
aced6700
...
...
@@ -10,14 +10,14 @@
export
default
{
props
:
[
'error'
],
// layout: 'blog' // you can set a custom layout for the error page
//
watch:{
//
error(v){
//
debugger;
//
if(v.statusCode==404){
//
this.$router.push("/error/404");
//
}
//
}
watch
:{
error
(
v
){
debugger
;
if
(
v
.
statusCode
==
404
){
this
.
$router
.
push
(
"/error/404"
);
}
}
//
}
}
}
</
script
>
\ No newline at end of file
package-lock.json
View file @
aced6700
...
...
@@ -9538,7 +9538,8 @@
"dependencies"
:
{
"deepmerge"
:
{
"version"
:
"2.2.1"
,
"bundled"
:
true
"resolved"
:
"https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz"
,
"integrity"
:
"sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA=="
}
}
},
...
...
@@ -19890,7 +19891,8 @@
"version"
:
"4.0.8"
,
"resolved"
:
"https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz"
,
"integrity"
:
"sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ="
,
"dev"
:
true
"dev"
:
true
,
"optional"
:
true
},
"rx-lite-aggregates"
:
{
"version"
:
"4.0.8"
,
...
...
pages/aps/results/compare.vue
View file @
aced6700
<
template
>
<div
class=
"compare"
>
<div
class=
"btn"
style=
"z-index:9999;position:absolute;right:0"
>
<Button
type=
"primary"
@
click=
"parameter"
>
下发
</Button>
<!--
<Button
type=
"primary"
>
导出
</Button>
000 -->
<Button
type=
"primary"
icon=
"ios-redo"
@
click=
"comeBlck"
>
返回
</Button>
</div>
<div
class=
"compare"
>
<div
class=
"compare_box"
:style=
"
{height:treeHeight+'px'}">
<div
class=
"left_list"
>
<ul
class=
"left_ul"
>
<li
class=
"left_ul_title"
>
隐藏相同
<i-switch
size=
"small"
v-model=
"switch1"
@
on-change=
"change"
/>
<div
class=
"left_list"
>
<ul
class=
"left_ul"
>
<li
class=
"left_ul_title"
>
隐藏相同
<i-switch
size=
"small"
v-model=
"switch1"
@
on-change=
"change"
/>
</li>
<li>
延期交付批次数
</li>
<li>
延期交付天数
</li>
<li>
提前交付批次数
</li>
<li>
提前交付天数
</li>
<li>
周日加班设备数
</li>
<li>
周日设备工作小时数
</li>
<li>
周六加班设备数
</li>
<li>
周六设备工作小时数
</li>
<li>
重叠法工序数
</li>
<li>
离散法工序数
</li>
<li>
离散值平均值
</li>
<li>
任务平衡工序数
</li>
<li>
效率系数
</li>
</ul>
</div>
<div
class=
"right_add flex"
>
<div
class=
"fg list_box"
v-for=
"a of 5"
:class=
"a%2 == 1?'dip_bg':''"
:key=
"a"
>
<ul
class=
"right_ul"
>
<li
class=
"right_ul_title"
>
<a
class=
"del_case"
>
<Icon
type=
"md-close"
size=
"16"
@
click=
"delitedCase"
title=
"删除"
/>
</a>
<span
class=
"case"
>
方案一
{{
a
}}
</span>
<span
class=
"case_time"
>
2020-03-22 13:26:35
</span>
</li>
<li>
延期交付批次数
</li>
<li>
延期交付天数
</li>
...
...
@@ -27,101 +47,54 @@
<li>
效率系数
</li>
</ul>
</div>
<div
class=
"right_add flex"
>
<div
class=
"fg list_box"
v-for=
"a of 5"
:class=
"a%2 == 1?'dip_bg':''"
>
<ul
class=
"right_ul"
>
<li
class=
"right_ul_title"
>
<a
class=
"del_case"
>
<Icon
type=
"md-close"
size=
"16"
@
click=
"delitedCase"
title=
"删除"
/>
</a>
<span
class=
"case"
>
方案一
{{
a
}}
</span>
<span
class=
"case_time"
>
2020-03-22 13:26:35
</span>
</li>
<li>
延期交付批次数
</li>
<li>
延期交付天数
</li>
<li>
提前交付批次数
</li>
<li>
提前交付天数
</li>
<li>
周日加班设备数
</li>
<li>
周日设备工作小时数
</li>
<li>
周六加班设备数
</li>
<li>
周六设备工作小时数
</li>
<li>
重叠法工序数
</li>
<li>
离散法工序数
</li>
<li>
离散值平均值
</li>
<li>
任务平衡工序数
</li>
<li>
效率系数
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</
template
>
<
script
>
import
Api
from
"./api"
;
export
default
{
data
()
{
return
{
code
:
'2'
,
name
:
'添加'
,
code
:
"2"
,
name
:
"添加"
,
tree
:
[],
switch1
:
true
,
treeHeight
:
""
,
}
treeHeight
:
""
}
;
},
async
fetch
({
store
,
params
})
{
await
store
.
dispatch
(
'loadDictionary'
)
// 加载数据字典
await
store
.
dispatch
(
"loadDictionary"
);
// 加载数据字典
},
components
:
{},
created
()
{
this
.
treeHeight
=
window
.
innerHeight
-
170
this
.
treeHeight
=
window
.
innerHeight
-
170
;
},
mounted
()
{
window
.
onresize
=
()
=>
{
///浏览器窗口大小变化
return
(()
=>
{
window
.
screenHeight
=
window
.
innerHeight
this
.
treeHeight
=
window
.
screenHeight
-
170
window
.
screenHeight
=
window
.
innerHeight
;
this
.
treeHeight
=
window
.
screenHeight
-
170
;
})();
}
}
;
},
methods
:
{
// 下发
parameter
()
{
Api
.
processschemedispatch
({
id
:
this
.
id
}).
then
(
r
=>
{
if
(
r
.
result
)
{
this
.
$Message
.
success
(
r
.
result
.
retmsg
);
this
.
orderlist
();
}
else
{
this
.
$Message
.
success
(
"下发失败"
);
}
});
},
// 返回
comeBlck
()
{
this
.
$router
.
push
({
path
:
"/aps/aps"
});
},
change
(
status
){
this
.
$Message
.
info
(
'开关状态:'
+
status
);
change
(
status
)
{
this
.
$Message
.
info
(
"开关状态:"
+
status
);
},
// 删除方案
delitedCase
(){
this
.
$Message
.
info
(
'删除方案'
);
delitedCase
()
{
this
.
$Message
.
info
(
"删除方案"
);
},
tabChange
(
name
)
{
if
(
name
==
'technicalcoordination'
)
{
this
.
$refs
.
technicalcoordination
.
loadchangelist
();
}
if
(
name
==
'unqualifiedorder'
)
{
this
.
$refs
.
unqualifiedorder
.
loadchangelist
();
}
},
if
(
name
==
"technicalcoordination"
)
{
this
.
$refs
.
technicalcoordination
.
loadchangelist
();
}
if
(
name
==
"unqualifiedorder"
)
{
this
.
$refs
.
unqualifiedorder
.
loadchangelist
();
}
}
}
}
}
;
</
script
>
pages/aps/results/components/gantt-header.vue
0 → 100644
View file @
aced6700
<!--
/**
* @fileoverview Header component
* @license MIT
* @author Rafal Pospiech <neuronet.io@gmail.com>
* @package GanttElasticHeader
*/
-->
<
template
>
<div
class=
"gantt-elastic__header"
:style=
"
{ ...style['header'] }">
<div
class=
"gantt-elastic__header-title"
:style=
"
{ ...style['header-title'] }">
<div
class=
"gantt-elastic__header-title--text"
:style=
"
{ ...style['header-title--text'] }"
v-if="!opts.title.html"
>
{{
opts
.
title
.
label
}}
</div>
<div
class=
"gantt-elastic__header-title--html"
:style=
"
{ ...style['header-title--html'] }"
v-if="opts.title.html"
v-html="opts.title.label"
>
</div>
</div>
<div
class=
"gantt-elastic__header-options"
:style=
"
{ ...style['header-options'] }">
<!--
<button
class=
"gantt-elastic__header-btn-recenter"
:style=
"
{ ...style['header-btn-recenter'] }"
@click.prevent="recenterPosition"
>
{{
opts
.
locale
.
Now
}}
</button>
-->
<label
class=
"gantt-elastic__header-label"
:style=
"
{ ...style['header-label'] }">
{{
opts
.
locale
[
"X-Scale"
]
}}
<div
class=
"gantt-elastic__header-slider-wrapper"
:style=
"
{ ...style['header-slider-wrapper'] }"
>
<vue-slider
class=
"gantt-elastic__header-slider"
tooltip=
"none"
:style=
"
{ ...style['header-slider'] }"
:process-style="{ ...style['header-slider--process'] }"
:slider-style="{ ...style['header-slider--slider'] }"
v-model="scale"
:max="24"
:min="2"
width="100px"
>
</vue-slider>
</div>
</label>
<label
class=
"gantt-elastic__header-label"
:style=
"
{ ...style['header-label'] }">
{{
opts
.
locale
[
"Y-Scale"
]
}}
<div
class=
"gantt-elastic__header-slider-wrapper"
:style=
"
{ ...style['header-slider-wrapper'] }"
>
<vue-slider
class=
"gantt-elastic__header-slider"
tooltip=
"none"
:style=
"
{ ...style['header-slider'] }"
:process-style="{ ...style['header-slider--process'] }"
:slider-style="{ ...style['header-slider--slider'] }"
v-model="height"
:max="100"
:min="7"
width="100px"
>
</vue-slider>
</div>
</label>
<label
class=
"gantt-elastic__header-label"
:style=
"
{ ...style['header-label'] }">
{{
opts
.
locale
[
"Before/After"
]
}}
<div
class=
"gantt-elastic__header-slider-wrapper"
:style=
"
{ ...style['header-slider-wrapper'] }"
>
<vue-slider
class=
"gantt-elastic__header-slider"
tooltip=
"none"
:style=
"
{ ...style['header-slider'] }"
:process-style="{ ...style['header-slider--process'] }"
:slider-style="{ ...style['header-slider--slider'] }"
v-model="scope"
:max="31"
:min="0"
width="100px"
>
</vue-slider>
</div>
</label>
<label
class=
"gantt-elastic__header-label"
:style=
"
{ ...style['header-label'] }">
{{
opts
.
locale
[
"Task list width"
]
}}
<div
class=
"gantt-elastic__header-slider-wrapper"
:style=
"
{ ...style['header-slider-wrapper'] }"
>
<vue-slider
class=
"gantt-elastic__header-slider"
tooltip=
"none"
:style=
"
{ ...style['header-slider'] }"
:process-style="{ ...style['header-slider--process'] }"
:slider-style="{ ...style['header-slider--slider'] }"
v-model="divider"
:max="100"
:min="0"
width="100px"
>
</vue-slider>
</div>
</label>
<label
class=
"gantt-elastic__header-task-list-switch--wrapper"
:style=
"
{ ...style['header-task-list-switch--label'] }"
>
<switches
class=
"gantt-elastic__header-task-list-switch"
:style=
"
{ ...style['header-task-list-switch'] }"
v-model="root.state.options.taskList.display"
>
</switches>
{{
opts
.
locale
[
"Display task list"
]
}}
</label>
</div>
</div>
</
template
>
<
script
>
import
vueSlider
from
"vue-slider-component"
;
import
"vue-slider-component/theme/default.css"
;
import
Switches
from
"vue-switches"
;
const
defaultStyle
=
{
header
:
{
margin
:
"0px auto"
,
background
:
"#f3f5f747"
,
padding
:
"10px"
,
overflow
:
"hidden"
,
clear
:
"both"
,
display
:
"flex"
,
"justify-content"
:
"space-between"
},
"header-title"
:
{
float
:
"left"
},
"header-options"
:
{
float
:
"right"
},
"header-title--text"
:
{
"font-size"
:
"20px"
,
"vertical-align"
:
"middle"
,
"font-weight"
:
"400"
,
"line-height"
:
"35px"
,
"padding-left"
:
"22px"
,
"letter-spacing"
:
"1px"
},
"header-title--html"
:
{
"font-size"
:
"20px"
,
"vertical-align"
:
"middle"
,
"font-weight"
:
"400"
,
"line-height"
:
"35px"
,
"padding-left"
:
"22px"
,
"letter-spacing"
:
"1px"
},
"header-btn-recenter"
:
{
background
:
"#95A5A6"
,
border
:
"none"
,
outline
:
"none"
,
cursor
:
"pointer"
,
color
:
"white"
,
"border-radius"
:
"3px"
,
"margin-right"
:
"27px"
,
"font-size"
:
"16px"
,
padding
:
"8px 12px"
},
"header-slider"
:
{
"box-sizing"
:
"content-box"
},
"header-slider-wrapper"
:
{
display
:
"inline-block"
,
"vertical-align"
:
"middle"
},
"header-slider--slider"
:
{
"box-sizing"
:
"content-box"
},
"header-slider--process"
:
{
"box-sizing"
:
"content-box"
},
"header-task-list-switch--label"
:
{
"box-sizing"
:
"content-box"
},
"header-task-list-switch"
:
{
margin
:
"0px 15px"
,
"vertical-align"
:
"middle"
},
"header-label"
:
{}
};
const
defaultOptions
=
{
title
:
{
// label: "任务甘特图",
html
:
false
},
locale
:
{
Now
:
"Now"
,
"X-Scale"
:
"缩放-X"
,
"Y-Scale"
:
"缩放-Y"
,
"Task list width"
:
"任务列表"
,
"Before/After"
:
"展开日期"
,
"Display task list"
:
"是否展开任务列表"
}
};
export
default
{
name
:
"GanttHeader"
,
components
:
{
vueSlider
,
Switches
},
props
:
[
"options"
,
"dynamicStyle"
],
inject
:
[
"root"
],
data
()
{
return
{
scaleTimeoutId
:
null
,
firstScale
:
false
,
localScale
:
0
,
localHeight
:
0
,
localBefore
:
0
,
localPercent
:
0
,
sliderOptions
:
{
xScale
:
{
value
:
0
}
},
style
:
{},
opts
:
{}
};
},
created
()
{
this
.
localScale
=
this
.
root
.
state
.
options
.
times
.
timeZoom
;
this
.
localHeight
=
this
.
root
.
state
.
options
.
row
.
height
;
this
.
localBefore
=
this
.
root
.
state
.
options
.
scope
.
before
;
this
.
localPercent
=
this
.
root
.
state
.
options
.
taskList
.
percent
;
this
.
sliderOptions
.
xScale
.
value
=
this
.
root
.
state
.
options
.
times
.
timeZoom
;
this
.
style
=
this
.
root
.
mergeDeep
({},
defaultStyle
,
this
.
dynamicStyle
);
this
.
opts
=
this
.
root
.
mergeDeep
({},
defaultOptions
,
this
.
options
);
},
methods
:
{
getImage
()
{
this
.
root
.
getImage
(
"image/png"
).
then
(
imgB64
=>
{
const
link
=
document
.
createElement
(
"a"
);
link
.
href
=
imgB64
;
link
.
download
=
"gantt-elastic.png"
;
document
.
body
.
appendChild
(
link
);
link
.
click
();
document
.
body
.
removeChild
(
link
);
});
},
recenterPosition
()
{
this
.
root
.
$emit
(
"recenterPosition"
);
},
setScale
(
value
)
{
if
(
this
.
scaleTimeoutId
!==
null
)
{
clearTimeout
(
this
.
scaleTimeoutId
);
this
.
scaleTimeoutId
=
null
;
}
// debouncing
if
(
this
.
firstScale
)
{
this
.
scaleTimeoutId
=
setTimeout
(()
=>
{
this
.
root
.
$emit
(
"times-timeZoom-change"
,
value
);
this
.
scaleTimeoutId
=
null
;
},
50
);
}
else
{
this
.
root
.
$emit
(
"times-timeZoom-change"
,
value
);
this
.
firstScale
=
true
;
}
}
},
computed
:
{
/**
* If there is a component slot specified for header
* @returns {bool}
*/
beforeOptionsIsComponent
()
{
const
headerSlot
=
this
.
options
.
slots
.
header
;
if
(
typeof
headerSlot
.
beforeOptions
===
"object"
&&
!
Array
.
isArray
(
headerSlot
.
beforeOptions
)
)
{
return
true
;
}
return
false
;
},
/**
* If there is a slot with beforeOptions html content
* @returns {bool}
*/
beforeOptionsIsHtml
()
{
if
(
typeof
this
.
options
.
slots
.
header
.
beforeOptions
===
"string"
)
{
return
true
;
}
return
false
;
},
scale
:
{
get
()
{
return
this
.
localScale
;
},
set
(
value
)
{
this
.
localScale
=
Number
(
value
);
this
.
setScale
(
this
.
localScale
);
}
},
height
:
{
get
()
{
return
this
.
localHeight
;
},
set
(
value
)
{
this
.
localHeight
=
Number
(
value
);
this
.
root
.
$emit
(
"row-height-change"
,
Number
(
value
));
}
},
scope
:
{
get
()
{
return
this
.
localBefore
;
},
set
(
value
)
{
this
.
localBefore
=
Number
(
value
);
this
.
root
.
$emit
(
"scope-change"
,
Number
(
value
));
}
},
divider
:
{
get
()
{
return
this
.
localPercent
;
},
set
(
value
)
{
this
.
localPercent
=
Number
(
value
);
this
.
root
.
$emit
(
"taskList-width-change"
,
Number
(
value
));
}
}
}
};
</
script
>
pages/aps/results/gantt.vue
0 → 100644
View file @
aced6700
<
template
>
<div
class=
"q-pa-sm"
>
<gantt-elastic
:options=
"options"
:tasks=
"tasks"
@
tasks-changed=
"tasksUpdate"
@
options-changed=
"optionsUpdate"
@
dynamic-style-changed=
"styleUpdate"
>
<gantt-header
slot=
"header"
></gantt-header>
</gantt-elastic>
<div
class=
"q-mt-md"
/>
<!--
<q-btn
@
click=
"addTask"
icon=
"mdi-plus"
label=
"Add task"
/>
-->
</div>
</
template
>
<
style
>
</
style
>
<
script
>
import
GanttElastic
from
"gantt-elastic"
;
import
GanttHeader
from
"./components/gantt-header"
;
import
dayjs
from
"dayjs"
;
// just helper to get current dates
function
getDate
(
hours
)
{
const
currentDate
=
new
Date
();
const
currentYear
=
currentDate
.
getFullYear
();
const
currentMonth
=
currentDate
.
getMonth
();
const
currentDay
=
currentDate
.
getDate
();
const
timeStamp
=
new
Date
(
currentYear
,
currentMonth
,
currentDay
,
0
,
0
,
0
).
getTime
();
return
new
Date
(
timeStamp
+
hours
*
60
*
60
*
1000
).
getTime
();
}
let
tasks
=
[
{
id
:
1
,
label
:
"任务1"
,
user
:
'<a href="https://www.google.com/search?q=John+Doe" target="_blank" style="color:#0077c0;">John Doe</a>'
,
start
:
getDate
(
-
24
*
5
),
duration
:
15
*
24
*
60
*
60
*
1000
,
percent
:
85
,
type
:
"project"
//collapsed: true,
},
{
id
:
2
,
label
:
"任务2"
,
user
:
'<a href="https://www.google.com/search?q=Peter+Parker" target="_blank" style="color:#0077c0;">Peter Parker</a>'
,
parentId
:
1
,
start
:
getDate
(
-
24
*
4
),
duration
:
4
*
24
*
60
*
60
*
1000
,
percent
:
50
,
type
:
"milestone"
,
collapsed
:
true
,
style
:
{
base
:
{
fill
:
"#1EBC61"
,
stroke
:
"#0EAC51"
}
}
},
{
id
:
3
,
label
:
"任务3"
,
user
:
'<a href="https://www.google.com/search?q=John+Wayne" target="_blank" style="color:#0077c0;">John Wayne</a>'
,
parentId
:
2
,
start
:
getDate
(
-
24
*
3
),
duration
:
2
*
24
*
60
*
60
*
1000
,
percent
:
100
,
type
:
"task"
},
{
id
:
4
,
label
:
"任务4"
,
user
:
'<a href="https://www.google.com/search?q=Clark+Kent" target="_blank" style="color:#0077c0;">Clark Kent</a>'
,
start
:
getDate
(
-
24
*
2
),
duration
:
2
*
24
*
60
*
60
*
1000
,
percent
:
50
,
type
:
"task"
,
dependentOn
:
[
3
]
},
{
id
:
5
,
label
:
"任务5"
,
user
:
'<a href="https://www.google.com/search?q=Austin+Powers" target="_blank" style="color:#0077c0;">Austin Powers</a>'
,
parentId
:
4
,
start
:
getDate
(
0
),
duration
:
2
*
24
*
60
*
60
*
1000
,
percent
:
10
,
type
:
"milestone"
,
style
:
{
base
:
{
fill
:
"#0287D0"
,
stroke
:
"#0077C0"
}
}
},
{
id
:
6
,
label
:
"任务6"
,
user
:
'<a href="https://www.google.com/search?q=Mario+Bros" target="_blank" style="color:#0077c0;">Mario Bros</a>'
,
parentId
:
5
,
start
:
getDate
(
24
),
duration
:
1
*
24
*
60
*
60
*
1000
,
percent
:
50
,
type
:
"task"
,
collapsed
:
true
,
style
:
{
base
:
{
fill
:
"#8E44AD"
,
stroke
:
"#7E349D"
}
}
},
{
id
:
7
,
label
:
"任务7"
,
user
:
'<a href="https://www.google.com/search?q=Knight+Rider" target="_blank" style="color:#0077c0;">Knight Rider</a>'
,
parentId
:
2
,
dependentOn
:
[
6
],
start
:
getDate
(
24
*
2
),
duration
:
4
*
60
*
60
*
1000
,
percent
:
20
,
type
:
"task"
,
collapsed
:
true
},
{
id
:
8
,
label
:
"任务8"
,
user
:
'<a href="https://www.google.com/search?q=Johhny+Bravo" target="_blank" style="color:#0077c0;">Johhny Bravo</a>'
,
parentId
:
7
,
dependentOn
:
[
7
],
start
:
getDate
(
24
*
3
),
duration
:
1
*
24
*
60
*
60
*
1000
,
percent
:
0
,
type
:
"task"
},
{
id
:
9
,
label
:
"任务9"
,
user
:
'<a href="https://www.google.com/search?q=Dexter
\'
s+Laboratory" target="_blank" style="color:#0077c0;">Dexter
\'
s Laboratory</a>'
,
parentId
:
8
,
dependentOn
:
[
8
,
7
],
start
:
getDate
(
24
*
4
),
duration
:
4
*
60
*
60
*
1000
,
percent
:
20
,
type
:
"task"
,
style
:
{
base
:
{
fill
:
"#8E44AD"
,
stroke
:
"#7E349D"
}
}
},
{
id
:
10
,
label
:
"任务10"
,
user
:
'<a href="https://www.google.com/search?q=Johnattan+Owens" target="_blank" style="color:#0077c0;">Johnattan Owens</a>'
,
start
:
getDate
(
24
*
5
),
duration
:
24
*
60
*
60
*
1000
,
percent
:
0
,
type
:
"task"
},
{
id
:
11
,
label
:
"任务11"
,
user
:
'<a href="https://www.google.com/search?q=Johnattan+Owens" target="_blank" style="color:#0077c0;">Johnattan Owens</a>'
,
start
:
getDate
(
24
*
6
),
duration
:
24
*
60
*
60
*
1000
,
percent
:
0
,
type
:
"task"
},
{
id
:
12
,
label
:
"任务12"
,
user
:
'<a href="https://www.google.com/search?q=Johnattan+Owens" target="_blank" style="color:#0077c0;">Johnattan Owens</a>'
,
start
:
getDate
(
24
*
7
),
duration
:
24
*
60
*
60
*
1000
,
percent
:
0
,
type
:
"task"
,
parentId
:
11
},
{
id
:
13
,
label
:
"任务13"
,
user
:
'<a href="https://www.google.com/search?q=Johnattan+Owens" target="_blank" style="color:#0077c0;">Johnattan Owens</a>'
,
start
:
getDate
(
24
*
8
),
duration
:
24
*
60
*
60
*
1000
,
percent
:
0
,
type
:
"task"
},
{
id
:
14
,
label
:
"任务14"
,
user
:
'<a href="https://www.google.com/search?q=Johnattan+Owens" target="_blank" style="color:#0077c0;">Johnattan Owens</a>'
,
start
:
getDate
(
24
*
9
),
duration
:
24
*
60
*
60
*
1000
,
percent
:
0
,
type
:
"task"
},
{
id
:
15
,
label
:
"任务15"
,
user
:
'<a href="https://www.google.com/search?q=Johnattan+Owens" target="_blank" style="color:#0077c0;">Johnattan Owens</a>'
,
start
:
getDate
(
24
*
16
),
duration
:
24
*
60
*
60
*
1000
,
percent
:
0
,
type
:
"task"
}
];
let
options
=
{
taskMapping
:
{
progress
:
"percent"
},
maxRows
:
100
,
maxHeight
:
500
,
title
:
{
label
:
"Your project title as html (link or whatever...)"
,
html
:
false
},
row
:
{
height
:
24
},
calendar
:
{
hour
:
{
display
:
false
}
},
chart
:
{
progress
:
{
bar
:
false
},
expander
:
{
display
:
true
}
},
taskList
:
{
expander
:
{
straight
:
false
},
columns
:
[
{
id
:
1
,
label
:
"ID"
,
value
:
"id"
,
width
:
40
},
{
id
:
2
,
label
:
"任务"
,
value
:
"label"
,
width
:
200
,
expander
:
true
,
html
:
true
,
events
:
{
click
({
data
,
column
})
{
alert
(
"description clicked!
\n
"
+
data
.
label
);
}
}
},
{
id
:
3
,
label
:
"责任人"
,
value
:
"user"
,
width
:
130
,
html
:
true
},
{
id
:
4
,
label
:
"开始时间"
,
value
:
task
=>
dayjs
(
task
.
start
).
format
(
"YYYY-MM-DD"
),
width
:
78
},
{
id
:
5
,
label
:
"类型"
,
value
:
"type"
,
width
:
68
},
{
id
:
6
,
label
:
"%"
,
value
:
"progress"
,
width
:
35
,
style
:
{
"task-list-header-label"
:
{
"text-align"
:
"center"
,
width
:
"100%"
},
"task-list-item-value-container"
:
{
"text-align"
:
"center"
,
width
:
"100%"
}
}
}
]
},
locale
:
{
weekdays
:
[
"周日"
,
"周一"
,
"周二"
,
"周三"
,
"周四"
,
"周五"
,
"周六"
],
months
:
[
"一月"
,
"二月"
,
"三月"
,
"四月"
,
"五月"
,
"六月"
,
"七月"
,
"八月"
,
"九月"
,
"十月"
,
"十一月"
,
"十二月"
]
// name: "en",
// Now: "Now",
// "X-Scale": "Zoom-X",
// "Y-Scale": "Zoom-Y",
// "Task list width": "Task list",
// "Before/After": "Expand",
// "Display task list": "Task list"
}
};
export
default
{
name
:
"Gantt"
,
components
:
{
GanttElastic
,
GanttHeader
},
data
()
{
return
{
tasks
,
options
,
dynamicStyle
:
{},
lastId
:
16
};
},
methods
:
{
addTask
()
{
this
.
tasks
.
push
({
id
:
this
.
lastId
++
,
label
:
'<a href="https://images.pexels.com/photos/423364/pexels-photo-423364.jpeg?auto=compress&cs=tinysrgb&h=650&w=940" target="_blank" style="color:#0077c0;">Yeaahh! you have added a task bro!</a>'
,
user
:
'<a href="https://images.pexels.com/photos/423364/pexels-photo-423364.jpeg?auto=compress&cs=tinysrgb&h=650&w=940" target="_blank" style="color:#0077c0;">Awesome!</a>'
,
start
:
getDate
(
24
*
3
),
duration
:
1
*
24
*
60
*
60
*
1000
,
percent
:
50
,
type
:
"project"
});
},
tasksUpdate
(
tasks
)
{
this
.
tasks
=
tasks
;
},
optionsUpdate
(
options
)
{
this
.
options
=
options
;
},
styleUpdate
(
style
)
{
this
.
dynamicStyle
=
style
;
}
}
};
</
script
>
pages/aps/results/index.vue
View file @
aced6700
...
...
@@ -16,10 +16,10 @@
class=
"left-body"
v-for=
"(li,index) in list"
:key=
"index"
@
click=
"listData(li.schedule_Id,index)"
:class=
"isactive == index ? 'addclass' : '' "
>
<div
class=
"title-t"
>
排产方案:
{{
li
.
schedule_Id
}}
</div>
<Checkbox
v-model=
"li.checked"
class=
"i-checkbox"
@
on-change=
"changeCheck(li)"
></Checkbox>
<div
class=
"title-t"
@
click=
"listData(li.schedule_Id,index)"
>
排产方案:
{{
li
.
schedule_Id
}}
</div>
<div
class=
"fa"
>
排产时间:
{{
li
.
plan_Date
}}
</div>
<div
class=
"fa"
>
<span>
{{
li
.
iNSERTFLAG
}}
/
</span>
...
...
@@ -28,120 +28,54 @@
</div>
</div>
</Sider>
<Content
class=
"tab_card_box"
>
<Tabs
class=
"tab_card"
v-model=
"name"
type=
"card"
:animated=
"false"
@
on-click=
"clickTab"
>
<TabPane
label=
"结果列表"
name=
"name1"
>
<resultsList
ref=
"resultsLists"
/>
</TabPane>
<!--
<TabPane
label=
"结果甘特图"
name=
"name2"
>
结果甘特图
</TabPane>
-->
<TabPane
label=
"方案对比"
name=
"name3"
>
<compareList
ref=
"compareList"
/>
</TabPane>
</Tabs>
<!--
<h4>
排产结果
</h4>
<div
class=
"btn"
>
<Button
type=
"primary"
@
click=
"parameter"
>
下发
</Button>
-->
<!--
<Button
type=
"primary"
>
导出
</Button>
000 -->
<!--
<Button
type=
"primary"
icon=
"ios-redo"
@
click=
"comeBlck"
>
返回
</Button>
</div>
<div>
<Table
:columns=
"columns"
:data=
"data"
></Table>
</div>
-->
<Content>
<Row
class=
"i-row"
>
<Col
span=
"2"
v-if=
"blacks"
>
<h4
:text=
"title"
>
{{
title
}}
</h4>
</Col>
<Col
span=
"10"
>
<a
href=
"#"
@
click=
"comeBlck"
class=
"black"
>
返回
</a>
</Col>
<Col
span=
"10"
style=
"text-align: right;"
v-if=
"gant"
>
<a
href=
"#"
@
click=
"gantChart"
class=
"gant"
>
甘特图
</a>
</Col>
</Row>
<component
:is=
"detail"
:eid=
"id"
/>
</Content>
</Layout>
<div
class=
"footer"
v-if=
"showFooter"
>
<span>
已选:
{{
total
}}
项
</span>
<Button
type=
"primary"
@
click=
"submit"
>
方案对比
</Button>
<Button
type=
"default"
@
click=
"cancel"
>
取消
</Button>
</div>
<Modal
v-model=
"modal1Gant"
fullscreen
title=
"甘特图"
footer-hide
>
<Gantt
/>
</Modal>
</div>
</
template
>
<
script
>
import
Api
from
"./api"
;
// import expandRow from "./table-expand.vue";expandRow,
import
resultsList
from
"./result.vue"
;
import
compareList
from
"./compare.vue"
;
import
Gantt
from
"./gantt"
;
export
default
{
components
:
{
resultsList
,
compareList
},
components
:
{
Gantt
},
data
()
{
return
{
curId
:
null
,
detail
:
null
,
isactive
:
0
,
data
:
[],
list
:
[],
name
:
'name1'
,
id
:
""
// columns: [
// {
// type: "expand",
// width: 50,
// render: (h, params) => {
// return h(expandRow, {
// props: {
// row: params.row
// }
// });
// }
// },
// {
// title: "超期预警",
// key: "alert",
// align: "center",
// render: (h, params) => {
// return h("div", [
// h("Icon", {
// props: {
// type:
// params.row.alert == true
// ? "ios-information-circle-outline"
// : "ios-remove-circle-outline"
// },
// style: {
// marginRight: "5px",
// fontSize: "18px",
// fontWeight: "bold",
// color: params.row.alert == true ? "#FE7777" : "#0DD78D"
// }
// })
// ]);
// }
// },
// {
// title: "零件图号",
// key: "part_id",
// align: "center"
// },
// {
// title: "零件名称",
// key: "part_name",
// align: "center"
// },
// {
// title: "计划开始时间",
// key: "plan_start",
// width: 200,
// align: "center"
// },
// {
// title: "计划结束时间",
// key: "plan_start",
// width: 200,
// align: "center"
// },
// {
// title: "投料时间",
// key: "demand_start",
// width: 200,
// align: "center"
// },
// {
// title: "节点时间",
// key: "demand_finish",
// width: 200,
// align: "center"
// },
// {
// title: "计划数量",
// key: "plan_qty",
// align: "center"
// }
// ]
name
:
"name1"
,
id
:
null
,
contrastList
:
[],
title
:
""
,
modal1Gant
:
false
,
showFooter
:
false
,
total
:
0
,
blacks
:
false
,
gant
:
false
};
},
async
fetch
({
store
,
params
})
{
...
...
@@ -151,36 +85,34 @@ export default {
this
.
orderlist
();
},
methods
:
{
clickTab
(
name
)
{
},
clickTab
(
name
)
{},
orderlist
()
{
Api
.
getall
()
.
then
(
r
=>
{
if
(
r
.
success
)
{
if
(
r
.
result
)
{
this
.
list
=
r
.
result
;
if
(
r
.
result
)
{
this
.
listData
(
r
.
result
[
0
].
schedule_Id
,
0
);
}
else
{
this
.
listData
(
0
,
null
);
}
this
.
list
.
map
(
u
=>
{
u
.
checked
=
false
;
});
}
})
.
catch
(
error
=>
{
this
.
$
$
Message
.
error
(
"请求失败"
);
this
.
$Message
.
error
(
"请求失败"
);
});
},
listData
(
id
,
index
)
{
this
.
blacks
=
true
;
this
.
gant
=
true
;
this
.
detail
=
()
=>
import
(
"./result"
);
this
.
isactive
=
index
;
this
.
id
=
id
;
Api
.
paged
({
scheduleId
:
id
})
.
then
(
r
=>
{
if
(
r
.
success
)
{
this
.
data
=
r
.
result
;
}
})
.
catch
(
error
=>
{
this
.
$$Message
.
error
(
"请求失败"
);
});
this
.
title
=
"排产方案结果"
;
this
.
list
.
map
(
u
=>
{
if
((
u
.
checked
=
true
))
{
u
.
checked
=
false
;
}
});
this
.
contrastList
=
[];
},
clear
()
{
if
(
this
.
list
.
length
>
0
)
{
...
...
@@ -201,7 +133,10 @@ export default {
});
}
},
// 返回
comeBlck
()
{
this
.
$router
.
push
({
path
:
"/aps/aps"
});
},
parameter
()
{
Api
.
processschemedispatch
({
id
:
this
.
id
...
...
@@ -214,8 +149,53 @@ export default {
}
});
},
comeBlck
()
{
this
.
$router
.
push
({
path
:
"/aps/aps"
});
//甘特图
gantChart
()
{
this
.
modal1Gant
=
true
;
},
changeCheck
(
item
)
{
this
.
isactive
=
null
;
this
.
blacks
=
true
;
if
(
item
.
checked
==
true
)
{
this
.
contrastList
.
push
(
item
.
schedule_Id
);
}
else
if
(
item
.
checked
==
false
)
{
let
index
=
this
.
contrastList
.
indexOf
(
item
.
schedule_Id
);
if
(
index
>
-
1
)
{
this
.
contrastList
.
splice
(
index
,
1
);
}
}
if
(
this
.
contrastList
.
length
>
1
)
{
this
.
showFooter
=
true
;
}
this
.
total
=
this
.
contrastList
.
length
;
if
(
this
.
total
==
0
)
{
this
.
showFooter
=
false
;
}
},
submit
()
{
if
(
this
.
total
>=
2
)
{
this
.
detail
=
()
=>
import
(
"./compare"
);
this
.
title
=
"排产方案比对"
;
this
.
list
.
map
(
u
=>
{
if
((
u
.
checked
=
true
))
{
u
.
checked
=
false
;
}
});
this
.
contrastList
=
[];
this
.
showFooter
=
false
;
this
.
gant
=
false
;
}
else
{
this
.
$Message
.
error
(
"请选择大于等于2项方案进去比对"
);
}
},
cancel
()
{
this
.
showFooter
=
false
;
this
.
list
.
map
(
u
=>
{
if
((
u
.
checked
=
true
))
{
u
.
checked
=
false
;
}
});
this
.
contrastList
=
[];
}
}
};
...
...
pages/aps/results/parameter.vue
deleted
100644 → 0
View file @
03f162f1
<
template
>
<div
class=
"parameter"
>
<Form
ref=
"form"
:model=
"entity"
:rules=
"rules"
:label-width=
"100"
>
<Row
:gutter=
"20"
>
<Col
span=
"12"
>
<div
class=
"left-up"
>
<p
class=
"title-c"
>
参数设置
</p>
<FormItem
:label=
"l('plan_method')"
prop=
"plan_method"
>
<i-switch
v-model=
"entity.plan_method"
size=
"large"
>
<span
slot=
"open"
>
On
</span>
<span
slot=
"close"
>
Off
</span>
</i-switch>
</FormItem>
<FormItem
:label=
"l('cal_id')"
prop=
"cal_id"
>
<Select
v-model=
"entity.cal_id"
style=
"width:150px"
>
<Option
value=
"beijing"
>
策略1
</Option>
<Option
value=
"shanghai"
>
策略2
</Option>
<Option
value=
"shenzhen"
>
策略3
</Option>
</Select>
</FormItem>
<FormItem
:label=
"l('over_time')"
prop=
"over_time"
>
<i-switch
v-model=
"entity.over_time"
size=
"large"
>
<span
slot=
"open"
>
On
</span>
<span
slot=
"close"
>
Off
</span>
</i-switch>
</FormItem>
<FormItem
:label=
"l('efficiency_value')"
prop=
"efficiency_value"
>
<Input
v-model=
"entity.efficiency_value"
style=
"width:150px"
></Input>
</FormItem>
<FormItem
:label=
"l('run_time')"
prop=
"run_time"
>
<InputNumber
v-model=
"entity.run_time"
></InputNumber>
</FormItem>
<FormItem
:label=
"l('isdiscrete')"
prop=
"isdiscrete"
>
<i-switch
v-model=
"entity.isdiscrete"
size=
"large"
>
<span
slot=
"open"
>
On
</span>
<span
slot=
"close"
>
Off
</span>
</i-switch>
</FormItem>
<FormItem
:label=
"l('discrete_value')"
prop=
"discrete_value"
>
<InputNumber
v-model=
"entity.discrete_value"
></InputNumber>
</FormItem>
<FormItem
:label=
"l('discrete_percent')"
prop=
"discrete_percent"
>
<InputNumber
v-model=
"entity.discrete_percent"
></InputNumber>
</FormItem>
</div>
<div
class=
"left-donw"
>
<p
class=
"title-c"
>
参数级别
</p>
<div
class=
"icon"
>
<Dropdown
trigger=
"custom"
:visible=
"visible"
style=
"width:150px"
>
<a
href=
"javascript:void(0)"
@
click=
"handleOpen"
>
<Icon
type=
"md-git-compare"
/>
</a>
<DropdownMenu
slot=
"list"
style=
"text-align: center;"
>
<DropdownItem>
<a
href=
"#"
>
<Icon
type=
"md-apps"
/>
</a>
<span>
转序规则
</span>
</DropdownItem>
<DropdownItem>
<a
href=
"#"
>
<Icon
type=
"md-apps"
/>
</a>
<span>
加班策略
</span>
</DropdownItem>
<DropdownItem>
<a
href=
"#"
>
<Icon
type=
"md-apps"
/>
</a>
<span>
任务平衡
</span>
</DropdownItem>
<DropdownItem>
<a
href=
"#"
>
<Icon
type=
"md-apps"
/>
</a>
<span>
是否离散
</span>
</DropdownItem>
<div
style=
"margin:10px;"
>
<Button
type=
"primary"
@
click=
"handleOk"
>
确定
</Button>
<Button
type=
"primary"
@
click=
"handle"
>
关闭
</Button>
</div>
</DropdownMenu>
</Dropdown>
</div>
<div
class=
"slider"
>
<Slider
v-model=
"entity.value1"
:step=
"25"
show-stops
></Slider>
<div
class=
"slow"
>
慢
</div>
<div
class=
"fast"
>
快
</div>
</div>
</div>
</Col>
<Col
span=
"12"
>
<div
class=
"right-up"
>
<p
class=
"title-d"
>
多台分配设置
</p>
<div
class=
"duo"
>
<Row>
<Col
:span=
"12"
>
<FormItem
:label=
"l('multi_machine')"
prop=
"multi_machine"
>
<i-switch
v-model=
"entity.switch4"
size=
"large"
>
<span
slot=
"open"
>
On
</span>
<span
slot=
"close"
>
Off
</span>
</i-switch>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
label=
"多台数量"
prop=
"abbre"
>
<InputNumber
v-model=
"entity.abbre"
></InputNumber>
</FormItem>
</Col>
</Row>
<FormItem
label=
"班组结构"
>
<Select
v-model=
"entity.select6"
style=
"width:150px"
>
<Option
value=
"beijing"
>
结构1
</Option>
<Option
value=
"shanghai"
>
结构2
</Option>
<Option
value=
"shenzhen"
>
结构3
</Option>
<Option
value=
"shenzhen"
>
结构4
</Option>
</Select>
</FormItem>
<div
class=
"check-box"
>
<CheckboxGroup
v-model=
"entity.fruit"
>
<Checkbox
label=
"10985553333(数控车床 车工班)"
></Checkbox>
<br
/>
<Checkbox
label=
"10985553333(数控车床 车工班)"
></Checkbox>
<br
/>
<Checkbox
label=
"10985553333(数控车床 车工班)"
></Checkbox>
<br
/>
<Checkbox
label=
"10985553333(数控车床 车工班)"
></Checkbox>
<br
/>
</CheckboxGroup>
</div>
</div>
</div>
<div
class=
"left-donw right-down"
>
<p
class=
"title-c"
>
参数应用
</p>
<div
class=
"slider"
>
<Slider
v-model=
"entity.value2"
:step=
"33.3"
show-stops
></Slider>
<div
class=
"slow"
>
工序
</div>
<div
class=
"ding"
>
订单
</div>
<div
class=
"ling"
>
零件
</div>
<div
class=
"fast"
>
所有
</div>
</div>
</div>
</Col>
</Row>
<FormItem
class=
"click-btn"
>
<Button
type=
"primary"
@
click=
"handleSubmit"
>
确定
</Button>
<Button
@
click=
"handleClose"
class=
"ml20"
>
取消
</Button>
</FormItem>
</Form>
</div>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
entity
:
{
value1
:
'100'
,
value2
:
'100'
,
fruit
:
[]
},
visible
:
false
,
rules
:
{
businessName
:
[{
required
:
true
,
message
:
'必填'
,
trigger
:
'blur'
}],
businessCode
:
[{
required
:
true
,
message
:
'必填'
,
trigger
:
'blur'
}]
}
}
},
methods
:
{
handleSubmit
()
{},
handleClose
()
{},
handleOpen
()
{
this
.
visible
=
true
},
handle
()
{
this
.
visible
=
false
},
handleOk
()
{},
l
(
key
)
{
let
vkey
=
'mes_op_task_plan_simulate'
+
'.'
+
key
return
this
.
$t
(
vkey
)
||
key
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
.parameter {
margin: 10px;
.left-up {
position: relative;
border: 1px solid #e0e0e0;
padding: 25px 0;
.title-c {
width: 68px;
padding-left: 5px;
background: #fff;
position: absolute;
top: -9px;
left: 25px;
color: #2680eb;
}
}
.left-donw {
margin-top: 15px;
position: relative;
border: 1px solid #e0e0e0;
padding: 25px 0;
.title-c {
width: 68px;
padding-left: 5px;
background: #fff;
position: absolute;
top: -9px;
left: 25px;
color: #2680eb;
}
.slider {
margin: 0 50px 0 50px;
position: relative;
.slow {
position: absolute;
top: 7px;
left: -5px;
}
.fast {
position: absolute;
top: 7px;
right: -10px;
}
.ding {
position: absolute;
top: 7px;
left: 30%;
}
.ling {
position: absolute;
top: 7px;
right: 30%;
}
}
.icon {
text-align: right;
padding-right: 15px;
margin-top: -15px;
}
}
.right-up {
position: relative;
border: 1px solid #e0e0e0;
padding: 25px 0;
.title-d {
width: 95px;
padding-left: 5px;
margin-left: 10px;
background: #fff;
position: absolute;
top: -9px;
left: 25px;
color: #2680eb;
}
.check-box {
height: 300px;
border-top: 1px solid #e0e0e0;
padding: 15px;
padding-left: 0;
margin-left: 25px;
overflow: auto;
}
}
.right-down {
height: 100px;
}
.click-btn {
text-align: right;
margin-top: 15px;
}
}
</
style
>
\ No newline at end of file
pages/aps/results/result.vue
View file @
aced6700
...
...
@@ -3,10 +3,8 @@
</
style
>
<
template
>
<div>
<div
class=
"btn"
style=
"z-index:9999;position:absolute;right:0"
>
<div
class=
"btn"
>
<Button
type=
"primary"
@
click=
"parameter"
v-show=
"showNext"
>
下发
</Button>
<!--
<Button
type=
"primary"
>
导出
</Button>
000 -->
<Button
type=
"primary"
icon=
"ios-redo"
@
click=
"comeBlck"
>
返回
</Button>
</div>
<div>
<Table
:columns=
"columns"
:data=
"data"
></Table>
...
...
@@ -18,6 +16,7 @@ import Api from "./api";
import
expandRow
from
"./table-expand.vue"
;
export
default
{
components
:
{
expandRow
},
props
:
[
"eid"
],
data
()
{
return
{
isactive
:
0
,
...
...
@@ -106,37 +105,19 @@ export default {
},
components
:
{},
created
()
{
this
.
orderlist
();
this
.
listData
();
},
mounted
()
{},
methods
:
{
orderlist
()
{
Api
.
getall
(
)
listData
()
{
Api
.
paged
({
scheduleId
:
this
.
eid
}
)
.
then
(
r
=>
{
if
(
r
.
success
)
{
this
.
list
=
r
.
result
;
if
(
r
.
result
)
{
this
.
listData
(
r
.
result
[
0
].
schedule_Id
,
0
);
}
else
{
this
.
listData
(
0
,
null
);
}
}
})
.
catch
(
error
=>
{
this
.
$$Message
.
error
(
"请求失败"
);
});
},
listData
(
id
,
index
)
{
this
.
$emit
.
isactive
=
index
;
this
.
id
=
id
;
Api
.
paged
({
scheduleId
:
id
})
.
then
(
r
=>
{
if
(
r
.
success
)
{
if
(
r
.
result
)
{
this
.
data
=
r
.
result
;
}
})
.
catch
(
error
=>
{
this
.
$
$
Message
.
error
(
"请求失败"
);
this
.
$Message
.
error
(
"请求失败"
);
});
},
// 下发
...
...
@@ -187,10 +168,7 @@ export default {
}
});
},
// 返回
comeBlck
()
{
this
.
$router
.
push
({
path
:
"/aps/aps"
});
},
tabChange
(
name
)
{
if
(
name
==
"technicalcoordination"
)
{
this
.
$refs
.
technicalcoordination
.
loadchangelist
();
...
...
pages/aps/results/results.less
View file @
aced6700
.results {
font-family: Microsoft YaHei;
.ivu-layout-sider {
background: none;
height: 90vh;
border-right: 1px solid #e4e6ed;
.btn {
float: right;
margin-top: -44px;
margin-right: 15px;
}
font-family: Microsoft YaHei;
.ivu-layout-sider {
background: rgba(255, 255, 255, 1);
margin-right: 10px;
box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15);
height: 88vh;
overflow: auto;
.btn {
float: right;
margin-top: -44px;
margin-right: 15px;
}
.addclass {
border-color: #2680eb !important;
}
.addclass {
border-color: #2680eb !important;
}
h4 {
height: 45px;
line-height: 45px;
border-bottom: 1px solid #e4e6ed;
margin-bottom: 15px;
padding-left: 10px;
}
// .left-body:hover {
// border-color: #2680eb;
// }
.left-body {
margin: 10px 15px 10px 30px;
border: 1px solid rgba(228, 230, 237, 1);
border-radius: 4px;
padding: 5px 8px;
.i-checkbox {
margin-left: -30px;
margin-top: 5px;
}
h4 {
height: 38px;
line-height: 38px;
border-bottom: 1px solid #e4e6ed;
margin-bottom: 15px;
margin-right: 15px;
.title-t {
height: 30px;
line-height: 30px;
color: #2680eb;
font-size: 15px;
margin-top: -25px;
}
.left-body:hover {
.title-t:hover {
font-weight: bold;
cursor: pointer;
border-color: #2680eb;
}
.left-body {
margin: 10px 15px 0 0;
border: 1px solid rgba(228, 230, 237, 1);
border-radius: 4px;
padding: 5px 8px;
.title-t {
height: 30px;
line-height: 30px;
color: #2680eb;
font-size: 15px;
font-weight: bold;
}
.fa {
height: 30px;
line-height: 30px;
}
.fa {
height: 30px;
line-height: 30px;
}
.ivu-layout-content {
margin-left: 15px;
.tab_card{
.ivu-tabs-bar{
margin-top: 10px;
}
}
.ivu-layout-content {
margin-left: 5px;
background: rgba(255, 255, 255, 1);
box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15);
height: 88vh;
overflow: auto;
.i-row {
height: 45px;
line-height: 45px;
border-bottom: 1px solid #e4e6ed;
margin-bottom: 15px;
padding-left: 10px;
.ivu-col {
text-align: left;
}
.btn {
float: right;
margin-top: -52px;
margin-right: 15px;
}
.black:hover {
font-weight: bold;
}
.gant {
margin-right: -20px;
}
.gant:hover {
font-weight: bold;
}
.tab_card {
.ivu-tabs-bar {
margin: 10px;
}
}
.btn {
float: right;
margin-top: -54px;
margin-right: 15px;
}
}
.compare{
.compare_box{
border: 1px solid #ccc;
.left_list{
float: left;
width: 200px;
height: 100%;
border-right: 1px solid #ccc;
.left_ul{
.left_ul_title{
height: 80px;
}
li{
line-height: 50px;
text-align: center;
border-bottom: 1px solid #ccc;
}
}
.footer {
width: 100%;
position: absolute;
left: 0;
bottom: 0;
height: 60px;
line-height: 60px;
background: rgba(0, 0, 0, 0.6);
color: #fff;
padding-left: 50px;
}
}
.compare {
.compare_box {
border: 1px solid #ccc;
.left_list {
float: left;
width: 200px;
height: 100%;
border-right: 1px solid #ccc;
.left_ul {
.left_ul_title {
height: 80px;
}
.right_add{
height: 100%;
.dip_bg{
background: #ecf9f4;
}
.list_box{
border-right: 1px solid #ccc;
li {
line-height: 50px;
text-align: center;
border-bottom: 1px solid #ccc;
}
}
}
.right_add {
height: 100%;
.dip_bg {
background: #ecf9f4;
}
.list_box {
border-right: 1px solid #ccc;
}
.list_box:last-of-type {
border-right: none;
}
.right_ul {
.right_ul_title {
position: relative;
height: 80px;
.del_case {
position: absolute;
top: -8px;
right: 8px;
}
.list_box:last-of-type{
border-right: none;
.case {
color: #2680EB;
}
.right_ul{
.right_ul_title{
position: relative;
height: 80px;
.del_case{
position: absolute;
top: -8px;
right: 8px;
}
.case{
color: #2680EB;
}
span{
display: block;
height: 38px;
line-height: 37px;
}
}
li{
line-height: 50px;
text-align: center;
border-bottom: 1px solid #ccc;
}
span {
display: block;
height: 38px;
line-height: 37px;
}
}
li {
line-height: 50px;
text-align: center;
border-bottom: 1px solid #ccc;
}
}
}
}
\ No newline at end of file
}
}
pages/produce/execute/execute.less
View file @
aced6700
.execute_box{
position: relative;
.top_title{
height: 50px;
line-height: 49px;
...
...
@@ -30,7 +31,7 @@
}
.gd_list{
position: absolute;
top: 4
5
%;
top: 4
0
%;
left: 0px;
background: #2680EB;
color: #fff;
...
...
@@ -41,7 +42,7 @@
}
.gn_area{
position: absolute;
top: 4
5
%;
top: 4
0
%;
right: 0px;
background: #515A6E;
color: #fff;
...
...
@@ -80,6 +81,7 @@
.ivu-drawer-left{
width: 370px!important;
.ivu-drawer-content{
height: 100vh;
.ivu-drawer-header{
border: none;
.header {
...
...
@@ -97,6 +99,7 @@
}
.ivu-drawer-body {
padding: 0;
height: calc(100% - 210px);
// .order_title {
// border-bottom: 1px solid #ccc;
// height: 50px;
...
...
@@ -111,7 +114,7 @@
padding: 15px 20px;
}
.card_box{
padding: 0 15px
60px
;
padding: 0 15px;
.card_order{
margin: 15px 0;
border-left: 4px solid #ccc;
...
...
@@ -148,8 +151,9 @@
width: 180px!important;
.ivu-drawer-content{
background: #515A6E;
height: 100vh;
.ivu-drawer-body {
padding:
13
vh 0;
padding:
9
vh 0;
}
li{
line-height: 66px;
...
...
pages/technology/details/add.vue
View file @
aced6700
...
...
@@ -249,25 +249,24 @@ export default {
});
},
handleImg
(
e
)
{
console
.
warn
(
e
);
// let file = null
// if (
// e.clipboardData &&
// e.clipboardData.items[0] &&
// e.clipboardData.items[0].type &&
// e.clipboardData.items[0].type.indexOf('image') > -1
// ) {
// //这里就是判断是否有粘贴进来的文件且文件为图片格式
// file = e.clipboardData.items[0].getAsFile()
// let reader = new FileReader()
// reader.readAsDataURL(file)
// setTimeout(() => {
// var img = '
<
img
src
=
"' + reader.result + '"
alt
=
""
/>
'
// this.bugForm.content += img
// }, 1000)
let
file
=
null
if
(
e
.
clipboardData
&&
e
.
clipboardData
.
items
[
0
]
&&
e
.
clipboardData
.
items
[
0
].
type
&&
e
.
clipboardData
.
items
[
0
].
type
.
indexOf
(
'image'
)
>
-
1
)
{
//这里就是判断是否有粘贴进来的文件且文件为图片格式
file
=
e
.
clipboardData
.
items
[
0
].
getAsFile
()
let
reader
=
new
FileReader
()
reader
.
readAsDataURL
(
file
)
setTimeout
(()
=>
{
var
img
=
'<img src="'
+
reader
.
result
+
'" alt=""/>'
this
.
entity
.
taskContent
+=
img
},
1000
)
//
// new R
//
}
// new R
}
},
l
(
key
)
{
key
=
"routing_detail"
+
"."
+
key
;
...
...
pages/technology/details/edit.vue
View file @
aced6700
...
...
@@ -157,26 +157,25 @@ export default {
handleClose
()
{
this
.
$emit
(
"on-close"
);
},
handleImg
(
e
)
{
console
.
warn
(
e
);
// let file = null
// if (
// e.clipboardData &&
// e.clipboardData.items[0] &&
// e.clipboardData.items[0].type &&
// e.clipboardData.items[0].type.indexOf('image') > -1
// ) {
// //这里就是判断是否有粘贴进来的文件且文件为图片格式
// file = e.clipboardData.items[0].getAsFile()
// let reader = new FileReader()
// reader.readAsDataURL(file)
// setTimeout(() => {
// var img = '
<
img
src
=
"' + reader.result + '"
alt
=
""
/>
'
// this.bugForm.content += img
// }, 1000)
handleImg
(
e
)
{
let
file
=
null
if
(
e
.
clipboardData
&&
e
.
clipboardData
.
items
[
0
]
&&
e
.
clipboardData
.
items
[
0
].
type
&&
e
.
clipboardData
.
items
[
0
].
type
.
indexOf
(
'image'
)
>
-
1
)
{
//这里就是判断是否有粘贴进来的文件且文件为图片格式
file
=
e
.
clipboardData
.
items
[
0
].
getAsFile
()
let
reader
=
new
FileReader
()
reader
.
readAsDataURL
(
file
)
setTimeout
(()
=>
{
var
img
=
'<img src="'
+
reader
.
result
+
'" alt=""/>'
this
.
entity
.
taskContent
+=
img
},
1000
)
//
// new R
//
}
// new R
}
},
l
(
key
)
{
key
=
"routing_detail"
+
"."
+
key
;
...
...
pages/technology/details/routingStep/add.vue
View file @
aced6700
...
...
@@ -165,26 +165,25 @@ export default {
}
});
},
handleImg
(
e
)
{
console
.
warn
(
e
)
// let file = null
// if (
// e.clipboardData &&
// e.clipboardData.items[0] &&
// e.clipboardData.items[0].type &&
// e.clipboardData.items[0].type.indexOf('image') > -1
// ) {
// //这里就是判断是否有粘贴进来的文件且文件为图片格式
// file = e.clipboardData.items[0].getAsFile()
// let reader = new FileReader()
// reader.readAsDataURL(file)
// setTimeout(() => {
// var img = '
<
img
src
=
"' + reader.result + '"
alt
=
""
/>
'
// this.bugForm.content += img
// }, 1000)
handleImg
(
e
)
{
let
file
=
null
if
(
e
.
clipboardData
&&
e
.
clipboardData
.
items
[
0
]
&&
e
.
clipboardData
.
items
[
0
].
type
&&
e
.
clipboardData
.
items
[
0
].
type
.
indexOf
(
'image'
)
>
-
1
)
{
//这里就是判断是否有粘贴进来的文件且文件为图片格式
file
=
e
.
clipboardData
.
items
[
0
].
getAsFile
()
let
reader
=
new
FileReader
()
reader
.
readAsDataURL
(
file
)
setTimeout
(()
=>
{
var
img
=
'<img src="'
+
reader
.
result
+
'" alt=""/>'
this
.
entity
.
stepContent
+=
img
},
1000
)
//
// new R
//
}
// new R
}
},
handleClose
()
{
this
.
$emit
(
"on-close"
);
...
...
pages/technology/details/routingStep/edit.vue
View file @
aced6700
...
...
@@ -161,26 +161,25 @@ export default {
}
});
},
handleImg
(
e
)
{
console
.
warn
(
e
)
// let file = null
// if (
// e.clipboardData &&
// e.clipboardData.items[0] &&
// e.clipboardData.items[0].type &&
// e.clipboardData.items[0].type.indexOf('image') > -1
// ) {
// //这里就是判断是否有粘贴进来的文件且文件为图片格式
// file = e.clipboardData.items[0].getAsFile()
// let reader = new FileReader()
// reader.readAsDataURL(file)
// setTimeout(() => {
// var img = '
<
img
src
=
"' + reader.result + '"
alt
=
""
/>
'
// this.bugForm.content += img
// }, 1000)
handleImg
(
e
)
{
let
file
=
null
if
(
e
.
clipboardData
&&
e
.
clipboardData
.
items
[
0
]
&&
e
.
clipboardData
.
items
[
0
].
type
&&
e
.
clipboardData
.
items
[
0
].
type
.
indexOf
(
'image'
)
>
-
1
)
{
//这里就是判断是否有粘贴进来的文件且文件为图片格式
file
=
e
.
clipboardData
.
items
[
0
].
getAsFile
()
let
reader
=
new
FileReader
()
reader
.
readAsDataURL
(
file
)
setTimeout
(()
=>
{
var
img
=
'<img src="'
+
reader
.
result
+
'" alt=""/>'
this
.
entity
.
stepContent
+=
img
},
1000
)
//
// new R
//
}
// new R
}
},
handleClose
()
{
this
.
$emit
(
"on-close"
);
...
...
pages/technology/index.vue
View file @
aced6700
...
...
@@ -252,7 +252,7 @@ export default {
title
:
this
.
$t
(
"creatorUserId"
),
align
:
"left"
,
hide
:
true
,
type
:
"user"
type
:
"user"
},
{
key
:
"lastModificationTime"
,
...
...
@@ -265,7 +265,7 @@ export default {
title
:
this
.
$t
(
"lastModifierUserId"
),
align
:
"left"
,
hide
:
true
,
type
:
"user"
type
:
"user"
},
{
title
:
"操作"
,
...
...
pages/test/resource.vue
View file @
aced6700
<
template
>
<div>
<div>
<ResourceSelect
v-model=
"model"
@
on-change=
"change"
></ResourceSelect>
<p>
{{
model
}}
</p>
<p>
{{
text
}}
</p>
<Button
@
click=
"set"
>
赋值
</Button>
<ProductSelect
v-model=
"product"
@
on-change=
"pchange"
></ProductSelect>
<p>
{{
product
}}
</p>
<Button
@
click=
"setp"
>
赋值
</Button>
</div>
<p>
{{
product
}}
</p>
<Button
@
click=
"setp"
>
赋值
</Button>
<p>
<TreeNode
:data=
"result"
></TreeNode>
</p>
<p>
<Tree
:data=
"result"
></Tree>
</p>
</div>
</
template
>
<
script
>
import
ResourceSelect
from
"@/components/page/resourceSelect"
export
default
{
components
:{
ResourceSelect
},
name
:
''
,
data
()
{
return
{
model
:[],
text
:
""
,
product
:
""
,
import
ResourceSelect
from
"@/components/page/resourceSelect"
;
import
TreeNode
from
"./treeNode"
;
export
default
{
components
:
{
TreeNode
},
name
:
""
,
data
()
{
return
{
model
:
[],
result
:
[
{
title
:
"五二九纵"
,
id
:
41
,
expand
:
false
,
selected
:
false
,
checked
:
false
,
upId
:
0
,
rootId
:
0
,
children
:
[
{
title
:
"气源分配器壳体"
,
id
:
82
,
expand
:
false
,
selected
:
false
,
checked
:
false
,
upId
:
0
,
rootId
:
0
,
children
:
[
{
title
:
"truio"
,
id
:
83
,
expand
:
false
,
selected
:
false
,
checked
:
false
,
upId
:
82
,
rootId
:
0
,
children
:
[],
isProduct
:
1
,
productId
:
83
,
classType
:
0
,
drawingNo
:
"34567"
},
{
title
:
"北京吉普"
,
id
:
84
,
expand
:
false
,
selected
:
false
,
checked
:
false
,
upId
:
82
,
rootId
:
0
,
children
:
[],
isProduct
:
1
,
productId
:
84
,
classType
:
0
,
drawingNo
:
"BJJP-0001"
}
],
isProduct
:
1
,
productId
:
82
,
classType
:
41
,
drawingNo
:
"TY9-06-0803"
}
],
isProduct
:
0
,
productId
:
0
,
classType
:
0
},
methods
:{
change
(
v
,
items
){
this
.
text
=
items
.
map
(
u
=>
u
.
label
).
join
(
'/'
);
},
set
(){
this
.
model
=
[
"1"
,
5
];
},
pchange
(
v
,
item
){
// this.text=items.map(u=>u.label).join('/');
if
(
item
.
isProduct
==
0
){
this
.
$Message
.
error
(
"层级不能选择"
)
this
.
product
=
""
{
title
:
"北京汽车"
,
id
:
45
,
expand
:
false
,
selected
:
false
,
checked
:
false
,
upId
:
0
,
rootId
:
0
,
children
:
[
{
title
:
"北京吉普"
,
id
:
85
,
expand
:
false
,
selected
:
false
,
checked
:
false
,
upId
:
0
,
rootId
:
0
,
children
:
[],
isProduct
:
1
,
productId
:
85
,
classType
:
45
,
drawingNo
:
"BJJP-0001"
}
}
,
setp
(){
this
.
prodcut
=
8
;
},
]
,
isProduct
:
0
,
productId
:
0
,
classType
:
0
}
],
text
:
""
,
product
:
""
};
},
methods
:
{
change
(
v
,
items
)
{
this
.
text
=
items
.
map
(
u
=>
u
.
label
).
join
(
"/"
);
},
set
()
{
this
.
model
=
[
"1"
,
5
];
},
pchange
(
v
,
item
)
{
// this.text=items.map(u=>u.label).join('/');
if
(
item
.
isProduct
==
0
)
{
this
.
$Message
.
error
(
"层级不能选择"
);
this
.
product
=
""
;
}
},
setp
()
{
this
.
prodcut
=
8
;
}
}
};
</
script
>
<
style
lang=
"less"
>
</
style
>
\ No newline at end of file
pages/test/treeNode.vue
0 → 100644
View file @
aced6700
<
template
>
<ul
class=
"treeNode"
>
<li
v-for=
"(li,i) in list"
:key=
"i"
>
<span>
{{
li
.
title
}}
</span>
<treeNode
v-if=
"li.children&&li.children.length>0"
:data=
"li.children"
></treeNode>
</li>
</ul>
</
template
>
<
script
>
export
default
{
name
:
"treeNode"
,
props
:
{
data
:
{
type
:
Array
,
default
:
()
=>
{
return
[];
}
}
},
data
()
{
return
{
list
:
[]
};
},
created
()
{
this
.
list
=
this
.
data
;
}
};
</
script
>
<
style
lang=
"less"
>
.treeNode {
li {
line-height: 35px;
span:hover {
background-color: royalblue;
}
}
li > ul {
padding-left: 20px;
}
}
</
style
>
\ No newline at end of file
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