@@ -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": { | "scripts": { | ||||
"pre": "cnpm install || yarn --registry https://registry.npm.taobao.org || npm install --registry https://registry.npm.taobao.org ", | "pre": "cnpm install || yarn --registry https://registry.npm.taobao.org || npm install --registry https://registry.npm.taobao.org ", | ||||
"dev": "vue-cli-service serve", | "dev": "vue-cli-service serve", | ||||
"serve": "vue-cli-service serve --mode production", | |||||
"cl": "vue-cli-service serve --mode cldevelopment", | "cl": "vue-cli-service serve --mode cldevelopment", | ||||
"sh": "vue-cli-service serve --mode shdevelopment", | "sh": "vue-cli-service serve --mode shdevelopment", | ||||
"local": "vue-cli-service serve --mode localdevelopment", | "local": "vue-cli-service serve --mode localdevelopment", | ||||
@@ -302,6 +302,7 @@ export function houseListWhenAddUser(query) { | |||||
params:query | params:query | ||||
}) | }) | ||||
} | } | ||||
// 获取项目列表 | |||||
export function findHouseByUser(query) { | export function findHouseByUser(query) { | ||||
return request({ | return request({ | ||||
url: '/autoSR/zkhouse/findHouseByUser', | 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() | NProgress.done() | ||||
const status = Number(res.status) || 200 | const status = Number(res.status) || 200 | ||||
const message = res.data.msg || errorCode[status] || errorCode['default'] | 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++ | idx++ | ||||
if(idx==1){ | if(idx==1){ | ||||
Message({ | Message({ | ||||
@@ -57,37 +57,37 @@ | |||||
<span v-if="data.level == 1" style="display: flex; align-items: center"> | <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="" /> | <img class="levelimg3" src="/img/add1.png" alt="" /> | ||||
<span>添加二级</span> | <span>添加二级</span> | ||||
</span> | </span> | ||||
<span style="margin-left: 10px" v-if="data.isInterval!=0"> | <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> | </span> | ||||
<span v-if="data.level == 2" style="display: flex; align-items: center" > | <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="" /> | <img class="levelimg3" src="/img/add2.png" alt="" /> | ||||
<span>添加三级</span> | <span>添加三级</span> | ||||
</span> | </span> | ||||
<span style="margin-left: 10px"> | <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> | <el-button class="editor" v-if="labelmodelshow" type="text" size="mini" @click="() => moxingEdit(node, data)">编辑模型</el-button> | ||||
</span> | </span> | ||||
<span style="margin-left: 10px"> | <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> | </span> | ||||
<span v-if="data.level == 3" style="display: flex; align-items: center" > | <span v-if="data.level == 3" style="display: flex; align-items: center" > | ||||
<span style="margin-left: 10px"> | <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> | ||||
<span style="margin-left: 10px" v-if="labelmodelshow"> | <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> | ||||
<span style="margin-left: 10px"> | <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> | </span> | ||||
</span> | </span> | ||||
@@ -237,6 +237,15 @@ | |||||
例如:意向面积:120平,场景:我想要一个120平的;</div> | 例如:意向面积:120平,场景:我想要一个120平的;</div> | ||||
</div> | </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"> | <div style="display: flex; justify-content: center; margin-top: 40px"> | ||||
<button | <button | ||||
style=" | style=" | ||||
@@ -387,42 +396,42 @@ export default { | |||||
data() { | data() { | ||||
return { | return { | ||||
dynamiclist: [], | 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, | moxingVisible: false, | ||||
innerVisible: false, | innerVisible: false, | ||||
form: { | form: { | ||||
keywordsName: '', | |||||
id: '', | |||||
keywordsId: '', | |||||
distance: 10, | |||||
sceneDesc:'', | |||||
originalExpression: '' | |||||
keywordsName: "", | |||||
id: "", | |||||
keywordsId: "", | |||||
distance: 10, | |||||
sceneDesc: "", | |||||
originalExpression: "", | |||||
}, | }, | ||||
formLabelWidth: "120px", | formLabelWidth: "120px", | ||||
dialogFormVisible: false, | dialogFormVisible: false, | ||||
dialogVisible: false, | dialogVisible: false, | ||||
dialogVisible2:false, | |||||
dialogVisible2: false, | |||||
orgType: localStorage.getItem("orgType"), | orgType: localStorage.getItem("orgType"), | ||||
isshowage: false, | isshowage: false, | ||||
treeList: [], //树形数据 | treeList: [], //树形数据 | ||||
@@ -432,11 +441,11 @@ export default { | |||||
addForm: { | addForm: { | ||||
name: "", | name: "", | ||||
endName: "", | endName: "", | ||||
sceneDesc: '' | |||||
sceneDesc: "", | |||||
}, | }, | ||||
addForm2:{ | |||||
name:'', | |||||
mustSelected:0 | |||||
addForm2: { | |||||
name: "", | |||||
mustSelected: 0, | |||||
}, | }, | ||||
level: 0, | level: 0, | ||||
pid: "", | pid: "", | ||||
@@ -450,14 +459,15 @@ export default { | |||||
orgCode: "", | orgCode: "", | ||||
sort: "", | sort: "", | ||||
level: "", | level: "", | ||||
desc: '' | |||||
desc: "", | |||||
mustSelected: 1, // 是否必选 | |||||
}, | }, | ||||
amountintervalname: "", | amountintervalname: "", | ||||
isInterval: "", | isInterval: "", | ||||
orgCodes:'' | |||||
orgCodes: "", | |||||
}; | }; | ||||
}, | }, | ||||
computed: { | |||||
computed: { | |||||
...mapGetters(["permissions"]), | ...mapGetters(["permissions"]), | ||||
}, | }, | ||||
created() { | created() { | ||||
@@ -470,251 +480,292 @@ export default { | |||||
}, | }, | ||||
methods: { | 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 { | } 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`, | url: `/autoSR/zk/keywords/add`, | ||||
method: "post", | method: "post", | ||||
data: { | data: { | ||||
pid: 0, | pid: 0, | ||||
name: this.addForm2.name, | name: this.addForm2.name, | ||||
mustSelected: this.addForm2.mustSelected, | mustSelected: this.addForm2.mustSelected, | ||||
level:1, | |||||
orgCode:orgCode, | |||||
houseId:this.houseId | |||||
level: 1, | |||||
orgCode: orgCode, | |||||
houseId: this.houseId, | |||||
}, | }, | ||||
}).then((res) => { | }).then((res) => { | ||||
if(res.code ==0){ | |||||
this.dialogVisible2=false; | |||||
this.getHouse() | |||||
}else{ | |||||
if (res.code == 0) { | |||||
this.dialogVisible2 = false; | |||||
this.getHouse(); | |||||
} else { | |||||
this.$message({ | this.$message({ | ||||
message: res.msg||'添加失败', | |||||
message: res.msg || "添加失败", | |||||
type: "error", | type: "error", | ||||
}); | }); | ||||
} | } | ||||
}) | |||||
}else{ | |||||
}); | |||||
} else { | |||||
this.$message({ | this.$message({ | ||||
message: "内容不能为空", | message: "内容不能为空", | ||||
type: "warning", | type: "warning", | ||||
@@ -722,9 +773,9 @@ export default { | |||||
return; | return; | ||||
} | } | ||||
}, | }, | ||||
append1(){ | |||||
this.addForm2.name=''; | |||||
this.dialogVisible2=true; | |||||
append1() { | |||||
this.addForm2.name = ""; | |||||
this.dialogVisible2 = true; | |||||
}, | }, | ||||
// 获取模板数据 | // 获取模板数据 | ||||
getHouse() { | getHouse() { | ||||
@@ -746,7 +797,7 @@ export default { | |||||
this.amountintervalname = data.name; | this.amountintervalname = data.name; | ||||
this.addForm.name = ""; | this.addForm.name = ""; | ||||
this.addForm.endName = ""; | this.addForm.endName = ""; | ||||
this.addForm.sceneDesc = ''; | |||||
this.addForm.sceneDesc = ""; | |||||
this.pid = data.id; | this.pid = data.id; | ||||
this.level = data.level + 1; | this.level = data.level + 1; | ||||
this.orgCode = data.orgCode; | this.orgCode = data.orgCode; | ||||
@@ -761,11 +812,11 @@ export default { | |||||
this.dialogFormVisible = true; | this.dialogFormVisible = true; | ||||
}, | }, | ||||
houseChange() { | 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); | console.log(this.orgCodes); | ||||
this.getHouse(); | this.getHouse(); | ||||
}, | }, | ||||
@@ -810,8 +861,8 @@ export default { | |||||
level: this.level, | level: this.level, | ||||
orgCode: this.orgCode, | orgCode: this.orgCode, | ||||
isInterval: this.isInterval, | isInterval: this.isInterval, | ||||
houseId:this.houseId, | |||||
desc:this.addForm.sceneDesc, | |||||
houseId: this.houseId, | |||||
desc: this.addForm.sceneDesc, | |||||
}, | }, | ||||
}).then((res) => { | }).then((res) => { | ||||
if (res.code == 0) { | if (res.code == 0) { | ||||
@@ -850,7 +901,7 @@ export default { | |||||
}); | }); | ||||
}); | }); | ||||
} | } | ||||
this.zkhousePage() | |||||
this.zkhousePage(); | |||||
} | } | ||||
}); | }); | ||||
}, | }, | ||||
@@ -878,7 +929,7 @@ export default { | |||||
method: "get", | method: "get", | ||||
params: { | params: { | ||||
id: this.deleteId, | id: this.deleteId, | ||||
houseId:this.houseId | |||||
houseId: this.houseId, | |||||
}, | }, | ||||
}).then((res) => { | }).then((res) => { | ||||
if (res.code == 0) { | if (res.code == 0) { | ||||
@@ -902,6 +953,7 @@ export default { | |||||
}, | }, | ||||
//编辑 | //编辑 | ||||
ddeditor(node, data) { | ddeditor(node, data) { | ||||
console.log(data, "adjklsajdlk"); | |||||
this.frosasd = { | this.frosasd = { | ||||
name: "", | name: "", | ||||
endName: "", | endName: "", | ||||
@@ -911,7 +963,8 @@ export default { | |||||
orgCode: "", | orgCode: "", | ||||
sort: "", | sort: "", | ||||
level: "", | level: "", | ||||
desc: '' | |||||
desc: "", | |||||
mustSelected: 1, | |||||
}; | }; | ||||
if (data.isInterval == 0) { | if (data.isInterval == 0) { | ||||
this.frosasd.isInterval = 0; | this.frosasd.isInterval = 0; | ||||
@@ -926,6 +979,9 @@ export default { | |||||
this.frosasd.endName = ""; | this.frosasd.endName = ""; | ||||
this.frosasd.isInterval = 1; | this.frosasd.isInterval = 1; | ||||
} | } | ||||
if (data.level == 1) { | |||||
this.frosasd.mustSelected = data.mustSelected; | |||||
} | |||||
this.frosasd.id = data.id; | this.frosasd.id = data.id; | ||||
this.frosasd.name = data.name; | this.frosasd.name = data.name; | ||||
this.frosasd.pid = data.pid; | this.frosasd.pid = data.pid; | ||||
@@ -967,7 +1023,7 @@ export default { | |||||
this.houseId = localStorage.getItem("houseId"); | this.houseId = localStorage.getItem("houseId"); | ||||
} else { | } else { | ||||
this.houseId = res.data[0].id; | this.houseId = res.data[0].id; | ||||
this.orgCodes=res.data[0].orgCode; | |||||
this.orgCodes = res.data[0].orgCode; | |||||
} | } | ||||
// this.houseId = res.data[0].id; | // this.houseId = res.data[0].id; | ||||
// 列表获取 | // 列表获取 | ||||
@@ -979,11 +1035,11 @@ export default { | |||||
axios({ | axios({ | ||||
url: `/autoSR/zk/keywords/update`, | url: `/autoSR/zk/keywords/update`, | ||||
method: "post", | method: "post", | ||||
data: {...this.frosasd,houseId: this.houseId}, | |||||
data: { ...this.frosasd, houseId: this.houseId }, | |||||
}).then((res) => { | }).then((res) => { | ||||
if (res.code == 0) { | if (res.code == 0) { | ||||
this.getHouse() | |||||
that.isshowage=false; | |||||
this.getHouse(); | |||||
that.isshowage = false; | |||||
that.treeList.forEach((item, index) => { | that.treeList.forEach((item, index) => { | ||||
item.children.forEach((asd, indexesd) => { | item.children.forEach((asd, indexesd) => { | ||||
if (asd.id == that.frosasd.id) { | if (asd.id == that.frosasd.id) { | ||||
@@ -1031,18 +1087,18 @@ export default { | |||||
</script> | </script> | ||||
<style scoped="scoped" lang="scss" > | <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; | padding: 15px; | ||||
outline: none; | outline: none; | ||||
border:1px solid #409EFF; | |||||
border: 1px solid #409eff; | |||||
border-radius: 10px; | border-radius: 10px; | ||||
} | } | ||||
.box-center { | .box-center { | ||||
@@ -1059,13 +1115,13 @@ overflow: hidden; | |||||
padding-left: 15px; | padding-left: 15px; | ||||
padding-bottom: 60px; | padding-bottom: 60px; | ||||
} | } | ||||
.addlevl{ | |||||
.addlevl { | |||||
width: 100px; | width: 100px; | ||||
border: 1px solid #2671E2; | |||||
color: #2671E2; | |||||
border: 1px solid #2671e2; | |||||
color: #2671e2; | |||||
text-align: center; | text-align: center; | ||||
line-height: 30rpx; | line-height: 30rpx; | ||||
border-radius:4px ; | |||||
border-radius: 4px; | |||||
margin-top: 10px; | margin-top: 10px; | ||||
margin-left: 18px; | margin-left: 18px; | ||||
} | } | ||||
@@ -1139,21 +1195,20 @@ overflow: hidden; | |||||
border: 1px solid #e0e0e0; | border: 1px solid #e0e0e0; | ||||
} | } | ||||
} | } | ||||
/deep/ .el-dialog--center{ | |||||
/deep/ .el-dialog--center { | |||||
border-radius: 8px; | border-radius: 8px; | ||||
.el-dialog__title{ | |||||
.el-dialog__title { | |||||
font-weight: bold; | 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 { | .itemlist { | ||||
display: flex; | display: flex; | ||||
justify-content: space-between; | justify-content: space-between; | ||||
@@ -29,7 +29,13 @@ | |||||
</el-table-column> | </el-table-column> | ||||
<el-table-column prop="signalDevice" label="设备信号"> | <el-table-column prop="signalDevice" label="设备信号"> | ||||
</el-table-column> | </el-table-column> | ||||
<el-table-column prop="fileCount" label="待上传文件数"> | |||||
</el-table-column> | |||||
<el-table-column prop="stateInterval" label="更新间隔时长"> | <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-column> | ||||
</el-table> | </el-table> | ||||
</div> | </div> | ||||
@@ -310,7 +310,6 @@ | |||||
filterable | filterable | ||||
collapse-tags | collapse-tags | ||||
placeholder="请选择" | placeholder="请选择" | ||||
> | > | ||||
<el-option | <el-option | ||||
v-for="item in templateList" | v-for="item in templateList" | ||||
@@ -321,31 +320,31 @@ | |||||
</el-option> | </el-option> | ||||
</el-select> | </el-select> | ||||
</div> | </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> | ||||
<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> | ||||
</div> | |||||
<!-- 表格 --> | <!-- 表格 --> | ||||
<div class="cen-tab"> | <div class="cen-tab"> | ||||
@@ -372,6 +371,13 @@ | |||||
@click="reWriteagain(row)" | @click="reWriteagain(row)" | ||||
>重新转写</el-button | >重新转写</el-button | ||||
> | > | ||||
<el-button | |||||
type="text" | |||||
v-if="permissions.rec_index_delete" | |||||
@click="deleteCS(row)" | |||||
> | |||||
删除接待 | |||||
</el-button> | |||||
</template> | </template> | ||||
</avue-crud> | </avue-crud> | ||||
</div> | </div> | ||||
@@ -420,6 +426,8 @@ | |||||
<script> | <script> | ||||
import { mapGetters } from "vuex"; | import { mapGetters } from "vuex"; | ||||
import { exportMethodPost } from "@/util/util"; | import { exportMethodPost } from "@/util/util"; | ||||
import { Loading } from "element-ui"; | |||||
export default { | export default { | ||||
data() { | data() { | ||||
return { | return { | ||||
@@ -672,6 +680,9 @@ export default { | |||||
if (this.$route.query.houseId) { | if (this.$route.query.houseId) { | ||||
this.searchForm.projectId = this.$route.query.houseId; | this.searchForm.projectId = this.$route.query.houseId; | ||||
} | } | ||||
if (this.$route.query.marketingBusiness) { | |||||
this.searchForm.marketingBusiness = [this.$route.query.marketingBusiness]; | |||||
} | |||||
if ( | if ( | ||||
this.$route.query.endDate && | this.$route.query.endDate && | ||||
@@ -694,6 +705,26 @@ export default { | |||||
}, | }, | ||||
methods: { | 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() { | findQuestionList() { | ||||
axios({ | axios({ | ||||
@@ -732,7 +763,7 @@ export default { | |||||
// 转写方式数据获取 | // 转写方式数据获取 | ||||
findTransferMethod() { | findTransferMethod() { | ||||
this.$api.api.findTransferMethod().then((res) => { | this.$api.api.findTransferMethod().then((res) => { | ||||
console.log(res,' sajdklasjdklasjdklsajkdls') | |||||
console.log(res, " sajdklasjdklasjdklsajkdls"); | |||||
if (res.data) { | if (res.data) { | ||||
this.projectList = res.data || []; | this.projectList = res.data || []; | ||||
this.languageList = (res.data && res.data[0].list) || []; | this.languageList = (res.data && res.data[0].list) || []; | ||||
@@ -745,6 +776,12 @@ export default { | |||||
this.$message.error("请先选择转写方式"); | this.$message.error("请先选择转写方式"); | ||||
return; | return; | ||||
} | } | ||||
Loading.service({ | |||||
lock: true, | |||||
text: "Loading", | |||||
spinner: "el-icon-loading", | |||||
background: "rgba(0, 0, 0, 0.7)", | |||||
}); | |||||
this.$api.api | this.$api.api | ||||
.toTransferData({ | .toTransferData({ | ||||
id: this.currentRow.id, | id: this.currentRow.id, | ||||
@@ -755,6 +792,10 @@ export default { | |||||
this.dialogVisible = false; | this.dialogVisible = false; | ||||
this.getorgCode(); | this.getorgCode(); | ||||
this.$message.success("操作成功"); | this.$message.success("操作成功"); | ||||
Loading.close(); | |||||
}) | |||||
.catch(() => { | |||||
Loading.close(); | |||||
}); | }); | ||||
}, | }, | ||||
reWriteagain(row) { | reWriteagain(row) { | ||||
@@ -850,7 +891,7 @@ export default { | |||||
this.$api.api.findbypage(obj).then((res) => { | this.$api.api.findbypage(obj).then((res) => { | ||||
// console.log(res); | // console.log(res); | ||||
if (res.code == 0) { | if (res.code == 0) { | ||||
this.tableData = res.data.records||[]; | |||||
this.tableData = res.data.records || []; | |||||
this.page.total = res.data.total; | this.page.total = res.data.total; | ||||
// 表格中设置ref属性,在数据渲染之后或者updated()之后 | // 表格中设置ref属性,在数据渲染之后或者updated()之后 | ||||
this.$nextTick(() => { | this.$nextTick(() => { | ||||
@@ -945,7 +986,7 @@ export default { | |||||
} | } | ||||
this.houseChange(); | this.houseChange(); | ||||
// 获取转写方式 | // 获取转写方式 | ||||
this.findTransferMethod() | |||||
this.findTransferMethod(); | |||||
// 获取销讲业务 | // 获取销讲业务 | ||||
this.getMarketingBusiness(); | 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-radio-group> | ||||
</el-form-item> | </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-form-item label="联系人" prop="linkman"> | ||||
<el-input | <el-input | ||||
v-model="ruleForm.linkman" | v-model="ruleForm.linkman" | ||||
@@ -892,6 +899,7 @@ export default { | |||||
transliterationMethod: '',//转写方式 | transliterationMethod: '',//转写方式 | ||||
language:'',//语言 | language:'',//语言 | ||||
shortRecordingSetting: 0, // 短录音是否转写 是否转写短录音 0 转写(默认) 1 不转写 | shortRecordingSetting: 0, // 短录音是否转写 是否转写短录音 0 转写(默认) 1 不转写 | ||||
auditReception: 1, // 无效接待审核 0 审核 1不审核 | |||||
}, | }, | ||||
ruleForm1: {}, | ruleForm1: {}, | ||||
optionsagentId: [], | optionsagentId: [], | ||||