| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508 |
- <style lang="scss" scoped>
- .content {
- display: flex;
- padding: 0;
- .content-item {
- flex: 1;
- padding: 20px;
- &.middle {
- border-left: 2px solid #d8d8d8;
- border-right: 2px solid #d8d8d8;
- }
- &.right,
- &.middle {
- flex: 2;
- }
- .item-title {
- font-size: 14px;
- font-weight: bold;
- color: #666666;
- margin-bottom: 20px;
- }
- .el-row {
- margin-top: 20px;
- }
- .model {
- width: 80px;
- height: 80px;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: space-evenly;
- &:hover {
- cursor: pointer;
- background: #f5faff;
- }
- img {
- height: 28px;
- width: 28px;
- }
- span {
- font-size: 14px;
- color: #666666;
- // margin-top:19px;
- }
- }
- .el-form {
- margin-bottom: 20px;
- .el-form-item {
- background: #f5faff;
- padding: 10px 20px;
- margin-bottom: 5px;
- /deep/.el-form-item__label {
- font-size: 16px;
- color: #666666;
- display: block;
- line-height: 20px;
- margin-bottom: 10px;
- text-align: left;
- }
- /deep/.el-form-item__content {
- margin-right: 160px;
- position: relative;
- font,
- .drag {
- position: absolute;
- right: -145px;
- }
- font {
- top: 0px;
- color: #3895fe;
- font-size: 12px;
- span {
- margin-left: 5px;
- cursor: pointer;
- }
- }
- .drag {
- right: -160px;
- bottom: -3px;
- }
- div {
- font-size: 16px;
- color: #333333;
- }
- .el-radio,
- .el-checkbox {
- margin-right: 32px;
- // height: 32px;
- line-height: 20px;
- }
- .el-radio-group,
- .el-checkbox-group {
- display: flex;
- flex-direction: column;
- }
- .cus_select .el-radio,
- .el-radio__input {
- white-space: normal;
- }
- .cus_select .el-checkbox,
- .el-checkbox__input {
- white-space: normal;
- }
- .cus_select .el-checkbox__label {
- display: inline;
- }
- .el-radio__label,
- .el-checkbox__label {
- display: inline-block !important;
- width: 93%;
- vertical-align: top;
- }
- .el-radio,
- .el-checkbox {
- margin-bottom: 10px;
- }
- }
- /deep/.el-form-item__label {
- float: none;
- font-weight: bold;
- }
- &.text {
- /deep/.el-form-item__content {
- // margin-left:60px;
- }
- }
- }
- }
- // 右边
- .phone {
- width: 350px;
- height: 713px;
- background: url("../../assets/survey_bg.png") no-repeat;
- background-size: 100% auto;
- margin: auto;
- }
- .item-main {
- height: 551px;
- width: 315px;
- background: #ffffff;
- border: 1px solid #ddd;
- overflow: auto;
- position: relative;
- top: 80px;
- left: 21px;
- // display: none;
- // border: 1px solid #DDDDDD;
- // box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.13);
- border-radius: 5px;
- overflow: auto;
- .el-form.over_y {
- border: none;
- overflow: visible;
- }
- }
- // label样式
- .edit_label {
- /deep/.el-input__inner {
- background: #f5faff;
- border: 0px;
- padding: 0px;
- }
- }
- /deep/.opicon {
- font-weight: bold;
- padding: 5px;
- color: #3895fe;
- }
- .tpl_title {
- font-size: 18px;
- // margin-bottom:20px;
- }
- .tpl_form {
- margin: 0px;
- border: 1px solid #ccc;
- border-radius: 20px;
- /deep/.el-form-item {
- background: none;
- }
- /deep/.el-form-item__content {
- width: 100%;
- }
- }
- .survey_logo {
- width: 145px;
- position: relative;
- top: 5px;
- left: 20px;
- }
- .item_require {
- position: absolute;
- top: 0px;
- right: 35px !important;
- /deep/.el-checkbox__label {
- padding-left: 5px;
- // color:red;
- }
- }
- .require::before {
- content: "*";
- color: #f56c6c;
- margin-right: 4px;
- position: absolute;
- left: -10px;
- }
- }
- /deep/.radio .el-input {
- width: 85%;
- }
- /deep/.checkbox .el-input {
- width: 85%;
- }
- // 操作按钮
- .ctl_btn {
- display: inline-block;
- width: 28px;
- position: absolute;
- top: 13px;
- }
- .ctl_btn_note {
- right: 55px;
- color: #ffb800;
- }
- .ctl_btn_edit {
- right: 20px;
- color: green;
- }
- .ctl_btn_del {
- right: -15px;
- color: red;
- }
- // 注释弹窗
- /deep/.noteDialog .el-form-item__content {
- margin-right: 0px !important;
- margin-left: 0px !important;
- }
- // /deep/.noteDialog .el-dialog{
- // margin-top:20vh!important;
- // }
- /deep/.noteDialog .el-dialog__body {
- padding: 10px 20px !important;
- }
- .img_list {
- li {
- display: inline-block;
- min-width: 140px;
- height: 148px;
- margin: 10px;
- position: relative;
- overflow: hidden;
- img {
- height: 100%;
- }
- .el-icon-delete {
- color: red;
- font-size: 18px;
- cursor: pointer;
- }
- .move {
- position: absolute;
- bottom: 0;
- left: 0;
- width: 100%;
- text-align: center;
- background: rgba(0, 0, 0, 0.527);
- color: #fff;
- cursor: pointer;
- }
- }
- }
- //
- /deep/.group .el-form-item__content {
- margin-right: 0px !important;
- }
- .active_item {
- border: 2px solid #3a8ee6;
- }
- // 提示信息展示
- .noteInfoDialog {
- width: 90%;
- margin: 0 auto;
- height: 300px;
- border: 1px solid #ccc;
- position: absolute;
- top: 10vh;
- left: 5%;
- background: #ffffff;
- }
- .noteInfoDialog .body {
- width: 100%;
- margin: 0 auto;
- height: 300px;
- // border:1px solid red;
- position: absolute;
- // top:10vh;
- // left:5%;
- }
- }
- .tool_text {
- width: 315px;
- p {
- margin-bottom: 10px;
- }
- .toolText_img {
- img {
- width: 100px;
- height: 100px;
- margin-bottom: 5px;
- margin-right: 5px;
- }
- // img:nth-child(odd) {
- // margin-right: 5px;
- // }
- }
- }
- </style>
- <template>
- <section>
- <p><span>信息管理></span>新增模板</p>
- <div class="content">
- <div class="content-item">
- <div class="item-title">模板组件</div>
- <el-row>
- <el-col :span="12">
- <div class="model" @click="addWidget(0)">
- <img src="../../assets/slt_small.png" alt="" />
- <span>单行文本</span>
- </div>
- </el-col>
- <el-col :span="12">
- <div class="model" @click="addWidget(1)">
- <img src="../../assets/mlt_small.png" alt="" />
- <span>多行文本</span>
- </div>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <div class="model" @click="addWidget(2)">
- <img src="../../assets/radio_small.png" alt="" />
- <span>单选统计</span>
- </div>
- </el-col>
- <el-col :span="12">
- <div class="model" @click="addWidget(3)">
- <img src="../../assets/checked_small.png" alt="" />
- <span>多选统计</span>
- </div>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <div class="model" @click="addWidget(4)">
- <img src="../../assets/upload_small.png" alt="" />
- <span>图片上传</span>
- </div>
- </el-col>
- <!-- <el-col :span='12'>
- <div class='model' @click="addWidget(5)">
- <img src="../../assets/file_small.png" alt="">
- <span>文件上传</span>
- </div>
- </el-col> -->
- <el-col :span="12">
- <div class="model" @click="addWidget(6)">
- <img src="../../assets/group_small.png" alt="" />
- <span>域组件</span>
- </div>
- </el-col>
- </el-row>
- </div>
- <div class="content-item middle">
- <div class="item-title">编辑模板-{{ title }}</div>
- <el-form
- size="small"
- label-width=""
- label-position="top"
- class="over_y"
- >
- <!-- handle=".dargBtn" 触发拖拽事件的按钮类名 filter=".undraggable" 不可拖拽的元素的类名 -->
- <vuedraggable
- class="wrapper"
- v-model="widgetList"
- handle=".dargBtn"
- @change="change"
- @start="start"
- @end="end"
- >
- <transition-group>
- <el-form-item
- v-for="(item, index) in widgetList"
- :key="index"
- :prop="item.label"
- :class="item.active == 1 ? 'active_item' : 'test'"
- @click.native.self="activeItem(index)"
- >
- <section v-if="item.type == 'input'">
- <el-input
- :readonly="item.edit"
- v-model="item.label"
- :class="[
- item.edit ? 'edit_label' : '',
- item.require ? 'require' : '',
- ]"
- ></el-input>
- <el-input
- placeholder="请输入"
- v-model="item.placeholder"
- ></el-input>
- <font>
- <el-checkbox class="item_require" v-model="item.require"
- >必填</el-checkbox
- >
- <span class="ctl_btn ctl_btn_note" @click="addNote(item)"
- >注释</span
- >
- <span
- class="ctl_btn ctl_btn_edit"
- @click="item.edit = !item.edit"
- >{{ item.edit ? "编辑" : "保存" }}</span
- >
- <span
- class="ctl_btn ctl_btn_del"
- @click="widgetList.splice(index, 1)"
- >删除</span
- >
- </font>
- <el-button type="primary" class="dargBtn drag" size="mini"
- >拖拽移动顺序</el-button
- >
- </section>
- <section v-if="item.type == 'textarea'">
- <el-input
- :readonly="item.edit"
- v-model="item.label"
- :class="[
- item.edit ? 'edit_label' : '',
- item.require ? 'require' : '',
- ]"
- ></el-input>
- <el-input
- type="textarea"
- placeholder="请输入"
- v-model="item.placeholder"
- ></el-input>
- <font>
- <el-checkbox class="item_require" v-model="item.require"
- >必填</el-checkbox
- >
- <span class="ctl_btn ctl_btn_note" @click="addNote(item)"
- >注释</span
- >
- <span
- @click="item.edit = !item.edit"
- class="ctl_btn ctl_btn_edit"
- >{{ item.edit ? "编辑" : "保存" }}</span
- >
- <span
- @click="widgetList.splice(index, 1)"
- class="ctl_btn ctl_btn_del"
- >删除</span
- >
- </font>
- <el-button type="primary" class="dargBtn drag" size="mini"
- >拖拽移动顺序</el-button
- >
- </section>
- <section v-if="item.type == 'radio'" class="radio">
- <el-input
- :readonly="item.edit"
- v-model="item.label"
- :class="[
- item.edit ? 'edit_label' : '',
- item.require ? 'require' : '',
- ]"
- ></el-input
- >(单选)
- <el-radio-group>
- <el-radio
- :label="iitem.label"
- v-for="(iitem, index) in item.items"
- :key="index"
- >
- <el-input
- :readonly="item.edit"
- v-model="iitem.label"
- :class="item.edit ? 'edit_label' : ''"
- ></el-input>
- <template v-if="!item.edit">
- <i
- class="el-icon-minus opicon"
- @click="minusOption(item.items, index)"
- ></i
- ><i
- class="el-icon-plus opicon"
- @click="plusOption(item.items, index)"
- ></i>
- </template>
- </el-radio>
- </el-radio-group>
- <font>
- <el-checkbox class="item_require" v-model="item.require"
- >必填</el-checkbox
- >
- <span class="ctl_btn ctl_btn_note" @click="addNote(item)"
- >注释</span
- >
- <span
- @click="item.edit = !item.edit"
- class="ctl_btn ctl_btn_edit"
- >{{ item.edit ? "编辑" : "保存" }}</span
- >
- <span
- @click="widgetList.splice(index, 1)"
- class="ctl_btn ctl_btn_del"
- >删除</span
- >
- </font>
- <el-button type="primary" class="dargBtn drag" size="mini"
- >拖拽移动顺序</el-button
- >
- </section>
- <section v-if="item.type == 'checkbox'" class="checkbox">
- <el-input
- :readonly="item.edit"
- v-model="item.label"
- :class="[
- item.edit ? 'edit_label' : '',
- item.require ? 'require' : '',
- ]"
- ></el-input
- >(多选)
- <el-radio-group>
- <el-checkbox
- :label="iitem.label"
- v-for="(iitem, index) in item.items"
- :key="index"
- >
- <el-input
- :readonly="item.edit"
- v-model="iitem.label"
- :class="item.edit ? 'edit_label' : ''"
- ></el-input>
- <template v-if="!item.edit">
- <i
- class="el-icon-minus opicon"
- @click="minusOption(item.items, index)"
- ></i
- ><i
- class="el-icon-plus opicon"
- @click="plusOption(item.items, index)"
- ></i>
- </template>
- </el-checkbox>
- </el-radio-group>
- <font>
- <el-checkbox class="item_require" v-model="item.require"
- >必填</el-checkbox
- >
- <span class="ctl_btn ctl_btn_note" @click="addNote(item)"
- >注释</span
- >
- <span
- @click="item.edit = !item.edit"
- class="ctl_btn ctl_btn_edit"
- >{{ item.edit ? "编辑" : "保存" }}</span
- >
- <span
- @click="widgetList.splice(index, 1)"
- class="ctl_btn ctl_btn_del"
- >删除</span
- >
- </font>
- <el-button type="primary" class="dargBtn drag" size="mini"
- >拖拽移动顺序</el-button
- >
- </section>
- <section v-if="item.type == 'image'">
- <!-- <el-input :readonly="item.edit" v-model="item.label" :class="item.edit?'edit_label':''"></el-input> -->
- <el-input
- :readonly="item.edit"
- v-model="item.label"
- :class="[
- item.edit ? 'edit_label' : '',
- item.require ? 'require' : '',
- ]"
- ></el-input>
- <el-upload
- action="/api/admin/uploadfile"
- list-type="picture-card"
- :on-preview="handlePreview"
- :on-remove="handleRemove"
- limit="9"
- >
- <i class="el-icon-plus"></i>
- </el-upload>
- <font>
- <el-checkbox class="item_require" v-model="item.require"
- >必填</el-checkbox
- >
- <span class="ctl_btn ctl_btn_note" @click="addNote(item)"
- >注释</span
- >
- <span
- @click="item.edit = !item.edit"
- class="ctl_btn ctl_btn_edit"
- >{{ item.edit ? "编辑" : "保存" }}</span
- >
- <span
- @click="widgetList.splice(index, 1)"
- class="ctl_btn ctl_btn_del"
- >删除</span
- >
- </font>
- <el-button type="primary" class="dargBtn drag" size="mini"
- >拖拽移动顺序</el-button
- >
- </section>
- <section v-if="item.type == 'file'">
- <el-input
- :readonly="item.edit"
- v-model="item.label"
- :class="item.edit ? 'edit_label' : ''"
- ></el-input>
- <el-upload
- class="upload-demo"
- ref="upload"
- action="/api/admin/uploadfile"
- :on-preview="handlePreview"
- :on-remove="handleRemove"
- :file-list="fileList"
- :auto-upload="false"
- >
- <!-- <el-button slot="trigger" size="small" type="primary">选取文件</el-button> -->
- <el-button
- style="margin-left: 10px"
- size="small"
- type="primary"
- plain
- @click="submitUpload"
- >添加文件</el-button
- >
- <!-- <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> -->
- </el-upload>
- <font>
- <span @click="item.edit = !item.edit">{{
- item.edit ? "编辑" : "保存"
- }}</span>
- <span @click="widgetList.splice(index, 1)">删除</span>
- </font>
- <el-button type="primary" class="dargBtn drag" size="mini"
- >拖拽移动顺序</el-button
- >
- </section>
- <!-- 域组件 -->
- <section v-if="item.type == 'group'" class="group">
- <el-input
- :readonly="item.edit"
- v-model="item.label"
- :class="[
- item.edit ? 'edit_label' : '',
- item.require ? 'require' : '',
- ]"
- ></el-input>
- <el-form-item
- v-for="(iitem, index) in item.children"
- :key="index"
- :prop="iitem.label"
- >
- <section v-if="iitem.type == 'input'">
- <el-input
- :readonly="iitem.edit"
- v-model="iitem.label"
- :class="[
- iitem.edit ? 'edit_label' : '',
- iitem.require ? 'require' : '',
- ]"
- ></el-input>
- <el-input
- placeholder="请输入"
- v-model="iitem.placeholder"
- ></el-input>
- <font>
- <el-checkbox
- class="item_require"
- v-model="iitem.require"
- >必填</el-checkbox
- >
- <span
- class="ctl_btn ctl_btn_note"
- @click="addNote(iitem)"
- >注释</span
- >
- <span
- class="ctl_btn ctl_btn_edit"
- @click="iitem.edit = !iitem.edit"
- >{{ iitem.edit ? "编辑" : "保存" }}</span
- >
- <span
- class="ctl_btn ctl_btn_del"
- @click="item.children.splice(index, 1)"
- >删除</span
- >
- </font>
- </section>
- <section v-if="iitem.type == 'textarea'">
- <el-input
- :readonly="iitem.edit"
- v-model="iitem.label"
- :class="[
- iitem.edit ? 'edit_label' : '',
- iitem.require ? 'require' : '',
- ]"
- ></el-input>
- <el-input
- type="textarea"
- placeholder="请输入"
- v-model="iitem.placeholder"
- ></el-input>
- <font>
- <span
- class="ctl_btn ctl_btn_note"
- @click="addNote(iitem)"
- >注释</span
- >
- <span
- class="ctl_btn ctl_btn_edit"
- @click="iitem.edit = !iitem.edit"
- >{{ iitem.edit ? "编辑" : "保存" }}</span
- >
- <span
- class="ctl_btn ctl_btn_del"
- @click="item.children.splice(index, 1)"
- >删除</span
- >
- </font>
- </section>
- <section v-if="iitem.type == 'radio'" class="radio">
- <el-input
- :readonly="iitem.edit"
- v-model="iitem.label"
- :class="[
- iitem.edit ? 'edit_label' : '',
- iitem.require ? 'require' : '',
- ]"
- ></el-input
- >(单选)
- <el-radio-group>
- <el-radio
- :label="iiitem.label"
- v-for="(iiitem, index) in iitem.items"
- :key="index"
- >
- <el-input
- :readonly="iitem.edit"
- v-model="iiitem.label"
- :class="iitem.edit ? 'edit_label' : ''"
- ></el-input>
- <template v-if="!iitem.edit">
- <i
- class="el-icon-minus opicon"
- @click="minusOption(iitem.items, index)"
- ></i
- ><i
- class="el-icon-plus opicon"
- @click="plusOption(iitem.items, index)"
- ></i>
- </template>
- </el-radio>
- </el-radio-group>
- <font>
- <el-checkbox
- class="item_require"
- v-model="iitem.require"
- >必填</el-checkbox
- >
- <span
- class="ctl_btn ctl_btn_note"
- @click="addNote(iitem)"
- >注释</span
- >
- <span
- @click="iitem.edit = !iitem.edit"
- class="ctl_btn ctl_btn_edit"
- >{{ iitem.edit ? "编辑" : "保存" }}</span
- >
- <span
- @click="item.children.splice(index, 1)"
- class="ctl_btn ctl_btn_del"
- >删除</span
- >
- </font>
- </section>
- <section v-if="iitem.type == 'checkbox'" class="checkbox">
- <el-input
- :readonly="iitem.edit"
- v-model="iitem.label"
- :class="[
- iitem.edit ? 'edit_label' : '',
- iitem.require ? 'require' : '',
- ]"
- ></el-input
- >(多选)
- <el-radio-group>
- <el-checkbox
- :label="iiitem.label"
- v-for="(iiitem, index) in iitem.items"
- :key="index"
- >
- <el-input
- :readonly="iitem.edit"
- v-model="iiitem.label"
- :class="iitem.edit ? 'edit_label' : ''"
- ></el-input>
- <template v-if="!iitem.edit">
- <i
- class="el-icon-minus opicon"
- @click="minusOption(iitem.items, index)"
- ></i
- ><i
- class="el-icon-plus opicon"
- @click="plusOption(iitem.items, index)"
- ></i>
- </template>
- </el-checkbox>
- </el-radio-group>
- <font>
- <el-checkbox
- class="item_require"
- v-model="iitem.require"
- >必填</el-checkbox
- >
- <span
- class="ctl_btn ctl_btn_note"
- @click="addNote(iitem)"
- >注释</span
- >
- <span
- @click="iitem.edit = !iitem.edit"
- class="ctl_btn ctl_btn_edit"
- >{{ iitem.edit ? "编辑" : "保存" }}</span
- >
- <span
- @click="item.children.splice(index, 1)"
- class="ctl_btn ctl_btn_del"
- >删除</span
- >
- </font>
- </section>
- <section v-if="iitem.type == 'image'">
- <!-- <el-input :readonly="item.edit" v-model="item.label" :class="item.edit?'edit_label':''"></el-input> -->
- <el-input
- :readonly="iitem.edit"
- v-model="iitem.label"
- :class="[
- iitem.edit ? 'edit_label' : '',
- iitem.require ? 'require' : '',
- ]"
- ></el-input>
- <el-upload
- action="/api/admin/uploadfile"
- list-type="picture-card"
- :on-preview="handlePreview"
- :on-remove="handleRemove"
- limit="9"
- >
- <i class="el-icon-plus"></i>
- </el-upload>
- <font>
- <el-checkbox class="item_require" v-model="iitem.require"
- >必填</el-checkbox
- >
- <span
- class="ctl_btn ctl_btn_note"
- @click="addNote(iitem)"
- >注释</span
- >
- <span
- @click="iitem.edit = !iitem.edit"
- class="ctl_btn ctl_btn_edit"
- >{{ iitem.edit ? "编辑" : "保存" }}</span
- >
- <span
- @click="item.children.splice(index, 1)"
- class="ctl_btn ctl_btn_del"
- >删除</span
- >
- </font>
- </section>
- </el-form-item>
- </section>
- <font style="top: -18px" v-if="item.type == 'group'">
- <span @click="widgetList.splice(index, 1)">删除</span>
- </font>
- <el-button type="primary" class="dargBtn drag" size="mini"
- >拖拽移动顺序</el-button
- >
- </el-form-item>
- </transition-group>
- </vuedraggable>
- <div v-if="this.widgetList.length">
- <el-button size="medium" type="primary" @click="save"
- >保存</el-button
- >
- </div>
- </el-form>
- <!-- 添加注释 -->
- <el-dialog
- class="noteDialog"
- :title="dialogTitle"
- :close-on-click-modal="false"
- :visible.sync="dialogVisible"
- >
- <el-form
- size="small"
- class="preview"
- :inline="false"
- label-width="80px"
- ref="form1"
- :rules="rules"
- >
- <el-form-item>
- <el-input
- v-model="noteDesc"
- placeholder="请输入注释信息"
- ></el-input>
- </el-form-item>
- <el-form-item>
- <ul class="img_list">
- <li v-for="(item, index) in noteImgs" :key="index">
- <img :src="item" alt="" />
- <p class="move">
- <i @click="remove(index)" class="el-icon-delete"></i>
- </p>
- </li>
- <li>
- <el-upload
- multiple
- :on-success="imgchange"
- action="/api/admin/uploadfile"
- :show-file-list="false"
- list-type="picture-card"
- :limit="9"
- :on-exceed="limitUploadNum"
- :file-list="fileList"
- >
- <i class="el-icon-plus"></i>
- </el-upload>
- </li>
- </ul>
- </el-form-item>
- </el-form>
- <span slot="footer" class="dialog-footer">
- <el-button
- size="small"
- type="normal"
- @click="(dialogVisible = false), (curNote = '<p></p>')"
- >取消</el-button
- >
- <el-button size="small" type="primary" @click="saveNote(curItem)"
- >确 定</el-button
- >
- </span>
- </el-dialog>
- </div>
- <div class="content-item right">
- <div class="item-title">效果预览</div>
- <div class="phone">
- <div class="item-main" style="position: relative">
- <!-- <img src="../../assets/survey_logo.png" alt="" class="survey_logo"> -->
- <h5 align="center" class="tpl_title">{{ title }}</h5>
- <el-form ref="form" :model="form" class="tpl_form over_y">
- <template v-for="(item, index) in widgetList">
- <h6 v-if="item.type=='group'" align="center" class="tpl_title">----{{ item.label }}----</h6>
- <el-form-item :key="index" :label="item.label + item.cntype">
- <el-tooltip
- class="item"
- effect="dark"
- content="Left Bottom 提示文字"
- placement="bottom-end"
- >
- <i
- v-if="item.noteDesc"
- class="el-icon-info"
- style="position: absolute; top: -28px; right: 0px"
- ></i>
- <div slot="content" class="tool_text">
- <p>{{ item.noteDesc }}</p>
- <div class="toolText_img">
- <img
- :src="item"
- alt=""
- v-for="(item, index) in item.noteImgs"
- :key="index"
- />
- </div>
- </div>
- </el-tooltip>
- <el-input
- :class="item.require ? 'require' : ''"
- v-if="item.type == 'input'"
- v-model="form.label"
- :placeholder="item.placeholder"
- ></el-input>
- <el-input
- :class="item.require ? 'require' : ''"
- v-if="item.type == 'textarea'"
- type="textarea"
- v-model="form.label"
- :placeholder="item.placeholder"
- ></el-input>
- <el-radio-group
- class="cus_select"
- v-if="item.type == 'radio'"
- :class="item.require ? 'require' : ''"
- >
- <el-radio
- :label="iitem.label"
- v-for="(iitem, index) in item.items"
- :key="index"
- >{{ iitem.label }}</el-radio
- >
- </el-radio-group>
- <el-radio-group
- class="cus_select"
- v-if="item.type == 'checkbox'"
- :class="item.require ? 'require' : ''"
- >
- <el-checkbox
- :label="iitem.label"
- v-for="(iitem, index) in item.items"
- :key="index"
- >{{ iitem.label }}</el-checkbox
- >
- </el-radio-group>
- <el-upload
- :class="item.require ? 'require' : ''"
- v-if="item.type == 'image'"
- action="/api/admin/uploadfile"
- list-type="picture-card"
- :on-preview="handlePreview"
- :on-remove="handleRemove"
- >
- <i class="el-icon-plus"></i>
- </el-upload>
- <el-upload
- v-if="item.type == 'file'"
- class="upload-demo"
- ref="upload"
- action="/api/admin/uploadfile"
- :on-preview="handlePreview"
- :on-remove="handleRemove"
- :file-list="fileList"
- :auto-upload="false"
- >
- <!-- <el-button slot="trigger" size="small" type="primary">选取文件</el-button> -->
- <el-button
- style="margin-left: 10px"
- size="small"
- type="primary"
- plain
- @click="submitUpload"
- >添加文件</el-button
- >
- <!-- <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> -->
- </el-upload>
- </el-form-item>
- </template>
- <el-form-item v-if="this.widgetList.length">
- <el-button
- size="medium"
- type="primary"
- @click="dialogVisible = false"
- style="width: 100%; margin-top: 20px"
- >提交</el-button
- >
- </el-form-item>
- </el-form>
- <!-- 展示注释信息 -->
- <!-- <div class="noteInfoDialog">
- <div class="body">
- <el-button size="mini">关闭</el-button>
- </div>
- </div> -->
- </div>
- </div>
- <!-- 注释信息展示 -->
- <el-dialog
- class="noteDialog"
- :title="dialogTitle1"
- :close-on-click-modal="false"
- :visible.sync="dialogVisible1"
- >
- <span slot="footer" class="dialog-footer">
- <el-button
- size="small"
- type="normal"
- @click="
- (dialogVisible = false), (noteForm = {}), (curNote = '<p></p>')
- "
- >取消</el-button
- >
- <el-button size="small" type="primary" @click="saveNote(curItem)"
- >确 定</el-button
- >
- </span>
- </el-dialog>
- </div>
- </div>
- </section>
- </template>
- <script>
- import vuedraggable from "vuedraggable";
- import fuEditor from "../../components/fuEditor";
- export default {
- components: { vuedraggable, fuEditor },
- data() {
- return {
- fileList:[],
- noteDesc: "",
- noteImgs: [],
- realImgs: [],
- noteImgList: [],
- curItem: {},
- dialogTitle: "",
- dialogTitle1: "",
- // noteForm:{noteDesc:"",noteImgs:[]},
- curNote: "",
- dialogVisible: false,
- dialogVisible1: false,
- rules: {
- 姓名: [{ required: true, message: "请输入标题", trigger: "blur" }],
- },
- title: this.$route.query.title,
- edit: 0,
- form: { name: "", page: 1, page_size: 20 },
- total: 1,
- list: [{ name: "2333" }],
- loading: false,
- checkList: [],
- input: "",
- dialogVisible: false,
- defaultProps: {},
- data: [
- {
- id: 1,
- label: "一级 1",
- },
- {
- id: 2,
- label: "一级 2",
- children: [
- {
- id: 5,
- label: "二级 2-1",
- },
- {
- id: 6,
- label: "二级 2-2",
- },
- ],
- },
- ],
- stdWidgetList: [
- {
- type: "input",
- cntype: "",
- label: "请输入标题",
- placeholder: "请输入",
- edit: false,
- require: true,
- },
- {
- type: "textarea",
- cntype: "",
- label: "请输入标题",
- placeholder: "请输入",
- edit: false,
- require: true,
- },
- {
- type: "radio",
- cntype: "(单选)",
- label: "请输入标题",
- placeholder: "请输入",
- edit: false,
- require: true,
- items: [
- { label: "选项", value: "选项值" },
- { label: "选项1", value: "选项值" },
- ],
- },
- {
- type: "checkbox",
- cntype: "(多选)",
- label: "请输入标题",
- placeholder: "请输入",
- edit: false,
- require: true,
- items: [
- { label: "选项", value: "选项值" },
- { label: "选项1", value: "选项值" },
- ],
- },
- {
- type: "image",
- cntype: "",
- label: "请输入标题",
- placeholder: "请输入",
- edit: false,
- require: true,
- },
- {
- type: "file",
- cntype: "",
- label: "请输入标题",
- placeholder: "请输入",
- edit: false,
- require: true,
- },
- {
- type: "group",
- cntype: "",
- label: "请输入域组件标题",
- placeholder: "请输入",
- edit: false,
- require: true,
- children: [],
- },
- ],
- widgetList: [],
- };
- },
- methods: {
- limitUploadNum(files,fileList){
- this.$message.alert("最多只能上传9张图片!")
- },
- showNoteInfo() {
- // this.dialogTitle1 = true
- // this.dialogVisible1 = true;
- },
- activeItem(index) {
- var widgetList = this.widgetList;
- for (let i = 0; i < widgetList.length; i++) {
- if(widgetList[i].type=="group"){
- if (i == index) {
- this.$set(widgetList[i], "active", !widgetList[i].active);
- } else {
- this.$set(widgetList[i], "active", 0);
- }
- // this.$set(widgetList[i], "active", !widgetList[i].active);
- }
- }
- this.widgetList = widgetList;
- },
- change(evt) {},
- start(evt) {},
- end(evt) {},
- upload() {},
- imgchange(file, fileList) {
- console.log(fileList);
- var img = this.noteImgs;
- img.push(fileList.response.data);
- this.noteImgs = img;
- },
- remove(index) {
- var img = this.noteImgs;
- img.splice(index, 1);
- this.noteImgs = img;
- },
- addNote(item) {
- this.noteDesc = item.noteDesc;
- this.noteImgs = item.noteImgs ? item.noteImgs : [];
- this.curItem = item;
- this.dialogTitle = "为" + '"' + item.label + '"添加注释信息';
- this.dialogVisible = true;
- },
- saveNote(item) {
- item.noteDesc = this.noteDesc;
- item.noteImgs = this.noteImgs;
- this.dialogVisible = false;
- },
- handlePreview() {},
- handleRemove() {},
- unique(arr) {
- var x = new Set(arr);
- return [...x];
- },
- save() {
- let id = this.$route.query.id;
- let copyid = this.$route.query.copyid;
- let widgets = Array.from(this.widgetList);
- let flag = 0;
- let labels = [];
- widgets.forEach((item, index) => {
- labels.push(item.label);
- });
- if (labels.length != this.unique(labels).length) {
- flag = 1;
- this.$alert("题干不能相同请仔细检查数据!", "数据错误", {
- confirmButtonText: "确定",
- type: "error",
- });
- return false;
- }
- widgets.forEach((item, index) => {
- if (item.label == "") {
- flag = 2;
- }
- if (item.type == "radio" || item.type == "checkbox") {
- let item_labels = [];
- item.items.forEach((obj, index) => {
- item_labels.push(obj.label);
- });
- if (item_labels.length != this.unique(item_labels).length) {
- flag = 3;
- }
- }
- });
- if (flag == 2) {
- this.$alert("题干不能为空请仔细检查数据!", "数据错误", {
- confirmButtonText: "确定",
- type: "error",
- });
- return false;
- }
- if (flag == 3) {
- this.$alert("选择题选项不能相同请仔细检查数据!", "数据错误", {
- confirmButtonText: "确定",
- type: "error",
- });
- return false;
- }
- let params = {
- name: this.title,
- widget: JSON.stringify(widgets),
- };
- if (id && !copyid) {
- params.id = id;
- this.$api.editTemplate(params).then((res) => {
- if (res.data.code == 0) {
- this.$message({
- type: "success",
- message: "成功!",
- });
- } else {
- this.$message.error("失败!");
- }
- this.$router.push("/message/template");
- });
- } else {
- this.$api.addTemplate(params).then((res) => {
- if (res.data.code == 0) {
- this.$message({
- type: "success",
- message: "成功!",
- });
- } else {
- this.$message.error("失败!");
- }
- this.$router.push("/message/template");
- });
- }
- },
- addWidget(i) {
- let item = JSON.parse(JSON.stringify(this.stdWidgetList[i]));
- if (item.type == "group") {
- item.active = 1;
- this.widgetList.forEach((item, index) => {
- item.active = 0;
- });
- }
- // 筛选域组件
- let gwidget = this.widgetList.filter(function (val) {
- return val.type == "group" && val.active == 1;
- });
- if (gwidget.length) {
- gwidget[0].children.push(item);
- } else {
- this.widgetList.push(item);
- }
- },
- minusOption(options, index) {
- if (options.length <= 1) {
- this.$message.error("选项不能少于1个!");
- } else {
- options.splice(index, 1);
- }
- },
- plusOption(options, index) {
- if (options.length >= 100) {
- this.$message.error("选项不能超过100个!");
- } else {
- options.splice(index + 1, 0, {
- label: "选项" + (index + 1),
- value: "选项值",
- });
- }
- },
- gopage(size) {
- if (size) {
- this.form.page_size = size;
- }
- this.form.page = this.$refs.pageButton.page;
- this.getData();
- },
- handleSelectionChange(val) {
- this.multipleSelection = val;
- },
- gopage1(size) {
- if (size) {
- this.form1.page_size = size;
- }
- this.form1.page = this.$refs.pageButton1.page;
- this.getJl();
- },
- open(data) {
- this.dialogFormVisible = true;
- this.message = { ...data };
- },
- download() {
- let array = this.multipleSelection,
- ids = [];
- for (let i = 0; i < array.length; i++) {
- ids.push(array[i].id);
- }
- ids = ids.join(",");
- this.$api.downloadMon({ ids: ids }).then((res) => {
- var elink = document.createElement("a");
- let blob = new Blob([res.data], { type: "application/vnd.ms-excel" });
- let objUrl = URL.createObjectURL(blob);
- console.log(res.headers["content-disposition"]);
- let file_name = res.headers["content-disposition"].split("=")[1];
- elink.download = file_name;
- elink.style.display = "none";
- elink.href = objUrl;
- document.body.appendChild(elink);
- elink.click();
- document.body.removeChild(elink);
- });
- },
- prview(id) {
- this.form1.enterprise_id = id;
- this.getJl();
- this.dialogFormVisible1 = true;
- },
- getJl() {
- var parm = this.form1;
- this.$api.getMonitjobList(parm).then((res) => {
- this.data = res.data.data.list;
- this.total1 = res.data.data.total;
- });
- },
- detail(id) {
- this.$router.push({
- path: "/company/detail",
- query: { id: id, page: this.form.page, page_size: this.form.page_size },
- });
- },
- getData() {
- let id = this.$route.query.id;
- if (id) {
- this.$api.getTemplate({ id: id }).then((res) => {
- if (res.data.code == 0) {
- this.widgetList = res.data.data.widget;
- }
- });
- }
- },
- del(id) {
- this.$confirm("确定删除吗?", "提示", {
- type: "warning",
- }).then(() => {
- this.$api.deleteEnterprise({ id: id }).then((res) => {
- this.$message({
- message: "删除成功",
- type: "success",
- });
- this.getData();
- });
- });
- },
- permission(name) {
- let permissions = this.info.permissions || [];
- let list = [];
- for (let i = 0; i < permissions.length; i++) {
- list.push(permissions[i].name);
- }
- if (list.indexOf(name) < 0) {
- return false;
- } else {
- return true;
- }
- },
- },
- created() {
- this.getData();
- },
- };
- </script>
|