Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
P
pica.cloud.web-education-admin
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
Close sidebar
动态
分支图
统计图
创建新议题
提交
议题看板
打开侧边栏
jingqi.liu
pica.cloud.web-education-admin
提交
e3e42d99
提交
e3e42d99
编写于
8月 20, 2020
作者:
chendeli
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
接口联调
上级
ad17dc8a
变更
3
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
486 行增加
和
214 行删除
+486
-214
index.js
src/utils/goods/index.js
+66
-0
create-good.vue
src/views/goods/create-good.vue
+351
-189
goods-manage.vue
src/views/goods/goods-manage.vue
+69
-25
未找到文件。
src/utils/goods/index.js
0 → 100644
浏览文件 @
e3e42d99
import
fetch
from
'../fetch'
;
import
{
getBaseUrl
}
from
'@/utils/index'
let
headers
=
{
'Content-Type'
:
'application/json;charset=UTF-8'
,
token
:
localStorage
.
getItem
(
'storageToken'
),
};
export
const
getGoodsList
=
(
params
)
=>
{
return
fetch
({
headers
,
url
:
getBaseUrl
(
`store/goods/query`
),
method
:
'post'
,
data
:
params
,
description
:
'商品列表查询'
,
})
};
//
export
const
batchOnOff
=
(
params
)
=>
{
return
fetch
({
headers
,
url
:
getBaseUrl
(
`store/goods/onoff/sale`
),
method
:
'post'
,
data
:
params
,
description
:
'批量上下架'
,
})
};
export
const
updateGoods
=
(
params
)
=>
{
return
fetch
({
headers
,
url
:
getBaseUrl
(
`store/goods/upsert`
),
method
:
'post'
,
data
:
params
,
description
:
'创建/更新商品'
,
})
};
///dosage/all
export
const
dosageAll
=
(
parm
)
=>
{
return
fetch
({
headers
,
url
:
getBaseUrl
(
`store/dosage/all`
),
method
:
'get'
,
// params: params,
description
:
'剂型'
,
})
};
export
const
getDeparts
=
(
parm
)
=>
{
return
fetch
({
headers
,
url
:
getBaseUrl
(
`api-ws/departments/category`
),
method
:
'get'
,
// params: params,
description
:
'科室'
,
})
};
//`basic-data/constants?typeCode=P128`
export
const
updateStock
=
(
parm
)
=>
{
return
fetch
({
headers
,
url
:
getBaseUrl
(
`trade/order/admin/query/
${
orderId
}
`
),
method
:
'get'
,
// params: params,
description
:
'增加/减少库存'
,
})
};
src/views/goods/create-good.vue
浏览文件 @
e3e42d99
...
...
@@ -21,123 +21,122 @@
<div
class=
"basic-item-icon"
>
<div
class=
"part-tit"
>
通用信息
</div>
<el-form-item
label=
"商品名称"
prop=
"goods
_n
ame"
>
<el-form-item
label=
"商品名称"
prop=
"goods
N
ame"
>
<el-col
:span=
"13"
>
<el-input
size=
"small"
v-model=
"formData.goods
_n
ame"
v-model=
"formData.goods
N
ame"
placeholder=
"请输入商品名称"
show-word-limit
maxlength=
"60"
></el-input>
<!--
<span
class=
"word-num"
>
{{
(
formData
.
goods
_n
ame
).
replace
(
/
\s
+/g
,
""
).
length
}}
/60
</span>
-->
<!--
<span
class=
"word-num"
>
{{
(
formData
.
goods
N
ame
).
replace
(
/
\s
+/g
,
""
).
length
}}
/60
</span>
-->
</el-col>
</el-form-item>
<el-form-item
label=
"商品介绍"
prop=
"goods
_d
escription"
>
<el-form-item
label=
"商品介绍"
prop=
"goods
D
escription"
>
<el-col
:span=
"13"
>
<el-input
type=
"textarea"
rows=
"4"
size=
"small"
v-model=
"formData.goods
_d
escription"
v-model=
"formData.goods
D
escription"
placeholder=
"请输入商品介绍"
maxlength=
"1000"
show-word-limit
></el-input>
<!--
<span
class=
"word-num"
>
{{
(
formData
.
goods
_d
escription
).
replace
(
/
\s
+/g
,
""
).
length
}}
/1000
</span>
-->
<!--
<span
class=
"word-num"
>
{{
(
formData
.
goods
D
escription
).
replace
(
/
\s
+/g
,
""
).
length
}}
/1000
</span>
-->
</el-col>
</el-form-item>
<el-form-item
label=
"商品头图"
class=
"required-label"
>
<el-upload
v-model=
"formData.goods_image
"
:file-list=
"fileGoodsList
"
class=
"bg-uploader"
:show-file-list=
"isShowFileList"
action=
"#"
:show-file-list=
"false"
:before-upload=
"beforeUploadPic"
>
<img
v-if=
"formData.goods_image"
:src=
"formData.goods_image"
@
mouseover
.
stop=
"imgMouseOver1=true"
class=
"bg-img"
/>
<img
v-if=
"!formData.goods_image"
class=
"bg-img"
src=
"../../assets/image/small.png"
/>
<div
class=
"img-delete"
v-show=
"imgMouseOver1"
@
click
.
stop=
"deleteImg(1)"
@
mouseout
.
stop=
"imgMouseOver1=false"
>
<i
class=
"el-icon-delete"
></i>
<div
class=
"file-pics"
v-if=
"fileGoodsList.length > 0"
:key=
"index"
v-for=
"(item,index) in fileGoodsList"
>
<img
:src=
"item.url"
@
mouseover
.
stop=
"headIndex=index"
class=
"bg-img"
/>
<div
class=
"img-delete"
v-if=
"headIndex==index"
@
click
.
stop=
"deleteImg(item,fileGoodsList)"
@
mouseout
.
stop=
"headIndex=-1"
>
<i
class=
"el-icon-delete"
></i>
</div>
</div>
<img
class=
"bg-img"
src=
"../../assets/image/small.png"
/>
<div
class=
"limit-text"
>
<p>
限制大小: 200kb
</p>
<p>
最小
尺寸:750*420
</p>
<p>
建议
尺寸:750*420
</p>
<p>
支持jpeg, png格式
</p>
</div>
</el-upload>
<p
class=
"upload-message"
v-if=
"!is
Goods_image
"
>
请上传商品头图
</p>
<p
class=
"upload-message"
v-if=
"!is
goodsImages
"
>
请上传商品头图
</p>
</el-form-item>
<el-form-item
label=
"商品类型"
prop=
"goods
_t
ype"
>
<el-form-item
label=
"商品类型"
prop=
"goods
T
ype"
>
<el-select
v-model=
"formData.goods
_t
ype"
v-model=
"formData.goods
T
ype"
placeholder=
"请选择商品类型"
size=
"small"
@
change=
"getGoodsTypes(formData.goodsType,2)"
clearable
>
<el-option
v-for=
"(item,index) in
typeList
"
v-for=
"(item,index) in
oneLever
"
:key=
"index"
:label=
"item.
label
"
:value=
"item.
value
"
:label=
"item.
categoryName
"
:value=
"item.
id
"
></el-option>
</el-select>
</el-form-item>
<!--
<p
class=
"upload-message"
v-if=
"uploadImgMessage1"
>
请上传商品头图
</p>
-->
</div>
<div
class=
"basic-item-icon"
>
<div
class=
"basic-item-icon"
v-if=
"isMedic"
>
<div
class=
"part-tit"
>
药品信息
</div>
<el-form-item
label=
"批准文号"
prop=
"approval
_n
umber"
>
<el-col
:span=
"1
3
"
>
<el-form-item
label=
"批准文号"
prop=
"approval
N
umber"
>
<el-col
:span=
"1
8
"
>
<el-input
size=
"small"
v-model=
"formData.approval
_n
umber"
v-model=
"formData.approval
N
umber"
placeholder=
"请输入批准文号"
style=
"width:
7
0%;"
style=
"width:
5
0%;"
></el-input>
<!--
<span
class=
"word-num"
>
{{
(
formData
.
name
).
replace
(
/
\s
+/g
,
""
).
length
}}
/60
</span>
-->
<span
class=
"fast-opt"
>
快速录入
</span>
<span
class=
"word-num"
>
(点击可快速录入下面的药品信息)
</span>
</el-col>
</el-form-item>
<el-form-item
label=
"药品通用名称"
prop=
"medic
_common_n
ame"
>
<el-form-item
label=
"药品通用名称"
prop=
"medic
CommonN
ame"
>
<el-col
:span=
"13"
>
<el-input
size=
"small"
v-model=
"formData.medic
_common_n
ame"
v-model=
"formData.medic
CommonN
ame"
placeholder=
"请输入药品通用名称"
style=
"width:70%;"
maxlength=
"60"
show-word-limit
></el-input>
<!--
<span
class=
"word-num"
>
{{
(
formData
.
medic
_common_n
ame
).
replace
(
/
\s
+/g
,
""
).
length
}}
/60
</span>
-->
<!--
<span
class=
"word-num"
>
{{
(
formData
.
medic
CommonN
ame
).
replace
(
/
\s
+/g
,
""
).
length
}}
/60
</span>
-->
</el-col>
</el-form-item>
<el-form-item
label=
"药品商品名称"
prop=
"medic
_goods_n
ame"
>
<el-form-item
label=
"药品商品名称"
prop=
"medic
GoodsN
ame"
>
<el-col
:span=
"13"
>
<el-input
size=
"small"
v-model=
"formData.medic
_goods_n
ame"
v-model=
"formData.medic
GoodsN
ame"
placeholder=
"请输入药品商品名称"
maxlength=
"60"
show-word-limit
></el-input>
<!--
<span
class=
"word-num"
>
{{
(
formData
.
medic
_goods_n
ame
).
replace
(
/
\s
+/g
,
""
).
length
}}
/60
</span>
-->
<!--
<span
class=
"word-num"
>
{{
(
formData
.
medic
GoodsN
ame
).
replace
(
/
\s
+/g
,
""
).
length
}}
/60
</span>
-->
</el-col>
</el-form-item>
<el-form-item
label=
"药品规格"
prop=
"size"
>
...
...
@@ -153,23 +152,23 @@
</el-col>
</el-form-item>
<div
class=
"inline"
>
<el-form-item
label=
"是否是处方药"
prop=
"otc"
>
<el-form-item
label=
"是否是处方药"
prop=
"otc
1
"
>
<el-col
:span=
"24"
>
<el-radio
size=
"mini"
v-model=
"formData.otc"
label=
"1"
>
处方药
</el-radio>
<el-radio
size=
"mini"
v-model=
"formData.otc
1
"
label=
"1"
>
处方药
</el-radio>
<el-radio
v-model=
"formData.otc"
label=
"0"
>
非处方药
</el-radio>
</el-col>
</el-form-item>
<el-form-item
label=
"剂型"
prop=
"dosage
_i
d"
>
<el-form-item
label=
"剂型"
prop=
"dosage
I
d"
>
<el-select
v-model=
"formData.dosage
_i
d"
v-model=
"formData.dosage
I
d"
placeholder=
"请选择药品剂型"
size=
"small"
clearable
>
<el-option
v-for=
"(item,index) in
typeList
"
v-for=
"(item,index) in
doseAll
"
:key=
"index"
:label=
"item.
label
"
:value=
"item.
value
"
:label=
"item.
dosageName
"
:value=
"item.
id
"
></el-option>
</el-select>
</el-form-item>
...
...
@@ -187,64 +186,67 @@
</el-col>
</el-form-item>
<el-form-item
label=
"药品类型"
prop=
"category
_id_l
evel2"
>
<el-form-item
label=
"药品类型"
prop=
"category
IdL
evel2"
>
<el-select
v-model=
"formData.category
_id_l
evel2"
v-model=
"formData.category
IdL
evel2"
placeholder=
"请选择药品类型"
size=
"small"
@
change=
"getLever(formData.categoryIdLevel2,3)"
clearable
>
<el-option
v-for=
"(item,index) in t
ypeList
"
v-for=
"(item,index) in t
woLever
"
:key=
"index"
:label=
"item.
label
"
:value=
"item.
value
"
:label=
"item.
categoryName
"
:value=
"item.
id
"
></el-option>
</el-select>
</el-form-item>
<div
class=
"inline"
>
<el-form-item
label=
"一级类目"
prop=
"
dynamicFlag"
>
<el-form-item
label=
"一级类目"
prop=
"
categoryIdLevel3"
>
<el-select
v-model=
"formData.
dynamicFlag
"
v-model=
"formData.
categoryIdLevel3
"
placeholder=
"请选择一级类目"
size=
"small"
clearable
@
change=
"getLever(formData.categoryIdLevel3,4)"
>
<el-option
v-for=
"(item,index) in t
ypeList
"
v-for=
"(item,index) in t
hreeLever
"
:key=
"index"
:label=
"item.
label
"
:value=
"item.
value
"
:label=
"item.
categoryName
"
:value=
"item.
id
"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"二级类目"
prop=
"
dynamicFlag"
>
<el-form-item
label=
"二级类目"
prop=
"
categoryIdLevel4"
>
<el-select
v-model=
"formData.
dynamicFlag
"
v-model=
"formData.
categoryIdLevel4
"
placeholder=
"请选择二级类目"
size=
"small"
clearable
@
change=
"getLever(formData.categoryIdLevel4,5)"
>
<el-option
v-for=
"(item,index) in typeList
"
:key=
"index"
:label=
"item.label
"
:value=
"item.value
"
></el-option>
<el-option
v-for=
"(item,index) in fourLever
"
:key=
"index"
:label=
"item.categoryName
"
:value=
"item.id
"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"三级级类目"
prop=
"
dynamicFlag
"
>
<el-form-item
label=
"三级级类目"
prop=
"
categoryIdLevel5
"
>
<el-select
v-model=
"formData.
dynamicFlag
"
v-model=
"formData.
categoryIdLevel5
"
placeholder=
"请选择三级类目"
size=
"small"
clearable
>
<el-option
v-for=
"(item,index) in
typeList
"
v-for=
"(item,index) in
fiveLever
"
:key=
"index"
:label=
"item.
label
"
:value=
"item.
value
"
:label=
"item.
categoryName
"
:value=
"item.
id
"
></el-option>
</el-select>
</el-form-item>
...
...
@@ -270,18 +272,18 @@
clearable
>
<el-option
v-for=
"(item,index) in
typeList
"
v-for=
"(item,index) in
allDeparts
"
:key=
"index"
:label=
"item.
label
"
:value=
"item.
value
"
:label=
"item.
name
"
:value=
"item.
id
"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"治疗疾病"
prop=
"treat
_d
isease"
>
<el-form-item
label=
"治疗疾病"
prop=
"treat
D
isease"
>
<el-col
:span=
"24"
>
<el-input
size=
"small"
v-model=
"formData.treat
_d
isease"
v-model=
"formData.treat
D
isease"
placeholder=
"请输入治疗疾病"
></el-input>
...
...
@@ -291,14 +293,21 @@
</el-form-item>
</div>
<el-form-item
label=
"有效期"
prop=
"expired
_t
ime"
>
<el-form-item
label=
"有效期"
prop=
"expired
T
ime"
>
<el-col
:span=
"13"
>
<el-input
<!--
<el-input
size=
"small"
v-model=
"formData.expired
_t
ime"
v-model=
"formData.expired
T
ime"
placeholder=
"请输入有效期"
style=
"width:70%;"
></el-input>
></el-input>
-->
<el-date-picker
v-model=
"formData.expiredTime"
size=
"small"
format=
"yyyy-MM-dd HH:mm:ss"
type=
"date"
placeholder=
"选择日期"
>
</el-date-picker>
<span
class=
"word-num"
></span>
</el-col>
...
...
@@ -311,21 +320,18 @@
:show-file-list=
"false"
:before-upload=
"beforeUploadPic1"
>
<img
v-if=
"formData.specification_url"
:src=
"formData.specification_url"
@
mouseover
.
stop=
"imgMouseOver1=true"
class=
"bg-img"
/>
<img
v-if=
"!formData.specification_url"
class=
"bg-img"
src=
"../../assets/image/small.png"
/>
<div
class=
"img-delete"
v-show=
"imgMouseOver1"
@
click
.
stop=
"deleteImg(1)"
@
mouseout
.
stop=
"imgMouseOver1=false"
>
<i
class=
"el-icon-delete"
></i>
<div
class=
"file-pics"
v-if=
"fileIntrList.length > 0"
:key=
"index"
v-for=
"(item,index) in fileIntrList"
>
<img
:src=
"item.url"
@
mouseover
.
stop=
"intrIndex=index"
class=
"bg-img"
/>
<div
class=
"img-delete"
v-if=
"intrIndex==index"
@
click
.
stop=
"deleteImg(item,fileIntrList)"
@
mouseout
.
stop=
"intrIndex=-1"
>
<i
class=
"el-icon-delete"
></i>
</div>
</div>
<img
class=
"bg-img"
src=
"../../assets/image/small.png"
/>
<div
class=
"limit-text"
>
<p>
限制大小: 2M
</p>
<!--
<p>
最小尺寸:750*420
</p>
-->
...
...
@@ -339,18 +345,18 @@
<div
class=
"basic-item-icon"
>
<div
class=
"part-tit"
>
销售信息
</div>
<div
class=
"inline"
>
<el-form-item
label=
"零售价"
prop=
"
nam
e"
>
<el-form-item
label=
"零售价"
prop=
"
costPric
e"
>
<el-col
:span=
"20"
>
<el-input
size=
"small"
v-model=
"formData.
nam
e"
v-model=
"formData.
costPric
e"
placeholder=
"请输入零售价"
></el-input>
<!--
<span
class=
"word-num"
>
{{
(
formData
.
name
).
replace
(
/
\s
+/g
,
""
).
length
}}
/60
</span>
-->
</el-col>
</el-form-item>
<el-form-item
label=
"折扣价"
prop=
"name"
>
<
!--
<
el-form-item
label=
"折扣价"
prop=
"name"
>
<el-col
:span=
"20"
>
<el-input
size=
"small"
...
...
@@ -358,9 +364,9 @@
placeholder=
"请输入折扣价"
></el-input>
<!--
<span
class=
"word-num"
>
{{
(
formData
.
name
).
replace
(
/
\s
+/g
,
""
).
length
}}
/60
</span>
-->
</el-col>
</el-form-item>
</el-form-item>
-->
</div>
<div
class=
"inline"
>
<el-form-item
label=
"库存"
prop=
"name"
>
...
...
@@ -380,11 +386,11 @@
<!--
<span
class=
"word-num"
>
{{
(
formData
.
name
).
replace
(
/
\s
+/g
,
""
).
length
}}
/60
</span>
-->
</el-col>
</el-form-item>
<el-form-item
label=
"条形码"
prop=
"
nam
e"
>
<el-form-item
label=
"条形码"
prop=
"
barCod
e"
>
<el-col
:span=
"20"
>
<el-input
size=
"small"
v-model=
"formData.
nam
e"
v-model=
"formData.
barCod
e"
placeholder=
"请输入条形码"
></el-input>
...
...
@@ -438,6 +444,7 @@
let
vm
=
null
;
import
{
openLoading
,
closeLoading
}
from
"../../utils/utils"
;
import
{
doUpload
,
getFilePath
}
from
"../../utils/qiniu-util"
;
import
{
updateGoods
,
updateStock
,
dosageAll
,
getDeparts
}
from
'@/utils/goods'
;
import
Cropper
from
'@/components/common/cropper.vue'
export
default
{
components
:
{
...
...
@@ -462,9 +469,30 @@
placeholderTxt:'请输入减少的库存数量',
num:''
},
doseAll:[],
fileGoodsList:[],
fileIntrList:[],
intrIndex:-1,
isShowFileList:false,
headIndex:-1,
oneLever:[],
twoLever:[],
allDeparts:[],
threeLever:[{
categoryName: "
默认
",
id:0
}],
fourLever:[{
categoryName: "
默认
",
id:0
}],
fiveLever:[{
categoryName: "
默认
",
id:0
}],
stockDio:false,
curmbFirst: '云鹊店铺',
is
Goods_image
:true,
is
goodsImages
:true,
isSpecification_url:true,
title:'',
typeList: [{
...
...
@@ -479,26 +507,36 @@
}],
formData: {
id:'',
goods_name:'',
goods_description:'',
goods_image:'',
goods_type:'',
medic_common_name:'',
medic_goods_name:'',
categoryId:'',
categoryIdLevel2: '',
categoryIdLevel3: 0,
categoryIdLevel4: 0,
categoryIdLevel5: 0,
goodsName:'',
goodsDescription:'',
goodsImages:[],
goodsType:'',
medicCommonName:'',
medicGoodsName:'',
size:'',
dosage
_i
d:null,
dosage
I
d:null,
usage:'',
category_id_level2:''
,
otc:'',
approval
_n
umber:'',
otc:false
,
otc
1
:'',
approval
N
umber:'',
manufacturer:'',
department:'',
expired
_t
ime:'',
expired
T
ime:'',
specification_url:'',
treat
_d
isease:'',
bar
_c
ode:'',
discount
_p
rice:'',
treat
D
isease:'',
bar
C
ode:'',
discount
P
rice:'',
stock:0,
specificationImages:[],
goodsId:'',
costPrice:'',
decrStock:'',//减少库存
incrStock:'',//增加库存
},
showCropper: false,
currentOption: {
...
...
@@ -519,7 +557,7 @@
oriUrl: '', // 原图
},
rules: {
goods
_n
ame: [
goods
N
ame: [
{ required: true, message: "
请输入商品名称
", trigger: "
blur
" },
{
// min: 2,
...
...
@@ -539,13 +577,13 @@
},
{ validator: checkProjectStr, trigger: "
blur
" }
],
goods
_image
: [
goods
Images
: [
{ required: true, message: "
请上传商品头图
", trigger: "
blur
" }
],
goods
_t
ype:[
goods
T
ype:[
{ required: true, message: "
请选择商品类型
", trigger: "
change
" }
],
medic
_common_n
ame:[
medic
CommonN
ame:[
{ required: true, message: "
请输入商品通用名称
", trigger: "
blur
" }
],
size:[
...
...
@@ -554,28 +592,43 @@
manufacturer:[
{ required: true, message: "
请输入生产厂家
", trigger: "
blur
" }
],
approval
_n
umber:[
approval
N
umber:[
{ required: true, message: "
请输入批准文号
", trigger: "
blur
" }
],
dosage
_i
d:[
dosage
I
d:[
{ required: true, message: "
请选择剂型
", trigger: "
change
" }
],
category
_id_l
evel2:[
category
IdL
evel2:[
{ required: true, message: "
请选择药品类型
", trigger: "
blur
" }
],
categoryIdLevel3:[
{ required: true, message: "
请选择一级类目
", trigger: "
blur
" }
],
categoryIdLevel4:[
{ required: true, message: "
请选择二级类目
", trigger: "
blur
" }
],
categoryIdLevel5:[
{ required: true, message: "
请选择三级类目
", trigger: "
blur
" }
],
otc:[
{ required: true, message: "
请选择是否是处方
", trigger: "
blur
" }
],
specification_url:[
{ required: true, message: "
请上传药品说明书
", trigger: "
blur
" }
],
// barCode: [
// { required: true, message: "
请输入条形码
", trigger: "
blur
" },
// ],
costPrice: [
{ required: true, message: "
请输入零售价
", trigger: "
blur
" },
],
dynamicFlag: [
{ required: true, message: "
请选择内容发布权
", trigger: "
blur
" },
]
},
imgMouseOver1: false,
uploadImgMessage1: false,//未上传图片,校验提示语
isMedic:false,
}
},
created() {
...
...
@@ -583,10 +636,69 @@
console.log(this.$route)
const {id} = this.$route.query
this.title = id == 'add' ? '新增商品' : '编辑商品'
this.getLever(0,1)
dosageAll().then((res)=>{
this.doseAll = res.data
})
getDeparts().then((res)=>{
this.allDeparts = res.data
})
},
methods: {
getGoodsTypes(id,type){
if(id == 5 ){
this.isMedic = true;
this.getLever(id,type)
}else{
this.isMedic = false;
}
},
defaultArr(){
let a = [
{
categoryName: "
默认
",
id:0
}
]
return a
},
//获取分类
getLever(id,type){
this.GET("
store
/
category
/
"+id).then(res => {
console.log(res)
if(type == 1){
this.oneLever = res.data
}else if(type == 2){
this.twoLever = res.data || this.defaultArr()
}else if(type == 3){
this.threeLever = res.data.length > 0 ? res.data : this.defaultArr()
this.formData.categoryIdLevel3 = ''
this.formData.categoryIdLevel4 = ''
this.formData.categoryIdLevel5 = ''
}else if(type == 4){
this.fourLever = res.data.length > 0 ? res.data : this.defaultArr()
this.formData.categoryIdLevel4 = ''
this.formData.categoryIdLevel5 = ''
}else if(type == 5){
this.fiveLever = res.data.length > 0 ? res.data : this.defaultArr()
}
});
},
updateStock(){
let r = /^
\
+?[1-9][0-9]*$/;
//造假 接口来了删掉
if(this.stock.num <= 0){
return this.$message({
message: '增加库存数量不得为0',
type: 'warning'
});
}
if(!r.test(this.stock.num)){
return this.$message({
message: '库存数量必须正整数',
...
...
@@ -601,18 +713,17 @@
type: 'warning'
});
}
this.formData.stock -= this.stock.num
this.formData.decrStock = this.formData.stock
}else if(this.stock.type == 2){
this.formData.stock = Number(this.stock.num) + Number(this.formData.stock)
this.formData.incrStock = this.formData.stock
}
//造假 接口来了删掉
if(this.stock.num <= 0){
return this.$message({
message: '增加库存数量不得为0',
type: 'warning'
});
}
this.formData.stock = this.stock.num
this.stockDio = false
},
changeStock(type){
if(this.formData.stock == 0 && type == 1){
return;
...
...
@@ -628,61 +739,100 @@
}
this.stockDio = true
},
complete() {
let formName = "
formData
";
this.formData.goodsImages = this.fileGoodsList
this.formData.specificationImages = this.fileIntrList
this.isgoodsImages = this.formData.goodsImages.length == 0 ? false :true;
this.isSpecification_url = this.formData.specificationImages.length == 0 ? false : true
this.formData.categoryId = this.formData.goodsType
this.formData.otc = this.formData.otc1 == 1 ? true : false
if(this.isMedic){
if(!this.isgoodsImages){
return;
}
if(!this.isSpecification_url){
return;
}
}
this.isGoods_image = !this.formData.goods_image ? false :true;
this.isSpecification_url = !this.formData.specification_url ? false : true
this.$refs[formName].validate((valid) => {
if (valid) {
alert('submit!');
//alert('submit!');
this.updateGoodsInfo()
} else {
console.log('error submit!!');
return false;
}
});
},
//表单校验
submitForm() {
let formName = "
formData
";
let flag = null;
if (!this.formData.headUrl){
this.uploadImgMessage1 = true;
}
this.$refs[formName].validate(valid => {
if (valid&&this.formData.headUrl!="") {
flag = true;
} else {
console.log("
error
submit
!!
");
flag = false;
//更新商品
updateGoodsInfo(){
this.formData.incrStock = 1000
updateGoods(this.formData).then((res)=>{
if (res.code !== '000000') {
return this.$message.error(res.message);
}
}
);
this.$emit('returnIsNext', flag);
vm.$message.success("
操作成功
"
);
})
},
beforeUploadPic(file) {
let vm = this;
let picTypes = ['image/jpeg','image/png']
//const isLt2M = file.size / 1024 / 1024 < fileLimit.size
;
const isLt200k = file.size / 1024 < 200
;
if (picTypes.indexOf(file.type) == -1) {
return this.$message.error("
请上传
jpeg
或
png
格式的图片
");
}
// if (!isLt2M
) {
// vm.$message.error("
图片大小不符合规范,请根据规范上传图片
");
// return
;
//
}
if (!isLt200k
) {
return vm.$message.error("
图片大小请控制在
200
k
以内
")
;
}
let _img = new FileReader();
_img.readAsDataURL(file);
openLoading(vm);
doUpload(vm, file, getFilePath(file, null), "
preview4
", "
progress1
", 1).then(function (path) {
closeLoading(vm);
console.log('上传成功后路径', path);
vm.formData.goods_image = path.fullPath
vm.$message.success("
上传成功
");
});
_img.onload = function (theFile) {
let image = new Image()
image.src = theFile.target.result
vm.slide2.oriUrl = theFile.target.result;
image.onload = function () {
let _this = this;
console.log(_this.width,_this.height)
// if (_this.width != fileLimit.width || _this.height != fileLimit.height) {
//if (_this.width == 750 && _this.height == 420) {
openLoading(vm);
doUpload(vm, file, getFilePath(file, null), "
preview4
", "
progress1
", 1).then(function (path) {
closeLoading(vm);
console.log('上传成功后路径', path);
// if (fileLimit.show == "
uploadImgMessage1
") {
// vm.uploadImgMessage1 = false;
// } else if (fileLimit.show == "
uploadImgMessage2
") {
// vm.uploadImgMessage2 = false;
// }
vm.fileGoodsList.push({url:path.fullPath,imageUrl:path.fullPath,imageName:''})
//vm.formData.goodsImages = path.fullPath
vm.$message.success("
上传成功
");
});
// } else {
// return vm.$message.error("
图片尺寸不符合规范,请根据规范上传图片
");
// }
};
};
// openLoading(vm);
// doUpload(vm, file, getFilePath(file, null), "
preview4
", "
progress1
", 1).then(function (path) {
// closeLoading(vm);
// console.log('上传成功后路径', path);
// vm.formData.goodsImages = path.fullPath
// vm.$message.success("
上传成功
");
// });
},
...
...
@@ -726,43 +876,41 @@
image.onload = function () {
let _this = this;
// if (_this.width != fileLimit.width || _this.height != fileLimit.height) {
if (_this.width < fileLimit.width || _this.height < fileLimit.height) {
vm.$message.error("
图片尺寸不符合规范,请根据规范上传图片
");
return;
} else if(_this.width > fileLimit.width || _this.height > fileLimit.height){
vm.showCropper = true;
vm.currentOption.cvWidth = _this.width;
vm.currentOption.cvHeight = _this.height;
return;
} else {
//
if (_this.width < fileLimit.width || _this.height < fileLimit.height) {
//
vm.$message.error("
图片尺寸不符合规范,请根据规范上传图片
");
//
return;
//
} else if(_this.width > fileLimit.width || _this.height > fileLimit.height){
//
vm.showCropper = true;
//
vm.currentOption.cvWidth = _this.width;
//
vm.currentOption.cvHeight = _this.height;
//
return;
//
} else {
openLoading(vm);
doUpload(vm, file, getFilePath(file, null), "
preview4
", "
progress1
", 1).then(function (path) {
closeLoading(vm);
console.log('上传成功后路径', path);
if (fileLimit.show == "
uploadImgMessage1
") {
vm.uploadImgMessage1 = false;
} else if (fileLimit.show == "
uploadImgMessage2
") {
vm.uploadImgMessage2 = false;
}
vm.formData[fileLimit.key] = path.fullPath;
vm.formData[fileLimit.more] = {
attachmentName: path.name,
attachmentExt: path.ext,
attachmentSize: path.size
};
vm.fileIntrList.push({url:path.fullPath,imageUrl:path.fullPath})
vm.$message.success("
上传成功
");
});
}
//
}
};
};
return isJPG && isLt2M;
},
//删除图片
deleteImg(type) {
if (type == 1) {
vm.formData.headUrl = "";
vm.imgMouseOver1 = false;
deleteImg(item,d) {
let index = ''
for(let i=0;i<d.length;i++){
if(item.url == d[i].url){
index = i;
break
}
}
d.splice(index,1)
// if (type == 1) {
// vm.formData.headUrl = "";
// vm.imgMouseOver1 = false;
// }
},
// 获取裁剪的图片数据
getCropImg(argument) {
...
...
@@ -970,4 +1118,18 @@
padding-bottom
:
20px
;
}
}
.fast-opt
{
font-size
:
12px
;
padding
:
0
10px
;
cursor
:
pointer
;
color
:
#449284
}
.file-pics
{
display
:
inline-block
;
width
:
84px
;
height
:
100px
;
float
:left
;
margin-right
:
15px
;
position
:
relative
;
}
</
style
>
src/views/goods/goods-manage.vue
浏览文件 @
e3e42d99
...
...
@@ -7,22 +7,22 @@
<el-row
:gutter=
"30"
type=
"flex"
style=
"margin-top: 10px"
>
<el-col
:span=
"18"
>
<el-form-item
label=
"商品名称"
>
<el-input
v-model=
"searchForm.
n
ame"
size=
"small"
placeholder=
"请输入商品名称"
></el-input>
<el-input
v-model=
"searchForm.
goodsN
ame"
size=
"small"
placeholder=
"请输入商品名称"
></el-input>
</el-form-item>
<el-form-item
label=
"商品ID"
>
<el-input
v-model=
"searchForm.id"
size=
"small"
placeholder=
"请输入商品ID"
></el-input>
</el-form-item>
<el-form-item
label=
"商品类型"
>
<el-select
v-model=
"searchForm.
t
ype"
v-model=
"searchForm.
goodsT
ype"
placeholder=
"请选择商品类型"
size=
"small"
clearable
>
<el-option
v-for=
"(item,index) in
typeList
"
v-for=
"(item,index) in
goodsTypes
"
:key=
"index"
:label=
"item.
label
"
:value=
"item.
value
"
:label=
"item.
categoryName
"
:value=
"item.
id
"
></el-option>
</el-select>
</el-form-item>
...
...
@@ -34,8 +34,8 @@
</el-row>
<el-row
:gutter=
"30"
type=
"flex"
style=
"margin-top: 10px"
>
<el-col
:span=
"18"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"batchOpt(
1
)"
>
批量上架
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"batchOpt(
2
)"
>
批量下架
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"batchOpt(
'on'
)"
>
批量上架
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"batchOpt(
'off'
)"
>
批量下架
</el-button>
</el-col>
<el-col
:span=
"6"
style=
"text-align: right"
>
...
...
@@ -45,7 +45,7 @@
</el-row>
</el-form>
<el-table
:data=
"tableData"
class=
"item-table"
style=
"width: 100%;margin-top: 10px;"
@
selection-change=
"handleSelectionChange"
>
<el-table
ref=
"multipleTable"
:data=
"tableData"
class=
"item-table"
style=
"width: 100%;margin-top: 10px;"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
fixed
...
...
@@ -53,23 +53,23 @@
</el-table-column>
<el-table-column
prop=
"id"
label=
"商品ID"
width=
"120"
align=
"center"
></el-table-column>
<el-table-column
prop=
"name"
label=
"商品名称"
min-width=
"140"
align=
"center"
></el-table-column>
<el-table-column
prop=
"type"
label=
"商品类型"
min-
width=
"100"
align=
"center"
>
<el-table-column
prop=
"type"
label=
"商品类型"
width=
"100"
align=
"center"
>
<template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
type
|
dynamicFlagStatus
}}
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"status"
label=
"商品状态"
min-
width=
"100"
align=
"center"
>
<el-table-column
prop=
"status"
label=
"商品状态"
width=
"100"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
status
|
rangeStatus
}}
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"num"
label=
"销量"
min-
width=
"120"
align=
"center"
>
<el-table-column
prop=
"num"
label=
"销量"
width=
"120"
align=
"center"
>
111
</el-table-column>
<el-table-column
prop=
"num"
label=
"规格"
min-
width=
"120"
align=
"center"
>
<el-table-column
prop=
"num"
label=
"规格"
width=
"120"
align=
"center"
>
111
</el-table-column>
<el-table-column
prop=
"num"
label=
"价格"
min-
width=
"120"
align=
"center"
>
<el-table-column
prop=
"num"
label=
"价格"
width=
"120"
align=
"center"
>
111
</el-table-column>
<el-table-column
prop=
"createdTime"
label=
"发布时间"
width=
"150"
align=
"center"
>
...
...
@@ -144,6 +144,7 @@
import
{
openLoading
,
closeLoading
}
from
"../../utils/utils"
;
import
BreadCrumb
from
"@/components/breadcrumb.vue"
;
import
{
getRangeList
,
updateRangeStatus
}
from
"../../utils/yqrange/yqrangeApi"
;
import
{
getGoodsList
,
batchOnOff
}
from
'@/utils/goods'
;
export
default
{
components
:
{
BreadCrumb
...
...
@@ -155,17 +156,27 @@
showNewFlag
:
false
,
batchDialog
:
false
,
searchForm
:
{
name
:
''
,
id
:
''
,
type
:
''
,
pageNo
:
1
,
pageSize
:
10
,
goodsIdList
:[],
goodsName
:
''
,
goodsType
:
0
,
pageNo
:
1
,
pageSize
:
10
,
},
selectList
:[],
batchParm
:{
batchUpdateSaleStatusReq
:
{
goodsIdList
:
[],
userId
:
0
},
onOff
:
""
},
fileList
:[],
totalRows
:
0
,
tableData
:
[
{}
],
goodsTypes
:[],
typeList
:
[{
label
:
'药品'
,
value
:
'1'
,
...
...
@@ -179,20 +190,49 @@
}
},
created
()
{
// this.initPrivilege();
// this.searchList();
this
.
getLists
()
this
.
getLever
()
},
methods
:
{
handlePreview
(){},
handleRemove
(){},
beforeRemove
(){},
handleSelectionChange
(){
handleSelectionChange
(
val
){
console
.
log
(
val
)
this
.
selectList
=
val
},
getLever
(
id
=
0
){
this
.
GET
(
"store/category/"
+
id
).
then
(
res
=>
{
console
.
log
(
res
)
this
.
goodsTypes
=
res
.
data
});
},
getLists
(){
getGoodsList
(
this
.
searchForm
).
then
((
res
)
=>
{
})
},
//批量 上下架操作
batchOpt
(
type
){
if
(
type
==
3
){
//批量导入
this
.
batchDialog
=
true
}
else
{
if
(
this
.
selectList
.
length
==
0
){
return
this
.
$message
({
message
:
'请选择商品'
,
type
:
'warning'
});
}
this
.
batchParm
.
onOff
=
type
this
.
batchParm
.
batchUpdateSaleStatusReq
.
goodsIdList
=
[
1
]
||
this
.
selectList
batchOnOff
(
this
.
batchParm
).
then
((
res
)
=>
{
if
(
res
.
code
==
'000000'
){
this
.
selectList
=
[]
this
.
$refs
.
multipleTable
.
clearSelection
();
this
.
getLists
()
}
})
}
},
edit
(
row
){
...
...
@@ -268,15 +308,19 @@
searchList
()
{
openLoading
(
this
);
let
params
=
this
.
searchForm
;
this
.
getLists
()
},
resetForm
()
{
this
.
searchForm
=
{
name
:
''
,
id
:
''
,
type
:
''
goodsIdList
:[],
goodsName
:
''
,
goodsType
:
''
,
pageNo
:
1
,
pageSize
:
10
,
};
this
.
searchList
();
this
.
getLists
();
},
...
...
写
预览
Markdown
格式
0%
请重试
or
附加一个文件
附加文件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录