1381 lines
69 KiB
HTML
1381 lines
69 KiB
HTML
<!--#
|
|
layout("/layouts/platform.html"){
|
|
#-->
|
|
<style>
|
|
.avatar-uploader .el-upload {
|
|
border: 1px dashed #d9d9d9;
|
|
border-radius: 6px;
|
|
cursor: pointer;
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.avatar-uploader .el-upload:hover {
|
|
border-color: #409EFF;
|
|
}
|
|
|
|
.avatar-uploader-icon {
|
|
font-size: 28px;
|
|
color: #8c939d;
|
|
width: 100px;
|
|
height: 100px;
|
|
line-height: 100px;
|
|
text-align: center;
|
|
}
|
|
|
|
.avatar {
|
|
width: 100px;
|
|
height: 100px;
|
|
display: block;
|
|
}
|
|
|
|
.avatar-delete {
|
|
font-size: 20px;
|
|
color: red;
|
|
}
|
|
|
|
#qsmEditor .w-e-text-container {
|
|
height: 200px !important;
|
|
}
|
|
|
|
#qsmEditor div {
|
|
z-index: 0 !important;
|
|
}
|
|
|
|
.btDiv {
|
|
cursor: pointer;
|
|
}
|
|
|
|
.btDiv:hover {
|
|
background-color: rgb(240, 240, 240);
|
|
}
|
|
|
|
.shou {
|
|
cursor: pointer;
|
|
}
|
|
|
|
.issue {
|
|
cursor: pointer;
|
|
padding: 20px 0;
|
|
}
|
|
|
|
.issue:hover {
|
|
background-color: rgb(240, 240, 240);
|
|
}
|
|
|
|
.el-divider {
|
|
background-color: #409EFF;
|
|
}
|
|
|
|
.el-divider__text {
|
|
color: #409EFF;
|
|
}
|
|
|
|
.inputParent input {
|
|
border: none;
|
|
border-bottom: 1px solid rgb(220, 223, 230);
|
|
border-radius: 0;
|
|
}
|
|
|
|
.issueList > .el-table__header-wrapper {
|
|
display: none;
|
|
}
|
|
|
|
.issueList .el-table__expanded-cell {
|
|
background-color: rgb(250, 250, 250) !important;
|
|
}
|
|
|
|
.el-upload--picture-card {
|
|
width: 100px;
|
|
height: 100px;
|
|
line-height: 100px;
|
|
}
|
|
|
|
.avatar-uploader .el-upload-list__item-actions {
|
|
position: absolute;
|
|
width: 100%;
|
|
height: 100%;
|
|
left: 0;
|
|
top: 0;
|
|
cursor: default;
|
|
text-align: center;
|
|
color: #fff;
|
|
opacity: 0;
|
|
font-size: 20px;
|
|
background-color: rgba(0, 0, 0, .5);
|
|
transition: opacity .3s;
|
|
}
|
|
|
|
.avatar-uploader .el-upload-list__item-actions:hover {
|
|
opacity: 1;
|
|
}
|
|
|
|
.avatar-uploader .el-upload-list__item-actions span {
|
|
cursor: pointer;
|
|
}
|
|
|
|
.avatar-uploader .el-upload-list__item-actions .el-upload-list__item-delete {
|
|
position: static;
|
|
font-size: inherit;
|
|
color: inherit;
|
|
display: inline-block;
|
|
}
|
|
|
|
.avatar-uploader .el-upload-list__item-actions .el-upload-list__item-delete i {
|
|
color: inherit;
|
|
}
|
|
</style>
|
|
|
|
<div id="app" v-cloak>
|
|
<guava ref="guava">
|
|
<template>
|
|
<el-card shadow="never">
|
|
<div class="btn-group tool-button">
|
|
<el-date-picker
|
|
:clearable="false"
|
|
placeholder="选择年"
|
|
type="year"
|
|
v-model="pageForm.year"
|
|
value-format="yyyy">
|
|
</el-date-picker>
|
|
</div>
|
|
<div class="btn-group tool-button">
|
|
<el-input placeholder="请输入内容" v-model="pageForm.qtitle">
|
|
<template slot="prepend">标题</template>
|
|
</el-input>
|
|
</div>
|
|
<div class="btn-group tool-button">
|
|
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
|
|
</div>
|
|
<div class="pull-right offscreen-right">
|
|
<el-button @click="openAddQuestion" size="medium" type="primary"><i
|
|
class="ti-plus"></i> 新建问卷调查
|
|
</el-button>
|
|
</div>
|
|
</el-card>
|
|
<el-card class="mt20" shadow="never">
|
|
<el-table :data="tableData" align="center" header-align="center" size="medium"
|
|
style="width: 100%">
|
|
<el-table-column align="center" header-align="center" label="序号" type="index">
|
|
<template scope="scope">
|
|
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" header-align="center" label="标题"
|
|
prop="qtitle"></el-table-column>
|
|
<el-table-column align="center" header-align="center" label="说明" prop="qsm"
|
|
show-overflow-tooltip>
|
|
<template scope="scope">
|
|
<div v-html="scope.row.qsm" v-if="!isNull(scope.row.qsm)">
|
|
{{scope.row.qsm}}
|
|
</div>
|
|
<span v-else>暂无</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" header-align="center" label="创建人"
|
|
prop="username"></el-table-column>
|
|
<el-table-column align="center" header-align="center" label="创建时间"
|
|
prop="qctime"></el-table-column>
|
|
<el-table-column align="center" label="类型" prop="qlx">
|
|
<template scope="{row}">
|
|
<span v-if="row.qlx===1">调查</span>
|
|
<span v-if="row.qlx===2">答题</span>
|
|
<!-- <span v-if="row.qlx===3">购物调查</span>-->
|
|
<span v-if="row.qlx===4">意向选择</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" header-align="center" label="状态" prop="qflag">
|
|
<template scope="scope">
|
|
<span style="color: #E6A23C" v-if="scope.row.qflag==1">未开启</span>
|
|
<span style="color: #67C23A" v-if="scope.row.qflag==2">已开启</span>
|
|
<span style="color: #F56C6C" v-if="scope.row.qflag==3">已关闭</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" header-align="center" label="操作" width="560px">
|
|
<template scope="scope">
|
|
<el-button @click="openCode(scope.row)" size="mini" type="primary">
|
|
二维码
|
|
</el-button>
|
|
<!--<el-button @click="$refs.sendMsg.openDialog(scope.row.activityuserscopeid)" size="mini"-->
|
|
<!-- type="primary">通知-->
|
|
<!--</el-button>-->
|
|
<el-button @click="sendMsg(scope.row)" size="mini" type="primary">通知
|
|
</el-button>
|
|
<!-- <el-button @click="openView(scope.row.qid)" size="mini" type="primary">查看</el-button>-->
|
|
<el-button @click="upStatus(scope.row.qid,2)" size="mini" type="primary"
|
|
type="success" v-if="scope.row.qflag==1||scope.row.qflag==3">
|
|
开启
|
|
</el-button>
|
|
<el-button @click="upStatus(scope.row.qid,3)" size="mini" type="primary"
|
|
type="danger" v-if="scope.row.qflag==2">关闭
|
|
</el-button>
|
|
<el-button @click="openEditBasicInfo(scope.row.qid)" size="mini"
|
|
type="primary"
|
|
type="primary">基础设置
|
|
</el-button>
|
|
<el-button @click="openEditIssue(scope.row.qid)" size="mini"
|
|
type="primary">题目设置
|
|
</el-button>
|
|
<el-button @click="deleteQuestion(scope.row.qid)" size="mini"
|
|
type="danger" v-if="scope.row.qflag==1||scope.row.qflag==3">
|
|
删除
|
|
</el-button>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
<!--#include("/layouts/pagination.html"){}#-->
|
|
</el-card>
|
|
</template>
|
|
<template #edit>
|
|
<div v-if="editMode==='basicInfo'">
|
|
<el-form :model="formData" :rules="formRules" label-position="right"
|
|
label-width="120px" ref="addform">
|
|
<vi-title2 title="基础设置"></vi-title2>
|
|
|
|
<el-form-item label="问卷类型" prop="qlx">
|
|
<el-radio-group @change="questionTypeChange" v-model="formData.qlx"
|
|
size="small">
|
|
<el-radio :label="1" border>投票调查</el-radio>
|
|
<el-radio :label="2" border>答题</el-radio>
|
|
<!-- <el-radio :label="3" border>购物调查</el-radio>-->
|
|
<el-radio :label="4" border>意向选择</el-radio>
|
|
</el-radio-group>
|
|
</el-form-item>
|
|
|
|
<el-form-item class="is-required" label="标题" prop="qtitle">
|
|
<el-input placeholder="请填写标题" v-model="formData.qtitle"></el-input>
|
|
</el-form-item>
|
|
|
|
<el-row v-show="![1,3,4].includes(formData.qlx)" :gutter="20">
|
|
<el-col :span="12">
|
|
<el-form-item class="is-required" label="每日可答次数" label-width="120px"
|
|
prop="qrkdcs">
|
|
<el-input-number :max="100" :min="0"
|
|
controls-position="right"
|
|
placeholder="设0则不限制次数"
|
|
style="width: 100%"
|
|
v-model="formData.qrkdcs"></el-input-number>
|
|
<div class="text-primary">设0则不限制次数</div>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="12">
|
|
<el-form-item label="每日答题时间" prop="qdtkssj">
|
|
<el-time-picker
|
|
end-placeholder="结束时间"
|
|
is-range
|
|
placeholder="选择时间范围"
|
|
range-separator="-"
|
|
start-placeholder="开始时间"
|
|
style="width: 100%"
|
|
v-model="formData.qdtsj"
|
|
value-format="HH:mm:ss">
|
|
</el-time-picker>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
|
|
<el-row :gutter="20">
|
|
<el-col :span="12">
|
|
<el-form-item label="开始时间" prop="startTime">
|
|
<el-date-picker
|
|
style="width: 100%"
|
|
type="datetime"
|
|
v-model="formData.startTime"
|
|
value-format="timestamp">
|
|
</el-date-picker>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="12">
|
|
<el-form-item label="结束时间" prop="endTime">
|
|
<el-date-picker
|
|
:picker-options="endTimeOptions"
|
|
style="width: 100%"
|
|
type="datetime"
|
|
v-model="formData.endTime"
|
|
value-format="timestamp">
|
|
</el-date-picker>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="8" v-show="formData.qlx===4">
|
|
<el-form-item label="自动选择默认项" label-width="150px" prop="autoSelect">
|
|
<el-switch
|
|
v-model="formData.autoSelect"
|
|
>
|
|
</el-switch>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
|
|
<el-form-item label="说明" prop="qsm">
|
|
<div id="qsmEditor"></div>
|
|
</el-form-item>
|
|
|
|
<el-form-item label="参加人员" prop="activityUserScopeId">
|
|
<div style="display: flex; column-gap: 10px">
|
|
<el-select clearable v-model="formData.activityUserScopeId">
|
|
<el-option :key="item.groupId"
|
|
:label="item.groupName"
|
|
:value="item.groupId"
|
|
v-for="item in activityUserScopeList"></el-option>
|
|
</el-select>
|
|
<!-- <el-button @click="userScopeDialog = true" type="primary">设置</el-button>-->
|
|
<el-button @click="$refs.drawerUserScope.userScopeDialog = true"
|
|
type="primary">设置
|
|
</el-button>
|
|
</div>
|
|
</el-form-item>
|
|
|
|
<el-row :gutter="20">
|
|
<el-col :span="6">
|
|
<el-form-item label="出题模式" prop="ctMode">
|
|
<el-radio-group v-model="formData.ctMode" size="small">
|
|
<el-radio :label="1" border>定时定题</el-radio>
|
|
<el-radio :label="2" border>随机题目</el-radio>
|
|
</el-radio-group>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="6" v-if="formData.ctMode===2">
|
|
<el-form-item label="单次出题数量" prop="ctNum">
|
|
<!--:max="formData.issues.length"-->
|
|
<el-input-number :min="1"
|
|
controls-position="right"
|
|
style="width: 100%"
|
|
v-model="formData.ctNum"></el-input-number>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
|
|
<el-row :gutter="20">
|
|
<el-col :span="6">
|
|
<el-form-item label="是否抽奖" prop="isRaffle">
|
|
<el-radio-group v-model="formData.isRaffle" size="small">
|
|
<el-radio :label="true" border>是</el-radio>
|
|
<el-radio :label="false" border>否</el-radio>
|
|
</el-radio-group>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="6" v-if="formData.isRaffle">
|
|
<el-form-item label="抽奖分数" prop="raffleScore">
|
|
<el-input-number :min="1"
|
|
controls-position="right"
|
|
style="width: 100%"
|
|
v-model="formData.raffleScore"></el-input-number>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="6" v-if="formData.isRaffle">
|
|
<el-form-item label="获奖人数" prop="raffleWinnerUserNum">
|
|
<el-input-number :max="10000" :min="1"
|
|
controls-position="right"
|
|
style="width: 100%"
|
|
v-model="formData.raffleWinnerUserNum"></el-input-number>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
|
|
<el-row type="flex" justify="end">
|
|
<el-button @click="$refs.guava.index()" size="medium">取消</el-button>
|
|
<el-button @click="modifyBasicInfo" type="primary">确定</el-button>
|
|
</el-row>
|
|
</el-form>
|
|
</div>
|
|
|
|
<div v-else-if="editMode==='issueInfo'">
|
|
<div style="max-height: 700px;overflow-y: scroll">
|
|
<div class="btDiv mb10" title="编辑问卷标题与问卷说明">
|
|
<el-row style="text-align: center">
|
|
<h2>{{questionData.qtitle}}</h2>
|
|
</el-row>
|
|
</div>
|
|
<vi-title2 title="题目列表"></vi-title2>
|
|
<el-table :data="issueData" :key="tableKey"
|
|
class="issueList mt10"
|
|
default-expand-all="true"
|
|
highlight-current-row="true"
|
|
style="width: 100%">
|
|
<el-table-column align="left" header-align="left" label="issue">
|
|
<template scope="issue">
|
|
<el-col :span="1">
|
|
<span style="color: red" v-if="issue.row.iisbd">*</span>
|
|
<span style="font-weight: bolder">{{issue.$index+1}}.</span>
|
|
</el-col>
|
|
<el-col :span="23">
|
|
<el-row>
|
|
<el-col :span="1" v-if="issue.row.fraction">
|
|
<span>({{issue.row.fraction}}分)</span>
|
|
</el-col>
|
|
<el-col :span="23">
|
|
<span v-html="issue.row.iname"></span>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row>
|
|
<div style="color: rgb(160,160,160)" v-html="issue.row.its"
|
|
v-if="!isNull(issue.row.its)"></div>
|
|
</el-row>
|
|
<el-row v-if="issue.row.itx==1">
|
|
<el-row v-for="wor,idx in issue.row.wors">
|
|
<el-row style="margin-top: 5px" v-if="wor.wimg">
|
|
<el-image
|
|
:src="FILE_STREAM_PREVIEW_ADDRESS + '?id=' +wor.wimg"
|
|
fit="fill"
|
|
style="max-width: 100px;max-height: 100px"></el-image>
|
|
</el-row>
|
|
|
|
<el-row style="margin-top: 5px"
|
|
v-if="!isNull(wor.wimg)">
|
|
<div style="color: rgb(160,160,160);text-align: left">
|
|
<div v-html="wor.wsm"></div>
|
|
</div>
|
|
</el-row>
|
|
|
|
<el-radio v-if="issue.row.iisdx==true"
|
|
:label="idx"
|
|
v-model="issue.row.xz"
|
|
border
|
|
disabled
|
|
style="margin-bottom: 5px;"
|
|
size="small">
|
|
<span :class="[wor.correct?'text-success':'']">{{wor.wtxt}}</span>
|
|
</el-radio>
|
|
|
|
<el-checkbox v-else-if="issue.row.iisdx==false"
|
|
style="margin-bottom: 5px;"
|
|
disabled
|
|
:key="idx" :label="idx">
|
|
<span :class="[wor.correct?'text-success':'']">{{wor.wtxt}}</span>
|
|
</el-checkbox>
|
|
|
|
<span v-else-if="wor.wistk==true" class="inputParent">
|
|
<el-input
|
|
size="mini"
|
|
style="border-top: none"
|
|
disabled
|
|
v-model="wor.tktxt"></el-input>
|
|
<span style="color:red;"
|
|
v-if="wor.wisbt==true">*</span>
|
|
</span>
|
|
|
|
<el-row style="margin-top: 5px"
|
|
v-if="isNull(wor.wimg)&&!isNull(wor.wsm)">
|
|
<div style="color: rgb(160,160,160)">
|
|
<div v-html="wor.wsm"></div>
|
|
</div>
|
|
</el-row>
|
|
</el-row>
|
|
</el-row>
|
|
<el-row v-if="issue.row.itx==2">
|
|
<el-input size="small" style="width: 50%"
|
|
v-for="wor in issue.row.wors"
|
|
v-model="issue.row.tktxt"></el-input>
|
|
</el-row>
|
|
</el-col>
|
|
</template>
|
|
</el-table-column>
|
|
|
|
<el-table-column align="center" header-align="center" label="操作"
|
|
width="250">
|
|
<template scope="scope">
|
|
<el-button @click="openEditIssueDetail(scope.$index)" circle
|
|
icon="el-icon-setting"
|
|
size="small"
|
|
type="primary"></el-button>
|
|
<el-button @click="issuePx(scope.$index,true)" circle
|
|
icon="el-icon-top"
|
|
size="small"
|
|
type="primary"></el-button>
|
|
<el-button @click="issuePx(scope.$index,false)" circle
|
|
icon="el-icon-bottom"
|
|
size="small" type="primary"></el-button>
|
|
<el-button @click="issueData.splice(scope.$index,1)" circle
|
|
icon="el-icon-delete"
|
|
size="small" type="danger"></el-button>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</div>
|
|
|
|
<el-row class="mt10 p10" style="border-top: 1px dashed #e5e1e1;" type="flex"
|
|
justify="center">
|
|
<el-button
|
|
type="success"
|
|
:disabled="questionData.qlx===4 && issueData && issueData.length===1"
|
|
@click="issueData.push({wors:[{wtxt:'选项1',correct:false},{wtxt:'选项2',correct:false}],itx:1,its:'',iisrandom:false,iisbd:true,iisdx:true,iname:'<p><b>标题</b></p>',iplfs:1})">
|
|
添加题目
|
|
</el-button>
|
|
<el-button type="primary" @click="doModifyIssues">确定修改</el-button>
|
|
</el-row>
|
|
</div>
|
|
</template>
|
|
|
|
<template #view>
|
|
<div style="height:calc(100vh - 180px);overflow-y: scroll">
|
|
<el-card class="box-card v-box" shadow="never">
|
|
<div style="padding-left: 20px;padding-right: 20px">
|
|
<el-row style="text-align: center">
|
|
<h2>{{viewData.qtitle}}</h2>
|
|
</el-row>
|
|
<el-row style="margin-bottom: 20px">
|
|
<div v-html="viewData.qsm"></div>
|
|
</el-row>
|
|
|
|
<el-row style="border-bottom: 1px solid rgb(200,200,200);padding: 20px 0;margin-bottom: 20px"
|
|
v-for="issue,idx in viewData.issues">
|
|
<el-col :span="1">
|
|
<span style="color: red" v-if="issue.iisbd">*</span>
|
|
<span style="font-weight: bolder">{{idx+1}}.</span>
|
|
</el-col>
|
|
<el-col :span="23">
|
|
<el-row>
|
|
<div v-html="issue.iname"></div>
|
|
</el-row>
|
|
<el-row>
|
|
<div style="color: rgb(160,160,160)" v-html="issue.its"
|
|
v-if="!isNull(issue.its)"></div>
|
|
</el-row>
|
|
<el-row v-if="issue.itx==1">
|
|
<template v-if="issue.iplfs==1">
|
|
<!--竖向排列-->
|
|
<el-row :style="isNull(wor.wimg)?'':'text-align: center'"
|
|
v-for="wor,idx in issue.wors">
|
|
<el-row style="margin-top: 5px"
|
|
v-if="!isNull(wor.wimg)">
|
|
<el-image
|
|
:src="FILE_STREAM_PREVIEW_ADDRESS + '?id=' +wor.wimg"
|
|
fit="cover"
|
|
style="width: 100px;max-width: 100px"></el-image>
|
|
</el-row>
|
|
<el-row style="margin-top: 5px"
|
|
v-if="!isNull(wor.wimg)">
|
|
<div style="color: rgb(160,160,160);text-align: left"
|
|
v-html="wor.wsm">
|
|
</div>
|
|
</el-row>
|
|
<el-row style="margin-top: 5px">
|
|
<el-radio :label="idx" v-if="issue.iisdx==true"
|
|
v-model="issue.xz">
|
|
{{wor.wtxt}} <span class="inputParent"
|
|
v-if="wor.wistk==true"><el-input
|
|
size="mini" style="border-top: none"
|
|
v-model="wor.tktxt"></el-input> <span
|
|
style="color:red;"
|
|
v-if="wor.wisbt==true">*</span></span>
|
|
</el-radio>
|
|
<el-checkbox :key="idx" :label="idx"
|
|
v-if="issue.iisdx==false">
|
|
{{wor.wtxt}} <span class="inputParent"
|
|
v-if="wor.wistk==true"><el-input
|
|
size="mini" style="border-top: none"
|
|
v-model="wor.tktxt"></el-input> <span
|
|
style="color:red;"
|
|
v-if="wor.wisbt==true">*</span></span>
|
|
</el-checkbox>
|
|
<el-row style="margin-top: 5px"
|
|
v-if="isNull(wor.wimg)&&!isNull(wor.wsm)">
|
|
<div style="color: rgb(160,160,160)"
|
|
v-html="wor.wsm">
|
|
|
|
</div>
|
|
</el-row>
|
|
</el-row>
|
|
</el-row>
|
|
</template>
|
|
<template v-if="issue.iplfs==2">
|
|
<!--横向排列-->
|
|
<el-row :gutter="20" v-for="idx1 in issue.wors.length">
|
|
<el-col :span="parseInt(24/issue.icolnum)"
|
|
v-for="idx2 in issue.icolnum">
|
|
<div :style="isNull(issue.wors[((idx1-1)*issue.icolnum+idx2)-1].wimg)?'':'text-align: center'"
|
|
v-if="(idx1-1)*issue.icolnum+idx2<=issue.wors.length">
|
|
<el-row style="margin-top: 5px"
|
|
v-if="!isNull(issue.wors[((idx1-1)*issue.icolnum+idx2)-1].wimg)">
|
|
<el-image
|
|
:src="issue.wors[((idx1-1)*issue.icolnum+idx2)-1].islocal?issue.wors[((idx1-1)*issue.icolnum+idx2)-1].wimg:FILE_STREAM_PREVIEW_ADDRESS + '?id=' +issue.wors[((idx1-1)*issue.icolnum+idx2)-1].wimg"
|
|
fit="cover"
|
|
style="width: 100%;max-width: 300px"></el-image>
|
|
</el-row>
|
|
<el-row style="margin-top: 5px"
|
|
v-if="!isNull(issue.wors[((idx1-1)*issue.icolnum+idx2)-1].wimg)">
|
|
<div style="color: rgb(160,160,160);text-align: left">
|
|
{{issue.wors[((idx1-1)*issue.icolnum+idx2)-1].wsm}}
|
|
</div>
|
|
</el-row>
|
|
<el-row style="margin-top: 5px">
|
|
<el-radio :label="idx1+'-'+idx2"
|
|
v-if="issue.iisdx==true"
|
|
v-model="issue.xz">
|
|
{{issue.wors[((idx1-1)*issue.icolnum+idx2)-1].wtxt}}
|
|
<span
|
|
class="inputParent"
|
|
v-if="issue.wors[((idx1-1)*issue.icolnum+idx2)-1].wistk==true"><el-input
|
|
size="mini"
|
|
style="border-top: none"
|
|
v-model="issue.wors[((idx1-1)*issue.icolnum+idx2)-1].tktxt"></el-input> <span
|
|
style="color:red;"
|
|
v-if="issue.wors[((idx1-1)*issue.icolnum+idx2)-1].wisbt==true">*</span></span>
|
|
</el-radio>
|
|
<el-checkbox :key="idx1+'-'+idx2"
|
|
:label="idx1+'-'+idx2"
|
|
v-if="issue.iisdx==false">
|
|
{{issue.wors[((idx1-1)*issue.icolnum+idx2)-1].wtxt}}
|
|
<span class="inputParent"
|
|
v-if="issue.wors[((idx1-1)*issue.icolnum+idx2)-1].wistk==true"><el-input
|
|
size="mini"
|
|
style="border-top: none"
|
|
v-model="issue.wors[((idx1-1)*issue.icolnum+idx2)-1].tktxt"></el-input> <span
|
|
style="color:red;"
|
|
v-if="issue.wors[((idx1-1)*issue.icolnum+idx2)-1].wisbt==true">*</span></span>
|
|
</el-checkbox>
|
|
<el-row style="margin-top: 5px"
|
|
v-if="isNull(issue.wors[((idx1-1)*issue.icolnum+idx2)-1].wimg)&&!isNull(issue.wors[((idx1-1)*issue.icolnum+idx2)-1].wsm)">
|
|
<div style="color: rgb(160,160,160)">
|
|
{{issue.wors[((idx1-1)*issue.icolnum+idx2)-1].wsm}}
|
|
</div>
|
|
</el-row>
|
|
</el-row>
|
|
</div>
|
|
</el-col>
|
|
</el-row>
|
|
|
|
</template>
|
|
</el-row>
|
|
<el-row v-if="issue.itx==2">
|
|
<el-input size="small" style="width: 50%"
|
|
v-for="wor in issue.wors"
|
|
v-model="issue.tktxt"></el-input>
|
|
</el-row>
|
|
</el-col>
|
|
</el-row>
|
|
|
|
</div>
|
|
</el-card>
|
|
</div>
|
|
</template>
|
|
|
|
</guava>
|
|
|
|
<el-dialog :close-on-click-modal="false"
|
|
:visible.sync="setTitleDialogVisible" custom-class="ViewDialogClass" width="50%">
|
|
<div id="upTxtEditor"></div>
|
|
<span class="dialog-footer" slot="footer">
|
|
<el-button @click="setTitleDialogVisible = false"
|
|
v-show="!addDialogVisible">取 消</el-button>
|
|
<el-button @click="upIssueName" type="primary">确 定</el-button>
|
|
</span>
|
|
</el-dialog>
|
|
|
|
<el-dialog :close-on-click-modal="false" :visible.sync="cakeDialog" id="cakeDialog" title="编辑说明"
|
|
width="50%">
|
|
<div id="cakeEditor"></div>
|
|
<span class="dialog-footer" slot="footer">
|
|
<el-button @click="cakeDialog = false">取 消</el-button>
|
|
<el-button @click="upCakeDesc" type="primary">确 定</el-button>
|
|
</span>
|
|
</el-dialog>
|
|
|
|
<!-- <el-drawer-->
|
|
<!-- title="我是标题" size="78%"-->
|
|
<!-- :visible.sync="userScopeDialog"-->
|
|
<!-- :with-header="false">-->
|
|
<!-- <div style="padding: 0px 16px;" class="clearfix">-->
|
|
<!-- <el-button icon="el-icon-back" style="font-size: 16px" type="text" @click="userScopeDialog = false">返回-->
|
|
<!-- </el-button>-->
|
|
<!-- </div>-->
|
|
<!-- <user-scope-->
|
|
<!-- :is_h04="${@shiro.hasRole('H04')}"-->
|
|
<!-- :is_a06="${@shiro.hasRole('A06')}"-->
|
|
<!-- :is_h02="${@shiro.hasRole('club01')}"-->
|
|
<!-- :is_sysadmin="${@shiro.hasRole('sysadmin')}"-->
|
|
<!-- :unionid="'${@shiro.getPrincipalProperty('unit').getUnionid()}'"-->
|
|
<!-- :group_id.sync="formData.activityUserScopeId"-->
|
|
<!-- ></user-scope>-->
|
|
<!-- </el-drawer>-->
|
|
|
|
|
|
<drawer-user-scope
|
|
@group_change="getActivityGroup"
|
|
ref="drawerUserScope"
|
|
:group_id.sync="formData.groupId"
|
|
></drawer-user-scope>
|
|
|
|
|
|
<send-msg ref="sendMsg" :url="url"></send-msg>
|
|
|
|
<el-dialog title="二维码" width="45%" :visible.sync="qrCodeDialogVisible">
|
|
<div id="qrcode" style="width: 200px;height: 200px;margin: 0 auto"></div>
|
|
</el-dialog>
|
|
|
|
|
|
<el-drawer title="详细设置" :visible.sync="issueWorDrawerVisible" size="80%">
|
|
<div class="p10" v-if="currentModifyIssue && questionData">
|
|
<vi-title2 title="题目设置"></vi-title2>
|
|
|
|
<el-row>
|
|
<span>
|
|
标题、提示
|
|
</span>
|
|
|
|
<el-button @click="openIssueName('iname')" plain size="small">
|
|
设置标题
|
|
</el-button>
|
|
<el-button @click="openIssueName('its')" plain size="small"
|
|
style="margin-left: 0px">
|
|
设置提示
|
|
</el-button>
|
|
</el-row>
|
|
|
|
<el-row type="flex" style="flex-flow: row wrap;column-gap: 10px;margin:20px 0">
|
|
<div>
|
|
<span>题目类型</span>
|
|
<el-select
|
|
@change="if(currentModifyIssue.itx==2){issueData[currentModifyIssueIndex].iplfs=1;issueData[currentModifyIssueIndex].iisdx=true;issueData[currentModifyIssueIndex].wors=[{}]}else{issueData[currentModifyIssueIndex].wors=[{wtxt:'选项1'},{wtxt:'选项2'}]}"
|
|
placeholder="题型" size="small"
|
|
style="width: 100px"
|
|
v-model="issueData[currentModifyIssueIndex].itx">
|
|
<el-option
|
|
:key="item.x"
|
|
:label="item.y"
|
|
:value="item.x"
|
|
v-for="item in [{x:1,y:'选择题'},{x:2,y:'填空题'}]">
|
|
</el-option>
|
|
</el-select>
|
|
</div>
|
|
|
|
<el-select placeholder="是否必答" size="small"
|
|
style="width: 100px"
|
|
v-model="issueData[currentModifyIssueIndex].iisbd">
|
|
<el-option
|
|
:key="item.x"
|
|
:label="item.y"
|
|
:value="item.x"
|
|
v-for="item in [{x:true,y:'必答'},{x:false,y:'选答'}]">
|
|
</el-option>
|
|
</el-select>
|
|
<el-select placeholder="单选/多选" size="small"
|
|
v-if="issueData[currentModifyIssueIndex].itx==1"
|
|
style="width: 100px"
|
|
v-model="issueData[currentModifyIssueIndex].iisdx">
|
|
<el-option
|
|
:key="item.x"
|
|
:label="item.y"
|
|
:value="item.x"
|
|
v-for="item in [{x:true,y:'单选'},{x:false,y:'多选'}]">
|
|
</el-option>
|
|
</el-select>
|
|
<el-input-number v-if="issueData[currentModifyIssueIndex].itx==1"
|
|
:max="5"
|
|
:min="1" controls-position="right"
|
|
placeholder="最小选择数"
|
|
size="small" style="width: 130px"
|
|
v-model="issueData[currentModifyIssueIndex].iminselect"></el-input-number>
|
|
<el-input-number v-if="issueData[currentModifyIssueIndex].itx==1"
|
|
:max="20"
|
|
:min="1" controls-position="right"
|
|
placeholder="最大选择数"
|
|
size="small" style="width: 130px"
|
|
v-model="issueData[currentModifyIssueIndex].imaxselect"></el-input-number>
|
|
</el-row>
|
|
|
|
<el-row v-if="questionData.qlx===2" class="mb20">
|
|
<div>
|
|
<span>题目分值:</span>
|
|
<el-input
|
|
placeholder="请输入分值"
|
|
size="small"
|
|
style="width: 120px"
|
|
type="number"
|
|
v-model="issueData[currentModifyIssueIndex]['fraction']">
|
|
</el-input>
|
|
</div>
|
|
</el-row>
|
|
|
|
<el-row class="mb20">
|
|
<span>显示日期</span>
|
|
<el-date-picker placeholder="请选择显示日期"
|
|
size="small"
|
|
type="date"
|
|
v-model="issueData[currentModifyIssueIndex]['displayDate']"
|
|
:disabled="formData.ctMode==2"
|
|
value-format="yyyy-MM-dd">
|
|
</el-date-picker>
|
|
</el-row>
|
|
|
|
<el-row class="mb20">
|
|
<span>排序编号</span>
|
|
<el-input
|
|
v-if="questionData.ctMode==1"
|
|
v-model="issueData[currentModifyIssueIndex].ipxbh"
|
|
place="请输入排序编号"
|
|
style="width: 80px"
|
|
size="small"></el-input>
|
|
</el-row>
|
|
|
|
<template v-if="issueData[currentModifyIssueIndex].itx===1">
|
|
<vi-title2 title="选项设置"></vi-title2>
|
|
<el-row v-if="currentModifyIssue.itx==1">
|
|
<el-table :data="issueData[currentModifyIssueIndex].wors" border
|
|
style="width: 100%;margin-top: 10px;">
|
|
<el-table-column header-align="center" label="选项文字" property="wtxt">
|
|
<template slot-scope="scope">
|
|
<el-input placeholder="选项文字" size="small"
|
|
maxlength="100"
|
|
clearable
|
|
v-model="scope.row.wtxt"></el-input>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="图片" align="center" header-align="center"
|
|
width="150px">
|
|
<template slot-scope="scope">
|
|
<el-upload
|
|
:action="FILE_UPLOAD_ADDRESS"
|
|
:before-upload="beforeAvatarUpload"
|
|
:on-success="(res,file)=>{handleAvatarSuccess(res,file,scope.row)}"
|
|
:show-file-list="false"
|
|
list-type="picture-card"
|
|
class="avatar-uploader">
|
|
<div style="position: relative" v-if="scope.row.wimg">
|
|
<img :src="FILE_STREAM_PREVIEW_ADDRESS+'?id='+ scope.row.wimg"
|
|
class="avatar">
|
|
<span class="el-upload-list__item-actions">
|
|
<span class="el-upload-list__item-delete"
|
|
@click.stop="(file)=>{handleRemove(file,scope.row)}">
|
|
<i class="el-icon-delete"></i>
|
|
</span>
|
|
</span>
|
|
|
|
</div>
|
|
<i class="el-icon-plus avatar-uploader-icon" v-else></i>
|
|
</el-upload>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" header-align="center" label="说明"
|
|
property="wsm" width="250px">
|
|
<template slot-scope="scope">
|
|
<el-input
|
|
autosize
|
|
placeholder="请输入说明"
|
|
type="textarea"
|
|
maxlength="100"
|
|
v-if="questionData.qlx!==4"
|
|
v-model="scope.row.wsm">
|
|
</el-input>
|
|
<el-button @click="openCakeDesc(scope)" type="text"
|
|
v-else>
|
|
编辑说明
|
|
</el-button>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" header-align="center" label="链接"
|
|
property="wlj" width="150px">
|
|
<template slot-scope="scope">
|
|
<el-input
|
|
autosize
|
|
placeholder="请输入链接"
|
|
max="100"
|
|
type="textarea"
|
|
v-model="scope.row.wlj">
|
|
</el-input>
|
|
</template>
|
|
</el-table-column>
|
|
<!--<el-table-column align="center" header-align="center" label="允许填空" property="wistk" width="80px">
|
|
<template slot-scope="scope">
|
|
<template>
|
|
<el-checkbox v-model="scope.row.wistk">
|
|
</el-checkbox>
|
|
<el-checkbox v-if="scope.row.wistk"
|
|
v-model="scope.row.wisbt">必填
|
|
</el-checkbox>
|
|
</template>
|
|
</template>
|
|
</el-table-column>-->
|
|
<el-table-column align="center" header-align="center" label="默认选中"
|
|
property="wismr"
|
|
width="80px">
|
|
<template slot-scope="scope">
|
|
<template>
|
|
<el-checkbox
|
|
@change="upMr(scope.$index,scope.row.wismr)"
|
|
v-model="scope.row.wismr"></el-checkbox>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" header-align="center" label="是否正确答案"
|
|
property="correct"
|
|
v-if="questionData.qlx==2" width="80px">
|
|
<template slot-scope="scope">
|
|
<el-checkbox
|
|
@change="upCorrect(scope.$index,scope.row.correct)"
|
|
v-model="scope.row.correct"></el-checkbox>
|
|
</template>
|
|
</el-table-column>
|
|
<!-- <el-table-column align="center" header-align="center" label="单价" property="correct"-->
|
|
<!-- v-if="questionData.qlx==3" width="200px">-->
|
|
<!-- <template slot-scope="scope">-->
|
|
<!-- <el-input-number :max="100000"-->
|
|
<!-- :precision="2" :step="1"-->
|
|
<!-- controls-position="right"-->
|
|
<!-- v-model="scope.row.price"></el-input-number>-->
|
|
<!-- </template>-->
|
|
<!-- </el-table-column>-->
|
|
<el-table-column align="center" header-align="center" label="上/下移"
|
|
width="200px">
|
|
<template slot-scope="scope">
|
|
<el-button @click="worPx(scope.$index,true)" circle
|
|
icon="el-icon-top"
|
|
size="mini"
|
|
type="primary"></el-button>
|
|
<el-button @click="worPx(scope.$index,false)" circle
|
|
icon="el-icon-bottom"
|
|
size="mini" type="primary"></el-button>
|
|
<el-button
|
|
@click="issueData[currentModifyIssueIndex].wors.splice(scope.$index+1,0,{wtxt:'选项'+(issueData[currentModifyIssueIndex].wors.length+1)})"
|
|
circle
|
|
icon="el-icon-plus"
|
|
size="mini"
|
|
type="success"></el-button>
|
|
<el-button
|
|
@click="issueData[currentModifyIssueIndex].wors.splice(scope.$index,1)"
|
|
circle
|
|
icon="el-icon-minus"
|
|
size="mini"
|
|
type="danger"></el-button>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-row>
|
|
</template>
|
|
|
|
</div>
|
|
</el-drawer>
|
|
|
|
<open-qr-code ref="openQRCode" :url="url"></open-qr-code>
|
|
|
|
</div>
|
|
<script>
|
|
let qsmEditor
|
|
let upTxtEditor
|
|
let cakeEditor
|
|
let vue = new Vue({
|
|
el: '#app',
|
|
mixins: [initTableMixins],
|
|
data() {
|
|
return {
|
|
editMode: 'basicInfo',
|
|
|
|
cakeDialog: false,
|
|
addDialogVisible: false,
|
|
tableData: [],
|
|
pageForm: {
|
|
searchName: "",
|
|
searchKeyword: "",
|
|
pageNumber: 1,
|
|
pageSize: 10,
|
|
totalCount: 0,
|
|
qlx: 1,
|
|
pageOrderName: "",
|
|
pageOrderBy: "",
|
|
year: new Date().getFullYear() + ''
|
|
},
|
|
viewData: {issue: [{word: []}]},
|
|
formData: {issues: [{wors: [{}]}]},
|
|
setTitleDialogVisible: false,
|
|
formRules: {
|
|
qtitle: [{required: true, message: '请填写标题', trigger: ['blur', 'change']}],
|
|
qlx: [{required: true, message: '请选择类型', trigger: ['blur', 'change']}],
|
|
},
|
|
isNull(val) {
|
|
return !val
|
|
},
|
|
issueIdx: null,
|
|
|
|
//标题 提示 属性
|
|
issuePropName: null,
|
|
|
|
delIssueIds: [],
|
|
delWorIds: [],
|
|
|
|
cake_subject: 0,
|
|
cake_subject_option_index: 0,
|
|
endTimeOptions: {
|
|
disabledDate(val) {
|
|
return val.getTime() < new Date().getTime()
|
|
}
|
|
},
|
|
activityUserScopeList: [],
|
|
userScopeDialog: false,
|
|
qrCodeDialogVisible: false,
|
|
|
|
|
|
questionData: {},
|
|
issueData: [],
|
|
currentModifyIssueIndex: 0,
|
|
issueWorDrawerVisible: false,
|
|
|
|
url: null
|
|
}
|
|
},
|
|
|
|
computed: {
|
|
currentModifyIssue() {
|
|
return this.issueData[this.currentModifyIssueIndex]
|
|
}
|
|
},
|
|
|
|
components: {
|
|
'tab-upload': httpVueLoader('/components/plugins/TabUpload.vue'),
|
|
'user-scope': httpVueLoader('/components/plugins/UserScope.vue'),
|
|
'send-msg': httpVueLoader('/components/plugins/SendMsgByGroupId.vue'),
|
|
'drawer-user-scope': httpVueLoader('/components/plugins/DrawerUserScope.vue'),
|
|
'open-qr-code': httpVueLoader('/components/plugins/OpenQRCode.vue')
|
|
},
|
|
methods: {
|
|
openCakeDesc({$index}) {
|
|
debugger
|
|
this.cake_subject_option_index = $index
|
|
this.cakeDialog = true
|
|
this.$nextTick(() => {
|
|
$('#cakeEditor').html("")
|
|
cakeEditor = new wangEditor('#cakeEditor')
|
|
cakeEditor.config.uploadImgShowBase64 = true // 使用 base64 保存图片
|
|
cakeEditor.create()
|
|
// const wsm = this.formData.issues[this.cake_subject]['wors'][this.cake_subject_option_index]['wsm']
|
|
const wsm = this.issueData[this.currentModifyIssueIndex]['wors'][$index]['wsm']
|
|
if (wsm) {
|
|
cakeEditor.txt.html(wsm)
|
|
}
|
|
})
|
|
},
|
|
upCakeDesc() {
|
|
const wsm = cakeEditor.txt.html()
|
|
this.$set(this.issueData[this.currentModifyIssueIndex]['wors'][this.cake_subject_option_index], 'wsm', wsm)
|
|
this.cakeDialog = false
|
|
},
|
|
questionTypeChange(val) {
|
|
if (val === 4 && this.formData.issues.length > 1) {
|
|
this.formData.issues = this.formData.issues.slice(0, 1);
|
|
}
|
|
},
|
|
|
|
//修改活动状态
|
|
async upStatus(qid, flag) {
|
|
const {msg, code} = await $.post(loc() + "/upStatus", {qid: qid, flag: flag})
|
|
if (code === 0) {
|
|
this.notifySuccess(msg)
|
|
this.pageData()
|
|
} else {
|
|
this.notifyWarning(msg)
|
|
}
|
|
},
|
|
|
|
//查看活动信息
|
|
async openView(qid) {
|
|
const {data, code} = await $.get(loc() + "/findOne", {qid: qid})
|
|
if (code === 0) {
|
|
data.data.issues.forEach((issue) => {
|
|
issue.xz = []
|
|
issue.wors.forEach((wor) => {
|
|
if (wor.wismr == true && issue.iisdx == true
|
|
) {
|
|
issue.xz = wor.wid
|
|
} else if (wor.wismr == true && issue.iisdx == false) {
|
|
issue.xz.push(wor.wid)
|
|
}
|
|
})
|
|
if (issue.iplfs == 2) {
|
|
issue.wors_ = []
|
|
for (let i = 0; i < issue.wors.length; i += issue.icolnum) {
|
|
let arr = []
|
|
for (let j = 0; j < issue.icolnum; j++) {
|
|
arr.push(issue.wors[i + j])
|
|
}
|
|
issue.wors_.push(arr)
|
|
}
|
|
}
|
|
})
|
|
this.viewData = data.data
|
|
this.$refs.guava.view()
|
|
} else {
|
|
this.notifyWarning(msg)
|
|
}
|
|
},
|
|
|
|
//答案排序
|
|
worPx(widx, isTop) {
|
|
if (isTop && widx > 0) {
|
|
let v = JSON.parse(JSON.stringify(this.issueData[this.currentModifyIssueIndex].wors[widx]))
|
|
this.$set(this.issueData[this.currentModifyIssueIndex].wors, widx, this.issueData[this.currentModifyIssueIndex].wors[widx - 1])
|
|
this.$set(this.issueData[this.currentModifyIssueIndex].wors, widx - 1, v)
|
|
} else if (!isTop && widx < this.issueData[this.currentModifyIssueIndex].wors.length - 1) {
|
|
let v = JSON.parse(JSON.stringify(this.issueData[this.currentModifyIssueIndex].wors[widx]))
|
|
this.$set(this.issueData[this.currentModifyIssueIndex].wors, widx, this.issueData[this.currentModifyIssueIndex].wors[widx + 1])
|
|
this.$set(this.issueData[this.currentModifyIssueIndex].wors, widx + 1, v)
|
|
}
|
|
},
|
|
|
|
//默认选中
|
|
upMr(widx, val) {
|
|
if (val) {
|
|
const isRadioSelect = this.issueData[this.currentModifyIssueIndex]['iisdx']
|
|
if (isRadioSelect) {
|
|
this.issueData[this.currentModifyIssueIndex].wors.forEach(v => {
|
|
v.wismr = false
|
|
})
|
|
}
|
|
this.issueData[this.currentModifyIssueIndex].wors[widx].wismr = true
|
|
}
|
|
},
|
|
|
|
//是否正确答案
|
|
upCorrect(widx, val) {
|
|
if (val) {
|
|
const isRadioSelect = this.issueData[this.currentModifyIssueIndex]['iisdx']
|
|
if (isRadioSelect) {
|
|
this.issueData[this.currentModifyIssueIndex].wors.forEach(v => {
|
|
v.correct = false
|
|
})
|
|
}
|
|
this.issueData[this.currentModifyIssueIndex].wors[widx].correct = true
|
|
}
|
|
},
|
|
|
|
//题目排序
|
|
issuePx(idx, isTop) {
|
|
if (isTop && idx > 0) {
|
|
let v = JSON.parse(JSON.stringify(this.issueData[idx]))
|
|
this.issueData[idx] = this.issueData[idx - 1]
|
|
this.issueData[idx - 1] = v
|
|
} else if (!isTop && idx < this.issueData.length - 1) {
|
|
let v = JSON.parse(JSON.stringify(this.issueData[idx]))
|
|
this.issueData[idx] = this.issueData[idx + 1]
|
|
this.issueData[idx + 1] = v
|
|
}
|
|
},
|
|
|
|
//题干
|
|
upIssueName() {
|
|
this.issueData[this.currentModifyIssueIndex][this.issuePropName] = upTxtEditor.txt.html()
|
|
this.setTitleDialogVisible = false
|
|
},
|
|
|
|
//删除答案
|
|
delWor(props, scope) {
|
|
if (!this.isNull(scope.row.wid)) {
|
|
this.delWorIds.push(scope.row.wid)
|
|
}
|
|
this.issueData[this.currentModifyIssueIndex].wors.splice(scope.$index, 1)
|
|
},
|
|
|
|
//删除题目
|
|
delIssue(scope) {
|
|
if (!this.isNull(scope.row.iid)) {
|
|
this.delIssueIds.push(scope.row.iid)
|
|
}
|
|
this.formData.issues.splice(scope.$index, 1)
|
|
},
|
|
|
|
//打开设置题干
|
|
openIssueName(name) {
|
|
this.issuePropName = name
|
|
this.setTitleDialogVisible = true
|
|
this.$nextTick(() => {
|
|
$('#upTxtEditor').html("")
|
|
upTxtEditor = new wangEditor('#upTxtEditor')
|
|
upTxtEditor.config.uploadImgShowBase64 = true // 使用 base64 保存图片
|
|
upTxtEditor.create()
|
|
if (this.issueData[this.currentModifyIssueIndex][name]) {
|
|
upTxtEditor.txt.html(this.issueData[this.currentModifyIssueIndex][name])
|
|
}
|
|
})
|
|
},
|
|
|
|
//删除问卷
|
|
async deleteQuestion(id) {
|
|
const confirm = await this.$confirm('确定要删除吗', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
})
|
|
if ('confirm' === confirm) {
|
|
const {code, msg} = await $.post(loc() + "/deleteQuestion", {qid: id})
|
|
if (code === 0) {
|
|
this.notifySuccess(msg)
|
|
this.pageData()
|
|
} else {
|
|
this.notifyWarning(msg)
|
|
}
|
|
}
|
|
},
|
|
|
|
//新建问卷
|
|
openAddQuestion() {
|
|
this.$refs.guava.edit()
|
|
this.editMode = 'basicInfo'
|
|
setTimeout(() => {
|
|
$('#qsmEditor').html("")
|
|
qsmEditor = new wangEditor('#qsmEditor')
|
|
qsmEditor.config.uploadImgShowBase64 = true
|
|
qsmEditor.config.onchange = (html) => {
|
|
this.$set(this.formData, "qsm", html)
|
|
}
|
|
qsmEditor.create()
|
|
this.formData = {issues: [], qlx: 2, qrkdcs: 0}
|
|
}, 300)
|
|
|
|
},
|
|
|
|
//打开编辑问卷基础信息
|
|
async openEditBasicInfo(qid) {
|
|
const {code, data, msg} = await $.get(loc() + "/findBasicInfo", {qid: qid})
|
|
if (code === 0) {
|
|
setTimeout(() => {
|
|
$('#qsmEditor').html(data.qsm)
|
|
qsmEditor = new wangEditor('#qsmEditor')
|
|
qsmEditor.config.onchange = (html) => {
|
|
this.$set(this.formData, "qsm", html)
|
|
}
|
|
qsmEditor.create()
|
|
this.formData = data
|
|
if (!this.isNull(this.formData.qdtkssj) && !this.isNull(this.formData.qdtjssj)) {
|
|
this.$set(this.formData, 'qdtsj', [this.formData.qdtkssj, this.formData.qdtjssj])
|
|
}
|
|
}, 300)
|
|
this.editMode = 'basicInfo'
|
|
this.$refs.guava.edit()
|
|
} else {
|
|
this.notifyWarning(msg)
|
|
}
|
|
},
|
|
async modifyBasicInfo() {
|
|
if (this.formData.qlx === 4) {
|
|
if (this.formData.autoSelect && this.formData.endTime < new Date().getTime()) {
|
|
this.$message.warning('结束时间必须要大于当前时间')
|
|
return
|
|
}
|
|
}
|
|
|
|
//答题 并且是 定时定题
|
|
// if (this.formData.qlx === 2 && this.formData.ctMode === 1) {
|
|
// if (this.formData.issues.some(v => v.displayDate != null) && this.formData.issues.some(v => v.displayDate == null)) {
|
|
// this.$message.warning('显示日期只能全为空或者全不为空')
|
|
// return
|
|
// }
|
|
// }
|
|
|
|
const {code, msg} = await $.post(loc() + '/modifyBasicInfo', this.formData)
|
|
if (code === 0) {
|
|
this.notifySuccess(msg)
|
|
this.$refs.guava.index()
|
|
this.pageData()
|
|
} else {
|
|
this.notifyWarning(msg)
|
|
}
|
|
},
|
|
|
|
//打开题目设置
|
|
async openEditIssue(qid) {
|
|
const {data: questionData} = await $.get(loc() + "/findBasicInfo", {qid: qid})
|
|
this.questionData = questionData
|
|
const {data: issueData} = await $.get(loc() + "/issueList", {questionId: qid})
|
|
this.issueData = issueData
|
|
this.$refs.guava.edit()
|
|
this.editMode = 'issueInfo'
|
|
},
|
|
|
|
//题目详细设置
|
|
openEditIssueDetail(issueIndex) {
|
|
this.currentModifyIssueIndex = issueIndex
|
|
this.issueWorDrawerVisible = true
|
|
},
|
|
|
|
|
|
async getActivityUserScope() {
|
|
const resp = await $.get('/platform/activity/basic/scope/getActivityUserScopeGroup')
|
|
if (resp.code === 0) {
|
|
this.activityUserScopeList = resp.data
|
|
}
|
|
},
|
|
|
|
//修改题目
|
|
async doModifyIssues() {
|
|
//答题 并且是 定时定题
|
|
if (this.questionData.qlx === 2 && this.questionData.ctMode === 1) {
|
|
if (this.issueData.some(v => v.displayDate != null) && this.issueData.some(v => v.displayDate == null)) {
|
|
this.notifyWarning('显示日期只能全为空或者全不为空')
|
|
return
|
|
}
|
|
}
|
|
|
|
const confirm = await this.$confirm('您确定要提交吗?', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
})
|
|
if ('confirm' === confirm) {
|
|
const loading = this.$loading({
|
|
lock: true,
|
|
text: '提交中',
|
|
spinner: 'el-icon-loading',
|
|
background: 'rgba(0, 0, 0, 0.7)'
|
|
})
|
|
|
|
const {code, msg} = await $.post(loc() + '/modifyIssues', {
|
|
questionId: this.questionData.qid,
|
|
issues: JSON.stringify(this.issueData)
|
|
})
|
|
loading.close()
|
|
if (code === 0) {
|
|
this.notifySuccess(msg)
|
|
this.$refs.guava.index()
|
|
this.pageData()
|
|
} else {
|
|
this.notifyWarning(msg)
|
|
}
|
|
}
|
|
|
|
},
|
|
|
|
beforeAvatarUpload(file) {
|
|
const isJPG = ['image/png', 'image/jpeg'].includes(file.type);
|
|
const isLt2M = file.size / 1024 / 1024 < 2;
|
|
if (!isJPG) {
|
|
this.$message.error('上传图片只能是 jpg、png、jpeg 格式!');
|
|
}
|
|
if (!isLt2M) {
|
|
this.$message.error('上传图片大小不能超过 2MB!');
|
|
}
|
|
return isJPG && isLt2M;
|
|
},
|
|
handleAvatarSuccess(res, file, row) {
|
|
this.$set(row, 'wimg', res.data.id)
|
|
},
|
|
handleRemove(file, row) {
|
|
this.$set(row, 'wimg', null)
|
|
},
|
|
|
|
sendMsg(row) {
|
|
this.url = `<a href="` + (APP_DOMAIN + "/mobile/question/h5/list?type=" + row.qlx) + `">点击参与</a>`
|
|
this.$refs.sendMsg.openDialog(row.activityuserscopeid)
|
|
},
|
|
|
|
openCode(row) {
|
|
this.$refs.openQRCode.openCode("/mobile/question/h5/list?type=" + row.qlx)
|
|
},
|
|
},
|
|
created() {
|
|
this.getActivityUserScope()
|
|
this.pageData();
|
|
},
|
|
watch: {
|
|
'formData.activityUserScopeId': {
|
|
async handler(newVal, oldVal) {
|
|
await this.getActivityUserScope()
|
|
this.userScopeDialog = false
|
|
},
|
|
deep: true
|
|
},
|
|
}
|
|
})
|
|
</script>
|
|
|
|
<!--#
|
|
}
|
|
#-->
|