Commit 8e3fed1c authored by 罗超's avatar 罗超

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

parents 99bb3d5f a2a7cbe9
......@@ -32,13 +32,12 @@ module.exports = function (ctx) {
// https://github.com/quasarframework/quasar/tree/dev/extras
extras: [
// 'ionicons-v4',
// 'mdi-v5',
'mdi-v5',
// 'fontawesome-v5',
// 'eva-icons',
// 'themify',
// 'line-awesome',
// 'roboto-font-latin-ext', // this or either 'roboto-font', NEVER both!
'roboto-font', // optional, you are not bound to it
'material-icons' // optional, you are not bound to it
],
......@@ -49,8 +48,8 @@ module.exports = function (ctx) {
env: ctx.dev ? {
//API: 'http://192.168.1.36:8300/api'
API: 'https://localhost:5001/api',
// API: 'http://192.168.20.24:8300/api',
// API: 'https://localhost:5001/api',
API: 'http://192.168.20.51:8088/api',
// API: 'http://testeduapi.oytour.com/api',
// API: 'http://192.168.20.9:8085/api',
// API: 'http://192.168.20.17:8017/api',
......@@ -158,7 +157,9 @@ module.exports = function (ctx) {
'QRadio',
'QBtnGroup'
],
// directives: [],
directives: [
'ClosePopup'
],
// Quasar plugins
plugins: [
......
......@@ -203,6 +203,78 @@ export function queryChapterTree(data) {
})
}
/**
* 保存课程章节
* @param {JSON参数} data
*/
export function saveChapter(data) {
return request({
url: "/Course/SetChapter",
method: 'post',
data
})
}
/**
* 保存课程章节
* @param {JSON参数} data
*/
export function getCourseRate(data) {
return request({
url: "/Course/GetCourseRateEnumList",
method: 'post',
data
})
}
/**
* 保存课程章节
* @param {JSON参数} data
*/
export function deleteChapters(data) {
return request({
url: "/Course/BatchRemoveChapter",
method: 'post',
data
})
}
/**
* 保存课程章节
* @param {JSON参数} data
*/
export function setChaptersRate(data) {
return request({
url: "/Course/BatchSetChapterRate",
method: 'post',
data
})
}
/**
* 批量更新章节编号和ID
* @param {JSON参数} data
*/
export function batchUpdateChapterNo(data) {
return request({
url: "/Course/SetBatchChapterNo",
method: 'post',
data
})
}
/**
* 修改章节名称
* @param {JSON参数} data
*/
export function updateChapterName(data) {
return request({
url: "/Course/SetChapterName",
method: 'post',
data
})
}
/**
* 获取课程销售端口
*/
......
......@@ -87,3 +87,27 @@ export function getEmployeeAddrBook(data)
data
})
}
/**
* 个人资料修改
*/
export function setEmployeeBaseInfo(data)
{
return request({
url: '/UserInfo/SetEmployeeBaseInfo',
method: 'post',
data
})
}
/**
* 个人资料-修改密码
*/
export function updateUserPassword(data)
{
return request({
url: '/UserInfo/UpdateUserPassword',
method: 'post',
data
})
}
......@@ -69,7 +69,8 @@
},
watch: {
value(newVal, oldVal) {
if (!this.isInputChange && newVal) {
console.log("监听到变化1",newVal,this.ue.isReady,this.isInputChange)
if (!this.isInputChange) {
if (this.ue) {
if (this.ue.isReady !== 1) {
let self = this;
......@@ -84,6 +85,7 @@
}, 100);
return;
}
console.log("监听到变化",newVal)
this.ue.setContent(newVal);
} else {
this.tempContent = newVal;
......@@ -222,6 +224,9 @@
fileType +
'" class="ans-insertaudio-module" module="_insertaudio">' + ' </iframe></p>';
},
reloadNewValue(){
this.isInputChange=false
},
loadUe() {
const _this = this;
//上传附件
......
......@@ -127,10 +127,9 @@
<q-input filled stack-label :dense="false" maxlength="8" v-model="addMsg.DefaultClassNum" label="默认班级人数"
ref="DefaultClassNum" class="q-pb-lg" @keyup.native="checkInteger(addMsg,'DefaultClassNum')"
:rules="[val => !!val || '请填写默认班级人数']" />
<q-input filled stack-label :dense="false" maxlength="8" v-model="addMsg.ClassNoPrefix" label="班级编码"
ref="ClassNoPrefix" class="q-pb-lg" @keyup.native="checkInteger(addMsg,'ClassNoPrefix')"
<q-input filled stack-label maxlength="8" v-model="addMsg.ClassNoPrefix" label="班级编码(字母)"
class="q-pb-lg" onkeyup="this.value=this.value.replace(/[^a-zA-Z]/g,'')"
/>
<q-card-actions align="right" class="bg-white">
<q-btn label="取消" flat color="grey-10" style="font-weight:400 !important" @click="persistent=false" />
<q-btn label="确认" color="accent q-px-md" style="font-weight:400 !important" @click="saveClassType()" />
......@@ -219,6 +218,7 @@
CTypeName: '', //类型名称
AddHourFee: '', //课时费加价
DefaultClassNum: '', //默认班级人数
ClassNoPrefix:'',
},
//列表数据参数
tabeMsg: {
......
<template>
<div class="page-body">
<div class="page-body" style="height: calc(100% - 30px);">
<div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
</div>
<div class="col row wrap q-mr-lg q-col-gutter-md"></div>
<div class="page-option">
<q-btn color="accent" size="sm" class="q-mr-md" icon="add" label="编辑章节" @click="EditChapter(null)" />
<q-btn
color="accent"
size="sm"
class="q-mr-md"
icon="add"
label="编辑章节"
@click="EditChapter(null)"
/>
</div>
</div>
<div class="page-content">
<div class="q-table-container q-table-dense">
<el-table :data="data" style="width: 100%;margin-bottom: 20px;" row-key="ChapterId" border default-expand-all
:tree-props="{children: 'ChildList'}">
<el-table-column prop="ChapterName" label="目录">
<div class="page-content" style="height:calc(100% - 42px)">
<q-scroll-area
:thumb-style="thumbStyle"
:content-style="contentStyle"
:content-active-style="contentActiveStyle"
style="height: 100%; width: 100%;"
>
<el-table
:data="dataList"
v-loading="loading"
:expand-row-keys="expandKeys"
:default-expand-all="true"
:row-class-name="tableRowClassName"
class="tree-tab-chapter"
style="width: 100%;margin-bottom: 20px;"
row-key="ChapterId"
ref="chapterTab"
@row-click="rowsClick"
:tree-props="{ children: 'ChildList', hasChildren: 'hasChildren' }"
>
<el-table-column prop="date" label="章节" width="450">
<template slot-scope="scope">
<span>{{scope.row.ChapterNo}} {{scope.row.ChapterName}}</span>
<div style="display: inline-block;">
<div class="flex q-ml-md">
<div
class="catalog_num"
v-if="scope.row.ChapterNo.indexOf('.') == -1"
>
<span>
<i>{{ scope.row.ChapterNo }}</i>
</span>
</div>
<div
style="margin-left: 36px;width:360px;"
class="ellipsis"
v-if="scope.row.ChapterNo.indexOf('.') == -1"
>
{{ scope.row.ChapterName }}
</div>
<div
v-if="scope.row.ChapterNo.indexOf('.') != -1"
:style="{ marginLeft: 20 * (scope.row.ChapterNo.split('.').length+1 - 2) + 'px' }"
>
{{ scope.row.ChapterNo }}
</div>
<div
v-if="scope.row.ChapterNo.indexOf('.') != -1"
style="margin-left: 12px;"
class="ellipsis"
:style="{width:(350-(20 * (scope.row.ChapterNo.split('.').length+1 - 2)))+'px'}"
>
{{ scope.row.ChapterName }}
</div>
</div>
</div>
</template>
</el-table-column>
<el-table-column prop="OpenStatus" label="开发状态" width="200">
<template slot-scope="scope" v-if="scope.row.OpenStatus==1||scope.row.OpenStatus==2">
<span>开放</span>
<el-table-column prop="name" label="课时" sortable width="100">
<template slot-scope="scope">
{{ scope.row.StudyHours }}课时
</template>
</el-table-column>
<el-table-column prop="address" label="章节详情" width="200">
<template slot-scope="scope">
<q-btn flat color="primary" v-if="scope.row.ChapterNo.indexOf('.') != -1" @click.stop="viewDetail(scope.row)">章节详情</q-btn>
</template>
</el-table-column>
<el-table-column prop="Progress" label="进度" width="200">
<el-table-column prop="address" label="状态" width="100">
<template slot-scope="scope">
<q-linear-progress stripe size="10px" :value="scope.row.Progress/100.0" />
<div class="text-negative" v-if="scope.row.OpenStatus == 0">
隐藏
</div>
<div class="text-dark" v-if="scope.row.OpenStatus == 1">开放</div>
</template>
</el-table-column>
<el-table-column label="操作" width="200">
<el-table-column label="操作">
<template slot-scope="scope">
<a>编辑</a>
&nbsp;
<a>设置</a>
<div class="text-right op-box">
<q-btn
size="xs"
class="q-mr-md"
color="dark"
@click.stop="EditChapter(scope.row.ChapterId)"
>修改</q-btn
>
<!--<q-btn
size="xs"
flat
color="primary"
@click.stop=""
class="q-mr-md"
>设置</q-btn
>-->
<q-btn
size="xs"
flat
color="negative"
@click.stop="deleteObj(scope.row)"
>删除</q-btn
>
</div>
</template>
</el-table-column>
</el-table>
</div>
</q-scroll-area>
</div>
<q-dialog v-model="isViewer" v-if="viewObj">
<q-card style="width: 540px;max-height:80%;">
<q-card-section class="row items-center q-pb-none">
<div class="text-h6">{{ viewObj.ChapterName }}</div>
<q-space />
<q-btn icon="close" flat round dense v-close-popup />
</q-card-section>
<q-card-section>
<div class="text-subtitle1 q-mb-md">章节学习内容</div>
<div v-html="viewObj.ChapterContent" v-if="viewObj.ChapterContent!=''" class="q-pa-md bg-grey-2 rounded-borders"></div>
<div class="text-grey-3 text-center" v-else>未添加内容</div>
</q-card-section>
<q-card-section>
<div class="text-subtitle1 q-mb-md">教学重点</div>
<div v-html="viewObj.Objectives" v-if="viewObj.ChapterContent!=''"></div>
<div class="text-grey-3 text-center" v-else>未添加内容</div>
</q-card-section>
<q-card-section>
<div class="text-subtitle1 q-mb-md">学生学习要求</div>
<div v-html="viewObj.Requirement" v-if="viewObj.ChapterContent!=''"></div>
<div class="text-grey-3 text-center" v-else>未添加内容</div>
</q-card-section>
</q-card>
</q-dialog>
</div>
</template>
<script>
import {
queryChapterTree
} from '../../api/course/index'
import {
queryChapterTree,
batchUpdateChapterNo,
deleteChapters
} from "../../api/course/index";
import { openURL } from "quasar";
export default {
meta: {
title: "章节管理"
},
computed: {},
watch: {},
data() {
return {
currentUrl: "",
selectedRowID: {},
dataList: [],
loading: true,
msg: {
CourseId: 0
},
CourseId: 0,
contentStyle: {
backgroundColor: "rgba(0,0,0,0.02)",
color: "#555"
},
contentActiveStyle: {
backgroundColor: "#eee",
color: "black"
},
export default {
meta: {
title: "章节管理"
thumbStyle: {
right: "2px",
borderRadius: "5px",
backgroundColor: "#027be3",
width: "5px",
opacity: 0.75
},
expandKeys: [],
updateChapters: [],
updateNo: false,
viewObj: null,
isViewer:false
};
},
created() {
if (this.$route.query.CourseId) {
this.CourseId = this.$route.query.CourseId;
this.msg.CourseId = this.CourseId;
}
},
mounted() {
this.currentUrl = this.$route.path;
this.getchaperTree();
},
methods: {
viewDetail(obj){
try {
obj.ChapterContent=decodeURIComponent(obj.ChapterContent)
obj.Objectives=decodeURIComponent(obj.Objectives)
obj.Requirement=decodeURIComponent(obj.Requirement)
} catch (error) {
}
this.viewObj=obj
this.isViewer=true
},
components: {
tableRowClassName({ row, rowIndex }) {
if (row.ChapterNo.indexOf(".") == -1) {
return "first-level-node";
}
return "";
},
computed: {
deleteObj(data) {
this.$q
.dialog({
title: "删除确认",
message:
"删除章节节点将会连同下属章节也会一并删除且无法恢复,你确定要这样执行吗",
cancel: {
label: "取消删除",
flat: true
},
ok: {
label: "确认",
flat: true,
focus: true,
color: "negative"
}
})
.onOk(() => {
deleteChapters({
CourseId: this.msg.CourseId,
ChapterNo: data.ChapterNo + ".",
ChapterId: data.ChapterId
}).then(r => {
this.updateNo = true;
this.getchaperTree();
//this.$refs.chapterTree.remove(data.ChapterId);
this.$q.notify({
icon: "iconfont icon-chenggong",
color: "accent",
timeout: 2000,
message: "删除成功!",
position: "top"
});
});
})
.onCancel(() => {
// console.log('>>>> Cancel')
});
},
watch: {
batchUpdate() {
batchUpdateChapterNo(this.updateChapters).then(r => {});
},
data() {
return {
currentUrl: "",
selectedRowID: {},
data: [],
loading: true,
msg: {
CourseId: 0,
},
CourseId: 0,
}
genernalNo(parentNo, list) {
list.forEach((x, i) => {
if (parentNo != "") {
x.ChapterNo = parentNo + "." + (i + 1);
} else {
x.ChapterNo = (i + 1).toString();
}
this.updateChapters.push({
ChapterNo: x.ChapterNo,
ChapterId: x.ChapterId,
ParentId: x.ParentId
});
if (x.ChildList && x.ChildList.length > 0) {
x.ChildList = this.genernalNo(x.ChapterNo, x.ChildList);
}
});
return list;
},
created() {
if (this.$route.query.CourseId) {
this.CourseId = this.$route.query.CourseId
this.msg.CourseId = this.CourseId;
}
rowsClick(row, column, event) {
//console.log(row,event)
this.$refs.chapterTab.toggleRowExpansion(row);
},
mounted() {
this.currentUrl = this.$route.path
this.getchaperTree();
//新增修改章节
EditChapter(obj) {
// this.$router.push({
// path: '/chapter-editor?courseId='+this.CourseId
// });
if (!obj) {
openURL(
window.location.origin +
"/#/course/chapter-editor?courseId=" +
this.CourseId
);
} else {
openURL(
window.location.origin +
"/#/course/chapter-editor?courseId=" +
this.CourseId +
"&chapter=" +
obj
);
}
},
methods: {
//新增修改章节
EditChapter(obj) {
//获取菜单分页列表
getchaperTree() {
this.loading = true;
queryChapterTree(this.msg)
.then(res => {
this.loading = false;
res.Data.forEach(x => {
this.expandKeys.push(x.ChapterId);
});
console.log(this.expandKeys);
},
//获取菜单分页列表
getchaperTree() {
this.loading = true;
queryChapterTree(this.msg).then(res => {
this.loading = false
this.data = res.Data;
}).catch(() => {
this.loading = false
this.dataList = res.Data;
if (this.updateNo) {
this.updateNo = false;
this.updateChapters = [];
this.genernalNo("", this.dataList);
if (this.updateChapters && this.updateChapters.length > 0) {
this.batchUpdate();
}
}
})
},
.catch(() => {
this.loading = false;
});
}
}
};
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
<style>
.tree-tab-chapter thead {
display: none;
}
.tree-tab-chapter td {
border-bottom: none !important;
padding: 5px 0 !important;
}
.tree-tab-chapter::before {
display: none !important;
}
.tree-tab-chapter .el-table__expand-icon {
/* display: none !important; */
margin-right: 0 !important;
}
.tree-tab-chapter .catalog_num {
height: 20px;
padding-left: 14px;
background: #d0d5db;
border-radius: 10px;
margin: 10px 20px 0 0;
position: absolute;
left: 15px;
top: 50%;
margin-top: -10px;
}
.tree-tab-chapter .catalog_num > span {
min-width: 24px;
height: 24px;
padding: 4px;
margin: -2px -4px 0 0;
background: #d0d5db;
display: block;
border-radius: 20px;
}
.tree-tab-chapter .catalog_num > span > i {
min-width: 16px;
height: 16px;
padding: 0 2px;
line-height: 16px;
background: #fff;
font-size: 12px;
font-family: Arial;
color: #a8a8b3;
border-radius: 20px;
display: block;
text-align: center;
font-style: normal;
}
.tree-tab-chapter .first-level-node {
background-color: #f5f7fa !important;
}
.tree-tab-chapter .first-level-node td:first-child {
border-top-left-radius: 12px;
border-bottom-left-radius: 12px;
}
.tree-tab-chapter .first-level-node td:last-child {
border-top-right-radius: 12px;
border-bottom-right-radius: 12px;
}
.tree-tab-chapter tr .op-box {
display: none;
}
.tree-tab-chapter tr:hover .op-box {
display: block;
}
.tree-tab-chapter .el-table__indent{
display: none !important;
}
.tree-tab-chapter .el-table__expand-icon{
display: none !important;
}
/**@import url('~assets/css/table.sass')*/
</style>
<template>
<!-- <div class="flex flex-start window-height" style="min-width:1300px;overflow-x:auto;"> -->
<div class="flex flex-start window-height">
<q-splitter v-model="splitterModel" :limits="[30, 100]" style="height: 100%;width:100%">
<template v-slot:before>
<div class="q-pa-lg full-height" style="min-width:380px;">
<q-card class="q-pa-md bg-dark text-white q-mb-lg">
<span>{{courseInfo.CourseName}}</span>
</q-card>
<div class="q-gutter-xs q-pb-lg" style="border-bottom:1px solid #f5f5f5;">
<q-btn color="primary" size="xs" unelevated label="同级目录" @click="addSameLevel"></q-btn>
<q-btn color="primary" size="xs" unelevated label="子目录" @click="addChildLevel"></q-btn>
<q-btn color="primary" size="xs" title="向上移动" :disable="!canUp" @click="moveUp" outline
icon="iconfont icon-up"></q-btn>
<q-btn color="primary" size="xs" title="向下移动" :disable="!canDown" @click="moveDown" outline
icon="iconfont icon-down1"></q-btn>
<q-btn color="primary" size="xs" unelevated label="导入 ...">
<q-tooltip>
此功能正在开发中。。。
</q-tooltip>
</q-btn>
</div>
<div class="q-mt-lg" style="height:calc(100% - 140px)">
<q-scroll-area :thumb-style="thumbStyle" :content-style="contentStyle"
:content-active-style="contentActiveStyle" style="height: 100%; width: 100%;padding-right:10px;">
<el-tree ref="chapterTree" :default-expanded-keys="defaultChapterId" @node-click="changeNode"
v-loading="canOptions" class="chapter-tree" :data="dataList" empty-text="暂无章节数据,请点击”添加同级“开始录入开始吧"
:props="defaultProps" node-key="ChapterId" @node-drag-start="handleDragStart"
@node-drag-enter="handleDragEnter" @node-drag-leave="handleDragLeave" @node-drag-over="handleDragOver"
@node-drag-end="handleDragEnd" @node-drop="handleDrop" draggable :allow-drop="allowDrop"
:allow-drag="allowDrag">
<div class="row chapter-node full-width" slot-scope="{ node, data }">
<div class="q-mr-md">{{ data.ChapterNo.length>1?data.ChapterNo:`0${data.ChapterNo}` }}</div>
<div class="col q-mr-xs" v-if="editorNodeId==data.ChapterId">
<input type="text" @blur="changeChapterName(data)" maxlength="100"
draggable="true" class="tree-input" v-focus v-model="data.ChapterName"
@focus="selectValue($event)" />
</div>
<div class="col q-mr-md ellipsis" v-if="editorNodeId!=data.ChapterId">{{data.ChapterName}}</div>
<div class="oops-box q-mr-xs" v-if="editorNodeId!=data.ChapterId">
<q-btn size="xs" flat color="primary" label="编辑" @click.stop="editorNodeId=data.ChapterId"></q-btn>
<q-btn size="xs" flat color="negative" label="删除" @click.stop="deleteObj(data)"></q-btn>
</div>
<div class="q-mr-xs rate-box">
<q-badge class="bg-white text-grey-8">
{{data.CourseRateName.replace('课程','')}}
</q-badge>
<q-badge class="q-ml-xs bg-grey-3 text-dark">{{data.StudyMinutes}}分钟</q-badge>
</div>
</div>
</el-tree>
</q-scroll-area>
</div>
</div>
</template>
<template v-slot:after>
<div class="col full-height q-pa-lg chapter-content scroll" style="min-width:900px;">
<div v-if="chapter">
<div class="text-h6 q-mb-md">章节学习内容</div>
<div class="row q-mb-md">
<div class="col q-mr-md">
<q-input square filled label="消耗分钟" v-model="chapter.StudyMinutes" suffix="分钟" mask="#" fill-mask="0"
reverse-fill-mask></q-input>
</div>
<div class="col">
<q-select :options="rateList" option-label="Name" option-value="Id" square filled label="关联等级"
v-model="defauRateObj"></q-select>
</div>
</div>
<!-- <div v-if="chapter.ParentId!=0"> -->
<div>
<div class="text-h6 q-mb-md">章节学习内容</div>
<div class="q-mb-md">
<editor v-model="chapter.ChapterContent" @blur="changeContent" placeHolder="请输入章节学习内容" :config="config"
ref="chapterContent"></editor>
</div>
<div class="text-h6 q-mb-md">教学重点</div>
<div class="q-mb-md">
<editor v-model="chapter.Objectives" placeHolder="请输入章节教学重点" :config="config" ref="objectives"></editor>
</div>
<div class="text-h6 q-mb-md">学生学习要求</div>
<div class="q-mb-md">
<editor v-model="chapter.Requirement" placeHolder="请输入章节学生学习要求" :config="config" ref="requirement">
</editor>
</div>
</div>
<!-- <div v-else class="text-center text-h5 text-grey-4 q-mt-lg">单元节点不支持编辑相关内容</div> -->
</div>
</div>
</template>
</q-splitter>
<q-btn round padding="md" v-if="chapter && chapter.ChapterId>0" @click="saveChapterUpdate" :loading="submiting"
color="primary" class="fixed-bottom-right" label="保存" style="z-index:9999999;right:20px;bottom:100px;">
<template v-slot:loading>
<q-spinner-ios />
</template>
</q-btn>
</div>
</template>
<script>
import editor from "../../components/editor/UeEditor";
import {
queryChapterTree,
saveChapter,
batchUpdateChapterNo,
updateChapterName,
getCourseRate,
queryCourseInfo,
deleteChapters,
setChaptersRate
} from "../../api/course/index";
import {
compareObject
} from '../../utils/validate'
import {
extend
} from 'quasar'
export default {
meta: {
title: "课程章节详情"
},
components: {
editor
},
directives: {
focus: {
// 指令的定义
inserted: function (el) {
el.focus()
}
}
},
data() {
return {
chapter: null,
config: {
initialFrameWidth: null,
initialFrameHeight: 400
},
showContent: true,
courseId: 0,
dataList: [],
defaultProps: {
children: 'ChildList',
label: 'ChapterName'
},
currentNode: null,
canOptions: true,
updateChapters: [],
editorNodeId: 0,
canUp: false,
canDown: false,
rateList: [],
defauRateObj: {
Id: 8,
Name: "其它"
},
courseInfo: {},
submiting: false,
bakObj: {},
contentStyle: {
backgroundColor: 'rgba(0,0,0,0.02)',
color: '#555'
},
contentActiveStyle: {
backgroundColor: '#eee',
color: 'black'
},
thumbStyle: {
right: '2px',
borderRadius: '5px',
backgroundColor: '#027be3',
width: '5px',
opacity: 0.75
},
defaultChapterId: 0,
splitterModel: 30 //左侧默认占据多大
};
},
created() {
if (this.$route.query.chapter) {
this.defaultChapterId = this.$route.query.chapter;
}
if (this.$route.query.courseId) {
this.courseId = this.$route.query.courseId;
this.initTree();
this.initRateList();
this.getCourseInfo();
}
},
mounted() {
this.showContent = false;
setTimeout(() => {
this.showContent = true;
}, 3000);
},
methods: {
changeContent() {},
getCourseInfo() {
queryCourseInfo({
CourseId: this.courseId
}).then(res => {
this.courseInfo = res.Data;
})
},
initRateList() {
getCourseRate({}).then(r => {
this.rateList = r.Data
})
},
changeNode(data, node, ev) {
if (this.chapter && this.chapter.ChapterId > 0) {
if (this.defauRateObj.Id != 0) {
this.chapter.CourseRate = this.defauRateObj.Id
this.chapter.CourseRateName = this.defauRateObj.Name
}
if (!compareObject(this.bakObj, this.chapter, false)) {
this.saveChapterUpdate()
if (this.bakObj.CourseRate != this.chapter.CourseRate) {
if (this.chapter.ChildList && this.chapter.ChildList.length > 0) {
this.updateRate()
this.updateRateNode(this.chapter.ChildList)
}
}
}
}
try {
data.ChapterContent = decodeURIComponent(data.ChapterContent)
data.Objectives = decodeURIComponent(data.Objectives)
data.Requirement = decodeURIComponent(data.Requirement)
} catch (error) {
}
data.StudyMinutes = data.StudyMinutes.toString()
this.chapter = data
extend(this.bakObj, data)
if (this.$refs.chapterContent) {
this.$refs.chapterContent.reloadNewValue()
this.$refs.objectives.reloadNewValue()
this.$refs.requirement.reloadNewValue()
}
this.checkMove(node)
this.rateList.forEach(x => {
if (x.Id == data.CourseRate) {
this.defauRateObj = x
}
})
},
updateRate() {
setChaptersRate({
CourseRate: this.defauRateObj.CourseRate,
CourseId: this.courseId,
ChapterNo: this.chapter.ChapterNo + "."
}).then(r => {
//this.initTree()
})
},
updateRateNode(arr) {
arr.forEach(x => {
x.CourseRate = this.defauRateObj.Id
x.CourseRateName = this.defauRateObj.Name
if (x.ChildList && x.ChildList.length > 0) {
this.updateRateNode(x.ChildList)
}
})
},
deleteObj(data) {
this.$q.dialog({
title: '删除确认',
message: '删除章节节点将会连同下属章节也会一并删除且无法恢复,你确定要这样执行吗',
cancel: {
label: "取消删除",
flat: true
},
ok: {
label: "确认",
flat: true,
focus: true,
color: "negative"
}
}).onOk(() => {
deleteChapters({
CourseId: this.courseId,
ChapterNo: data.ChapterNo + ".",
ChapterId: data.ChapterId
}).then(r => {
//this.initTree()
this.$refs.chapterTree.remove(data.ChapterId)
this.updateChapters = []
this.genernalNo("", this.dataList)
if (this.updateChapters && this.updateChapters.length > 0) {
this.batchUpdate()
}
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '删除成功!',
position: 'top'
})
})
}).onCancel(() => {
// console.log('>>>> Cancel')
})
},
saveChapterUpdate() {
if (!this.submiting) {
this.submiting = true
if (this.defauRateObj.Id != 0) {
this.chapter.CourseRate = this.defauRateObj.Id
this.chapter.CourseRateName = this.defauRateObj.Name
}
let msg = {}
extend(msg, this.chapter)
msg.ChapterContent = encodeURIComponent(msg.ChapterContent)
msg.Objectives = encodeURIComponent(msg.Objectives)
msg.Requirement = encodeURIComponent(msg.Requirement)
saveChapter(msg).then(r => {
this.submiting = false
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '数据保存成功!',
position: 'top'
})
if (this.bakObj.CourseRate != this.defauRateObj.Id) {
if (this.chapter.ChildList && this.chapter.ChildList.length > 0) {
this.updateRate()
this.updateRateNode(this.chapter.ChildList)
}
extend(this.bakObj, this.chapter)
}
}).catch(e => {
this.submiting = false
})
}
},
checkMove(node) {
let noTemp = node.data.ChapterNo.split('.')
let no = parseInt(noTemp[noTemp.length - 1])
let p = node.parent.data
this.canUp = no != 1
this.canDown = no != p.length
},
moveUp() {
let data = this.$refs.chapterTree.getCurrentNode()
let node = this.$refs.chapterTree.getNode(data.ChapterId)
console.log(data)
if (node) {
let noTemp = data.ChapterNo.toString().split('.')
let no = parseInt(noTemp[noTemp.length - 1]) - 1
let p = node.parent.data
if (data.ParentId == 0) {
p = this.swapArray(p, no, no - 1)
} else {
p.ChildList = this.swapArray(p.ChildList, no, no - 1)
}
node.parent.childNodes = this.swapArray(node.parent.childNodes, no, no - 1)
this.updateChapters = []
this.genernalNo("", this.dataList)
this.checkMove(this.$refs.chapterTree.getNode(data.ChapterId))
if (this.updateChapters && this.updateChapters.length > 0) {
this.batchUpdate()
}
}
},
moveDown() {
let data = this.$refs.chapterTree.getCurrentNode()
let node = this.$refs.chapterTree.getNode(data.ChapterId)
console.log(data)
if (node) {
let noTemp = data.ChapterNo.toString().split('.')
let no = parseInt(noTemp[noTemp.length - 1]) - 1
let p = node.parent.data
if (data.ParentId == 0) {
p = this.swapArray(p, no, no + 1)
} else {
p.ChildList = this.swapArray(p.ChildList, no, no + 1)
}
node.parent.childNodes = this.swapArray(node.parent.childNodes, no, no + 1)
this.updateChapters = []
this.genernalNo("", this.dataList)
this.checkMove(this.$refs.chapterTree.getNode(data.ChapterId))
if (this.updateChapters && this.updateChapters.length > 0) {
this.batchUpdate()
}
}
},
swapArray(arr, index1, index2) {
arr[index1] = arr.splice(index2, 1, arr[index1])[0];
return arr;
},
selectValue(e) {
e.currentTarget.select();
},
changeChapterName(data) {
this.editorNodeId = 0
let msg = {
ChapterId: data.ChapterId,
ChapterName: data.ChapterName
}
updateChapterName(msg).then(r => {
})
},
addSameLevel() {
let temp = this.$refs.chapterTree.getCurrentNode()
if (!temp || temp.ParentId == 0) {
let no = this.dataList && this.dataList.length > 0 ? (this.dataList.length + 1) : 1
let t = this.createNewNode(0, no, 8, '其它')
saveChapter(t).then(r => {
t.ChapterId = r.Data.ChapterId
this.dataList.push(t)
})
} else {
let parentTemp = this.$refs.chapterTree.getNode(temp.ParentId).data
let no = parentTemp.ChildList && parentTemp.ChildList.length > 0 ? (parentTemp.ChildList.length + 1) : 1
no = parentTemp.ChapterNo + "." + no
let t = this.createNewNode(parentTemp.ChapterId, no, parentTemp.CourseRate, parentTemp.CourseRateName)
saveChapter(t).then(r => {
t.ChapterId = r.Data.ChapterId
parentTemp.ChildList.push(t)
})
}
},
addChildLevel() {
let temp = this.$refs.chapterTree.getCurrentNode()
if (!temp) {
let no = this.dataList && this.dataList.length > 0 ? (this.dataList.length + 1) : 1
let t = this.createNewNode(0, no, 8, '其它')
saveChapter(t).then(r => {
t.ChapterId = r.Data.ChapterId
this.dataList.push(t)
})
} else {
if (!temp.ChildList) {
this.$set(temp, 'ChildList', [])
}
let no = temp.ChildList && temp.ChildList.length > 0 ? (temp.ChildList.length + 1) : 1
no = temp.ChapterNo + "." + no
let t = this.createNewNode(temp.ChapterId, no, temp.CourseRate, temp.CourseRateName)
saveChapter(t).then(r => {
t.ChapterId = r.Data.ChapterId
temp.ChildList.push(t)
})
}
},
handleDragStart(node, ev) {
console.log('drag start', node);
},
handleDragEnter(draggingNode, dropNode, ev) {
console.log('tree drag enter: ', dropNode.label);
},
handleDragLeave(draggingNode, dropNode, ev) {
console.log('tree drag leave: ', dropNode.label);
},
handleDragOver(draggingNode, dropNode, ev) {
console.log('tree drag over: ', dropNode.label);
},
handleDragEnd(draggingNode, dropNode, dropType, ev) {
console.log(draggingNode, dropNode, dropType)
this.updateChapters = []
if (dropType == 'inner') {
draggingNode.data.ParentId = dropNode.data.ChapterId
} else {
draggingNode.data.ParentId = dropNode.data.ParentId
}
this.genernalNo("", this.dataList)
if (this.updateChapters && this.updateChapters.length > 0) {
this.batchUpdate()
}
},
handleDrop(draggingNode, dropNode, dropType, ev) {},
allowDrop(draggingNode, dropNode, type) {
// if (dropNode.data.ChapterName === '二级 3-1') {
// return type !== 'inner';
// } else {
return true;
//}
},
allowDrag(draggingNode) {
return true;
},
initTree() {
this.canOptions = true
queryChapterTree({
CourseId: this.courseId
}).then(r => {
console.log(r);
this.dataList = r.Data
this.canOptions = false
if (this.defaultChapterId != 0) {
setTimeout(() => {
this.$refs.chapterTree.setCurrentKey(this.defaultChapterId)
let t = this.$refs.chapterTree.getNode(this.defaultChapterId)
this.changeNode(t.data, t, null)
}, 1000);
}
});
},
createNewNode(pid, no, rate, crn) {
if (this.canOptions) return;
let name = ""
if (pid == 0) {
name = `第${this.toChinesNum(no)}单元`
} else {
let d = no.split('.')
name = `第${this.toChinesNum(d[d.length-1])}课时`
}
return {
ChapterId: 0,
ParentId: pid,
ChapterContent: "",
ChapterName: name,
CourseId: this.courseId,
ChapterNo: no.toString(),
OpenStatus: 1,
Progress: 0,
Objectives: "",
Requirement: "",
StudyMinutes: 0,
ChildList: [],
CourseRate: rate,
CourseRateName: crn
}
},
toChinesNum(num) {
let changeNum = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']; //changeNum[0] = "零"
let unit = ["", "十", "百", "千", "万"];
num = parseInt(num);
let getWan = (temp) => {
let strArr = temp.toString().split("").reverse();
let newNum = "";
for (var i = 0; i < strArr.length; i++) {
newNum = (i == 0 && strArr[i] == 0 ? "" : (i > 0 && strArr[i] == 0 && strArr[i - 1] == 0 ? "" : changeNum[
strArr[i]] + (strArr[i] == 0 ? unit[0] : unit[i]))) + newNum;
}
return newNum;
}
let overWan = Math.floor(num / 10000);
let noWan = num % 10000;
if (noWan.toString().length < 4) noWan = "0" + noWan;
return overWan ? getWan(overWan) + "万" + getWan(noWan) : getWan(num);
},
genernalNo(parentNo, list) {
list.forEach((x, i) => {
if (parentNo != "") {
x.ChapterNo = parentNo + "." + (i + 1)
} else {
x.ChapterNo = (i + 1).toString()
}
this.updateChapters.push({
ChapterNo: x.ChapterNo,
ChapterId: x.ChapterId,
ParentId: x.ParentId
})
if (x.ChildList && x.ChildList.length > 0) {
x.ChildList = this.genernalNo(x.ChapterNo, x.ChildList)
}
})
return list
},
batchUpdate() {
batchUpdateChapterNo(this.updateChapters).then(r => {
console.log(x)
})
}
}
};
</script>
<style>
.chapter-tree .chapter-node .oops-box,
.chapter-tree .chapter-node:hover .rate-box {
display: none;
}
.chapter-tree .chapter-node:hover .oops-box,
.chapter-tree .chapter-node .rate-box {
display: block;
}
.chapter-tree .el-tree-node__content {
height: 32px !important;
padding-right:20px;
}
.chapter-tree .el-tree-node__content:hover,
.chapter-tree .is-current>.el-tree-node__content {
background: #eaeff7 !important;
}
.chapter-tree .el-tree-node__content {
border-radius: 4px;
}
.chapter-tree .tree-input {
outline: none;
border: none;
padding: 0 5px;
font-size: 14px;
width: 100%
}
</style>
......@@ -65,10 +65,17 @@
</template>
<template v-slot:body-cell-ClassName="props">
<q-td auto-width :props="props">
<q-avatar size="md" style="background:#d4dfff;color:#2961FE;font-weight:bold;" v-if="props.row.ClassName">
{{GetFirst(props.row.ClassName)}}</q-avatar>
<span style="color:#2961FE;margin-left:10px;cursor:pointer;" @click="getClassInfo(props.row)"
title="点击查看详情">{{props.row.ClassName}}</span>
<div style="display: flex;align-items: center;">
<q-avatar size="md" style="background:#d4dfff;color:#2961FE;font-weight:bold;" v-if="props.row.ClassName">
{{GetFirst(props.row.ClassName)}}</q-avatar>
<div >
<span style="color:#2961FE;margin-left:10px;cursor:pointer;" @click="getClassInfo(props.row)"
title="点击查看详情">{{props.row.ClassName}}</span>
<div style="margin-left: 10px;">{{props.row.ClassNo}}</div>
</div>
</div>
</q-td>
</template>
<template v-slot:body-cell-OtherCourseName="props">
......
......@@ -144,9 +144,9 @@
<q-item-label>恢复</q-item-label>
</q-item-section>
</q-item>
<q-item style="display:none;" clickable v-close-popup @click="goMycourse(props.row)">
<q-item clickable v-close-popup @click="goMycourse(props.row)">
<q-item-section>
<q-item-label>详情</q-item-label>
<q-item-label>课程详情</q-item-label>
</q-item-section>
</q-item>
</q-list>
......@@ -172,6 +172,7 @@
import courseForm from "../../components/course/course-form";
import coursepriceForm from "../../components/course/courseprice-form";
import selectTree from "../../components/common/select-tree";
import { openURL } from "quasar";
import {
mapState
} from "vuex";
......@@ -452,10 +453,11 @@
},
//跳转至我的课程
goMycourse(obj) {
var tempStr = "/course/courseinfo?CourseId=" + obj.CourseId;
this.$router.push({
path: tempStr
});
var tempStr = window.location.origin +"/#/course/courseinfo?CourseId=" + obj.CourseId;
// this.$router.push({
// path: tempStr
// });
openURL(tempStr)
}
}
};
......
......@@ -76,7 +76,12 @@
<div class="full-width course-menu-box q-pt-md">
<q-list style="width:180px;overflow:hidden">
<div class="classD1">
<img style="width:100%;height:100%;" alt="" :src="courseInfo.CoverImg" />
<template v-if="courseInfo.CoverImg">
<img style="width:100%;height:100%;" alt="" :src="courseInfo.CoverImg" />
</template>
<template v-else>
<img style="width:100%;height:100%;" alt="" src="../../assets/images/default.png" />
</template>
</div>
<div class="text_Degree">{{courseInfo.CourseName}}</div>
<div class="nav-content">
......@@ -84,15 +89,15 @@
<!-- <li :class="{'checkedLi':commonIndex==1}" @click="gotoPage('question',1)">
<i class="iconfont icon-tiku"></i>题库
</li> -->
<li :class="{'checkedLi':commonIndex==2}" @click="gotoPage('teachplan',2)">
<!-- <li :class="{'checkedLi':commonIndex==2}" @click="gotoPage('teachplan',2)">
<i style="font-size:20px;" class="iconfont icon-PPT"></i>教案
</li>
</li> -->
<li :class="{'checkedLi':commonIndex==3}" @click="gotoPage('chapter',3)">
<i class="iconfont icon-icon_zhangjielianxi"></i>章节
</li>
<li :class="{'checkedLi':commonIndex==4}" @click="gotoPage('coursejob',4)">
<!-- <li :class="{'checkedLi':commonIndex==4}" @click="gotoPage('coursejob',4)">
<i class="iconfont icon-icon_zhangjielianxi"></i>作业
</li>
</li> -->
</ul>
</div>
</q-list>
......@@ -130,7 +135,7 @@
opacity: 0.5
},
CourseId: 0,
commonIndex: 2, //选中
commonIndex: 3, //选中
courseInfo: {}, //课程信息
}
},
......@@ -166,7 +171,7 @@
this.getCourseInfo();
},
mounted() {
this.gotoPage('teachplan', 2);
this.gotoPage('chapter', 3);
},
methods: {
//获取课程信息
......
......@@ -407,8 +407,8 @@
</el-form-item>
</el-col>
<el-col :span="4" :gutter="35" class="_BranchIdS">
<el-form-item label="校区" prop="BranchIdS">
<el-select filterable v-model='addMsg.BranchIdS'>
<el-form-item label="校区" prop="BranchList">
<el-select filterable multiple v-model='addMsg.BranchList'>
<el-option v-for='item in CompanyList' :label='item.SName' :value='item.SId' :key='item.SId'
:disabled="item.disabled">
</el-option>
......@@ -609,7 +609,10 @@
required: true,
message: this.$t('rule.qxzfyleixing'),
trigger: 'change'
}, ]
}, ],
BranchList:[{
type:'array',required: true,message: '请选择校区', trigger: 'change'
}]
},
addCuren: true,
ed: false,
......@@ -657,14 +660,18 @@
methods: {
goUrlNew(item) {
let path = "CashAccDetail";
this.$router.push({
name: path,
query: {
"TypeId": item.TypeId,
// this.$router.push({
// name: path,
// query: {
// "TypeId": item.TypeId,
// 'ID': item.ID,
// blank: "y",
// }
// })
this.OpenNewUrl('/financial/accDetail/'+path, {
"TypeId": item.TypeId,
'ID': item.ID,
blank: "y",
}
})
});
},
regNum(n, t) { // 判断数字 n 值 t 类型
let reg = /^\d+(\.\d{0,6})?$/
......@@ -804,11 +811,16 @@
ID: id
}, res => {
if (res.data.resultCode == 1) {
let data = res.data.data
let data = JSON.parse(JSON.stringify(res.data.data)) ;
data.BranchIdS = data.BranchList[0].RB_Branch_Id;
// this.remoteMethod(data.InemName)
// this.remoteMethod2(data.OutemName)
this.addMsg = data;
//6-30新加 校区可以多选
this.addMsg.BranchList = []
res.data.data.BranchList.forEach(x=>{
this.addMsg.BranchList.push(x.RB_Branch_Id)
})
// this.disabledOption();
} else {
this.tips(res.data.message, 'error');
......@@ -887,7 +899,7 @@
}, err => {})
},
addInstitutions() { // 保存 修改、新增
this.addMsg.BranchList = [];
// this.addMsg.BranchList = [];
if (!this.addMsg.RiskLimitMoney) {
this.addMsg.RiskLimitMoney = 0;
}
......@@ -895,13 +907,28 @@
obj = this.CompanyList.find(item => {
return item.SId === this.addMsg.BranchIdS; //筛选出匹配数据
});
let msg = {
ID: 0,
Type: 2,
RB_Branch_Id: this.addMsg.BranchIdS,
RB_BranchName: obj.SName
}
this.addMsg.BranchList.push(msg);
// let msg = {
// ID: 0,
// Type: 2,
// RB_Branch_Id: this.addMsg.BranchIdS,
// RB_BranchName: obj.SName
// }
// this.addMsg.BranchList.push(msg);
let data = [];
this.addMsg.BranchList.forEach(x=>{
this.CompanyList.map(j=>{//筛选出匹配数据
if(x == j.SId){
let msg = {
ID: 0,
Type: 2,
RB_Branch_Id: j.SId,
RB_BranchName: j.SName
}
data.push(msg)
}
})
})
this.addMsg.BranchList = data;
this.apipost('BankAccount_post_SetCashAccount', this.addMsg, res => {
if (res.data.resultCode == 1) {
this.tips('保存成功!', 'success')
......
......@@ -413,6 +413,7 @@
</span></span>
</el-tooltip>
</p>
<p v-if="item.IsStandardCurrency!=1">
<span class="_name">{{$t('fnc.sqisunyi')}}</span>
<span class="fr" v-if="item.ProfitLossMoney&&item.ProfitLossMoney!=0"
......@@ -518,8 +519,8 @@
</el-form-item>
</el-col>
<el-col :span="4" :gutter="35" class="_BranchIdS">
<el-form-item label="校区" prop="BranchIdS">
<el-select filterable v-model='addMsg.BranchIdS'>
<el-form-item label="校区" prop="BranchList">
<el-select filterable multiple v-model='addMsg.BranchList'>
<el-option v-for='item in CompanyList' :label='item.SName' :value='item.SId' :key='item.SId'
:disabled="item.disabled">
</el-option>
......@@ -724,7 +725,11 @@
required: true,
message: this.$t('rule.qxzfyleixing'),
trigger: 'change'
}, ]
}, ],
BranchList:[{
type:'array',required: true,message: '请选择校区', trigger: 'change'
}]
},
addCuren: true,
ed: false,
......@@ -845,14 +850,19 @@
},
goUrlNew(item) {
let path = "CompanyAccDetail";
this.$router.push({
name: path,
query: {
"TypeId": item.TypeId,
'ID': item.ID,
blank: "y",
}
})
// this.$router.push({
// name: path,
// query: {
// "TypeId": item.TypeId,
// 'ID': item.ID,
// blank: "y",
// }
// })
this.OpenNewUrl('/financial/accDetail/'+path, {
"TypeId": item.TypeId,
'ID': item.ID,
});
},
goUrl(path, id, name, source, CurrencyId) {
this.$router.push({
......@@ -921,9 +931,14 @@
ID: id
}, res => {
if (res.data.resultCode == 1) {
let data = res.data.data;
let data = JSON.parse(JSON.stringify(res.data.data)) ;
data.BranchIdS = data.BranchList[0].RB_Branch_Id;
this.addMsg = data;
//6-30新加 校区可以多选
this.addMsg.BranchList = []
res.data.data.BranchList.forEach(x=>{
this.addMsg.BranchList.push(x.RB_Branch_Id)
})
// this.disabledOption();
} else {
this.tips(res.data.message, 'error');
......@@ -1006,7 +1021,7 @@
}, err => {})
},
addInstitutions() { // 保存 修改、新增
this.addMsg.BranchList = [];
// this.addMsg.BranchList = [];
if (!this.addMsg.RiskLimitMoney) {
this.addMsg.RiskLimitMoney = 0;
}
......@@ -1014,13 +1029,29 @@
obj = this.CompanyList.find(item => {
return item.SId === this.addMsg.BranchIdS; //筛选出匹配数据
});
let msg = {
ID: 0,
Type: 2,
RB_Branch_Id: this.addMsg.BranchIdS,
RB_BranchName: obj.SName
}
this.addMsg.BranchList.push(msg);
let data = [];
this.addMsg.BranchList.forEach(x=>{
this.CompanyList.map(j=>{//筛选出匹配数据
if(x == j.SId){
let msg = {
ID: 0,
Type: 2,
RB_Branch_Id: j.SId,
RB_BranchName: j.SName
}
data.push(msg)
}
})
})
// let msg = {
// ID: 0,
// Type: 2,
// RB_Branch_Id: this.addMsg.BranchIdS,
// RB_BranchName: obj.SName
// }
// this.addMsg.BranchList.push(msg);
this.addMsg.BranchList = data;
this.apipost('bankaccount_post_Set', this.addMsg, res => {
if (res.data.resultCode == 1) {
this.tips(this.$t('tips.saveYes'), "success");
......
......@@ -1069,7 +1069,6 @@
titleAlign: "left",
columnAlign: "left",
isResize: true,
isFrozen: true,
},
{
field: "ClassState",
......@@ -1080,7 +1079,6 @@
isResize: true,
result: [],
type: "select",
isFrozen: true,
formatter: function (rowData, rowIndex, pagingIndex, field) {
let state = rowData.ClassState
let text = ''
......@@ -1104,7 +1102,6 @@
isResize: true,
result: [],
type: "select",
isFrozen: true
},
{
field: "TeacherName",
......@@ -1113,12 +1110,11 @@
titleAlign: "left",
columnAlign: "left",
isResize: true,
isFrozen: true,
},
{
field: "YingShou",
formatter: this.moneyFormat,
title: "应收",
title: "原价",
width: 100,
titleAlign: "left",
columnAlign: "right",
......
......@@ -501,6 +501,9 @@
this.msg.eTradeDate = this.$route.query.eTradeDate;
this.productionDate = [this.msg.sTradeDate, this.msg.eTradeDate];
this.productionDateByTC = [this.msg.QStartDate, this.msg.QEndDate];
this.msg.RB_Branch_Id = Number(this.$route.query.RB_Branch_Id)
this.getList();
this.BankAccount_post_GetCashAccountList("query");
}
......
......@@ -565,6 +565,8 @@
this.msg.eTradeDate = this.$route.query.eTradeDate ? this.$route.query.eTradeDate : "";
this.productionDate = [this.msg.sTradeDate, this.msg.eTradeDate];
this.productionDateByTC = [this.msg.QStartDate, this.msg.QEndDate];
this.msg.RB_Branch_Id = Number(this.$route.query.RB_Branch_Id)
this.getList();
this.bankaccount_post_GetListS("query");
}
......
......@@ -460,6 +460,8 @@
this.msg.eTradeDate = this.$route.query.eTradeDate;
this.productionDate = [this.msg.sTradeDate, this.msg.eTradeDate];
this.productionDateByTC = [this.msg.QStartDate, this.msg.QEndDate];
this.msg.RB_Branch_Id = Number(this.$route.query.RB_Branch_Id)
this.getList();
this.BankAccount_post_GetPlatformList("query");
}
......
<style scoped>
@import "../css/cssReset.css";
.page_fnDm {
background-color: white
}
.query-box {
overflow: inherit
}
.query-box {
border: none
}
.query-box ul {
overflow: initial;
}
.query-box li:last-child {
float: left
}
.query-box>ul>li:last-child {
float: right;
}
.query-box .hight_query ul .el-input {
width: inherit
}
.page_CashReport .query-box li:last-child {
top: 35px;
}
.page_CashReport ._fnDm_content {
width: 100%;
}
.page_CashReport .singeRowTable tr th {
border: 1px solid #d2d2d2;
}
</style>
<template>
<div class="page_fnDm page_CashReport page-body" @keyup.enter="getList()">
<div class="query-box">
<el-form class="_info_box clearfix" label-width="110px">
<el-row style="padding:15px 20px 0 0;">
<el-col :span="6">
<el-form-item label="交易日期:">
<el-date-picker class="h34" v-model="transactionDate" @change="timeAdd(3)" type="daterange"
value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="校区">
<el-select filterable v-model='msg.RB_Branch_Id' @change='getList'>
<el-option :value="-1" label="不限"></el-option>
<el-option v-for='item in CompanyList' :label='item.SName' :value='item.SId' :key='item.SId'>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<ul class="clearfix" style="position: absolute;right: 20px;top: 20px;">
<div>
<span>
</span>
<!-- <button class="hollowFixedBtn" @click="getList()">{{$t('pub.searchBtn')}}</button> -->
<q-btn color="primary" size="11px" :label="$t('pub.searchBtn')" @click="getList()" style="marginRight:10px"/>
<!-- <button class="normalBtn" @click="method5()">导出</button> -->
<q-btn color="primary" size="11px" label="导出" @click="method5()"/>
</div>
</ul>
</div>
<div class="_fnDm_content" v-loading='loading'>
<table class="singeRowTable" cellspacing="0" cellpadding="0" style="border: 1px solid rgb(230, 230, 230);">
<tr>
<th colspan="16">{{branchName}}资金日报表</th>
</tr>
<tr>
<!-- <th>校区</th> -->
<th>银行</th>
<th colspan="2">上期余额</th>
<th colspan="2">本期借方发生额</th>
<th colspan="2">本期贷方发生额</th>
<th colspan="2">本期收据</th>
<th colspan="2">本期余额</th>
<th>借方笔数</th>
<th>贷方笔数</th>
</tr>
<template v-for="item in dataObj.resultList">
<tr>
<th >{{item.AName}}</th>
<th>外币</th>
<th>本位币</th>
<th>外币</th>
<th>本位币</th>
<th>外币</th>
<th>本位币</th>
<th>外币</th>
<th>本位币</th>
<th>外币</th>
<th>本位币</th>
<th></th>
<th></th>
</tr>
<tr v-for="(subItem, index) in item.SubList">
<!-- <td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.BName}}</td> -->
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.Alias}}</td>
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.WBAgoMoney}}</td>
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.AgoMoney}}</td>
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.AgoIncome}}</td>
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.Income}}</td>
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.AgoOutCome}}</td>
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.OutCome}}</td>
<td>{{subItem.ReceiptWBMoney}}</td>
<td>{{subItem.ReceiptMoney}}</td>
<!-- <td @click="goUrlNew(subItem)" style="cursor: pointer">{{subItem.ReceiptWBMoney}}</td>
<td @click="goUrlNew(subItem)" style="cursor: pointer">{{subItem.ReceiptMoney}}</td> -->
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.AgoIncom}}</td>
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.NowIncome}}</td>
<!-- <a style="cursor:pointer;" @click="goUrl('CashAccDetail',subItem.BankID,subItem.TradeWay)"> -->
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.IncomeCount}}</td>
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.OutComeCount}}</td>
</tr>
<tr v-if="item.TotalList">
<td >{{item.AName}}合计</td>
<td>{{item.TotalList.WBAgoMoney}}</td>
<td>{{item.TotalList.AgoMoney}}</td>
<td>{{item.TotalList.AgoIncome}}</td>
<td>{{item.TotalList.Income}}</td>
<td>{{item.TotalList.AgoOutCome}}</td>
<td>{{item.TotalList.OutCome}}</td>
<td>{{item.TotalList.ReceiptWBMoney}}</td>
<td>{{item.TotalList.ReceiptMoney}}</td>
<td>{{item.TotalList.AgoIncom}}</td>
<td>{{item.TotalList.NowIncome}}</td>
<td>{{item.TotalList.IncomeCount}}</td>
<td>{{item.TotalList.OutComeCount}}</td>
</tr>
</template>
<tr v-for="item in dataObj.sumList">
<td >{{item.BName}}总计</td>
<td>{{item.WBAgoMoney}}</td>
<td>{{item.AgoMoney}}</td>
<td>{{item.AgoIncome}}</td>
<td>{{item.Income}}</td>
<td>{{item.AgoOutCome}}</td>
<td>{{item.OutCome}}</td>
<td>{{item.ReceiptWBMoney}}</td>
<td>{{item.ReceiptMoney}}</td>
<td>{{item.AgoIncom}}</td>
<td>{{item.NowIncome}}</td>
<td>{{item.IncomeCount}}</td>
<td>{{item.OutComeCount}}</td>
</tr>
<tr v-if="dataObj.sumObj">
<td >总计</td>
<td>{{dataObj.sumObj.WBAgoMoney}}</td>
<td> {{dataObj.sumObj.AgoMoney}}</td>
<td>{{dataObj.sumObj.AgoIncome}}</td>
<td>{{dataObj.sumObj.Income}}</td>
<td>{{dataObj.sumObj.AgoOutCome}}</td>
<td>{{dataObj.sumObj.OutCome}}</td>
<td>{{dataObj.sumObj.ReceiptWBMoney}}</td>
<td>{{dataObj.sumObj.ReceiptMoney}}</td>
<td>{{dataObj.sumObj.AgoIncom}}</td>
<td>{{dataObj.sumObj.NowIncome}}</td>
<td>{{dataObj.sumObj.IncomeCount}}</td>
<td>{{dataObj.sumObj.OutComeCount}}</td>
</tr>
</table>
</div>
</div>
</template>
<script>
// 自定义列组件
import {
getSchoolDropdown
} from '../../../api/school/index'
export default {
data() {
return {
showID: false,
active: 1,
userId: 0,
msg: {
BankID: -1,
TradeWay: -1,
sTradeDate: new Date().Format('yyyy-MM-dd'),
eTradeDate: new Date().Format('yyyy-MM-dd'),
EmployeeId: 0,
//1-银行,2-现金
IsBank: 2,
RB_Branch_Id:-1,
},
accountList: [],
BranchAccountList: [],
transactionDate: [new Date().Format('yyyy-MM-dd'), new Date().Format('yyyy-MM-dd')],
AccList: [],
loading: false,
currentPage: 1,
total: 0,
dataList: [],
dataObj: {},
branchName: '',
CompanyList:[],
}
},
created() {
},
components: {},
mounted() {
let userInfo = this.getLocalStorage();
this.getList();
this.getBranchList()
this.branchName = userInfo.GroupName
this.msg.EmployeeId = userInfo.EmployeeId;
},
methods: {
goUrlNew(obj) {
this.$router.push({
path: "DocumentStatistics",
query: {
"AccountId": obj.BankID,
"StartTime": this.msg.sTradeDate,
"EndTime": this.msg.eTradeDate,
"blank": 'y',
"tab": '财务收据'
}
})
},
goUrl(obj) {
this.OpenNewUrl('/financial/accDetail/CashAccDetail', {
"Is_Cashier": 1,
"TypeId": obj.TypeId,
"BankID": obj.BankID,
"sTradeDate": this.msg.sTradeDate,
"eTradeDate": this.msg.eTradeDate,
"DayReport": 1,
'RB_Branch_Id':this.msg.RB_Branch_Id
});
// this.$router.push({
// path: "CashAccDetail",
// query: {
// "Is_Cashier": 1,
// "TypeId": obj.TypeId,
// "BankID": obj.BankID,
// "sTradeDate": this.msg.sTradeDate,
// "eTradeDate": this.msg.eTradeDate,
// "DayReport": 1,
// "blank": 'y',
// "tab": '现金账户明细'
// }
// })
},
getList: function () {
this.loading = true;
this.dataObj = {};
this.apipost('Financial_post_GetReportListForEdu', this.msg, res => {
if (res.data.resultCode == 1) {
this.dataObj = res.data.data;
} else {
this.$message.error(res.data.message);
}
this.loading = false;
}, err => {})
},
AccountType_post_GetList() { //获取账户类型下拉
this.apipost('AccountType_post_GetList', this.queryAccMsg, res => {
if (res.data.resultCode == 1) {
this.AccList = res.data.data;
} else {
this.$message.error(res.data.message);
}
}, err => {})
},
timeAdd(t) { // 日期格式
if (!this.transactionDate) {
this.msg.sTradeDate = '';
this.msg.eTradeDate = '';
return
}
this.msg.sTradeDate = this.transactionDate[0];
this.msg.eTradeDate = this.transactionDate[1];
this.getList()
},
queryInfoInit() { // 初始化msg
},
getBranchList() {//获取校区
getSchoolDropdown({}).then(res => {
this.CompanyList = res.Data;
}).catch(() => {
})
},
resetPageIndex() { // 重置页码
this.msg.pageIndex = 1;
this.currentPage = 1;
},
method5: function () {
this.GetErpLocalFile("Financial_post_CashOutToGetReportListForEdu", this.msg, "现金日报表.xls");
},
}
}
</script>
\ No newline at end of file
<style scoped>
@import "../css/cssReset.css";
.page_fnDm{background-color: white}
.query-box{overflow: inherit}
.query-box{border: none}
.query-box ul {overflow: initial;}
.query-box li:last-child{float: left}
.query-box>ul>li:last-child{float: right;}
.query-box .hight_query ul .el-input{width: inherit }
.page_CashReport ._fnDm_content{
width: 100%;
}
.page_CashReport .singeRowTable tr th{
border: 1px solid #d2d2d2;
}
</style>
<template>
<div class="page_fnDm page_CashReport page-body" @keyup.enter="getList()">
<div class="query-box">
<el-form class="_info_box clearfix" label-width="110px">
<el-row style="padding:15px 20px 0 0;">
<!-- <el-col :span="4">
<el-form-item label="交易方式:">
<el-select filterable v-model='msg.TradeWay' @change="getAccountList(msg.AccountType,msg.TradeWay),msg.ClientID=''">
<el-option :value="-1" label="不限"></el-option>
<el-option v-for='item in BranchAccountList' :label='item.Name' :value='item.ID' :key='item.ID'>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="银行账户:">
<el-select filterable v-model='msg.BankID'>
<el-option :value="-1" label="不限"></el-option>
<el-option v-for='item in accountList' :label='item.Name' :value='item.ID' :key='item.ID'>
</el-option>
</el-select>
</el-form-item>
</el-col> -->
<el-col :span="6">
<el-form-item :label="$t('fnc.jiaoyiriqi')+':'">
<el-date-picker class="h34" v-model="transactionDate" @change="timeAdd(3)" type="daterange" value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="校区">
<el-select filterable v-model='msg.RB_Branch_Id' @change="getList()">
<el-option :value="-1" label="不限"></el-option>
<el-option v-for='item in CompanyList' :label='item.SName' :value='item.SId' :key='item.SId'>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<ul class="clearfix" style="position: absolute;right: 20px;top: 20px;">
<div class="hight_query">
<span>
</span>
<!-- <button class="hollowFixedBtn" @click="getList()">{{$t('pub.searchBtn')}}</button> -->
<q-btn color="primary" size="11px" :label="$t('pub.searchBtn')" @click="getList()" style="marginRight:10px"/>
<!-- <button class="normalBtn" @click="method5()">{{$t('visa.v_daochu')}}</button> -->
<q-btn color="primary" size="11px" :label="$t('visa.v_daochu')"@click="method5()" />
</div>
</ul>
</div>
<div class="_fnDm_content" v-loading='loading'>
<table class="singeRowTable" cellspacing="0" cellpadding="0" style="border: 1px solid rgb(230, 230, 230);">
<tr>
<th colspan="10">{{branchName}}{{$t('fnc.a_xjrbaobiao')}}</th>
</tr>
<tr>
<!-- <th>{{$t('system.table_company')}}</th> -->
<th>{{$t('fnc.yinhang')}}</th>
<th>{{$t('fnc.a_sqyue')}}</th>
<th>{{$t('fnc.a_bqjffshenge')}}</th>
<th>{{$t('fnc.a_bqdffshenge')}}</th>
<th>本期收据</th>
<th>本期未付账</th>
<th>{{$t('fnc.a_bqyue')}}</th>
<th>{{$t('fnc.a_jfbishu')}}</th>
<th>{{$t('fnc.a_dfbishu')}}</th>
</tr>
<template v-for="item in dataObj.resultList">
<tr>
<th >{{item.AName}}</th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
<tr v-for="(subItem, index) in item.SubList">
<!-- <td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.BName}}</td> -->
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.Alias}}</td>
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.AgoMoney}}</td>
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.Income}}</td>
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.OutCome}}</td>
<td>{{subItem.ReceiptMoney}}</td>
<td>{{subItem.NONPaymentMoney}}</td>
<!-- <td @click="goUrlNew('Manfunds',subItem)" style="cursor: pointer">{{subItem.ReceiptMoney}}</td>
<td @click="goUrlNew('OutstandingAccounts',subItem)" style="cursor: pointer">{{subItem.NONPaymentMoney}}</td> -->
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.NowIncome}}</td>
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.IncomeCount}}</td>
<td @click="goUrl(subItem)" style="cursor: pointer">{{subItem.OutComeCount}}</td>
</tr>
<tr v-if="item.TotalList">
<td>{{item.AName}}合计</td>
<td>{{item.TotalList.AgoMoney}}</td>
<td>{{item.TotalList.Income}}</td>
<td>{{item.TotalList.OutCome}}</td>
<td >{{item.TotalList.ReceiptMoney}}</td>
<td >{{item.TotalList.NONPaymentMoney}}</td>
<td>{{item.TotalList.NowIncome}}</td>
<td>{{item.TotalList.IncomeCount}}</td>
<td>{{item.TotalList.OutComeCount}}</td>
</tr>
</template>
<tr v-for="item in dataObj.sumList">
<td >{{item.BName}}总计</td>
<td>{{item.AgoMoney}}</td>
<td>{{item.Income}}</td>
<td>{{item.OutCome}}</td>
<td>{{item.ReceiptMoney}}</td>
<td>{{item.NONPaymentMoney}}</td>
<td>{{item.NowIncome}}</td>
<td>{{item.IncomeCount}}</td>
<td>{{item.OutComeCount}}</td>
</tr>
<tr v-if="dataObj.sumObj">
<td >总计</td>
<td>{{dataObj.sumObj.AgoMoney}}</td>
<td>{{dataObj.sumObj.Income}}</td>
<td>{{dataObj.sumObj.OutCome}}</td>
<td>{{dataObj.sumObj.ReceiptMoney}}</td>
<td>{{dataObj.sumObj.NONPaymentMoney}}</td>
<td>{{dataObj.sumObj.NowIncome}}</td>
<td>{{dataObj.sumObj.IncomeCount}}</td>
<td>{{dataObj.sumObj.OutComeCount}}</td>
</tr>
</table>
</div>
</div>
</template>
<script>
// 自定义列组件
import {
getSchoolDropdown
} from '../../../api/school/index'
export default {
data() {
return {
showID: false,
active: 1,
userId: 0,
msg: {
BankID: -1,
TradeWay: -1,
sTradeDate: new Date().Format('yyyy-MM-dd'),
eTradeDate: new Date().Format('yyyy-MM-dd'),
//1-银行,2-现金
IsBank: 1,
EmployeeId:0,
RB_Branch_Id:-1,
},
accountList: [],
BranchAccountList: [],
transactionDate: [new Date().Format('yyyy-MM-dd'), new Date().Format('yyyy-MM-dd')],
AccList: [],
loading: false,
currentPage: 1,
total: 0,
GZAllList: [],
SZAllList: [],
PZAllList: [],
GZAll: {},
SZAll: {},
PZAll: {},
comPanyALLList: [],
ALLMoney: [],
dataObj: {},
branchName: '',
CompanyList:[],
}
},
created() {
},
components: {},
mounted() {
let userInfo = this.getLocalStorage();
this.branchName = userInfo.GroupName
this.getList();
this.getBranchList()
this.msg.EmployeeId= userInfo.EmployeeId;
},
methods: {
goUrlNew(path,obj){
let name = path;
this.$router.push({
path: name,
query:{
"BankType": obj.TradeWay,
"BankID": obj.BankID,
"StartTime": this.msg.sTradeDate,
"EndTime": this.msg.eTradeDate,
"blank": 'y',
"tab": '未认款'
}
})
},
goUrl: function(obj) {
let name = '';
let type = 0;
if (obj.TradeWay === 2) { // 平台
name = 'PlatformAccDetail';
type=1;
} else if (obj.TradeWay === 1) { // 银行
name = 'CompanyAccDetail';
type=1;
} else if (obj.TradeWay === 3) { //资金池
name = 'PoolAccDetail'
}
this.OpenNewUrl('/financial/accDetail/'+name, {
"Is_Cashier":1,
"TypeId": obj.TypeId,
"BankID": obj.BankID,
"sTradeDate": this.msg.sTradeDate,
"eTradeDate": this.msg.eTradeDate,
"DayReport":type,
'RB_Branch_Id':this.msg.RB_Branch_Id
});
// this.$router.push({
// path: name,
// query:{
// "Is_Cashier":1,
// "TypeId": obj.TypeId,
// "BankID": obj.BankID,
// "sTradeDate": this.msg.sTradeDate,
// "eTradeDate": this.msg.eTradeDate,
// "DayReport":type,
// "blank": 'y',
// "tab": '现金账户明细'
// }
// })
},
getList: function () {
this.loading=true;
this.dataObj={};
this.apipost('Financial_post_GetReportListForEdu', this.msg, res => {
if (res.data.resultCode == 1) {
this.dataObj = res.data.data;
} else {
this.$message.error(res.data.message);
}
this.loading = false;
}, err => {})
},
AccountType_post_GetList() { //获取账户类型下拉
this.apipost('AccountType_post_GetList', this.queryAccMsg, res => {
if (res.data.resultCode == 1) {
this.AccList = res.data.data;
} else {
this.$message.error(res.data.message);
}
}, err => {})
},
timeAdd(t) { // 日期格式
if (!this.transactionDate) {
this.msg.sTradeDate = '';
this.msg.eTradeDate = '';
return
}
this.msg.sTradeDate = this.transactionDate[0];
this.msg.eTradeDate = this.transactionDate[1];
this.getList()
},
resetPageIndex() { // 重置页码
this.msg.pageIndex = 1;
this.currentPage = 1;
},
getBranchList() {//获取校区
getSchoolDropdown({}).then(res => {
this.CompanyList = res.Data;
}).catch(() => {
})
},
method5: function() {
this.GetErpLocalFile("Financial_post_OutToGetReportListForEdu", this.msg,"银行日报表.xls");
},
}
}
</script>
\ No newline at end of file
......@@ -1035,7 +1035,7 @@
@click="dialogFormVisible=true,updateMsg.FrID=item.FrID,updateMsg.OTradeDate=item.TradeDate"></i>
</el-tooltip>
<el-tooltip class="item" content="交易方式" placement="top" v-if="active==2 && istransaction == true">
<i v-if="active==2" class="iconfont icon-jiaoyi"
<i v-if="active==2 && istransaction == true" class="iconfont icon-jiaoyi"
@click="showjiaoyi(item.FrID)"></i>
</el-tooltip>
</td>
......@@ -2549,10 +2549,10 @@
}
msg.push(obj)
})
this.apipost('Financial_post_SetFinanceTrabeInfo', msg, res => {
this.apipost('Financial_get_SetFinanceTrabeInfo', msg, res => {
if (res.data.resultCode == 1) {
this.$message.success(res.data.message);
this.transactionmode = true
this.transactionmode = false
this.getPageList()
}else{
this.Error(res.data.message);
......
......@@ -475,7 +475,9 @@
._TCIDAndTCNUMList {
display: flex;
}
.caoz i{
margin-bottom: 5px;
}
</style>
<template>
......@@ -713,6 +715,14 @@
border-radius: 4px;">
收入
</span>
<span v-if="scope.row.Type==4" style="display: inline-block;
padding: 2px 8px;
color: white;
background-color: #2BB87C;
line-height: 16px;
border-radius: 4px;">
调拨
</span>
<span v-if="scope.row.Type==5" style="display: inline-block;
padding: 2px 8px;
color: white;
......@@ -838,7 +848,7 @@
<el-table-column prop="StatusStr" label="当前状态"></el-table-column>
<el-table-column prop="Remark" label="操作">
<template slot-scope="scope">
<div>
<div class="caoz">
<span>
<el-tooltip class="item" effect="dark" content="查看" placement="top">
<i v-if="scope.row.Type !== 4" style="width: 30px;
......@@ -898,6 +908,21 @@
outline: none;" class="iconfont icon-fapiao" v-if="Finance_InvoiceUpdate==true && scope.row.Type==2" @click="setdaju(scope.row)">
</i>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="费用类型" placement="top">
<!-- <i v-if="scope.row.isExchange" style="width: 30px;-->
<i style="width: 30px;
height: 30px;
display: inline-block;
color: white !important;
border-radius: 50%;
text-align: center;
line-height: 30px;
margin-right: 10px;
cursor: pointer;
background-color: #47BF8C;
outline: none;" class="iconfont icon-caiwu" v-if="Finance_ExpenseType==true && (scope.row.Type==2 || scope.row.Type==1)" @click="showfeiyong(scope.row)">
</i>
</el-tooltip>
</span>
</div>
</template>
......@@ -962,6 +987,26 @@
</div>
</template>
</el-dialog>
<!-- 修改费用类型 -->
<el-dialog title="修改费用类型" width="400px"
:visible.sync="costmode" center >
<el-form label-width="110px">
<div class="rb_top_row _r_mb5" v-for='(x,y) in trabeList' :key='y'>
<p>费用类型:
<el-select filterable v-model='x.CostTypeId' placeholder="" @change="getAccountList2(x.CostTypeId,y)"
class="w250 _border_b_1">
<el-option v-for='item in GetCostTypeList' :label='item.Name' :value='item.ID' :key='item.ID' >
</el-option>
</el-select>
</p>
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button class="hollowFixedBtn" @click="costmode=false">{{$t('pub.cancelBtn')}}</el-button>
<el-button class="normalBtn" type="primary" @click="preservetransaction()">{{$t('pub.sureBtn')}}</el-button>
</div>
</el-dialog>
</div>
</template>
......@@ -996,6 +1041,7 @@ import treeItemVue from 'src/components/common/tree-table/tree-item.vue';
widthSon: '700px',
colorSon: "#f5f5f5",
Finance_InvoiceUpdate:false,
Finance_ExpenseType:false,
msg: {
pageIndex: 1,
pageSize: 5,
......@@ -1111,7 +1157,8 @@ import treeItemVue from 'src/components/common/tree-table/tree-item.vue';
},
xgfpBox:false,
getInvoiceList:[],
costmode:false,//费用类型的修改弹窗
trabeList:[],//修改费用类型的下啦数据
}
},
created() {
......@@ -1159,9 +1206,12 @@ import treeItemVue from 'src/components/common/tree-table/tree-item.vue';
let ActionMenuList = JSON.parse(localStorageData).data.ActionMenuList
if (ActionMenuList && ActionMenuList.length > 0) {
ActionMenuList.forEach(x => {
if (x.FunctionCode == 'Finance_InvoiceUpdate') {
if (x.FunctionCode == 'Finance_InvoiceUpdate') {//发票修改权限
this.Finance_InvoiceUpdate = true
}
if(x.FunctionCode == 'Finance_ExpenseType'){//费用类型修改权限
this.Finance_ExpenseType = true
}
})
}
},
......@@ -1785,6 +1835,43 @@ import treeItemVue from 'src/components/common/tree-table/tree-item.vue';
"pageIndex": pageIndex
}
})
},
showfeiyong(row){
this.apipost('Financial_get_GetFinanceCostTypeList', {FrId:row.FrID}, res => {
if (res.data.resultCode == 1) {
this.trabeList = res.data.data
this.costmode = true
}
}, err => {})
},
getAccountList2(val,index){
this.GetCostTypeList.map((x)=>{
if(x.ID == val){
this.trabeList[index].CostTypeName = x.Name;
return
}
})
},
preservetransaction(){//保存费用类型的修改
let msg = []
this.trabeList.forEach(x=>{
let obj ={
ID:x.ID,
FinanceId:x.FinanceId,
CostTypeId:x.CostTypeId,
CostTypeName:x.CostTypeName,
}
msg.push(obj)
})
this.apipost('Financial_get_SetFinanceCostTypeInfo', msg, res => {
if (res.data.resultCode == 1) {
this.$message.success(res.data.message);
this.costmode = false
this.getPageList()
}else{
this.Error(res.data.message);
}
}, err => {})
}
}
......
......@@ -169,7 +169,7 @@
<div style="width:100%; overflow-x:auto">
<table :boeder="1" class="singeRowTable orderCompleteStatistics" style="width:3000px;border:1px solid #E6E6E6;" cellspacing="0" cellpadding="0">
<tr>
<th colspan="14" style="border-right:1px solid #999;border-bottom:1px solid #999">合同信息</th>
<th colspan="15" style="border-right:1px solid #999;border-bottom:1px solid #999">合同信息</th>
<th colspan="6" style="border-right:1px solid #999;border-bottom:1px solid #999">收款信息</th>
<th colspan="2" style="border-right:1px solid #999;border-bottom:1px solid #999">合同有效金额</th>
<th colspan="7" style="border-right:1px solid #999;border-bottom:1px solid #999">消费情况</th>
......@@ -182,6 +182,7 @@
<th :width='200'>签订时间</th>
<th :width='220'>合同编号</th>
<th :width='400'>产品名称</th>
<th :width='200'>班号</th>
<th :width='400'>班级</th>
<th :width='150'>学员名称</th>
<th :width='120'>业务员</th>
......@@ -223,7 +224,8 @@
<td>{{item.CreateTime}}</td>
<td @click="goUrl('/sale/contractManage',item.ContractNo)"><span style="cursor: pointer;text-decoration: underline;" >{{item.ContractNo}}</span></td>
<td @click="goUrl('/course/course',item.CourseName)"><span style="cursor: pointer;text-decoration: underline;" >{{item.CourseName}}</span></td>
<td @click="goUrl2('/course/classManage',item.ClassName)"><span style="cursor: pointer;text-decoration: underline;" >{{item.ClassName}}</span></td>
<td >{{item.ClassNo}}</td>
<td @click="goUrl2('/course/classManage',item.ClassName)"><div style="cursor: pointer;text-decoration: underline;" >{{item.ClassName}}</div></td>
<td>{{item.StudentName}}</td>
<td>{{item.CreateByName}}</td>
<td>{{item.TotalClassHours}}</td>
......
......@@ -139,6 +139,7 @@
<el-table-column prop="ClassDate" label="上课日期"></el-table-column>
<el-table-column prop="TimeBucket" label="上课时间段"> </el-table-column>
<el-table-column prop="GuestName" label="学生名称"> </el-table-column>
<el-table-column prop="ClassNo" width='120' label="班号"></el-table-column>
<el-table-column prop="ClassName" label="上课班级" width='200'> </el-table-column>
<el-table-column prop="CourseName" label="课程" width='200'></el-table-column>
<el-table-column prop="TeacherName" label="老师名称"></el-table-column>
......
......@@ -68,7 +68,7 @@
option-label="TeacherName" v-model="msg.TeacherId" ref="TId" :options="TeacherList" label="老师"
:dense="false" emit-value map-options />
</div>
<div class="col-3">
<!-- <div class="col-3">
<q-select filled stack-label use-input input-debounce="0" option-value="ClassId" clearable @input="getList"
option-label="ClassName" v-model="msg.ClassId" :options="ClassList" label="班级" :dense="false" emit-value
map-options @filter="filterFn">
......@@ -80,7 +80,7 @@
</q-item>
</template>
</q-select>
</div>
</div> -->
<div class="col-3">
<q-select filled stack-label @input="handleCurrentChanges(1)" option-value="Id" option-label="Name" v-model="datetype" ref="Id"
......@@ -121,7 +121,12 @@
<el-table-column prop="Date" label="上课日期"></el-table-column>
<el-table-column prop="TimeBucket" label="上课时间段"> </el-table-column>
<el-table-column prop="TeacherName" label="老师名称"></el-table-column>
<el-table-column prop="ClassName" label="上课班级" width='200'> </el-table-column>
<el-table-column prop="ClassNo" label="班号"></el-table-column>
<el-table-column prop="ClassName" label="上课班级" width='200' :filters='ClassNameList' :filter-method="filterHandler">
<template slot="header">
<span>上课班级 <span style="font-size: 10px;color: #409EFF;">(筛选)</span> </span>
</template>
</el-table-column>
<el-table-column prop="CourseName" label="课程" width='230'></el-table-column>
<el-table-column prop="UnitPrice" label="课时单价"></el-table-column>
<el-table-column prop="KSNum" label="上课课时"></el-table-column>
......@@ -132,7 +137,9 @@
</el-table>
<div style="margin-top: 10px;text-align: center;">
<el-pagination background @current-change="handleCurrentChanges"
layout="total,prev, pager, next, jumper" :current-page.sync="msg.pageIndex"
@size-change="handleSizeChange"
layout="total,sizes,prev, pager, next, jumper" :current-page.sync="msg.pageIndex"
:page-sizes="[15, 1000, 10000]"
:page-size="msg.pageSize" :total='total'>
</el-pagination>
</div>
......@@ -189,6 +196,7 @@
],
ClassList: [],
allClassList: [],
ClassNameList:[],
}
},
created() {
......@@ -231,10 +239,28 @@
if (res.Code == 1) {
this.loading = false;
this.tableData = res.Data.PageData
this.ClassNameList=[],
this.tableData.forEach(x => {
let obj = {
text: x.ClassName,
value: x.ClassName
}
this.ClassNameList.push(obj)
})
this.ClassNameList = this.unique(this.ClassNameList)
this.total = res.Data.Count
}
})
},
unique(arr, Name) { //数组根据字段去重
const res = new Map();
return arr.filter(
(list) => !res.has(list.text) && res.set(list.text, 1)
);
},
setClass(item) {//班级
this.isShowClass = true;
getClassDropDownList({
......@@ -300,6 +326,11 @@
this.msg.pageIndex = val;
this.getList()
},
handleSizeChange(val){
this.msg.pageIndex = 1;
this.msg.pageSize = val;
this.getList()
},
txexport(){
let text = '';
......@@ -353,7 +384,11 @@
var diff = m2 - m1;
return diff;
}
},
filterHandler(value, row, column) {
const property = column['property'];
return row[property] === value;
},
},
......
......@@ -43,9 +43,11 @@
font-weight: bold;
color: #FFFFFF;
padding-left: 39px;
margin-top: 55px;
/* margin-top: 55px; */
margin-top: 8px;
}
.personalData .box_l_cen{
.personalData .box_l_cen {
width: 100%;
height: 50px;
line-height: 50px;
......@@ -57,22 +59,39 @@
margin-top: 8px;
justify-content: space-between;
}
.personalData .headportrait{
.personalData .headportrait {
width: 120px;
height: 120px;
border-radius: 20px;
position: relative;
margin-top: 20px;
}
.personalData .box_r_title{
font-size: 12px;font-weight: bold;color: #000000;margin-top: 27px
.personalData .editbianji {
position: absolute;
right: -10px;
top: -10px;
width: 26px;
height: 26px;
background: #FFFFFF;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 0px 10px 0px rgba(2, 44, 66, 0.15);
}
.personalData .box_r_title {
font-size: 12px;
font-weight: bold;
color: #000000;
margin-top: 27px
}
.personalData .box_r_input{
.personalData .box_r_input {
width: 55%;
height: 54px;
padding: 10px 22px;
border-radius: 4px;
background: #F0F5FB;
margin-top: 20px;
}
</style>
......@@ -102,41 +121,98 @@
<span class="box_l_t_l">电话:</span>
<span>{{showObj.UserMobile}}</span>
</div>
<div class="box_l_t">
<div class="box_l_t" style="margin-bottom: 55px;">
<span class="box_l_t_l">部门:</span>
<span>{{showObj.DeptName}}</span>
</div>
<div class="box_l_title">概要信息</div>
<div class="box_l_cen">预警信息</div>
<div class="box_l_cen">账户资料</div>
<div class="box_l_cen">密码修改</div>
<!-- <div class="box_l_title" style="margin-top: 55px;">概要信息</div> -->
<div :class="rightType==3?'box_l_title':'box_l_cen'" @click='rightType=3'>预警信息</div>
<div :class="rightType==1?'box_l_title':'box_l_cen'" @click='rightType=1'>账户资料</div>
<div :class="rightType==2?'box_l_title':'box_l_cen'" @click='rightType=2'>密码修改</div>
</div>
<div class="box_r">
<template v-if='rightType == 1'>
<div style="font-size: 16px;font-weight: bold;color: #000000;">账户资料</div>
<div class="box_r_title" >账户资料</div>
<div class="box_r_title">账户资料</div>
<div class="headportrait">
<q-avatar size="120px" font-size="36px" rounded style="background:#C9F7F5" text-color="white">
<img :src="showObj.UserIcon" v-if="showObj.UserIcon">
<img :src="datamodify.UserIcon" v-if="datamodify.UserIcon">
<span v-else>{{showObj.AccountName.substring(0,1)}}</span>
</q-avatar>
<el-upload class="editbianji" :http-request="uploadFileBtn" :multiple="false" action=''
accept=".JPG, .PNG, .JPEG,.jpg, .png, .jpeg" :show-file-list="false">
<q-icon name="edit" />
</el-upload>
</div>
<div style="font-size: 12px;color: #999999;margin-top: 12px;">图片格式:png、jpg、jpeg</div>
<div class="box_r_title" >基础资料</div>
<div class="box_r_title">基础资料</div>
<div class="box_r_input">
<q-input v-model="datamodify.EmployeeName" label="姓名"
:rules="[val => !!val || '姓名不能为空']" lazy-rules filled maxlength="20" />
</div>
<div class="box_r_input"></div>
<div class="box_r_title" >联系方式</div>
<div class="box_r_input">
<q-select filled stack-label option-value="SId" option-label="SName" v-model="datamodify.School_Id"
ref="SId" :options="CompanyList" label="校区" :dense="false" emit-value map-options />
</div>
<div class="box_r_title">联系方式</div>
<div class="box_r_input">
<q-input v-model="datamodify.EmployeeTel" label="电话" type='number'
:rules="[val => !!val || '电话不能为空']" lazy-rules filled maxlength="11" />
</div>
<div class="box_r_input">
<q-input v-model="datamodify.Email" label="邮箱"
:rules="[val => !!val || '邮箱不能为空']" lazy-rules filled maxlength="20" />
</div>
<q-btn color="primary" style="width: 300px;margin-top: 50px;" :loading="loading1" @click='dataSubmit'>
<div class="ellipsis">
提交
</div>
</q-btn>
</template>
<template v-if='rightType == 2'>
<div style="font-size: 16px;font-weight: bold;color: #000000;">密码修改</div>
<form @submit.prevent.stop="passwordSubmit" class="q-gutter-md">
<div class="box_r_title">原密码</div>
<div class="box_r_input">
<q-input v-model="passwordMsg.OldPassWord" label="请输入旧密码" type='password' ref='OldPassWord'
:rules="[val => !!val || '请输入旧密码']" lazy-rules filled />
</div>
<div class="box_r_title">新密码</div>
<div class="box_r_input">
<q-input v-model="passwordMsg.NewPassWord" label="请输入新密码" type='password' ref='NewPassWord'
:rules="[val => !!val || '请输入新密码']" lazy-rules filled />
</div>
<div class="box_r_input">
<q-input v-model="passwordMsg.NewSurePassWord" label="请再次输入新密码" type='password' ref='NewSurePassWord'
:rules="[val => !!val || '请再次输入新密码']" lazy-rules filled />
</div>
<q-btn color="primary" style="width: 300px;margin-top: 50px;" :loading="loading2" label="确定修改" type="submit" > </q-btn>
</form>
</template>
</div>
</div>
</template>
<script>
import {
queryStudentBackClassPage,
} from '../../api/sale/bill'
setEmployeeBaseInfo,
updateUserPassword
} from '../../api/users/user'
import {
getSchoolDropdown,
} from '../../api/school/index'
import {
UploadSelfFile
} from '../../api/common/common'
const defaultpassword = {
OldPassWord:'',
NewPassWord:'',
NewSurePassWord:'',
}
export default {
meta: {
title: "个人资料"
......@@ -146,30 +222,51 @@
},
data() {
return {
loading1: false,
loading2:false,
showObj: {},
rightType:1,//右边显示类型
rightType: 1,//右边显示类型
datamodify: {},
CompanyList: [],
passwordMsg:Object.assign({},defaultpassword),
}
},
created() {
this.showObj = this.getLocalStorage();
this.datamodify = {
EmployeeName: this.showObj.AccountName,
UserIcon: this.showObj.UserIcon,
EmployeeTel: this.showObj.UserMobile,
Email: this.showObj.Email,
School_Id: this.showObj.School_Id,
}
},
mounted() {
// this.getStuBackBill();
this.getBranchList()
},
methods: {
//获取退课单据分页列表
getStuBackBill() {
queryStudentBackClassPage(this.msg).then(res => {
this.loading = false;
this.data = res.Data.PageData;
this.pageCount = res.Data.PageCount;
getBranchList() {//获取校区
getSchoolDropdown({}).then(res => {
this.CompanyList = res.Data;
var obj = {
SName: '全部',
SId: 0
}
this.CompanyList.unshift(obj);
}).catch(() => {
this.loading = false;
})
},
logout() {
uploadFileBtn(file) { //上传
UploadSelfFile('studentIcon', file.file, x => {
if (x.Code == 1) {
this.datamodify.UserIcon = x.FileUrl
}
}, 1);
},
logout() {//退出登录
this.$store
.dispatch('LogOut')
.then(() => {
......@@ -179,6 +276,95 @@
})
},
dataSubmit() {//资料提交
if (this.datamodify.UserIcon == null || this.datamodify.UserIcon == '') {
this.$q.notify({
type: 'negative',
position: "top",
message: `照片不能为空`
})
return
}
if (this.datamodify.EmployeeName == null || this.datamodify.EmployeeName == '') {
this.$q.notify({
type: 'negative',
position: "top",
message: `姓名不能为空`
})
return
}
if (this.datamodify.EmployeeTel == null || this.datamodify.EmployeeTel == '') {
this.$q.notify({
type: 'negative',
position: "top",
message: `电话不能为空`
})
return
}
if (this.datamodify.Email == null || this.datamodify.Email == '') {
this.$q.notify({
type: 'negative',
position: "top",
message: `邮箱不能为空`
})
return
}
setEmployeeBaseInfo(this.datamodify).then(res => {
console.log(res)
if (res.Code == 1) {
this.$q.notify({
type: 'iconfont icon-chenggong',
color: 'accent',
position: "top",
message: res.Message
})
this.showObj.AccountName = this.datamodify.EmployeeName
this.showObj.UserIcon = this.datamodify.UserIcon
this.showObj.UserMobile = this.datamodify.EmployeeTel
this.showObj.Email = this.datamodify.Email
this.showObj.School_Id = this.datamodify.School_Id
let localStorageobj={
data:this.showObj
}
localStorage.setItem("loginUserInfo", JSON.stringify(localStorageobj) );
location.reload();
}
}).catch(() => {
})
},
passwordSubmit () {
this.$refs.OldPassWord.validate()
this.$refs.NewPassWord.validate()
this.$refs.NewSurePassWord.validate()
if (this.$refs.OldPassWord.hasError || this.$refs.NewPassWord.hasError|| this.$refs.NewSurePassWord.hasError) {
this.formHasError = true
}
else {
// 掉接口
updateUserPassword(this.passwordMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
type: 'iconfont icon-chenggong',
color: 'accent',
position: "top",
message: res.Message
})
this.passwordMsg = Object.assign({},defaultpassword)
}
}).catch(() => {
})
}
},
},
......
......@@ -426,14 +426,19 @@ const routes = [{
component: () =>
import("pages/financial/accDetail/TransferReport.vue")
},
{
path: "/financial/accDetail/newTransferReport", //新银行日报表
component: () =>
import("pages/financial/accDetail/newTransferReport.vue")
},
{
path: "/financial/accDetail/CashReport", //现金日报表
component: () =>
import("pages/financial/accDetail/CashReport.vue")
}, {
path: "/financial/accDetail/CashReport", //现金日报表
path: "/financial/accDetail/newCashReport", //新现金日报表
component: () =>
import("pages/financial/accDetail/CashReport.vue")
import("pages/financial/accDetail/newCashReport.vue")
},
{
path: "/financial/financalDocument/ChoiceAddFinancialDocuments",
......@@ -820,6 +825,7 @@ const routes = [{
component: () =>
import("pages/course/chapter.vue")
},
{
path: "/course/coursejob", //作业管理
component: () =>
......@@ -968,7 +974,11 @@ const routes = [{
title: '资产管理'
},
},
{
path: "/course/chapter-editor", //章节管理
component: () =>
import("pages/course/chapterEditor.vue")
},
{
path: "*",
component: () =>
......
......@@ -24,4 +24,49 @@ export function validateUpperCase(str) {
export function validatAlphabets(str) {
const reg = /^[A-Za-z]+$/
return reg.test(str)
}
/** 比对数组是否相同 */
export function compareArray(arrA, arrB) {
let isSame = true
if (arrA.length !== arrB.length) {
return false
} else {
arrA.some((el, idx) => {
if (el !== arrB[idx]) {
isSame = false
return true
}
})
}
return isSame
}
/** 比对对象是否相同 */
export function compareObject(objA, objB,ignoreArray, endLoop) {
let isSame = true
let isArray = '[object Array]'
let isObject = '[object Object]'
for (var key in objA) {
if (objB[key] !== '' && !objB[key] && typeof objB[key] !== 'number') {
isSame = false
break
}
let type = Object.prototype.toString.call(objA[key])
if (type === isArray && ignoreArray) {
isSame = compareArray(objA[key], objB[key])
} else if (type === isObject) {
isSame = compareObject(objA[key], objB[key],ignoreArray)
} else if (objA[key] !== objB[key]) {
isSame = false
}
if (!isSame) {
return isSame
}
}
if (isSame && !endLoop) {
isSame = compareObject(objB, objA,ignoreArray, true)
}
return isSame
}
\ No newline at end of file
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