| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540 |
- <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;
- }
- /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;
- }
- }
- .drag{
- right:-160px;
- bottom:-3px;
- }
- div{
- font-size:16px;
- color:#333333;
- }
- .el-radio,.el-checkbox{
- margin-right: 32px;
- height: 32px;
- line-height: 32px;
- }
- .el-radio-group,.el-checkbox-group{
- display:flex;
- flex-direction: column;
- }
-
- }
- /deep/.el-form-item__label{
- float: none;
- }
- &.text{
- /deep/.el-form-item__content{
- // margin-left:60px;
- }
- }
- }
- }
- // 右边
- .item-main{
- margin:34px;
- // height:600px;
- // background: #FFFFFF;
- border: 1px solid #DDDDDD;
- box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.13);
- border-radius: 20px;
- .el-form.over_y{
- max-height:calc( 100vh - 340px);
- }
- }
- // 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:20px;
- border:1px solid #ccc;
- border-radius: 20px;
- /deep/.el-form-item{
- background:none;
- }
- /deep/.el-form-item__content{
- width:100%;
- }
- }
- .survey_logo{
- position: relative;
- top:15px;
- left: 20px;
- }
- }
- }
- </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-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">
- <transition-group>
- <el-form-item v-for="(item,index) in widgetList" :key="index">
- <section v-if="item.type=='input'">
- <el-input :readonly="item.edit" v-model="item.label" :class="item.edit?'edit_label':''"></el-input>
- <el-input placeholder='请输入' v-model="item.placeholder"></el-input>
- <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'>拖拽移动顺序</el-button>
- </section>
- <section v-if="item.type=='textarea'">
- <el-input :readonly="item.edit" v-model="item.label" :class="item.edit?'edit_label':''"></el-input>
- <el-input type="textarea" placeholder='请输入' v-model="item.placeholder"></el-input>
- <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'>拖拽移动顺序</el-button>
- </section>
- <section v-if="item.type=='radio'">
- <el-input :readonly="item.edit" v-model="item.label" :class="item.edit?'edit_label':''"></el-input>
- <el-radio-group v-model="radio">
- <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>
- <span @click="item.edit=!item.edit">{{item.edit?'编辑':'保存'}}</span>
- <span @click="widgetList.splice(index,1)">删除</span>
- </font>
- <el-button type='primary' class='dargBtn drag'>拖拽移动顺序</el-button>
- </section>
- <section v-if="item.type=='checkbox'">
- <el-input :readonly="item.edit" v-model="item.label" :class="item.edit?'edit_label':''"></el-input>
- <el-radio-group v-model="radio">
- <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>
- <span @click="item.edit=!item.edit">{{item.edit?'编辑':'保存'}}</span>
- <span @click="widgetList.splice(index,1)">删除</span>
- </font>
- <el-button type='primary' class='dargBtn drag'>拖拽移动顺序</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-upload
- action="https://jsonplaceholder.typicode.com/posts/"
- list-type="picture-card"
- :on-preview="handlePictureCardPreview"
- :on-remove="handleRemove">
- <i class="el-icon-plus"></i>
- </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'>拖拽移动顺序</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="https://jsonplaceholder.typicode.com/posts/"
- :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'>拖拽移动顺序</el-button>
- </section>
- </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>
- </div>
- <div class="content-item right">
- <div class='item-title'>效果预览</div>
- <div class='item-main'>
- <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">
- <el-form-item v-for="(item,index) in widgetList" :key="index" :label="item.label">
- <el-input v-if="item.type=='input'" v-model="form.label" :placeholder="item.placeholder"></el-input>
- <el-input v-if="item.type=='textarea'" type="textarea" v-model="form.label" :placeholder="item.placeholder"></el-input>
- <el-radio-group v-if="item.type=='radio'">
- <el-radio :label="iitem.label" v-for="(iitem,index) in item.items" :key="index">{{iitem.label}}</el-radio>
- </el-radio-group>
- <el-radio-group v-if="item.type=='checkbox'">
- <el-checkbox :label="iitem.label+'22'" v-for="(iitem,index) in item.items" :key="index">{{iitem.label}}</el-checkbox>
- </el-radio-group>
- <el-upload
- v-if="item.type=='image'"
- action="https://jsonplaceholder.typicode.com/posts/"
- list-type="picture-card"
- :on-preview="handlePictureCardPreview"
- :on-remove="handleRemove">
- <i class="el-icon-plus"></i>
- </el-upload>
- <el-upload
- v-if="item.type=='file'"
- class="upload-demo"
- ref="upload"
- action="https://jsonplaceholder.typicode.com/posts/"
- :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>
- <el-form-item v-if="this.widgetList.length">
- <el-button size="medium" type="primary" @click="dialogVisible = false">提交</el-button>
- </el-form-item>
- </el-form>
- </div>
- </div>
- </div>
- </section>
- </template>
- <script>
- import vuedraggable from 'vuedraggable';
- export default {
- components: {vuedraggable},
- data(){
- return{
- 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",label:"请输入标题",placeholder:"请输入",edit:true},
- {type:"textarea",label:"请输入标题",placeholder:"请输入",edit:true},
- {type:"radio",label:"请输入标题",placeholder:"请输入",edit:true,
- items:[{label:"选项",value:"选项值"},{label:"选项1",value:"选项值"}]
- },
- {type:"checkbox",label:"请输入标题",placeholder:"请输入",edit:true,
- items:[{label:"选项",value:"选项值"},{label:"选项1",value:"选项值"}]
- },
- {type:"image",label:"请输入标题",placeholder:"请输入",edit:true},
- {type:"file",label:"请输入标题",placeholder:"请输入",edit:true}
- ],
- widgetList:[],
- }
- },
- methods:{
- save(){
- let id = this.$route.query.id;
- let params = {
- name:this.title,
- widget:JSON.stringify(this.widgetList)
- }
- if(id){
- 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){
- console.log(i)
- this.widgetList.push(JSON.parse(JSON.stringify(this.stdWidgetList[i])))
- console.log(this.widgetList)
- },
- minusOption(options,index){
- if(options.length<=1){
- this.$message.error("选项不能少于1个!")
- }else{
- options.splice(index,1)
- }
- },
- plusOption(options,index){
- if(options.length>=10){
- this.$message.error("选项不能超过10个!")
- }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>
|