vue 自定义指令(同时绑定多个自定义指令)以及拖拉拽的实现
自定义指令,可以在一个组件内绑定多个自定义指令:
代码:
<div v-show="showPlay" style="position:fixed;top:10px;z-index:99999999999;" :style="{width:boxWidth+'px',height:boxHeight+'px',top:'100px',left:'200px'}" v-resize = "fnresize" v-drag="{setXY:setXY,getFlag:getFlag,setFlag:setFlag,setActive:setActive,setRedBorder:setRedBorder}" id="mydragId" ref="mydragref" class="drag" :class="{active:isActive,redBorder:redBorder}"> <el-button style="background:#fff;cursor:pointer;" size="small" @click="closeDragDialog">关闭</el-button> <iframe ref="bdiframe" id="bdiframe" :src="iframeUrl" frameborder="0" style="width:100%;height:74vh;" ></iframe> </div>
其中
v-resize = "fnresize"
v-drag="{setXY:setXY,getFlag:getFlag,setFlag:setFlag,setActive:setActive,setRedBorder:setRedBorder}"
都是自定义指令,参数可以是对象也可以是个函数
methods: { fnresize(){ console.log('change----','width:',this.$refs.mydragref.clientWidth,this.$refs.mydragref.clientHeight) const mydrag = document.getElementById('mydragId'); // mydrag.style.height = (Number(this.$refs.mydragref.clientHeight-300)) + 'px'; // mydrag.style.width = (Number(this.$refs.mydragref.clientWidth-300)) + 'px'; // console.log('改变后的:iframe宽高:',mydrag.style.width,mydrag.style.height) }, }
每次执行v-resize的时候都会自动检测并执行函数内的内容 这里是每次拖动弹框大小都会检测到并执行函数
指令要在vue内配置:
directives:{ resize: { // 指令的名称 bind(el, binding) { // el为绑定的元素,binding为绑定给指令的对象 let width = '', height = ''; function isReize() { const style = document.defaultView.getComputedStyle(el); if (width !== style.width || height !== style.height) { binding.value(); // 关键 } width = style.width; height = style.height; } el.__vueSetInterval__ = setInterval(isReize, 300); }, unbind(el) { clearInterval(el.__vueSetInterval__); } }, drag: { bind: (el, binding) => { console.log(el); console.log(binding.value); //绑定默认样式 el.style.zIndex = 9; el.style.backgroundColor = "rgba(189,220,251,0.88)"; el.style.radius = "4px" //如果为编辑状态 if (binding.value || binding.value === undefined) { //定义该元素的 top left width height let x, y, w, h; //鼠标的起始和结束坐标 let cx_start, cy_start, cx_end, cy_end; //判断鼠标样式 el.onmousemove = e => { //获取鼠标当前位置 let cx_now = e.clientX; let cy_now = e.clientY; //获取div右下角相对浏览器的位置 let { top: el_top, left: el_left, width: el_width, height: el_height } = el.getBoundingClientRect(); let el_bottom_height = el_top + el_height; let el_right_width = el_left + el_width; //判断鼠标是否在div下边界 let mouse_in_bottom = cy_now <= el_bottom_height + 5 && cy_now >= el_bottom_height - 5; //判断鼠标是否在div右边界 let mouse_in_right = cx_now <= el_right_width + 5 && cx_now >= el_right_width - 5; if (mouse_in_bottom && mouse_in_right) { el.style.cursor = "se-resize"; } else if (mouse_in_right) { el.style.cursor = "e-resize"; } else if (mouse_in_bottom) { el.style.cursor = "s-resize"; } else { el.style.cursor = "move"; } }; el.onmousedown = e => { let mouse = el.style.cursor; //更改默认样式 el.style.backgroundColor = "rgba(189,220,251,0.88)"; el.style.zIndex = 99; //对象解构赋值 let { left: el_x, top: el_y, width: el_w, height: el_h } = window.getComputedStyle(el); x = el_x; y = el_y; w = el_w; h = el_h; console.log(x,y,w,h) cx_start = e.clientX; cy_start = e.clientY; //绑定移动事件 document.onmousemove = e => { cx_end = e.clientX; cy_end = e.clientY; //默认左下方向配置 let x_move = cx_end - cx_start; let y_move = cy_end - cy_start; let direct = ["width", "height"]; let pos = [w, h]; let move = [x_move, y_move]; let limit = 50; //判断鼠标的类型进行对应的操作 switch (mouse) { case "e-resize": direct = ["width"]; pos = [w]; move = [x_move]; break; case "s-resize": direct = ["height"]; pos = [h]; move = [y_move]; break; case "move": direct = ["left", "top"]; pos = [x, y]; limit = 0; break; } handle_div(direct, pos, move, limit); }; //取消移动事件 document.onmouseup = e => { //还原默认样式 el.style.zIndex = 9; el.style.backgroundColor = "rgba(189,220,251,0.88)"; document.onmousemove = null; }; /** * 操作DOM位置和大小方法 * @param direct 方向 * @param pos 尺寸/坐标 * @param move 拖动距离 * @param limit 限定范围 */ function handle_div(direct, pos, move, limit) { for (let i = 0; i < direct.length; i++) { let val = parseInt(pos[i]) + move[i]; val = val <= limit ? limit : val; el.style[direct[i]] = val + "px"; } } }; } else { el.style.cursor = "default"; //移除点击事件 el.onmousedown = null; el.onmousemove = null; } } } },
方法:
<el-button size="small" @click="openFrame">打开iframe弹框</el-button>
openFrame(){ console.log(this.iframeUrl) // if(!this.iframeUrl){ this.iframeUrl = 'your url' // } this.showPlay = true; },
样式千万不要忘了否则拖拉拽不生效:
.drag{ width: 400px; /* height: 30px; */ position: absolute; top: 0; left: 0; padding:10px; border-radius:2px; padding:4px; } .active{ border: 1px solid rgb(155, 220, 224); } .redBorder{ border: 1px solid rgb(238, 205, 205); }
完整代码参考:
<template> <div id="box"> <div v-show="showPlay" style="position:fixed;top:10px;z-index:99999999999;" :style="{width:boxWidth+'px',height:boxHeight+'px',top:'100px',left:'200px'}" v-resize = "fnresize" v-drag="{setXY:setXY,getFlag:getFlag,setFlag:setFlag,setActive:setActive,setRedBorder:setRedBorder}" id="mydragId" ref="mydragref" class="drag" :class="{active:isActive,redBorder:redBorder}"> <el-button style="background:#fff;cursor:pointer;" size="small" @click="closeDragDialog">关闭</el-button> <iframe ref="bdiframe" id="bdiframe" :src="iframeUrl" frameborder="0" style="width:100%;height:74vh;" ></iframe> </div> <!-- <template v-if="!customid"> --> <!-- 请先绑定客户 --> <!-- <noConphone/> --> <!-- </template> --> <!-- <template v-else> --> <template> <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"> <el-row :gutter="20"> <el-col :span="12"> <el-form-item label="客户姓名" prop="clientName"> <el-input size="small" v-model="ruleForm.clientName "></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="身份证号" prop="certNo"> <el-input size="small" v-model="ruleForm.certNo " :maxLength="18"></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="手机号码" prop="callerNumber"> <el-input size="small" v-model="ruleForm.callerNumber" :maxLength="11"></el-input> </el-form-item> </el-col> <!-- <el-col :span="8"> <el-form-item label="答复号码" > <el-input size="small" v-model="ruleForm.replyNumber" :maxLength="11"></el-input> </el-form-item> </el-col> --> </el-row> <el-divider></el-divider> <el-form-item label="服务类型" required> <el-row> <el-col :span="8"> <el-form-item prop="serviceLargeType"> <el-select size="small" v-model="ruleForm.serviceLargeType" @change="getServiceType($event, 1)" placeholder="-- 大类 --"> <el-option v-for="item in serviceLargeList" :key="item.code" :label="item.name" :value="item.code"> </el-option> </el-select> </el-form-item> </el-col> <el-col :span="8"> <el-form-item prop="serviceMediumType"> <el-select size="small" v-model="ruleForm.serviceMediumType" ref="serviceMedium" @change="getServiceType($event, 2)" placeholder="-- 中类 --"> <el-option v-for="item in serviceMediumList" :key="item.code" :label="item.name" :value="item.code"> </el-option> </el-select> </el-form-item> </el-col> <el-col :span="8"> <el-form-item prop="serviceSmallType"> <el-select size="small" v-model="ruleForm.serviceSmallType" placeholder="-- 小类 --"> <el-option v-for="item in serviceSmallList" :key="item.code" :label="item.name" :value="item.code"> </el-option> </el-select> </el-form-item> </el-col> </el-row> </el-form-item> <!-- <el-button size="mini" @click="fnClickDialog">修改服务类型</el-button> --> <!-- <el-button size="mini" @click="fnGoChangeServiceType">修改服务类型</el-button> --> <!-- <el-button size="mini" @click="fnGoChangeQuestionType">修改问题类型</el-button> --> <!-- <el-divider></el-divider> --> <el-row :gutter="20"> <el-col :span="12"> <el-form-item label="业务类型" prop="businessType"> <el-select size="small" v-model="ruleForm.businessType" placeholder="-- 请选择 --"> <el-option v-for="item in busTypeList" :key="item.key" :label="item.value" :value="item.key"> </el-option> </el-select> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="涉及地区" prop="involveArea"> <el-select size="small" v-model="ruleForm.involveArea " placeholder="-- 请选择 --"> <el-option key="" label="请选择城市" value="" ></el-option> <el-option v-for="item in involveList" :key="item.key" :label="item.value" :value="item.key"> </el-option> </el-select> </el-form-item> </el-col> </el-row> <el-form-item label="电话内容" prop="phoneContent"> <el-input size="small" type="textarea" v-model="ruleForm.phoneContent" rows="3" :maxlength=2000></el-input> </el-form-item> <el-row :gutter="20"> <!-- <el-col :span="12"> <el-form-item label="解决情况" prop="serviceStatus"> <el-select size="small" v-model="ruleForm.serviceStatus" placeholder="-- 请选择 --"> <el-option v-for="item in summarySOlveList" :key="item.key" :label="item.value" :value="item.key"> </el-option> </el-select> </el-form-item> </el-col> --> <el-col :span="12"> <el-form-item label="日志来源" prop="logSource"> <el-select size="small" v-model="ruleForm.logSource" disabled placeholder="-- 请选择 --"> <el-option v-for="item in logSourceList" :key="item.key" :label="item.value" :value="item.key"> </el-option> </el-select> </el-form-item> </el-col> </el-row> <el-form-item> <el-button size="small" :disabled="isTurn === 'overform'" type="primary" @click="submitSave('ruleForm')">提交</el-button> <el-button size="small" :disabled="isTurn === 'overform'" type="success" @click="submitForm('ruleForm')">提交并发起工单</el-button> <el-button size="small" @click="openFrame">访问外网</el-button> <!-- turn from : {{isTurn}} --> </el-form-item> </el-form> </template> <!-- 修改服务类型 --> <el-drawer :visible.sync="centerDialogVisible" :modal="true" size="60%" > <div style="height:90vh;overflow:scroll;"> <change-service></change-service> </div> <span slot="footer" class="dialog-footer"> <el-button @click="centerDialogVisible = false">取 消</el-button> <el-button type="primary" @click="centerDialogVisible = false">确 定</el-button> </span> </el-drawer> </div> </template> <script> import noConphone from '@/components/newcomp/noConphoneLogInp.vue' import changeService from '@/components/newcomp/changeService.vue' import cache from '@/utils/cache.js' //加Rules是严格验证,不加是一般验证 import {phone,card,phoneRules,cardRules} from "@/utils/util.js"; var configss = { headers: { 'Content-Type': 'application/json; charset=UTF-8' } } export default { props: { isTurn:{ type:String, }, dialogId: { type: String, }, customid: { type: String, }, message: { type: Object } }, directives:{ resize: { // 指令的名称 bind(el, binding) { // el为绑定的元素,binding为绑定给指令的对象 let width = '', height = ''; function isReize() { const style = document.defaultView.getComputedStyle(el); if (width !== style.width || height !== style.height) { binding.value(); // 关键 } width = style.width; height = style.height; } el.__vueSetInterval__ = setInterval(isReize, 300); }, unbind(el) { clearInterval(el.__vueSetInterval__); } }, drag: { bind: (el, binding) => { console.log(el); console.log(binding.value); //绑定默认样式 el.style.zIndex = 9; el.style.backgroundColor = "rgba(189,220,251,0.88)"; el.style.radius = "4px" //如果为编辑状态 if (binding.value || binding.value === undefined) { //定义该元素的 top left width height let x, y, w, h; //鼠标的起始和结束坐标 let cx_start, cy_start, cx_end, cy_end; //判断鼠标样式 el.onmousemove = e => { //获取鼠标当前位置 let cx_now = e.clientX; let cy_now = e.clientY; //获取div右下角相对浏览器的位置 let { top: el_top, left: el_left, width: el_width, height: el_height } = el.getBoundingClientRect(); let el_bottom_height = el_top + el_height; let el_right_width = el_left + el_width; //判断鼠标是否在div下边界 let mouse_in_bottom = cy_now <= el_bottom_height + 5 && cy_now >= el_bottom_height - 5; //判断鼠标是否在div右边界 let mouse_in_right = cx_now <= el_right_width + 5 && cx_now >= el_right_width - 5; if (mouse_in_bottom && mouse_in_right) { el.style.cursor = "se-resize"; } else if (mouse_in_right) { el.style.cursor = "e-resize"; } else if (mouse_in_bottom) { el.style.cursor = "s-resize"; } else { el.style.cursor = "move"; } }; el.onmousedown = e => { let mouse = el.style.cursor; //更改默认样式 el.style.backgroundColor = "rgba(189,220,251,0.88)"; el.style.zIndex = 99; //对象解构赋值 let { left: el_x, top: el_y, width: el_w, height: el_h } = window.getComputedStyle(el); x = el_x; y = el_y; w = el_w; h = el_h; console.log(x,y,w,h) cx_start = e.clientX; cy_start = e.clientY; //绑定移动事件 document.onmousemove = e => { cx_end = e.clientX; cy_end = e.clientY; //默认左下方向配置 let x_move = cx_end - cx_start; let y_move = cy_end - cy_start; let direct = ["width", "height"]; let pos = [w, h]; let move = [x_move, y_move]; let limit = 50; //判断鼠标的类型进行对应的操作 switch (mouse) { case "e-resize": direct = ["width"]; pos = [w]; move = [x_move]; break; case "s-resize": direct = ["height"]; pos = [h]; move = [y_move]; break; case "move": direct = ["left", "top"]; pos = [x, y]; limit = 0; break; } handle_div(direct, pos, move, limit); }; //取消移动事件 document.onmouseup = e => { //还原默认样式 el.style.zIndex = 9; el.style.backgroundColor = "rgba(189,220,251,0.88)"; document.onmousemove = null; }; /** * 操作DOM位置和大小方法 * @param direct 方向 * @param pos 尺寸/坐标 * @param move 拖动距离 * @param limit 限定范围 */ function handle_div(direct, pos, move, limit) { for (let i = 0; i < direct.length; i++) { let val = parseInt(pos[i]) + move[i]; val = val <= limit ? limit : val; el.style[direct[i]] = val + "px"; } } }; } else { el.style.cursor = "default"; //移除点击事件 el.onmousedown = null; el.onmousemove = null; } } } }, data() { return { boxWidth:"", boxHeight:"", showPlay:false, show:true, isActive:null, redBorder:null, iframeUrl:"", centerDialogVisible: false, phoneWorkNumberId:window.localStorage.getItem('phoneWorkNumberId')?window.localStorage.getItem('phoneWorkNumberId'):null,// isturnDate:false,//来自哪里跳转 remainId:null,//提交后端数据记录发来的id-防止后端重复提交不断建表 contactId:null,//新增传入后端的contacctid ruleForm: { trafficId:'', clientName: '', certNo: '', callerNumber: '', replyNumber: '', serviceLargeType: '', serviceMediumType: '', serviceSmallType: '', businessType: '', involveArea: '', serviceStatus: '', logSource: '', phoneContent: '' }, busTypeList: [], // 业务类型 involveList: [], // 涉及地区 summarySOlveList: [], // 解决情况 logSourceList: [], // 日志来源 serviceLargeList: [], // 服务类型第1级 serviceMediumList: [], // 服务类型第2级 serviceSmallList: [], // 服务类型第3级 rules: { clientName: [{ required: true, message: '请输入客户姓名', trigger: 'blur' }], certNo: [{ required: true, // message: '请输入身份证号', // validator:card,//带字母的身份证不能输入会被限制 trigger: 'blur' }], callerNumber: [{ required: true, message: '请输入来电号码', // validator:phone, trigger: 'blur' }], // replyNumber: [{ // required: true, // // message: '请输入联系号码', // validator:phone, // trigger: 'blur' // }], serviceLargeType: [{ required: true, message: '请选择服务类型', trigger: 'change' }], serviceMediumType: [{ required: true, message: '请选择服务类型', trigger: 'change' }], serviceSmallType: [{ required: true, message: '请选择服务类型', trigger: 'change' }], businessType: [{ required: true, message: '请选择业务类型', trigger: 'change' }], involveArea: [{ required: true, message: '请选择涉及地区', trigger: 'change' }], phoneContent: [{ required: true, message: '请输入电话内容', trigger: 'blur' }], serviceStatus: [{ required: true, message: '请选择解决情况', trigger: 'change' }], logSource: [{ required: true, message: '请选择日志来源', trigger: 'change' }], } }; }, components:{ noConphone, changeService }, created() { window.localStorage.removeItem('phoneWorkNumberId') // this.$store.state.msgReminder.msgThreeReminder // this.$store.state.imchat.imchatList.length // this.isturnDate = this.$state. // "/phone/99dfd2c2cc4646f79d822de8a9d57a61 ///phone/99dfd2c2cc4646f79d822de8a9d57a61 // fullPath: "/phone/350cea668ad942d3a4bbfdf4f7e33db3" // "/phone/4643f6d71592478cab616b4564b09a5c" //meta: {title: "phone受理页" // console.log(this.$route,this.$router) // 默认带入客户姓名,身份证号,来电号码,联系号码 this.contactId = this.message.contactId//新增contactId const { callType, customName, callNo, phone, idNo } = this.message this.ruleForm.clientName = customName this.ruleForm.certNo = idNo this.ruleForm.callerNumber = phone this.ruleForm.replyNumber = callNo if (callType === "outcall") { // 外呼/去电 this.ruleForm.logSource = '1' } else if (callType === "incall") { // 入呼/来电 this.ruleForm.logSource = '0' } // 获取服务类型数据 this.getServiceType('0', 0) // 获取字典项 const getAllDatas = cache.getDicsStorageByName('getAllDatas') this.busTypeList = getAllDatas['BUSSINESS_TYPE'] this.involveList = getAllDatas['INVOLVE_AREA'] this.summarySOlveList = getAllDatas['SUMMARY_SOLVE'] this.logSourceList = getAllDatas['LOG_SOURCE'] //工单类型默认求助 console.log(this.busTypeList) if(this.busTypeList){ this.$set(this.ruleForm,"businessType",this.busTypeList[6].key) } }, mounted(){ this.getIframeWH() }, destroyed () { console.log('destroyed') }, methods: { fnresize(){ console.log('change----','width:',this.$refs.mydragref.clientWidth,this.$refs.mydragref.clientHeight) const mydrag = document.getElementById('mydragId'); // mydrag.style.height = (Number(this.$refs.mydragref.clientHeight-300)) + 'px'; // mydrag.style.width = (Number(this.$refs.mydragref.clientWidth-300)) + 'px'; // console.log('改变后的:iframe宽高:',mydrag.style.width,mydrag.style.height) }, //全屏iframe getIframeWH(){ // 设置弹屏 this.boxWidth = document.documentElement.clientWidth-400; this.boxHeight = document.documentElement.clientHeight-200; const mydrag = document.getElementById('mydragId'); // mydrag.style.width = (Number(this.boxWidth)-200-200) + 'px'; // mydrag.style.top = '100px' // mydrag.style.left = '200px' // mydrag.style.height = (Number(this.boxHeight)-200) + 'px'; // 设置iframe }, // 关闭iframe closeDragDialog(){ console.log('close') this.showPlay = false this.show = false this.iframeUrl = "" }, setXY:function (x,y) { this.x=x; this.y=y; }, getFlag:function () { return this.flag; }, setFlag:function (num) { this.flag=num; }, setActive:function (b) { this.isActive=b; }, setRedBorder:function (b) { this.redBorder=b; }, openFrame(){ console.log(this.iframeUrl) // if(!this.iframeUrl){ this.iframeUrl = 'http://192.168.24.192:7888/uap-sso?id=1001' // } this.showPlay = true; }, fnClickDialog(){ this.centerDialogVisible = true }, // 添加问题类型 fnGoChangeQuestionType(){ this.$emit("changeQuestionType", 'test') }, // 添加服务类型 fnGoChangeServiceType(){ console.log('添加服务类型tab') this.$emit("changeSerType", 'test') }, getServeTree(){ this.$axios .post(this.$apis.workOrder.getServiceTypeTree) .then(data => { console.log(data) }) }, /** * 获取服务类型 */ getServiceType(code, type) { this.$axios .post(this.$apis.workOrder.getServiceType, { parentCode: code }) .then(data => { if (data && data.status === '200') { if (type === 0) { this.serviceLargeList = data.obj this.ruleForm.serviceLargeType = '' this.ruleForm.serviceMediumType = '' this.ruleForm.serviceSmallType = '' this.serviceMediumList = [] this.serviceSmallList = [] } else if (type === 1) { this.serviceMediumList = data.obj this.ruleForm.serviceMediumType = '' this.ruleForm.serviceSmallType = '' this.serviceSmallList = [] } else { this.serviceSmallList = data.obj this.ruleForm.serviceSmallType = '' } } }) }, submitForm(formName) { this.$refs[formName].validate((valid) => { if (valid) { this.confirmSubmit() // this.saveSummaryForSumit() } else { return false; } }); }, submitSave(formName) { this.$refs[formName].validate((valid) => { if (valid) { this.saveSummary() } else { return false; } }); }, // 提交 -暂存-不发起工单-获取接口后返回 custmerId saveSummary() { if(this.customid){ this.ruleForm.customId = this.customid } this.ruleForm.dialogId = this.dialogId this.ruleForm.contactId = this.contactId console.log(this.ruleForm.businessType) let objectM = { businessType: this.ruleForm.businessType == '咨询' ? "1" :this.ruleForm.businessType, callerNumber : this.ruleForm.callerNumber , certNo : this.ruleForm.certNo , clientName :this.ruleForm.clientName, contactId : this.ruleForm.contactId, dialogId :this.ruleForm.dialogId, involveArea :this.ruleForm.involveArea, logSource :this.ruleForm.logSource, phoneContent :this.ruleForm.phoneContent, replyNumber :this.ruleForm.replyNumber, serviceLargeType :this.ruleForm.serviceLargeType, serviceMediumType :this.ruleForm.serviceMediumType, serviceSmallType :this.ruleForm.serviceSmallType, serviceStatus :this.ruleForm.serviceStatus, serviceTypeName :this.ruleForm.clientName, id:this.remainId ? this.remainId:null, customId :this.ruleForm.customId == null?null:this.ruleForm.customId, workOrderId:this.phoneWorkNumberId?this.phoneWorkNumberId:null } // console.log(objectM) this.$axios .post(this.$apis.workOrder.saveSummary, objectM, configss) .then(data => { if (data && data.status === '200') { this.remainId = data.obj.id this.ruleForm.customId = data.obj.customId this.ruleForm.trafficId = data.obj.id this.$message({ message: '提交成功', type: 'success' }); this.$emit("closeTag", 'overform') } else { this.$message.error(data.msg) } }) }, //提交并发起工单确认框 confirmSubmit(){ this.$confirm('是否要发起工单?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { // this.$message({ // type: 'success', // message: '发起工单成功!' // }); this.saveSummaryForSumit() }).catch(() => { this.$message({ type: 'info', message: '已取消' }); }); }, // 提交并发起工单 saveSummaryForSumit() { if(this.customid){ this.ruleForm.customId = this.customid } this.ruleForm.dialogId = this.dialogId this.ruleForm.contactId = this.contactId let objectM = { businessType: this.ruleForm.businessType, callerNumber : this.ruleForm.callerNumber , certNo : this.ruleForm.certNo , clientName :this.ruleForm.clientName, contactId : this.ruleForm.contactId, dialogId :this.ruleForm.dialogId, involveArea :this.ruleForm.involveArea, logSource :this.ruleForm.logSource, phoneContent :this.ruleForm.phoneContent, replyNumber :this.ruleForm.replyNumber, serviceLargeType :this.ruleForm.serviceLargeType, serviceMediumType :this.ruleForm.serviceMediumType, serviceSmallType :this.ruleForm.serviceSmallType, serviceStatus :this.ruleForm.serviceStatus, serviceTypeName :this.ruleForm.clientName, id:this.remainId?this.remainId:null, customId :this.ruleForm.customId == null?null:this.ruleForm.customId, } this.$axios .post(this.$apis.workOrder.saveSummary, objectM, configss) .then(data => { if (data && data.status === '200') { this.remainId = data.obj.id this.ruleForm.customId = data.obj.customId this.ruleForm.summaryId = data.obj.summaryId this.ruleForm.trafficId = data.obj.id this.$message({ message: '提交成功', type: 'success' }); const turnObj = { ruleForm:this.ruleForm, dataObj:data.obj } this.$emit("closeTag", 'overform') this.$emit("addPhoneOrderInfo", turnObj) } else { this.$message.error(data.msg) } }) } } } </script> <style lang="stylus" scoped> >>>.el-form-item { margin-bottom: 15px; } >>>.el-divider--horizontal { margin: 10px 0; } .drag{ width: 400px; /* height: 30px; */ position: absolute; top: 0; left: 0; padding:10px; border-radius:2px; padding:4px; } .active{ border: 1px solid rgb(155, 220, 224); } .redBorder{ border: 1px solid rgb(238, 205, 205); } </style>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了