Commit 13f7e083 authored by 黄奎's avatar 黄奎

页面修改

parent 494bb368
......@@ -361,6 +361,17 @@ export function queryAreaTree(data) {
})
}
/**
* 获取国家列表
*/
export function queryCountryList(data) {
return request({
url: '/Public/GetCountryList',
method: 'post',
data
})
}
/**
* 获取省市区列表
*/
......
......@@ -56,7 +56,6 @@
ref="TaskSubTitle" class="col-6 q-pb-lg" label="任务子标题" />
</div>
</div>
<div class="row wrap">
<div class="col-6">
<q-input filled v-model="objOption.TaskStartTime" class="q-pr-lg" mask="date" label="开始时间">
......@@ -89,27 +88,7 @@
</q-input>
</div>
</div>
<div class="row wrap" style="margin-top:20px;">
<div class="col-12">任务图片</div>
</div>
<div class="row wrap" style="margin:20px 0;">
<div class="row col-12">
<div class="sale_ImgDiv" v-for="(sItem,sIndex) in objOption.TaskImageList" :key="sIndex">
<img :src="sItem" />
<q-btn size="6px" style="position:absolute;right:-8px;top:-5px;" @click="deleTask(sIndex)" round
color="red" icon="iconfont icon-guanbi1" />
</div>
<el-upload class="avatar-uploader saleUpload" action="" :before-upload="uploadFileTask"
:show-file-list="false">
<i class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
</div>
<div class="row wrap">
<div class="col-6">
<q-input filled stack-label maxlength="20" :dense="false" v-model="objOption.TaskKudo" ref="TaskKudo"
class="col-6 q-pr-lg q-pb-lg" label="奖品名称" :rules="[val => !!val || '请输入奖品名称']" />
</div>
<div class="col-6">
<q-input filled v-model="objOption.ExchangeEndTime" mask="date" label="兑换截止日期">
<template v-slot:append>
......@@ -125,84 +104,76 @@
</template>
</q-input>
</div>
<div class="col-6">
</div>
</div>
<div class="row wrap" style="margin-top:20px;">
<div class="col-12">奖品图片</div>
<div class="col-12">任务图片</div>
</div>
<div class="row wrap" style="margin-top:20px;">
<div class="row wrap" style="margin:20px 0;">
<div class="row col-12">
<div class="sale_ImgDiv" v-for="(sItem,sIndex) in objOption.TaskKudoImgList" :key="sIndex">
<div class="sale_ImgDiv" v-for="(sItem,sIndex) in objOption.TaskImageList" :key="sIndex">
<img :src="sItem" />
<q-btn size="6px" style="position:absolute;right:-8px;top:-5px;" @click="deleKudo(sIndex)" round
<q-btn size="6px" style="position:absolute;right:-8px;top:-5px;" @click="deleTask(sIndex)" round
color="red" icon="iconfont icon-guanbi1" />
</div>
<el-upload class="avatar-uploader saleUpload" action="" :before-upload="uploadFileKudo"
<el-upload class="avatar-uploader saleUpload" action="" :before-upload="uploadFileTask"
:show-file-list="false">
<i class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
</div>
<div class="q-pt-none scroll" style="max-height:60hv;margin-bottom:20px;">
<table>
<thead>
<tr style="height:60px;">
<td colspan="5" style="text-align:right;">
<q-btn color="accent" size="sm" icon="add" label="新增子任务" @click="addSubTask()" />
</td>
</tr>
<tr>
<td style="width:200px">
任务类型
</td>
<td style="width:200px">
任务条件
</td>
<td style="width:140px">
完成类型
</td>
<td style="width:140px">
完成值
</td>
<td>
操作
</td>
</tr>
</thead>
<tbody v-for="(sItem, sIndex) in objOption.DetailsList" :key="sIndex">
<tr>
<td style="height:50px">
<q-select filled stack-label option-value="Id" @input="clearTarget(sItem)" option-label="Name"
v-model="sItem.TaskType" ref="PriceDiscountType_Id" :options="taskTypeData" label="任务类型"
style="width:160px" dense emit-value map-options />
</td>
<td>
<q-select v-if="sItem.TaskType==2" filled stack-label option-value="Id" option-label="SubjectName"
v-model="sItem.TargetIdList" :options="CourseSubjectList" multiple use-chips label="所属科目"
style="width:160px" dense emit-value map-options />
<q-btn color="accent" size="sm" icon="add" label="新增子任务" @click="addSubTask()" />
<template v-for="(sItem, sIndex) in objOption.DetailsList">
<div :key="sIndex">
<q-input filled stack-label maxlength="20" dense v-model="sItem.DetailsName" ref="DetailsName"
class="q-pr-none" label="条件名称" />
<br />
<q-select filled stack-label option-value="Id" @input="clearTarget(sItem)" option-label="Name"
v-model="sItem.TaskType" ref="PriceDiscountType_Id" :options="taskTypeData" label="任务类型"
style="width:160px" dense emit-value map-options />
<q-select v-if="sItem.TaskType==2" filled stack-label option-value="Id" option-label="SubjectName"
v-model="sItem.TargetIdList" :options="CourseSubjectList" multiple use-chips label="所属科目"
style="width:160px" dense emit-value map-options />
<q-select v-if="sItem.TaskType==3" multiple filled use-chips stack-label v-model="sItem.TargetIdList"
option-value="CateId" option-label="CateName" :options="TreeCategoryList" label="课程系列"
style="width:160px" dense emit-value map-options />
<q-select v-if="sItem.TaskType==3" multiple filled use-chips stack-label v-model="sItem.TargetIdList"
option-value="CateId" option-label="CateName" :options="TreeCategoryList" label="课程系列"
style="width:160px" dense emit-value map-options />
<q-select v-if="sItem.TaskType==4" multiple filled use-chips stack-label v-model="sItem.TargetIdList"
option-value="CourseId" option-label="CourseName" :options="CourseList" label="课程" style="width:160px"
dense emit-value map-options />
<br />
<q-select filled stack-label option-value="Id" option-label="Name" v-model="sItem.TaskFinishType"
:options="finishTypeObj" label="请选择" style="width:160px" dense emit-value map-options />
<br />
<q-input filled stack-label maxlength="20" @keyup.native="checkInteger(sItem,'TaskFinishValue')" dense
v-model="sItem.TaskFinishValue" ref="TaskFinishValue" class="q-pr-none" label="任务完成值" />
<br />
<q-input filled stack-label maxlength="20" dense v-model="sItem.TaskKudo" ref="TaskKudo" class="q-pr-none"
label="奖品名称" />
<br />
<div class="row col-12">
<div class="sale_ImgDiv" v-for="(kItem,kIndex) in sItem.TaskKudoImgList" :key="kIndex">
<img :src="kItem" />
<q-btn size="6px" style="position:absolute;right:-8px;top:-5px;" @click="deleKudoImg(sItem,kIndex)"
round color="red" icon="iconfont icon-guanbi1" />
</div>
<el-upload class="avatar-uploader saleUpload" action="" :before-upload="
(file) => {
return uploadFileKudo(file, sItem);
}" :show-file-list="false">
<i class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
<br />
<q-btn flat size="xs" icon="iconfont icon-shanchu" title="删除" color="negative" style="font-weight:400"
class="q-mr-xs" label="" @click="deleSubTask(index)" />
</div>
</template>
<q-select v-if="sItem.TaskType==4" multiple filled use-chips stack-label v-model="sItem.TargetIdList"
option-value="CourseId" option-label="CourseName" :options="CourseList" label="课程"
style="width:160px" dense emit-value map-options />
</td>
<td>
<q-select filled stack-label option-value="Id" option-label="Name" v-model="sItem.TaskFinishType"
:options="finishTypeObj" label="请选择" style="width:160px" dense emit-value map-options />
</td>
<td>
<q-input filled stack-label maxlength="20" @keyup.native="checkInteger(sItem,'TaskFinishValue')" dense
v-model="sItem.TaskFinishValue" ref="TaskFinishValue" class="q-pr-none" label="任务完成值" />
</td>
<td>
<q-btn flat size="xs" icon="iconfont icon-shanchu" title="删除" color="negative" style="font-weight:400"
class="q-mr-xs" label="" @click="deleSubTask(index)" />
</td>
</tr>
</tbody>
</table>
</div>
<div class="row wrap">
<div class="col-12">
......@@ -256,8 +227,6 @@
TaskName: '', //任务名称
TaskSubTitle: '', //任务子标题
TaskImageList: [], //任务图片
TaskKudoImgList: [], //奖品图片
TaskKudo: '', //奖品名称
TaskDesc: '', //任务描述
TaskStartTime: "", //任务开始时间
TaskEndTime: "", //任务结束时间
......@@ -300,13 +269,11 @@
let tempData = res.Data;
this.objOption.Id = tempData.Id;
this.objOption.TaskName = tempData.TaskName;
this.objOption.TaskKudo = tempData.TaskKudo;
this.objOption.TaskStartTime = tempData.TaskStartTimeStr;
this.objOption.TaskEndTime = tempData.TaskEndTimeStr;
this.objOption.DetailsList = tempData.DetailsList;
this.objOption.TaskSubTitle = tempData.TaskSubTitle;
this.objOption.TaskImageList = tempData.TaskImageList;
this.objOption.TaskKudoImgList = tempData.TaskKudoImgList;
this.objOption.TaskDesc = tempData.TaskDesc;
this.objOption.ExchangeEndTime = tempData.ExchangeEndTimeStr;
}
......@@ -317,9 +284,7 @@
this.objOption.TaskName = '';
this.objOption.TaskSubTitle = '';
this.objOption.TaskImageList = [];
this.objOption.TaskKudoImgList = [];
this.objOption.TaskDesc = '';
this.objOption.TaskKudo = '';
this.objOption.TaskStartTime = '';
this.objOption.TaskEndTime = '';
this.objOption.DetailsList = [];
......@@ -330,8 +295,8 @@
//保存
saveCustom() {
this.$refs.TaskName.validate();
this.$refs.TaskKudo.validate();
if (!this.$refs.TaskName.hasError && !this.$refs.TaskKudo.hasError) {
//this.$refs.TaskKudo.validate();
if (!this.$refs.TaskName.hasError) {
var oDate1 = new Date(this.objOption.TaskStartTime);
var oDate2 = new Date(this.objOption.TaskEndTime);
if (oDate1.getTime() > oDate2.getTime()) {
......@@ -369,12 +334,16 @@
//新增子任务
addSubTask() {
let obj = {
DetailId: 0,
TaskId: 0,
TaskType: 1, //默认传1
TargetId: 1, //课程编号
TaskFinishType: 1,
TaskFinishValue: '',
DetailId: 0, //详情编号
TaskId: 0, //任务编号
DetailsName: "", //任务条件名称
TaskType: 1, //任务类型(见枚举)
TargetId: "", //目标编号
TaskFinishType: 1, //完成类型(1-人数,2-固定金额)
TaskFinishValue: '', //完成值
TaskKudo: "", //奖品名称
TaskKudoImgList: [], //奖品图片
KudoDescription: "", //奖品描述
TargetIdList: []
}
this.objOption.DetailsList.push(obj);
......@@ -382,7 +351,7 @@
//获取课程
getCourseList() {
queryCourseDropdownList({
IsQPrice: 1
IsQPrice: 0
}).then(res => {
if (res.Code == 1) {
this.CourseList = res.Data;
......@@ -398,8 +367,8 @@
this.objOption.TaskImageList.splice(index, 1);
},
//删除奖品图片
deleKudo(index) {
this.objOption.TaskKudoImgList.splice(index, 1);
deleKudoImg(subItem, index) {
subItem.TaskKudoImgList.splice(index, 1);
},
//上传任务图片
uploadFileTask(files) {
......@@ -410,10 +379,10 @@
})
},
//上传奖品图片
uploadFileKudo(files) {
uploadFileKudo(files, subItem) {
UploadSelfFile('Icon', files, res => {
if (res.Code == 1) {
this.objOption.TaskKudoImgList.push(res.FileUrl);
subItem.TaskKudoImgList.push(res.FileUrl);
}
})
},
......
......@@ -26,6 +26,17 @@
ref="ProductType" :options="productList" label="产品类型" :dense="false" class="col-6 q-pb-lg" emit-value
map-options />
</div>
</div>
<div class="row wrap">
<div class="col-6">
<q-select filled stack-label option-value="Id" option-label="Name" v-model="objOption.StudyCountryId"
ref="School_Id" :options="CountryList" label="留学国家" :dense="false" class="col-6 q-pr-lg q-pb-lg" emit-value
map-options />
</div>
<div class="col-6">
</div>
</div>
<div class="row wrap">
<div class="col-6 q-pb-lg q-pr-lg">
......@@ -66,7 +77,8 @@
queryStudyAbroadProductType
} from '../../api/studyabroad/index'
import {
UploadSelfFile
UploadSelfFile,
queryCountryList
} from '../../api/common/common'
import {
getSchoolDropdown,
......@@ -103,6 +115,7 @@
ImgCover: '', //封面图
ProductType: 1, //产品类型
StudyFeature: "", //课程特色
StudyCountryId:"",//留学国家
},
optionTitle: "",
saveLoading: false,
......@@ -114,6 +127,7 @@
FileUrl: ''
},
SchoolList: [], //校区列表
CountryList:[],//国家列表
}
},
computed: mapState({
......@@ -134,12 +148,22 @@
created() {
this.getSchool();
this.getProductList();
this.getCountryList()
},
mounted() {
this.getStudyAbroadList();
this.initObj()
},
methods: {
//获取国家列表
getCountryList() {
queryCountryList({}).then(res => {
console.log("res", res);
if (res.Code == 1) {
this.CountryList=res.Data;
}
});
},
//课程特色
getFeatureValue(obj) {
this.objOption.StudyFeature = obj;
......@@ -195,6 +219,7 @@
this.objOption.ImgCover = tempObj.ImgCover;
this.objOption.ProductType = tempObj.ProductType;
this.objOption.StudyFeature = tempObj.StudyFeature;
this.objOption.StudyCountryId=tempObj.StudyCountryId;
}
}
})
......@@ -208,6 +233,7 @@
this.objOption.School_Id = -1;
this.objOption.ProductType = 1;
this.objOption.StudyFeature = "";
this.objOption.StudyCountryId="";
}
},
//关闭弹窗
......
<template>
<div class="page-body">
<div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<q-input @change="resetSearch" clearable standout="bg-primary text-white" class="col-6 q-pr-lg q-pr-lg" v-model="msg.MenuName"
label="名称" maxlength="20" @clear="resetSearch" />
</div>
<div class="col-3">
<q-select @input="resetSearch" standout="bg-primary text-white" v-model="msg.MenuType" class="col-6 q-pr-lg q-pr-lg" :options="MenuTypeOpts"
emit-value map-options label="菜单类型" />
</div>
</div>
</div>
<div class="page-content">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat class="sticky-tow-column-table"
separator="none" :data="data" :columns="columns" row-key="name">
<template v-slot:top="props">
<div class="col-2 q-table__title">地区信息</div>
<q-space />
<div class="page-option">
<q-btn color="accent" class="q-mr-md" size="sm" icon="add" label="新增菜单" @click="EditMenu(null)" />
</div>
</template>
<template v-slot:body-cell-Status="props">
<q-td :props="props">
<q-toggle size="md" color="primary" :false-value="1" :true-value="0" v-model="props.row.Status"
title="注意:关闭后,分类将无法正常使用." @input="DeleteMenu(props.row)" />
</q-td>
</template>
<template v-slot:bottom>
<q-pagination class="full-width justify-end" v-model="msg.pageIndex" color="primary" :max="pageCount"
:input="true" @input="changePage" />
</template>
<template v-slot:body-cell-optioned="props">
<q-td :props="props">
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" label="编辑"
@click="EditMenu(props.row)" />
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" label="功能权限"
@click="gotomenufunction(props.row)" />
</q-td>
</template>
</q-table>
<menu-form v-if="isShowMenuForm" :save-obj="menuObjOption" @close="closeMenuSaveForm" @success="refreshPage">
</menu-form>
</div>
</div>
</template>
<script>
import {
getMenuPage,
getMenuTypeList,
getMenuLevelList,
updateMenuStatus,
} from '../../api/system/index'
import menuForm from '../../components/system/menu-form'
export default {
meta: {
title: "地区管理"
},
components: {
menuForm,
},
data() {
return {
currentUrl: "",
columns: [{
name: 'MenuId',
label: '菜单编号',
field: 'MenuId',
align: 'left'
},
{
name: 'MenuName',
required: true,
label: '菜单名称',
align: 'left',
field: row => row.MenuName
},
{
name: 'MenuUrl',
label: '菜单地址',
field: 'MenuUrl',
align: 'left'
},
{
name: 'MenuTypeStr',
label: '菜单类型',
field: 'MenuTypeStr',
align: 'left'
},
{
name: 'MenuLevel',
label: '菜单等级',
field: 'MenuLevel',
align: 'left'
},
{
name: 'MenuIcon',
label: '图标',
field: 'MenuIcon',
align: 'left'
},
{
name: 'SortNum',
label: '排序',
field: 'SortNum',
align: 'left'
},
{
name: 'CreateTimeStr',
label: '创建时间',
field: 'CreateTimeStr',
align: 'left'
},
{
name: 'Status',
label: '状态',
align: 'left',
field: 'Status'
},
{
name: 'optioned',
label: '操作',
field: 'MenuId'
}
],
data: [],
loading: true,
ShowOpts: [{
label: '全部',
value: '-1'
},
{
label: '正常',
value: '0'
},
{
label: '删除',
value: '1'
}
],
//菜单等级
MenuLevelOpts: [],
//菜单类型
MenuTypeOpts: [],
msg: {
pageIndex: 1,
pageSize: 12,
rowsPerPage: 12,
MenuName: "",
MenuUrl: "",
MenuLevel: -1,
MenuType: -1,
Status: "-1",
},
pageCount: 0,
isShowMenuForm: false,
menuObjOption: null,
}
},
mounted() {
this.initData();
this.currentUrl = this.$route.path
this.getmenulist()
},
methods: {
//跳转到功能权限
gotomenufunction(obj) {
var tempStr = '/system/menufunction?menuId=' + obj.MenuId;
this.$router.push({
path: tempStr
});
},
//初始化下拉框
initData() {
this.MenuTypeOpts = getMenuTypeList();
this.MenuLevelOpts = getMenuLevelList();
},
//重新查询
resetSearch() {
this.msg.pageIndex = 1;
this.getmenulist();
},
//翻页
changePage(val) {
this.msg.pageIndex = val;
this.getmenulist()
},
//获取菜单分页列表
getmenulist() {
this.loading = true;
getMenuPage(this.msg).then(res => {
this.loading = false
this.data = res.Data.PageData
this.pageCount = res.Data.PageCount
}).catch(() => {
this.loading = false
})
},
//刷新页面
refreshPage() {
if (!this.menuObjOption) {
this.msg.pageIndex = 1;
this.msg.MenuName = "";
this.msg.MenuUrl = "";
this.msg.MenuLevel = -1;
this.msg.MenuType = -1;
this.msg.Status = "-1";
}
this.getmenulist()
},
//新增修改菜单
EditMenu(obj) {
if (obj) {
this.menuObjOption = obj
} else {
this.menuObjOption = null
}
this.isShowMenuForm = true
},
//关闭弹窗
closeMenuSaveForm() {
this.isShowMenuForm = false
},
//修改菜单状态
DeleteMenu(obj) {
var that = this;
var delMsg = {
MenuId: obj.MenuId,
Status: obj.Status
};
var tipMsg = "";
if (delMsg.Status == 0) {
tipMsg = "是否启用【" + obj.MenuName + "】菜单?";
} else {
tipMsg = "是否禁用【" + obj.MenuName + "】菜单?";
}
this.$q.dialog({
title: '提示信息',
message: tipMsg,
cancel: true,
persistent: true,
ok: "确定",
cancel: "取消",
}).onOk(() => {
updateMenuStatus(delMsg).then(res => {
if (res.Code == 1) {
that.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '操作成功',
position: 'top'
})
that.getmenulist();
}
})
}).onCancel(() => {
obj.Status = obj.Status == 1 ? 0 : 1;
});
}
}
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
......@@ -78,6 +78,11 @@ const routes = [{
component: () =>
import("pages/system/dept.vue")
},
{
path: "/system/area", //地区管理
component: () =>
import("pages/system/area.vue")
},
{
path: "/system/deptrelation", //部门关系图
component: () =>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment