Commit 16a2afde by tangjiale

更新代码

parent f92d0ce9
......@@ -3,14 +3,13 @@
* @eMail: 932055106@qq.com
* @Date: 2022-02-11 16:51:59
* @LastEditors: tangjiale
* @LastEditTime: 2022-02-18 18:08:22
* @LastEditTime: 2022-06-09 11:01:55
-->
<template>
<div class="layout-r">
<el-menu class="el-menu-demo" mode="horizontal" background-color="#f0f2f5" active-text-color="#f0f2f5">
<el-menu-item :id="routeActive == item.url ? 'tab-border' : ''" @click="goLink(item)" v-for="(item, index) in historyRoute" :index="item.url">
<div class="route-tab">{{item.name}} <i @click.stop="delRoute(item,index)" class="el-icon-close"></i></div>
<el-menu-item :id="routeActive == item.menuUrl ? 'tab-border' : ''" @click="goLink(item)" v-for="(item, index) in historyRoute" :index="item.menuUrl">
<div class="route-tab">{{item.menuName}} <i @click.stop="delRoute(item,index)" class="el-icon-close"></i></div>
</el-menu-item>
</el-menu>
......@@ -29,7 +28,7 @@
methods:{
//删除路由
delRoute(data,idx){
if(data.url === '/') return
if(data.menuUrl === '/') return
let list = [...[],...this.historyRoute]
list.splice(idx,1)
......@@ -37,22 +36,22 @@
this.$store.commit("updateRoute",list);
//如果不是删除当前路由,就不跳转路由最后一级
if(data.url != this.$route.path){
if(data.menuUrl != this.$route.path){
return
}
this.$router.push(list[list.length - 1].url);
this.$router.push(list[list.length - 1].menuUrl);
this.$forceUpdate();
},
goLink(data){
this.$router.push(data.url)
this.$router.push(data.menuUrl)
}
},
computed:{
routeActive(){
let path = this.$route.path
let routes = this.historyRoute
return ((routes.find(v => v.url == path) && (routes.find(v => v.url == path)).url) || '')
return ((routes.find(v => v.menuUrl == path) && (routes.find(v => v.menuUrl == path)).menuUrl) || '')
}
}
}
......
......@@ -11,22 +11,22 @@
<div v-for="(item,index) in leftNav" :key="index">
<!-- 一级菜单(有子级菜单)-->
<el-submenu :index="index + ''" v-if="item.list && item.list.length">
<template slot="title">{{item.name}}</template>
<template slot="title">{{item.menuName}}</template>
<!-- 遍历二级菜单容器 -->
<div v-for="(i,idx) in item.list" :key="idx">
<!-- 判断二级菜单(有三级菜单)-->
<el-submenu :index="index + '-' + idx" v-if="i.list">
<template slot="title">{{i.name}}</template>
<el-menu-item class="child-nav" :index="j.url" @click="updateRoute(j)" v-for="(j,iIndex) in i.list" :key="iIndex">{{j.name}}</el-menu-item>
<template slot="title">{{i.menuName}}</template>
<el-menu-item class="child-nav" :index="j.menuUrl" @click="updateRoute(j)" v-for="(j,iIndex) in i.list" :key="iIndex">{{j.menuName}}</el-menu-item>
</el-submenu>
<!-- 判断二级菜单(没有三级菜单)-->
<el-menu-item :index="i.url" v-else @click="updateRoute(i)">{{i.name}}</el-menu-item>
<el-menu-item :index="i.menuUrl" v-else @click="updateRoute(i)">{{i.menuName}}</el-menu-item>
</div>
</el-submenu>
<!-- 一级菜单(没有任何子级菜单)-->
<el-menu-item :index="item.url || ''" v-else @click="updateRoute(item)">
<!--<i v-if="item.icon" class="iconfont" :class="[item.icon,item.url == $route.path?'active-a':'active-n']"></i>-->
{{item.name}}
<el-menu-item :index="item.menuUrl || ''" v-else @click="updateRoute(item)">
<!--<i v-if="item.icon" class="iconfont" :class="[item.icon,item.menuUrl == $route.path?'active-a':'active-n']"></i>-->
{{item.menuName}}
</el-menu-item>
</div>
</el-menu>
......@@ -46,43 +46,39 @@ export default {
},
data() {
return {
// leftNav:[],
leftNav:[],
leftNav:[
{name:'首页',url: '/'},
// {
// name:'学生管理',
// list:[
// {name:'页面1',url:'/demo',},
// {name:'页面1--2',url:'/1',},
// {name:'页面1--3',
// list:[
// {name:'页面1--3--1',url:'/2'},
// {name:'页面1--3--2',url:'/3',},
// ]
// }
// ]
// },
{name:'学生管理',url: '/studentManage'},
{name:'课程发布',url:'/courseManage'},
{name:'体验课订单',url:'/experienceOrder'},
{name:'班课报名',url:'/courseJoin'},
]
// leftNav:[
// {name:'首页',menuUrl: '/'},
// {
// name:'学生管理',
// list:[
// {name:'页面1',menuUrl:'/demo',},
// {name:'页面1--2',menuUrl:'/1',},
// {name:'页面1--3',
// list:[
// {name:'页面1--3--1',menuUrl:'/2'},
// {name:'页面1--3--2',menuUrl:'/3',},
// ]
// }
// ]
// },
// ]
};
},
mounted() {
// this.getNavList()
this.getNavList()
},
methods:{
getNavList(){
//菜单列表
this.$service.base.getPermissions().then((res) => {
this.leftNav = res || [];
this.leftNav.unshift({name:'首页',url:'/'})
this.leftNav.unshift({menuName:'首页',menuUrl:'/'})
});
},
updateRoute(item){
let route = this.unique([...this.historyRoute,...[item]],'url')
let route = this.unique([...this.historyRoute,...[item]],'menuUrl')
this.$store.commit("updateRoute",route);
},
unique(arr,val) {
......
......@@ -7,10 +7,10 @@
<div class="flex-c">
<!--权限配置栏-->
<el-dropdown class="margin-r" @command="changeRole" v-if="roleList && roleList.length">
<span class="el-dropdown-link">{{roleList[roleList.findIndex(v => v.currentRole == true)].description}}<i class="el-icon-arrow-down el-icon--right"></i></span>
<el-dropdown class="margin-r" @command="changeRole" v-if="myUserInfo && myUserInfo.roleList && myUserInfo.roleList.length">
<span class="el-dropdown-link">{{myUserInfo.roleList[myUserInfo.roleList.findIndex(v => v.roleId == myUserInfo.roleId)].description}}<i class="el-icon-arrow-down el-icon--right"></i></span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="role" v-for="(role,idx) in roleList" :key="idx">{{role.description}}</el-dropdown-item>
<el-dropdown-item :command="role" v-for="(role,idx) in myUserInfo.roleList" :key="idx">{{role.description}}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<!--信息操作栏-->
......@@ -50,15 +50,8 @@
}
},
mounted(){
//获取权限列表
this.getRoleList()
},
methods:{
getRoleList(){
this.$service.base.queryRoleList().then((res) => {
this.roleList = res || [];
});
},
//切换角色
changeRole(e){
if(e.roleId == this.myUserInfo.roleId){
......
<!--
* @Author: tangjiale
* @eMail: 932055106@qq.com
* @Date: 2022-02-15 09:35:14
* @LastEditors: tangjiale
* @LastEditTime: 2022-02-17 10:27:26
-->
<template>
<el-dialog title="匹配订单物流信息" class="model-bg" :visible.sync="show"
:close-on-click-modal="false" width="1200px">
<p>
下载模板:<span class="upload-btn" @click="downloadModel">点击下载模板</span>
</p>
<div class="flex-c" style="margin-top:20px">
上传文件:
<el-upload accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel"
class="upload-demo" :action="uploadUrl()" :headers="myHeader" ref="upload"
:on-exceed="handleExceed"
:before-upload="beforeAvatarUpload"
:on-success="onSuccess"
:on-remove="handleRemove"
:show-file-list="false">
<template>
<el-button type="primary">点击上传(.xls文件)</el-button>
</template>
</el-upload>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="updateList">完 成</el-button>
</span>
</el-dialog>
</template>
<script>
export default {
services:['order','base'],
data(){
return{
show:false,
fileName:'',
file:null,
}
},
methods:{
updateList(){
this.$emit('updateList')
this.changeShow()
},
downloadModel(){
this.$service.order.downloadModel('订单物流信息表').then(res =>{
this.$notifySuccess()
})
},
uploadUrl(){
var url = "";
url = this.$ctx.$config.baseUrl + "/order/updateOrderExpressInfo";
return url;
},
beforeAvatarUpload(file) {
//验证资源格式
let canUpload = ['application/vnd.ms-excel'].includes(file.type);
//限制大小
//const isLt3M = file.size / 1024 / 1024 < 5;
if (!canUpload) {
this.$message.error('资源格式不正确');
return
}
this.fileName = file.name
this.file = file
},
handleExceed() {
this.$message.error('最多上传一份');
},
handleSub(){
if(!this.file){
this.$message.error('请先上传文件');
return
}
},
// 上传成功
onSuccess(e) {
console.log(e);
if (e.code == 200) {
this.$message({ type: "success", message: "导入成功" });
} else {
this.$message({ type: "error", message: e.message });
this.$refs.upload.clearFiles();
}
},
changeShow(){
this.show = !this.show
},
handleRemove(file, fileList) {
//删除重置数据
this.fileList = []
},
},
computed:{
myHeader(){
return {
token:this.myUserInfo.token
}
}
}
}
</script>
<style lang="less" scoped>
.upload-btn{
cursor: pointer;
}
.upload-btn:hover{
color: #409EFF;
}
</style>
\ No newline at end of file
<!--
* @Author: tangjiale
* @eMail: 932055106@qq.com
* @Date: 2022-02-15 14:43:57
* @LastEditors: tangjiale
* @LastEditTime: 2022-02-15 15:43:50
-->
<template>
<el-dialog title="填写商品发货信息" class="model-bg" :visible.sync="show"
:close-on-click-modal="false" width="1000px">
<el-form :model="form" :rules="rules" ref="ruleForm" label-width="90px">
<el-row :gutter="10" v-if="goods">
<el-col :span="8">收件人:{{goods.contactName}}</el-col>
<el-col :span="8">联系电话:{{goods.phone || ''}}</el-col>
<el-col :span="8">收件地址:{{goods.address || ''}}</el-col>
</el-row>
<el-form-item label="快递公司" prop="expressCompany">
<t-select v-model="form.expressCompany" :ds="ds" placeholder="请选择快递公司" clearable></t-select>
</el-form-item>
<el-form-item label="快递单号" prop="expressNo">
<el-input v-model="form.expressNo" placeholder="请输入快递单号" style="width:220px"></el-input>
</el-form-item>
<el-form-item label="发货时间" prop="sendTime">
<el-date-picker placeholder="请选择发货时间" value-format="yyyy-MM-dd"
v-model="form.sendTime"></el-date-picker>
</el-form-item>
<div name="footer" class="footer">
<el-button type="info" @click="show=false">关闭</el-button>
<el-button type="primary" @click="submitForm">确定</el-button>
</div>
</el-form>
</el-dialog>
</template>
<script>
export default {
services:['base','order'],
data(){
return{
goods:{},
ds: { service: "base", func: "queryExpress" },
show:false,
form:{
expressCompany:'',expressNo:'',sendTime:''
},
rules:{
expressCompany: [
{ required: true, message: '请选择快递公司', trigger: 'change' }
],
expressNo: [
{ required: true, message: '请输入快递单号', trigger: 'blur' }
],
sendTime: [
{ required: true, message: '请选择发货时间', trigger: 'change' }
],
}
}
},
methods:{
handleShow(data){
this.goods = data
this.form = {expressCompany:'',expressNo:'',sendTime:'' }
this.show = true
},
submitForm(){
let that = this
this.$refs.ruleForm.validate((valid) => {
if (valid) {
let param = that.form
Object.assign(param,{id:that.goods.id})
that.$service.order.orderDeliver(param).then(res => {
that.$notifySuccess()
that.show = false
that.$emit('updateList')
})
}
})
}
}
}
</script>
<style lang="less" scoped>
.el-row {
margin-bottom: 20px;
&:last-child {
margin-bottom: 0;
}
}
.footer{
display: flex;
justify-content: flex-end;
}
</style>
\ No newline at end of file
<!--
* @Author: tangjiale
* @eMail: 932055106@qq.com
* @Date: 2022-02-15 11:27:11
* @LastEditors: tangjiale
* @LastEditTime: 2022-03-03 10:58:01
-->
<template>
<el-dialog title="商品订单详情" class="model-bg" :visible.sync="show"
:close-on-click-modal="false" width="1200px">
<el-row :gutter="10">
<el-col :span="8">订单类型:{{orderType[detail.orderType] || '腾讯订单'}}</el-col>
<el-col :span="8">订单编号:{{detail.orderNo || ''}}</el-col>
<el-col :span="8">订单状态:{{orderState[detail.orderStatus] || ''}}</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">订单商品:{{detail.productName || ''}}</el-col>
<el-col :span="8">商品规格:{{detail.colorInfo || ''}}</el-col>
<el-col :span="8">商品数量:{{detail.goodsNum || 0}}</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">缴费金额:{{detail.orderTotal / 100 || 0}}</el-col>
<el-col :span="8">下单时间:{{detail.orderTime || ''}}</el-col>
<el-col :span="8">用户类型:{{detail.peopleType == 'Student' ? '学生' : detail.peopleType == 'Teacher' ? '老师' : detail.peopleType == 'OrganMember' ? '机构职员' : ''}}</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">用户姓名:{{detail.userName || ''}}</el-col>
<el-col :span="8">班级名称:{{detail.className || ''}}</el-col>
<el-col :span="8">学校名称: {{detail.schoolName || ''}}</el-col>
</el-row>
<el-divider></el-divider>
<el-row :gutter="10">
<el-col :span="8">收件人:{{detail.contactName || ''}}</el-col>
<el-col :span="8">收件地址:{{detail.address || ''}}</el-col>
<el-col :span="8">联系电话:{{detail.phone || ''}}</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">快递公司:{{detail.expressCompany || ''}}</el-col>
<el-col :span="8">快递单号:{{detail.expressNo || ''}}</el-col>
<el-col :span="8">发货时间:{{detail.sendTime || ''}}</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">收货时间:{{detail.receiveTime || ''}}</el-col>
</el-row>
<el-divider></el-divider>
<el-row :gutter="10">
<el-col :span="8">退货处理:{{detail.refundStatus == 1 ? '部分退货' : detail.refundStatus == 2 ? '全部退货' : ''}}</el-col>
<el-col :span="8">退货商品数量:{{detail.refundNum || ''}}</el-col>
<el-col :span="8">退款理由:{{detail.refundComment || ''}}</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">运费处理:{{detail.refundExpressAmt ? '客户承担运费' : detail.refundNum ? '公司承担运费' : ''}}</el-col>
<el-col :span="8">承担运费金额:{{detail.refundExpressAmt ? (detail.refundExpressAmt / 100).toFixed(2) : ''}}</el-col>
<el-col :span="8">退款金额:{{detail.refundAmt ? (detail.refundAmt / 100).toFixed(2) : ''}}</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">退款时间:{{detail.refundTime || ''}}</el-col>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="show = false">关 闭</el-button>
</span>
</el-dialog>
</template>
<script>
export default {
services:['order'],
data(){
return{
show:false,
detail:{},
orderType:['','自营订单','移动订单','','天天订单'], //订单类型
orderState:['待支付','待发货','已退款','已收货','已取消','待收货'],
}
},
methods:{
queryOrderDetail(id){
this.detail = {}
this.show = true
this.$service.order.queryOrderDetail(id).then(res =>{
this.detail = res
})
}
}
}
</script>
<style lang="less" scoped>
.el-row {
margin-bottom: 20px;
&:last-child {
margin-bottom: 0;
}
}
</style>
\ No newline at end of file
<!--
* @Author: tangjiale
* @eMail: 932055106@qq.com
* @Date: 2022-02-16 08:45:51
* @LastEditors: tangjiale
* @LastEditTime: 2022-03-03 15:59:57
-->
<template>
<el-dialog title="订单信息" class="model-bg" :visible.sync="show"
:close-on-click-modal="false" width="1200px">
<el-form :model="form" :rules="rules" ref="ruleForm" >
<el-row :gutter="10">
<el-col :span="8">订单类型:{{orderType[detail.orderType] || '腾讯订单'}}</el-col>
<el-col :span="8">订单编号:{{detail.orderNo || ''}}</el-col>
<el-col :span="8">订单状态:{{orderState[detail.orderStatus] || ''}}</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">订单商品:{{detail.productName || ''}}</el-col>
<el-col :span="8">商品规格:{{detail.colorInfo || ''}}</el-col>
<el-col :span="8">商品数量:{{detail.goodsNum || 0}}</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">缴费金额:{{detail.orderTotal / 100 || 0}}</el-col>
<el-col :span="8">下单时间:{{detail.orderTime || ''}}</el-col>
<el-col :span="8">用户类型:{{detail.peopleType == 'Student' ? '学生' : detail.peopleType == 'Teacher' ? '老师' : detail.peopleType == 'OrganMember' ? '机构职员' : ''}}</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">用户姓名:{{detail.userName || ''}}</el-col>
<el-col :span="8">班级名称:{{detail.className || ''}}</el-col>
<el-col :span="8">学校名称: {{detail.schoolName || ''}}</el-col>
</el-row>
<el-divider></el-divider>
<el-row :gutter="10">
<el-col :span="8">收件人:{{detail.contactName || ''}}</el-col>
<el-col :span="8">收件地址:{{detail.address || ''}}</el-col>
<el-col :span="8">联系电话:{{detail.phone || ''}}</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">快递公司:{{detail.expressCompany || ''}}</el-col>
<el-col :span="8">快递单号:{{detail.expressNo || ''}}</el-col>
<el-col :span="8">发货时间:{{detail.sendTime || ''}}</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">收货时间:{{detail.receiveTime || ''}}</el-col>
</el-row>
<el-divider></el-divider>
<div class="tab-title">填写退货信息:</div>
<el-row :gutter="10">
<!-- <el-col :span="8">
<el-form-item label="退款时间" prop="refundTime">
<el-date-picker placeholder="请选择退款时间" value-format="yyyy-MM-dd"
v-model="form.refundTime"></el-date-picker>
</el-form-item>
</el-col> -->
<el-col :span="8">
<el-form-item label="退货处理" prop="refundStatus">
<t-select @input="changeVal" v-model="form.refundStatus" :ds="[{name:'部分退货',value:1},{name:'全部退货',value:2}]" placeholder="请选择退货处理方式" clearable></t-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="退货商品数量" prop="refundNum">
<el-input-number v-model="form.refundNum" :min="1" :max="detail.refundNum ? detail.goodsNum - detail.refundNum : detail.goodsNum" :disabled="form.refundStatus == 2" label="描述文字"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="退款理由" prop="refundComment">
<t-select v-model="form.refundComment" :ds="ds" placeholder="请选择退款理由" clearable></t-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10" >
<el-col :span="8">
<el-form-item label="运费处理" prop="yunfeiType">
<t-select @input="changeYunfei" v-model="form.yunfeiType" :ds="[{name:'客户承担运费',value:1},{name:'公司承担运费',value:2}]" placeholder="请选择运费处理" clearable></t-select>
</el-form-item>
</el-col>
<el-col :span="8" v-if="form.yunfeiType != 2">
<el-form-item label="扣除运费金额" prop="refundExpressAmt">
<el-input v-model="form.refundExpressAmt" onkeyup="this.value=this.value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g,'$1')"
onafterpaste="this.value=this.value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g,'$1')" placeholder="请输入扣除运费金额" style="width:220px"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="退款金额">
{{refundTotal}}
</el-form-item>
</el-col>
</el-row>
<div name="footer" class="footer">
<el-button type="info" @click="show=false">关闭</el-button>
<el-button type="primary" @click="submitForm">确定</el-button>
</div>
</el-form>
</el-dialog>
</template>
<script>
export default {
services:['order'],
data(){
return{
detail:{},
show:false,
orderType:['','自营订单','移动订单','','天天订单'], //订单类型
orderState:['待支付','待发货','已退款','已收货','已取消','待收货'],
ds:[{name:'商品货物不符合',value:'商品货物不符合'},{name:'多拍/拍错/不想要',value:'多拍/拍错/不想要'},{name:'地址/电话信息填写错误',value:'地址/电话信息填写错误'},
{name:'7天无理由退换货',value:'7天无理由退换货'},{name:'商品质量',value:'商品质量'}],
form:{
refundComment:'',refundStatus:'',refundNum:'',refundExpressAmt:'',id:'',refundTime:''
},
rules:{
// refundTime: [
// { required: true, message: '请选择退款时间', trigger: 'change' }
// ],
refundStatus: [
{ required: true, message: '请选择退货处理方式', trigger: 'change' }
],
refundNum:[
{ required: true, message: '请选择退货商品数量', trigger: 'change' }
],
refundComment: [
{ required: true, message: '请选择退款理由', trigger: 'change' }
],
yunfeiType:[
{ required: true, message: '请选择运费处理方式', trigger: 'change' }
],
refundExpressAmt:[
{ required: true, message: '请输入扣除运费金额', trigger: 'change' }
]
}
}
},
methods:{
//退货处理
changeVal(val){
if(val == 2){
this.form.refundNum = this.detail.refundNum ? this.detail.goodsNum - this.detail.refundNum : this.detail.goodsNum
}
},
changeYunfei(val){
if(val == 2){
this.form.refundExpressAmt = ''
}
},
queryOrderDetail(id){
this.detail = {}
this.show = true
this.$service.order.queryOrderDetail(id).then(res =>{
this.detail = res
this.form.id = id
})
},
submitForm(){
let that = this
this.$refs.ruleForm.validate((valid) => {
if (valid) {
that.$showConfirm(`${that.detail.userName}退货(${that.detail.productName},数量${that.form.refundNum})处理,退款金额${that.refundTotal}元!是否确定退货?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(res =>{
let param = {...{},...that.form}
param['refundAmt'] = (that.refundTotal * 100)
param.refundExpressAmt = param.refundExpressAmt ? (param.refundExpressAmt * 100) : ''
delete param.yunfeiType
that.$service.order.refundOrder(param).then(res => {
that.$notifySuccess()
that.show = false
that.$emit('updateList')
})
})
}
})
}
},
computed:{
refundTotal(){
//单价
let unitPrice = (this.detail.unitPrice / 100) //0.01
//退款金额
let refundPrice = this.form.refundNum * unitPrice - (this.form.refundExpressAmt || 0)
return (refundPrice).toFixed(2)
}
},
watch:{
show (newVal, oldVal) {
if(newVal == false){
this.form = {refundComment:'',refundStatus:'',refundNum:'',refundExpressAmt:'',id:'',refundTime:''}
this.$nextTick(() => {
this.$refs['ruleForm'].clearValidate()
})
}
}
}
}
</script>
<style lang="less" scoped>
.el-row {
margin-bottom: 20px;
&:last-child {
margin-bottom: 0;
}
}
/deep/ .el-form-item{
margin-bottom: 0px !important;
}
.tab-title{
font-size: 16px;
padding-bottom: 15px;
}
/deep/ .el-input-number__increase{
right: 2px !important;
}
.footer{
display: flex;
justify-content: flex-end;
}
</style>
\ No newline at end of file
{
"env": "dev",
"baseUrl": "http://tgoodsadmin.xiaobentiyu.cn",
"baseUrl": "https://test.xiaobentiyu.cn/pxpcapi",
"loginUrl":"http://tgoodsadminh5.xiaobentiyu.cn/login",
"imgUrl":""
}
......@@ -3,44 +3,44 @@
* @eMail: 932055106@qq.com
* @Date: 2022-06-02 15:02:39
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-06 10:03:38
* @LastEditTime: 2022-06-09 15:13:26
-->
<template>
<div>
<c-dialog title="新增学生" ref="c-dialog" width="600px">
<c-dialog :title="`${param.id?'编辑':'新增'}学生`" ref="c-dialog" width="600px">
<el-form ref="ruleForm" :model="param" :rules="rules">
<el-form ref="studentForm" :model="param" :rules="rules">
<el-form-item label="学生姓名" prop="name">
<el-input v-model="param.name" placeholder="请输入学生姓名" style="width:222px"></el-input>
</el-form-item>
<el-form-item label="学生性别" prop="sex">
<el-select v-model="param.sex" placeholder="请选择">
<el-form-item label="学生性别" prop="gender">
<el-select v-model="param.gender" placeholder="请选择">
<el-option label="男" :value="1"></el-option>
<el-option label="女" :value="2"></el-option>
</el-select>
</el-form-item>
<el-form-item label="出生日期" prop="date">
<el-date-picker v-model="param.date" value-format="yyyy-MM-dd" type="date" placeholder="请选择日期"></el-date-picker>
<el-form-item label="出生日期" prop="birthday">
<el-date-picker v-model="param.birthday" value-format="yyyy-MM-dd" type="date" placeholder="请选择日期"></el-date-picker>
</el-form-item>
<el-form-item label="爸爸手机号" prop="tel1">
<el-input v-model="param.tel1" placeholder="请输入手机号" style="width:222px"></el-input>
<el-form-item label="爸爸手机号" prop="fatherPhone">
<el-input v-model="param.fatherPhone" placeholder="请输入手机号" style="width:222px"></el-input>
</el-form-item>
<el-form-item label="妈妈手机号" prop="tel2">
<el-input v-model="param.tel2" placeholder="请输入手机号" style="width:222px"></el-input>
<el-form-item label="妈妈手机号" prop="motherPhone">
<el-input v-model="param.motherPhone" placeholder="请输入手机号" style="width:222px"></el-input>
</el-form-item>
<el-form-item label="其它人手机号" prop="tel3">
<el-input v-model="param.tel3" placeholder="请输入手机号" style="width:222px"></el-input>
<el-form-item label="其它人手机号" prop="otherPhone">
<el-input v-model="param.otherPhone" placeholder="请输入手机号" style="width:222px"></el-input>
</el-form-item>
<el-form-item label="所在校区" prop="schId">
<t-select v-model="param.schId" :ds="{service:'base', func: 'getUserAllSchList'}"></t-select>
</el-form-item>
<!-- <el-form-item label="所在校区" prop="areaId">
<t-select v-model="param.areaId"></t-select>
</el-form-item> -->
<div class="btns">
<el-button type="primary" @click="change">取消</el-button>
<el-button type="primary" @click="onSubmit('ruleForm')">确定</el-button>
<el-button type="primary" @click="onSubmit('studentForm')">确定</el-button>
</div>
</el-form>
</c-dialog>
......@@ -49,31 +49,57 @@
<script>
export default {
services:['student'],
data(){
return{
param: {
name:'',
sex:'',
tel1:'',
tel2:'',
tel3:'',
areaId:''
gender:'',
fatherPhone:'',
motherPhone:'',
otherPhone:'',
schId:''
},
rules:{
name: [
{ required: true, message: '请输入学生姓名', trigger: 'change' }
],
sex:[
gender:[
{ required: true, message: '请选择学生性别', trigger: 'change' }
],
date:[{ required: true, message: '请选择生日日期', trigger: 'change' }],
birthday:[{ required: true, message: '请选择生日日期', trigger: 'change' }],
}
}
},
methods:{
change(){
this.$refs['c-dialog'].change()
},
queryDetail(id){
this.$service.student.queryStudentDetail(id).then(res =>{
let {id,name,birthday,gender,fatherPhone,motherPhone,otherPhone,schId} = res
this.param = {id,name,birthday,gender,fatherPhone,motherPhone,otherPhone,schId}
})
},
onSubmit(){
let that = this
this.$refs.studentForm.validate((valid) => {
if (valid) {
if(!that.param.fatherPhone && !that.param.motherPhone && !that.param.otherPhone){
this.$message.error('至少输入一个手机号')
return
}
let funName = this.param.id ? 'emitStudent' : 'addStudent'
that.$service.student[funName](that.param).then(res =>{
that.$notifySuccess()
setTimeout(() =>{
that.$emit('update')
that.change()
},1500)
})
}
})
}
}
}
......@@ -90,4 +116,7 @@ export default {
/deep/ .el-dialog__body{
padding: 20px 100px;
}
/deep/ .el-form-item__error{
left: 22px !important;
}
</style>
\ No newline at end of file
......@@ -12,7 +12,7 @@
<template v-if="step == 1">
<div class="flex-c project" >
<div class="project-t">下载导入模板:</div>
<div class="download-btn flex-c" @click="downLoadRecord"><i class="iconfont icon-tzjk_icon_daoru2"></i> 下载体质健康导入模板</div>
<div class="download-btn flex-c" @click="downLoadRecord"><i class="iconfont icon-tzjk_icon_daoru2"></i> 点击下载-学生信息导入模板.xls</div>
</div>
<div class="flex-c project">
<div class="project-t">上传导入文件:</div>
......@@ -36,7 +36,7 @@
<div>导入excel样表格式说明</div>
<div>必填字段,学生姓名,性别,出生日期,爸爸手机号或妈妈手机号或其它人手机号三填一。</div>
<div>样表</div>
<!-- <img class="show-table" src="@/static/img/show-table.png" alt=""> -->
<img class="show-table" src="@/assets/images/show-table.png" alt="">
</div>
</template>
<!-- 第二步 -->
......@@ -79,6 +79,7 @@
<script>
export default {
services:['student'],
data(){
return{
step:1,
......@@ -96,7 +97,7 @@ export default {
},
methods:{
downLoadRecord(){
this.$service.physiqueTester.downLoadRecord(param,'质检健康导入模板').then(res =>{
this.$service.student.downLoadRecord('学生信息导入模板').then(res =>{
})
},
......@@ -136,9 +137,10 @@ export default {
checkImportData(){
let formData = new FormData();
formData.append("file", this.file);
formData.append("taskId", this.activeObj.taskId);
this.$service.physiqueTester.recordCheck(formData).then(res =>{
this.$service.student.recordCheck(formData).then(res =>{
let {success= 0 ,error = 0 ,message = []} = res
debugger
this.resultObj = {success,error,message}
this.step =2
})
......
......@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com
* @Date: 2022-02-11 16:54:02
* @LastEditors: tangjiale
* @LastEditTime: 2022-02-18 17:52:34
* @LastEditTime: 2022-06-09 08:45:01
-->
<template>
<div class="page-bg">
......@@ -16,7 +16,7 @@
<script>
export default {
name: "test",
head:{title:'中小学生智慧体育运营平台'},
head:{title:'奔腾宝贝培训学校管理系统'},
data(){
return{
......
......@@ -4,7 +4,7 @@
<!-- <img class="login-logo" src="../assets/images/login-logo.png" alt=""> -->
<div class="banner-bg">
<img src="../assets/images/login-image.png" alt="">
<!-- <img src="../assets/images/login-image.png" alt=""> -->
<!-- <img src="../static/img/login/login-banner1.png" alt=""> -->
</div>
......@@ -27,7 +27,7 @@
<img class="code-img" @click="queryCode" :src="codeUrl" alt="">
</div>
<div class="btn" @click="login">登录</div>
<div class="forget-btn" @click="forgetPw">忘记密码</div>
<!-- <div class="forget-btn" @click="forgetPw">忘记密码</div> -->
</div>
</div>
</template>
......@@ -36,7 +36,7 @@
export default {
name: "login",
services:['base'],
head:{title:'中小学生智慧体育运营平台'},
head:{title:'奔腾宝贝培训学校管理系统'},
data(){
return{
codeUrl:'',
......@@ -58,19 +58,20 @@
//验证码
queryCode(){
this.$service.base.getCode().then(res =>{
let url = JSON.parse(res)
this.codeUrl = "data:image/png;base64," + url
this.codeUrl = "data:image/png;base64," + res
})
},
login(){
if(!this.account || !this.password || !this.inputCode) return
let that = this
this.$service.base.postUserLogin({
account:this.account,
userName:this.account,
password: this.password,
inputCode: this.inputCode,
}).then(res =>{
this.$service.base.getUserInfo(res.token).then(result =>{
debugger
result.token = res.token
this.$store.commit('updateUserInfo', result);
this.$router.push('/');
......
......@@ -3,11 +3,13 @@
* @eMail: 932055106@qq.com
* @Date: 2022-06-02 14:08:46
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-06 08:41:26
* @LastEditTime: 2022-06-09 15:22:07
-->
<template>
<div class="page-bg">
<!-- autoLoad -->
<!-- autoLoad -->
<t-table autoLoad ref="table" :options="options" :params="params"
@row-btn-click="onRowButtonClick">
......@@ -21,7 +23,7 @@
</t-table>
<!-- 新增学校 -->
<add-student ref="add-student"></add-student>
<add-student ref="add-student" @update="updateList"></add-student>
<!-- 导入学生 -->
<c-popup ref="i-popup" title="您正在导入学生数据">
......@@ -34,45 +36,53 @@
import addStudent from './components/add-student.vue'
import importStudent from './components/import-student.vue'
export default {
services:['student','base'],
components:{addStudent,importStudent},
services:['order','base'],
data(){
return{
params:{
regionCode:'',schName:''
},
options: {
title: "订单管理",
search: [{
placeholder: "请输入姓名或手机号 ",field: "productName",type: "text",label: "",
},
title: "学生管理",
search: [
{placeholder: "请输入姓名",field: "name",type: "text",label: ""},
{placeholder: "请输入手机号",field: "phone",type: "text",label: "",},
],
table: {
service: "order", height:(screen.height - (482 * this.$px2rem)),
func: "getOrderPcList",
service: "student", height:(screen.height - (482 * this.$px2rem)),
func: "queryStudentList",
selectable: false,customRow:true,
columns: [
{title: "学生姓名",field: "orderNo",width:'120px',},
{title: "学生姓名",field: "name",width:'120px',},
{
title: "性别",width:'100px',
type: 'customField',
fieldFunction: row => true ? '男' : '女',
fieldFunction: row => row.gender == 1 ? '男' : '女',
},
{
title: "出生日期",type: 'customField',
fieldFunction: row => row.birthday.slice(0,10)
},
{title: "爸爸手机号",field: "fatherPhone"},
{title: "妈妈手机号",field: "motherPhone"},
{title: "其它人手机号",field: "otherPhone"},
{
title: "所在校区",type: 'customField',
fieldFunction: row => (row.schoolList.map(e => e.name)).join(','),
},
{title: "出生日期",field: "orderNo"},
{title: "爸爸手机号",field: "orderNo"},
{title: "妈妈手机号",field: "orderNo"},
{title: "其它人手机号",field: "orderNo"},
{title: "所在校区",field: "orderNo"},
{
title: "操作",
width: "160px",fixed:'right',
type: "buttons",
//orderType 1:智慧体育订单 2移动活动订单 3腾讯同步订单 4 h5天天订单
//如果学生没有关联任何课程,则可以删除;如果有关联课程的记录,则不能删除,删除按钮灰掉。
//canDel 能否删除(1:能,2:不能)
buttons: [
{
name: "修改", event: "emit" ,type:'primary'
},{
name: "删除", event: "delete" ,type:'danger'
name: "删除", event: "delete" ,type:'danger',
controlBtn:function(data){ return data.canDel == 1}
}
],
},
......@@ -82,16 +92,30 @@ export default {
}
},
mounted(){
this.$refs['i-popup'].change()
// this.$refs['i-popup'].change()
},
methods:{
onRowButtonClick(data, i) {
let self = this
let that = this
let {event,row} = data
if(!event) return
switch (event) {
case 'emit': //修改
this.$refs['add-student'].change()
this.$nextTick(() =>{
this.$refs['add-student'].queryDetail(row.id)
})
break
case 'delete': //删除
this.$showConfirm(`是否确认删除${row.name}学生?`).then(() => {
that.$service.student.deleteStudent(row.id).then(res =>{
that.$notifySuccess()
setTimeout(() =>{
that.updateList()
},1500)
})
});
break
}
},
handleOption(type){
......@@ -103,6 +127,9 @@ export default {
this.$refs['i-popup'].change()
break
}
},
updateList(){
this.$refs['table'].reload(true)
}
}
}
......@@ -114,6 +141,9 @@ export default {
background-color: #fff;
padding: 10px 15px;
}
/deep/ .search-form-r{
top: 10px !important;
}
.search-bottom{
width: calc(100% - 2px);
background-color: #fff;
......
......@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com
* @Date: 2022-02-11 09:41:38
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-06 10:26:31
* @LastEditTime: 2022-06-09 14:21:39
*/
import Vue from 'vue';
import Aegis from 'aegis-web-sdk'
......@@ -72,7 +72,7 @@ export default ({store}) => {
if(options.data && options.data.getCode){
return res
}else if(res.code === 200){
return res.data.data || res.data;
return (res.data && res.data.data) || res.data;
}else if(res.code === 401){
Vue.prototype.$confirm('登录已过期,请重新登录', '提示', {
confirmButtonText: '确定',
......
......@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com
* @Date: 2022-02-10 15:24:49
* @LastEditors: tangjiale
* @LastEditTime: 2022-02-16 12:13:34
* @LastEditTime: 2022-06-09 10:25:43
*/
const BEANS = {}; // 存放所有的bean
......
/*
* @Author: tangjiale
* @eMail: 932055106@qq.com
* @Date: 2022-02-16 11:28:42
* @LastEditors: tangjiale
* @LastEditTime: 2022-02-17 09:44:32
*/
export default class AnalysisService extends Service {
//获取学年学期列表
getInYearAndTermList() {
return this.get({
url: "/common/list",
data: {},
}).then((res)=>{
let arr = []
res.forEach(inYearAndTerm =>{
arr.push({
name:inYearAndTerm.schYear+'学年'+(inYearAndTerm.schTerm==0?'上学期':'下学期'),value:inYearAndTerm.schYear+','+inYearAndTerm.schTerm
})
})
arr.unshift({name:'全部',value:''})
return arr
});
}
//获取商品列表
getGoodsList() {
return this.get({
url: "/common/getProductList",
data: {},
}).then((res)=>{
let arr = []
res.forEach(goods =>{
arr.push({
name:goods.productName,value:goods.id
})
})
arr.unshift({name:'全部',value:''})
return arr
});
}
//订单统计列表
getOrderAnalysisList(param) {
if(param.inYearAndTerm){
let inYearAndTermArr=param.inYearAndTerm.split(",")
param.schYear=inYearAndTermArr[0];
param.schTerm=inYearAndTermArr[1];
delete param.inYearAndTerm
}
if(param.regionCode && param.regionCode == 'all') {
param.regionCode = ''
}
return this.get({
url: "/sport/order/report/getOrderReportList",
data: param,
}).then((res) => {
this.get({
url: "/sport/order/report/getOrderCountReportInfo",
data: param,
}).then((response) => {
let obj = {
schName: "合计",
totalPeople:response.totalPeople,
totalStu:response.totalStu,
totalTea:response.totalTea,
orderPeople:response.orderPeople,
goodsNum:response.goodsNum,
orderStu:response.orderStu,
orderTea:response.orderTea,
orderMember:response.orderMember,
changePercent:response.changePercent
};
res.list.push(obj);
});
return res;
});
}
getOrderCountReportInfo(param) {
return this.get({
url: "/sport/order/report/getOrderCountReportInfo",
data: param,
})
}
// 订单统计列表导出
exportOrderAnalysisList(param, fileName) {
if(param.inYearAndTerm){
let inYearAndTermArr=param.inYearAndTerm.split(",")
param.schYear=inYearAndTermArr[0];
param.schTerm=inYearAndTermArr[1];
delete param.inYearAndTerm
}
return this.get({
url: "/sport/order/report/export/getOrderReportList",
downloadFile: {
fileName,
},
data: param,
});
}
}
......@@ -3,14 +3,14 @@
* @eMail: 932055106@qq.com
* @Date: 2022-02-11 10:04:50
* @LastEditors: tangjiale
* @LastEditTime: 2022-02-22 10:01:29
* @LastEditTime: 2022-06-09 11:18:12
*/
export default class BaseService extends Service {
//获取验证码
getCode() {
return this.get({
url: '/user/checkcode', uuid:true,
url: '/user/checkCode', uuid:true,
data: {
getCode:true
}
......@@ -44,7 +44,7 @@ export default class BaseService extends Service {
//切换角色
changeRole(roleId){
return this.get({url: '/user/switch',data:{roleId}})
return this.get({url: '/user/switchRole',data:{roleId}})
}
//用户中心免密登录
......@@ -58,24 +58,25 @@ export default class BaseService extends Service {
//用户菜单列表
getPermissions(){
return this.get({
url: '/permissions/user',
url: '/user/getUserPermissionList',
contentType: 'form',
loadingText: '请求中...',
data:{}
});
}
//获取学校列表
getUserAllSchList(schName){
//获取用户学校列表
getUserAllSchList(){
return this.get({
url: '/common/getUserAllSchList',
data:{schName}
url: '/user/getSchList',
data:{}
}).then(res =>{
let list = []
if(res && res.length){
res.forEach(v =>{
list.push({
value:v.name
name:v.name,
value:v.id
})
})
}
......@@ -83,27 +84,7 @@ export default class BaseService extends Service {
});
}
//物流公司列表
queryExpress(param){
return this.get({
url:'/order/express',
data: param
}).then(res =>{
let list = []
res && res.length && res.forEach(v =>{
list.push({name:v.name,value:v.name})
})
return list
})
}
//修改密码
resetPassword(param){
return this.put({
url:'/user/modify/password',
data: param
})
}
queryList(param){
......
/*
* @Author: tangjiale
* @eMail: 932055106@qq.com
* @Date: 2022-02-11 09:23:35
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-09 11:30:08
*/
import service from '../plugins/framework/core/service'
export default class CourseService extends Service {
queryStudentList(param){
return service.get({
url: '/student',
data: param
})
}
}
/*
* @Author: tangjiale
* @eMail: 932055106@qq.com
* @Date: 2022-02-11 09:23:35
* @LastEditors: tangjiale
* @LastEditTime: 2022-02-17 18:23:31
*/
import service from '../plugins/framework/core/service'
export default class OrderService extends Service {
queryList(param){
return service.get({
url: '/healthy/body/selectOverweightStatus',
data: param
})
}
//获取当前用户省市区列表 code,regionLevel省市区246
getUserOrganList(param){
return this.get({
url: '/common/getUserOrganList',
data: param
})
}
//订单管理列表
getOrderPcList(param){
if(param.regionCode && param.regionCode == 'all') {
param.regionCode = ''
}
return this.get({
url: '/order',
data: param
})
}
//获取用户订单类型列表列表
getSysUserOrderTypeList(){
return this.get({
url:'/common/getSysUserOrderTypeList',
}).then(res =>{
let list = []
let stateName = ['','小奔线上自营订单','移动活动订单','腾讯同步订单','渠道专属运营订单']
if(res && res.length){
res.forEach(v =>{
list.push({
name:stateName[v],value:v
})
})
}
list.unshift({name:'全部',value:''})
return list
})
}
// 订单列表导出
exportOrderList(param,fileName){
return this.get({
url: '/order/export',
downloadFile:{
fileName
},
data: param
})
}
// 订单物流信息excel模版下载
downloadModel(fileName){
return this.get({
url: '/order/model',
downloadFile:{
fileName
}
})
}
//订单详情
queryOrderDetail(id){
return this.get({
url: '/order/detail',
data:{id}
})
}
//商品订单发货
orderDeliver(param){
return this.post({
url: '/order/deliver',
contentType:'form',
data:param
})
}
//取消订单
cancelOrder(id){
return this.post({
url: '/order/canal',
contentType:'form',
data:{id}
})
}
//订单收货
receiveOrder(id){
return this.post({
url: 'order/receive',contentType:'form',
data:{id}
})
}
//订单退款
refundOrder(param){
return this.post({
url: '/order/refund',
contentType:'form',
data:param
})
}
}
/*
* @Author: tangjiale
* @eMail: 932055106@qq.com
* @Date: 2022-02-11 09:23:35
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-09 15:12:00
*/
export default class StudentService extends Service {
queryStudentList(param){
return this.get({
url: '/student',
data: param
})
}
//新增学生
addStudent(param){
return this.post({
url: '/student',
data: param
})
}
//编辑学生
emitStudent(param){
return this.put({
url: '/student',
data: param
})
}
//学生详情
queryStudentDetail(id){
return this.get({
url: `/student/${id}/`,
data: {}
})
}
//删除学生
deleteStudent(id){
return this.delete({
url: `/student/${id}`
})
}
//学生导入模版下载
downLoadRecord(fileName){
return this.get({
url: '/student/model',
downloadFile:{
fileName:fileName,
},
data: {}
})
}
//学生导入校验
recordCheck(param){
return this.post({
url: '/student/checkImportStu',
// contentType:'form',
data: param
})
}
}
......@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com
* @Date: 2022-02-11 15:54:33
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-06 10:26:07
* @LastEditTime: 2022-06-09 11:03:11
*/
import Vue from 'vue'
//配置对象
......@@ -19,7 +19,7 @@ export default {
//历史路由
historyRoute:[
{name:'首页',url:'/'}
{menuName:'首页',menuUrl:'/'}
],
}),
mutations: {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment