@@ -1 +1 @@ | |||
VUE_APP_BASE_API = 'http://192.168.31.160:9999' | |||
VUE_APP_BASE_API = 'http://192.168.31.161:9999' |
@@ -1 +1 @@ | |||
VUE_APP_BASE_API = 'http://192.168.31.85:9999' | |||
VUE_APP_BASE_API = 'http://192.168.31.86:9999' |
@@ -5,6 +5,7 @@ | |||
"scripts": { | |||
"pre": "cnpm install || yarn --registry https://registry.npm.taobao.org || npm install --registry https://registry.npm.taobao.org ", | |||
"dev": "vue-cli-service serve", | |||
"serve": "vue-cli-service serve --mode production", | |||
"cl": "vue-cli-service serve --mode cldevelopment", | |||
"sh": "vue-cli-service serve --mode shdevelopment", | |||
"local": "vue-cli-service serve --mode localdevelopment", | |||
@@ -302,6 +302,7 @@ export function houseListWhenAddUser(query) { | |||
params:query | |||
}) | |||
} | |||
// 获取项目列表 | |||
export function findHouseByUser(query) { | |||
return request({ | |||
url: '/autoSR/zkhouse/findHouseByUser', | |||
@@ -951,3 +951,135 @@ export function findByRepetitionName(params) { | |||
}) | |||
} | |||
// 无效接待审核列表 | |||
export function InvalidReceptionGetList(params) { | |||
return request({ | |||
url: 'autoSR/audit/reception/getPageList', | |||
method: 'get', | |||
params | |||
}) | |||
} | |||
// 无效接待原因列表 | |||
export function InvalidReceptionReasonList(params) { | |||
return request({ | |||
url: 'autoSR/audit/reception/invalidList', | |||
method: 'get', | |||
params | |||
}) | |||
} | |||
// 添加无效接待原因 | |||
export function InvalidReceptionAddInvalid(params) { | |||
return request({ | |||
url: 'autoSR/audit/reception/addInvalid', | |||
method: 'get', | |||
params | |||
}) | |||
} | |||
// 删除无效接待原因 | |||
export function InvalidReceptionDelete(params) { | |||
return request({ | |||
url: 'autoSR/audit/reception/delete', | |||
method: 'get', | |||
params | |||
}) | |||
} | |||
// 删除无效接待原因 | |||
export function InvalidReceptionUpdateSort(params) { | |||
return request({ | |||
url: 'autoSR/audit/reception/updateSort', | |||
method: 'get', | |||
params | |||
}) | |||
} | |||
// 编辑无效接待原因 | |||
export function InvalidReceptionUpdateInvalid(params) { | |||
return request({ | |||
url: 'autoSR/audit/reception/updateInvalid', | |||
method: 'get', | |||
params | |||
}) | |||
} | |||
// 获取当前角色绑定的项目 | |||
export function InvalidFindHouseListByAccount(params) { | |||
return request({ | |||
url: 'autoSR/zkhouse/findHouseListByAccount', | |||
method: 'get', | |||
params | |||
}) | |||
} | |||
// 获取无效审核列表的接待详情 | |||
export function InvalidFindReceptionLog(params) { | |||
return request({ | |||
url: 'autoSR/audit/reception/findReceptionLog', | |||
method: 'get', | |||
params | |||
}) | |||
} | |||
// 获取无效审核列表的录音详情 | |||
export function InvalidFindBycusId(params) { | |||
return request({ | |||
url: 'autoSR/zk/file/findBycusId', | |||
method: 'get', | |||
params | |||
}) | |||
} | |||
// 删除接待记录 | |||
export function deleteCS(params) { | |||
return request({ | |||
url: 'autoSR/customer/deleteCS', | |||
method: 'get', | |||
params | |||
}) | |||
} | |||
// 无效审核状态更改 | |||
export function updateReception(data) { | |||
return request({ | |||
url: 'autoSR/audit/reception/updateReception', | |||
method: 'post', | |||
data | |||
}) | |||
} | |||
// 部门 | |||
export function getAllDeptName(params) { | |||
return request({ | |||
url: 'autoSR/api/zkAgentPool/getAllDeptName', | |||
method: 'get', | |||
params | |||
}) | |||
} | |||
// 顾问 | |||
export function getAllAccountName(params) { | |||
return request({ | |||
url: 'autoSR/api/zkAgentPool/getAllAccountName', | |||
method: 'get', | |||
params | |||
}) | |||
} | |||
// 顾问 | |||
export function invalidReceptionRank(data) { | |||
return request({ | |||
url: 'autoSR/audit/reception/invalidReceptionRank', | |||
method: 'post', | |||
data: data | |||
}) | |||
} |
@@ -63,7 +63,7 @@ axios.interceptors.response.use(res => { | |||
NProgress.done() | |||
const status = Number(res.status) || 200 | |||
const message = res.data.msg || errorCode[status] || errorCode['default'] | |||
if (status === 401 || status === 500) { | |||
if ((status === 401 || status === 500) && process.env.NODE_ENV === 'production') { | |||
idx++ | |||
if(idx==1){ | |||
Message({ | |||
@@ -57,37 +57,37 @@ | |||
<span v-if="data.level == 1" style="display: flex; align-items: center"> | |||
<span class="editorcd" @click="append(node, data)" style="display: flex; align-items: center" > | |||
<span class="editorcd" @click.stop="append(node, data)" style="display: flex; align-items: center" > | |||
<img class="levelimg3" src="/img/add1.png" alt="" /> | |||
<span>添加二级</span> | |||
</span> | |||
<span style="margin-left: 10px" v-if="data.isInterval!=0"> | |||
<el-button class="editor" type="text" size="mini" @click="() => ddeditor(node, data)">编辑</el-button> | |||
<el-button class="editor" type="text" size="mini" @click.stop="() => ddeditor(node, data)">编辑</el-button> | |||
</span> | |||
</span> | |||
<span v-if="data.level == 2" style="display: flex; align-items: center" > | |||
<span v-if="data.isInterval == 1" class="editorcd2" @click="append(node, data)" style="display: flex; align-items: center"> | |||
<span v-if="data.isInterval == 1" class="editorcd2" @click.stop="append(node, data)" style="display: flex; align-items: center"> | |||
<img class="levelimg3" src="/img/add2.png" alt="" /> | |||
<span>添加三级</span> | |||
</span> | |||
<span style="margin-left: 10px"> | |||
<el-button class="editorcd" type="text" size="mini" @click="ddeditor(node, data)">编辑</el-button> | |||
<el-button class="editorcd" type="text" size="mini" @click.stop="ddeditor(node, data)">编辑</el-button> | |||
<el-button class="editor" v-if="labelmodelshow" type="text" size="mini" @click="() => moxingEdit(node, data)">编辑模型</el-button> | |||
</span> | |||
<span style="margin-left: 10px"> | |||
<el-button class="remove" type="text" size="mini" @click="remove(node, data)" >删除</el-button> | |||
<el-button class="remove" type="text" size="mini" @click.stop="remove(node, data)" >删除</el-button> | |||
</span> | |||
</span> | |||
<span v-if="data.level == 3" style="display: flex; align-items: center" > | |||
<span style="margin-left: 10px"> | |||
<el-button class="editorcd" type="text" size="mini" @click="ddeditor(node, data)" >编辑</el-button> | |||
<el-button class="editorcd" type="text" size="mini" @click.stop="ddeditor(node, data)" >编辑</el-button> | |||
</span> | |||
<span style="margin-left: 10px" v-if="labelmodelshow"> | |||
<el-button class="editorcd" type="text" size="mini" @click="moxingEdit(node, data)" >编辑模型</el-button> | |||
<el-button class="editorcd" type="text" size="mini" @click.stop="moxingEdit(node, data)" >编辑模型</el-button> | |||
</span> | |||
<span style="margin-left: 10px"> | |||
<el-button class="remove" type="text" size="mini" @click="remove(node, data)" >删除</el-button> | |||
<el-button class="remove" type="text" size="mini" @click.stop="remove(node, data)" >删除</el-button> | |||
</span> | |||
</span> | |||
</span> | |||
@@ -237,6 +237,15 @@ | |||
例如:意向面积:120平,场景:我想要一个120平的;</div> | |||
</div> | |||
</div> | |||
<div v-if="frosasd.level == 1" style="display: flex;align-items: center;height: 40px;"> | |||
<div style="margin-left: 30px;height: 30px;line-height: 30px;">是否必选:</div> | |||
<div> | |||
<el-radio-group v-model="frosasd.mustSelected"> | |||
<el-radio :label="0">是</el-radio> | |||
<el-radio :label="1">否</el-radio> | |||
</el-radio-group> | |||
</div> | |||
</div> | |||
<div style="display: flex; justify-content: center; margin-top: 40px"> | |||
<button | |||
style=" | |||
@@ -387,42 +396,42 @@ export default { | |||
data() { | |||
return { | |||
dynamiclist: [], | |||
taglist:[ | |||
{ | |||
label: 'or (或)', | |||
value: 'or' | |||
}, | |||
{ | |||
label: 'near (临近)', | |||
value: 'near' | |||
}, | |||
{ | |||
label: 'after (后面)', | |||
value: 'after' | |||
}, | |||
{ | |||
label: 'and not (非)', | |||
value: 'and not' | |||
}, | |||
// { | |||
// label: '~ (至)', | |||
// value: '~' | |||
// }, | |||
taglist: [ | |||
{ | |||
label: "or (或)", | |||
value: "or", | |||
}, | |||
{ | |||
label: "near (临近)", | |||
value: "near", | |||
}, | |||
{ | |||
label: "after (后面)", | |||
value: "after", | |||
}, | |||
{ | |||
label: "and not (非)", | |||
value: "and not", | |||
}, | |||
// { | |||
// label: '~ (至)', | |||
// value: '~' | |||
// }, | |||
], | |||
moxingVisible: false, | |||
innerVisible: false, | |||
form: { | |||
keywordsName: '', | |||
id: '', | |||
keywordsId: '', | |||
distance: 10, | |||
sceneDesc:'', | |||
originalExpression: '' | |||
keywordsName: "", | |||
id: "", | |||
keywordsId: "", | |||
distance: 10, | |||
sceneDesc: "", | |||
originalExpression: "", | |||
}, | |||
formLabelWidth: "120px", | |||
dialogFormVisible: false, | |||
dialogVisible: false, | |||
dialogVisible2:false, | |||
dialogVisible2: false, | |||
orgType: localStorage.getItem("orgType"), | |||
isshowage: false, | |||
treeList: [], //树形数据 | |||
@@ -432,11 +441,11 @@ export default { | |||
addForm: { | |||
name: "", | |||
endName: "", | |||
sceneDesc: '' | |||
sceneDesc: "", | |||
}, | |||
addForm2:{ | |||
name:'', | |||
mustSelected:0 | |||
addForm2: { | |||
name: "", | |||
mustSelected: 0, | |||
}, | |||
level: 0, | |||
pid: "", | |||
@@ -450,14 +459,15 @@ export default { | |||
orgCode: "", | |||
sort: "", | |||
level: "", | |||
desc: '' | |||
desc: "", | |||
mustSelected: 1, // 是否必选 | |||
}, | |||
amountintervalname: "", | |||
isInterval: "", | |||
orgCodes:'' | |||
orgCodes: "", | |||
}; | |||
}, | |||
computed: { | |||
computed: { | |||
...mapGetters(["permissions"]), | |||
}, | |||
created() { | |||
@@ -470,251 +480,292 @@ export default { | |||
}, | |||
methods: { | |||
// 基于保存的光标插入内容 --用于失去焦点后再继续插入内容 | |||
insertContent(str) { | |||
let selection, range = window._range;// 当前光标位置对象 | |||
if (!window.getSelection) { | |||
range.pasteHTML(str); | |||
range.collapse(false); | |||
range.select(); | |||
insertContent(str) { | |||
let selection, | |||
range = window._range; // 当前光标位置对象 | |||
if (!window.getSelection) { | |||
range.pasteHTML(str); | |||
range.collapse(false); | |||
range.select(); | |||
} else { | |||
selection = window.getSelection | |||
? window.getSelection() | |||
: document.selection; | |||
range.collapse(false); | |||
let hasR = range.createContextualFragment(str); | |||
let hasR_lastChild = hasR.lastChild; | |||
while ( | |||
hasR_lastChild && | |||
hasR_lastChild.nodeName.toLowerCase() == "br" && | |||
hasR_lastChild.previousSibling && | |||
hasR_lastChild.previousSibling.nodeName.toLowerCase() == "br" | |||
) { | |||
let e = hasR_lastChild; | |||
hasR_lastChild = hasR_lastChild.previousSibling; | |||
hasR.removeChild(e); | |||
} | |||
range.insertNode(hasR); | |||
if (hasR_lastChild) { | |||
range.setEndAfter(hasR_lastChild); | |||
range.setStartAfter(hasR_lastChild); | |||
} | |||
selection.removeAllRanges(); | |||
selection.addRange(range); | |||
} | |||
}, | |||
// 失去焦点时保存光标位置 | |||
saveRange: () => { | |||
let selection = window.getSelection | |||
? window.getSelection() | |||
: document.selection; | |||
if (!selection.rangeCount) return; | |||
let range = selection.createRange | |||
? selection.createRange() | |||
: selection.getRangeAt(0); | |||
window._range = range; | |||
}, | |||
// 回显模型数据,Dialog 的内容是懒渲染的,即在第一次被打开之前,传入的默认 slot 不会被渲染到 DOM 上,so在 open 事件回调中进行 | |||
openModel() { | |||
// this.$nextTick(()=>{ | |||
// let huashuModel = document.getElementById('huashuModel') | |||
// huashuModel.innerHTML = this.form.originalExpression | |||
// }) | |||
}, | |||
//格式化粘贴文本方法 | |||
onPaste(event) { | |||
var e = event || window.event; | |||
// 阻止默认粘贴 | |||
e.preventDefault(); | |||
// 粘贴事件有一个clipboardData的属性,提供了对剪贴板的访问 | |||
// clipboardData的getData(fomat) 从剪贴板获取指定格式的数据 | |||
var text = | |||
(e.originalEvent || e).clipboardData.getData("text/plain") || | |||
prompt("在这里输入文本"); | |||
//清除回车 | |||
text = text.replace(/\[\d+\]|\n|\r/gi, ""); | |||
// 插入 | |||
document.execCommand("insertText", false, text); | |||
}, | |||
myeditorenter(e) { | |||
e.preventDefault(); | |||
}, | |||
// 插入节点 | |||
insertHtmlAtCaret(html) { | |||
document.getElementById("huashuModel").focus(); | |||
var sel, range; | |||
if (window.getSelection) { | |||
// IE9 and non-IE | |||
sel = window.getSelection(); | |||
if (sel.getRangeAt && sel.rangeCount) { | |||
range = sel.getRangeAt(0); | |||
range.deleteContents(); | |||
// Range.createContextualFragment() would be useful here but is | |||
// non-standard and not supported in all browsers (IE9, for one) | |||
var el = document.createElement("div"); | |||
el.innerHTML = html; | |||
var frag = document.createDocumentFragment(), | |||
node, | |||
lastNode; | |||
while ((node = el.firstChild)) { | |||
lastNode = frag.appendChild(node); | |||
} | |||
range.insertNode(frag); | |||
// Preserve the selection | |||
if (lastNode) { | |||
range = range.cloneRange(); | |||
range.setStartAfter(lastNode); | |||
range.collapse(true); | |||
sel.removeAllRanges(); | |||
sel.addRange(range); | |||
} | |||
} | |||
} else if (document.selection && document.selection.type != "Control") { | |||
// IE < 9 | |||
document.selection.createRange().pasteHTML(html); | |||
} | |||
}, | |||
// 点击插入标签 | |||
insertTag(item, index) { | |||
if (window._range) { | |||
this.insertContent( | |||
"<span contentEditable='false' style='color:red'>" + | |||
item.value + | |||
"</span><text> </text>" | |||
); | |||
} else { | |||
this.insertHtmlAtCaret( | |||
"<span contentEditable='false' style='color:red'>" + | |||
item.value + | |||
"</span><text> </text>" | |||
); | |||
} | |||
}, | |||
// 处理标签,删除不需要的标签格式 | |||
delMark(str) { | |||
const hasStr = (str) => { | |||
let index = str.indexOf("<"); | |||
let index1 = str.indexOf(">"); | |||
if (index > 0 && index1 > 0) { | |||
let replaceStr = str.substring(index, index1 + 1); | |||
str = str.replace(replaceStr, ""); | |||
hasStr(str); | |||
} | |||
}; | |||
hasStr(str); | |||
}, | |||
// 处理模型 关键词加#号 | |||
replaceFun(str) { | |||
let temp = str; | |||
temp = temp.replace(/<text>\ \;<\/text>/g, ""); | |||
temp = temp.replace(/\ \;/g, ""); | |||
temp = temp.replace(/<text>/g, ""); | |||
temp = temp.replace(/<\/text>/g, ""); | |||
temp = temp.replace( | |||
/<span contenteditable="false" style="color:red">/g, | |||
" #" | |||
); // 后台返回是这样的,变了,需要也处理一下 | |||
temp = temp.replace( | |||
/<span style="color:red" contenteditable="false">/g, | |||
" #" | |||
); | |||
temp = temp.replace(/<\/span>/g, "#"); | |||
// console.log(temp); | |||
this.delMark(temp); | |||
return temp; | |||
}, | |||
// 模型保存 | |||
saveFun() { | |||
let text = document.getElementById("huashuModel"); | |||
// console.log(text.innerHTML); | |||
// console.log(text.innerText); | |||
let temp = text.innerHTML; | |||
if (this.form.distance == "") { | |||
this.$message.error("请输入距离"); | |||
return; | |||
} | |||
if (text.innerText == "") { | |||
this.$message.error("请输入标签模型"); | |||
return; | |||
} | |||
axios({ | |||
url: `/autoSR/zk/keymodel/updateKeywordsModel`, | |||
method: "post", | |||
data: { | |||
id: this.form.id, | |||
houseId: this.houseId, | |||
level: this.level, | |||
keywordsId: this.form.keywordsId, | |||
keywordsName: this.form.keywordsName, | |||
answerList: [], | |||
keyType: 2, | |||
formatExpression: this.replaceFun(temp), // 问题表达式 | |||
original: temp, // html数据 | |||
showFormatExpression: text.innerText, | |||
distance: this.form.distance, // * 距离 | |||
}, | |||
}) | |||
.then((data) => { | |||
this.moxingVisible = false; | |||
if (data.code == 0) { | |||
this.$message.success(data.data); | |||
this.getorgCode(); | |||
} else { | |||
selection = window.getSelection ? window.getSelection() : document.selection; | |||
range.collapse(false); | |||
let hasR = range.createContextualFragment(str); | |||
let hasR_lastChild = hasR.lastChild; | |||
while (hasR_lastChild && hasR_lastChild.nodeName.toLowerCase() == "br" && hasR_lastChild.previousSibling && hasR_lastChild.previousSibling.nodeName.toLowerCase() == "br") { | |||
let e = hasR_lastChild; | |||
hasR_lastChild = hasR_lastChild.previousSibling; | |||
hasR.removeChild(e); | |||
} | |||
range.insertNode(hasR); | |||
if (hasR_lastChild) { | |||
range.setEndAfter(hasR_lastChild); | |||
range.setStartAfter(hasR_lastChild); | |||
} | |||
selection.removeAllRanges(); | |||
selection.addRange(range); | |||
this.$message.error(data.msg); | |||
} | |||
}, | |||
// 失去焦点时保存光标位置 | |||
saveRange: () => { | |||
let selection = window.getSelection ? window.getSelection() : document.selection; | |||
if (!selection.rangeCount) return; | |||
let range = selection.createRange ? selection.createRange() : selection.getRangeAt(0); | |||
window._range = range; | |||
}, | |||
// 回显模型数据,Dialog 的内容是懒渲染的,即在第一次被打开之前,传入的默认 slot 不会被渲染到 DOM 上,so在 open 事件回调中进行 | |||
openModel(){ | |||
// this.$nextTick(()=>{ | |||
// let huashuModel = document.getElementById('huashuModel') | |||
// huashuModel.innerHTML = this.form.originalExpression | |||
// }) | |||
}, | |||
//格式化粘贴文本方法 | |||
onPaste(event) { | |||
var e = event || window.event | |||
// 阻止默认粘贴 | |||
e.preventDefault(); | |||
// 粘贴事件有一个clipboardData的属性,提供了对剪贴板的访问 | |||
// clipboardData的getData(fomat) 从剪贴板获取指定格式的数据 | |||
var text = (e.originalEvent || e).clipboardData.getData('text/plain') || prompt('在这里输入文本'); | |||
//清除回车 | |||
text = text.replace(/\[\d+\]|\n|\r/ig,"") | |||
// 插入 | |||
document.execCommand("insertText", false, text); | |||
}, | |||
myeditorenter(e) { | |||
e.preventDefault(); | |||
}, | |||
// 插入节点 | |||
insertHtmlAtCaret(html) { | |||
document.getElementById('huashuModel').focus(); | |||
var sel, range; | |||
if (window.getSelection) { | |||
// IE9 and non-IE | |||
sel = window.getSelection(); | |||
if (sel.getRangeAt && sel.rangeCount) { | |||
range = sel.getRangeAt(0); | |||
range.deleteContents(); | |||
// Range.createContextualFragment() would be useful here but is | |||
// non-standard and not supported in all browsers (IE9, for one) | |||
var el = document.createElement("div"); | |||
el.innerHTML = html; | |||
var frag = document.createDocumentFragment(), | |||
node, lastNode; | |||
while ((node = el.firstChild)) { | |||
lastNode = frag.appendChild(node); | |||
} | |||
range.insertNode(frag); | |||
// Preserve the selection | |||
if (lastNode) { | |||
range = range.cloneRange(); | |||
range.setStartAfter(lastNode); | |||
range.collapse(true); | |||
sel.removeAllRanges(); | |||
sel.addRange(range); | |||
} | |||
}) | |||
.catch((e) => { | |||
this.moxingVisible = false; | |||
}); | |||
}, | |||
moxingEdit(node, data) { | |||
this.level = data.level; | |||
this.form.keywordsName = data.endName | |||
? data.name + "~" + data.endName | |||
: data.name; | |||
this.form.keywordsId = data.keywordsId; | |||
this.form.sceneDesc = data.desc || ""; | |||
// 获取模型数据回显 | |||
axios({ | |||
url: `/autoSR/zk/keymodel/findById`, | |||
method: "get", | |||
params: { | |||
houseId: this.houseId, | |||
level: this.level, | |||
keyType: 2, | |||
keywordsId: data.id, | |||
}, | |||
}) | |||
.then((res) => { | |||
// console.log(res) | |||
this.moxingVisible = true; | |||
if (res.code == 0) { | |||
let obj = res.data; | |||
if (obj != null) { | |||
this.form.distance = obj.distance || 10; | |||
this.form.originalExpression = obj.originalExpression; | |||
this.form.id = obj.id; | |||
// 回显标签模型数据 | |||
if (obj.answerList && obj.answerList.length) { | |||
this.dynamiclist = obj.answerList.map((cont) => { | |||
return { | |||
question: cont.question, | |||
editValue: cont.originalExpression, | |||
}; | |||
}); | |||
// console.log(this.dynamiclist) | |||
} else { | |||
this.dynamiclist = []; | |||
} | |||
} else if (document.selection && document.selection.type != "Control") { | |||
// IE < 9 | |||
document.selection.createRange().pasteHTML(html); | |||
} | |||
}, | |||
// 点击插入标签 | |||
insertTag(item,index){ | |||
if(window._range){ | |||
this.insertContent("<span contentEditable='false' style='color:red'>"+item.value+"</span><text> </text>"); | |||
}else{ | |||
this.insertHtmlAtCaret("<span contentEditable='false' style='color:red'>"+item.value+"</span><text> </text>"); | |||
} else { | |||
this.form.distance = 10; | |||
this.form.originalExpression = this.form.keywordsName; | |||
this.form.id = ""; | |||
} | |||
}, | |||
// 处理标签,删除不需要的标签格式 | |||
delMark(str) { | |||
const hasStr = (str) => { | |||
let index = str.indexOf('<') | |||
let index1 = str.indexOf('>') | |||
if(index>0&&index1>0){ | |||
let replaceStr= str.substring(index, index1+1) | |||
str= str.replace(replaceStr,'') | |||
hasStr(str) | |||
} | |||
} else { | |||
this.form.distance = 10; | |||
this.form.originalExpression = this.form.keywordsName; | |||
} | |||
hasStr(str) | |||
}, | |||
// 处理模型 关键词加#号 | |||
replaceFun(str){ | |||
let temp = str | |||
temp = temp.replace(/<text>\ \;<\/text>/g,''); | |||
temp = temp.replace(/\ \;/g,''); | |||
temp = temp.replace(/<text>/g,''); | |||
temp = temp.replace(/<\/text>/g,''); | |||
temp = temp.replace(/<span contenteditable="false" style="color:red">/g,' #');// 后台返回是这样的,变了,需要也处理一下 | |||
temp = temp.replace(/<span style="color:red" contenteditable="false">/g,' #'); | |||
temp = temp.replace(/<\/span>/g,'#') | |||
// console.log(temp); | |||
this.delMark(temp); | |||
return temp | |||
}, | |||
// 模型保存 | |||
saveFun(){ | |||
let text = document.getElementById('huashuModel'); | |||
// console.log(text.innerHTML); | |||
// console.log(text.innerText); | |||
let temp = text.innerHTML | |||
if(this.form.distance=='') {this.$message.error('请输入距离'); return;} | |||
if(text.innerText=='') {this.$message.error('请输入标签模型'); return;} | |||
axios({ | |||
url: `/autoSR/zk/keymodel/updateKeywordsModel`, | |||
method: 'post', | |||
data: { | |||
id: this.form.id, | |||
houseId: this.houseId, | |||
level: this.level, | |||
keywordsId: this.form.keywordsId, | |||
keywordsName: this.form.keywordsName, | |||
answerList: [], | |||
keyType: 2, | |||
formatExpression: this.replaceFun(temp),// 问题表达式 | |||
original: temp,// html数据 | |||
showFormatExpression: text.innerText, | |||
distance: this.form.distance // * 距离 | |||
} | |||
}).then(data => { | |||
this.moxingVisible = false | |||
if(data.code==0){ | |||
this.$message.success(data.data) | |||
this.getorgCode() | |||
}else{ | |||
this.$message.error(data.msg) | |||
} | |||
}).catch((e)=>{ | |||
this.moxingVisible = false | |||
}) | |||
}, | |||
moxingEdit(node, data){ | |||
this.level = data.level | |||
this.form.keywordsName = data.endName?data.name+'~'+data.endName:data.name | |||
this.form.keywordsId = data.keywordsId | |||
this.form.sceneDesc = data.desc ||'' | |||
// 获取模型数据回显 | |||
axios({ | |||
url: `/autoSR/zk/keymodel/findById`, | |||
method: 'get', | |||
params: { | |||
houseId: this.houseId, | |||
level: this.level, | |||
keyType: 2, | |||
keywordsId: data.id | |||
} | |||
}).then(res => { | |||
// console.log(res) | |||
this.moxingVisible = true | |||
if (res.code == 0) { | |||
let obj = res.data | |||
if(obj!=null){ | |||
this.form.distance=obj.distance||10 | |||
this.form.originalExpression= obj.originalExpression | |||
this.form.id =obj.id | |||
// 回显标签模型数据 | |||
if(obj.answerList&&obj.answerList.length){ | |||
this.dynamiclist = obj.answerList.map(cont=>{ | |||
return { | |||
question: cont.question, | |||
editValue: cont.originalExpression | |||
} | |||
}) | |||
// console.log(this.dynamiclist) | |||
}else{ | |||
this.dynamiclist = [] | |||
} | |||
}else{ | |||
this.form.distance=10 | |||
this.form.originalExpression= this.form.keywordsName | |||
this.form.id ='' | |||
} | |||
}else{ | |||
this.form.distance = 10 | |||
this.form.originalExpression = this.form.keywordsName | |||
} | |||
this.$nextTick(()=>{ | |||
let huashuModel = document.getElementById('huashuModel') | |||
huashuModel.innerHTML = this.form.originalExpression | |||
}) | |||
}).catch((e)=>{ | |||
this.moxingVisible = true | |||
}) | |||
}, | |||
addclick(){ | |||
var orgCode=''; | |||
if(localStorage.getItem("orgType") == 3){ | |||
orgCode=localStorage.getItem("orgCode") | |||
}else{ | |||
orgCode= this.orgCodes | |||
this.$nextTick(() => { | |||
let huashuModel = document.getElementById("huashuModel"); | |||
huashuModel.innerHTML = this.form.originalExpression; | |||
}); | |||
}) | |||
.catch((e) => { | |||
this.moxingVisible = true; | |||
}); | |||
}, | |||
addclick() { | |||
var orgCode = ""; | |||
if (localStorage.getItem("orgType") == 3) { | |||
orgCode = localStorage.getItem("orgCode"); | |||
} else { | |||
orgCode = this.orgCodes; | |||
} | |||
if (this.addForm2.name != "") { | |||
axios({ | |||
if (this.addForm2.name != "") { | |||
axios({ | |||
url: `/autoSR/zk/keywords/add`, | |||
method: "post", | |||
data: { | |||
pid: 0, | |||
name: this.addForm2.name, | |||
mustSelected: this.addForm2.mustSelected, | |||
level:1, | |||
orgCode:orgCode, | |||
houseId:this.houseId | |||
level: 1, | |||
orgCode: orgCode, | |||
houseId: this.houseId, | |||
}, | |||
}).then((res) => { | |||
if(res.code ==0){ | |||
this.dialogVisible2=false; | |||
this.getHouse() | |||
}else{ | |||
if (res.code == 0) { | |||
this.dialogVisible2 = false; | |||
this.getHouse(); | |||
} else { | |||
this.$message({ | |||
message: res.msg||'添加失败', | |||
message: res.msg || "添加失败", | |||
type: "error", | |||
}); | |||
} | |||
}) | |||
}else{ | |||
}); | |||
} else { | |||
this.$message({ | |||
message: "内容不能为空", | |||
type: "warning", | |||
@@ -722,9 +773,9 @@ export default { | |||
return; | |||
} | |||
}, | |||
append1(){ | |||
this.addForm2.name=''; | |||
this.dialogVisible2=true; | |||
append1() { | |||
this.addForm2.name = ""; | |||
this.dialogVisible2 = true; | |||
}, | |||
// 获取模板数据 | |||
getHouse() { | |||
@@ -746,7 +797,7 @@ export default { | |||
this.amountintervalname = data.name; | |||
this.addForm.name = ""; | |||
this.addForm.endName = ""; | |||
this.addForm.sceneDesc = ''; | |||
this.addForm.sceneDesc = ""; | |||
this.pid = data.id; | |||
this.level = data.level + 1; | |||
this.orgCode = data.orgCode; | |||
@@ -761,11 +812,11 @@ export default { | |||
this.dialogFormVisible = true; | |||
}, | |||
houseChange() { | |||
this.houseList.map(item=>{ | |||
if(item.id==this.houseId){ | |||
this.orgCodes=item.orgCode; | |||
this.houseList.map((item) => { | |||
if (item.id == this.houseId) { | |||
this.orgCodes = item.orgCode; | |||
} | |||
}) | |||
}); | |||
console.log(this.orgCodes); | |||
this.getHouse(); | |||
}, | |||
@@ -810,8 +861,8 @@ export default { | |||
level: this.level, | |||
orgCode: this.orgCode, | |||
isInterval: this.isInterval, | |||
houseId:this.houseId, | |||
desc:this.addForm.sceneDesc, | |||
houseId: this.houseId, | |||
desc: this.addForm.sceneDesc, | |||
}, | |||
}).then((res) => { | |||
if (res.code == 0) { | |||
@@ -850,7 +901,7 @@ export default { | |||
}); | |||
}); | |||
} | |||
this.zkhousePage() | |||
this.zkhousePage(); | |||
} | |||
}); | |||
}, | |||
@@ -878,7 +929,7 @@ export default { | |||
method: "get", | |||
params: { | |||
id: this.deleteId, | |||
houseId:this.houseId | |||
houseId: this.houseId, | |||
}, | |||
}).then((res) => { | |||
if (res.code == 0) { | |||
@@ -902,6 +953,7 @@ export default { | |||
}, | |||
//编辑 | |||
ddeditor(node, data) { | |||
console.log(data, "adjklsajdlk"); | |||
this.frosasd = { | |||
name: "", | |||
endName: "", | |||
@@ -911,7 +963,8 @@ export default { | |||
orgCode: "", | |||
sort: "", | |||
level: "", | |||
desc: '' | |||
desc: "", | |||
mustSelected: 1, | |||
}; | |||
if (data.isInterval == 0) { | |||
this.frosasd.isInterval = 0; | |||
@@ -926,6 +979,9 @@ export default { | |||
this.frosasd.endName = ""; | |||
this.frosasd.isInterval = 1; | |||
} | |||
if (data.level == 1) { | |||
this.frosasd.mustSelected = data.mustSelected; | |||
} | |||
this.frosasd.id = data.id; | |||
this.frosasd.name = data.name; | |||
this.frosasd.pid = data.pid; | |||
@@ -967,7 +1023,7 @@ export default { | |||
this.houseId = localStorage.getItem("houseId"); | |||
} else { | |||
this.houseId = res.data[0].id; | |||
this.orgCodes=res.data[0].orgCode; | |||
this.orgCodes = res.data[0].orgCode; | |||
} | |||
// this.houseId = res.data[0].id; | |||
// 列表获取 | |||
@@ -979,11 +1035,11 @@ export default { | |||
axios({ | |||
url: `/autoSR/zk/keywords/update`, | |||
method: "post", | |||
data: {...this.frosasd,houseId: this.houseId}, | |||
data: { ...this.frosasd, houseId: this.houseId }, | |||
}).then((res) => { | |||
if (res.code == 0) { | |||
this.getHouse() | |||
that.isshowage=false; | |||
this.getHouse(); | |||
that.isshowage = false; | |||
that.treeList.forEach((item, index) => { | |||
item.children.forEach((asd, indexesd) => { | |||
if (asd.id == that.frosasd.id) { | |||
@@ -1031,18 +1087,18 @@ export default { | |||
</script> | |||
<style scoped="scoped" lang="scss" > | |||
/deep/.el-tree-node__content{ | |||
overflow: hidden; | |||
/deep/.el-tree-node__content { | |||
overflow: hidden; | |||
} | |||
.editDiv{ | |||
width:100%; | |||
min-height:60px; | |||
max-height:120px; | |||
overflow:auto; | |||
margin-bottom:10px; | |||
.editDiv { | |||
width: 100%; | |||
min-height: 60px; | |||
max-height: 120px; | |||
overflow: auto; | |||
margin-bottom: 10px; | |||
padding: 15px; | |||
outline: none; | |||
border:1px solid #409EFF; | |||
border: 1px solid #409eff; | |||
border-radius: 10px; | |||
} | |||
.box-center { | |||
@@ -1059,13 +1115,13 @@ overflow: hidden; | |||
padding-left: 15px; | |||
padding-bottom: 60px; | |||
} | |||
.addlevl{ | |||
.addlevl { | |||
width: 100px; | |||
border: 1px solid #2671E2; | |||
color: #2671E2; | |||
border: 1px solid #2671e2; | |||
color: #2671e2; | |||
text-align: center; | |||
line-height: 30rpx; | |||
border-radius:4px ; | |||
border-radius: 4px; | |||
margin-top: 10px; | |||
margin-left: 18px; | |||
} | |||
@@ -1139,21 +1195,20 @@ overflow: hidden; | |||
border: 1px solid #e0e0e0; | |||
} | |||
} | |||
/deep/ .el-dialog--center{ | |||
/deep/ .el-dialog--center { | |||
border-radius: 8px; | |||
.el-dialog__title{ | |||
.el-dialog__title { | |||
font-weight: bold; | |||
} | |||
} | |||
/deep/ .el-button--primary{ | |||
background: #2671E2 !important; | |||
border: 1px solid #2671E2 !important; | |||
/deep/ .el-button--primary { | |||
background: #2671e2 !important; | |||
border: 1px solid #2671e2 !important; | |||
} | |||
/deep/ .el-button--text{ | |||
color: #2671E2; | |||
/deep/ .el-button--text { | |||
color: #2671e2; | |||
} | |||
.itemlist { | |||
display: flex; | |||
justify-content: space-between; | |||
@@ -29,7 +29,13 @@ | |||
</el-table-column> | |||
<el-table-column prop="signalDevice" label="设备信号"> | |||
</el-table-column> | |||
<el-table-column prop="fileCount" label="待上传文件数"> | |||
</el-table-column> | |||
<el-table-column prop="stateInterval" label="更新间隔时长"> | |||
<template slot-scope="{ row }"> | |||
<span v-if="row.timeInterval > 60*11*1000" style="color: red;font-weight: bold;">{{ row.stateInterval }}</span> | |||
<span v-else >{{ row.stateInterval }}</span> | |||
</template> | |||
</el-table-column> | |||
</el-table> | |||
</div> | |||
@@ -310,7 +310,6 @@ | |||
filterable | |||
collapse-tags | |||
placeholder="请选择" | |||
> | |||
<el-option | |||
v-for="item in templateList" | |||
@@ -321,31 +320,31 @@ | |||
</el-option> | |||
</el-select> | |||
</div> | |||
</div> | |||
<div class="app-titel" style="margin-top: 15px"> | |||
<div style="margin-left: 110px"> | |||
<el-button type="primary" @click="screen">筛选</el-button> | |||
</div> | |||
<div style="margin-left: 20px"> | |||
<el-button @click="clearScreen" type="text">清空筛选条件</el-button> | |||
</div> | |||
<el-button style="margin-left: 10px" @click="isSystoleForm" type="text" | |||
>{{ isOpen ? "收起" : "展开" | |||
}}<i | |||
style="margin-left: 5px" | |||
:class="isOpen ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" | |||
></i | |||
></el-button> | |||
<div | |||
style="margin-left: auto; margin-right: 10px" | |||
v-if="rec_index_downLoad" | |||
> | |||
<el-button @click="downLoad" icon="el-icon-download"> 导出</el-button> | |||
<div class="app-titel" style="margin-top: 15px"> | |||
<div style="margin-left: 110px"> | |||
<el-button type="primary" @click="screen">筛选</el-button> | |||
</div> | |||
<div style="margin-left: 20px"> | |||
<el-button @click="clearScreen" type="text">清空筛选条件</el-button> | |||
</div> | |||
<el-button style="margin-left: 10px" @click="isSystoleForm" type="text" | |||
>{{ isOpen ? "收起" : "展开" | |||
}}<i | |||
style="margin-left: 5px" | |||
:class="isOpen ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" | |||
></i | |||
></el-button> | |||
<div | |||
style="margin-left: auto; margin-right: 10px" | |||
v-if="rec_index_downLoad" | |||
> | |||
<el-button @click="downLoad" icon="el-icon-download"> 导出</el-button> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<!-- 表格 --> | |||
<div class="cen-tab"> | |||
@@ -372,6 +371,13 @@ | |||
@click="reWriteagain(row)" | |||
>重新转写</el-button | |||
> | |||
<el-button | |||
type="text" | |||
v-if="permissions.rec_index_delete" | |||
@click="deleteCS(row)" | |||
> | |||
删除接待 | |||
</el-button> | |||
</template> | |||
</avue-crud> | |||
</div> | |||
@@ -420,6 +426,8 @@ | |||
<script> | |||
import { mapGetters } from "vuex"; | |||
import { exportMethodPost } from "@/util/util"; | |||
import { Loading } from "element-ui"; | |||
export default { | |||
data() { | |||
return { | |||
@@ -672,6 +680,9 @@ export default { | |||
if (this.$route.query.houseId) { | |||
this.searchForm.projectId = this.$route.query.houseId; | |||
} | |||
if (this.$route.query.marketingBusiness) { | |||
this.searchForm.marketingBusiness = [this.$route.query.marketingBusiness]; | |||
} | |||
if ( | |||
this.$route.query.endDate && | |||
@@ -694,6 +705,26 @@ export default { | |||
}, | |||
methods: { | |||
// 删除接待 | |||
deleteCS(row) { | |||
console.log(row); | |||
this.$alert("确认删除此条记录吗?", `提示`, { | |||
confirmButtonText: "确定", | |||
cancelButtonText: "取消", | |||
showCancelButton: true, | |||
}).then(() => { | |||
this.$api.http.deleteCS({ cusId: row.id }).then((res) => { | |||
if (res.code == 10000) { | |||
this.$message.success(res.message); | |||
this.page.currentPage = 1; | |||
this.findbypage(); | |||
} else { | |||
this.$message.error(res.message); | |||
} | |||
}); | |||
}); | |||
}, | |||
// 获取话术 | |||
findQuestionList() { | |||
axios({ | |||
@@ -732,7 +763,7 @@ export default { | |||
// 转写方式数据获取 | |||
findTransferMethod() { | |||
this.$api.api.findTransferMethod().then((res) => { | |||
console.log(res,' sajdklasjdklasjdklsajkdls') | |||
console.log(res, " sajdklasjdklasjdklsajkdls"); | |||
if (res.data) { | |||
this.projectList = res.data || []; | |||
this.languageList = (res.data && res.data[0].list) || []; | |||
@@ -745,6 +776,12 @@ export default { | |||
this.$message.error("请先选择转写方式"); | |||
return; | |||
} | |||
Loading.service({ | |||
lock: true, | |||
text: "Loading", | |||
spinner: "el-icon-loading", | |||
background: "rgba(0, 0, 0, 0.7)", | |||
}); | |||
this.$api.api | |||
.toTransferData({ | |||
id: this.currentRow.id, | |||
@@ -755,6 +792,10 @@ export default { | |||
this.dialogVisible = false; | |||
this.getorgCode(); | |||
this.$message.success("操作成功"); | |||
Loading.close(); | |||
}) | |||
.catch(() => { | |||
Loading.close(); | |||
}); | |||
}, | |||
reWriteagain(row) { | |||
@@ -850,7 +891,7 @@ export default { | |||
this.$api.api.findbypage(obj).then((res) => { | |||
// console.log(res); | |||
if (res.code == 0) { | |||
this.tableData = res.data.records||[]; | |||
this.tableData = res.data.records || []; | |||
this.page.total = res.data.total; | |||
// 表格中设置ref属性,在数据渲染之后或者updated()之后 | |||
this.$nextTick(() => { | |||
@@ -945,7 +986,7 @@ export default { | |||
} | |||
this.houseChange(); | |||
// 获取转写方式 | |||
this.findTransferMethod() | |||
this.findTransferMethod(); | |||
// 获取销讲业务 | |||
this.getMarketingBusiness(); | |||
}); | |||
@@ -0,0 +1,840 @@ | |||
<template> | |||
<div class="pages"> | |||
<div class="app-titel" style="height: auto; padding: 26px"> | |||
<div class="screeningbox" style="display: flex; flex-wrap: wrap"> | |||
<div class="screeningbox" style="display: flex; align-items: center"> | |||
添加时间: | |||
</div> | |||
<el-radio-group | |||
v-model="pageParams.dateType" | |||
size="small" | |||
@change="tabtimetap" | |||
> | |||
<el-radio-button :label="4">近7天</el-radio-button> | |||
<el-radio-button :label="5">近15天</el-radio-button> | |||
<el-radio-button :label="6">近30天</el-radio-button> | |||
</el-radio-group> | |||
<div style="margin-left: 26px"> | |||
<el-date-picker | |||
style="width: 250px; height: 32px; line-height: 32px" | |||
@change="confirmtime()" | |||
v-model="customtime" | |||
type="daterange" | |||
range-separator="至" | |||
value-format="yyyy-MM-dd" | |||
start-placeholder="开始日期" | |||
end-placeholder="结束日期" | |||
> | |||
</el-date-picker> | |||
</div> | |||
<div style="width: 100%; display: flex"> | |||
<div class="items"> | |||
团队: | |||
<el-select | |||
v-model="pageParams.deptId" | |||
clearable | |||
placeholder="请选择" | |||
> | |||
<el-option | |||
v-for="item in deptList" | |||
:key="item.id" | |||
:label="item.name" | |||
:value="item.id" | |||
> | |||
</el-option> | |||
</el-select> | |||
</div> | |||
<div class="items"> | |||
接待顾问: | |||
<el-select | |||
v-model="pageParams.agentId" | |||
clearable | |||
placeholder="请选择" | |||
> | |||
<el-option | |||
v-for="item in accountList" | |||
:key="item.accountId" | |||
:label="item.name" | |||
:value="item.accountId" | |||
> | |||
</el-option> | |||
</el-select> | |||
</div> | |||
<div class="items"> | |||
销讲业务: | |||
<el-select | |||
@change="changeSelect" | |||
v-model="pageParams.marketingBusiness" | |||
clearable | |||
placeholder="请选择销讲业务" | |||
> | |||
<el-option | |||
v-for="item in options" | |||
:key="item.id" | |||
:label="item.templateName" | |||
:value="item.id" | |||
> | |||
</el-option> | |||
</el-select> | |||
</div> | |||
<div class="items"> | |||
<el-button type="primary" @click="employeeUsageStatistics" | |||
>筛选</el-button | |||
> | |||
<el-button type="text" @click="Emptycondition" | |||
>清空筛选条件</el-button | |||
> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<!-- <%-- | |||
<div class="screeningbox" style="margin-top: 20px; background: #fff"> | |||
--%> <%-- | |||
<button class="button1" @click="employeeUsageStatistics()">筛选</button | |||
>--%> <%-- | |||
<button | |||
style="background: #ffffff; color: #606775" | |||
class="button1" | |||
@click="Emptycondition()" | |||
> | |||
清空筛选条件</button | |||
>--%> <%-- <button class="button1" @click="daochu()">导出</button>--%> | |||
<%-- | |||
</div> | |||
--%> --> | |||
<div class="box-forhtml" v-for="(item, index) in objList" :key="index"> | |||
<div class="conbox">{{ item.name }}</div> | |||
<div class="box-forhtml-flex"> | |||
<div class="left"> | |||
<div class="left-title"> | |||
{{ item.leftTitle }} | |||
<!-- <%-- | |||
<el-tooltip :content="item.leftReason" placement="bottom-end" | |||
>--%> <%-- <i class="el-icon-warning-outline"></i>--%> <%-- </el-tooltip | |||
>--%> --> | |||
</div> | |||
<div class="Templatetable"> | |||
<div class="table-tit"> | |||
<div>排名</div> | |||
<div>无效原因</div> | |||
<div>接待数</div> | |||
<div>占比</div> | |||
<div>操作</div> | |||
</div> | |||
<template v-if="item.total > 0"> | |||
<div | |||
class="table-cent" | |||
v-for="(itcen, inde) in item.matchKeywords" | |||
:key="inde" | |||
> | |||
<div | |||
style=" | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
" | |||
> | |||
<img | |||
v-if="inde == 0" | |||
style="width: 30px; height: 30px" | |||
src="https://zkgj.quhouse.com/static/images/system/images/ranking1.png" | |||
alt="" | |||
/> | |||
<img | |||
v-else-if="inde == 1" | |||
style="width: 30px; height: 30px" | |||
src="https://zkgj.quhouse.com/static/images/system/images/ranking2.png" | |||
alt="" | |||
/> | |||
<img | |||
v-else-if="inde == 2" | |||
style="width: 30px; height: 30px" | |||
src="https://zkgj.quhouse.com/static/images/system/images/ranking3.png" | |||
alt="" | |||
/> | |||
<div v-else class="indeclass">{{ inde + 1 }}</div> | |||
</div> | |||
<div>{{ itcen.name }}</div> | |||
<div>{{ itcen.count }}</div> | |||
<div>{{ itcen.percent }}%</div> | |||
<div | |||
style="color: #2671e2; cursor: pointer" | |||
@click="Toview(item, itcen)" | |||
> | |||
明细 | |||
</div> | |||
</div> | |||
</template> | |||
<template v-else> | |||
<div | |||
style=" | |||
width: 100%; | |||
line-height: 400px; | |||
text-align: center; | |||
color: #999999; | |||
font-size: 16px; | |||
" | |||
> | |||
暂无数据 | |||
</div> | |||
</template> | |||
</div> | |||
</div> | |||
<div class="right"> | |||
<div class="right-title"> | |||
<div> | |||
{{ item.leftTitle }} | |||
</div> | |||
<div class="export"> | |||
<el-button type="primary" @click="exportExcel(item.url)" | |||
>导出</el-button | |||
> | |||
</div> | |||
</div> | |||
<div | |||
:id="item.id" | |||
class="container" | |||
style="width: 100%; height: 400px; text-align: center" | |||
> | |||
<img | |||
v-if="item.total == 0" | |||
style="width: 400px; height: 400px" | |||
src="https://zkgj.quhouse.com/static/images/system/images/Elementcircle.png" | |||
alt="" | |||
/> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</template> | |||
<script> | |||
import * as echarts from "echarts"; | |||
import { exportMethodPost } from "@/util/util"; | |||
export default { | |||
data() { | |||
return { | |||
pageParams: { | |||
dateType: 5, // 4 近七天 5 十五天 6 三十天 | |||
startTime: "", // 开始时间 | |||
endTime: "", // 结束时间 | |||
houseId: "", // 项目id | |||
agentId: "", // 顾问id | |||
deptId: "", // 部门id | |||
marketingBusiness: "", // 销讲业务 | |||
}, | |||
customtime: [], // 时间段选择 | |||
tableData: [], // 员工分析列表 | |||
loading: false, | |||
deptList: [], // 部门/团队列表 | |||
accountList: [], // 顾问列表 | |||
objList: [ | |||
{ | |||
name: "无效接待分布", | |||
title: "接待总数", | |||
matchKeywords: [], | |||
id: "deptName", // echarts渲染的盒子id | |||
total: 0, // 接待总数 | |||
leftReason: `原因1:无录音(离线接待). | |||
原因2:无录音(无设备). | |||
原因3:无录音(录音时间小于1分钟). | |||
原因4:选择的无效原因.`, // 左侧原因 | |||
rightReason: `1:没电指派无有效录音. | |||
2:离线指派无有效录音. | |||
3:系统测试. | |||
4:非接访场景录音. | |||
5:其它.`, // 右侧原因 | |||
leftTitle: "无效原因排名", // 左侧小标题 | |||
rightTitle: "无效原因占比", // 右侧小标题 | |||
url: "/customer/invalidReceptionRankExport", // 导出接口get请求 | |||
}, | |||
], // 数据合集包含 无效接待分布 | |||
options: [], // 列表 | |||
myChart: null, // 图表实例对象 | |||
}; | |||
}, | |||
created() { | |||
this.pageParams.houseId = localStorage.getItem("houseId"); | |||
}, | |||
mounted() { | |||
// 员工使用统计 | |||
this.initPage(); | |||
}, | |||
methods: { | |||
// 销讲业务模板 | |||
getMarketingBusiness() { | |||
this.$api.http | |||
.marketingBusiness({ | |||
houseId: this.pageParams.houseId, | |||
}) | |||
.then((res) => { | |||
if (res.code == 10000) { | |||
this.options = res.data; | |||
} | |||
}); | |||
}, | |||
// 初始化页面 | |||
initPage() { | |||
this.getAllDeptName(); | |||
this.getAllAccountName(); | |||
this.employeeUsageStatistics(); | |||
this.getMarketingBusiness(); | |||
}, | |||
changeSelect() { | |||
this.employeeUsageStatistics(); | |||
}, | |||
// 部门 | |||
getAllDeptName() { | |||
this.$api.http | |||
.getAllDeptName({ itemId: this.pageParams.houseId }) | |||
.then((res) => { | |||
if (res.code == 10000) { | |||
this.deptList = res.data; | |||
} | |||
}); | |||
}, | |||
// 顾问 | |||
getAllAccountName() { | |||
this.$api.http | |||
.getAllAccountName({ itemId: this.pageParams.houseId }) | |||
.then((res) => { | |||
if (res.code == 10000) { | |||
this.accountList = res.data; | |||
} | |||
}); | |||
}, | |||
// 获取员工使用统计 | |||
employeeUsageStatistics() { | |||
this.$api.http.invalidReceptionRank(this.pageParams).then((res) => { | |||
console.log(res, "sadlka;ldkls;"); | |||
if (res.code == 10000) { | |||
let result = res.data; | |||
this.objList[0].matchKeywords = result.list; | |||
this.objList[0].total = result.sum; | |||
let isEmpty = | |||
this.objList[0].matchKeywords.filter((item) => item.count != 0) | |||
.length > 0; | |||
if (!isEmpty) this.myChart && this.myChart.clear(); | |||
this.myChartinit(this.objList[0], isEmpty); | |||
} | |||
}); | |||
}, | |||
//导出表格 | |||
// TO DO | |||
exportExcel(url) { | |||
exportMethodPost(`/autoSR/audit/reception/invalidReceptionRankExport`,'无效接待分析', this.pageParams) | |||
// let str = "?"; | |||
// for (let i in this.pageParams) { | |||
// str += i + "=" + (this.pageParams[i] || "") + "&"; | |||
// } | |||
// window.location.href = "${jypath}" + url + str.substr(0, str.length - 1); | |||
}, | |||
//清空筛选条件 | |||
Emptycondition() { | |||
this.pageParams = { | |||
dateType: 5, // 4 近七天 5 十五天 6 三十天 | |||
startTime: "", // 开始时间 | |||
endTime: "", // 结束时间 | |||
houseId: localStorage.getItem("houseId"), // 项目id | |||
agentId: "", // 顾问id | |||
deptId: "", // 部门id | |||
marketingBusiness: "", // 销讲业务 | |||
}; | |||
this.customtime = []; | |||
this.employeeUsageStatistics(); | |||
}, | |||
resetParamsTime() { | |||
this.pageParams.pageNum = 1; | |||
this.pageParams.pageSize = 1; | |||
this.pageParams.startTime = ""; | |||
this.pageParams.endTime = ""; | |||
}, | |||
//时间tab切换 | |||
tabtimetap() { | |||
this.resetParamsTime(); | |||
this.employeeUsageStatistics(); | |||
}, | |||
//时间选择 | |||
confirmtime() { | |||
if (this.customtime.length) { | |||
this.pageParams.dateType = null; | |||
this.pageParams.startTime = this.customtime[0]; | |||
this.pageParams.endTime = this.customtime[1]; | |||
this.employeeUsageStatistics(); | |||
} | |||
}, | |||
// 查看详情 | |||
Toview(item, items) { | |||
let obj = { | |||
...this.pageParams, | |||
accountId: this.pageParams.agentId, // 顾问id | |||
invalidReason: items.id, | |||
}; | |||
if (this.pageParams.dateType == 4) { | |||
obj.dateType = 2; | |||
} else if (this.pageParams.dateType == 5) { | |||
// 4 近七天 5 十五天 6 三十天 | |||
this.customtime = this.getTimeArea(15); | |||
obj.date = this.customtime.join(","); // 筛选时间 | |||
} else if (this.pageParams.dateType == 6) { | |||
this.customtime = this.getTimeArea(30); | |||
obj.date = this.customtime.join(","); // 筛选时间 | |||
} else { | |||
obj.date = this.customtime.join(","); // 筛选时间 | |||
} | |||
this.$router.push({ | |||
path: "/ReceivingRecords/index", | |||
query: obj, | |||
}); | |||
}, | |||
// 获取时间段 | |||
getTimeArea(x = 1) { | |||
let starTime = new Date().getTime() - 24 * 60 * 60 * 1000 * x; | |||
let startDate = `${new Date(starTime).getFullYear()}-${ | |||
new Date(starTime).getMonth() + 1 | |||
}-${new Date(starTime).getDate()}`; | |||
let endTime = new Date().getTime() - 24 * 60 * 60 * 1000; | |||
let endDate = `${new Date(endTime).getFullYear()}-${ | |||
new Date(endTime).getMonth() + 1 | |||
}-${new Date(endTime).getDate()}`; | |||
return [startDate, endDate]; | |||
}, | |||
// 初始化表格 | |||
myChartinit(item, empity) { | |||
this.myChart = echarts.init(document.getElementById(item.id)); | |||
let objoptlis = []; | |||
let option = {}; | |||
if (!empity) { | |||
option.title = { | |||
text: "暂无数据", | |||
x: "center", | |||
y: "center", | |||
textStyle: { | |||
fontSize: 14, | |||
fontWeight: "normal", | |||
}, | |||
}; | |||
} else { | |||
item.matchKeywords.forEach((ice) => { | |||
objoptlis.push({ | |||
value: ice.count, | |||
name: ice.name, | |||
percent: ice.percent, | |||
}); | |||
}); | |||
option = { | |||
color: [ | |||
"#66AFF5", | |||
"#FABD2B", | |||
"#6F8EDC", | |||
"#FFCF8F", | |||
"#F98120", | |||
"#1CC99E", | |||
"#9474FB", | |||
"#657292", | |||
"#7A6A99", | |||
"#BF5D52", | |||
"#EE6666", | |||
"#77B7E4", | |||
"#E6A065", | |||
"#9D5139", | |||
"#C1AA88", | |||
"#F87F7A", | |||
"#F6CF74", | |||
"#7F5506", | |||
"#88BB9B", | |||
"#6E99AA", | |||
"#5789D0", | |||
], | |||
tooltip: { | |||
show: true, | |||
trigger: "item", | |||
formatter: (data) => { | |||
console.log(data); | |||
return ( | |||
data.data.name + | |||
" " + | |||
data.data.value + | |||
"(" + | |||
data.data.percent + | |||
"%)" | |||
); | |||
}, | |||
}, | |||
legend: { | |||
type: "scroll", | |||
data: objoptlis, | |||
bottom: 0, | |||
}, | |||
graphic: [ | |||
{ | |||
type: "text", | |||
left: "center", | |||
top: "42%", | |||
style: { | |||
text: item.total, | |||
textAlign: "center", | |||
fill: "#000", | |||
width: 30, | |||
height: 30, | |||
fontSize: 24, | |||
color: "#32363D", | |||
fontFamily: "Microsoft YaHei", | |||
}, | |||
}, | |||
{ | |||
type: "text", | |||
left: "center", | |||
top: "55%", | |||
style: { | |||
text: item.title, | |||
textAlign: "center", | |||
fill: "#000", | |||
width: 30, | |||
height: 30, | |||
fontSize: 16, | |||
color: "#666666", | |||
}, | |||
}, | |||
], | |||
series: [ | |||
{ | |||
name: "", | |||
type: "pie", | |||
radius: ["48%", "70%"], | |||
avoidLabelOverlap: true, | |||
data: objoptlis, | |||
label: { | |||
show: true, | |||
}, | |||
}, | |||
], | |||
}; | |||
} | |||
this.myChart.setOption(option); | |||
}, | |||
}, | |||
}; | |||
</script> | |||
<style lang="scss" scoped> | |||
.app-titel { | |||
padding: 20px 24px; | |||
width: 100%; | |||
/*min-height: 80px;*/ | |||
background: #ffffff; | |||
box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.04); | |||
border-radius: 8px; | |||
display: flex; | |||
flex-wrap: wrap; | |||
} | |||
.app-titel .items { | |||
margin: 20px 24px 0 0; | |||
} | |||
.toptimeqhuan { | |||
width: 190px; | |||
height: 32px; | |||
background: #ffffff; | |||
border-radius: 4px; | |||
border: 1px solid #e0e0e0; | |||
display: flex; | |||
align-items: center; | |||
overflow: hidden; | |||
margin-left: 30px; | |||
cursor: pointer; | |||
} | |||
.toptimeqhuan div { | |||
flex: 1; | |||
text-align: center; | |||
line-height: 32px; | |||
font-size: 16px; | |||
} | |||
.tophove { | |||
color: #ffffff; | |||
background: #2671e2; | |||
} | |||
.app-box { | |||
width: 100%; | |||
padding-bottom: 20px; | |||
background: #ffffff; | |||
box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.04); | |||
border-radius: 8px; | |||
padding-top: 20px; | |||
padding-left: 30px; | |||
padding-right: 30px; | |||
margin-top: 30px; | |||
} | |||
.conbox { | |||
height: 18px; | |||
font-size: 18px; | |||
font-family: PingFangSC-Semibold, PingFang SC; | |||
font-weight: 600; | |||
color: #32363d; | |||
line-height: 18px; | |||
} | |||
/*.con-bodeer-box{*/ | |||
/* width: 100%;height: 113px;*/ | |||
/* border-radius: 4px;border: 1px solid #E0E0E0;margin-top: 20px;*/ | |||
/*}*/ | |||
/*.con-bodeer-box .con-flex{*/ | |||
/* width: 100%;height: 56px;display: flex;align-items: center;*/ | |||
/*}*/ | |||
/*.con-bodeer-box .con-flex div{*/ | |||
/* flex: 1;text-align: center;line-height: 56px;font-size: 16px;*/ | |||
/*}*/ | |||
.box-forhtml { | |||
width: 100%; | |||
min-height: 400px; | |||
background: #ffffff; | |||
box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.04); | |||
border-radius: 8px; | |||
padding: 20px 30px; | |||
margin-top: 30px; | |||
} | |||
.box-forhtml-flex { | |||
position: relative; | |||
width: 100%; | |||
display: flex; | |||
margin-top: 20px; | |||
} | |||
.box-forhtml-flex .right .right-title { | |||
display: flex; | |||
justify-content: space-between; | |||
} | |||
.box-forhtml-flex .left .left-title, | |||
.box-forhtml-flex .right .right-title { | |||
padding: 12px 0; | |||
width: 100%; | |||
} | |||
.box-forhtml-flex .left { | |||
width: 50%; | |||
min-height: 320px; | |||
} | |||
.box-forhtml-flex .right { | |||
width: 50%; | |||
min-height: 330px; | |||
display: flex; | |||
flex-direction: column; | |||
align-items: center; | |||
} | |||
.Templatetable { | |||
width: 88%; | |||
height: 100%; | |||
margin: 0 auto; | |||
overflow-y: auto; | |||
} | |||
.table-tit { | |||
width: 100%; | |||
height: 20px; | |||
line-height: 20px; | |||
display: flex; | |||
} | |||
.table-tit > div:nth-of-type(1) { | |||
width: 10%; | |||
text-align: center; | |||
font-size: 16px; | |||
font-family: PingFangSC-Semibold, PingFang SC; | |||
font-weight: 600; | |||
color: #606775; | |||
} | |||
.table-tit > div:nth-of-type(2) { | |||
width: 40%; | |||
text-align: center; | |||
font-size: 16px; | |||
font-family: PingFangSC-Semibold, PingFang SC; | |||
font-weight: 600; | |||
color: #606775; | |||
} | |||
.table-tit > div:nth-of-type(3) { | |||
width: 20%; | |||
text-align: center; | |||
font-size: 16px; | |||
font-family: PingFangSC-Semibold, PingFang SC; | |||
font-weight: 600; | |||
color: #606775; | |||
} | |||
.table-tit > div:nth-of-type(4) { | |||
width: 20%; | |||
text-align: center; | |||
font-size: 16px; | |||
font-family: PingFangSC-Semibold, PingFang SC; | |||
font-weight: 600; | |||
color: #606775; | |||
} | |||
.table-tit > div:nth-of-type(5) { | |||
width: 10%; | |||
text-align: center; | |||
font-size: 16px; | |||
font-family: PingFangSC-Semibold, PingFang SC; | |||
font-weight: 600; | |||
color: #606775; | |||
} | |||
.table-cent { | |||
padding: 5px 0; | |||
width: 100%; | |||
display: flex; | |||
margin-top: 10px; | |||
} | |||
.table-cent > div:nth-of-type(1) { | |||
width: 10%; | |||
text-align: center; | |||
font-size: 14px; | |||
font-family: PingFangSC-Semibold, PingFang SC; | |||
color: #32363d; | |||
} | |||
.table-cent > div:nth-of-type(2) { | |||
width: 40%; | |||
text-align: center; | |||
font-size: 14px; | |||
font-family: PingFangSC-Semibold, PingFang SC; | |||
color: #32363d; | |||
overflow: hidden; | |||
white-space: nowrap; | |||
text-overflow: ellipsis; | |||
} | |||
.table-cent > div:nth-of-type(3) { | |||
width: 20%; | |||
text-align: center; | |||
font-size: 14px; | |||
font-family: PingFangSC-Semibold, PingFang SC; | |||
color: #32363d; | |||
} | |||
.table-cent > div:nth-of-type(4) { | |||
width: 20%; | |||
text-align: center; | |||
font-size: 14px; | |||
font-family: PingFangSC-Semibold, PingFang SC; | |||
color: #32363d; | |||
} | |||
.table-cent > div:nth-of-type(5) { | |||
width: 10%; | |||
text-align: center; | |||
font-size: 14px; | |||
font-family: PingFangSC-Semibold, PingFang SC; | |||
color: #32363d; | |||
} | |||
.indeclass { | |||
width: 20px; | |||
height: 20px; | |||
border-radius: 50%; | |||
background: #ecf1ff; | |||
color: #ffffff; | |||
text-align: center; | |||
line-height: 20px; | |||
font-size: 14px; | |||
} | |||
.el-date-editor .el-range__icon { | |||
line-height: 25px; | |||
} | |||
.el-date-editor .el-range-separator { | |||
line-height: 25px; | |||
} | |||
.el-date-editor .el-range-input, | |||
.el-date-editor .el-range-separator { | |||
margin: 3px; | |||
} | |||
.con-bodeer-box { | |||
width: 100%; | |||
height: 113px; | |||
border-radius: 4px; | |||
border: 1px solid #e0e0e0; | |||
margin-top: 20px; | |||
} | |||
.con-bodeer-box .con-flex { | |||
width: 100%; | |||
height: 56px; | |||
display: flex; | |||
align-items: center; | |||
} | |||
.con-bodeer-box .con-flex div { | |||
flex: 1; | |||
text-align: center; | |||
line-height: 56px; | |||
font-size: 16px; | |||
} | |||
.backTopbox { | |||
width: 40px; | |||
height: 40px; | |||
border-radius: 50%; | |||
background: #d0edff; | |||
position: fixed; | |||
bottom: 40px; | |||
right: 40px; | |||
border: none; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
} | |||
.backTop { | |||
display: block; | |||
width: 16px; | |||
height: 20px; | |||
} | |||
.btns { | |||
width: 90px; | |||
height: 40px; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
color: #fff; | |||
background: #2671e2; | |||
border-radius: 8px; | |||
} | |||
</style> |
@@ -0,0 +1,488 @@ | |||
<template> | |||
<div class="box-center"> | |||
<!-- 头 --> | |||
<div class="app-top"> | |||
<div style="margin-left: 20px; display: flex"> | |||
<el-button @click="editorinfo()" type="primary">新增 </el-button> | |||
<div style="margin-left: auto; margin-right: 10px"></div> | |||
</div> | |||
</div> | |||
<!-- 表格 --> | |||
<div class="cen-tab"> | |||
<el-table | |||
ref="tableSortable" | |||
:data="tableData" | |||
stripe | |||
style="width: 100%; height: 400px" | |||
row-key="id" | |||
> | |||
<el-table-column label="序号" prop="sort" align="center"> | |||
</el-table-column> | |||
<el-table-column | |||
prop="name" | |||
label="无效原因" | |||
align="center" | |||
></el-table-column> | |||
<el-table-column label="操作" align="center"> | |||
<template slot-scope="{ row }" style=""> | |||
<el-button type="text" @click="bianji(row)">编辑</el-button> | |||
<el-button type="text" @click="del(row)">删除</el-button> | |||
</template> | |||
</el-table-column> | |||
</el-table> | |||
</div> | |||
<el-dialog | |||
:title="editFlag ? '编辑' : '新增'" | |||
:visible.sync="dialogVisible" | |||
@close="$refs.ruleForm.resetFields()" | |||
> | |||
<el-form | |||
:model="ruleForm" | |||
label-position="labelPosition" | |||
:rules="ruleser" | |||
ref="ruleForm" | |||
label-width="140px" | |||
style="width: 60%; margin: 0 auto" | |||
> | |||
<el-form-item label="无效原因" prop="name"> | |||
<el-input v-model="ruleForm.name" maxlength="8" clearable></el-input> | |||
</el-form-item> | |||
</el-form> | |||
<div slot="footer" class="dialog-footer"> | |||
<el-button @click="dialogVisible = false">取 消</el-button> | |||
<el-button type="primary" :loading="loadingFlag" @click="addForm" | |||
>保存 | |||
</el-button> | |||
</div> | |||
</el-dialog> | |||
<el-dialog | |||
title="删除来源" | |||
:visible.sync="delVisible" | |||
@close="$refs.ruleForm.resetFields()" | |||
> | |||
<div style="text-align: center; margin-bottom: 20px"> | |||
请将此无效的接待转移到以下无效原因中 | |||
</div> | |||
<el-form | |||
:model="ruleForm" | |||
label-position="labelPosition" | |||
:rules="ruleser" | |||
ref="ruleForm" | |||
label-width="140px" | |||
style="width: 60%; margin: 0 auto" | |||
> | |||
<el-form-item label="无效接待移至" prop="moveId"> | |||
<el-select v-model="deleteParams.moveId" placeholder="请选择"> | |||
<el-option | |||
v-for="item in delIdList" | |||
:key="item.value" | |||
:label="item.label" | |||
:value="item.value" | |||
> | |||
</el-option> | |||
</el-select> | |||
</el-form-item> | |||
</el-form> | |||
<div slot="footer" class="dialog-footer"> | |||
<el-button | |||
@click=" | |||
delVisible = false; | |||
deleteParams.id = ''; | |||
" | |||
>取 消</el-button | |||
> | |||
<el-button type="primary" :loading="loadingFlag" @click="deleteItem" | |||
>保存 | |||
</el-button> | |||
</div> | |||
</el-dialog> | |||
</div> | |||
</template> | |||
<script> | |||
import Sortable from "sortablejs"; | |||
import { Loading } from "element-ui"; | |||
export default { | |||
data() { | |||
return { | |||
currentPage4: 1, | |||
value: "", | |||
input: "", | |||
tableData: [], | |||
multipleSelection: [], | |||
dialogVisible: false, | |||
loadingFlag: false, | |||
delVisible: false, | |||
orgType: localStorage.getItem("orgType"), | |||
ruleForm: { | |||
id: "", | |||
name: "", // | |||
houseId: localStorage.getItem("houseId"), // 项目id | |||
}, | |||
houseId: "", | |||
houseList: [], | |||
Page: 1, | |||
size: 10, | |||
words: "", | |||
total: 0, | |||
ruleser: { | |||
name: [{ required: true, message: "请填写客户来源", trigger: "blur" }], | |||
}, | |||
editFlag: false, | |||
paramsList: { | |||
// 列表入参 | |||
id: "", | |||
name: "", // 资源名称 | |||
houseId: localStorage.getItem("houseId"), // 项目id | |||
sort: "", // 顺序 | |||
}, | |||
deleteParams: { | |||
// 删除入参 | |||
id: "", | |||
moveId: "", | |||
sort: "", // 序号 | |||
houseId: localStorage.getItem("houseId"), // 项目id | |||
}, | |||
delIdList: [], // 要转移的数据位置 | |||
editParams: { | |||
// 编辑这一项 | |||
id: "", // | |||
name: "", // | |||
houseId: localStorage.getItem("houseId"), // 项目id | |||
}, | |||
loadingObj: null, | |||
}; | |||
}, | |||
mounted() { | |||
this.$nextTick(() => { | |||
this.rowDrop(); | |||
}); | |||
this.getList(); | |||
}, | |||
methods: { | |||
/*判断类型选择使用方法*/ | |||
addForm() { | |||
if (!this.editFlag) this.addCustomer(); | |||
else this.editCustomer(); | |||
}, | |||
// 初始化提交变量 | |||
initRuleForm() { | |||
this.ruleForm = { | |||
id: "", | |||
name: "", // | |||
houseId: localStorage.getItem("houseId"), // 项目id | |||
}; | |||
}, | |||
// 确认添加 | |||
addCustomer() { | |||
this.$refs.ruleForm.validate((valid) => { | |||
if (!valid) return; | |||
this.$api.http | |||
.InvalidReceptionAddInvalid({ | |||
name: this.ruleForm.name, | |||
houseId: this.paramsList.houseId, | |||
}) | |||
.then((res) => { | |||
if (res.code == 10000) { | |||
this.$message({ | |||
message: res.message, | |||
type: "success", | |||
}); | |||
this.initRuleForm(); | |||
this.getList(); | |||
} else { | |||
this.$message({ | |||
message: res.message, | |||
type: "error", | |||
}); | |||
} | |||
this.dialogVisible = false; | |||
}) | |||
.catch(() => { | |||
this.dialogVisible = false; | |||
}); | |||
}); | |||
}, | |||
// 编辑 | |||
editCustomer() { | |||
this.$refs.ruleForm.validate((valid) => { | |||
if (!valid) return; | |||
this.$api.http | |||
.InvalidReceptionUpdateInvalid(this.ruleForm) | |||
.then((res) => { | |||
this.dialogVisible = false; | |||
if (res.code == 10000) { | |||
this.$message({ | |||
message: res.message, | |||
type: "success", | |||
}); | |||
this.initRuleForm(); | |||
this.getList(); | |||
} else { | |||
this.$message({ | |||
message: res.message, | |||
type: "error", | |||
}); | |||
} | |||
}) | |||
.catch(() => { | |||
this.dialogVisible = false; | |||
}); | |||
}); | |||
}, | |||
// 删除确认删除item | |||
deleteItem() { | |||
if (!this.deleteParams.moveId) { | |||
this.$message({ | |||
message: "请将此无效的接待转移到以下无效原因中", | |||
type: "error", | |||
}); | |||
return; | |||
} | |||
this.$api.http | |||
.InvalidReceptionDelete(this.deleteParams) | |||
.then((res) => { | |||
console.log(res); | |||
this.delVisible = false; | |||
if (res.code == 10000) { | |||
this.$message({ | |||
message: res.message, | |||
type: "success", | |||
}); | |||
} else { | |||
this.$message({ | |||
message: res.message, | |||
type: "error", | |||
}); | |||
} | |||
this.deleteParams.moveId = ""; | |||
this.getList(); | |||
}) | |||
.catch(() => { | |||
this.delVisible = false; | |||
}); | |||
}, | |||
// 获取列表 | |||
getList() { | |||
this.$api.http | |||
.InvalidReceptionReasonList({ | |||
houseId: this.paramsList.houseId, | |||
}) | |||
.then((res) => { | |||
if (res.code == 10000) { | |||
this.tableData = res.data.filter( | |||
(item) => item.id != 6 && item.id != 7 && item.id != 5 | |||
); | |||
} | |||
this.$nextTick(() => { | |||
this.loadingObj.close(); | |||
}); | |||
}) | |||
.catch(() => { | |||
this.$nextTick(() => { | |||
this.loadingObj.close(); | |||
}); | |||
}); | |||
}, | |||
//行拖拽 | |||
rowDrop() { | |||
const transfer = this.$refs.tableSortable.$el; | |||
const tbody = transfer | |||
.getElementsByClassName("el-table__body-wrapper")[0] | |||
.getElementsByClassName("el-table__body")[0] | |||
.getElementsByTagName("tbody")[0]; | |||
console.log(tbody, "tbody"); | |||
Sortable.create(tbody, { | |||
animation: 100, | |||
onEnd: ({ newIndex, oldIndex }) => { | |||
console.log(newIndex, oldIndex); | |||
if (newIndex == oldIndex) { | |||
return; | |||
} | |||
this.loadingObj = Loading.service({ | |||
lock: true, | |||
text: "Loading", | |||
spinner: "el-icon-loading", | |||
background: "rgba(0, 0, 0, 0.7)", | |||
}); | |||
this.$api.http | |||
.InvalidReceptionUpdateSort({ | |||
houseId: this.paramsList.houseId, | |||
id: this.tableData[newIndex].id, | |||
sort: this.tableData[oldIndex].sort, | |||
moveId: this.tableData[oldIndex].id, // 更换的id | |||
moveSort: this.tableData[newIndex].sort, // 更换的序号 | |||
}) | |||
.then((res) => { | |||
console.log(res); | |||
if (res.code == 10000) { | |||
this.$message({ | |||
message: res.message, | |||
type: "success", | |||
}); | |||
this.tableData = []; | |||
this.getList(); | |||
} else { | |||
this.$message({ | |||
message: res.message, | |||
type: "error", | |||
}); | |||
this.loadingObj.close(); | |||
} | |||
}); | |||
}, | |||
}); | |||
}, | |||
//删除 | |||
del(item) { | |||
this.delIdList = []; | |||
this.deleteParams.id = item.id; | |||
this.deleteParams.sort = item.sort; | |||
let arr = []; | |||
this.tableData.forEach((items) => { | |||
if (items.id != item.id) { | |||
arr.push({ | |||
label: items.name, | |||
value: items.id, | |||
}); | |||
} | |||
}); | |||
console.log(arr); | |||
this.delIdList = arr; | |||
this.delVisible = true; | |||
}, | |||
//编辑 | |||
bianji(row) { | |||
this.dialogVisible = true; | |||
this.ruleForm.name = row.name; | |||
this.ruleForm.id = row.id; | |||
this.editFlag = true; | |||
}, | |||
editorinfo() { | |||
this.dialogVisible = true; | |||
this.editFlag = false; | |||
this.ruleForm.editFlag = ""; | |||
}, | |||
}, | |||
}; | |||
</script> | |||
<style lang="scss" scoped> | |||
.box-center { | |||
width: 100%; | |||
min-height: 100%; | |||
padding: 15px; | |||
min-width: 1000px; | |||
padding-bottom: 100px; | |||
} | |||
.cen-tab { | |||
width: 100%; | |||
padding: 15px; | |||
background: #ffffff; | |||
margin-top: 15px; | |||
min-height: 100%; | |||
} | |||
.tophove { | |||
color: #ffffff; | |||
background: #2671e2; | |||
} | |||
.dtit-box { | |||
width: 100%; | |||
display: flex; | |||
align-items: center; | |||
flex-wrap: wrap; | |||
} | |||
.div-lab1 { | |||
display: flex; | |||
align-items: center; | |||
margin: 5px; | |||
} | |||
.label1 { | |||
font-size: 14px; | |||
color: #32363d; | |||
line-height: 32px; | |||
margin-left: 6px; | |||
} | |||
.app-top { | |||
width: 100%; | |||
background: #ffffff; | |||
box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.04); | |||
border-radius: 4px; | |||
padding-top: 15px; | |||
padding-bottom: 15px; | |||
} | |||
.app-titel { | |||
width: 100%; | |||
display: flex; | |||
align-items: center; | |||
flex-wrap: wrap; | |||
} | |||
.label { | |||
font-size: 14px; | |||
font-weight: 400; | |||
color: #32363d; | |||
line-height: 32px; | |||
margin-left: 15px; | |||
min-width: 100px; | |||
text-align: right; | |||
} | |||
.toptimeqhuan { | |||
height: 30px; | |||
background: #ffffff; | |||
display: flex; | |||
align-items: center; | |||
} | |||
.toptimeqhuan div { | |||
padding-left: 20px; | |||
padding-right: 20px; | |||
text-align: center; | |||
line-height: 30px; | |||
font-size: 14px; | |||
margin-right: 15px; | |||
border-radius: 4px; | |||
border: 1px solid #e0e0e0; | |||
} | |||
.div-lab { | |||
display: flex; | |||
margin: 5px; | |||
} | |||
.div-inp { | |||
width: 250px; | |||
} | |||
.el-tooltip__popper { | |||
max-width: 300px; | |||
} | |||
</style> |
@@ -374,6 +374,13 @@ | |||
</el-radio-group> | |||
</el-form-item> | |||
<el-form-item label="无效接待审核" prop="auditReception"> | |||
<el-radio-group v-model="ruleForm.auditReception"> | |||
<el-radio :label="0">审核</el-radio> | |||
<el-radio :label="1">不审核</el-radio> | |||
</el-radio-group> | |||
</el-form-item> | |||
<el-form-item label="联系人" prop="linkman"> | |||
<el-input | |||
v-model="ruleForm.linkman" | |||
@@ -892,6 +899,7 @@ export default { | |||
transliterationMethod: '',//转写方式 | |||
language:'',//语言 | |||
shortRecordingSetting: 0, // 短录音是否转写 是否转写短录音 0 转写(默认) 1 不转写 | |||
auditReception: 1, // 无效接待审核 0 审核 1不审核 | |||
}, | |||
ruleForm1: {}, | |||
optionsagentId: [], | |||