Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 

744 рядки
24 KiB

  1. <template>
  2. <div class="box-center">
  3. <div class="app-top">
  4. <el-radio-group v-model="keyType" size="medium" @change="search">
  5. <el-radio-button :label="0">需求挖掘</el-radio-button>
  6. <el-radio-button :label="1">销讲词</el-radio-button>
  7. <el-radio-button :label="2">客户标签</el-radio-button>
  8. <el-radio-button :label="3">违禁词</el-radio-button>
  9. </el-radio-group>
  10. <el-input size="small" clearable style="margin: 0 10px;width: 220px" v-model="value" placeholder="标签名称"></el-input>
  11. <el-select
  12. v-if="orgType==0"
  13. v-model="houseId"
  14. @change="houseChange"
  15. placeholder="请选择"
  16. filterable
  17. >
  18. <el-option
  19. v-for="item in houseList"
  20. :key="item.id"
  21. :label="item.propertyName"
  22. :value="item.id"
  23. >
  24. </el-option>
  25. </el-select>
  26. <el-button size="small" type="primary" @click="search()">筛选</el-button>
  27. <el-button size="small" type="text" @click="Emptycondition()">清空筛选条件</el-button>
  28. </div>
  29. <div class="app-box">
  30. <el-table
  31. :data="tableData"
  32. stripe
  33. :load="loading"
  34. :header-cell-style="{background:'#F7F8FA',borderColor:'#E0E0E0',color:'#606775'}"
  35. style="width: 100%">
  36. <el-table-column
  37. prop="level1Name"
  38. :label="keyType==3?'违禁词':'画像一级'"
  39. align="center">
  40. </el-table-column>
  41. <el-table-column
  42. v-if="keyType!=3"
  43. prop="level2Name"
  44. label="画像二级"
  45. align="center">
  46. </el-table-column>
  47. <el-table-column
  48. v-if="keyType!=3"
  49. prop="level3Name"
  50. :label="keyType==0?'挖掘话术':'画像三级'"
  51. align="center">
  52. </el-table-column>
  53. <el-table-column
  54. prop="showFormatExpression"
  55. label="匹配模型"
  56. width="330"
  57. align="center">
  58. <template slot-scope="scope">
  59. <el-tooltip class="item" effect="dark" placement="top">
  60. <div v-html="scope.row.showFormatExpression" slot="content" style="max-width: 530px;"></div>
  61. <div class="hidden-tooltip">{{scope.row.showFormatExpression}}</div>
  62. </el-tooltip>
  63. </template>
  64. </el-table-column>
  65. <el-table-column
  66. prop="distance"
  67. label="匹配距离"
  68. align="center">
  69. </el-table-column>
  70. <el-table-column
  71. prop="updateUserName"
  72. label="最后修改人"
  73. align="center">
  74. </el-table-column>
  75. <el-table-column
  76. prop="updateTime"
  77. label="最后修改时间"
  78. width="110"
  79. align="center">
  80. </el-table-column>
  81. <el-table-column label="操作" width="140" fixed="right" align="center">
  82. <template slot-scope="scope">
  83. <el-button type="text" @click="editFun(scope.row)">编辑</el-button>
  84. <el-button type="text" @click="deleteFun(scope.row)">删除</el-button>
  85. </template>
  86. </el-table-column>
  87. </el-table>
  88. <div class="block">
  89. <div class="blockbox">
  90. <el-pagination
  91. @size-change="handleSizeChange"
  92. @current-change="handleCurrentChange"
  93. :current-page="pageNum"
  94. :page-sizes="[10, 20, 30, 40,50,100]"
  95. :page-size="pageSize"
  96. layout="total, sizes, prev, pager, next, jumper"
  97. :total="total">
  98. </el-pagination>
  99. </div>
  100. </div>
  101. </div>
  102. <el-dialog
  103. title="编辑模型"
  104. @open="openModel"
  105. :close-on-click-modal="false"
  106. :visible.sync="dialogVisible"
  107. >
  108. <el-dialog
  109. title="匹配规则"
  110. :visible.sync="innerVisible"
  111. append-to-body>
  112. <div style="max-height: 430px;overflow: auto">
  113. <p><b>匹配距离</b>:关键字匹配字数距离,主要针对near/after/w- 生效,w- 的字数统计从挖掘话术后,客户的第一句话开始统计;</p>
  114. <p style="padding-left: 15px">例如:设置为10,面积 after 140</br>
  115. 命中话术:"想买一个面积在140平的"</br>
  116. 超出10个字,有关键字不命中话术参考:“房屋面积啊,你们这边有多大的,有没有140平左右的”;</p>
  117. <p><b>or(或)</b>:多个关键词,匹配上1个就行</p>
  118. <p style="padding-left: 15px">例如标签:自住</br>
  119. 匹配模型:自己住 or 给自己</br>
  120. 命中话术:我们自己住/给自己买的</p>
  121. <p><b>and not(非)</b>:排除反面意思</p>
  122. <p style="padding-left: 15px">例如:北京户口,</br>
  123. 匹配模型:是北京户口 and not 不是北京户口</br>
  124. 命中话术:我是北京户口;</br>
  125. 反面话术:我不是北京户口</p>
  126. <p><b>near ( 临近)</b>:1个关键词前后一定范围出现过另一个关键词就算命中,有距离限制</p>
  127. <p style="padding-left: 15px">例如标签:购房预算 140w</br>
  128. 匹配模型:预算 near 140</br>
  129. 命中话术:我的预算是140w或大概140w的购房预算</p>
  130. <p><b>after(后面)</b>:一段文本出现2个关键词,并且按照先后的顺序即算命中,有距离限制</p>
  131. <p style="padding-left: 15px">例如标签:意向面积 140平</br>
  132. 匹配模型: 面积 after 140 ,140在面积后面才算生效;</br>
  133. 命中话术:想买一个面积在140平的;</p>
  134. <p><b>answer(挖掘话术业务)</b>:顾问执行了挖掘话术,客户回答结果,有距离限制,从客户话术文本开始</p>
  135. <p style="padding-left: 15px">例如标签:北京户口</br>
  136. 匹配模型:(w-是 or w-有) and not (w-不是 or w-没有)</br>
  137. 命中话术:销售:你有北京户口吗?</br>
  138. 客户:有的;</p>
  139. <p><b>-n(命中距离)</b>:near/after-n ,单个near/after的匹配距离,n大于0,小于500</p>
  140. <p style="padding-left: 15px">例如 :面积 after-10 140</br>
  141. 10个字内,命中话术参考:"想买一个面积在140平的"</br>
  142. 超出10个字,有关键字不命中话术参考:“房屋面积啊,你们这边有多大的,有没有140平左右的”;</p>
  143. <p><b>注意</b>:-n 与 near/after/answer 之间<b>不能有空格</b>;</p></br>
  144. <p><b>注意</b>:优先匹配关键词可以排在前面;</p>
  145. </div>
  146. </el-dialog>
  147. <el-form ref="form" size="mini" :inline="true" :model="form" label-position="right">
  148. <el-form-item :label="keyType==0?'挖掘话术:':keyType==3?'违禁词:':'标签名称:'">
  149. <div style="max-width:400px;min-width: 200px;">{{form.keywordsName}}</div>
  150. </el-form-item>
  151. <el-form-item label="after,near,answer 匹配距离:">
  152. <el-input-number v-model="form.distance" controls-position="right" :min="0" :max="500"></el-input-number></el-input><span style="color:red;margin-left:10px">*请输入0~500内的整数</span> <el-button type="text" style="margin-left:30px" @click="innerVisible=true">规则说明</el-button>
  153. </el-form-item>
  154. <div contentEditable="true"
  155. @click="myeditorenter($event)"
  156. @keypress.enter="myeditorenter($event)"
  157. @blur="saveRange"
  158. @paste="onPaste"
  159. class="editDiv"
  160. id="huashuModel">
  161. </div>
  162. <div v-if="keyType==0||dynamiclist.length">{{keyType==0?'匹配标签:':'需求挖掘匹配:'}}</div>
  163. <!-- <%-- keyType=0 需求挖掘--%> -->
  164. <div class="dynamicbox" v-if="keyType==0">
  165. <div v-for="(item,index) in dynamiclist" :key="item" class="itemlist">
  166. <el-select size="small" v-model="item.markid" @change="checkrepeat" placeholder="标签" clearable>
  167. <el-option v-for="(mark,i) in wajueList" :disabled="mark.disabled" :key="i" :label="mark.name" :value="mark.id"></el-option>
  168. </el-select>
  169. <div contentEditable="true"
  170. @click="myeditorenter($event)"
  171. @keypress.enter="myeditorenter($event)"
  172. @blur="saveRange"
  173. class="item-input"
  174. v-html="item.editValue"
  175. :id="'huashuModel'+index"></div>
  176. <el-button size="small" plain type="primary" @click="delItemFun(index)">删除</el-button>
  177. </div>
  178. </div>
  179. <div class="dynamicbox" v-else>
  180. <div v-for="item in dynamiclist" :key="item" class="itemlist">
  181. <el-input size="small" disabled style="width: 220px" v-model="item.question"></el-input>
  182. <div class="item-input" style="pointer-events: none;" v-html="item.editValue"></div>
  183. </div>
  184. </div>
  185. <div>
  186. <el-button v-if="keyType==0" :disabled="dynamiclist.length==wajueList.length" @click="addItemFun" icon="el-icon-plus" type="primary" size="mini" style="width: 120px;margin:20px 0;"></el-button>
  187. </div>
  188. <el-form-item label="插入节点:">
  189. <el-button size="mini" type="primary" style="margin-left:8px;" v-for="(item,index) in taglist" :key="index" @click="insertTag(item,index)">{{item.label}}</el-button>
  190. </el-form-item>
  191. </el-form>
  192. <span slot="footer" class="dialog-footer">
  193. <el-button @click="dialogVisible = false">取 消</el-button>
  194. <el-button type="primary" @click="saveFun">保 存</el-button>
  195. </span>
  196. </el-dialog>
  197. </div>
  198. </template>
  199. <script>
  200. export default {
  201. data(){
  202. return {
  203. dynamiclist: [],
  204. taglist:[
  205. {
  206. label: 'or (或)',
  207. value: 'or'
  208. },
  209. {
  210. label: 'near (临近)',
  211. value: 'near'
  212. },
  213. {
  214. label: 'after (后面)',
  215. value: 'after'
  216. },
  217. {
  218. label: 'and not (非)',
  219. value: 'andnot'
  220. },
  221. // {
  222. // label: 'answer (问题)',
  223. // value: 'answer'
  224. // },
  225. ],
  226. form: {
  227. keywordsName: '',
  228. id: '',
  229. keywordsId: '',
  230. distance: 10,
  231. originalExpression: ''
  232. },
  233. innerVisible:false,
  234. innerVisible1:false,
  235. dialogVisible: false,
  236. value: '',
  237. keyType: 0,
  238. loading: false,
  239. currentPage: 1,
  240. tableData: [],
  241. type: '0',
  242. pageNum:1,
  243. pageSize:10,
  244. total:0,
  245. huashu: '',
  246. wajueList: [],
  247. level: '',
  248. houseId:'',
  249. orgType: '',
  250. houseList: []
  251. }
  252. },
  253. created(){
  254. this.houseId=localStorage.getItem("houseId");
  255. this.orgType = localStorage.getItem("orgType")
  256. this.orgType==0?this.zkhousePage():this.getorgCode()
  257. },
  258. methods: {
  259. // 获取项目列表
  260. zkhousePage() {
  261. this.$api.api.findHouseByUser({
  262. orgType: localStorage.getItem("orgType"),
  263. }).then((res) => {
  264. this.houseList = res.data;
  265. this.houseId = res.data[0].id;
  266. this.getorgCode();
  267. });
  268. },
  269. houseChange(){
  270. this.getorgCode()
  271. },
  272. // 校验是否已经选择过此标签
  273. checkrepeat(){
  274. this.wajueList.forEach(item=>{
  275. item.disabled = false
  276. })
  277. this.wajueList.forEach(item=>{
  278. this.dynamiclist.forEach(obj=>{
  279. if(item.id==obj.markid){
  280. item.disabled = true
  281. }
  282. })
  283. })
  284. },
  285. addItemFun(){
  286. this.dynamiclist.push({
  287. editValue: '',//匹配模型正则表达式
  288. markid:'',
  289. level: '',
  290. name:''
  291. })
  292. },
  293. delItemFun(index){
  294. this.wajueList.forEach(item=>{
  295. if(item.id==this.dynamiclist[index].markid){
  296. item.disabled = false
  297. }
  298. })
  299. this.dynamiclist.splice(index,1)
  300. document.getElementById('huashuModel').focus(); // 防止插入到外面,造成不可删除的操作
  301. },
  302. // 基于保存的光标插入内容 --用于失去焦点后再继续插入内容
  303. insertContent(str) {
  304. let selection, range = window._range;// 当前光标位置对象
  305. if (!window.getSelection) {
  306. range.pasteHTML(str);
  307. range.collapse(false);
  308. range.select();
  309. } else {
  310. selection = window.getSelection ? window.getSelection() : document.selection;
  311. range.collapse(false);
  312. let hasR = range.createContextualFragment(str);
  313. let hasR_lastChild = hasR.lastChild;
  314. while (hasR_lastChild && hasR_lastChild.nodeName.toLowerCase() == "br" && hasR_lastChild.previousSibling && hasR_lastChild.previousSibling.nodeName.toLowerCase() == "br") {
  315. let e = hasR_lastChild;
  316. hasR_lastChild = hasR_lastChild.previousSibling;
  317. hasR.removeChild(e);
  318. }
  319. range.insertNode(hasR);
  320. if (hasR_lastChild) {
  321. range.setEndAfter(hasR_lastChild);
  322. range.setStartAfter(hasR_lastChild);
  323. }
  324. selection.removeAllRanges();
  325. selection.addRange(range);
  326. }
  327. },
  328. // 失去焦点时保存光标位置,记录光标位置
  329. saveRange: () => {
  330. let selection = window.getSelection ? window.getSelection() : document.selection;
  331. if (!selection.rangeCount) return;
  332. let range = selection.createRange ? selection.createRange() : selection.getRangeAt(0);
  333. window._range = range;
  334. },
  335. // 回显模型数据,Dialog 的内容是懒渲染的,即在第一次被打开之前,传入的默认 slot 不会被渲染到 DOM 上,so在 open 事件回调中进行
  336. openModel(){
  337. this.$nextTick(()=>{
  338. let huashuModel = document.getElementById('huashuModel')
  339. huashuModel.innerHTML = this.form.originalExpression
  340. })
  341. },
  342. //格式化粘贴文本方法
  343. onPaste(event) {
  344. // var e = event || window.event
  345. // // 阻止默认粘贴
  346. // e.preventDefault();
  347. // // 粘贴事件有一个clipboardData的属性,提供了对剪贴板的访问
  348. // // clipboardData的getData(fomat) 从剪贴板获取指定格式的数据
  349. // var text = (e.originalEvent || e).clipboardData.getData('text/plain') || prompt('在这里输入文本');
  350. // //清除回车
  351. // text = text.replace(/\[\d+\]|\n|\r/ig,"")
  352. // // 插入
  353. // document.execCommand("insertText", false, text);
  354. let e = event || window.event
  355. let types = event.clipboardData.types
  356. // 粘贴事件有一个clipboardData的属性,提供了对剪贴板的访问
  357. let flag = false
  358. if (types && types.length > 0) {
  359. types.forEach(ele => {
  360. if (ele == 'Files') {
  361. flag = true
  362. }
  363. })
  364. }
  365. if (flag) {
  366. event.preventDefault()
  367. }
  368. },
  369. myeditorenter(e) {
  370. e.preventDefault();
  371. },
  372. // 插入节点
  373. insertHtmlAtCaret(html) {
  374. document.getElementById('huashuModel').focus();
  375. var sel, range;
  376. if (window.getSelection) {
  377. // IE9 and non-IE
  378. sel = window.getSelection();
  379. if (sel.getRangeAt && sel.rangeCount) {
  380. range = sel.getRangeAt(0);
  381. range.deleteContents();
  382. // Range.createContextualFragment() would be useful here but is
  383. // non-standard and not supported in all browsers (IE9, for one)
  384. var el = document.createElement("div");
  385. el.innerHTML = html;
  386. var frag = document.createDocumentFragment(),
  387. node, lastNode;
  388. while ((node = el.firstChild)) {
  389. lastNode = frag.appendChild(node);
  390. }
  391. range.insertNode(frag);
  392. // Preserve the selection
  393. if (lastNode) {
  394. range = range.cloneRange();
  395. range.setStartAfter(lastNode);
  396. range.collapse(true);
  397. sel.removeAllRanges();
  398. sel.addRange(range);
  399. }
  400. }
  401. } else if (document.selection && document.selection.type != "Control") {
  402. // IE < 9
  403. document.selection.createRange().pasteHTML(html);
  404. }
  405. },
  406. // 拿问题获取所在的标签数据
  407. findKeywordsById(keywordsId){
  408. axios({
  409. url: `/autoSR/zk/keywords/findKeywordsById`,
  410. method: 'get',
  411. params: {
  412. houseId: this.houseId,
  413. keywordsId: keywordsId,
  414. level: 1
  415. }
  416. }).then(res => {
  417. if (res.code==0){
  418. // console.log(res.data)
  419. this.wajueList = res.data
  420. if(this.wajueList&&this.wajueList.length){
  421. this.wajueList.forEach(item=>{
  422. item.disabled = false
  423. })
  424. this.wajueList.forEach(item=>{
  425. this.dynamiclist.forEach(obj=>{
  426. if(item.id==obj.markid){
  427. item.disabled = true
  428. }
  429. })
  430. })
  431. }
  432. }
  433. });
  434. },
  435. // 插入节点
  436. insertTag(item,index){
  437. if(index==4) {// answer
  438. this.huashu = ''
  439. this.innerVisible1 = true
  440. }else{
  441. if(window._range){
  442. this.insertContent("<span contentEditable='false' style='color:red'>"+item.value+"</span><text>&nbsp;</text>");
  443. }else{
  444. this.insertHtmlAtCaret("<span contentEditable='false' style='color:red'>"+item.value+"</span><text>&nbsp;</text>");
  445. }
  446. }
  447. },
  448. // 处理标签,删除不需要的标签格式
  449. delMark(str) {
  450. const hasStr = (str) => {
  451. let index = str.indexOf('<')
  452. let index1 = str.indexOf('>')
  453. if(index>0&&index1>0){
  454. let replaceStr= str.substring(index, index1+1)
  455. str= str.replace(replaceStr,'')
  456. hasStr(str)
  457. }
  458. }
  459. hasStr(str)
  460. },
  461. // 确认插入选择的话术
  462. clickOK(){
  463. this.innerVisible1 = false
  464. if(!this.huashu) {this.$message.error('请选择话术'); return ;}
  465. this.insertContent("<text>"+this.huashu+"</text><span contentEditable='false' style='color:red'>answer</span><text>&nbsp;</text>");
  466. },
  467. search(){
  468. this.pageNum = 1
  469. this.getorgCode()
  470. },
  471. //点击编辑按钮
  472. editFun(item){
  473. this.dialogVisible = true
  474. this.form.id = item.id
  475. if(this.keyType==0){// 挖掘话术类型
  476. // 回显标签模型数据
  477. if(item.answerList&&item.answerList.length){
  478. this.dynamiclist = item.answerList.map(obj=>{
  479. return {
  480. id: obj.id,
  481. mark: obj.level3Name?obj.level3Name:obj.level2Name,
  482. level: obj.level3Id?3:2,
  483. editValue: obj.originalExpression,
  484. markid: obj.level3Id?obj.level3Id:obj.level2Id
  485. }
  486. })
  487. // console.log(this.dynamiclist)
  488. }else{
  489. this.dynamiclist = []
  490. }
  491. this.form.keywordsName = item.level3Name
  492. this.form.distance = item.distance||10
  493. this.form.originalExpression = item.originalExpression||item.level3Name
  494. this.level = item.level2Id?2:1
  495. this.questionId = item.questionId
  496. this.form.keywordsId = item.level2Id?item.level2Id:item.level1Id
  497. this.findKeywordsById(item.level1Id)// 获取标签下拉数据
  498. }else if(this.keyType==3){// 违禁词
  499. this.form.keywordsName = item.level1Name
  500. this.level = 1
  501. this.form.distance = item.distance||10
  502. this.form.originalExpression = item.originalExpression||item.level1Name
  503. this.dynamiclist = []
  504. }else{
  505. this.form.keywordsId = item.level3Id?item.level3Id:item.level2Id
  506. this.level = item.level3Id?3:2
  507. this.form.keywordsName = item.level3Name||item.level2Name
  508. this.form.distance = item.distance||10
  509. this.form.originalExpression = item.originalExpression||item.level3Name||item.level2Name
  510. if(item.answerList&&item.answerList.length){
  511. this.dynamiclist = item.answerList.map(obj=>{
  512. return {
  513. question: obj.question,
  514. editValue: obj.originalExpression
  515. }
  516. })
  517. }else{
  518. this.dynamiclist = []
  519. }
  520. }
  521. },
  522. // 删除列表
  523. deleteFun(item){
  524. this.$alert(item.keywordsName, '确定删除该条数据吗', {
  525. confirmButtonText: '确定',
  526. callback: action => {
  527. axios({
  528. url: `/autoSR/zk/keymodel/delKeywordsModel`,
  529. method: 'get',
  530. params: {
  531. id: item.id,
  532. houseId: this.houseId
  533. }
  534. }).then(data => {
  535. if(data.code==0){
  536. this.getorgCode()
  537. }
  538. }).catch((e)=>{
  539. })
  540. }
  541. });
  542. },
  543. // 处理模型 关键词加#号
  544. replaceFun(str){
  545. let temp = str
  546. temp = temp.replace(/<text>\&nbsp\;<\/text>/g,'');
  547. temp = temp.replace(/\&nbsp\;/g,'');
  548. temp = temp.replace(/<text>/g,'');
  549. temp = temp.replace(/<\/text>/g,'');
  550. temp = temp.replace(/<span contenteditable="false" style="color:red">/g,' #');// 后台返回是这样的,变了,需要也处理一下
  551. temp = temp.replace(/<span style="color:red" contenteditable="false">/g,' #');
  552. temp = temp.replace(/<\/br>/g,'')
  553. temp = temp.replace(/<br>/g,'')
  554. temp = temp.replace(/<\/span>/g,'#')
  555. // console.log('处理前temp',temp);
  556. this.delMark(temp);
  557. // console.log(temp);
  558. return temp
  559. },
  560. //修改保存标签模型
  561. saveFun(){
  562. if(this.cansave) return ; // 防止多次点击
  563. this.cansave = true;
  564. let text = document.getElementById('huashuModel');
  565. let answerList = []
  566. // console.log(text.innerHTML);
  567. // console.log(text.innerText);
  568. let temp = text.innerHTML
  569. if(this.form.distance=='') {this.$message.error('请输入距离'); return;}
  570. if(text.innerText=='') {this.$message.error('请输入标签模型'); return;}
  571. if(this.keyType==0){
  572. for (var i=0;i<this.dynamiclist.length;i++){
  573. // 使用for循环判断可以跳出循环
  574. if(!this.dynamiclist[i].markid) {this.$message.error('请完善要选择的标签'); return ;}
  575. this.wajueList.map(item1=>{
  576. if(item1.id==this.dynamiclist[i].markid){
  577. this.dynamiclist[i].level = item1.level
  578. this.dynamiclist[i].name = item1.name
  579. }
  580. })
  581. let huashuModel = document.getElementById('huashuModel'+i);
  582. if(huashuModel.innerText=='') {this.$message.error('请完善选择的标签模型'); return ;}
  583. this.dynamiclist[i].editValue = huashuModel.innerHTML
  584. this.dynamiclist[i].editText = huashuModel.innerText
  585. }
  586. answerList = this.dynamiclist.map(item=>{
  587. return {
  588. keyType: 2,
  589. id: item.id||null,
  590. level: item.level,
  591. keywordsId: item.markid,
  592. showFormatExpression: item.editText,//文本形式
  593. formatExpression: this.replaceFun(item.editValue),// 问题表达式,关键词加#号
  594. originalExpression: item.editValue // html==带span标签
  595. }
  596. })
  597. }
  598. axios({
  599. url: `/autoSR/zk/keymodel/updateKeywordsModel`,
  600. method: 'post',
  601. data: {
  602. id: this.form.id,
  603. questionId: this.keyType==0?this.questionId:'',
  604. houseId:this.houseId,
  605. keyType: this.keyType,
  606. level: this.level,
  607. keywordsId: this.form.keywordsId,
  608. keywordsName: this.form.keywordsName,
  609. formatExpression: this.replaceFun(temp),// 问题表达式,关键词加#号
  610. originalExpression: temp, // html==带span标签
  611. answerList: answerList,
  612. showFormatExpression: text.innerText,
  613. distance: this.form.distance // 距离
  614. }
  615. }).then(res => {
  616. this.cansave = false
  617. this.dialogVisible = false
  618. if(res.code==0){
  619. this.$message.success(res.data)
  620. this.getorgCode()
  621. }else{
  622. this.$message.error(res.msg)
  623. }
  624. }).catch((e)=>{
  625. this.cansave = false
  626. this.dialogVisible = false
  627. })
  628. },
  629. //清空筛选条件
  630. Emptycondition(){
  631. this.value='';
  632. this.keyType = 0
  633. this.pageNum =1;
  634. this.getorgCode()
  635. },
  636. //初始化
  637. getorgCode(){
  638. this.loading= true
  639. this.tableData=[];
  640. axios({
  641. url: `/autoSR/zk/keymodel/findKeywordsModel`,
  642. method: 'get',
  643. params: {
  644. houseId:this.houseId,
  645. current:this.pageNum,
  646. size:this.pageSize,
  647. keywordsName: this.value,
  648. keyType: this.keyType
  649. }
  650. }).then(res => {
  651. this.loading= false
  652. if(res.code==0){
  653. this.tableData = res.data.records ||[];
  654. this.total=res.data.total;
  655. }
  656. }).catch((e)=>{
  657. this.loading= false
  658. })
  659. },
  660. handleSizeChange(val) {
  661. console.log("每页条"+ val);
  662. this.pageSize=val;
  663. this.getorgCode()
  664. },
  665. handleCurrentChange(val) {
  666. console.log("当前页"+ val);
  667. this.pageNum=val;
  668. this.getorgCode()
  669. }
  670. }
  671. }
  672. </script>
  673. <style lang="scss" scoped >
  674. .box-center {
  675. width: 100%;
  676. padding: 5px 15px 40px;
  677. min-width: 1000px;
  678. }
  679. .app-top {
  680. margin-bottom: 20px;
  681. width: 100%;
  682. background: #ffffff;
  683. box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.04);
  684. border-radius: 4px;
  685. padding: 15px;
  686. }
  687. .block{
  688. width: 100%;
  689. margin-top: 5px;
  690. display: flex;
  691. }
  692. .blockbox{
  693. margin-left: auto;
  694. }
  695. .editDiv{
  696. width:100%;
  697. min-height:60px;
  698. max-height:120px;
  699. overflow:auto;
  700. margin-bottom:10px;
  701. padding: 15px;
  702. outline: none;
  703. border:1px solid #409EFF;
  704. border-radius: 10px;
  705. }
  706. .hidden-tooltip{
  707. width: 330px;
  708. overflow: hidden;
  709. text-overflow: ellipsis;
  710. white-space: nowrap;
  711. position: relative;
  712. }
  713. .itemlist{
  714. display: flex;
  715. justify-content: space-between;
  716. align-items: center;
  717. margin: 20px 0;
  718. }
  719. .item-input{
  720. width: 100%;
  721. padding: 4px 10px;
  722. outline: none;
  723. border:1px solid #409EFF;
  724. border-radius: 4px;
  725. overflow:auto;
  726. line-height: 24px;
  727. min-height: 24px;
  728. max-height: 100px;
  729. margin: 0 10px;
  730. }
  731. .el-dialog{
  732. width: 800px
  733. }
  734. .el-dialog__body{
  735. max-height: 400px;
  736. overflow: auto;
  737. }
  738. </style>