Commit d581efe6 authored by 罗超's avatar 罗超

Merge branch 'master' of http://gitlab.oytour.com/luochao/confucius into master

parents 31fb011b 2c152201
...@@ -152,4 +152,41 @@ export function GetMyEducationContractPageList(data) { ...@@ -152,4 +152,41 @@ export function GetMyEducationContractPageList(data) {
method: 'post', method: 'post',
data data
}) })
} }
\ No newline at end of file
/**
* 获取退课协议管理列表
*
*/
export function GetBackClassProtocolPage(data) {
return request({
url: '/EducationContract/GetBackClassProtocolPage',
method: 'post',
data
})
}
/**
* 获取退课详情
*
*/
export function GetBackClassProtocol(data) {
return request({
url: '/EducationContract/GetBackClassProtocol',
method: 'post',
data
})
}
/**
* 获取签字
*
*/
export function SetBackClassProtocolSign(data) {
return request({
url: '/EducationContract/SetBackClassProtocolSign',
method: 'post',
data
})
}
import request from '../../utils/request'
/**
* 获取网站导航分页
*
*/
export function getWeChatConfigInfo(data) {
return request({
url: '/QYWeChat/GetWeChatConfigInfo',
method: 'post',
data
})
}
/**
* 获取网站导航分页
*
*/
export function setWeChatConfig(data) {
return request({
url: '/QYWeChat/SetWeChatConfig',
method: 'post',
data
})
}
/**
* 初始化 同步部门至企业微信
*
*/
export function setSyncEduDepartment(data) {
return request({
url: '/QYWeChat/SetSyncEduDepartment',
method: 'post',
data
})
}
/**
* 初始化 同步员工至企业微信
*
*/
export function SetSynvEduEmployee(data) {
return request({
url: '/QYWeChat/SetSynvEduEmployee',
method: 'post',
data
})
}
\ No newline at end of file
<template>
<div class="page-content">
<q-table :pagination="pageMsg" :loading="loading" no-data-label="暂无相关数据" flat class="sticky-column-table"
separator="none" title="退课协议" :data="dataList" :columns="columns" row-key="name">
<template v-slot:top="props">
<div class="col-2 q-table__title">退课协议</div>
<q-space />
<div class="page-option"></div>
</template>
<template v-slot:body-cell-CreateByName="props">
<q-td :props="props">
<q-avatar rounded size="sm" v-if="props.row.CreateByPhoto">
<img :src="props.row.CreateByPhoto" />
</q-avatar>
<q-avatar rounded size="sm" color="teal-10" text-color="white" v-if="!props.row.CreateByPhoto">
{{ props.value.substring(0, 1) }}</q-avatar>
{{ props.row.CreateByName }}
</q-td>
</template>
<template v-slot:body-cell-StudentName="props">
<q-td auto-width :props="props">
<span v-if="props.row.Sign" style="color: #67c23a">【已签字】</span>
<span v-else style="color: #e95252">【未签字】</span>
{{ props.row.StudentName }}
</q-td>
</template>
<template v-slot:body-cell-AuditStatus="props">
<q-td auto-width :props="props">
<span v-if="props.row.AuditStatus == 1||props.row.AuditStatus == 0" style="color: #409eff">审核中</span>
<span v-if="props.row.AuditStatus == 2" style="color: #67c23a">{{props.row.AuditStatusStr}}</span>
<span v-if="props.row.AuditStatus == 3" style="color: #f56c6c">驳回</span>
</q-td>
</template>
<template v-slot:body-cell-IsCompanySeal="props">
<q-td auto-width :props="props">
<span v-if="props.row.IsCompanySeal == 0" style="color: #e95252">未盖章</span>
<span v-if="props.row.IsCompanySeal == 1" style="color: #67c23a">已盖章</span>
</q-td>
</template>
<template v-slot:bottom>
</template>
<template v-slot:body-cell-optioned="props">
<q-td :props="props">
<div>
<el-tooltip content="复制链接发送给客人签字" placement="top" effect="light">
<q-btn flat v-if="
props.row.AuditStatus == 2 &&
(props.row.PartyASign == '' || props.row.PartyASign == null)" size="xs"
icon="iconfont icon-qianming" color="accent" style="font-weight: 400" @click="CopyUrl(props.row)"
label="获取合同链接" />
</el-tooltip>
<q-btn flat size="xs" icon="iconfont icon-View" color="accent" @click="goContract(props.row.Id)"
style="font-weight: 400" label="查看" />
</div>
</q-td>
</template>
</q-table>
</div>
</template>
<script>
export default {
props: {
dataList: {
type: Array,
default: null
},
loading: {
type: Boolean,
default: null
}
},
data() {
return {
columns: [{
name: "ProtocolNum",
label: "协议编号",
align: "left",
field: "ProtocolNum",
},
{
name: "PartyAName",
label: "学生名称",
field: "PartyAName",
align: "left",
},
{
name: "OldCourseName",
label: "课程名称",
align: "left",
field: "OldCourseName",
},
{
name: "CreateByName",
label: "创建人",
align: "left",
field: "CreateByName",
},
{
name: "CreateTimeStr",
label: "创建时间",
align: "left",
field: "CreateTimeStr",
},
{
name: "ReceiptId",
label: "关联退课申请单",
align: "left",
field: "ReceiptId",
},
{
name: "AuditStatus",
label: "审核状态",
align: "left",
field: "AuditStatus"
},
{
name: "IsCompanySeal",
label: "是否盖章",
align: "left",
field: "Status",
},
{
name: "optioned",
label: "操作",
field: "RoomId",
},
],
pageMsg: {
rowsPerPage: 12,
},
}
},
created() {
},
mounted() {},
methods: {
//跳转至详情
goContract(Id) {
this.OpenNewUrl('/courseRefund', {
Id: Id
})
},
//复制URL
CopyUrl(item) {
var oInput = document.createElement("input");
var url = window.location.host;
oInput.value = url + "/#/courseRefundH5" + `?Id=${item.Id}`;
document.body.appendChild(oInput);
oInput.select(); // 选择对象
document.execCommand("Copy"); // 执行浏览器复制命令
oInput.className = "oInput";
oInput.style.display = "none";
this.Info("复制成功!");
}
}
}
</script>
...@@ -160,7 +160,7 @@ ...@@ -160,7 +160,7 @@
</span> </span>
</div> </div>
</div> </div>
<div class="row" style="margin-top:20px;display:none;"> <div class="row" style="margin-top:20px;">
<div class="col-6 q-pr-lg"> <div class="col-6 q-pr-lg">
<q-input filled v-model="BackAccountName" label="退还账户名"></q-input> <q-input filled v-model="BackAccountName" label="退还账户名"></q-input>
</div> </div>
...@@ -170,8 +170,8 @@ ...@@ -170,8 +170,8 @@
</div> </div>
<q-input filled stack-label :dense="false" v-model="applyReason" style="margin-top: 20px" type="textarea" <q-input filled stack-label :dense="false" v-model="applyReason" style="margin-top: 20px" type="textarea"
class="col-12" label="申请理由" /> class="col-12" label="申请理由" />
<q-input filled stack-label :dense="false" v-model="StateMent" style="margin-top: 20px;display:none" type="textarea" <q-input filled stack-label :dense="false" v-model="StateMent" style="margin-top: 20px;" type="textarea"
class="col-12" label="协议申明" /> class="col-12" label="协议申明(在退课协议中显示)" />
<div class="row"> <div class="row">
<div class="col-12 q-mt-md text-grey-6"> <div class="col-12 q-mt-md text-grey-6">
上传附件:<span class="fj-tip" style="font-size: 10px; color: #f00">*单文件限制5M内</span> 上传附件:<span class="fj-tip" style="font-size: 10px; color: #f00">*单文件限制5M内</span>
...@@ -338,9 +338,10 @@ ...@@ -338,9 +338,10 @@
picIsShow: false, picIsShow: false,
picObj: [], picObj: [],
initialIndex: 0, initialIndex: 0,
BackAccountName: '工行', //退还户名
BackAccount: '123', //退还账户 BackAccountName: '', //退还户名
StateMent:'我是协议' //协议申明 BackAccount: '', //退还账户
StateMent: '' //协议申明
}; };
}, },
created() { created() {
...@@ -440,7 +441,6 @@ ...@@ -440,7 +441,6 @@
// 预览上传文件 // 预览上传文件
if (i.Type == 3) { if (i.Type == 3) {
this.picObj.push(i.Url); this.picObj.push(i.Url);
// this.imgList.push(i.Url)
this.picIsShow = true; this.picIsShow = true;
} else { } else {
if ( if (
......
...@@ -74,9 +74,9 @@ ...@@ -74,9 +74,9 @@
<q-select :disable="modityOrderType==2" standout="bg-primary text-white" option-value="Id" option-label="Name" <q-select :disable="modityOrderType==2" standout="bg-primary text-white" option-value="Id" option-label="Name"
v-model="OrderMsg.OrderSource" :options="SourceEnumList" emit-value map-options class="q-pb-lg" v-model="OrderMsg.OrderSource" :options="SourceEnumList" emit-value map-options class="q-pb-lg"
label="客人来源" /> label="客人来源" />
<q-select :disable="(modityOrderType==2)||(OrderMsg.JoinType==3)" v-model="OrderMsg.HelpEnterId" :options="EmployeeList" filled <q-select :disable="(modityOrderType==2)||(OrderMsg.JoinType==3)" v-model="OrderMsg.HelpEnterId"
use-input label="协助老师" option-label="EmployeeName" option-value="Id" ref="EmployeeName" class="col-6 q-pb-lg" :options="EmployeeList" filled use-input label="协助老师" option-label="EmployeeName" option-value="Id"
emit-value map-options @filter="filterFn"> ref="EmployeeName" class="col-6 q-pb-lg" emit-value map-options @filter="filterFn">
<template v-slot:no-option> <template v-slot:no-option>
<q-item> <q-item>
<q-item-section class="text-grey"> <q-item-section class="text-grey">
...@@ -172,7 +172,7 @@ ...@@ -172,7 +172,7 @@
StartClassHours: 0, //已上课时 StartClassHours: 0, //已上课时
EffectTime: '', //生效时间 EffectTime: '', //生效时间
UpOrderId: 0, //前置订单编号 UpOrderId: 0, //前置订单编号
JoinType:1,//订单报入类型 JoinType: 1, //订单报入类型
}, },
IsShowUpPrice: false, //是否显示高于定价 IsShowUpPrice: false, //是否显示高于定价
UnitPrice: 0, UnitPrice: 0,
...@@ -302,7 +302,7 @@ ...@@ -302,7 +302,7 @@
this.OrderMsg.OrderNature = tempData.OrderNature; this.OrderMsg.OrderNature = tempData.OrderNature;
this.OrderMsg.OldPreferPrice = tempData.OldPreferPrice; this.OrderMsg.OldPreferPrice = tempData.OldPreferPrice;
this.OrderMsg.CourseId = tempData.CourseId; this.OrderMsg.CourseId = tempData.CourseId;
this.OrderMsg.JoinType=tempData.JoinType; this.OrderMsg.JoinType = tempData.JoinType;
this.OrderMsg.StartClassHours = tempData.StartClassHours; this.OrderMsg.StartClassHours = tempData.StartClassHours;
this.OrderMsg.IsChaBan = tempData.IsChaBan; this.OrderMsg.IsChaBan = tempData.IsChaBan;
this.OrderMsg.EffectTime = tempData.EffectTime; this.OrderMsg.EffectTime = tempData.EffectTime;
...@@ -326,7 +326,7 @@ ...@@ -326,7 +326,7 @@
this.OrderMsg.IsChaBan = this.isChaBan; this.OrderMsg.IsChaBan = this.isChaBan;
this.OrderMsg.EffectTime = ""; this.OrderMsg.EffectTime = "";
this.OrderMsg.UpOrderId = 0; this.OrderMsg.UpOrderId = 0;
this.OrderMsg.JoinType=1; this.OrderMsg.JoinType = 1;
this.OrderMsg.OrderType = this.orderType; this.OrderMsg.OrderType = this.orderType;
if (this.OrderMsg.OrderType == 2) { if (this.OrderMsg.OrderType == 2) {
this.OrderMsg.OrderNature = 1; this.OrderMsg.OrderNature = 1;
......
...@@ -728,10 +728,10 @@ ...@@ -728,10 +728,10 @@
}) })
}, },
approvalOrder(num){ approvalOrder(num){
if(this.GetDetail.Is_AuditSelf==1){ // if(this.GetDetail.Is_AuditSelf==1){
this.Error("制单人跟审核人不能相同哟,请转交!"); // this.Error("制单人跟审核人不能相同哟,请转交!");
return; // return;
} // }
if(this.needSign){ if(this.needSign){
if(this.addMsg.SignImage==""){ if(this.addMsg.SignImage==""){
this.Error("请签名!"); this.Error("请签名!");
......
...@@ -739,10 +739,10 @@ import { ...@@ -739,10 +739,10 @@ import {
}) })
}, },
approvalOrder(num){ approvalOrder(num){
if(this.GetDetail.Is_AuditSelf==1){ // if(this.GetDetail.Is_AuditSelf==1){
this.Error("制单人跟审核人不能相同哟,请转交!"); // this.Error("制单人跟审核人不能相同哟,请转交!");
return; // return;
} // }
if(this.needSign){ if(this.needSign){
if(this.addMsg.SignImage==""){ if(this.addMsg.SignImage==""){
this.Error("请签名!"); this.Error("请签名!");
......
<style>
</style>
<template> <template>
<div> <div class="page-body">
退学协议管理 <div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<q-input @change="resetSearch" clearable standout="bg-primary text-white" v-model="msg.QOrderId" label="订单编号"
@clear="resetSearch" maxlength="30" />
</div>
<div class="col-3">
<q-select @input="resetSearch" standout="bg-primary text-white" v-model="msg.AuditStatus"
:options="StatusOpts" option-value="Id" option-label="Name" label="状态" emit-value map-options />
</div>
<div class="col-3">
<q-input @change="resetSearch" clearable standout="bg-primary text-white" v-model="msg.ProtocolNum"
label="合同编号" @clear="resetSearch" maxlength="30" />
</div>
<div class="col-3">
<q-input @change="resetSearch" clearable standout="bg-primary text-white" v-model="msg.PartyAName"
label="学生姓名" @clear="resetSearch" maxlength="30" />
</div>
</div>
</div> </div>
</template> <courserefund-form :loading="loading" :dataList="dataList"></courserefund-form>
\ No newline at end of file <q-pagination class="full-width justify-end" v-model="msg.pageIndex" color="primary" :max="pageCount" :input="true"
@input="changePage" />
</div>
</template>
<script>
import {
GetBackClassProtocolPage
} from "../../api/sale/contract";
import courserefundForm from "../../components/course/courserefund-form"
export default {
meta: {
title: "退课协议管理",
},
components: {
courserefundForm
},
data() {
return {
loading: true,
msg: {
pageIndex: 1,
pageSize: 12,
PartyAName: '',
AuditStatus: -1,
QOrderId: '',
ProtocolNum: '',
IsQueryAll: 1
},
pageCount: 0,
dataList: [],
//状态下拉
StatusOpts: [{
Id: -1,
Name: "不限",
},
{
Id: 1,
Name: "审核中",
},
{
Id: 2,
Name: "审核通过",
},
{
Id: 3,
Name: "驳回",
},
],
};
},
created() {
},
mounted() {
this.getList();
},
methods: {
//获取校区列表
getList() {
this.loading = true;
GetBackClassProtocolPage(this.msg).then((res) => {
this.loading = false;
if (res.Code == 1) {
this.dataList = res.Data.PageData;
this.pageCount = res.Data.PageCount;
}
});
},
//重新查询
resetSearch() {
this.msg.pageIndex = 1;
this.getList();
},
//分页改变
changePage(val) {
this.msg.pageIndex = val;
this.getList();
}
},
};
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
...@@ -28,18 +28,21 @@ ...@@ -28,18 +28,21 @@
justify-content: space-around; justify-content: space-around;
align-items: center; align-items: center;
} }
.signature .icoDicv{
width:40px; .signature .icoDicv {
height:40px; width: 40px;
height: 40px;
background: gray; background: gray;
border-radius: 50%; border-radius: 50%;
color:#fff; color: #fff;
text-align: center; text-align: center;
line-height: 40px; line-height: 40px;
} }
.signature .icoDicv i{
font-size:25px; .signature .icoDicv i {
font-size: 25px;
} }
</style> </style>
<template> <template>
<div class="signature" @touchmove.prevent> <div class="signature" @touchmove.prevent>
...@@ -70,7 +73,8 @@ ...@@ -70,7 +73,8 @@
</template> </template>
<script> <script>
import { import {
SetEducationContractSign SetEducationContractSign,
SetBackClassProtocolSign
} from '../api/sale/contract' } from '../api/sale/contract'
export default { export default {
data() { data() {
...@@ -83,11 +87,15 @@ ...@@ -83,11 +87,15 @@
y: 0, y: 0,
}, },
moving: false, // 是否正在绘制中且移动 moving: false, // 是否正在绘制中且移动
msg:{ msg: {
ContractId: 0, ContractId: 0,
Sign:'' Sign: ''
}, },
Money:0 Money: 0,
Type: 1, //1为电子合同签字 2为退课协议签字
BackMsg: {
Id: 0
}
}; };
}, },
mounted() { mounted() {
...@@ -100,10 +108,15 @@ ...@@ -100,10 +108,15 @@
if (this.$route.query.ContractId) { if (this.$route.query.ContractId) {
this.msg.ContractId = this.$route.query.ContractId; this.msg.ContractId = this.$route.query.ContractId;
} }
if (this.$route.query.Money){ if (this.$route.query.Money) {
this.Money = this.$route.query.Money; this.Money = this.$route.query.Money;
} }
if (this.$route.query.Id) {
this.BackMsg.Id = this.$route.query.Id;
}
if (this.$route.query.Type) {
this.Type = this.$route.query.Type;
}
}, },
methods: { methods: {
// 触摸(开始) // 触摸(开始)
...@@ -214,24 +227,45 @@ ...@@ -214,24 +227,45 @@
}, },
//提交数据 //提交数据
SaveMsg() { SaveMsg() {
SetEducationContractSign(this.msg).then(res => { if (this.Type == 1) {
if (res.Code == 1) { SetEducationContractSign(this.msg).then(res => {
this.$q.notify({ if (res.Code == 1) {
icon: 'iconfont icon-chenggong', this.$q.notify({
color: 'accent', icon: 'iconfont icon-chenggong',
timeout: 2000, color: 'accent',
message: '保存成功!', timeout: 2000,
position: 'top' message: '保存成功!',
}) position: 'top'
this.$router.push({ })
path: '/contractPay', this.$router.push({
query: { path: '/contractPay',
contractId: this.msg.ContractId, query: {
Money: this.Money contractId: this.msg.ContractId,
} Money: this.Money
}); }
} });
}) }
})
}
if(this.Type == 2){
SetBackClassProtocolSign(this.BackMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '保存成功!',
position: 'top'
})
this.$router.push({
path: '/courseRefundH5',
query: {
Id: this.BackMsg.Id,
}
});
}
})
}
}, },
//base64转Blob //base64转Blob
...@@ -258,12 +292,21 @@ ...@@ -258,12 +292,21 @@
}, },
//返回上一级 //返回上一级
goback() { goback() {
this.$router.push({ if(this.Type==1){
path: '/contractConfirm', this.$router.push({
query: { path: '/contractConfirm',
ContractId: this.msg.ContractId query: {
} ContractId: this.msg.ContractId
}); }
});
}else{
this.$router.push({
path: '/courseRefundH5',
query: {
Id: this.BackMsg.Id
}
});
}
}, },
}, },
}; };
......
...@@ -29,19 +29,22 @@ ...@@ -29,19 +29,22 @@
.TuiContract { .TuiContract {
position: absolute; position: absolute;
bottom: 28px; bottom: 28px;
right: 130px; right: 70px;
} }
.Tui_Jiafang{
display:flex; .Tui_Jiafang {
font-size:20px; display: flex;
margin-bottom:20px; font-size: 20px;
margin-bottom: 20px;
} }
.Tui_Inner{
.Tui_Inner {
text-indent: 40px; text-indent: 40px;
font-size:20px; font-size: 20px;
line-height: 35px; line-height: 35px;
margin-bottom:10px; margin-bottom: 10px;
} }
.TuitractInput { .TuitractInput {
border: 0; border: 0;
display: inline-block; display: inline-block;
...@@ -51,82 +54,146 @@ ...@@ -51,82 +54,146 @@
text-align: center; text-align: center;
text-indent: 0; text-indent: 0;
} }
.Tui_SignZhang{
.Tui_SignZhang {
display: flex; display: flex;
font-size:20px; font-size: 20px;
justify-content: space-between; justify-content: space-between;
margin-bottom:20px; margin-bottom: 20px;
} }
</style> </style>
<template> <template>
<div class="TuitractView"> <div class="TuitractView">
<div class="firstPage"> <div class="firstPage">
<div class="operationTitle"> <div class="operationTitle">
<div class="operationAgree">培训课程退款协议</div> <div class="operationAgree">培训课程退款协议</div>
<div class="TuiContract">合约编号:123</div> <div class="TuiContract">合约编号:{{dataList.ProtocolNum}}</div>
</div> </div>
<div class="Tui_Jiafang"> <div class="Tui_Jiafang">
<div style="margin-right:100px;">甲方:</div> <div style="margin-right:100px;">甲方:{{dataList.PartyAName}}</div>
<div>(家长/监护人):</div> <div>(家长/监护人):{{dataList.PartyAGuardian}}</div>
</div> </div>
<div class="Tui_Jiafang"> <div class="Tui_Jiafang">
<div style="margin-right:150px;">乙方:</div> <div style="margin-right:150px;">乙方:{{dataList.PartyBName}}</div>
<div>法定代表人:</div> <div>法定代表人:{{dataList.PartyBLegal}}</div>
</div> </div>
<div class="Tui_Inner"> <div class="Tui_Inner">
甲乙双方经平等友好协商就 <div class="TuitractInput" style="width: 90px;">1988</div> 甲乙双方经平等友好协商就 <div class="TuitractInput" style="width: 90px;">{{getData(dataList.CreateTimeStr,1)}}</div>
<div class="TuitractInput" style="width: 80px;">12</div><div class="TuitractInput" style="width: 80px;">12</div> <div class="TuitractInput" style="width: 80px;">{{getData(dataList.CreateTimeStr,2)}}</div>
<div class="TuitractInput" style="width: 80px;">{{getData(dataList.CreateTimeStr,3)}}</div>
签订的《培训课程协议》解除合作关系。 签订的《培训课程协议》解除合作关系。
</div> </div>
<div class="Tui_Inner">第一条:原协议内容</div> <div class="Tui_Inner">第一条:原协议内容</div>
<div class="Tui_Inner"> <div class="Tui_Inner">
原协议报名人员:<div class="TuitractInput" style="width: 300px;">1988</div> 原协议报名人员:<div class="TuitractInput" style="width: 300px;">{{dataList.OldSaleMan}}</div>
</div> </div>
<div class="Tui_Inner"> <div class="Tui_Inner">
原报名项目:<div class="TuitractInput" style="width: 300px;">1988</div> 原报名项目:<div class="TuitractInput" style="width: 300px;">{{dataList.CNMoneyStr}}</div>
</div> </div>
<div class="Tui_Inner"> <div class="Tui_Inner">
原报名项目原价:<div class="TuitractInput" style="width: 100px;">1988</div> 原报名项目原价:<div class="TuitractInput" style="width: 100px;">{{dataList.OldSellPrice}}</div>
折后(优惠)价:<div class="TuitractInput" style="width: 100px;">1988</div> 折后(优惠)价:<div class="TuitractInput" style="width: 100px;">{{dataList.OldDiscountMoney}}</div>
</div> </div>
<div class="Tui_Inner"> <div class="Tui_Inner">
原协议已收学费:<div class="TuitractInput" style="width: 300px;text-align:left;"> 原协议已收学费:<div class="TuitractInput" style="width: 300px;text-align:left;">
大写: 大写:{{dataList.OldIncomeStr}}
</div> </div>
(¥<div class="TuitractInput" style="width: 100px;">12</div>元整)。 (¥<div class="TuitractInput" style="width: 100px;">{{dataList.OldIncome}}</div>元整)。
</div> </div>
<div class="Tui_Inner"> <div class="Tui_Inner">
原收据编号:<div class="TuitractInput" style="width: 150px;"></div> 原收据编号:<div class="TuitractInput" style="width: 150px;">{{dataList.OldFinaceNum}}</div>
</div> </div>
<div class="Tui_Inner"> <div class="Tui_Inner">
原收款人:<div class="TuitractInput" style="width: 150px;"></div> 原收款人:<div class="TuitractInput" style="width: 150px;">{{dataList.OldReceiveMan}}</div>
</div> </div>
<div class="Tui_Inner"> <div class="Tui_Inner">
第二条:乙方共计课时<div class="TuitractInput" style="width: 80px;"></div>节;已销课时 第二条:乙方共计课时<div class="TuitractInput" style="width: 80px;">{{dataList.TotalClassHours}}</div>节;已销课时
<div class="TuitractInput" style="width: 80px;"></div>节:剩余课时 <div class="TuitractInput" style="width: 80px;">{{dataList.CompleteHours}}</div>节:剩余课时
<div class="TuitractInput" style="width: 80px;"></div> <div class="TuitractInput" style="width: 80px;">{{dataList.SurplusHours}}</div>
</div> </div>
<div class="Tui_Inner"> <div class="Tui_Inner">
甲方应退还乙方未上课时费用<div class="TuitractInput" style="width: 200px;">五千六百八十元整</div> 甲方应退还乙方未上课时费用<div class="TuitractInput" style="width: 200px;">{{dataList.CNMoneyStr}}</div>
(¥<div class="TuitractInput" style="width: 80px;"></div>元整),原协 (¥<div class="TuitractInput" style="width: 150px;">{{dataList.BackMoney}}</div>),原协
议自动终止、收据自动失效。退还帐户名<div class="TuitractInput" style="width: 200px;"></div>,退还帐号:<div class="TuitractInput" style="width: 300px;"></div> 议自动终止、收据自动失效。退还帐户名<div class="TuitractInput" style="width: 200px;">{{dataList.BackAccountName}}</div>,退还帐号:<div class="TuitractInput"
style="width: 200px;">{{dataList.BackAccount}}</div>
退还学费=乙方已缴总学费-已上课程学费-(乙方已缴学费-已上课程学费)*10%,其中“(乙方已缴课程学费)*10%”为违约金。 退还学费=乙方已缴总学费-已上课程学费-(乙方已缴学费-已上课程学费)*10%,其中“(乙方已缴课程学费)*10%”为违约金。
</div> </div>
<div class="Tui_Inner"> <div class="Tui_Inner">
第三条:乙方应将原协议和收据原件交还甲方,若原件无法交还,请乙方<br/>在此声明: 第三条:乙方应将原协议和收据原件交还甲方,若原件无法交还,请乙方<br />在此声明:
<div class="TuitractInput" style="width: 300px;"></div> <div class="TuitractInput" style="width: 750px;">{{dataList.StateMent}}</div>
</div> </div>
<div class="Tui_Inner"> <div class="Tui_Inner">
第四条:本协议自签订之日起正式生效。 第四条:本协议自签订之日起正式生效。
</div> </div>
<div class="Tui_SignZhang"> <div class="Tui_SignZhang">
<div>甲方(家长/监护人)签字(盖章): </div> <div>甲方(家长/监护人)签字(盖章): {{dataList.PartyASign}}</div>
<div>甲方(家长/监护人)签字(盖章): </div> <div>乙方签字(盖章):{{dataList.PartyBSign}}</div>
</div> </div>
<div class="Tui_SignZhang"> <div class="Tui_SignZhang">
<div>签署日期:</div> <div>签署日期:{{dataList.PartyASignDate}}</div>
<div>签署日期:</div> <div>签署日期:{{dataList.PartyBSignDate}}</div>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script>
import {
GetBackClassProtocol
} from "../api/sale/contract";
export default {
meta: {
title: "退课协议管理",
},
data() {
return {
msg: {
Id: 0
},
dataList: {},
};
},
created() {
},
mounted() {
if(this.$route.query.Id){
this.msg.Id = this.$route.query.Id;
}
this.getList();
},
methods: {
//获取校区列表
getList() {
this.loading = true;
GetBackClassProtocol(this.msg).then((res) => {
this.loading = false;
if (res.Code == 1) {
this.dataList = res.Data;
console.log(this.dataList, "this.dataList ");
}
});
},
//获取日期
getData(dateStr,type){
if(dateStr){
let timeOne = dateStr.split(' ')[0];
let Year = timeOne.split('-')[0];
let Month = timeOne.split('-')[1];
let day = timeOne.split('-')[2];
if(type==1){
return Year
}
if(type==2){
return Month
}
if(type==3){
return day
}
}
}
},
};
</script>
This diff is collapsed.
<style>
@import "../financial/css/cssReset.css";
.addwelcome {
justify-content: space-between;
}
.addwelcome .box_l {
width: 400px;
border-radius: 6px;
margin-right: 15px;
background: #fff;
}
.addwelcome .boxl_title {
width: 100%;
height: 56px;
display: flex;
align-items: center;
border-bottom: 1px solid #e8e8e8;
}
.addwelcome .box_r {
width: 1px;
flex: 1;
border-radius: 6px;
background: #fff;
padding: 20px;
}
</style>
<template>
<div class="addwelcome page-body row" style="background: transparent;">
<div class="box_l">
<div class="boxl_title">
<span style="margin-left:24px ;color: rgba(0,0,0,.85); font-weight: 500; font-size: 16px;">客户账号</span>
</div>
</div>
<div class="box_r">
<el-form ref="addMsg" :model="addMsg" label-width="120px">
<el-form-item label="企业微信成员:">
<el-radio-group v-model="addMsg.membertype">
<el-radio :label="1">通用</el-radio>
<el-radio :label="2">指定企业成员</el-radio>
</el-radio-group>
<el-button size="small" style="margin-left: 20px;" v-if="addMsg.membertype==2" @click='getMember'>
选择成员</el-button>
<span v-if="addMsg.ryList.length>0" style="margin-left: 15px;">已选择{{addMsg.ryList.length}}名成员</span>
<span v-if="addMsg.ryList.length>0" style="cursor: pointer;color: #1890ff;margin-left: 15px;"
@click='addMsg.ryList =[],showMember=[]'>重置</span>
</el-form-item>
<el-form-item label="文本内容:">
<el-input type="textarea" placeholder="请输入内容" v-model="addMsg.Content" style="width: 60%;" :rows="4"></el-input>
<div>
<el-button size="small" @click='insert'>+插入客户名称</el-button>
</div>
</el-form-item>
<el-form-item label="添加内容:">
<el-tooltip placement="top">
<div slot="content">
<div style="display: flex;align-items: center;"></div>
</div>
<el-button size="small" >+添加图片/图文/小程序</el-button>
</el-tooltip>
</el-form-item>
</el-form>
</div>
<!-- 人员选择 -->
<el-dialog custom-class='w700' title="选择人员" :visible.sync="outerVisible" center>
<div class="fl" style="width: 300px; margin: 0 20px;">
<p style="margin: 0 0 10px 0;">选择: <el-input class='w200' placeholder="输入关键字进行过滤" v-model="filterText">
</el-input>
</p>
<el-tree class='ApprovalProcessBg' :data="memberList" show-checkbox :filter-node-method="filterNode"
ref="tree" :props="defaultProps" :render-after-expand="false" node-key="Id"
:check-on-click-node="true" @check-change="handleNodeChange">
</el-tree>
</div>
<div class="fl">
<p style="margin: 0 0 20px 0;">已选:</p>
<div class="Approval_yxList">
<li v-for="(item,index) in showMember">{{item.EmployeeName}}
<i @click="mySetCheckedKeys(item.Id,index)" class="el-icon-circle-close showMemberIcon"></i>
</li>
</div>
</div>
<div slot="footer" class="dialog-footer">
<button class="hollowFixedBtn" @click="outerVisible = false">取消</button> &nbsp;
<button class="normalBtn" type="primary" @click="getmember">确实</button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
queryEmployee
} from '../../api/users/user'
export default {
meta: {
title: "欢迎语编辑"
},
name: "welcomeList",
data() {
return {
loading: false,
outerVisible: false,//选择人员弹窗
filterText: '',//人员选择 帅选
memberList: [],//
showMember: [],
addMsg: {
membertype: 1,
ryList: [],
Content:"",
},
defaultProps: {
children: 'ChildList',
label: 'EmployeeName',
},
}
},
created() {
},
methods: {
getMember() {
this.outerVisible = true;
this.dialogTitle = this.$t('fnc.xzrenyuan');
queryEmployee({}).then(res => {
if (res.Code == 1) {
this.memberList = res.Data;
}
}).catch(() => {
})
var arr = [];
this.showMember.forEach(x => {
arr.push(x.Id);
})
if (this.$refs.tree) {
this.$refs.tree.setCheckedKeys(arr);
}
},
mySetCheckedKeys(id, index) {
var arr = [];
this.showMember.splice(index, 1);
this.showMember.forEach(x => {
arr.push(x.Id);
})
if (this.$refs.tree) {
this.$refs.tree.setCheckedKeys(arr);
}
},
handleNodeChange(data, checked) {
data.IsCheck = checked;
let res = this.$refs.tree.getCheckedNodes(true, true);
this.showMember = [];
res.forEach(x => {
var obj = {
EmployeeName: x.EmployeeName,
Id: x.Id
}
this.showMember.push(obj)
})
},
filterNode(value, data) {
if (!value) return true;
return data.DepartmentName.indexOf(value) !== -1;
},
getmember() {//人员确定选择
this.outerVisible = false;
this.addMsg.ryList = JSON.parse(JSON.stringify(this.showMember))
},
insert(){
this.addMsg.Content= this.addMsg.Content+'##客户名称##'
}
}
}
</script>
\ No newline at end of file
<template>
<div class="welcomeList page-body">
<!-- <div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
</div>
</div> -->
<div class="page-content">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat class="sticky-column-table"
separator="none" title="" :data="data" :columns="columns" row-key="name">
<template v-slot:top="props">
<div class="col-2 q-table__title">欢迎语列表</div>
<q-space />
<q-btn color="accent" style="float:right;margin-right:0;" size="sm" class="q-mr-md" icon="add"
label="新增欢迎语" @click="goadd()"></q-btn>
</template>
<template v-slot:body-cell-Type="props">
<q-td :props="props">
<span v-if="props.row.Type==1">图文</span>
<span v-if="props.row.Type==2">图片</span>
</q-td>
</template>
<template v-slot:body-cell-Content="props">
<q-td :props="props">
<div style="max-width: 800px;white-space: normal;">
{{props.row.Content}}
</div>
</q-td>
</template>
<template v-slot:body-cell-optioned="props">
<q-td :props="props">
<q-btn flat size="xs" icon="edit" style="font-weight:400;color: #3FC4FF" class="q-mr-xs"
label="编辑" @click="goDetailed(props.row,'0')" />
<q-btn flat size="xs" icon="delete" style="font-weight:400;color: #3FC4FF" class="q-mr-xs"
label="删除" @click="goDetailed(props.row,'0')" />
</q-td>
</template>
<template v-slot:bottom>
<q-pagination class="full-width justify-end" v-model="msg.pageIndex" color="primary" :max="pageCount"
:input="true" @input="changePage" />
</template>
</q-table>
</div>
</div>
</template>
<script>
export default {
meta: {
title: "欢迎语列表"
},
name: "welcomeList",
data() {
return {
loading: false,
ISsystem: false,
data: [{Type:1,Content:'文本:您好,##客户名称##!亲~你終於來啦!!我是你的专属顾问,任何有关日语学习问题都可以问我哦!!~~~~~~~~~~ 加入甲鹤大家庭~优惠天天有 第一条~9.9块日语体验课!! 第二条~每周活动免费参加! 第三条~猛戳我,”赞羊”电商优惠券免费送!! 第四条~再戳我,”旅游优惠券”我再送! ~~~~~从现在起”甲鹤日语”就是你学习日语的好帮手!! 现在回复”甲鹤”两个字~看看甲鹤想给你看甚么?~呵呵呵!',applymember:'通用',UpdateTime:'2021-08-04 15:48'}],
pageCount: 0,
msg: {
pageIndex: 1,
pageSize: 10,
rowsPerPage: 10,
Month: '',
TeacherId: 0,
State: 0,
},
//公告column
columns: [{
name: 'Type',
label: '欢迎语类型',
align: 'left'
},
{
name: 'Content',
field: 'Content',
label: '欢迎语内容',
align: 'left',
},
{
name: 'applymember',
field: 'applymember',
label: '使用成员',
align: 'left'
},
{
name: 'UpdateTime',
field: 'UpdateTime',
label: '创建时间',
align: 'left'
},
{
name: 'optioned',
label: '操作',
field: 'DeptId'
}
],
}
},
created() {
},
methods: {
changePage(e){
},
goadd(){
this.$router.push({
path:'/enterprise/addWelcome',
});
}
}
}
</script>
<style>
.welcomeList .Sysuser_Date .el-input--prefix .el-input__inner {
background-color: red;
border: 0;
}
.welcomeList .state-item {
padding: 2px 5px;
border-radius: 3px;
text-align: center;
font-size: 10px;
}
.welcomeList .frIdlist {
padding: 3px 10px;
border-radius: 3px;
background: #EEEEEF;
align-items: center;
justify-content: center;
margin-right: 5px;
margin-bottom: 5px;
cursor: pointer;
}
.class-popover .q-pr-lg {
padding-right: 0;
margin-top: 20px;
}
.welcomeList .el-date-editor.el-input {
width: 100%;
}
.welcomeList .el-date-editor.el-input input {
background-color: transparent !important;
}
.welcomeList .el-range-editor .el-range-input {
background: none;
}
.Sysuser_Date .el-input__inner {
background: transparent !important;
border: 0 !important;
}
.welcomeList .el-drawer.rtl{
overflow: inherit;
}
</style>
\ No newline at end of file
<style>
</style>
<template>
<div class="page-body">
<div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<q-input @change="resetSearch" clearable standout="bg-primary text-white" v-model="msg.QOrderId" label="订单编号"
@clear="resetSearch" maxlength="30" />
</div>
<div class="col-3">
<q-select @input="resetSearch" standout="bg-primary text-white" v-model="msg.AuditStatus"
:options="StatusOpts" option-value="Id" option-label="Name" label="状态" emit-value map-options />
</div>
<div class="col-3">
<q-input @change="resetSearch" clearable standout="bg-primary text-white" v-model="msg.ProtocolNum"
label="合同编号" @clear="resetSearch" maxlength="30" />
</div>
<div class="col-3">
<q-input @change="resetSearch" clearable standout="bg-primary text-white" v-model="msg.PartyAName"
label="学生姓名" @clear="resetSearch" maxlength="30" />
</div>
</div>
</div>
<courserefund-form :loading="loading" :dataList="dataList"></courserefund-form>
<q-pagination class="full-width justify-end" v-model="msg.pageIndex" color="primary" :max="pageCount" :input="true"
@input="changePage" />
</div>
</template>
<script>
import {
GetBackClassProtocolPage
} from "../../api/sale/contract";
import courserefundForm from "../../components/course/courserefund-form"
export default {
meta: {
title: "退课协议管理",
},
components: {
courserefundForm
},
data() {
return {
loading: true,
msg: {
pageIndex: 1,
pageSize: 12,
PartyAName: '',
AuditStatus: -1,
QOrderId: '',
ProtocolNum: '',
IsQueryAll: 0
},
pageCount: 0,
dataList: [],
//状态下拉
StatusOpts: [{
Id: -1,
Name: "不限",
},
{
Id: 1,
Name: "审核中",
},
{
Id: 2,
Name: "审核通过",
},
{
Id: 3,
Name: "驳回",
},
],
};
},
created() {
},
mounted() {
this.getList();
},
methods: {
//获取校区列表
getList() {
this.loading = true;
GetBackClassProtocolPage(this.msg).then((res) => {
this.loading = false;
if (res.Code == 1) {
this.dataList = res.Data.PageData;
this.pageCount = res.Data.PageCount;
console.log(this.dataList ,"this.dataList ");
}
});
},
//重新查询
resetSearch() {
this.msg.pageIndex = 1;
this.getList();
},
//分页改变
changePage(val) {
this.msg.pageIndex = val;
this.getList();
},
},
};
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
<style>
.weChatConfig .Period-rules {
display: flex;
margin-bottom: 24px;
padding-left: 20px;
}
.weChatConfig .Period_Spreate {
flex: 1;
min-width: 200px;
margin-right: 32px;
}
.weChatConfig .Period-rule-title {
color: #646a73;
margin-bottom: 4px;
display: flex;
align-items: center;
}
.weChatConfig .Period-info-icon {
margin-left: 8px;
color: #8f959e;
line-height: 1;
vertical-align: top;
}
.process_Btn_List {
display: flex;
justify-content: flex-end;
padding: 20px;
}
.processBtn_Cancel {
width: 90px;
height: 35px;
border: 1px solid #A1AAB2;
color: #000000;
background-color: #fff;
text-align: center;
line-height: 35px;
border-radius: 5px;
cursor: pointer;
margin-right: 20px;
}
.processBtn_Save {
width: 90px;
height: 35px;
background-color: #2961FE;
color: #FFF;
text-align: center;
line-height: 35px;
border-radius: 5px;
cursor: pointer;
}
.baseSetForm_Dialog {
margin: 20px;
}
.cycle_Title {
font-size: 20px;
font-weight: 500;
color: #1f2329;
}
.Period-alert {
padding: 9px 16px;
border-radius: 4px;
background-color: #f0f4ff;
line-height: 22px;
color: #1f2329;
display: flex;
align-items: center;
margin-top: 20px;
margin-bottom: 12px;
font-size: 13px;
}
.Okr_Length {
font-weight: 500;
color: #1f2329;
}
.FormItem-asterisk {
position: relative;
top: 3px;
margin-left: 3px;
color: #f54a45;
line-height: 1;
}
.baseSetForm_Dialog .el-radio {
display: block;
margin-bottom: 15px;
}
</style>
<template>
<div class="page-body">
<div class="weChatConfig">
<div style="text-align:right;">
<q-btn color="accent" size="sm" class="q-mr-md" @click="geteject" label="修改基础配置" />
</div>
<div class="Period-rules">
<div class="Period_Spreate">
<div class="Period-rule-title">企业名称</div>
<div>{{baseObj.Name}}</div>
</div>
<div class="Period_Spreate">
<div class="Period-rule-title">
企业ID
</div>
<div>{{baseObj.WX_CorpId}}</div>
</div>
</div>
<div class="Period-rules">
<div class="Period_Spreate">
<div class="Period-rule-title">通讯录管理secret</div>
<div>{{baseObj.Employee_Secret}}</div>
</div>
<div class="Period_Spreate">
<div class="Period-rule-title">
外部联系人管理secret
</div>
<div>
{{baseObj.Contact_Secret}}
</div>
</div>
</div>
<div class="Period-rules">
<div class="Period_Spreate">
<div class="Period-rule-title">
开启状态
</div>
<div>
{{baseObj.Enable==1?'已开启':'未开启'}}
</div>
</div>
</div>
</div>
<q-dialog v-model="isShowBaseSet" maximized full-height seamless position="right" @hide="closeProcess">
<q-card style="margin-top:61px;width:500px" class="no-border-radius classinfo_Dialog">
<div class="baseSetForm_Dialog">
<div class="cycle_Title">微信配置</div>
<div style="margin-top: 10px;">
<q-input filled stack-label :dense="false" v-model="addMsg.Name" ref="Name"
class="col-12 q-pb-lg" label="企业名称" :rules="[val => !!val || '请填写企业名称']" />
</div>
<div>
<q-input filled stack-label :dense="false" v-model="addMsg.WX_CorpId" ref="WX_CorpId"
class="col-12 q-pb-lg" label="企业微信ID" :rules="[val => !!val || '请填写企业微信ID']" />
</div>
<div>
<q-input filled stack-label :dense="false" v-model="addMsg.Employee_Secret" ref="Employee_Secret"
class="col-12 q-pb-lg" label="企业通讯录secret" :rules="[val => !!val || '请填写企业通讯录secret']" />
</div>
<div>
<q-input filled stack-label :dense="false" v-model="addMsg.Contact_Secret" ref="Contact_Secret"
class="col-12 q-pb-lg" label="企业外部联系人secret" :rules="[val => !!val || '请填写企业外部联系人secret']" />
</div>
<div class="Okr_Length" style="margin:20px 0;display: flex;align-items: center;">
<div style="color:#1f2329;margin-right: 10px;">开启状态</div>
<el-switch v-model="addMsg.Enable" :active-value="1" :inactive-value="2"></el-switch>
</div>
</div>
<div class="process_Btn_List">
<div class="processBtn_Cancel" @click="closeProcess">关闭</div>
<div class="processBtn_Save" @click="setBaseInfo">确定</div>
</div>
</q-card>
<div class="dialog-out-close" @click="closeProcess"
style="height:40px !important;border-top-left-radius: 4px !important;border-bottom-left-radius: 4px !important;">
<q-icon name="iconfont icon-jujue1" size="26px" />
</div>
</q-dialog>
</div>
</template>
<script>
import {
getWeChatConfigInfo,
setWeChatConfig
} from '../../api/system/wechat';
export default {
meta: {
title: "企业微信设置"
},
components: {
},
data() {
return {
isShowBaseSet: false,
baseObj: {},
addMsg:{},
}
},
mounted() {
this.getList();
},
methods: {
//获取okr配置信息
getList() {
getWeChatConfigInfo({}).then(res => {
if (res.Code == 1) {
this.baseObj = res.Data;
}
})
},
//关闭流程设置
closeProcess() {
this.isShowBaseSet = false;
},
geteject(){
this.addMsg = JSON.parse(JSON.stringify(this.baseObj))
this.isShowBaseSet = true;
},
setBaseInfo(){
this.$refs.Name.validate();
this.$refs.WX_CorpId.validate();
this.$refs.Employee_Secret.validate();
this.$refs.Contact_Secret.validate();
if(!this.$refs.Name.hasError && !this.$refs.WX_CorpId.hasError && !this.$refs.Employee_Secret.hasError && !this.$refs.Contact_Secret.hasError){
let msg={
Id: this.addMsg.Id,
Name: this.addMsg.Name,
WX_CorpId: this.addMsg.WX_CorpId,
Employee_Secret: this.addMsg.Employee_Secret,
Contact_Secret: this.addMsg.Contact_Secret,
Enable: this.addMsg.Enable,
}
setWeChatConfig(msg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '数据保存成功!',
position: 'top'
})
this.getList()
this.isShowBaseSet = false;
}
})
}
}
}
}
</script>
\ No newline at end of file
...@@ -113,6 +113,12 @@ const routes = [{ ...@@ -113,6 +113,12 @@ const routes = [{
component: () => component: () =>
import("pages/system/okrmanage.vue") import("pages/system/okrmanage.vue")
}, },
{
path: "/system/weChatConfig", //企业微信设置
component: () =>
import("pages/system/weChatConfig.vue")
},
{ {
path: "/system/webkitManage", //网站管理 path: "/system/webkitManage", //网站管理
component: () => component: () =>
...@@ -739,6 +745,11 @@ const routes = [{ ...@@ -739,6 +745,11 @@ const routes = [{
component: () => component: () =>
import("pages/sale/contractManage.vue") import("pages/sale/contractManage.vue")
}, },
{
path: "/sale/contractRefund", //销售 退课管理
component: () =>
import("pages/sale/contractRefund.vue")
},
{ {
path: "/sale/contractEdit", //销售 新增-编辑-查看合同 path: "/sale/contractEdit", //销售 新增-编辑-查看合同
component: () => component: () =>
...@@ -1118,7 +1129,17 @@ const routes = [{ ...@@ -1118,7 +1129,17 @@ const routes = [{
path: "/stuMan/unfinishedStudent", //学管 未完成学员名单 path: "/stuMan/unfinishedStudent", //学管 未完成学员名单
component: () => component: () =>
import("pages/stuMan/unfinishedStudent") import("pages/stuMan/unfinishedStudent")
} },
{
path: "/enterprise/welcomeList", //企微 欢迎语列表
component: () =>
import("pages/enterprise/welcomeList")
},
{
path: "/enterprise/addWelcome", //企微 欢迎语修改新增
component: () =>
import("pages/enterprise/addWelcome")
},
], ],
}, },
...@@ -1155,6 +1176,11 @@ const routes = [{ ...@@ -1155,6 +1176,11 @@ const routes = [{
component: () => component: () =>
import("pages/courseRefund.vue") import("pages/courseRefund.vue")
}, },
{
path: "/courseRefundH5",
component: () =>
import("pages/courseRefundH5.vue")
},
{ {
path: "/financial/financalDocument/PrintPage", //财务单据打印 path: "/financial/financalDocument/PrintPage", //财务单据打印
component: () => component: () =>
......
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