Commit 2af867b2 authored by 罗超's avatar 罗超

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

# Conflicts:
#	src/App.vue
parents 0525c675 4187ae04
......@@ -33,3 +33,5 @@ yarn-error.log*
*.sln
yarn.lock
package-lock.json
/webfont/*
src/assets/webfont/
......@@ -14,6 +14,7 @@
"@riophae/vue-treeselect": "^0.4.0",
"ali-oss": "^6.12.0",
"axios": "^0.18.1",
"browser-md5-file": "^1.1.1",
"co": "^4.6.0",
"core-js": "^3.6.5",
"cos-js-sdk-v5": "^1.1.5",
......@@ -21,16 +22,20 @@
"html2canvas": "^1.0.0-rc.7",
"js-md5": "^0.7.3",
"lockr": "^0.8.5",
"lrz": "^4.9.41",
"mavon-editor": "^2.9.1",
"print-js": "^1.6.0",
"qrcode": "^1.4.4",
"qrcodejs2": "0.0.2",
"quasar": "^1.0.0",
"relation-graph": "^1.0.8",
"v-viewer": "^1.5.1",
"vue-amap": "^0.5.10",
"vue-draggable-resizable": "^1.7.5",
"vue-easytable": "^1.7.2",
"vue-i18n": "^8.0.0",
"vue-inline-svg": "^2.0.0",
"vue-waterfall-easy": "^2.4.4",
"xlsx": "^0.16.8",
"xlsx-style": "^0.8.13"
},
......
......@@ -12,7 +12,7 @@ export default {
<style>
@import url('~assets/css/font.css');
@import url('//at.alicdn.com/t/font_2077629_lgl3u1kdk1a.css');
@import url('//at.alicdn.com/t/font_2077629_byb6agikplo.css');
html,
body,
......@@ -23,9 +23,6 @@ body,
font-family: -apple-system,BlinkMacSystemFont,'pingfang',' Microsoft YaHei',"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
color: #3f4254;
}
.fullscreen{
z-index: 99999;
}
.q-position-engine{
z-index: 9999;
}
......
import request from '../../utils/request'
/**
* 获取广告图分页列表
* @param {JSON参数} data
*/
export function getAdvertisingList(data) {
return request({
url: '/Advertising/GetAdvertisingList',
method: 'post',
data
})
}
/**
* 新增/修改广告
* @param {JSON参数} data
*/
export function SetAdvertising(data) {
return request({
url: '/Advertising/SetAdvertising',
method: 'post',
data
})
}
/**
* 删除广告图
* @param {JSON参数} data
*/
export function delAd(data) {
return request({
url: '/Advertising/DelAdvertising',
method: 'post',
data
})
}
/**
* 保存制作的广告图
* @param {JSON参数} data
*/
export function saveMakeAd(data) {
return request({
url: '/Advertising/Set',
method: 'post',
data
})
}
/**
* 获取我的广告图
* @param {JSON参数} data
*/
export function getMyAd(data) {
return request({
url: '/Advertising/GetPageList',
method: 'post',
data
})
}
/**
* 删除我的广告图
* @param {JSON参数} data
*/
export function delMyAd(data) {
return request({
url: '/Advertising/Remove',
method: 'post',
data
})
}
/**
* 我的广告图详情
* @param {JSON参数} data
*/
export function getMyAdDetail(data) {
return request({
url: '/Advertising/Get',
method: 'post',
data
})
}
\ No newline at end of file
......@@ -47,12 +47,12 @@ export function UploadSelfFile(path, file, callback, configObj) {
newPath += "/" + timestamp1 + "" + suffix;
UploadFileToTencent(uploadConfig, newPath, file, uploadLoadding, callback);
break;
//上传文件到阿里云
//上传文件到阿里云
case 2:
newPath += "/" + timestamp1 + "" + suffix;
UploadFileToALi(uploadConfig, newPath, file, uploadLoadding, callback);
break;
//上传文件到自己文件服务器
//上传文件到自己文件服务器
case 3:
UploadFileToSystem(uploadConfig, newPath, file, uploadLoadding, callback, configObj);
break;
......@@ -60,6 +60,112 @@ export function UploadSelfFile(path, file, callback, configObj) {
}
}
//上传视频文件到本地服务器
export function UploadViittoFile(path, file, callback) {
var uploadLoadding = Loading;
uploadLoadding.show({
message: '正在上传文件,请稍后...'
})
let viewFileUrl = 'http://192.168.20.214:8130';
let vtUploadUrl = "http://192.168.20.214:8120";
let locationName = window.location.hostname;
if (locationName.indexOf('testerp.oytour') !== -1) {
vtUploadUrl = "http://upload.oytour.com";
viewFileUrl = "https://imgfile.oytour.com";
} else if (locationName.indexOf('oytour') !== -1) {
vtUploadUrl = "http://upload.oytour.com";
viewFileUrl = "https://imgfile.oytour.com";
}
var UploadConfig = {
Bucket: "系统",
CustomDomain: viewFileUrl,
Region: "成都",
SecretId: "SecreId",
SecretKey: "SecreKey",
StoreType: 3,
UploadDomain: vtUploadUrl,
};
var configObj = {
isCreateCover: 1
}
UploadFileToSystem(UploadConfig, path, file, uploadLoadding, callback, configObj)
}
// 上传Blob视频文件到本地服务器
export function UploadViittoBlobFile(path, file, callback) {
var uploadLoadding = Loading;
uploadLoadding.show({
message: '正在上传文件,请稍后...'
})
let viewFileUrl = 'http://192.168.20.214:8130';
let vtUploadUrl = "http://192.168.20.214:8120/upload/UploadBlob";
let locationName = window.location.hostname;
if (locationName.indexOf('testerp.oytour') !== -1) {
vtUploadUrl = "http://upload.oytour.com/upload/UploadBlob";
viewFileUrl = "https://imgfile.oytour.com";
} else if (locationName.indexOf('oytour') !== -1) {
vtUploadUrl = "http://upload.oytour.com/upload/UploadBlob";
viewFileUrl = "https://imgfile.oytour.com";
}
var UploadConfig = {
Bucket: "系统",
CustomDomain: viewFileUrl,
Region: "成都",
SecretId: "SecreId",
SecretKey: "SecreKey",
StoreType: 3,
UploadDomain: vtUploadUrl,
};
var configObj = {
isCreateCover: 1
}
UploadBolbFileToSystem(UploadConfig, path, file, uploadLoadding, callback, configObj)
}
/**
* 上传bolb文件到本地文件系统
*/
export function UploadBolbFileToSystem(uploadConfig, fileFullPath, fileObj, uploadLoadding, successCall, configObj) {
let url = uploadConfig.UploadDomain + "/Upload?filePath=" + fileFullPath;
if (configObj) {
//是否转换图片
if (configObj.isTrans && configObj.isTrans == 1) {
url += "&isTrans=1"
}
if (configObj.isCreateCover && configObj.isCreateCover == 1) {
url += "&isCreateCover=1"
}
}
let formData = new FormData()
formData.append('myfile', fileObj)
let xhr = new XMLHttpRequest()
xhr.onload = function () {
uploadLoadding.hide();
var jsonObj = JSON.parse(xhr.responseText);
if ((jsonObj.StatusCode === 1 || jsonObj.StatusCode === 0) && successCall) {
var tempArray = [];
if (jsonObj.OtherFile && jsonObj.OtherFile.length > 0) {
jsonObj.OtherFile.forEach(item => {
tempArray.push(uploadConfig.CustomDomain + item);
})
}
var uploadResult = {
Code: 1,
FileName: fileObj.name,
FileUrl: uploadConfig.CustomDomain + '/' + jsonObj.FilePath,
VideoCoverImg: uploadConfig.CustomDomain + jsonObj.VideoCoverImg,
ExtFile: tempArray
}
if (successCall) {
successCall(uploadResult);
}
}
}
xhr.open('post', url, true)
xhr.send(formData)
}
/**
* 上传到当前站点
*/
......@@ -115,6 +221,9 @@ export function UploadFileToSystem(uploadConfig, fileFullPath, fileObj, uploadLo
if (configObj.isTrans && configObj.isTrans == 1) {
url += "&isTrans=1"
}
if (configObj.isCreateCover && configObj.isCreateCover == 1) {
url += "&isCreateCover=1"
}
}
let formData = new FormData()
formData.append('myfile', fileObj)
......@@ -122,7 +231,7 @@ export function UploadFileToSystem(uploadConfig, fileFullPath, fileObj, uploadLo
xhr.onload = function () {
uploadLoadding.hide();
var jsonObj = JSON.parse(xhr.responseText);
if (jsonObj.StatusCode == 1 && successCall) {
if (jsonObj.StatusCode === 1 && successCall) {
var tempArray = [];
if (jsonObj.OtherFile && jsonObj.OtherFile.length > 0) {
jsonObj.OtherFile.forEach(item => {
......@@ -137,6 +246,7 @@ export function UploadFileToSystem(uploadConfig, fileFullPath, fileObj, uploadLo
ExtFile: tempArray
}
if (successCall) {
successCall(uploadResult);
}
}
......@@ -145,6 +255,7 @@ export function UploadFileToSystem(uploadConfig, fileFullPath, fileObj, uploadLo
xhr.send(formData)
}
/**
* 上传文件到阿里云
*/
......@@ -157,7 +268,7 @@ export function UploadFileToALi(uploadConfig, fileFullPath, fileObj, uploadLoadd
bucket: uploadConfig.Bucket
})
var result = oss.multipartUpload(fileFullPath, fileObj, {
progress: function* (p) {}
progress: function* (p) { }
}).then(res => {
uploadLoadding.hide();
var uploadResult = {
......@@ -186,7 +297,7 @@ export function UploadFileToTencent(uploadConfig, fileFullPath, fileObj, uploadL
Key: fileFullPath, //文件名
StorageClass: 'STANDARD',
Body: fileObj, // 上传文件对象
onProgress: function (progressData) {}
onProgress: function (progressData) { }
}, function (err, data) {
uploadLoadding.hide();
if (data && data.statusCode == 200) {
......
......@@ -95,4 +95,94 @@ export function getSellCommissionPeriodsPageList(data) {
data
});
}
// 财务工作台 获取周期提成 用户统计列表
export function getSellCommissionUserList(data) {
return request({
url: '/SellCommission/GetSellCommissionUserList',
method: 'post',
data
});
}
// 财务工作台 获取周期提成 用户统计列表
export function getSellCommissionUserDetailList(data) {
return request({
url: '/SellCommission/GetSellCommissionUserDetailList',
method: 'post',
data
});
}
// 财务工作台 获取周期提成 用户统计列表
export function getSellCommissionForOrderList(data) {
return request({
url: '/SellCommission/GetSellCommissionForOrderList',
method: 'post',
data
});
}
// 财务工作台 获取周期提成 创建提成
export function setSellCommissionInfo(data) {
return request({
url: '/SellCommission/SetSellCommissionInfo',
method: 'post',
data
});
}
// 财务工作台 获取周期提成 提成统计
export function getSellCommissionStatistics(data) {
return request({
url: '/SellCommission/GetSellCommissionStatistics',
method: 'post',
data
});
}
// 财务工作台 获取周期提成 周期列表下拉选择
export function getSellCommissionPeriodsList(data) {
return request({
url: '/SellCommission/GetSellCommissionPeriodsList',
method: 'post',
data
});
}
// 财务报表 获取老师课耗统计
export function getTeacherConsumptionHoursStatistics(data) {
return request({
url: '/finance/GetTeacherConsumptionHoursStatistics',
method: 'post',
data
});
}
// 财务报表 获取老师课时消费明细列表
export function getTeacherConsumptionHoursDetialPageList(data) {
return request({
url: '/finance/GetTeacherConsumptionHoursDetialPageList',
method: 'post',
data
});
}
// 财务报表 学生课耗明细列表
export function getStudentConsumptionHoursDetialPageList(data) {
return request({
url: '/finance/GetStudentConsumptionHoursDetialPageList',
method: 'post',
data
});
}
// 财务报表 销售业绩排名统计
export function getSaleAchievementsRankStatistics(data) {
return request({
url: '/finance/GetSaleAchievementsRankStatistics',
method: 'post',
data
});
}
......@@ -332,3 +332,16 @@ export function queryChaClassInfo(data) {
})
}
/**
* 获取前置订单下拉数据
*
*/
export function GetSelectClassOrderList(data) {
return request({
url: '/Order/GetSelectClassOrderList',
method: 'post',
data
})
}
......@@ -75,6 +75,28 @@ export function queryDutyWork(data) {
})
}
//获取我的值班看板【第二版】
export function OnDuty_V2(data) {
return request({
url: '/DutyPlan/OnDuty_V2',
method: 'post',
data
})
}
//获取我的值班内容【第二版】
export function queryDutyWork_V2(data) {
return request({
url: '/DutyPlan/GetDutyWork_V2',
method: 'post',
data
})
}
//获取访客列表
export function queryVisitorPage(data) {
return request({
......@@ -159,3 +181,113 @@ export function saveDutyCheck(data) {
data
})
}
/**
* 约课管理
* @param {JSON参数} data
*/
export function GetReserveClassPage(data) {
return request({
url: '/VisitorReserve/GetReserveClassPage',
method: 'post',
data
})
}
/**
* 设置约课信息
* @param {JSON参数} data
*/
export function SetVisitorReserve(data) {
return request({
url: '/VisitorReserve/SetVisitorReserve',
method: 'post',
data
})
}
/**
* 约课管理
* @param {JSON参数} data
*/
export function queryVisitorReservePage(data) {
return request({
url: '/VisitorReserve/GetVisitorReservePage',
method: 'post',
data
})
}
/**
* 删除试听课程
* @param {JSON参数} data
*/
export function RemoveReserveClass(data) {
return request({
url: '/VisitorReserve/RemoveReserveClass',
method: 'post',
data
})
}
/**
* 保存修改听课程
* @param {JSON参数} data
*/
export function SetReserveClass(data) {
return request({
url: '/VisitorReserve/SetReserveClass',
method: 'post',
data
})
}
/**
* 获取约课班级详情
* @param {JSON参数} data
*/
export function GetReserveClass(data) {
return request({
url: '/VisitorReserve/GetReserveClass',
method: 'post',
data
})
}
/**
* 修改预约状态
* @param {JSON参数} data
*/
export function setVisitorReserveStatus(data) {
return request({
url: '/VisitorReserve/UpdateVisitorReserveStatus',
method: 'post',
data
})
}
/**
* 删除约课数据
* @param {JSON参数} data
*/
export function RemoveVisitorReserve(data) {
return request({
url: '/VisitorReserve/RemoveVisitorReserve',
method: 'post',
data
})
}
/**
* 获取交接班次
* @param {JSON参数} data
*/
export function GetHandoverShiftList() {
return request({
url: '/DutyPlan/GetHandoverShiftList',
method: 'post',
data: ""
})
}
\ No newline at end of file
......@@ -59,6 +59,18 @@ export function getTeacherPage(data) {
})
}
/**
* 获取教师分页数据
*/
export function queryTeacherSpecialty(data) {
return request({
url: '/user/GetTeacherSpecialty',
method: 'post',
data
})
}
/**
* 获取讲师列表
*/
......@@ -532,4 +544,15 @@ export function propertyGetPageList(data) {
method: 'post',
data
})
}
\ No newline at end of file
}
/**
* 验证用户是否有 需补交提成订单
*/
export function getUserLeaveOrderCommission(data) {
return request({
url: '/SellCommission/GetUserLeaveOrderCommission',
method: 'post',
data
});
}
......@@ -87,3 +87,15 @@ export function getEmployeeAddrBook(data)
data
})
}
/**
* 个人资料修改
*/
export function setEmployeeBaseInfo(data)
{
return request({
url: '/UserInfo/SetEmployeeBaseInfo',
method: 'post',
data
})
}
@font-face{
font-family:'katongjian';
src:url('../../webfont/katongjian.ttf') format('truetype')
}
@font-face{
font-family:'YGYXSZITI';
src:url('../../webfont/YGYXSZITI2.0.ttf') format('truetype')
}
@font-face{
font-family:'FZYBXSJW';
src:url('../../webfont/FZYBXSJW.ttf') format('truetype')
}
@font-face{
font-family:'fzjzjt';
src:url('../../webfont/fzjzjt.ttf') format('truetype')
}
@font-face{
font-family:'fzmwt';
src:url('../../webfont/fzmwt.ttf') format('truetype')
}
@font-face{
font-family:'fztjlst';
src:url('../../webfont/fztjlst.ttf') format('truetype')
}
@font-face{
font-family:'hyhctj';
src:url('../../webfont/hyhctj.ttf') format('truetype')
}
@font-face{
font-family:'hyqytj';
src:url('../../webfont/hyqytj.ttf') format('truetype')
}
@font-face{
font-family:'hyyltj';
src:url('../../webfont/hyyltj.ttf') format('truetype')
}
@font-face{
font-family:'jlx';
src:url('../../webfont/jlx.ttf') format('truetype')
}
@font-face{
font-family:'sszhjt';
src:url('../../webfont/sszhjt.ttf') format('truetype')
}
@font-face{
font-family:'hybqt';
src:url('../../webfont/hybqt.ttf') format('truetype')
}
@font-face{
font-family:'hyhht';
src:url('../../webfont/hyhht.ttf') format('truetype')
}
@font-face{
font-family:'hylbt';
src:url('../../webfont/hylbt.ttf') format('truetype')
}
@font-face{
font-family:'hxlbjt';
src:url('../../webfont/hxlbjt.ttf') format('truetype')
}
@font-face{
font-family:'hywwzj';
src:url('../../webfont/hywwzj.ttf') format('truetype')
}
@font-face{
font-family:'pingfang';
src:url('../../webfont/pingfang.ttf') format('truetype')
}
.adv-box{
box-sizing: border-box;
position: absolute;
/* overflow-y: auto; */
padding-bottom: 15px;
top:0px;
left: 20px;
right: 0;
bottom: 0;
background: #f1f1f1;
}
.adv-box .board{
width: 470px;
position: absolute;
left: 0px;
z-index: 98;
top: 0px;
-webkit-user-select: none !important;
overflow: hidden;
}
.adv-box .board .bg{
width:470px;
z-index: 99;
-webkit-user-drag: none;
}
.adv-box .board .vdr .text{
width:100%;
height:100%;
cursor: move;
overflow: hidden;
white-space: pre-line;
}
.adv-box .board .vdr .img{
max-width:100%;
max-height:100%;
/* width:100%;
height:100%; */
cursor: move;
-webkit-user-drag:none;
}
.adv-box .board .vdr.active{
background:rgba(0,0,0,.3)
}
.adv-box .tools{
width: 32px;
position: absolute;
left: 480px;
top: 0px;
}
.adv-box .tools li{
height: 21px;
width: 32px;
text-align: center;
background: #e5e5e5;
cursor: pointer;
border-radius: 2px;
margin-bottom: 12px;
line-height: 21px;
}
.adv-box .tools li:hover{
background: #d8d8d8 !important
}
.adv-box .tools li.save{
color: #fff;
background: #4d90fe;
}
.adv-box .tools li.save:hover{
background: #0362fd !important;
}
.adv-box .tools li.down{
color: #fff;
background: #35aa47;
}
.adv-box .tools li.down:hover{
background: #1d943b !important;
}
.adv-box .tools li.return{
color: #fff;
background: #d84a38;
}
.adv-box .tools li.return:hover{
background: #bb2413 !important;
}
.adv-box .tools li.source{
color: #fff;
background: #fc5c65;
}
.adv-box .tools li.source:hover{
background: #fc5c65 !important;
}
.adv-box .tools li i{
font-size: 16px;
color: #333;
}
.adv-box .tools li.save,.adv-box .tools li.down,.adv-box .tools li.return,.adv-box .tools li.source {
color: #f0f0f0;
font-size: 12px;
}
.adv-box .property-box{
position: absolute;
left: 550px;
top: 0px;
width: 640px;
right: 10px;
overflow: hidden;
}
.adv-box .property-box label{
font-size: 12px;
}
.adv-box .property-box label.remark{
color: #999;
}
.adv-box .property-box .el-button{
padding:5px;
}
.adv-box .resorece{
position: absolute;
left: 532px;
top: 0px;
width: 120px;
height: 120px;
}
.adv-box .resorece img{
}
.adv-box .max-resource{
width: 470px;
}
.adv-box .el-textarea__inner{
width: 290px;
}
.adv-box .el-slider{
width: 290px;
padding-left: 9px;
}
.adv-box::-webkit-scrollbar{
width: 4px;
height: 8px;
}
.adv-box::-webkit-scrollbar-thumb {
border-radius: 4px;
-webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.2);
background: #c9c9c9;
}
.adv-box::-webkit-scrollbar-thumb {
-webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.2);
border-radius: 4px;
background: #EDEDED;
}
.adv-box .el-input-group__append,.adv-box .el-input-group__prepend{
padding: 0 4px;
border-radius: 0px;
}
.adv-box .el-color-picker__trigger,.adv-box .el-color-picker__color{
border-radius: 0px;
}
.adv-box .el-color-picker__trigger {
height: 34px;
width: 34px;
margin-top: 4px;
}
.adv-box .advmanager-box .content {
top: 80px;
left: 0px;
}
.adv-box .goon{
position: fixed;
background: rgba(235, 59, 90, .8);
font-family: 'PingFangSC-fine';
font-size: 14px;
width: 50px;
height: 50px;
border-radius: 100%;
color: #f1f1f1;
right: 10px;
text-align: center;
line-height: 50px;
top:220px;
cursor: pointer;
}
.adv-box .el-input--mini .el-input__inner{
line-height: normal;
}
.adv-box .el-input-number{
vertical-align: top;
}
\ No newline at end of file
.advmanager-box{
}
.advmanager-box .content{
position: absolute;
top:125px;
bottom: 0px;
left: 20px;
right: 20px;
overflow-y: auto;
}
.advmanager-box .content::-webkit-scrollbar, .vue-waterfall-easy-scroll::-webkit-scrollbar{
width: 4px;
height: 8px;
}
.advmanager-box .content::-webkit-scrollbar, .vue-waterfall-easy-scroll::-webkit-scrollbar-thumb {
border-radius: 4px;
-webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.2);
background: #c9c9c9;
}
.advmanager-box .content::-webkit-scrollbar, .vue-waterfall-easy-scroll::-webkit-scrollbar-thumb {
-webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.2);
border-radius: 4px;
background: #EDEDED;
}
.advmanager-box .content ul{
display: flex;
margin: 0px;
padding: 0px;
margin: 5px 0;
width:100%;
flex-wrap: wrap;
margin-bottom: -20px;
}
.advmanager-box .content ul li{
flex: initial;
position: relative;
margin: 0 20px 20px 0;
width: 200px;
height: 290px;
margin-bottom: 20px;
}
.advmanager-box .content ul li:first-child{
margin-left: 0px;
}
.advmanager-box .content ul li .title{
border: 1px dashed #999;
display: block;
padding: 5px;
box-sizing: border-box;
line-height: 18px;
font-size: 12px;
text-align: center;
}
.advmanager-box .nowrap{
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.advmanager-box .content ul li .title .h1{
margin-bottom: 5px;
font-size: 16px;
font-weight: 300;
}
.advmanager-box .content ul li .title .nowrap .line{
background: rgb(1, 130, 255);
padding: 2px 3px;
color: #f5f5f5;
border-radius: 4px;
}
.advmanager-box .content ul li .img-box{
width: 100%;
height: 290px;
position: relative;
background: #eee;
overflow: hidden;
}
.advmanager-box .content ul li .img-box img{
border-radius: 2px;
}
.advmanager-box .content .img-box .zezhao{
top: 10px;
right: 10px;
left: 10px;
bottom: 10px;
position: absolute;
border-radius: 2px;
display: none;
background: rgba(0, 0, 0, 0.4);
text-align: center;
z-index: 2;
line-height: 10;
}
.advmanager-box .content .img-box .zezhao i{
font-size: 28px;
color:#f1f1f1;
cursor: pointer;
margin-right: 10px;
}
.advmanager-box .content .img-box .zezhao i:last-child{
margin-right: 0px;
}
.advmanager-box .content .img-box:hover .zezhao{
display: block;
}
.advmanager-box .content .img-box .money{
top: 15px;
right: 15px;
position: absolute;
background: #eb3b5a;
color: #f5f5f5;
padding: 2px 3px;
border-radius: 4px;
font-size: 12px;
}
.advmanager-box .content .img-box .free{
top: 15px;
right: 15px;
position: absolute;
background: #20bf6b;
color: #f5f5f5;
padding: 2px 3px;
border-radius: 4px;
font-size: 12px;
}
.advmanager-box .content .label-box{
top: 40px;
left: 15px;
position: absolute;
width: 200px;
}
.label-box .ad-label{
max-width: 50px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
background:rgba(0,0,0,.5);
color: #f5f5f5;
padding:0px 5px;
border-radius: 4px;
font-size: 12px;
/* display: inline-block; */
}
.advmanager-box .query-box ul .el-input{
width: 150px;
}
.advmanager-box .content .img-box .star-box{
top: 15px;
left: 15px;
position: absolute;
background:rgba(0,0,0,.5);
color: #f5f5f5;
padding:0px 5px;
border-radius: 4px;
font-size: 12px;
display: inline-block;
}
.advmanager-box .content .img-box .star-box .star{
color: #eb3b5a
}
.advmanager-box .el-pagination{
position: absolute;
left: 20px;
bottom: 5px;
right: 20px;
}
.advmanager-box .showAddBox{
bottom: 240px;
}
.advmanager-box .add-box{
bottom: 0px;
left: 0px;
right: 0px;
height: 240px;
position: absolute;
z-index: 2;
border-top: 1px solid #D9d9d9;
background: #fff;
box-sizing: border-box;
padding: 0 20px;
}
.advmanager-box .upload-box{
height: 150px;
margin-top: 10px;
width: 440px;
display: flex;
flex: 1;
}
.advmanager-box .upload-box label{
height: 100%;
vertical-align: top;
font-size: 12px;
margin-right: 4px;
color: #666;
}
.advmanager-box .upload-box .upload-box-normal{
width:110px;
height: 100%;
line-height: 150px;
flex: 1;
vertical-align: top;
border:1px dashed #d9d9d9;
box-sizing: border-box;
text-align: center;
margin-right:30px;
cursor: pointer;
}
.advmanager-box .upload-box .upload-box-normal:hover{
border:1px dashed #c9c9c9;
}
.advmanager-box .upload-box .upload-box-normal:hover i{
color: #c9c9c9;
}
.advmanager-box .upload-box .upload-box-normal i{
font-size: 48px;
color: #d9d9d9;
}
.advmanager-box .upload-box .upload-box-img{
width:110px;
height: 150px;
flex: 1;
vertical-align: top;
box-sizing: border-box;
margin-right:30px;
cursor: pointer;
position: relative;
}
.advmanager-box .upload-box .upload-box-img img{
width: 100%;
height: 100%;
}
.advmanager-box .upload-box .upload-box-img .zezhao{
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: rgba(0, 0, 0, 0.5);
line-height: 150px;
text-align: center;
display: none;
cursor: default;
}
.advmanager-box .upload-box .upload-box-img .zezhao i{
font-size: 28px;
color:#f1f1f1;
cursor: pointer;
}
.advmanager-box .upload-box .upload-box-img:hover .zezhao{
display: block;
}
.opera-btn-box{
bottom: 20px;
position: absolute;
right: 20px;
}
.advmanager-box .line-box{
position: absolute;
top:125px;
bottom: 38px;
left: 20px;
right: 20px;
overflow-y: auto;
}
.advmanager-box .line-box ul{
width: 100%;
}
.advmanager-box .line-box ul li{
height: 50px;
padding: 5px;
width: 100%;
margin: 5px 0;
box-sizing: border-box;
border:1px solid #eee;
display: flex;
}
.advmanager-box .line-box ul li:hover{
border:1px solid #e1e1e1;
}
.advmanager-box .line-box ul li .pic{
width: 20px;
height: 40px;
margin-right: 10px;
flex: inherit;
position: relative;
}
.advmanager-box .line-box ul li .pic img{
width: 100%;
height: 100%;
}
.advmanager-box .line-box ul li .pic .zezhao{
top: 0px;
right: 0px;
left: 0;
bottom: 0;
position: absolute;
display: none;
background: rgba(0, 0, 0, 0.4);
text-align: center;
z-index: 2;
line-height: 40px;
}
.advmanager-box .line-box ul li .pic .zezhao i{
font-size: 28px;
color:#f1f1f1;
cursor: pointer;
}
.advmanager-box .line-box ul li .pic:hover .zezhao{
display: block;
}
.advmanager-box .line-box ul li .item{
text-align: center;
line-height: 40px;
font-size: 12px;
color: #666;
flex:1;
}
.advmanager-box .el-input .el-input__inner,.advmanager-box .el-select .el-input{height: auto}
.advmanager-box .query-box ul .el-select.w240 .el-input{width: auto;}
.isAssociatTeam{width:600px;}
.isAssociatTeam .el-switch{margin:20px 0 0 190px;}
\ No newline at end of file
import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import Erpindex from '../utils/erpindex'
import Erpindex from '../utils/erpindex'
import axios from 'axios'
import 'vue-easytable/libs/themes-base/index.css'
import {VTable,VPagination} from 'vue-easytable'
import { VTable, VPagination } from 'vue-easytable'
import commonUtils from '../pages/financial/utils/commonUtils'
import 'viewerjs/dist/viewer.css'
import Viewer from 'v-viewer'
import AuthCode from '../pages/financial/utils/AuthCode' //权限编码JS
Vue.http = Vue.prototype.$http = axios
Vue.commonUtils = Vue.prototype.$commonUtils=commonUtils
Vue.AuthCode=Vue.prototype.$AuthCode=AuthCode
Vue.commonUtils = Vue.prototype.$commonUtils = commonUtils
Vue.AuthCode = Vue.prototype.$AuthCode = AuthCode
import lrz from 'lrz'
// 时间扩展格式化
Date.prototype.Format = function (fmt) {
var o = {
......@@ -22,14 +22,15 @@ Date.prototype.Format = function (fmt) {
"m+": this.getMinutes(), //分
"s+": this.getSeconds() //秒
};
if (/(y+)/.test(fmt)){ //根据y的长度来截取年
if (/(y+)/.test(fmt)) { //根据y的长度来截取年
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o){
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
return fmt;
};
Vue.prototype.lrz = lrz
Vue.use(ElementUI)
Vue.use(Erpindex)
......
This diff is collapsed.
This diff is collapsed.
<template>
<q-dialog v-model="persistent" persistent content-class="bg-grey-1" transition-show="scale" transition-hide="scale" class="addactivetype">
<q-card style="width: 450px;max-width:500px;">
<q-card-section>
<div class="text-h6">{{(saveObj&&saveObj.Id>0)?"修改活动类型":"新增活动类型"}}</div>
</q-card-section>
<q-card-section class="q-pt-none scroll" style="max-height: 70vh">
<div class="row wrap">
<div class="col-12">
<q-input filled stack-label maxlength="20" :dense="false" v-model="addMsg.TypeName" ref="Name"
class="col-12 q-pb-lg" label="活动类型名称" :rules="[val => !!val || '请填写活动类型名称']" />
</div>
</div>
<div class="row wrap">
<div class="col-12">
<q-uploader :style="{ backgroundImage: 'url(' + addMsg.CoverImage + ')' }" style="width:auto;height:500px;background-repeat:no-repeat;background-size:cover; border:1px solid #eee" flat
hide-upload-btn max-files="1" label="封面图" accept=".jpg, image/*" :factory="uploadFile" auto-upload>
</q-uploader>
</div>
</div>
<div class="row wrap">
<div class="q-mt-lg q-mb-sm">标签</div>
<div class="col-12 q-gutter-sm row">
<el-tag :key="index" v-for="(tag,index) in dynamicTags" closable :disable-transitions="false"
@close="handleClose(tag)">
{{tag}}
</el-tag>
<el-input class="input-new-tag" v-if="inputVisible" v-model="inputValue" ref="saveTagInput" size="small"
@keyup.enter.native="handleInputConfirm" @blur="handleInputConfirm">
</el-input>
<el-button v-else class="button-new-tag" size="small" @click="showInput">+ 标签</el-button>
</div>
</div>
<div class="row wrap">
<div class="q-mt-lg q-mb-sm">简介</div>
<div class="col-12">
<Ueditor
:value="ueditor.value"
:config="ueditor.config"
@input="setVal"
ref="ue"
no-margin
:isShowInsertImage="false"
:isShowAttachment="false"
:isShowVoice="false"
></Ueditor>
</div>
</div>
</q-card-section>
<q-card-actions align="right" class="bg-white">
<q-btn label="取消" flat color="grey-10" style="font-weight:400 !important" @click="closeRuleForm" />
<q-btn label="保存" color="accent q-px-md" style="font-weight:400 !important" @click="saveRule" />
</q-card-actions>
</q-card>
</q-dialog>
</template>
<script>
import {
UploadSelfFile
} from "../../api/common/common";
import Ueditor from "../editor/UeEditor";
export default {
props: {
saveObj: {
type: Object,
default: null
},
},
components: { Ueditor },
data() {
return {
addMsg: {
Id: 0,
TypeName: "",
CoverImage:"",
LableNameList:[],
TypeContent:"",
},
persistent: true,
//标签
dynamicTags: [], //标签数组
inputVisible: false,
inputValue: '',
//富文本
ueditor: {
value: "",
config: {
initialFrameWidth: null,
initialFrameHeight: 100,
autoHeightEnabled: true,
enableContextMenu: false
}
},
}
},
mounted() {
if (this.saveObj && this.saveObj.Id > 0) {
this.addMsg.Id=this.saveObj.Id
this.addMsg.CoverImage=this.saveObj.CoverImage
this.dynamicTags=this.saveObj.LableNameList
this.addMsg.TypeName=this.saveObj.TypeName
this.addMsg.TypeContent=this.saveObj.TypeContent
this.setVal(this.addMsg.TypeContent);
}else{
this.addMsg.Id=0
this.addMsg.CoverImage=""
this.dynamicTags=[]
this.addMsg.TypeName=""
this.addMsg.TypeContent=""
this.setVal("");
}
},
methods: {
uploadFile(files) {
UploadSelfFile("course", files[0], res => {
if (res.Code == 1) {
this.addMsg.CoverImage = res.FileUrl;
}
});
},
//保存信息
saveRule() {
this.$refs.Name.validate();
if (!this.$refs.Name.hasError) {
this.addMsg.LableNameList = this.dynamicTags;
this.apipostDS("/api/Education/SetCommerceActivityType",this.addMsg,(res)=>{
if(res.data.resultCode===1){
this.Success(res.data.message);
this.closeRuleForm();
this.$emit('success');
}else{
this.Error(res.data.message);
}
})
}
},
//关闭窗口
closeRuleForm() {
this.$emit('close');
this.persistent = false
},
// 标签
handleInputConfirm() {
let inputValue = this.inputValue;
if (inputValue) {
this.dynamicTags.push(inputValue);
}
this.inputVisible = false;
this.inputValue = '';
},
showInput() {
this.inputVisible = true;
this.$nextTick(_ => {
this.$refs.saveTagInput.$refs.input.focus();
});
},
//删除标签
handleClose(tag) {
this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
},
// 富文本
setVal(val) {
this.addMsg.TypeContent = val;
this.ueditor.value = decodeURIComponent(val);
},
},
}
</script>
<style scoped>
.input-new-tag {
width: 90px;
margin-left: 10px;
vertical-align: bottom;
margin-right: 5px;
}
.el-tag {
margin-right: 5px;
}
.el-form-item__content {
line-height: 0;
}
.el-button{
line-height: 30px;
padding-top: 0;
padding-bottom: 0;
height: 32px;
margin-top: 8px;
}
</style>
<template>
<q-dialog v-model="persistent" persistent content-class="bg-grey-1" transition-show="scale" transition-hide="scale" class="addactivetype">
<q-card style="width: 600px;max-width:800px;">
<q-card-section>
<div class="text-h6">{{(saveObj&&saveObj.ID>0)?"修改广告图":"新增广告图"}}</div>
</q-card-section>
<q-card-section class="q-pt-none scroll" style="max-height: 70vh">
<div class="row wrap q-mb-lg">
<div class="col-12">
<q-input clearable standout="bg-primary text-white" v-model="addMsg.Title" label="标题" stack-label
maxlength="20" />
</div>
</div>
<div class="row wrap q-mb-lg">
<div class="col-12">
<q-select standout="bg-primary text-white" v-model="addMsg.IsFee" :options="statusOpts" stack-label
emit-value map-options label="类型" />
</div>
</div>
<div class="row wrap" v-show='addMsg.IsFee==1'>
<div class="col-12">
<q-input filled stack-label maxlength="20" :dense="false" v-model="addMsg.ChargeAmount" ref="ChargeAmount" stack-label
class="col-12 q-pb-lg" label="收费金额" :rules="[val => !!val || '请填写收费金额']" />
</div>
</div>
<!-- <div class="row wrap">
<div class="col-12">
<q-uploader :style="{ backgroundImage: 'url(' + addMsg.CoverImage + ')' }" style="width:auto;height:500px;background-repeat:no-repeat;background-size:cover; border:1px solid #eee" flat
hide-upload-btn max-files="1" label="封面图" accept=".jpg, image/*" :factory="uploadFile" auto-upload>
</q-uploader>
</div>
</div> -->
<div class="row wrap">
<div class="q-mt-sm q-mb-sm">标签</div>
<div class="col-12 q-gutter-sm row">
<el-tag :key="index" v-for="(tag,index) in dynamicTags" closable :disable-transitions="false"
@close="handleClose(tag)">
{{tag}}
</el-tag>
<el-input class="input-new-tag" v-if="inputVisible" v-model="inputValue" ref="saveTagInput" size="small"
@keyup.enter.native="handleInputConfirm" @blur="handleInputConfirm">
</el-input>
<el-button v-else class="button-new-tag" size="small" @click="showInput">+ 标签</el-button>
</div>
</div>
<!-- <div class="row wrap">
<div class="q-mt-lg q-mb-sm">简介</div>
<div class="col-12">
<Ueditor
:value="ueditor.value"
:config="ueditor.config"
@input="setVal"
ref="ue"
no-margin
:isShowInsertImage="false"
:isShowAttachment="false"
:isShowVoice="false"
></Ueditor>
</div>
</div> -->
<div class="row wrap q-mt-lg">
<div class="col-12">
<q-uploader :style="{ backgroundImage: 'url(' + addMsg.PictureUrl + ')' }" style="width:auto;height:500px;background-repeat:no-repeat;background-size:cover; border:1px solid #eee" flat
hide-upload-btn max-files="1" label="底图" accept=".jpg, image/*" :factory="uploadFile1" auto-upload no-thumbnails>
</q-uploader>
</div>
</div>
<div class="row wrap q-mt-lg">
<div class="col-12">
<q-uploader :style="{ backgroundImage: 'url(' + addMsg.SamplePicturesUrl + ')' }" style="width:auto;height:500px;background-repeat:no-repeat;background-size:cover; border:1px solid #eee" flat
hide-upload-btn max-files="1" label="原图" accept=".jpg, image/*" :factory="uploadFile2" auto-upload no-thumbnails>
</q-uploader>
</div>
</div>
</q-card-section>
<q-card-actions align="right" class="bg-white">
<q-btn label="取消" flat color="grey-10" style="font-weight:400 !important" @click="closeRuleForm" />
<q-btn label="保存" color="accent q-px-md" style="font-weight:400 !important" @click="saveRule" />
</q-card-actions>
</q-card>
</q-dialog>
</template>
<script>
import {
UploadSelfFile
} from "../../api/common/common";
import Ueditor from "../editor/UeEditor";
import {SetAdvertising} from '../../api/AD/index.js'
export default {
props: {
saveObj: {
type: Object,
default: null
},
},
components: { Ueditor },
data() {
return {
addMsg: {
ID:0,
IsFee:2,
ChargeAmount:0,
PictureUrl:"",
SamplePicturesUrl:"",
Title:"",
LableList:[]
},
persistent: true,
//标签
dynamicTags: [], //标签数组
inputVisible: false,
inputValue: '',
//富文本
// ueditor: {
// value: "",
// config: {
// initialFrameWidth: null,
// initialFrameHeight: 100,
// autoHeightEnabled: true,
// enableContextMenu: false
// },
// },
statusOpts:[
{
label: "收费",
value: 1
},
{
label: "免费",
value: 2
}
],
}
},
mounted() {
console.log(this.saveObj)
if (this.saveObj&&this.saveObj.ID>0) {
this.addMsg.ID=this.saveObj.ID
this.addMsg.IsFee=this.saveObj.IsFee
this.addMsg.ChargeAmount=this.saveObj.ChargeAmount
this.addMsg.PictureUrl=this.saveObj.PictureUrl
this.addMsg.SamplePicturesUrl=this.saveObj.SamplePicturesUrl
this.addMsg.Title=this.saveObj.Title
this.addMsg.LableList=this.saveObj.LableList
if(this.saveObj.LableList){
this.dynamicTags=this.saveObj.LableList
}
}else{
this.addMsg={
ID:0,
IsFee:2,
ChargeAmount:0,
PictureUrl:"",
SamplePicturesUrl:"",
Title:"",
LableList:[]
}
}
console.log(150, this.addMsg)
},
methods: {
uploadFile1(files) {
UploadSelfFile("course", files[0], res => {
if (res.Code == 1) {
this.addMsg.PictureUrl = res.FileUrl;
this.$forceUpdate();
}
});
},
uploadFile2(files) {
UploadSelfFile("course", files[0], res => {
if (res.Code == 1) {
this.addMsg.SamplePicturesUrl = res.FileUrl;
this.$forceUpdate();
}
});
},
//保存信息
saveRule() {
if(this.addMsg.PictureUrl==""){
this.$q.notify({
type: 'negative',
position: "top",
message: `请上传底图`
})
return
}
if(this.addMsg.SamplePicturesUrl==""){
this.$q.notify({
type: 'negative',
position: "top",
message: `请上传原图`
})
return
}
// this.$refs.Name.validate();
// if (!this.$refs.Name.hasError) {
this.addMsg.LableList = this.dynamicTags;
SetAdvertising(this.addMsg).then(res=>{
if(res.Code===1){
this.Success("操作成功");
this.closeRuleForm();
this.$emit('success');
}else {
this.Error(res.Message);
}
})
// }
},
//关闭窗口
closeRuleForm() {
this.$emit('close');
this.persistent = false
},
// 标签
handleInputConfirm() {
let inputValue = this.inputValue;
if (inputValue) {
this.dynamicTags.push(inputValue);
}
this.inputVisible = false;
this.inputValue = '';
},
showInput() {
this.inputVisible = true;
this.$nextTick(_ => {
this.$refs.saveTagInput.$refs.input.focus();
});
},
//删除标签
handleClose(tag) {
this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
},
},
}
</script>
<style scoped>
.input-new-tag {
width: 90px;
margin-left: 10px;
vertical-align: bottom;
margin-right: 5px;
}
.el-tag {
margin-right: 5px;
}
.el-form-item__content {
line-height: 0;
}
.el-button{
line-height: 30px;
padding-top: 0;
padding-bottom: 0;
height: 32px;
margin-top: 8px;
}
</style>
<template id="app-map">
<div class="app-map">
<el-form label-width="80px" size="small">
<el-row>
<el-col :span="12">
<el-form-item label="地址搜索">
<el-input placeholder="请输入具体地址" @keyup.enter.native="mapSearch" v-model="mapKeyword">
<el-button @click="mapSearch" slot="append" icon="el-icon-search">
</el-button>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="地址">
<el-input disabled v-model="newAddress"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="纬度|经度">
<el-input disabled v-model="lat_long"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="app-map" id="container" :style="style"></div>
<span style="height:30px;display:none" id="city"></span>
<div slot="footer" class="dialog-footer" style="text-align:right;margin-top:30px;">
<el-button type="primary" size="small" @click="confirm">确 定</el-button>
</div>
</div>
</template>
<script>
export default {
props: {
width: String,
height: String,
lat: String,
long: String,
address: {
type: String,
default: '',
},
title: String,
},
data() {
return {
longitude: '', // 经度(大)
latitude: '', // 纬度(小)
lat_long: '',
markers: [],
map: [],
searchService: {},
mapKeyword: '',
dialogVisible: false,
newAddress: '',
city: '',
};
},
created() {
},
methods: {
// 初始化地图
initMap() {
let self = this;
let center = new qq.maps.LatLng(self.latitude, self.longitude); // 默认坐标
self.map = new qq.maps.Map(
document.getElementById("container"), {
center: center,
zoom: 13, // 缩放级别
}
);
let citylocation = new qq.maps.CityService({
map: self.map,
complete: function (results) {
self.city = results.detail.name;
self.map.setCenter(results.detail.latLng);
let marker = self.setMarker(results.detail.latLng);
self.markers.push(marker);
}
});
// 搜索服务 默认获取当前地址
if (!self.lat && !self.long) {
citylocation.searchLocalCity()
} else {
self.latitude = self.lat;
self.longitude = self.long;
self.lat_long = self.lat + ',' + self.long;
citylocation.searchCityByLatLng(new qq.maps.LatLng(self.latitude, self.longitude));
}
this.clickEvent(center);
this.initSearch();
},
// 地图点击事件
clickEvent(center) {
let self = this;
let listener = qq.maps.event.addListener(this.map, 'click', function (event) {
self.longitude = event.latLng.getLng().toFixed(6);
self.latitude = event.latLng.getLat().toFixed(6);
self.lat_long = self.latitude + ',' + self.longitude;
self.getAddressBylatLong();
let coord = new qq.maps.LatLng(self.latitude, self.longitude);
let marker = self.setMarker(coord);
self.markers.push(marker);
});
},
// 根据经纬度获取地址信息
getAddressBylatLong() {
let self = this;
// 根据经纬度查询城市信息
let geocoder = new qq.maps.Geocoder({
complete: function (result) {
self.newAddress = result.detail.address;
}
});
let coord = new qq.maps.LatLng(self.latitude, self.longitude);
geocoder.getAddress(coord);
},
// 添加标注
setMarker(coord) {
let self = this;
// 添加标注
let marker = new qq.maps.Marker({
map: self.map,
position: coord
});
//获取标记的点击事件
qq.maps.event.addListener(marker, 'click', function (event) {
self.longitude = event.latLng.getLng().toFixed(6);
self.latitude = event.latLng.getLat().toFixed(6);
self.lat_long = self.latitude + ',' + self.longitude;
self.getAddressBylatLong();
});
return marker;
},
// 清除地址坐标
clearOverLays() {
//清除地图上的marker
let overlay;
while (overlay = this.markers.pop()) {
overlay.setMap(null);
}
},
initSearch() {
let self = this;
let latlngBounds = new qq.maps.LatLngBounds();
//设置Poi检索服务,用于本地检索、周边检索
self.searchService = new qq.maps.SearchService({
//设置搜索范围为
location: self.city,
//设置动扩大检索区域。默认值true,会自动检索指定城市以外区域。
autoExtend: true,
//检索成功的回调函数
complete: function (results) {
//设置回调函数参数
let pois = results.detail.pois;
if (!pois) {
alert("输入详细地址搜索更准确");
return false;
}
for (let i = 0, l = pois.length; i < l; i++) {
let poi = pois[i];
//扩展边界范围,用来包含搜索到的Poi点
latlngBounds.extend(poi.latLng);
let marker = self.setMarker(poi.latLng)
marker.setTitle(i + 1);
self.markers.push(marker);
}
//调整地图视野
self.map.fitBounds(latlngBounds);
},
//若服务请求失败,则运行以下函数
error: function () {
alert("出错了。");
}
});
},
// 地址搜索
mapSearch() {
this.clearOverLays();
this.searchService.search(this.mapKeyword);
},
confirm() {
this.$emit('map-submit', {
lat: this.latitude,
long: this.longitude,
address: this.newAddress
});
},
},
computed: {
style() {
let width = '100%';
let height = '400px';
if (this.width) {
width = this.width + (isNaN(this.width) ? '' : 'px');
}
if (this.height) {
height = this.height + (isNaN(this.height) ? '' : 'px');
}
return `width:${width};height:${height};`;
},
},
mounted() {
this.newAddress = this.address ? this.address : '';
this.mapKeyword = this.newAddress;
this.initMap();
if(this.mapKeyword!=''){
this.mapSearch();
}
}
};
</script>
......@@ -277,8 +277,9 @@
<tbody v-for="(nItem,nIndex) in DefaultPlanTimeList" :key="nIndex+10000">
<tr v-for="(sItem,sIndex) in nItem.TimeList">
<td :rowspan="nItem.TimeList.length" v-if="sIndex==0" style="position:relative;">
<q-select filled style="width:220px;" stack-label multiple v-model="nItem.DateList" ref="DateList" :options="checkedDays"
:label="objOption.ClassStyle==1?'选择周几':'选择日期'" :dense="false" class="col-6" emit-value map-options clearable>
<q-select filled style="width:220px;" stack-label multiple v-model="nItem.DateList" ref="DateList"
:options="checkedDays" :label="objOption.ClassStyle==1?'选择周几':'选择日期'" :dense="false" class="col-6"
emit-value map-options clearable>
</q-select>
<a @click="deletePlan(nIndex)" style="color:blue;cursor:pointer;position:absolute;">删除</a>
</td>
......@@ -307,9 +308,10 @@
class="col-6 q-pr-lg q-pb-lg" label="学习课时" @keyup.native="checkInteger(objOption,'ClassHours')" />
</div>
<div class="col-6">
<q-select filled stack-label option-value="CTypeId" option-label="CTypeName" v-model="objOption.ClassType"
ref="CouseId" :options="classTypeList" label="班级类型" :dense="false" class="col-6 q-pr-lg q-pb-lg"
emit-value map-options />
<q-select label="课时分钟数" filled stack-label v-model="objOption.ClassHourMinute"
:options="ClassHourMinuteArray" option-value="Id" option-label="Name" :dense="false"
class="col-6 q-pr-lg q-pb-lg" emit-value map-options>
</q-select>
</div>
</div>
<div class="row wrap" style="margin-top:30px;">
......@@ -384,6 +386,7 @@
OutRemark: '', //对外备注
CompleteProgress: 0, //完成进度
ClassType: 1, //班级类型
ClassHourMinute: 45, //课时分钟数
},
optionTitle: "",
saveCourseLoading: false,
......@@ -439,10 +442,19 @@
value: '7',
icon: 7
}],
ClassHourMinuteArray: [{
Id: 45,
Name: 45
},
{
Id: 60,
Name: 60
},
],
//选中日期/星期
checkedDays: [],
//默认上课时间数组
DefaultPlanTimeList: [ ],
DefaultPlanTimeList: [],
}
},
created() {
......@@ -513,6 +525,7 @@
this.objOption.ClassStatus = TempData.ClassStatus;
this.objOption.InnerRemark = TempData.InnerRemark;
this.objOption.ClassType = TempData.ClassType;
this.objOption.ClassHourMinute = TempData.ClassHourMinute;
//默认时间
if (TempData.DefaultTimeList && TempData.DefaultTimeList.length > 0) {
this.DefaultPlanTimeList = TempData.DefaultTimeList;
......
......@@ -47,29 +47,29 @@
<div class="drawerTop">
<div style="display:flex;align-items:center;">
<q-avatar size="md" style="background:#d4dfff;color:#2961FE;font-weight:bold;">
{{setingObj.ClassName.substring(0,1)}}
<template v-if="classObj.ClassName">{{classObj.ClassName.substring(0,1)}}</template>
</q-avatar>
<div class="className">
<div class="classFirst">{{setingObj.ClassName}}</div>
<div style="color:#666666;font-size:12px;">{{setingObj.CourseName}}</div>
<div class="classFirst">{{classObj.ClassName}}</div>
<div style="color:#666666;font-size:12px;">{{classObj.CourseName}}</div>
</div>
<div class="classStatus">{{setingObj.ClassStatusStr}}</div>
<div class="classStatus">{{classObj.ClassStatusStr}}</div>
</div>
</div>
<div style="margin:20px;font-size:12px;">
<div class="row wrap ">
<div class="col-6">
<span class="normalName">老师名称:</span>
<span class="normalInner">{{setingObj.TeacherName}}</span>
<span class="normalInner">{{classObj.TeacherName}}</span>
</div>
<div class="col-6">
<span class="normalName">开班时间:</span>
<span class="normalInner">
<template v-if="setingObj.NewPlanDateTime">
{{setingObj.NewPlanDateTime}}
<template v-if="classObj.NewPlanDateTime">
{{classObj.NewPlanDateTime}}
</template>
<template v-else>
{{setingObj.OpenTime}}
{{classObj.OpenTime}}
</template>
</span>
</div>
......@@ -77,9 +77,9 @@
<div class="row wrap" style="margin-top:20px;">
<div class="col-6" style="display:flex;align-items:center;">
<span class="normalName">课程进度:</span>
<q-linear-progress rounded size="20px" :value="getProgress(setingObj.CompleteProgress,100)"
<q-linear-progress rounded size="20px" :value="getProgress(classObj.CompleteProgress,100)"
style="background-color:#EEEEEF;color:#3FC4FF;display:inline-block;width:30%;margin-right:10px;" />
{{setingObj.CompleteProgress}}%
{{classObj.CompleteProgress}}%
</div>
</div>
</div>
......@@ -110,6 +110,9 @@
</template>
<script>
import {
getClassInfo
} from '../../api/school/index'
import lessForm from '../course/lesson-form';
import recordForm from '../course/record-form';
import classlogForm from '../course/classlog-form';
......@@ -132,15 +135,33 @@
persistent: true,
tabCheck: 'first', //默认选第一个
loading: false,
classObj:{},
}
},
created() {
},
watch: {
setingObj: {
handler(newValue) {
this.queryClassInfo();
},
immediate: true
}
},
mounted() {
// this.queryClassInfo();
},
methods: {
queryClassInfo() {
getClassInfo({
ClassId: this.setingObj.ClassId
}).then(res => {
if (res.Code == 1) {
this.classObj=res.Data;
}
})
},
closeShenheForm() {
this.persistent = false;
this.$emit('close');
......
<style>
.classLog {
margin: 0 20px;
height: 600px;
padding-bottom:70px;
overflow: auto;
}
......@@ -46,6 +46,8 @@
</q-timeline-entry>
</template>
</q-timeline>
<q-pagination class="full-width justify-start" v-model="msg.PageIndex" color="primary" :max="pageCount"
:input="true" @input="changePage" />
</div>
</template>
<script>
......@@ -66,11 +68,12 @@
return {
msg: {
PageIndex: 1,
PageSize: 12,
PageSize: 6,
School_Id: 0,
ClassId: 0
},
dataList: [],
pageCount:0
}
},
created() {},
......@@ -84,9 +87,15 @@
queryClassLogPageList(this.msg).then(res => {
if (res.Code == 1) {
this.dataList = res.Data.PageData;
this.pageCount = res.Data.PageCount;
}
})
},
//翻页
changePage(val) {
this.msg.PageIndex = val;
this.getClassLog()
}
},
watch: {
setingObj: function (val, oldval) {
......
This diff is collapsed.
......@@ -62,14 +62,29 @@
<span style="color:green;" v-if="props.row.IsRenew==1"></span>
</q-td>
</template>
<template v-slot:body-cell-GuestName="props">
<q-td auto-width :props="props">
<span v-if="props.row.GuestState==1">{{props.row.GuestName}}</span>
<span style="color:red;cursor:pointer" v-else>{{props.row.GuestName}}
<q-tooltip :offset="[10, 10]">
{{props.row.GuestStateStr}}
</q-tooltip>
</span>
</q-td>
</template>
<template v-slot:body-cell-StuType="props">
<q-td auto-width :props="props">
<span v-if="props.row.IsChaBan==0">正常报入</span>
<span style="color:red;" v-if="props.row.IsChaBan==1">
插班报入
<q-tooltip :offset="[10, 10]">
<q-tooltip :offset="[10, 10]">
开始课时:{{props.row.StartClassHours}}<br />
{{props.row.CourseName}}
课程: {{props.row.CourseName}}<br />
生效日期: {{props.row.EffectTime}}<br />
生效状态: {{props.row.EffectStatusStr}}<br />
<template v-if="props.row.UpOrderId&&props.row.UpOrderId>0">
前置订单: {{props.row.UpOrderId}}<br />
</template>
</q-tooltip>
</span>
</q-td>
......@@ -197,14 +212,13 @@
}
})
},
//获取学员信息
getStudentData() {
this.studentList = [];
queryClassStudent({
ClassId: this.setingObj.ClassId,
School_Id: this.setingObj.School_Id
School_Id: this.setingObj.School_Id,
QEffectStatus: 2,
}).then(res => {
if (res.Code == 1) {
this.studentList = res.Data;
......
This diff is collapsed.
......@@ -50,7 +50,6 @@
//初始化表单
initObj() {
GetClassLessPlanList({}).then(res => {
if (res.Code == 1) {
this.tableData = res.Data;
this.tableData.forEach(x => {
......
<style>
</style>
<template>
<div>
<el-collapse v-if="dayData&&dayData.SubList&&dayData.SubList.length>0">
<el-collapse-item v-for="(subItem,subIndex) in dayData.SubList" :key="subIndex" :name="subIndex">
<template slot="title">
<div class="plan_Tdiv">
<span v-if="subItem.TimeStr==='早上'" class="commonTimeStr greenTime">{{subItem.TimeStr}}</span>
<span v-if="subItem.TimeStr==='下午'" class="commonTimeStr blueTime">{{subItem.TimeStr}}</span>
<span v-if="subItem.TimeStr==='晚上'" class="commonTimeStr orangeTime">{{subItem.TimeStr}}</span>
<span v-if="subItem.ClassType==2">试听课</span>
<span style="color:red;margin:0 5px;">{{subItem.TeacherName}}</span>
<span>[{{subItem.RoomName}}]</span>
</div>
</template>
<div class="plan_Inner">
<div class="plan_LeftTitle">上课时间:</div>
<div class="plan_RightInner">{{subItem.StartTime}}-{{subItem.EndTime}}</div>
</div>
<div class="plan_Inner" v-if="subItem.ClassName">
<div class="plan_LeftTitle">班级:</div>
<div class="plan_RightInner">{{subItem.ClassName}}</div>
</div>
<div class="plan_Inner">
<div class="plan_LeftTitle">课程名称:</div>
<div class="plan_RightInner">{{subItem.CourseName}}</div>
</div>
<div class="plan_Inner" v-if="subItem.GuestList&&subItem.GuestList.length>0">
<div class="plan_LeftTitle">学生名称:</div>
<div class="plan_RightInner">
<span style="margin-right:10px;" v-for="tItem in subItem.GuestList">{{tItem.GuestName}}</span>
</div>
</div>
<div class="plan_Inner" style="align-items:center;" v-if="subItem.CompleteProgress>=0">
<div class="plan_LeftTitle">课程进度:</div>
<div class="plan_RightInner">
<el-progress :percentage="subItem.CompleteProgress"></el-progress>
</div>
</div>
</el-collapse-item>
</el-collapse>
</div>
</template>
<script>
export default {
props: {
dayData: {
type: Object,
default: null
}
},
components: {
},
data() {
return {
}
},
created() {},
mounted() {
},
methods: {
}
}
</script>
\ No newline at end of file
......@@ -107,7 +107,7 @@
emit-value map-options />
</div>
</div>
<div>
<div style="padding-bottom:50px;">
<template v-if="checkType==1">
<q-table :pagination="msg" no-data-label="暂无相关数据" flat class="sticky-column-table" separator="none"
:data="dataList" :columns="columns">
......@@ -121,7 +121,6 @@
<div v-for="(item,index) in props.row.TimeList">
{{index+1}}节课 {{item.StartTime}}-{{item.EndTime}}
</div>
</q-td>
</template>
<template v-slot:body-cell-CheckNum="props">
......@@ -156,7 +155,6 @@
</q-popup-proxy>
</span>
</div>
</q-td>
</template>
<template v-slot:bottom>
......@@ -278,7 +276,6 @@
this.msg.ClassId = this.setingObj.ClassId;
this.msg.TeacherId = this.setingObj.Teacher_Id;
GetClassPlanLogPageList(this.msg).then(res => {
console.log("res,", res.Data)
if (res.Code == 1) {
this.dataList = res.Data.PageData;
this.pageCount = res.Data.PageCount;
......
<style>
.addDutyUpload .ItemImgDiv{
width:118px;
height:118px;
.addDutyUpload .ItemImgDiv {
width: 118px;
height: 118px;
position: relative;
margin:0 10px 10px 0;
display:inline-block;
margin: 0 10px 10px 0;
display: inline-block;
}
.addDutyUpload .avatar-uploader .el-upload {
border-radius: 6px;
cursor: pointer;
width:100%;
height:100%;
color:#8c939d;
width: 100%;
height: 100%;
color: #8c939d;
position: relative;
overflow: hidden;
}
.addDutyMain{
display:inline-block;
width:118px;
height:118px;
font-size:70px;
.addDutyMain {
display: inline-block;
width: 118px;
height: 118px;
font-size: 70px;
border: 1px dashed #d9d9d9;
line-height:120px;
line-height: 120px;
}
</style>
<template>
<q-dialog v-model="persistent" content-class="bg-grey-1" transition-show="scale" transition-hide="scale">
......@@ -31,17 +34,7 @@
<div class="text-h6">{{(saveObj&&saveObj.Id>0)?"修改值班事项":"新增值班事项"}}</div>
</q-card-section>
<q-card-section class="q-pt-none scroll" style="max-height: 70vh">
<div class="row wrap">
<div class="col-6">
<q-input filled stack-label max-length="20" :dense="false" v-model="msg.ItemName" ref="ItemName"
class="col-6 q-pr-lg q-pb-lg" label="事项名称" :rules="[val => !!val || '请填写事项名称']" />
</div>
<div class="col-6">
<q-select stack-label color="primary" filled clearable label="选择事项类型" option-value="Id" option-label="Name"
:options="itemTypeOptions" v-model="msg.ItemType" ref="ItemType" emit-value map-options
:rules="[val => !!val || '请选择事项类型']" />
</div>
</div>
<div class="row wrap">
<div class="col-6">
<q-select stack-label v-model="FrequencyArr" multiple :options="frequencyOptions" color="primary" filled
......@@ -54,31 +47,47 @@
@input="getDutyFrequencyBySchoolIds" emit-value map-options :rules="[val => !!val || '请选择校区']" />
</div>
</div>
<div class="row wrap">
<div class="col-6">
<q-select stack-label v-model="msg.DutyCategory" :options="dutyCategoryList" color="primary" filled
label="分类" option-label="Name" option-value="Id" ref="DutyCategory" emit-value map-options
:rules="[val => !!val || '请选择分类']" class="col-6 q-pr-lg q-pb-lg" />
</div>
<div class="col-6">
<q-select stack-label v-model="msg.DutyType" :options="msg.DutyCategory==1?dutyTypeList:dutyTypeList2" color="primary" filled label="类型"
option-label="Name" option-value="Id" ref="DutyType" emit-value
map-options :rules="[val => !!val || '请选择类型']" />
</div>
</div>
<div class="row wrap" v-if="msg.DutyType==2">
<div class="col-6 q-pr-lg">
<q-select stack-label color="primary" filled clearable label="选择事项类型" option-value="Id" option-label="Name"
:options="itemTypeOptions" v-model="msg.ItemType" ref="ItemType" emit-value map-options
:rules="[val => !!val || '请选择事项类型']" />
</div>
</div>
<div class="row wrap">
<div class="col-12">
<q-input filled type="textarea" :rows="2" stack-label :dense="false" v-model="msg.ItemName" ref="ItemName"
class="col-12 q-pb-lg" label="事项名称" :rules="[val => !!val || '请填写事项名称']" />
</div>
</div>
<div class="row wrap addDutyUpload">
<div class="col-12">
<div style="display:flex;flex-wrap: wrap;">
<div v-if="msg.ItemImgList&&msg.ItemImgList.length>0" v-for="(item,index) in msg.ItemImgList">
<div class="ItemImgDiv">
<q-img :src="item" spinner-color="white" style="height: 100%;height:100%" />
<q-btn size="7px" @click="deleteItemImg(index)" style="position:absolute;right:-5px;top:-5px;" round color="red" icon="iconfont icon-guanbi1" />
<q-btn size="7px" @click="deleteItemImg(index)" style="position:absolute;right:-5px;top:-5px;" round
color="red" icon="iconfont icon-guanbi1" />
</div>
</div>
<el-upload
class="avatar-uploader addDutyMain"
action=""
:before-upload="uploadFile"
:show-file-list="false"
>
<el-upload class="avatar-uploader addDutyMain" action="" :before-upload="uploadFile"
:show-file-list="false">
<i class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
</div>
<!-- <div class="col-6" style="margin-top:10px;">
<q-uploader :style="{ backgroundImage: 'url(' + BasicImg + ')' }"
style="width:auto;height:200px;background-repeat:no-repeat;background-size:cover;" flat hide-upload-btn
max-files="10" label="示例图片" multiple accept=".jpg, image/*" :factory="uploadFile" auto-upload>
</q-uploader>
</div> -->
</div>
</q-card-section>
<q-card-actions align="right" class="bg-white">
......@@ -124,8 +133,36 @@
ItemType: 0,
Shifts: "",
ItemImgList: [],
DutyCategory: '', //值班事项分类(1-工作清单,2-突发事项,3-交接说明)
DutyType: '', //值班类型(1-规则事项,2-值班事项)
},
BasicImg: "",
dutyCategoryList: [{
Id: 1,
Name: "工作清单"
},
{
Id: 2,
Name: "突发事件"
},
{
Id: 3,
Name: "交接说明"
},
],
dutyTypeList: [{
Id: 1,
Name: "规则事项"
},
{
Id: 2,
Name: "值班事项"
},
],
dutyTypeList2:[{
Id: 1,
Name: "规则事项"
}],
persistent: true,
schoolOptions: [],
frequencyOptions: [],
......@@ -165,6 +202,9 @@
this.msg.ItemType = tempData.ItemType;
this.msg.Shifts = tempData.Shifts;
this.msg.ItemImgList = tempData.ItemImgList;
this.msg.DutyCategory = tempData.DutyCategory;
this.msg.DutyType = tempData.DutyType;
if (tempData.ShiftList && tempData.ShiftList.length > 0) {
this.FrequencyArr = tempData.ShiftList.map(i => i * 1);
}
......@@ -194,18 +234,28 @@
this.msg.ItemType = "";
this.msg.Shifts = "";
this.msg.ItemImgList = [];
this.msg.DutyCategory = "";
this.msg.DutyType = "";
this.BgImg = "";
},
//保存信息
saveRule() {
this.$refs.ItemName.validate();
this.$refs.ItemType.validate();
this.$refs.Shifts.validate();
this.$refs.ItemSchools.validate();
this.$refs.DutyCategory.validate();
this.$refs.DutyType.validate();
if(this.msg.DutyType==2){
this.$refs.ItemType.validate();
if(this.$refs.ItemType.hasError){
return
}
}
if (!this.$refs.ItemName.hasError &&
!this.$refs.ItemType.hasError &&
!this.$refs.Shifts.hasError &&
!this.$refs.ItemSchools.hasError) {
!this.$refs.ItemSchools.hasError &&
!this.$refs.DutyCategory.hasError &&
!this.$refs.DutyType.hasError) {
this.msg.ItemSchools = this.schoolArr.toString();
this.msg.Shifts = this.FrequencyArr.toString();
saveDutyItem(this.msg).then(res => {
......@@ -246,7 +296,6 @@
getSchoolDropdown({}).then(res => {
if (res.Code == 1) {
this.schoolOptions = res.Data;
console.log(this.schoolOptions,'schoolOptions');
}
})
},
......@@ -259,8 +308,8 @@
})
},
//删除图片
deleteItemImg(index){
this.msg.ItemImgList.splice(index,1);
deleteItemImg(index) {
this.msg.ItemImgList.splice(index, 1);
}
},
}
......
......@@ -3,12 +3,17 @@
<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 @input="resetSearch" clearable standout="bg-primary text-white" class="col-6 q-pr-lg q-pr-lg"
v-model="qMsg.ItemName" label="事项名称" maxlength="20" @clear="resetSearch" />
<q-select @input="resetSearch" clearable stack-label v-model="qMsg.DutyCategory" :options="dutyCategoryList"
color="primary" filled label="分类" option-label="Name" option-value="Id" ref="DutyCategory" emit-value
map-options @clear="resetSearch" />
</div>
<div class="col-3">
<q-select @input="resetSearch" clearable multiple standout="bg-primary text-white" option-value="SId"
option-label="SName" v-model="qMsg.ItemSchools" :options="schoolOptions" emit-value map-options label="校区"
<q-input @input="resetSearch" clearable standout="bg-primary text-white" v-model="qMsg.ItemName" label="事项名称"
maxlength="20" @clear="resetSearch" />
</div>
<div class="col-3">
<q-select @input="resetSearch" filled clearable multiple option-value="SId" option-label="SName"
v-model="qMsg.ItemSchools" :options="schoolOptions" emit-value map-options label="校区"
@clear="resetSearch" />
</div>
</div>
......@@ -32,8 +37,16 @@
<q-td key="ItemName" :props="props">
<div style="width:500px;word-break:break-word;white-space:normal;">{{props.row.ItemName}}</div>
</q-td>
<q-td key="DutyCategoryStr" :props="props">
<div>{{props.row.DutyCategoryStr}}</div>
</q-td>
<q-td key="DutyTypeStr" :props="props">
<div>{{props.row.DutyTypeStr}}</div>
</q-td>
<q-td key="ItemType" :props="props">
{{props.row.ItemType==1?'选择':'手动填写'}}
<template v-if="props.row.DutyType==2">
{{props.row.ItemType==1?'选择':'手动填写'}}
</template>
</q-td>
<q-td key="ShiftsName" :props="props">
{{props.row.ShiftsName}}
......@@ -81,8 +94,20 @@
align: 'left'
},
{
name: 'ItemType',
name: 'DutyCategoryStr',
label: '分类',
field: 'DutyCategoryStr',
align: 'left',
},
{
name: 'DutyTypeStr',
label: '类型',
field: 'DutyTypeStr',
align: 'left',
},
{
name: 'ItemType',
label: '填写方式',
field: 'ItemType',
align: 'left',
},
......@@ -111,10 +136,24 @@
rowsPerPage: 10,
ItemName: "", //事项名称
ItemSchools: [], //所属校区
DutyCategory: ''
},
pageCount: 0,
isShowAdd: false, //是否显示添加事项弹窗
itemObj: {}, //事项对象
dutyCategoryList: [{
Id: 1,
Name: "工作清单"
},
{
Id: 2,
Name: "突发事件"
},
{
Id: 3,
Name: "交接说明"
},
]
}
},
created() {
......
This diff is collapsed.
<style>
.editOrderDrawerTop {
width: 100%;
height: 50px;
display: flex;
justify-content: space-between;
background-color: #f0f5fb;
padding: 5px 10px;
align-items: center;
}
</style>
<!--订单操作-->
<template>
<q-dialog v-model="IsShowEditOrder" maximized full-height seamless position="right">
<q-card style="margin-top:61px;width:500px" class="no-border-radius classinfo_Dialog">
<div class="editOrderDrawerTop">
<div style="display:flex;align-items:center;margin-left:10px;">
<span class="drawer_Span">{{OrderMsg.Id>0?"修改订单":"立即下单"}}</span>
</div>
</div>
<div style="padding:20px 15px;">
<q-input filled stack-label maxlength="30" :dense="false"
v-model="OrderMsg.LinkMan" class="col-12" label="姓名"
:rules="[val => !!val || '请填写姓名']" />
<q-input filled stack-label maxlength="30" :dense="false"
v-model="OrderMsg.LinkTel" class="col-12" label="联系电话"
:rules="[val => !!val || '请填写联系电话']" />
<q-input filled stack-label :dense="false" v-model="OrderMsg.Remark" style="margin-top: 20px"
type="textarea" class="col-12" label="备注" />
<div style="margin:30px 10px 70px 0;">
<q-btn class="q-mr-md" label="取消" @click="closeEditOrder" />
<q-btn color="accent" class="q-mr-md" label="保存" @click="saveOrderInfo()" />
</div>
</div>
</q-card>
<div class="dialog-out-close" @click="closeEditOrder"
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>
</template>
<script>
export default {
props: {
saveObj: {
type: Object,
default: null,
},
},
data() {
return {
IsShowEditOrder: true,
OrderMsg: {
Id:0,
LinkMan:"",
LinkTel:"",
Remark:""
},
}
},
mounted() {
this.OrderMsg.Id=this.saveObj.Id
},
watch: {
},
methods: {
//关闭弹窗
closeEditOrder() {
this.IsShowEditOrder = false;
this.$emit('close')
},
saveOrderInfo(){
},
}
}
</script>
This diff is collapsed.
......@@ -30,12 +30,29 @@
:rules="[val => !!val || '请选择课程']" label="选择课程" @input="changePrice" />
<q-input filled stack-label :dense="false" v-model="OrderMsg.StartClassHours" :disable="modityOrderType==2"
@keyup.native="checkInteger(OrderMsg,'StartClassHours')" ref="StartClassHours" @input="countPrice"
class="col-12" label="起始课时" :rules="[val => !!val || '请填起始课时']" />
<q-input filled stack-label :dense="false" v-model="OrderMsg.EffectTime" :disable="modityOrderType==2"
ref="EffectTime" @input="countPrice" class="col-12" label="生效时间" :rules="[val => !!val || '请填生效时间']" />
<q-select filled option-value="UpOrderId" :disable="modityOrderType==2" option-label="CourseName"
ref="UpOrderId" v-model="OrderMsg.UpOrderId" :options="CourseList" emit-value map-options class="q-pb-lg"
label="前置订单" @input="changePrice" />
class="col-12 q-pb-lg" label="起始课时" />
<q-input filled v-model="OrderMsg.EffectTime" ref="EffectTime" :rules="[val => !!val || '请填生效时间']"
class="col-6 q-pb-lg" :disable="modityOrderType==2" mask="date" label="生效时间">
<template v-slot:append>
<q-icon name="event" class="cursor-pointer">
<q-popup-proxy ref="qDateProxy1" transition-show="scale" transition-hide="scale">
<q-date v-model="OrderMsg.EffectTime" @input="() => $refs.qDateProxy1.hide()" />
</q-popup-proxy>
</q-icon>
</template>
</q-input>
<q-select filled option-value="OrderId" option-label="CourseName" class="q-pb-lg"
:disable="modityOrderType==2" v-model="OrderMsg.UpOrderId" :options="beforeOrderList" emit-value map-options
label="前置订单">
<template v-slot:option="{ itemProps, itemEvents, opt, selected, toggleOption }">
<q-item v-bind="itemProps" v-on="itemEvents">
<q-item-section>
<q-item-label><span style="color:blue">{{opt.OrderId}}</span> {{opt.CourseName}} {{opt.ClassName}}
{{getStudent(opt.GuestList)}}</q-item-label>
</q-item-section>
</q-item>
</template>
</q-select>
</template>
<template v-if="modityOrderType==1">
<q-input filled stack-label :dense="false" v-model="OrderMsg.Unit_Price"
......@@ -58,7 +75,7 @@
v-model="OrderMsg.OrderSource" :options="SourceEnumList" emit-value map-options class="q-pb-lg"
label="客人来源" />
<q-select :disable="(modityOrderType==2)" v-model="OrderMsg.HelpEnterId" :options="EmployeeList" filled
use-input label="协助人员" option-label="EmployeeName" option-value="Id" ref="EmployeeName" class="col-6 q-pb-lg"
use-input label="协助老师" option-label="EmployeeName" option-value="Id" ref="EmployeeName" class="col-6 q-pb-lg"
emit-value map-options @filter="filterFn">
<template v-slot:no-option>
<q-item>
......@@ -98,6 +115,7 @@
getOrderSourceEnumList, //获取订单来源 枚举
setClassOrder, //修改订单
queryChaClassInfo,
GetSelectClassOrderList //获取前置下拉
} from '../../api/sale/sale'
import {
queryEmployee
......@@ -142,7 +160,7 @@
OrderId: 0,
OrderType: 0, //订单类型(1-班级课程订单,2-留学就业订单)
SourceId: 0, //来源编号
HelpEnterId: 0, //协助人员编号
HelpEnterId: 0, //协助老师编号
GeneralOccupation: "", //一般同行
EduOccupation: "", //教育同行
IsLessPrice: 0, //是否少价 0 不少 1 少
......@@ -161,7 +179,8 @@
EmployeeList: [], //员工列表
AllemployeeList: [], //所有员工列表
CourseList: [], //课程列表
courseObj: {} //选择的课程
courseObj: {}, //选择的课程
beforeOrderList: [], //前置订单数据
}
},
created() {
......@@ -169,6 +188,7 @@
this.initConfig();
this.getOrderSEList();
this.getEmployee();
this.getSelectClass();
var localStorageData = window.localStorage["loginUserInfo"];
let ActionMenuList = JSON.parse(localStorageData).data.ActionMenuList
if (ActionMenuList && ActionMenuList.length > 0) {
......@@ -242,8 +262,16 @@
}
}
} else {
this.OrderMsg.Unit_Price = 0;
this.UnitPrice = 0;
if (this.saveObj.ClassId) {
this.OrderMsg.ClassId = this.saveObj.ClassId;
}
if (this.saveObj.Unit_Price) {
this.OrderMsg.Unit_Price = this.saveObj.Unit_Price;
this.UnitPrice = this.saveObj.Unit_Price;
}
if (this.saveObj.SourceId) {
this.OrderMsg.SourceId = this.saveObj.SourceId;
}
this.courseObj = {};
}
this.countPrice();
......@@ -275,8 +303,8 @@
this.OrderMsg.CourseId = tempData.CourseId;
this.OrderMsg.StartClassHours = tempData.StartClassHours;
this.OrderMsg.IsChaBan = tempData.IsChaBan;
this.OrderMsg.EffectTime=tempData.EffectTime;
this.OrderMsg.UpOrderId=tempData.UpOrderId;
this.OrderMsg.EffectTime = tempData.EffectTime;
this.OrderMsg.UpOrderId = tempData.UpOrderId;
this.UnitPrice = this.OrderMsg.Unit_Price;
this.IsShowEditOrder = true;
}
......@@ -294,8 +322,8 @@
this.OrderMsg.CourseId = '';
this.OrderMsg.StartClassHours = 0;
this.OrderMsg.IsChaBan = this.isChaBan;
this.OrderMsg.EffectTime="";
this.OrderMsg.UpOrderId=0;
this.OrderMsg.EffectTime = "";
this.OrderMsg.UpOrderId = 0;
this.OrderMsg.OrderType = this.orderType;
if (this.OrderMsg.OrderType == 2) {
this.OrderMsg.OrderNature = 1;
......@@ -389,8 +417,8 @@
saveOrderInfo() {
if (this.isChaBan == 1) {
this.$refs.CourseId.validate();
this.$refs.StartClassHours.validate();
if (this.$refs.CourseId.hasError || this.$refs.StartClassHours.hasError) {
this.$refs.EffectTime.validate();
if (this.$refs.CourseId.hasError || this.$refs.EffectTime.hasError) {
return;
}
}
......@@ -427,6 +455,30 @@
}
}).catch(() => {})
},
//获取前置下拉数据
getSelectClass() {
var qMsg = {
ClassId: 0
};
if (this.saveObj.ClassId) {
qMsg.ClassId = this.saveObj.ClassId;
}
GetSelectClassOrderList(qMsg).then(res => {
if (res.Code == 1) {
this.beforeOrderList = res.Data;
}
})
},
getStudent(item) {
let str = ''
if (item && item.length > 1) {
str = item[0].GuestName + '等' + item.length + '人';
}
if (item.length == 1) {
str = item[0].GuestName;
}
return str
}
}
}
......
......@@ -155,15 +155,15 @@
<tr>
<td>培训课时数</td>
<td>
<q-input filled @keyup.native="checkPrice(objOption,'FirstClassHours')" @input="calcTotal()"
<q-input filled disable @keyup.native="checkPrice(objOption,'FirstClassHours')" @input="calcTotal()"
v-model="objOption.FirstClassHours" />
</td>
<td>
<q-input filled @keyup.native="checkPrice(objOption,'SecondClassHours')" @input="calcTotal()"
<q-input filled disable @keyup.native="checkPrice(objOption,'SecondClassHours')" @input="calcTotal()"
v-model="objOption.SecondClassHours" />
</td>
<td>
<q-input filled @keyup.native="checkPrice(objOption,'ThirdClassHours')" @input="calcTotal()"
<q-input filled disable @keyup.native="checkPrice(objOption,'ThirdClassHours')" @input="calcTotal()"
v-model="objOption.ThirdClassHours" />
</td>
<td>
......@@ -173,15 +173,15 @@
<tr>
<td>培训课程费</td>
<td>
<q-input filled @keyup.native="checkPrice(objOption,'FirstCourseFee')" @input="calcTotal()"
<q-input filled disable @keyup.native="checkPrice(objOption,'FirstCourseFee')" @input="calcTotal()"
v-model="objOption.FirstCourseFee" />
</td>
<td>
<q-input filled @keyup.native="checkPrice(objOption,'SecondCourseFee')" @input="calcTotal()"
<q-input filled disable @keyup.native="checkPrice(objOption,'SecondCourseFee')" @input="calcTotal()"
v-model="objOption.SecondCourseFee" />
</td>
<td>
<q-input filled @keyup.native="checkPrice(objOption,'ThirdCourseFee')" @input="calcTotal()"
<q-input filled disable @keyup.native="checkPrice(objOption,'ThirdCourseFee')" @input="calcTotal()"
v-model="objOption.ThirdCourseFee" />
</td>
<td>
......@@ -191,15 +191,15 @@
<tr>
<td>培训教材费</td>
<td>
<q-input filled @keyup.native="checkPrice(objOption,'FirstBookFee')" @input="calcTotal()"
<q-input filled disable @keyup.native="checkPrice(objOption,'FirstBookFee')" @input="calcTotal()"
v-model="objOption.FirstBookFee" />
</td>
<td>
<q-input filled @keyup.native="checkPrice(objOption,'SecondBookFee')" @input="calcTotal()"
<q-input filled disable @keyup.native="checkPrice(objOption,'SecondBookFee')" @input="calcTotal()"
v-model="objOption.SecondBookFee" />
</td>
<td>
<q-input filled @keyup.native="checkPrice(objOption,'ThirdBookFee')" @input="calcTotal()"
<q-input filled disable @keyup.native="checkPrice(objOption,'ThirdBookFee')" @input="calcTotal()"
v-model="objOption.ThirdBookFee" />
</td>
<td>
......@@ -209,15 +209,15 @@
<tr>
<td>培训课件费</td>
<td>
<q-input filled @keyup.native="checkPrice(objOption,'FirstClassFee')" @input="calcTotal()"
<q-input filled disable @keyup.native="checkPrice(objOption,'FirstClassFee')" @input="calcTotal()"
v-model="objOption.FirstClassFee" />
</td>
<td>
<q-input filled @keyup.native="checkPrice(objOption,'SecondClassFee')" @input="calcTotal()"
<q-input filled disable @keyup.native="checkPrice(objOption,'SecondClassFee')" @input="calcTotal()"
v-model="objOption.SecondClassFee" />
</td>
<td>
<q-input filled @keyup.native="checkPrice(objOption,'ThirdClassFee')" @input="calcTotal()"
<q-input filled disable @keyup.native="checkPrice(objOption,'ThirdClassFee')" @input="calcTotal()"
v-model="objOption.ThirdClassFee" />
</td>
<td>
......@@ -242,15 +242,15 @@
<tr>
<td>折让价格</td>
<td>
<q-input filled @keyup.native="checkPrice(objOption,'FirstDiscountMoney')" @input="calcTotal()"
<q-input filled disable @keyup.native="checkPrice(objOption,'FirstDiscountMoney')" @input="calcTotal()"
v-model="objOption.FirstDiscountMoney" />
</td>
<td>
<q-input filled @keyup.native="checkPrice(objOption,'SecondDiscountMoney')" @input="calcTotal()"
<q-input filled disable @keyup.native="checkPrice(objOption,'SecondDiscountMoney')" @input="calcTotal()"
v-model="objOption.SecondDiscountMoney" />
</td>
<td>
<q-input filled @keyup.native="checkPrice(objOption,'ThirdDiscountMoney')" @input="calcTotal()"
<q-input filled disable @keyup.native="checkPrice(objOption,'ThirdDiscountMoney')" @input="calcTotal()"
v-model="objOption.ThirdDiscountMoney" />
</td>
<td>
......
This diff is collapsed.
......@@ -86,7 +86,7 @@
OrderId: 0,
OrderType: 0, //订单类型(1-班级课程订单,2-留学就业订单)
SourceId: 0, //来源编号
HelpEnterId: 0, //协助人员编号
HelpEnterId: 0, //协助老师编号
GeneralOccupation: "", //一般同行
EduOccupation: "", //教育同行
IsLessPrice: 0, //是否少价 0 不少 1 少
......
<style>
.editOrderDrawerTop {
width: 100%;
height: 50px;
display: flex;
justify-content: space-between;
background-color: #f0f5fb;
padding: 5px 10px;
align-items: center;
}
</style>
<!--订单操作-->
<template>
<q-dialog v-model="IsShowEditOrder" maximized full-height seamless position="right">
<q-card style="margin-top:61px;width:500px" class="no-border-radius classinfo_Dialog">
<div class="editOrderDrawerTop">
<div style="display:flex;align-items:center;margin-left:10px;">
<span class="drawer_Span">约课详情</span>
</div>
</div>
<div style="padding:20px 15px;">
<q-input filled stack-label maxlength="100" readonly :dense="false" v-model="saveObj.VisitorName"
class="col-12 q-pb-lg" label="客户名称" />
<q-input filled stack-label maxlength="100" readonly :dense="false" v-model="saveObj.ClassDateStr"
class="col-12 q-pb-lg" label="日期" />
<q-input filled stack-label maxlength="100" readonly :dense="false" v-model="saveObj.ClassTime"
class="col-12 q-pb-lg" label="开始时间" />
<q-input filled stack-label maxlength="100" readonly :dense="false" v-model="saveObj.EndTime"
class="col-12 q-pb-lg" label="结束时间" />
<q-input filled stack-label maxlength="100" readonly :dense="false" v-model="saveObj.TeacherName"
class="col-12 q-pb-lg" label="老师" />
<q-input filled stack-label maxlength="100" readonly :dense="false" v-model="saveObj.RoomName"
class="col-12 q-pb-lg" label="教室" />
<q-input filled stack-label maxlength="100" readonly :dense="false" v-model="saveObj.OrderId"
class="col-12 q-pb-lg" label="订单编号" />
<q-input filled stack-label maxlength="100" readonly :dense="false" v-model="saveObj.ReserveStatusStr"
class="col-12 q-pb-lg" label="状态" />
<q-input filled stack-label :dense="false" readonly v-model="saveObj.ClassContent" type="textarea"
class="col-12 q-pb-lg" label="主讲内容" />
<div style="margin:30px 10px 70px 0;">
<q-btn class="q-mr-md" label="取消" @click="closeEditOrder" />
</div>
</div>
</q-card>
<div class="dialog-out-close" @click="closeEditOrder"
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>
</template>
<script>
export default {
props: {
saveObj: {
type: Object,
default: null,
}
},
data() {
return {
IsShowEditOrder: true
}
},
created() {
},
mounted() {},
watch: {
},
methods: {
//关闭弹窗
closeEditOrder() {
this.IsShowEditOrder = false;
this.$emit('close')
},
}
}
</script>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -31,7 +31,7 @@
ref="VisitorStatus" v-model="objOption.VisitorStatus" :options="statusList"
:rules="[val => !!val || '请选择状态']" emit-value map-options label="状态" />
<q-input filled stack-label :dense="false" v-model="objOption.Evaluate" ref="Evaluate" class="col-6 q-pb-lg"
label="兴趣课程" :rules="[val => !!val || '请输入兴趣课程']" />
label="意向评估" :rules="[val => !!val || '请输入意向评估']" />
</div>
<div class="row wrap">
<q-input filled stack-label type="textarea" maxlength="500" :dense="false" v-model="objOption.Remark"
......
This diff is collapsed.
......@@ -223,8 +223,7 @@
uploadFile(files) {
UploadSelfFile('studentIcon', files, res => {
if (res.Code == 1) {
console.log(211,res)
this.objOption.RoomPicList.push(res.FileUrl);
this.objOption.RoomPicList.push(res.FileUrl);
}
})
},
......@@ -236,17 +235,7 @@
}
</script>
<style>
/* .avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 143px;
height: 82px;
line-height: 82px;
text-align: center;
} */
.avatar-uploader .el-upload {
border-radius: 6px;
cursor: pointer;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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