Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
O
online-edu-admin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Redmine
Redmine
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
online-edu
online-edu-admin
Commits
bd092ab2
Commit
bd092ab2
authored
Sep 03, 2021
by
Liu Peng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加标签会员价格修改
parent
be93511f
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
262 additions
and
200 deletions
+262
-200
user.js
src/api/admin/user.js
+19
-18
index.vue
src/views/biz/priceConfig/index.vue
+223
-180
vue.config.js
vue.config.js
+2
-2
yarn.lock
yarn.lock
+18
-0
No files found.
src/api/admin/user.js
View file @
bd092ab2
...
...
@@ -3,31 +3,33 @@
*****************/
// 导入请求公用方法
import
{
request
}
from
'../../utils/axiosFun'
;
import
{
request
}
from
"../../utils/axiosFun"
;
export
const
fetchList
=
(
query
)
=>
{
return
request
(
'post'
,
'/api/sys/user/list'
,
query
,
"F"
)
}
return
request
(
"post"
,
"/api/sys/user/list"
,
query
,
"F"
);
}
;
export
const
addObj
=
(
obj
)
=>
{
return
request
(
'post'
,
'/api/sys/user/save'
,
obj
)
}
return
request
(
"post"
,
"/api/sys/user/save"
,
obj
);
}
;
export
const
delObj
=
(
ids
)
=>
{
return
request
(
'post'
,
'/api/sys/user/delete'
,
ids
)
}
return
request
(
"post"
,
"/api/sys/user/delete"
,
ids
);
}
;
export
const
putObj
=
(
obj
)
=>
{
return
request
(
'post'
,
'/api/sys/user/update'
,
obj
)
}
return
request
(
"post"
,
"/api/sys/user/update"
,
obj
);
}
;
export
const
getObj
=
(
id
)
=>
{
return
request
(
'get'
,
'/api/sys/user/info/'
+
id
)
}
return
request
(
"get"
,
"/api/sys/user/info/"
+
id
);
}
;
export
const
getCurrentInfo
=
()
=>
{
return
request
(
'get'
,
'/api/sys/user/info'
,{})
}
return
request
(
"get"
,
"/api/sys/user/info"
,
{});
}
;
export
const
changePassword
=
(
obj
)
=>
{
return
request
(
'post'
,
'/api/sys/user/password'
,
obj
)
}
\ No newline at end of file
return
request
(
"post"
,
"/api/sys/user/password"
,
obj
);
};
export
const
fetchAllUserTags
=
(
query
)
=>
{
return
request
(
"post"
,
"/api/mgr/userTag/list"
,
query
,
"F"
);
};
src/views/biz/priceConfig/index.vue
View file @
bd092ab2
<
template
>
<div
class=
"price-config-container"
>
<a-form-model
:model=
"formModel"
:label-col=
"
{span:4}"
:wrapper-col="{span: 4}"
:rules="formRules"
ref="formv"
>
<a-form-model-item
label=
"会员价格"
ref=
"vipPriceVal"
prop=
"vipPrice"
>
<a-input
v-model=
"formModel.vipPrice"
prefix=
"¥"
suffix=
"1个月"
></a-input>
</a-form-model-item>
<!--
<a-form-model-item
label=
"折扣配置"
ref=
"discountFor3MonVal"
prop=
"discountFor3Mon"
>
<a-input
v-model=
"formModel.discountFor3Mon"
prefix=
"¥"
suffix=
"3个月"
@
blur=
"blurValidate('discountFor3MonVal')"
></a-input>
</a-form-model-item>
<a-form-model-item
:wrapper-col=
"
{span:4,offset:4}" ref="discountFor6MonVal" prop="discountFor6Mon">
<a-input
v-model=
"formModel.discountFor6Mon"
prefix=
"¥"
suffix=
"6个月"
@
blur=
"blurValidate('discountFor6MonVal')"
></a-input>
</a-form-model-item>
<a-form-model-item
:wrapper-col=
"
{span:4,offset:4}" ref="discountFor12MonVal" prop="discountFor12Mon">
<a-input
v-model=
"formModel.discountFor12Mon"
prefix=
"¥"
suffix=
"12个月"
@
blur=
"blurValidate('discountFor12MonVal')"
></a-input>
</a-form-model-item>
-->
<a-form-model-item
label=
"企业会员价格"
ref=
"enterpriceVipPriceVal"
prop=
"enterpriceVipPrice"
>
<a-input
v-model=
"formModel.enterpriceVipPrice"
prefix=
"¥"
suffix=
"1个月"
></a-input>
</a-form-model-item>
<a-form-model-item
:wrapper-col=
"
{offset:4}">
<a-button
type=
"primary"
@
click=
"onSubmit"
:loading=
"btnLoading"
>
保存
</a-button>
</a-form-model-item>
</a-form-model>
</div>
<div
class=
"price-config-container"
>
<a-form-model
:model=
"formModel"
:label-col=
"
{span:4}" :wrapper-col="{span: 10}" :rules="formRules" ref="formv">
<a-form-model-item
label=
"会员价格"
ref=
"vipPriceVal"
prop=
"vipPrice"
>
<a-input
v-model=
"formModel.vipPrice"
suffix=
"1个月"
></a-input>
</a-form-model-item>
<a-form-model-item
label=
"标签用户会员价格"
>
<a-row
justify=
"space-between"
v-for=
"utp in formModel.userTagPrice"
:key=
"utp.id"
:value=
"utp.id"
>
<a-col
:span=
"4"
>
<span
class=
"required"
>
*
</span>
会员价格:
</a-col>
<a-col
:span=
"7"
>
<a-input
v-model=
"utp.price"
suffix=
"1个月"
></a-input>
</a-col>
<a-col
:span=
"3"
class=
"spliter"
>
适用于:
</a-col>
<a-col
:span=
"7"
>
<a-select
v-model=
"utp.id"
>
<a-select-option
:value=
"tag.id"
v-for=
"tag in userTags"
:key=
"tag.id"
>
{{
tag
.
name
}}
</a-select-option>
</a-select>
</a-col>
</a-row>
<a-button
type=
"primary"
@
click=
"addTagedMember"
>
+继续添加
</a-button>
</a-form-model-item>
<a-form-model-item
label=
"企业会员价格"
ref=
"enterpriceVipPriceVal"
prop=
"enterpriceVipPrice"
>
<a-input
v-model=
"formModel.enterpriceVipPrice"
suffix=
"1个月"
></a-input>
</a-form-model-item>
<a-form-model-item
:wrapper-col=
"
{offset:4}">
<a-button
type=
"primary"
@
click=
"onSubmit"
:loading=
"btnLoading"
>
保存
</a-button>
</a-form-model-item>
</a-form-model>
</div>
</
template
>
<
script
>
import
{
getConfig
,
updateConfig
}
from
'@/api/biz/priceConfig'
import
{
disposereq
}
from
'@/utils/util'
import
{
getConfig
,
updateConfig
}
from
"@/api/biz/priceConfig"
;
import
{
disposereq
}
from
"@/utils/util"
;
import
{
fetchAllUserTags
}
from
"@/api/admin/user"
;
import
{
uuid
}
from
"vue-uuid"
;
export
default
{
data
(){
let
validatorPrice
=
(
rule
,
value
,
callback
)
=>
{
var
val
=
parseFloat
(
value
)
if
(
val
<=
0.0
){
return
callback
(
new
Error
(
'必须大于0'
))
}
return
true
;
};
return
{
formModel
:
{
vipPrice
:
0
,
discountFor3Mon
:
0
,
discountFor6Mon
:
0
,
discountFor12Mon
:
0
,
enterpriceVipPrice
:
0
data
()
{
let
validatorPrice
=
(
rule
,
value
,
callback
)
=>
{
var
val
=
parseFloat
(
value
);
if
(
val
<=
0.0
)
{
return
callback
(
new
Error
(
"必须大于0"
));
}
return
true
;
};
return
{
userTags
:
[],
formModel
:
{
vipPrice
:
0
,
discountFor3Mon
:
0
,
discountFor6Mon
:
0
,
discountFor12Mon
:
0
,
enterpriceVipPrice
:
0
,
},
btnLoading
:
false
,
formRules
:
{
vipPrice
:
[
{
required
:
true
,
message
:
"不能为空"
,
trigger
:
"blur"
,
},
{
type
:
"number"
,
message
:
"必须为数字"
,
trigger
:
"blur"
,
transform
:
(
value
)
=>
{
return
Number
(
value
);
},
btnLoading
:
false
,
formRules
:{
vipPrice
:
[
{
required
:
true
,
message
:
'不能为空'
,
trigger
:
'blur'
},
{
type
:
'number'
,
message
:
'必须为数字'
,
trigger
:
'blur'
,
transform
:
(
value
)
=>
{
return
Number
(
value
)
}
},
{
validator
:
validatorPrice
,
message
:
'必须大于0'
,
trigger
:
'blur'
}
],
discountFor3Mon
:
[
{
required
:
true
,
message
:
'不能为空'
,
trigger
:
'blur'
},
{
type
:
'number'
,
message
:
'必须为数字'
,
trigger
:
'blur'
,
transform
:
(
value
)
=>
{
return
Number
(
value
)
}
}
],
discountFor6Mon
:
[
{
required
:
true
,
message
:
'不能为空'
,
trigger
:
'blur'
},
{
type
:
'number'
,
message
:
'必须为数字'
,
trigger
:
'blur'
,
transform
:
(
value
)
=>
{
return
Number
(
value
)
}
}
],
discountFor12Mon
:
[
{
required
:
true
,
message
:
'不能为空'
,
trigger
:
'blur'
},
{
type
:
'number'
,
message
:
'必须为数字'
,
trigger
:
'blur'
,
transform
:
(
value
)
=>
{
return
Number
(
value
)
}
}
],
enterpriceVipPrice
:
[
{
required
:
true
,
message
:
'不能为空'
,
trigger
:
'blur'
},
{
type
:
'number'
,
message
:
'必须为数字'
,
trigger
:
'blur'
,
transform
:
(
value
)
=>
{
return
Number
(
value
)
}
},
{
validator
:
validatorPrice
,
message
:
'必须大于0'
,
trigger
:
'blur'
}
]
}
}
},
{
validator
:
validatorPrice
,
message
:
"必须大于0"
,
trigger
:
"blur"
,
},
],
discountFor3Mon
:
[
{
required
:
true
,
message
:
"不能为空"
,
trigger
:
"blur"
,
},
{
type
:
"number"
,
message
:
"必须为数字"
,
trigger
:
"blur"
,
transform
:
(
value
)
=>
{
return
Number
(
value
);
},
},
],
discountFor6Mon
:
[
{
required
:
true
,
message
:
"不能为空"
,
trigger
:
"blur"
,
},
{
type
:
"number"
,
message
:
"必须为数字"
,
trigger
:
"blur"
,
transform
:
(
value
)
=>
{
return
Number
(
value
);
},
},
],
discountFor12Mon
:
[
{
required
:
true
,
message
:
"不能为空"
,
trigger
:
"blur"
,
},
{
type
:
"number"
,
message
:
"必须为数字"
,
trigger
:
"blur"
,
transform
:
(
value
)
=>
{
return
Number
(
value
);
},
},
],
enterpriceVipPrice
:
[
{
required
:
true
,
message
:
"不能为空"
,
trigger
:
"blur"
,
},
{
type
:
"number"
,
message
:
"必须为数字"
,
trigger
:
"blur"
,
transform
:
(
value
)
=>
{
return
Number
(
value
);
},
},
{
validator
:
validatorPrice
,
message
:
"必须大于0"
,
trigger
:
"blur"
,
},
],
},
};
},
created
()
{
this
.
getPriceConfig
();
fetchAllUserTags
({
pageIndex
:
0
,
pageSize
:
1000
,
}).
then
((
resp
)
=>
{
this
.
userTags
=
resp
.
data
;
});
},
beforeUpdate
()
{},
methods
:
{
blurValidate
(
prop
)
{
this
.
$refs
[
prop
].
onFieldBlur
();
},
created
()
{
this
.
getPriceConfig
()
getPriceConfig
()
{
getConfig
()
.
then
((
res
)
=>
{
if
(
res
.
resp_code
==
200
)
{
this
.
formModel
=
res
.
datas
;
}
else
{
this
.
$message
.
info
(
res
.
resp_msg
);
}
})
.
catch
((
err
)
=>
{
disposereq
(
err
);
});
},
beforeUpdate
()
{
addTagedMember
()
{
if
(
!
this
.
formModel
.
userTagPrice
)
{
this
.
formModel
.
userTagPrice
=
[];
}
this
.
formModel
.
userTagPrice
.
push
({
name
:
""
,
price
:
0
,
});
},
methods
:
{
blurValidate
(
prop
){
this
.
$refs
[
prop
].
onFieldBlur
()
},
getPriceConfig
(){
getConfig
().
then
(
res
=>
{
if
(
res
.
resp_code
==
200
){
this
.
formModel
=
res
.
datas
}
else
{
this
.
$message
.
info
(
res
.
resp_msg
);
}
}).
catch
(
err
=>
{
disposereq
(
err
)
})
},
onSubmit
(){
this
.
btnLoading
=
true
this
.
$refs
.
formv
.
validate
(
valid
=>
{
if
(
valid
){
updateConfig
(
this
.
formModel
).
then
(
res
=>
{
if
(
res
.
resp_code
==
200
){
this
.
$message
.
info
(
'保存成功'
);
}
else
{
this
.
$message
.
info
(
res
.
resp_msg
);
}
this
.
btnLoading
=
false
}).
catch
(
err
=>
{
this
.
btnLoading
=
false
disposereq
(
err
)
})
}
else
{
this
.
btnLoading
=
false
onSubmit
()
{
this
.
btnLoading
=
true
;
this
.
$refs
.
formv
.
validate
((
valid
)
=>
{
if
(
valid
)
{
const
utp
=
this
.
formModel
.
userTagPrice
;
utp
.
forEach
((
tmp
)
=>
{
const
tag
=
this
.
userTags
.
find
((
ut
)
=>
ut
.
id
===
tmp
.
id
);
if
(
tag
)
{
tmp
.
name
=
tag
.
name
;
}
});
updateConfig
(
this
.
formModel
)
.
then
((
res
)
=>
{
if
(
res
.
resp_code
==
200
)
{
this
.
$message
.
info
(
"保存成功"
);
}
else
{
this
.
$message
.
info
(
res
.
resp_msg
);
}
})
this
.
btnLoading
=
false
;
})
.
catch
((
err
)
=>
{
this
.
btnLoading
=
false
;
disposereq
(
err
);
});
}
else
{
this
.
btnLoading
=
false
;
}
}
}
});
},
},
};
</
script
>
<
style
>
.price-config-container
{
margin
:
10px
;
}
</
style
>
\ No newline at end of file
.price-config-container
{
margin
:
10px
;
}
.required
{
color
:
#f5222c
;
}
.spliter
{
margin-left
:
10px
;
}
</
style
>
vue.config.js
View file @
bd092ab2
...
...
@@ -3,8 +3,8 @@
* https://cli.vuejs.org/zh/config/#%E7%9B%AE%E6%A0%87%E6%B5%8F%E8%A7%88%E5%99%A8
*
*/
//
const url = 'http://edu.qkdata.com:10081'
const
url
=
'http://localhost:9090'
const
url
=
'http://edu.qkdata.com:10081'
//
const url = 'http://localhost:9090'
// 基础路径,发布前修改这里,当前配置打包出来的资源都是相对路径
let
publicPath
=
'/admin'
...
...
yarn.lock
View file @
bd092ab2
...
...
@@ -1174,6 +1174,11 @@
dependencies:
source-map "^0.6.1"
"@types/uuid@^8.0.0":
version "8.3.1"
resolved "http://192.168.10.201:8081/repository/npm-public/@types/uuid/-/uuid-8.3.1.tgz#1a32969cf8f0364b3d8c8af9cc3555b7805df14f"
integrity sha1-GjKWnPjwNks9jIr5zDVVt4Bd8U8=
"@types/webpack-dev-server@^3.11.0":
version "3.11.4"
resolved "http://192.168.10.201:8081/repository/npm-public/@types/webpack-dev-server/-/webpack-dev-server-3.11.4.tgz#90d47dd660b696d409431ab8c1e9fa3615103a07"
...
...
@@ -8353,6 +8358,11 @@ uuid@^3.3.2, uuid@^3.4.0:
resolved "http://192.168.10.201:8081/repository/npm-public/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=
uuid@^8.1.0:
version "8.3.2"
resolved "http://192.168.10.201:8081/repository/npm-public/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=
validate-npm-package-license@^3.0.1:
version "3.0.4"
resolved "http://192.168.10.201:8081/repository/npm-public/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
...
...
@@ -8460,6 +8470,14 @@ vue-template-es2015-compiler@^1.9.0:
resolved "http://192.168.10.201:8081/repository/npm-public/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
integrity sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=
vue-uuid@2.0.2:
version "2.0.2"
resolved "http://192.168.10.201:8081/repository/npm-public/vue-uuid/-/vue-uuid-2.0.2.tgz#0cfb739e660a3af1d4e3342743578114f79b2438"
integrity sha1-DPtznmYKOvHU4zQnQ1eBFPebJDg=
dependencies:
"@types/uuid" "^8.0.0"
uuid "^8.1.0"
vue@^2.6.10:
version "2.6.12"
resolved "http://192.168.10.201:8081/repository/npm-public/vue/-/vue-2.6.12.tgz#f5ebd4fa6bd2869403e29a896aed4904456c9123"
...
...
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