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
7295179d
Commit
7295179d
authored
Jul 13, 2020
by
renjintao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
material、index、sotreSelect、add...ing
parent
21a7ed91
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
849 additions
and
1032 deletions
+849
-1032
storeSelect.vue
components/page/storeSelect.vue
+159
-0
zh-CN.js
i18n/locale/zh-CN.js
+25
-0
add.vue
pages/material/add.vue
+155
-0
api.js
pages/material/api.js
+26
-0
detail.vue
pages/material/detail.vue
+73
-0
edit.vue
pages/material/edit.vue
+186
-0
index.vue
pages/material/index.vue
+67
-1032
search.vue
pages/material/search.vue
+153
-0
iview.js
plugins/iview.js
+5
-0
No files found.
components/page/storeSelect.vue
0 → 100644
View file @
7295179d
<
template
>
<Select
v-model=
"dep"
:placeholder=
"placeholdeinfo"
clearable
@
on-clear=
"onClear"
>
<Option
v-for=
"(item,index) in list"
:key=
"index"
:value=
"item.value"
style=
"display:none"
:label=
"item.label"
></Option>
<Tree
key=
"mytree"
:data=
"data1"
ref=
"mytree"
:render=
"renderContent"
></Tree>
</Select>
</
template
>
<
script
>
export
default
{
name
:
"Add"
,
model
:
{
prop
:
"value"
,
event
:
"on-change"
},
data
()
{
return
{
dep
:
""
,
list
:
[],
data1
:
[],
selectdata
:
[],
placeholdeinfo
:
"请选择"
,
orderSearchForm
:
{
productId
:
null
,
//产品id
productName
:
""
,
//产品名称
drawingNo
:
""
,
//图号
bomId
:
null
//bomId
}
};
},
props
:
{
value
:
[
String
,
Number
,
Array
],
placeholder
:
{
type
:
String
,
default
:
"请选择部门"
},
multiple
:
{
type
:
Boolean
,
default
:
false
},
disabled
:
{
type
:
Boolean
,
default
:
false
}
},
mounted
()
{},
created
()
{
this
.
dep
=
this
.
value
|
""
;
this
.
loadTree
();
},
methods
:
{
handleSelect
(
data
)
{
if
(
data
.
length
>
0
)
{
this
.
selectdata
=
[];
this
.
selectdata
=
data
;
if
(
data
[
0
].
isProduct
==
"1"
)
{
this
.
list
=
[];
this
.
list
.
push
({
label
:
data
[
0
].
title
,
value
:
data
[
0
].
id
});
this
.
orderSearchForm
.
productName
=
data
[
0
].
title
;
this
.
orderSearchForm
.
productId
=
data
[
0
].
productId
;
this
.
orderSearchForm
.
drawingNo
=
data
[
0
].
drawingNo
;
this
.
orderSearchForm
.
bomId
=
data
[
0
].
bomId
;
this
.
$emit
(
"on-change"
,
this
.
orderSearchForm
.
productId
,
this
.
orderSearchForm
);
}
else
{
this
.
$Message
.
error
(
"此节点不是产品,请选择产品节点!"
);
}
}
},
resetFields
()
{
this
.
orderSearchForm
=
{
productId
:
null
,
//产品id
productName
:
""
,
//产品名称
drawingNo
:
""
,
//图号
bomId
:
null
};
},
loadTree
()
{
//打开新增订单窗口加载产品
this
.
resetFields
();
var
sumData
=
[];
this
.
$http
.
order
.
getallselecttree
().
then
(
res
=>
{
if
(
res
.
result
)
{
for
(
var
i
=
0
;
i
<
res
.
result
.
length
;
i
++
)
{
sumData
=
sumData
.
concat
(
res
.
result
[
i
]);
}
this
.
data1
=
sumData
;
}
else
{
this
.
$Message
.
error
(
"加载产品树失败!"
);
}
});
},
renderContent
(
h
,
{
root
,
node
,
data
})
{
//渲染树的样式
return
h
(
"span"
,
{
style
:
{
color
:
data
.
isProduct
!=
"1"
?
"#249E91"
:
"#333"
,
//根据选中状态设置样式
cursor
:
"pointer"
},
on
:
{
click
:
()
=>
{
let
arrTree
=
[];
arrTree
.
push
(
data
);
this
.
handleSelect
(
arrTree
);
//手动选择树节点
}
}
},
data
.
title
);
},
onClear
()
{
this
.
list
=
[];
this
.
placeholdeinfo
=
"请选择"
;
this
.
resetFields
();
this
.
$emit
(
"on-change"
,
null
,
this
.
orderSearchForm
);
}
},
watch
:
{
value
:
{
handler
(
v
,
o
)
{
this
.
dep
=
v
|
""
;
this
.
resetFields
();
var
sumData
=
[];
this
.
$http
.
order
.
getallselecttree
().
then
(
res
=>
{
if
(
res
.
result
)
{
for
(
var
i
=
0
;
i
<
res
.
result
.
length
;
i
++
)
{
sumData
=
sumData
.
concat
(
res
.
result
[
i
]);
}
this
.
data1
=
sumData
;
let
temData
=
this
.
$u
.
clone
(
this
.
data1
);
this
.
list
=
[];
if
(
v
!=
""
&&
v
!=
null
)
{
let
dataTemp
=
this
.
$u
.
treeToList
(
temData
);
dataTemp
.
forEach
(
data
=>
{
if
(
data
.
isProduct
==
1
&&
data
.
id
==
this
.
dep
)
{
this
.
placeholdeinfo
=
data
.
title
;
this
.
list
.
push
({
label
:
data
.
title
,
value
:
data
.
id
});
}
});
}
}
else
{
this
.
$Message
.
error
(
"加载产品树失败!"
);
}
});
},
deep
:
true
}
}
};
</
script
>
i18n/locale/zh-CN.js
View file @
7295179d
...
...
@@ -1543,5 +1543,30 @@ export default {
level
:
'层级'
,
userName
:
'管理员'
,
userIds
:
'管理员Id'
,
},
stock
:
{
creationTime
:
'创建时间'
,
creatorUserId
:
'创建人'
,
lastModificationTime
:
'更新时间'
,
lastModifierUserId
:
'更新人'
,
isDeleted
:
'删除人'
,
deletionTime
:
'删除时间'
,
deleterUserId
:
'删除人'
,
name
:
'物料名称'
,
materialId
:
'物料主键'
,
materialType
:
'物料类型'
,
total
:
'总数'
,
inputTotal
:
'入库数量'
,
storeId
:
'库位id'
,
storeTitle
:
'库位名称'
,
minNum
:
'最低库存'
,
brand
:
'牌号'
,
specifications
:
'规格'
,
batch
:
'批次'
,
certificateOfApproval
:
'合格证'
,
creator
:
'操作人'
,
unitPrice
:
'单价'
,
originalManufacturer
:
'原厂家'
,
remark
:
'备注'
,
}
}
pages/material/add.vue
View file @
7295179d
<
template
>
<Form
ref=
"form"
:model=
"entity"
:rules=
"rules"
:label-width=
"90"
>
<Row>
<Col
:span=
"12"
>
<FormItem
:label=
"l('name')"
prop=
"materialCode"
>
<Materiel
v-model=
"entity.materialId"
@
on-change=
"change"
></Materiel>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('storeTitle')"
prop=
"storeTitle"
>
<StoreSelect
v-model=
"entity.storeId"
></StoreSelect>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('inputTotal')"
prop=
"total"
>
<InputNumber
v-model=
"entity.total"
></InputNumber>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('unitPrice')"
prop=
"unitPrice"
>
<InputNumber
v-model=
"entity.unitPrice"
></InputNumber>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('batch')"
prop=
"batch"
>
<Input
v-model=
"entity.batch"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('certificateOfApproval')"
prop=
"certificateOfApproval"
>
<Input
v-model=
"entity.certificateOfApproval"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('originalManufacturer')"
prop=
"originalManufacturer"
>
<Input
v-model=
"entity.originalManufacturer"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('creator')"
prop=
"creator"
>
<Input
v-model=
"entity.creator"
:disabled=
"true"
></Input>
</FormItem>
</Col>
<Col
:span=
"24"
>
<FormItem
:label=
"l('remark')"
prop=
"remark"
>
<Input
v-model=
"entity.remark"
type=
"textarea"
:rows=
"5"
></Input>
</FormItem>
</Col>
</Row>
<FormItem>
<Button
type=
"primary"
@
click=
"handleSubmit"
:disabled=
"disabled"
>
保存
</Button>
<Button
@
click=
"handleClose"
class=
"ml20"
>
取消
</Button>
</FormItem>
</Form>
</
template
>
<
script
>
import
Api
from
"./api"
;
export
default
{
name
:
"Add"
,
data
()
{
return
{
disabled
:
false
,
entity
:
{
creationTime
:
null
,
creatorUserId
:
null
,
lastModificationTime
:
null
,
lastModifierUserId
:
null
,
isDeleted
:
null
,
deletionTime
:
null
,
deleterUserId
:
null
,
name
:
""
,
materialId
:
""
,
materialCode
:
""
,
materialType
:
null
,
total
:
null
,
storeId
:
null
,
storeTitle
:
""
,
minNum
:
null
,
brand
:
""
,
specifications
:
""
,
batch
:
""
,
certificateOfApproval
:
""
,
creator
:
""
,
unitPrice
:
null
,
originalManufacturer
:
""
,
remark
:
""
},
rules
:
{
name
:
[{
required
:
true
,
message
:
"必填"
,
trigger
:
"blur"
}]
}
};
},
props
:
{
v
:
Object
,
eid
:
Number
},
mounted
()
{
if
(
this
.
eid
>
0
)
{
this
.
load
(
this
.
eid
);
}
},
methods
:
{
handleSubmit
()
{
this
.
$refs
.
form
.
validate
(
v
=>
{
if
(
v
)
{
this
.
disabled
=
true
;
Api
.
create
(
this
.
entity
)
.
then
(
r
=>
{
this
.
disabled
=
false
;
if
(
r
.
success
)
{
this
.
$Message
.
success
(
"保存成功"
);
this
.
$emit
(
"on-ok"
);
}
else
{
this
.
$Message
.
error
(
"保存失败"
);
}
})
.
catch
(
err
=>
{
this
.
disabled
=
false
;
this
.
$Message
.
error
(
"保存失败"
);
console
.
warn
(
err
);
});
}
});
},
handleClose
()
{
this
.
$emit
(
"on-close"
);
},
load
(
v
)
{
Api
.
get
({
id
:
v
}).
then
(
r
=>
{
this
.
entity
=
r
.
result
;
this
.
entity
.
id
=
0
;
});
},
change
(
e
)
{
this
.
entity
.
name
=
e
.
name
;
this
.
entity
.
materialId
=
e
.
materialId
;
this
.
entity
.
materialCode
=
e
.
mmcode
;
},
l
(
key
)
{
key
=
"stock"
+
"."
+
key
;
return
this
.
$t
(
key
);
}
},
watch
:
{
v
()
{
this
.
entity
=
this
.
$u
.
clone
(
this
.
v
);
},
eid
(
v
)
{
if
(
v
>
0
)
{
this
.
load
(
v
);
}
}
}
};
</
script
>
pages/material/api.js
View file @
7295179d
import
Api
from
'@/plugins/request'
export
default
{
index
:
`
${
resourceUrl
}
/stock/paged`
,
paged
(
params
)
{
return
Api
.
post
(
`
${
resourceUrl
}
/stock/paged`
,
params
);
},
get
(
params
)
{
return
Api
.
get
(
`
${
resourceUrl
}
/stock/get`
,
params
);
},
create
(
params
)
{
return
Api
.
post
(
`
${
resourceUrl
}
/stock/create`
,
params
);
},
update
(
params
)
{
return
Api
.
post
(
`
${
resourceUrl
}
/stock/update`
,
params
);
},
delete
(
id
)
{
return
Api
.
delete
(
`
${
resourceUrl
}
/stock/delete`
,
{
params
:
{
id
:
id
}
});
},
deletes
(
params
)
{
return
Api
.
post
(
`
${
resourceUrl
}
/stock/batchdelete`
,
params
);
}
}
pages/material/detail.vue
View file @
7295179d
<
template
>
<div
class=
"detail"
>
<Row>
<Filed
:span=
"12"
:name=
"l('creationTime')"
>
{{
entity
.
creationTime
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('creatorUserId')"
>
{{
entity
.
creatorUserId
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('lastModificationTime')"
>
{{
entity
.
lastModificationTime
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('lastModifierUserId')"
>
{{
entity
.
lastModifierUserId
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('isDeleted')"
>
{{
entity
.
isDeleted
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('deletionTime')"
>
{{
entity
.
deletionTime
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('deleterUserId')"
>
{{
entity
.
deleterUserId
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('name')"
>
{{
entity
.
name
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('materialId')"
>
{{
entity
.
materialId
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('materialType')"
>
{{
entity
.
materialType
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('total')"
>
{{
entity
.
total
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('storeId')"
>
{{
entity
.
storeId
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('storeTitle')"
>
{{
entity
.
storeTitle
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('minNum')"
>
{{
entity
.
minNum
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('brand')"
>
{{
entity
.
brand
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('specifications')"
>
{{
entity
.
specifications
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('batch')"
>
{{
entity
.
batch
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('certificateOfApproval')"
>
{{
entity
.
certificateOfApproval
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('creator')"
>
{{
entity
.
creator
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('unitPrice')"
>
{{
entity
.
unitPrice
}}
</Filed>
<Filed
:span=
"12"
:name=
"l('originalManufacturer')"
>
{{
entity
.
originalManufacturer
}}
</Filed>
<Filed
:span=
"24"
:name=
"l('remark')"
>
{{
entity
.
remark
}}
</Filed>
</Row>
</div>
</
template
>
<
script
>
import
Api
from
"./api"
;
export
default
{
name
:
"Add"
,
data
()
{
return
{
entity
:
{},
rules
:
{
name
:
[{
required
:
true
,
message
:
"必填"
,
trigger
:
"blur"
}],
code
:
[{
required
:
true
,
message
:
"必填"
,
trigger
:
"blur"
}]
}
};
},
props
:
{
eid
:
Number
},
mounted
()
{
if
(
this
.
eid
>
0
)
{
this
.
load
(
this
.
eid
);
}
},
methods
:
{
load
(
v
)
{
Api
.
get
({
id
:
v
}).
then
(
r
=>
{
this
.
entity
=
r
.
result
;
this
.
$emit
(
"on-load"
);
});
},
handleClose
()
{
this
.
$emit
(
"on-close"
);
},
l
(
key
)
{
key
=
"stock"
+
"."
+
key
;
return
this
.
$t
(
key
);
}
},
watch
:
{
eid
(
v
)
{
if
(
v
>
0
)
{
this
.
load
(
v
);
}
}
}
};
</
script
>
pages/material/edit.vue
View file @
7295179d
<
template
>
<Form
ref=
"form"
:model=
"entity"
:rules=
"rules"
:label-width=
"90"
>
<Row>
<Col
:span=
"12"
>
<FormItem
:label=
"l('creationTime')"
prop=
"creationTime"
>
<DatePicker
type=
"date"
v-model=
"entity.creationTime"
></DatePicker>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('creatorUserId')"
prop=
"creatorUserId"
>
<InputNumber
v-model=
"entity.creatorUserId"
></InputNumber>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('lastModificationTime')"
prop=
"lastModificationTime"
>
<DatePicker
type=
"date"
v-model=
"entity.lastModificationTime"
></DatePicker>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('lastModifierUserId')"
prop=
"lastModifierUserId"
>
<InputNumber
v-model=
"entity.lastModifierUserId"
></InputNumber>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('isDeleted')"
prop=
"isDeleted"
>
<InputNumber
v-model=
"entity.isDeleted"
></InputNumber>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('deletionTime')"
prop=
"deletionTime"
>
<DatePicker
type=
"date"
v-model=
"entity.deletionTime"
></DatePicker>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('deleterUserId')"
prop=
"deleterUserId"
>
<InputNumber
v-model=
"entity.deleterUserId"
></InputNumber>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('name')"
prop=
"name"
>
<Input
v-model=
"entity.name"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('materialId')"
prop=
"materialId"
>
<Input
v-model=
"entity.materialId"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('materialType')"
prop=
"materialType"
>
<InputNumber
v-model=
"entity.materialType"
></InputNumber>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('total')"
prop=
"total"
>
<InputNumber
v-model=
"entity.total"
></InputNumber>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('storeId')"
prop=
"storeId"
>
<InputNumber
v-model=
"entity.storeId"
></InputNumber>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('storeTitle')"
prop=
"storeTitle"
>
<Input
v-model=
"entity.storeTitle"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('minNum')"
prop=
"minNum"
>
<InputNumber
v-model=
"entity.minNum"
></InputNumber>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('brand')"
prop=
"brand"
>
<Input
v-model=
"entity.brand"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('specifications')"
prop=
"specifications"
>
<Input
v-model=
"entity.specifications"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('batch')"
prop=
"batch"
>
<Input
v-model=
"entity.batch"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('certificateOfApproval')"
prop=
"certificateOfApproval"
>
<Input
v-model=
"entity.certificateOfApproval"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('creator')"
prop=
"creator"
>
<Input
v-model=
"entity.creator"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('unitPrice')"
prop=
"unitPrice"
>
<InputNumber
v-model=
"entity.unitPrice"
></InputNumber>
</FormItem>
</Col>
<Col
:span=
"12"
>
<FormItem
:label=
"l('originalManufacturer')"
prop=
"originalManufacturer"
>
<Input
v-model=
"entity.originalManufacturer"
></Input>
</FormItem>
</Col>
<Col
:span=
"24"
>
<FormItem
:label=
"l('remark')"
prop=
"remark"
>
<Input
v-model=
"entity.remark"
type=
"textarea"
:rows=
"5"
></Input>
</FormItem>
</Col>
</Row>
<FormItem>
<Button
type=
"primary"
@
click=
"handleSubmit"
:disabled=
"disabled"
>
保存
</Button>
<Button
@
click=
"handleClose"
class=
"ml20"
>
取消
</Button>
</FormItem>
</Form>
</
template
>
<
script
>
import
Api
from
"./api"
;
export
default
{
name
:
"Edit"
,
data
()
{
return
{
disabled
:
false
,
entity
:
{},
rules
:
{
name
:
[{
required
:
true
,
message
:
"必填"
,
trigger
:
"blur"
}]
}
};
},
props
:
{
eid
:
Number
},
mounted
()
{
if
(
this
.
eid
>
0
)
{
this
.
load
(
this
.
eid
);
}
},
methods
:
{
load
(
v
)
{
Api
.
get
({
id
:
v
}).
then
(
r
=>
{
this
.
entity
=
r
.
result
;
});
},
handleSubmit
()
{
this
.
$refs
.
form
.
validate
(
v
=>
{
if
(
v
)
{
this
.
disabled
=
true
;
Api
.
update
(
this
.
entity
)
.
then
(
r
=>
{
this
.
disabled
=
false
;
if
(
r
.
success
)
{
this
.
$Message
.
success
(
"保存成功"
);
this
.
$emit
(
"on-ok"
);
}
else
{
this
.
$Message
.
error
(
"保存失败"
);
}
})
.
catch
(
err
=>
{
this
.
disabled
=
false
;
this
.
$Message
.
error
(
"保存失败"
);
console
.
warn
(
err
);
});
}
});
},
handleClose
()
{
this
.
$emit
(
"on-close"
);
},
l
(
key
)
{
key
=
"stock"
+
"."
+
key
;
return
this
.
$t
(
key
);
}
},
watch
:
{
eid
(
v
)
{
if
(
v
!=
0
)
{
this
.
load
(
v
);
}
}
}
};
</
script
>
pages/material/index.vue
View file @
7295179d
<
template
>
<Layout
class=
"full"
>
<!--
<Sider
hide-trigger
:style=
"
{background: '#fff'}" width="260">
<div
class=
"zh-tree"
:style=
"
{height:treeHeight+'px'}">
<h3
class=
"zh-title"
>
产品结构
</h3>
<div
class=
"zh-box"
>
<Input
search
placeholder=
"请输入查询条件"
v-model=
"treeInputSearch"
/>
<Tree
:data=
"searchList"
:style=
"
{height:(treeHeight-95)+'px'}"
style="overflow:auto;width:215px;"
@on-select-change="selectTreeNode"
>
</Tree>
</div>
</div>
</Sider>
-->
<Sider
hide-trigger
v-if=
"showMenu"
class=
"menu_side"
width=
"300"
>
<StoreTree
@
on-hide=
"onHide"
@
on-select=
"productSearch"
/>
</Sider>
...
...
@@ -24,19 +10,15 @@
</div>
<Content
class=
"content"
:class=
"!showMenu?'con_bord':''"
>
<DataGrid
:action=
"action"
:columns=
"columns"
:conditions=
"easySearch"
ref=
"grid"
@
on-selection-change=
"onSelect"
:batch=
"true"
:border=
"false"
rowKey=
"id"
:action=
"action"
:conditions=
"easySearch"
>
<template
slot=
"easySearch"
>
<Form
ref=
"formInline"
:model=
"easySearch"
inline
>
<FormItem
prop=
"keys"
>
<Input
placeholder=
"请输入
订单编号/产品名称"
v-model=
"easySearch.keys.value"
v-width=
"300
"
/>
<Input
placeholder=
"请输入
关键字物料名称/库位名称"
v-model=
"easySearch.keys.value
"
/>
</FormItem>
<FormItem>
<Button
type=
"primary"
@
click=
"search"
>
查询
</Button>
...
...
@@ -47,412 +29,91 @@
<Search
/>
</
template
>
<
template
slot=
"buttons"
>
<Button
type=
"primary"
@
click=
"addModal=true"
>
创建
</Button>
</
template
>
<
template
slot=
"batch"
>
<Button
type=
"primary"
class=
"mr10 ml10"
@
click=
"openSendModal"
>
订单派发
</Button>
<Button
type=
"primary"
class=
"mr10 ml10"
@
click=
"removeList"
>
批量删除
</Button>
<Button
type=
"primary"
@
click=
"add"
>
入库
</Button>
</
template
>
</DataGrid>
<Modal
v-model=
"addModal"
title=
"新增"
footer-hide
width=
"1200"
>
<Add
@
on-close=
"cancel"
@
on-ok=
"addOk"
/>
</Modal>
<Modal
v-model=
"editModal"
title=
"编辑"
footer-hide
width=
"1200"
>
<Edit
:row=
"rowData"
@
on-close=
"cancel"
@
on-ok=
"addOk"
/>
</Modal>
<Modal
v-model=
"detailModal"
title=
"订单详情"
width=
"900"
>
<Detail
:row=
"rowData"
/>
</Modal>
<Modal
v-model=
"splitModal"
title=
"订单分解"
width=
"1200"
>
<Split
:row=
"rowData"
ref=
"orderSplit"
/>
<div
slot=
"footer"
>
<Button
@
click=
"splitModal = false"
>
取消
</Button>
<Button
type=
"primary"
@
click=
"orderSplitOk"
>
确定分解
</Button>
</div>
</Modal>
<Modal
v-model=
"sendModal"
title=
"订单派发"
width=
"1200"
>
<Send
:row=
"rowDataArry"
ref=
"orderSend"
/>
<div
slot=
"footer"
>
<Button
@
click=
"sendModal = false"
>
取消
</Button>
<Button
type=
"primary"
@
click=
"sendOk"
>
确定派发
</Button>
</div>
</Modal>
<Modal
v-model=
"deletelModal"
title=
"删除"
@
on-ok=
"removeOk"
@
on-cancel=
"cancel"
>
<p>
确定删除 订单:{{delMsg}} ?
</p>
</Modal>
<!-- 信息提示 -->
<Modal
v-model=
"ModalInfo"
title=
"信息提示"
width=
"600"
:mask-closable=
"false"
:scrollable=
"true"
ok-text=
"确定"
cancel-text=
"取消"
>
{{ metCodesStrTxt }}
<div
slot=
"footer"
>
<Button
@
click=
"ModalInfo = false"
>
取消
</Button>
<Button
type=
"primary"
@
click=
"modalInfoOk"
>
确定
</Button>
</div>
<Modal
v-model=
"modal"
:title=
"title"
width=
"1200"
footer-hide
>
<component
:is=
"detail"
:eid=
"curId"
@
on-close=
"cancel"
@
on-ok=
"ok"
/>
</Modal>
</Content>
</Layout>
</template>
<
script
>
import
Api
from
"./api"
;
import
Add
from
"./add"
;
import
Edit
from
"./edit"
;
import
Detail
from
"./detail"
;
import
Search
from
"./search"
;
import
Split
from
"./add"
;
import
Send
from
"./add"
;
import
StoreTree
from
"@/components/page/storeTree.vue"
;
export
default
{
name
:
"list"
,
components
:
{
Add
,
Edit
,
Detail
,
Search
,
Split
,
Send
,
StoreTree
Search
},
head
:
{
title
:
"库存表"
,
author
:
"henq"
,
description
:
"stock 7/13/2020 11:48:09 AM"
},
data
()
{
return
{
action
:
Api
.
index
,
showMenu
:
true
,
easySearch
:
{
keys
:
{
op
:
"mesCode,productName"
,
value
:
null
,
default
:
true
},
productId
:
{
op
:
"In"
,
value
:
""
}
keys
:
{
op
:
"name,storeTitle"
,
value
:
null
}
},
addModal
:
false
,
editModal
:
false
,
detailModal
:
false
,
deletelModal
:
false
,
splitModal
:
false
,
ModalInfo
:
false
,
sendModal
:
false
,
modal
:
false
,
title
:
"新增"
,
detail
:
null
,
curId
:
0
,
id
:
"id"
,
columns
:
[
{
key
:
"selection"
,
type
:
"selection"
,
width
:
50
,
align
:
"center"
},
{
key
:
"id"
,
title
:
this
.
l
(
"id"
),
hide
:
true
},
{
key
:
"mesCode"
,
title
:
this
.
l
(
"mesCode"
),
align
:
"left"
,
width
:
240
,
easy
:
true
,
high
:
true
,
tree
:
true
,
render
:
(
h
,
params
)
=>
{
let
name
=
params
.
row
.
mesCode
;
let
isUpId
=
params
.
row
.
upId
;
let
isDivideMark
=
params
.
row
.
divideMark
;
let
rowChildren
=
params
.
row
.
children
;
return
h
(
"div"
,
{
style
:
{
cursor
:
"pointer"
,
display
:
"inline"
,
marginLeft
:
isDivideMark
==
0
&&
isUpId
==
0
?
"20px"
:
"0px"
}
},
params
.
row
.
mesCode
);
}
},
{
key
:
"taskType"
,
title
:
this
.
l
(
"taskType"
),
align
:
"center"
,
high
:
true
,
code
:
"plan.order.taskType"
,
width
:
100
},
{
key
:
"quantity"
,
title
:
this
.
l
(
"quantity"
),
align
:
"right"
,
high
:
true
,
width
:
80
},
{
key
:
"taskRequire"
,
title
:
this
.
l
(
"taskRequire"
),
align
:
"left"
,
easy
:
true
,
high
:
true
,
hide
:
true
},
{
key
:
"status"
,
title
:
this
.
l
(
"status"
),
align
:
"center"
,
high
:
true
,
code
:
"plan.order.status"
,
width
:
100
},
{
key
:
"productCode"
,
title
:
this
.
l
(
"productCode"
),
align
:
"left"
,
easy
:
true
,
high
:
true
,
hide
:
true
},
{
key
:
"productName"
,
title
:
this
.
l
(
"productName"
),
align
:
"left"
,
easy
:
true
,
high
:
true
},
{
key
:
"drawnNumber"
,
title
:
this
.
l
(
"drawnNumber"
),
align
:
"left"
,
easy
:
true
,
high
:
true
},
{
key
:
"batchNumber"
,
title
:
this
.
l
(
"batchNumber"
),
key
:
"name"
,
title
:
this
.
l
(
"name"
),
align
:
"left"
,
easy
:
true
,
high
:
true
},
{
key
:
"total"
,
title
:
this
.
l
(
"total"
),
align
:
"left"
,
high
:
true
},
{
key
:
"minNum"
,
title
:
this
.
l
(
"minNum"
),
align
:
"left"
,
high
:
true
},
{
key
:
"
projectNumber
"
,
title
:
this
.
l
(
"
projectNumber
"
),
key
:
"
storeTitle
"
,
title
:
this
.
l
(
"
storeTitle
"
),
align
:
"left"
,
easy
:
true
,
high
:
true
},
{
key
:
"urgencyLevel"
,
title
:
this
.
l
(
"urgencyLevel"
),
align
:
"center"
,
high
:
true
,
code
:
"plan.order.urgencyLevel"
,
width
:
100
},
{
key
:
"productingPreparationPeople"
,
title
:
this
.
l
(
"productingPreparationPeople"
),
align
:
"left"
,
high
:
true
,
hide
:
true
},
{
key
:
"productingPreparationFinishDate"
,
title
:
this
.
l
(
"productingPreparationFinishDate"
),
align
:
"left"
,
high
:
true
,
hide
:
true
},
{
key
:
"quotationPeople"
,
title
:
this
.
l
(
"quotationPeople"
),
align
:
"left"
,
high
:
true
,
hide
:
true
},
{
key
:
"quotationFinishDate"
,
title
:
this
.
l
(
"quotationFinishDate"
),
align
:
"left"
,
high
:
true
,
hide
:
true
},
{
key
:
"demandStartDate"
,
title
:
this
.
l
(
"demandStartDate"
),
align
:
"left"
,
high
:
true
,
hide
:
true
,
type
:
"date"
},
{
key
:
"demandFinishDate"
,
title
:
this
.
l
(
"demandFinishDate"
),
align
:
"left"
,
high
:
true
,
hide
:
true
,
type
:
"date"
},
{
key
:
"creatorUserId"
,
title
:
this
.
$t
(
"creatorUserId"
),
align
:
"left"
,
high
:
true
,
type
:
"user"
},
{
key
:
"creationTime"
,
title
:
this
.
$t
(
"creationTime"
),
align
:
"center"
,
high
:
true
,
width
:
180
},
{
key
:
"lastModifierUserId"
,
title
:
this
.
$t
(
"lastModifierUserId"
),
hide
:
true
,
align
:
"left"
,
high
:
true
,
type
:
"user"
},
{
key
:
"lastModificationTime"
,
title
:
this
.
$t
(
"lastModificationTime"
),
hide
:
true
,
align
:
"center"
,
high
:
true
,
width
:
180
},
{
title
:
"操作"
,
key
:
"action"
,
width
:
1
8
0
,
align
:
"
left
"
,
width
:
1
4
0
,
align
:
"
center
"
,
render
:
(
h
,
params
)
=>
{
return
h
(
"div"
,
{
class
:
"action"
},
[
h
(
"op"
,
{
attrs
:
{
oprate
:
"detail"
},
on
:
{
click
:
()
=>
this
.
detail
(
params
.
row
)
}
on
:
{
click
:
()
=>
this
.
view
(
params
.
row
.
id
)
}
},
"查看"
),
//h('op', { attrs: { oprate: 'copy' }, on: { click: () => this.copy(params.row.id) } }, '克隆'),
h
(
"op"
,
{
attrs
:
{
oprate
:
"edit"
},
on
:
{
click
:
()
=>
this
.
edit
(
params
.
row
)
},
style
:
(
params
.
row
.
status
==
1
&&
params
.
row
.
id
==
params
.
row
.
rootId
&&
params
.
row
.
divideMark
!=
0
)
||
params
.
row
.
id
!=
params
.
row
.
rootId
||
params
.
row
.
status
!=
1
?
"display:none"
:
""
on
:
{
click
:
()
=>
this
.
edit
(
params
.
row
.
id
)
}
},
"编辑"
),
h
(
"op"
,
{
attrs
:
{
oprate
:
"remove"
},
on
:
{
click
:
()
=>
this
.
remove
(
params
.
row
)
},
style
:
(
params
.
row
.
status
==
1
&&
params
.
row
.
id
==
params
.
row
.
rootId
&&
params
.
row
.
divideMark
!=
0
)
||
params
.
row
.
status
!=
1
?
"display:none"
:
""
attrs
:
{
oprate
:
"delete"
},
on
:
{
click
:
()
=>
this
.
remove
(
params
.
row
.
id
)
}
},
"删除"
),
h
(
"op"
,
{
attrs
:
{
oprate
:
"detail"
},
on
:
{
click
:
()
=>
this
.
split
(
params
.
row
)
},
style
:
(
params
.
row
.
divideMark
!=
0
&&
params
.
row
.
id
==
params
.
row
.
rootId
)
||
params
.
row
.
status
!=
1
||
params
.
row
.
quantity
<=
1
?
"display:none"
:
""
},
"分解"
)
]);
}
}
// //传list数据时的判断
// {
// title: "操作",
// key: "action",
// width: 180,
// align: "left",
// render: (h, params) => {
// return h("div", { class: "action" }, [
// h(
// "op",
// {
// attrs: { oprate: "detail" },
// on: { click: () => this.detail(params.row) }
// },
// "查看"
// ),
// h(
// "op",
// {
// attrs: { oprate: "edit" },
// on: { click: () => this.edit(params.row) },
// style:
// (params.row.rootId == 0 && params.row.divideMark == 1) ||
// params.row.rootId != 0 ||
// params.row.status != 1
// ? "display:none"
// : ""
// },
// "编辑"
// ),
// h(
// "op",
// {
// attrs: { oprate: "remove" },
// on: { click: () => this.remove(params.row) },
// style:
// (params.row.rootId == 0 && params.row.divideMark == 1) ||
// params.row.status != 1
// ? // ||(params.row.id != params.row.rootId && this.sondeletecheck1(params.row.rootId)>0)
// "display:none"
// : ""
// },
// "删除"
// ),
// h(
// "op",
// {
// attrs: { oprate: "detail" },
// on: { click: () => this.split(params.row) },
// style:
// params.row.divideMark == 1 ||
// params.row.status != 1 ||
// params.row.quantity
<=
1
// ? "display:none"
// : ""
// },
// "分解"
// )
// ]);
// }
// }
],
treeData
:
[],
treeInputSearch
:
""
,
...
...
@@ -473,233 +134,7 @@ export default {
batchNumber
:
""
,
//批次号
urgencyLevel
:
null
//紧急程度
},
list
:
[],
//data测试数据
dataT
:
[],
dataTemp
:
[
{
mesCode
:
"DDBH_20200414_32"
,
taskType
:
2
,
productId
:
71
,
quantity
:
10
,
remark
:
"5"
,
taskRequire
:
"4"
,
status
:
1
,
divideMark
:
1
,
productName
:
"铅笔"
,
drawnNumber
:
"qianbii11"
,
rootId
:
0
,
batchNumber
:
"5"
,
projectNumber
:
"5"
,
urgencyLevel
:
2
,
productingPreparationPeople
:
0
,
productingPreparationFinishDate
:
"0001-01-01 00:00:00"
,
quotationPeople
:
0
,
quotationFinishDate
:
"0001-01-01 00:00:00"
,
upId
:
0
,
demandStartDate
:
"2020-04-14 00:00:01"
,
demandFinishDate
:
"2020-04-15 00:00:01"
,
rootCode
:
"DDBH_20200414_32"
,
creationTime
:
"2020-04-16 17:21:03"
,
id
:
46
},
{
mesCode
:
"DDBH_20200414_3202"
,
taskType
:
2
,
productId
:
71
,
quantity
:
6
,
remark
:
"5"
,
taskRequire
:
"4"
,
status
:
4
,
divideMark
:
0
,
productCode
:
"No1~No6"
,
productName
:
"铅笔"
,
drawnNumber
:
"qianbii11"
,
rootId
:
46
,
batchNumber
:
"5"
,
projectNumber
:
"5"
,
urgencyLevel
:
2
,
productingPreparationPeople
:
56
,
productingPreparationFinishDate
:
"2020-04-17 23:59:59"
,
quotationPeople
:
108
,
quotationFinishDate
:
"2020-04-17 23:59:59"
,
upId
:
46
,
demandStartDate
:
"2020-04-14 00:00:01"
,
demandFinishDate
:
"2020-04-15 00:00:01"
,
rootCode
:
"DDBH_20200414_32"
,
lastModificationTime
:
"2020-04-15 10:40:22"
,
lastModifierUserId
:
1
,
creationTime
:
"2020-04-14 17:32:13"
,
creatorUserId
:
1
,
id
:
52
},
{
mesCode
:
"DDBH_20200414_320101"
,
taskType
:
2
,
productId
:
71
,
quantity
:
3
,
remark
:
"5"
,
taskRequire
:
"4"
,
status
:
1
,
divideMark
:
0
,
productName
:
"铅笔"
,
drawnNumber
:
"qianbii11"
,
rootId
:
46
,
batchNumber
:
"5"
,
projectNumber
:
"5"
,
urgencyLevel
:
2
,
productingPreparationPeople
:
0
,
productingPreparationFinishDate
:
"0001-01-01 00:00:00"
,
quotationPeople
:
0
,
quotationFinishDate
:
"0001-01-01 00:00:00"
,
upId
:
51
,
demandStartDate
:
"2020-04-14 00:00:01"
,
demandFinishDate
:
"2020-04-15 00:00:01"
,
rootCode
:
"DDBH_20200414_32"
,
lastModificationTime
:
"2020-04-14 17:50:18"
,
lastModifierUserId
:
1
,
creationTime
:
"2020-04-14 17:32:13"
,
creatorUserId
:
1
,
id
:
53
},
{
mesCode
:
"DDBH_20200414_320102"
,
taskType
:
2
,
productId
:
71
,
quantity
:
1
,
remark
:
"5"
,
taskRequire
:
"4"
,
status
:
1
,
divideMark
:
0
,
productName
:
"铅笔"
,
drawnNumber
:
"qianbii11"
,
rootId
:
46
,
batchNumber
:
"5"
,
projectNumber
:
"5"
,
urgencyLevel
:
2
,
productingPreparationPeople
:
0
,
productingPreparationFinishDate
:
"0001-01-01 00:00:00"
,
quotationPeople
:
0
,
quotationFinishDate
:
"0001-01-01 00:00:00"
,
upId
:
51
,
demandStartDate
:
"2020-04-14 00:00:01"
,
demandFinishDate
:
"2020-04-15 00:00:01"
,
rootCode
:
"DDBH_20200414_32"
,
lastModificationTime
:
"2020-04-14 17:50:18"
,
lastModifierUserId
:
1
,
creationTime
:
"2020-04-14 17:32:13"
,
creatorUserId
:
1
,
id
:
54
},
{
mesCode
:
"DDBH_20200414_31"
,
taskType
:
2
,
productId
:
70
,
quantity
:
8
,
remark
:
"5"
,
taskRequire
:
"4"
,
status
:
4
,
divideMark
:
0
,
productCode
:
"No1~No8"
,
productName
:
"口罩模具"
,
drawnNumber
:
"LXG_KZ_001"
,
rootId
:
0
,
batchNumber
:
"5"
,
projectNumber
:
"5"
,
urgencyLevel
:
2
,
productingPreparationPeople
:
56
,
productingPreparationFinishDate
:
"2020-04-16 23:59:59"
,
quotationPeople
:
108
,
quotationFinishDate
:
"2020-04-16 23:59:59"
,
upId
:
0
,
demandStartDate
:
"2020-04-14 00:00:01"
,
demandFinishDate
:
"2020-04-15 00:00:01"
,
rootCode
:
"DDBH_20200414_31"
,
isDeleted
:
false
,
creationTime
:
"2020-04-16 17:21:03"
,
id
:
45
},
{
mesCode
:
"DDBH_20200414_30"
,
taskType
:
2
,
productId
:
69
,
quantity
:
18
,
remark
:
"5"
,
taskRequire
:
"4"
,
status
:
4
,
divideMark
:
0
,
productCode
:
"No1~No18"
,
productName
:
"护目镜"
,
drawnNumber
:
"LXG_HMJ_001"
,
rootId
:
0
,
batchNumber
:
"5"
,
projectNumber
:
"5"
,
urgencyLevel
:
2
,
productingPreparationPeople
:
56
,
productingPreparationFinishDate
:
"2020-04-16 23:59:59"
,
quotationPeople
:
1
,
quotationFinishDate
:
"2020-04-24 23:59:59"
,
upId
:
0
,
demandStartDate
:
"2020-04-14 00:00:01"
,
demandFinishDate
:
"2020-04-15 00:00:01"
,
rootCode
:
"DDBH_20200414_30"
,
isDeleted
:
false
,
creationTime
:
"2020-04-16 17:21:03"
,
id
:
44
},
{
mesCode
:
"DDBH_20200414_28"
,
taskType
:
1
,
productId
:
22
,
quantity
:
15
,
remark
:
"rr"
,
taskRequire
:
"r"
,
status
:
1
,
divideMark
:
0
,
productName
:
"te"
,
drawnNumber
:
"te"
,
rootId
:
0
,
batchNumber
:
"r"
,
projectNumber
:
"rr"
,
urgencyLevel
:
2
,
productingPreparationPeople
:
0
,
productingPreparationFinishDate
:
"0001-01-01 00:00:00"
,
quotationPeople
:
0
,
quotationFinishDate
:
"0001-01-01 00:00:00"
,
upId
:
0
,
demandStartDate
:
"2020-04-14 00:00:01"
,
demandFinishDate
:
"2020-04-15 00:00:01"
,
rootCode
:
"DDBH_20200414_28"
,
isDeleted
:
false
,
creationTime
:
"2020-04-16 17:21:03"
,
id
:
42
}
],
data1
:
[],
selectdata
:
[],
//以下为手写死数据集:
orderCatList
:
[],
//订单类型下拉
outerCodeList
:
[],
//型号外部代码下拉
missionCodeList
:
[],
//任务号下拉
stageList
:
[],
//阶段下拉
materailList
:
[],
//材料下拉
routingAccessList
:
[],
//工艺方法下拉
drawNumberList
:
[],
//图号下拉
docNameList
:
[],
//文档名称下拉
ownerGustList
:
[],
//甲方客户下拉
mainDeptList
:
[],
//厂内主体部门下拉
taskTypeList
:
[],
//任务类型
statusList
:
[],
//状态类型
rowData
:
{},
//编辑、查看的当前行数据
rowDataArry
:
[],
ModalInfoStaut
:
""
,
sendList
:
[],
metCodesStrTxt
:
""
,
actIds
:
[],
//批量处理时ids
actMescodes
:
[],
delNum
:
0
,
//判断是否可以进行修改
arrayIds
:
[],
//选择列表后的ids
delMsg
:
""
//删除提示信息
list
:
[]
};
},
created
()
{
...
...
@@ -707,16 +142,12 @@ export default {
},
mounted
()
{
this
.
initTree
();
//this.dataformat();//data传数据转为tree类型
this
.
tableHeight
=
window
.
innerHeight
-
220
;
//this.$refs.CustomTable.getTableHeight(this.tableHeight);
window
.
onresize
=
()
=>
{
///浏览器窗口大小变化
return
(()
=>
{
window
.
screenHeight
=
window
.
innerHeight
;
this
.
treeHeight
=
window
.
screenHeight
-
150
;
this
.
tableHeight
=
window
.
screenHeight
-
220
;
//this.$refs.CustomTable.getTableHeight(this.tableHeight);
})();
};
},
...
...
@@ -746,32 +177,49 @@ export default {
}
},
methods
:
{
addO
k
()
{
o
k
()
{
this
.
$refs
.
grid
.
load
();
this
.
addModal
=
false
;
this
.
detailModal
=
false
;
this
.
editModal
=
false
;
this
.
modal
=
false
;
this
.
curId
=
0
;
},
search
()
{
this
.
easySearch
.
keys
.
value
=
this
.
easySearch
.
keys
.
value
.
trim
();
this
.
$refs
.
grid
.
reload
(
this
.
easySearch
);
},
detail
(
row
)
{
this
.
detailModal
=
true
;
this
.
rowData
=
row
;
add
()
{
this
.
curId
=
0
;
this
.
title
=
"新增"
;
this
.
detail
=
()
=>
import
(
"./add"
);
this
.
modal
=
true
;
},
edit
(
row
)
{
this
.
editModal
=
true
;
this
.
rowData
=
row
;
copy
(
id
)
{
this
.
curId
=
id
;
this
.
title
=
"克隆"
;
this
.
detail
=
()
=>
import
(
"./add"
);
this
.
modal
=
true
;
},
split
(
row
)
{
if
(
row
.
quantity
>
1
)
{
this
.
splitModal
=
true
;
this
.
rowData
=
row
;
}
else
{
this
.
$Message
.
error
(
"数量为1,不能进行分解"
);
}
view
(
id
)
{
this
.
curId
=
id
;
this
.
title
=
"详情"
;
this
.
detail
=
()
=>
import
(
"./detail"
);
this
.
modal
=
true
;
},
edit
(
id
)
{
this
.
curId
=
id
;
this
.
title
=
"编辑"
;
this
.
detail
=
()
=>
import
(
"./edit"
);
this
.
modal
=
true
;
},
remove
(
id
)
{
Api
.
delete
(
id
).
then
(
r
=>
{
if
(
r
.
success
)
{
this
.
$refs
.
grid
.
load
();
this
.
$Message
.
success
(
"删除成功"
);
}
});
},
cancel
()
{
this
.
curId
=
0
;
this
.
modal
=
false
;
},
onHide
()
{
// this.$Message.info("收起左侧树")
...
...
@@ -785,330 +233,8 @@ export default {
let
where
=
{
bomId
:
{
op
:
"In"
,
value
:
ids
}
};
this
.
$refs
.
grid
.
reload
(
where
);
},
//确定分解
orderSplitOk
()
{
let
returnDatalist
=
this
.
$refs
.
orderSplit
.
returnDataList
();
let
orderQuantity
=
returnDatalist
.
quantity
;
let
orderListQuantity
=
0
;
let
quantyStatu
=
false
;
//子订单计划数是否为0或空
let
dateStatu
=
false
;
//子订单开始完成时间是否为空
if
(
returnDatalist
.
items
.
length
>
0
)
{
returnDatalist
.
items
.
forEach
(
data
=>
{
orderListQuantity
=
orderListQuantity
+
parseFloat
(
data
.
quantity
);
if
(
parseFloat
(
data
.
quantity
)
==
0
||
data
.
quantity
==
""
)
{
quantyStatu
=
true
;
}
if
(
data
.
demandDate
[
0
]
==
""
||
data
.
demandDate
[
1
]
==
""
)
{
dateStatu
=
true
;
}
});
if
(
dateStatu
)
{
this
.
$Message
.
error
(
"子订单开始完成时间不能为空,请重新输入时间!"
);
return
false
;
}
if
(
quantyStatu
)
{
this
.
$Message
.
error
(
"子订单计划数量不能为0,请重新输入计划数量!"
);
}
else
if
(
returnDatalist
.
quantity
!=
orderListQuantity
)
{
this
.
$Message
.
error
(
"计划总数量与订单数量不一致,请重新输入计划数量!"
);
}
else
{
this
.
ModalInfo
=
true
;
this
.
ModalInfoStaut
=
"split"
;
this
.
dataListRetrun
=
returnDatalist
;
this
.
metCodesStrTxt
=
"确定分解订单 "
+
returnDatalist
.
mesCode
+
"?"
;
}
}
else
{
this
.
$Message
.
error
(
"请确定计划数量!"
);
}
},
modalInfoOk
()
{
let
itemsTemp
=
[];
this
.
dataListRetrun
.
items
.
forEach
(
ele
=>
{
let
objTemp
=
{};
objTemp
.
mesCode
=
ele
.
mesCode
;
objTemp
.
quantity
=
Number
(
ele
.
quantity
);
objTemp
.
demandStartDate
=
ele
.
demandStartDate
+
" 00:00:01"
;
objTemp
.
demandFinishDate
=
ele
.
demandFinishDate
+
" 23:59:59"
;
itemsTemp
.
push
(
objTemp
);
});
let
params
=
{
id
:
this
.
dataListRetrun
.
id
,
items
:
itemsTemp
};
Api
.
mesorderdivide
(
params
).
then
(
res
=>
{
if
(
res
.
result
)
{
this
.
$Message
.
success
(
"订单分解成功!"
);
this
.
$refs
.
grid
.
load
();
}
else
{
this
.
$Message
.
error
(
"订单分解失败!"
);
}
});
this
.
splitModal
=
false
;
this
.
ModalInfo
=
false
;
//确定批量操作
// if (this.ModalInfoStaut == 'orderSendReview') {
// this.$http.order.batchstart(this.dataListRetrun).then((res) => {
// if (res.success) {
// this.$Message.success('订单送审成功!')
// this.easySearch('')
// } else {
// this.$Message.error('订单送审失败!')
// }
// })
// this.ModalOrderSendReview = false
// } else if (this.ModalInfoStaut == 'delOrder') {
// this.$http.order.delOrder(this.dataListRetrunParam).then((res) => {
// if (res.result) {
// this.$Message.success('删除成功!')
// this.easySearch('')
// } else {
// this.$Message.error('删除失败!')
// }
// this.$refs.createOrder.resetFields()
// this.createShow = false
// })
// } else if (this.ModalInfoStaut == 'orderSend') {
// this.$http.order.orderSend(this.dataListRetrun).then((res) => {
// if (res.result) {
// this.$Message.success('订单派发成功!')
// this.easySearch('')
// this.ModalOrderSend = false
// } else {
// this.$Message.error('订单派发失败!')
// }
// })
// } else {
// Api.mesorderdivide(this.dataListRetrun).then(res => {
// if (res.result) {
// this.$Message.success("订单分解成功!");
// } else {
// this.$Message.error("订单分解失败!");
// }
// });
//}
},
//打开派发
openSendModal
()
{
this
.
actIds
=
[];
this
.
delNum
=
0
;
if
(
this
.
rowDataArry
.
length
>
0
)
{
this
.
rowDataArry
.
forEach
(
data
=>
{
this
.
actIds
.
push
(
data
.
id
);
if
(
data
.
status
!=
1
)
{
//判断非新建状态的订单
this
.
delNum
+=
1
;
}
});
setTimeout
(()
=>
{
if
(
this
.
delNum
>
0
)
{
this
.
$Message
.
error
(
"所选的订单中有不可派发的订单!"
);
this
.
actIds
=
[];
this
.
sendModal
=
false
;
}
else
{
this
.
sendModal
=
true
;
}
},
400
);
}
else
{
this
.
$Message
.
error
(
"请选择订单"
);
}
},
//确定派发
sendOk
()
{
this
.
$refs
.
orderSend
.
$refs
[
"formValidate"
].
validate
(
valid
=>
{
if
(
valid
)
{
let
ids
=
this
.
arrayIds
;
let
objInfoTem
=
this
.
$refs
.
orderSend
.
returnData
();
let
parms
=
[];
ids
.
forEach
(
e
=>
{
let
objInfo
=
this
.
$u
.
clone
(
objInfoTem
);
objInfo
.
id
=
e
;
parms
.
push
(
objInfo
);
});
Api
.
mesorderdistribute
(
parms
)
.
then
(
r
=>
{
if
(
r
.
success
)
{
if
(
r
.
result
)
{
this
.
$refs
.
grid
.
load
();
this
.
sendModal
=
false
;
this
.
$Message
.
success
(
"派发成功"
);
}
else
{
this
.
sendModal
=
false
;
this
.
$Message
.
error
(
"派发失败"
);
}
}
else
{
this
.
sendModal
=
false
;
this
.
$Message
.
error
(
"派发失败"
);
}
})
.
catch
(
err
=>
{
this
.
sendModal
=
false
;
this
.
$Message
.
error
(
"操作失败"
);
});
}
});
},
//单条删除
remove
(
row
)
{
let
metCodesSingle
=
[];
//没有子订单的订单
let
metCodesFather
=
[];
//有子订单的原始订单
this
.
delMsg
=
""
;
this
.
delNum
=
0
;
this
.
actIds
=
[];
this
.
$refs
.
grid
.
cancelFooterToolbar
();
this
.
actIds
.
push
(
row
.
id
);
if
(
row
.
id
!=
row
.
rootId
)
{
this
.
sondeletecheck
(
row
.
rootId
);
metCodesFather
.
push
(
row
.
rootCode
);
}
else
{
metCodesSingle
.
push
(
row
.
mesCode
);
}
setTimeout
(()
=>
{
if
(
this
.
delNum
>
0
)
{
this
.
$Message
.
error
(
"删除的原始订单中有非新建状态的子订单!"
);
this
.
actIds
=
[];
return
false
;
}
else
{
let
metCodesSingleStr
=
JSON
.
stringify
(
metCodesSingle
)
.
replace
(
"["
,
""
)
.
replace
(
"]"
,
""
)
.
replace
(
/
\"
/g
,
""
);
let
metCodesFatherStr
=
JSON
.
stringify
(
metCodesFather
)
.
replace
(
"["
,
""
)
.
replace
(
"]"
,
""
)
.
replace
(
/
\"
/g
,
""
);
if
(
row
.
id
==
row
.
rootId
)
{
this
.
delMsg
=
metCodesSingleStr
;
}
else
{
this
.
delMsg
=
metCodesFatherStr
+
" 的子订单"
;
}
this
.
deletelModal
=
true
;
}
},
400
);
},
//批量删除
removeList
()
{
let
metCodesSingle
=
[];
//没有子订单的订单
let
metCodesFather
=
[];
//有子订单的原始订单
this
.
actIds
=
[];
this
.
delNum
=
0
;
if
(
this
.
rowDataArry
.
length
>
0
)
{
this
.
rowDataArry
.
forEach
(
data
=>
{
this
.
actIds
.
push
(
data
.
id
);
if
(
data
.
status
!=
1
)
{
//判断非新建状态的订单
this
.
delNum
+=
1
;
}
else
if
(
data
.
id
!=
data
.
rootId
)
{
//判断子订单是否可以删除
this
.
sondeletecheck
(
data
.
rootId
);
if
(
data
.
id
!=
data
.
rootId
&&
data
.
status
==
1
)
{
metCodesFather
.
push
(
data
.
rootCode
);
}
}
else
{
if
(
data
.
id
==
data
.
rootId
&&
data
.
status
==
1
)
{
metCodesSingle
.
push
(
data
.
mesCode
);
}
}
});
setTimeout
(()
=>
{
if
(
this
.
delNum
>
0
)
{
this
.
$Message
.
error
(
"所选的订单中有不可删除的订单!"
);
this
.
actIds
=
[];
this
.
deletelModal
=
false
;
}
else
{
this
.
delMsg
=
""
;
let
metCodesFatherNew
=
Array
.
from
(
new
Set
(
metCodesFather
));
let
metCodesSingleStr
=
JSON
.
stringify
(
metCodesSingle
)
.
replace
(
"["
,
""
)
.
replace
(
"]"
,
""
)
.
replace
(
/
\"
/g
,
""
);
let
metCodesFatherStr
=
JSON
.
stringify
(
metCodesFatherNew
)
.
replace
(
"["
,
""
)
.
replace
(
"]"
,
""
)
.
replace
(
/
\"
/g
,
""
);
if
(
metCodesSingle
.
length
>
0
&&
metCodesFather
.
length
==
0
)
{
this
.
delMsg
=
metCodesSingleStr
;
}
else
if
(
metCodesSingle
.
length
==
0
&&
metCodesFather
.
length
>
0
)
{
this
.
delMsg
=
metCodesFatherStr
+
" 的子订单"
;
}
else
if
(
metCodesSingle
.
length
>
0
&&
metCodesFather
.
length
>
0
)
{
this
.
delMsg
=
metCodesSingleStr
+
" 以及 订单:"
+
metCodesFatherStr
+
" 的子订单"
;
}
this
.
deletelModal
=
true
;
}
},
400
);
}
else
{
this
.
$Message
.
error
(
"请选择订单"
);
}
},
//删除前判断子订单是否能删除
sondeletecheck
(
code
)
{
let
param
=
{
id
:
code
};
Api
.
sondeletecheck
(
param
).
then
(
res
=>
{
if
(
res
.
result
==
1
)
{
this
.
delNum
+=
0
;
}
else
{
this
.
delNum
+=
1
;
}
});
},
//删除前判断子订单
sondeletecheck1
(
code
)
{
let
param
=
{
id
:
code
};
let
delStaut
=
0
;
Api
.
sondeletecheck
(
param
).
then
(
res
=>
{
if
(
res
.
result
==
1
)
{
//可以删除
delStaut
=
0
;
}
else
{
delStaut
=
1
;
}
});
return
delStaut
;
},
//删除确定
removeOk
()
{
let
params
=
{
ids
:
this
.
actIds
};
Api
.
mesorderdelete
(
params
)
.
then
(
r
=>
{
if
(
r
.
success
)
{
if
(
r
.
result
)
{
this
.
$refs
.
grid
.
load
();
this
.
deletelModal
=
false
;
this
.
$Message
.
success
(
"删除成功"
);
}
else
{
this
.
deletelModal
=
false
;
this
.
$Message
.
error
(
"删除失败"
);
}
}
else
{
this
.
deletelModal
=
false
;
this
.
$Message
.
error
(
"删除失败"
);
}
})
.
catch
(
err
=>
{
this
.
deletelModal
=
false
;
this
.
$Message
.
error
(
"操作失败"
);
});
},
removeCancel
()
{
this
.
deletelModal
=
false
;
},
cancel
()
{
this
.
curId
=
0
;
this
.
addModal
=
false
;
this
.
detailModal
=
false
;
this
.
editModal
=
false
;
this
.
deletedlModal
=
false
;
},
l
(
key
)
{
let
vkey
=
"
mes_plan
"
+
"."
+
key
;
let
vkey
=
"
stock
"
+
"."
+
key
;
return
this
.
$t
(
vkey
)
||
key
;
},
//new tree start
...
...
@@ -1126,97 +252,6 @@ export default {
this
.
$Message
.
error
(
"加载产品树失败!"
);
}
});
},
selectTreeNode
(
value
)
{
if
(
value
.
length
>
0
)
{
this
.
ids
=
[];
this
.
getAllIds
(
value
);
if
(
this
.
ids
.
length
>
0
)
{
this
.
orderSearchForm
.
productId
=
this
.
ids
;
}
else
{
this
.
orderSearchForm
.
productId
=
[];
}
this
.
easySearch
.
productId
.
value
=
this
.
orderSearchForm
.
productId
;
this
.
$refs
.
grid
.
easySearch
();
}
else
{
this
.
easySearch
.
productId
.
value
=
[];
this
.
$refs
.
grid
.
easySearch
();
}
},
//得到此树节点下所有是产品的productId
getAllIds
(
trees
)
{
trees
.
forEach
((
data
,
index
)
=>
{
var
that
=
this
;
if
(
data
.
isProduct
)
{
this
.
ids
.
push
(
data
.
productId
);
}
if
(
data
.
children
.
length
>
0
)
{
this
.
getAllIds
(
data
.
children
);
}
});
},
handleSelect
(
data
)
{
if
(
data
.
length
>
0
)
{
this
.
selectdata
=
[];
this
.
selectdata
=
data
;
this
.
list
=
[];
this
.
list
.
push
({
label
:
data
[
0
].
title
,
value
:
data
[
0
].
id
});
//this.formValidate.classType=data[0].id;
if
(
data
[
0
].
isProduct
==
"1"
)
{
this
.
orderSearchForm
.
productName
=
data
[
0
].
id
;
this
.
orderSearchForm
.
productId
=
data
[
0
].
productId
;
}
else
{
this
.
$Message
.
error
(
"此节点不是产品,请选择产品节点!"
);
}
}
},
renderContent
(
h
,
{
root
,
node
,
data
})
{
//渲染树的样式
return
h
(
"span"
,
{
style
:
{
color
:
data
.
isProduct
!=
"1"
?
"#249E91"
:
"#333"
,
//根据选中状态设置样式
cursor
:
"pointer"
},
on
:
{
click
:
()
=>
{
let
arrTree
=
[];
arrTree
.
push
(
data
);
this
.
handleSelect
(
arrTree
);
//手动选择树节点
}
}
},
data
.
title
);
},
//new tree end
//list start
onSelect
(
a
,
b
)
{
//alert(JSON.stringify(a));
//批量选择
let
selectRows
=
a
;
this
.
arrayIds
=
[];
this
.
rowDataArry
=
a
;
selectRows
.
forEach
(
e
=>
{
this
.
arrayIds
.
push
(
e
.
id
);
});
},
//list end
//将数组数据转为tree
dataformat
()
{
this
.
dataT
=
this
.
$u
.
toTree
(
this
.
dataTemp
,
0
,
u
=>
{
if
(
u
.
divideMark
==
1
)
{
u
.
_disabled
=
true
;
}
u
.
_showChildren
=
true
;
},
"rootId"
);
this
.
dataT
=
this
.
$u
.
clone
(
this
.
dataT
);
}
}
};
...
...
pages/material/search.vue
View file @
7295179d
<
template
>
<Form
ref=
"form"
:model=
"condition"
:label-width=
"90"
>
<Row>
<Col
:span=
"12"
:v-if=
"condition.id.show"
>
<FormItem
:label=
"$t('id')"
prop=
"id"
>
<Input
v-model=
"condition.id.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.creationTime.show"
>
<FormItem
:label=
"l('creationTime')"
prop=
"creationTime"
>
<DatePicker
type=
"daterange"
v-model=
"condition.creationTime.value"
></DatePicker>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.creatorUserId.show"
>
<FormItem
:label=
"l('creatorUserId')"
prop=
"creatorUserId"
>
<Input
v-model=
"condition.creatorUserId.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.lastModificationTime.show"
>
<FormItem
:label=
"l('lastModificationTime')"
prop=
"lastModificationTime"
>
<DatePicker
type=
"daterange"
v-model=
"condition.lastModificationTime.value"
></DatePicker>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.lastModifierUserId.show"
>
<FormItem
:label=
"l('lastModifierUserId')"
prop=
"lastModifierUserId"
>
<Input
v-model=
"condition.lastModifierUserId.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.deletionTime.show"
>
<FormItem
:label=
"l('deletionTime')"
prop=
"deletionTime"
>
<DatePicker
type=
"daterange"
v-model=
"condition.deletionTime.value"
></DatePicker>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.name.show"
>
<FormItem
:label=
"l('name')"
prop=
"name"
>
<Input
v-model=
"condition.name.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.materialId.show"
>
<FormItem
:label=
"l('materialId')"
prop=
"materialId"
>
<Input
v-model=
"condition.materialId.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.materialType.show"
>
<FormItem
:label=
"l('materialType')"
prop=
"materialType"
>
<Input
v-model=
"condition.materialType.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.total.show"
>
<FormItem
:label=
"l('total')"
prop=
"total"
>
<Input
v-model=
"condition.total.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.storeId.show"
>
<FormItem
:label=
"l('storeId')"
prop=
"storeId"
>
<Input
v-model=
"condition.storeId.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.storeTitle.show"
>
<FormItem
:label=
"l('storeTitle')"
prop=
"storeTitle"
>
<Input
v-model=
"condition.storeTitle.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.minNum.show"
>
<FormItem
:label=
"l('minNum')"
prop=
"minNum"
>
<Input
v-model=
"condition.minNum.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.brand.show"
>
<FormItem
:label=
"l('brand')"
prop=
"brand"
>
<Input
v-model=
"condition.brand.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.specifications.show"
>
<FormItem
:label=
"l('specifications')"
prop=
"specifications"
>
<Input
v-model=
"condition.specifications.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.batch.show"
>
<FormItem
:label=
"l('batch')"
prop=
"batch"
>
<Input
v-model=
"condition.batch.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.certificateOfApproval.show"
>
<FormItem
:label=
"l('certificateOfApproval')"
prop=
"certificateOfApproval"
>
<Input
v-model=
"condition.certificateOfApproval.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.creator.show"
>
<FormItem
:label=
"l('creator')"
prop=
"creator"
>
<Input
v-model=
"condition.creator.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.unitPrice.show"
>
<FormItem
:label=
"l('unitPrice')"
prop=
"unitPrice"
>
<Input
v-model=
"condition.unitPrice.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"12"
:v-if=
"condition.originalManufacturer.show"
>
<FormItem
:label=
"l('originalManufacturer')"
prop=
"originalManufacturer"
>
<Input
v-model=
"condition.originalManufacturer.value"
></Input>
</FormItem>
</Col>
<Col
:span=
"24"
:v-if=
"condition.remark.show"
>
<FormItem
:label=
"l('remark')"
prop=
"remark"
>
<Input
v-model=
"condition.remark.value"
></Input>
</FormItem>
</Col>
</Row>
</Form>
</
template
>
<
script
>
import
Api
from
"./api"
;
export
default
{
name
:
"Add"
,
data
()
{
return
{
condition
:
{
id
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
creationTime
:
{
op
:
"Range"
,
value
:
null
,
show
:
true
},
creatorUserId
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
lastModificationTime
:
{
op
:
"Range"
,
value
:
null
,
show
:
true
},
lastModifierUserId
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
deletionTime
:
{
op
:
"Range"
,
value
:
null
,
show
:
true
},
name
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
materialId
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
materialType
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
total
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
storeId
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
storeTitle
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
minNum
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
brand
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
specifications
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
batch
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
certificateOfApproval
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
creator
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
unitPrice
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
originalManufacturer
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
},
remark
:
{
op
:
"Equal"
,
value
:
null
,
show
:
true
}
}
};
},
methods
:
{
handleClose
()
{
this
.
$emit
(
"on-close"
);
},
l
(
key
)
{
key
=
"stock"
+
"."
+
key
;
return
this
.
$t
(
key
);
}
}
};
</
script
>
plugins/iview.js
View file @
7295179d
...
...
@@ -33,6 +33,8 @@ import workShopDefault from '@/components/page/workShopDefault.vue'
import
WorkShop
from
'@/components/page/workShop.vue'
import
EquipSelect
from
'@/components/page/equipSelect.vue'
import
ResourceSelect
from
'@/components/page/resourceSelect.vue'
import
StoreTree
from
'@/components/page/storeTree.vue'
import
StoreSelect
from
'@/components/page/storeSelect.vue'
import
clipboard
from
'clipboard'
;
// import i18n from '@/i18n';
...
...
@@ -117,6 +119,9 @@ Vue.component("DTSearch", DTSearch)
Vue
.
component
(
"InputTime"
,
InputTime
)
Vue
.
component
(
"OutputTime"
,
OutputTime
)
Vue
.
component
(
"ViewerImg"
,
ViewerImg
)
Vue
.
component
(
"StoreTree"
,
StoreTree
)
Vue
.
component
(
"StoreSelect"
,
StoreSelect
)
//注入mock
...
...
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