orderEdit.vue 41 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069
  1. <template>
  2. <div class="order-edit-container layout-padding">
  3. <el-row :gutter="15" class="h100">
  4. <!-- 左边工单信息 -->
  5. <el-col :span="12" class="left-content mb20 h100">
  6. <el-scrollbar class="box pd20">
  7. <el-form :model="state.ruleForm" ref="ruleFormRef" label-width="110px" label-position="right" scroll-to-error v-loading="state.formLoading">
  8. <p class="border-title mb10">来电信息</p>
  9. <el-row :gutter="0">
  10. <!-- 来源渠道 -->
  11. <el-col :span="12">
  12. <!-- 手动创建 -->
  13. <template v-if="state.createFrom === 'manual'">
  14. <el-form-item label="来源渠道" prop="channel" :rules="[{ required: true, message: '请选择来源渠道', trigger: 'change' }]">
  15. <el-select
  16. v-model="state.ruleForm.channel"
  17. placeholder="请选择来源渠道"
  18. class="w100"
  19. @change="
  20. () => {
  21. ruleFormRef.resetFields('fromPhone');
  22. state.ruleForm.fromPhone = '';
  23. }
  24. "
  25. >
  26. <el-option v-for="item in state.channelOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
  27. </el-select>
  28. </el-form-item>
  29. </template>
  30. <!-- 来电弹单 -->
  31. <template v-else-if="state.createFrom === 'tel'">
  32. <el-form-item label="来源渠道">
  33. <span>[{{ telStatusInfo.telsNo }}]</span>
  34. </el-form-item>
  35. </template>
  36. <!-- 互联网来信 -->
  37. <template v-else-if="state.createFrom === 'letter'">
  38. <el-form-item label="来源渠道">
  39. <span>[{{ telStatusInfo.telsNo }}]</span>
  40. </el-form-item>
  41. </template>
  42. </el-col>
  43. <!-- 转接来源 -->
  44. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  45. <!-- 手动创建 -->
  46. <template v-if="state.createBy === 'manual'">
  47. <el-form-item label="转接来源" prop="transferPhone"> 暂无 </el-form-item>
  48. </template>
  49. <!-- 来电弹单 -->
  50. <template v-if="state.createBy === 'tel'">
  51. <el-form-item label="转接来源" prop="transferPhone">
  52. <span>[{{ state.ruleForm.transferPhone }}]</span>
  53. </el-form-item>
  54. </template>
  55. <!-- 互联网来信 -->
  56. <template v-if="state.createBy === 'letter'">
  57. <el-form-item label="转接来源" prop="transferPhone">
  58. <span>[{{ state.ruleForm.transferPhone }}]</span>
  59. </el-form-item>
  60. </template>
  61. </el-col>
  62. <!-- 来电号码 -->
  63. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" v-if="state.ruleForm.channel === 'RGDH'">
  64. <!-- 手动创建 -->
  65. <template v-if="state.createFrom === 'manual'">
  66. <el-form-item
  67. label="来电号码"
  68. prop="fromPhone"
  69. :rules="[
  70. { required: true, message: '请填写来电号码', trigger: 'blur' },
  71. {
  72. pattern: /^((0\d{2,3}(-)?\d{7,8})|(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8})$/,
  73. message: '来电号码格式错误',
  74. trigger: 'blur',
  75. },
  76. ]"
  77. >
  78. <el-input v-model="state.ruleForm.fromPhone" placeholder="请填写来电号码" clearable @blur="searchHistory"> </el-input>
  79. </el-form-item>
  80. </template>
  81. <!-- 来电弹单 -->
  82. <template v-else-if="state.createFrom === 'tel'">
  83. <el-form-item label="来电号码">
  84. <span>[{{ telStatusInfo.telsNo }}]</span>
  85. </el-form-item>
  86. </template>
  87. <!-- 互联网来信 -->
  88. <template v-else-if="state.createFrom === 'letter'">
  89. <el-form-item label="来电号码">
  90. <span>[{{ phoneNumber }}]</span>
  91. </el-form-item>
  92. </template>
  93. </el-col>
  94. <!-- 服务坐席 -->
  95. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  96. <el-form-item label="服务坐席">
  97. <!-- 手动创建 -->
  98. <template v-if="state.createFrom === 'manual'">
  99. <span>{{ state.ruleForm.employeeName + '[' + state.ruleForm.employeeStaffNo + ']' }}</span>
  100. </template>
  101. <!-- 来电弹单 -->
  102. <template v-else-if="state.createFrom === 'tel'">
  103. <span>[{{ telStatusInfo.telsNo }}]</span>
  104. </template>
  105. <!-- 互联网来信 -->
  106. <template v-else-if="state.createFrom === 'letter'">
  107. <span>[{{ telStatusInfo.telsNo }}]</span>
  108. </template>
  109. </el-form-item>
  110. </el-col>
  111. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  112. <el-form-item label="来电/信人" prop="fromName" :rules="[{ required: true, message: '请填写来电/信人', trigger: 'blur' }]">
  113. <el-input v-model="state.ruleForm.fromName" placeholder="请填写来电/信人" clearable> </el-input>
  114. </el-form-item>
  115. </el-col>
  116. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  117. <el-form-item
  118. label="来电/信人性别"
  119. prop="fromGender"
  120. :rules="[{ required: true, message: '请选择来电/信人性别', trigger: 'change' }]"
  121. >
  122. <el-radio-group v-model="state.ruleForm.fromGender">
  123. <el-radio :label="item.key" v-for="item in state.genderOptions" :key="item.key">{{ item.value }}</el-radio>
  124. </el-radio-group>
  125. </el-form-item>
  126. </el-col>
  127. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  128. <el-form-item
  129. label="来电/信人身份"
  130. prop="identityType"
  131. :rules="[{ required: true, message: '请选择来电/信人身份', trigger: 'change' }]"
  132. >
  133. <el-radio-group v-model="state.ruleForm.identityType" @change="selectIdentity">
  134. <el-radio :label="item.key" v-for="item in state.identityTypeOptions" :key="item.key">{{ item.value }}</el-radio>
  135. </el-radio-group>
  136. </el-form-item>
  137. </el-col>
  138. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  139. <el-form-item label="证件类型" prop="licenceTypeObj" :rules="[{ required: false, message: '请选择证件类型', trigger: 'change' }]">
  140. <el-select
  141. v-model="state.ruleForm.licenceTypeObj"
  142. placeholder="请选择证件类型"
  143. class="w100"
  144. value-key="dicDataValue"
  145. @change="(val:any) => {
  146. state.ruleForm.licenceType = val.dicDataName;
  147. state.ruleForm.licenceTypeCode = val.dicDataValue;
  148. }
  149. "
  150. >
  151. <el-option v-for="item in state.licenceTypeOptions" :key="item.dicDataValue" :label="item.dicDataName" :value="item" />
  152. </el-select>
  153. </el-form-item>
  154. </el-col>
  155. <!-- 若“证件类型”有值,则证件号码必填 -->
  156. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  157. <el-form-item
  158. label="证件号码"
  159. prop="licenceNo"
  160. :rules="[
  161. { required: state.ruleForm.licenceTypeCode, message: '请填写证件号码', trigger: 'blur' },
  162. {
  163. pattern: licenceNoPattern,
  164. message: '证件号码格式错误',
  165. trigger: 'blur',
  166. },
  167. ]"
  168. >
  169. <el-input v-model="state.ruleForm.licenceNo" placeholder="请填写证件号码" clearable> </el-input>
  170. </el-form-item>
  171. </el-col>
  172. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  173. <el-form-item label="年龄段" prop="ageRangeObj" :rules="[{ required: false, message: '请选择年龄段', trigger: 'change' }]">
  174. <el-select
  175. v-model="state.ruleForm.ageRangeObj"
  176. placeholder="请选择年龄段"
  177. class="w100"
  178. value-key="dicDataValue"
  179. @change="(val:any) => {
  180. state.ruleForm.ageRange = val.dicDataName;
  181. state.ruleForm.ageRangeCode = val.dicDataValue;
  182. }
  183. "
  184. >
  185. <el-option v-for="item in state.ageRangeOptions" :key="item.dicDataValue" :label="item.dicDataName" :value="item" />
  186. </el-select>
  187. </el-form-item>
  188. </el-col>
  189. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  190. <el-form-item
  191. label="联系电话"
  192. prop="contact"
  193. :rules="[
  194. { required: true, message: '请填写联系电话', trigger: 'blur' },
  195. {
  196. pattern: /^((0\d{2,3}(-)?\d{7,8})|(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8})$/,
  197. message: '联系电话格式错误',
  198. trigger: 'blur',
  199. },
  200. ]"
  201. >
  202. <el-input v-model="state.ruleForm.contact" placeholder="请填写联系电话" clearable> </el-input>
  203. </el-form-item>
  204. </el-col>
  205. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  206. <el-form-item label="" prop="acceptSms" :rules="[{ required: false, message: '请选择', trigger: 'blur' }]">
  207. <el-checkbox v-model="state.ruleForm.acceptSms" label="受理短信" />
  208. <el-checkbox v-model="state.ruleForm.needContact" label="是否保密" />
  209. </el-form-item>
  210. </el-col>
  211. <!-- 当“来电/信人身份”为“企业”时必填 -->
  212. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  213. <el-form-item
  214. label="工作单位"
  215. prop="company"
  216. :rules="[{ required: state.ruleForm.identityType === 2, message: '请填写工作单位', trigger: 'blur' }]"
  217. >
  218. <el-input v-model="state.ruleForm.company" placeholder="请填写工作单位" clearable> </el-input>
  219. </el-form-item>
  220. </el-col>
  221. </el-row>
  222. <p class="border-title mb10">诉求信息</p>
  223. <el-row>
  224. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  225. <el-form-item label="工单编码"> {{ state.ruleForm.no }} </el-form-item>
  226. </el-col>
  227. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  228. <el-form-item label="工单标题" prop="title" :rules="[{ required: true, message: '请填写工单标题', trigger: 'blur' }]">
  229. <el-input v-model="state.ruleForm.title" placeholder="请填写工单标题" clearable> </el-input>
  230. </el-form-item>
  231. </el-col>
  232. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  233. <el-row :gutter="0">
  234. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  235. <el-form-item label="工单类型" prop="orderType" :rules="[{ required: true, message: '请选择工单类型', trigger: 'change' }]">
  236. <el-select v-model="state.ruleForm.orderType" placeholder="请选择工单类型" class="w100" @change="selectOrderType">
  237. <el-option v-for="item in state.orderTypeOptions" :key="item.key" :label="item.value" :value="item.key" />
  238. </el-select>
  239. </el-form-item>
  240. </el-col>
  241. <!-- 当“工单类型”为非通用工单时,展示【拓展信息】按钮 -->
  242. <el-col :xs="6" :sm="6" :md="6" :lg="6" :xl="6" :offset="1" v-if="state.ruleForm.orderType === 1 && state.ruleForm.acceptType">
  243. <el-form-item label="" label-width="0px">
  244. <el-button @click="showExpandForm"> <SvgIcon name="ele-CirclePlus" class="mr3" size="16px" /> 拓展信息 </el-button>
  245. </el-form-item>
  246. </el-col>
  247. </el-row>
  248. </el-col>
  249. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  250. <el-form-item label="受理类型" prop="acceptType" :rules="[{ required: true, message: '请选择受理类型', trigger: 'change' }]">
  251. <el-select v-model="state.ruleForm.acceptType" placeholder="请选择受理类型" class="w100">
  252. <el-option
  253. v-for="item in state.acceptTypeOptions"
  254. :key="item.key"
  255. :disabled="item.disabled"
  256. :label="item.value"
  257. :value="item.key"
  258. />
  259. </el-select>
  260. </el-form-item>
  261. </el-col>
  262. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  263. <el-form-item label="紧急程度" prop="emergencyLevel" :rules="[{ required: true, message: '请选择紧急程度', trigger: 'change' }]">
  264. <el-select v-model="state.ruleForm.emergencyLevel" placeholder="请选择紧急程度" class="w100">
  265. <el-option v-for="item in state.emergencyLevelOptions" :key="item.key" :label="item.value" :value="item.key" />
  266. </el-select>
  267. </el-form-item>
  268. </el-col>
  269. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  270. <el-form-item label="热点分类" prop="hotspotId" :rules="[{ required: true, message: '请选择热点分类', trigger: 'change' }]">
  271. <el-tree-select
  272. class="w100"
  273. v-model="state.ruleForm.hotspotId"
  274. filterable
  275. clearable
  276. placeholder="请选择热点分类"
  277. :props="HotspotProps"
  278. lazy
  279. :load="load"
  280. node-key="id"
  281. check-strictly
  282. :render-after-expand="false"
  283. @node-click="hotSpotChange"
  284. :default-expanded-keys="state.hotspotExternal"
  285. />
  286. </el-form-item>
  287. </el-col>
  288. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  289. <el-form-item label="事发时间" prop="incidentTime" :rules="[{ required: false, message: '请选择事发时间', trigger: 'change' }]">
  290. <el-date-picker
  291. v-model="state.ruleForm.incidentTime"
  292. type="datetime"
  293. placeholder="请选择事发时间"
  294. value-format="YYYY-MM-DD[T]HH:mm:ss"
  295. class="w100"
  296. />
  297. </el-form-item>
  298. </el-col>
  299. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  300. <el-row :gutter="0">
  301. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  302. <el-form-item label="事发地址" prop="areaCode" :rules="[{ required: true, message: '请选择事发地址', trigger: 'change' }]">
  303. <el-cascader
  304. :options="state.areaOptions"
  305. filterable
  306. :props="{ value: 'id', label: 'areaName', emitPath: false }"
  307. placeholder="请选择事发地址"
  308. class="w100"
  309. v-model="state.ruleForm.areaCode"
  310. ref="areaRef"
  311. @change="changeArea"
  312. >
  313. <template #default="{ node, data }">
  314. <span>{{ data.areaName }}</span>
  315. <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
  316. </template>
  317. </el-cascader>
  318. </el-form-item>
  319. </el-col>
  320. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  321. <el-form-item
  322. label=""
  323. prop="street"
  324. :rules="[{ required: false, message: '请填写详细地址', trigger: 'blur' }]"
  325. label-width="10px"
  326. >
  327. <el-input v-model="state.ruleForm.street" placeholder="请填写详细地址" clearable> </el-input>
  328. </el-form-item>
  329. </el-col>
  330. </el-row>
  331. </el-col>
  332. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  333. <el-row :gutter="0">
  334. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  335. <el-form-item label="是否重复" prop="isRepeat" :rules="[{ required: true, message: '请选择是否重复', trigger: 'change' }]">
  336. <el-select v-model="state.ruleForm.isRepeat" placeholder="请选择是否重复" class="w100" @change="isRepeatChange">
  337. <el-option v-for="item in state.repeatOptions" :key="item.key" :label="item.value" :value="item.key" />
  338. </el-select>
  339. </el-form-item>
  340. </el-col>
  341. <!-- 必填,若“是否重复”为“是”,则展示重复件选择框 -->
  342. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" v-if="state.ruleForm.isRepeat === 'true'">
  343. <el-form-item
  344. label=""
  345. prop="duplicateTitle"
  346. label-width="10px"
  347. :rules="[{ required: true, message: '请选择重复件', trigger: 'change' }]"
  348. >
  349. <el-input v-model="state.ruleForm.duplicateTitle" placeholder="请选择重复件" readonly>
  350. <template #suffix>
  351. <el-button link type="danger" v-if="state.ruleForm.duplicateTitle" @click="clearRepeat">
  352. <SvgIcon name="ele-Delete" size="16px" />
  353. </el-button>
  354. <el-button link type="primary" class="ml1" @click="selectRepeat">
  355. <SvgIcon name="iconfont icon-tianjiatuozhanxinxi" size="18px" />
  356. </el-button>
  357. </template>
  358. </el-input>
  359. </el-form-item>
  360. </el-col>
  361. </el-row>
  362. </el-col>
  363. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  364. <el-form-item label="推送分类" prop="pushTypeObj" :rules="[{ required: false, message: '请选择推送分类', trigger: 'change' }]">
  365. <el-select
  366. v-model="state.ruleForm.pushTypeObj"
  367. placeholder="请选择推送分类"
  368. class="w100"
  369. clearable
  370. value-key="dicDataValue"
  371. @change="(val:any) => {
  372. state.ruleForm.pushType = val.dicDataName;
  373. state.ruleForm.pushTypeCode = val.dicDataValue;
  374. }
  375. "
  376. >
  377. <el-option v-for="item in state.pushTypeOptions" :key="item.dicDataValue" :label="item.dicDataName" :value="item" />
  378. </el-select>
  379. </el-form-item>
  380. </el-col>
  381. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  382. <el-form-item label="诉求详情" prop="content" :rules="[{ required: true, message: '请填写诉求详情', trigger: 'blur' }]">
  383. <common-advice
  384. @chooseAdvice="chooseAdvice"
  385. v-model="state.ruleForm.content"
  386. placeholder="请填写诉求详情"
  387. :loading="state.formLoading"
  388. :commonEnum="commonEnum.Seat"
  389. modal
  390. />
  391. </el-form-item>
  392. </el-col>
  393. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  394. <el-form-item label="附件" prop="remark" :rules="[{ required: false, message: '请填写诉求内容', trigger: 'change' }]">
  395. <annex-list></annex-list>
  396. </el-form-item>
  397. </el-col>
  398. <el-col :xs="24" :sm="12" :md="24" :lg="24" :xl="24">
  399. <el-form-item>
  400. <el-button class="default-button" @click="save(ruleFormRef)" v-auth="'business:order:add'"> 保存 </el-button>
  401. <el-button type="primary" v-waves @click="submit(ruleFormRef)" v-auth="'business:order:startWorkflow'"> 提交 </el-button>
  402. </el-form-item>
  403. </el-col>
  404. </el-row>
  405. </el-form>
  406. </el-scrollbar>
  407. </el-col>
  408. <!-- 右侧内容 -->
  409. <el-col :span="12" class="right-content h100">
  410. <el-scrollbar>
  411. <div class="right-content-box box pd20">
  412. <!-- <el-tabs v-model="state.activeName">
  413. <el-tab-pane label="历史工单" name="first"> </el-tab-pane>
  414. <el-tab-pane label="市民画像" name="second"> 市民画像 </el-tab-pane>
  415. </el-tabs> -->
  416. <el-form :model="state.queryParams" ref="queryParamsRef" :inline="true" @submit.native.prevent>
  417. <el-form-item label="关键词" prop="Keyword">
  418. <el-input v-model="state.queryParams.Keyword" placeholder="工单标题/工单编码" clearable @keyup.enter="handleQuery" />
  419. </el-form-item>
  420. <el-form-item>
  421. <el-button type="primary" @click="handleQuery" :loading="state.historyOrderLoading">
  422. <SvgIcon name="ele-Search" class="mr5" />查询
  423. </el-button>
  424. <el-button @click="resetQuery(queryParamsRef)" :loading="state.historyOrderLoading" class="default-button">
  425. <SvgIcon name="ele-Refresh" class="mr5" />重置
  426. </el-button>
  427. </el-form-item>
  428. </el-form>
  429. <el-table
  430. :data="state.tableData"
  431. v-loading="state.historyOrderLoading"
  432. @selection-change="handleSelectionChange"
  433. max-height="300"
  434. ref="multipleTableRef"
  435. row-key="id"
  436. >
  437. <el-table-column type="selection" label="重复件" width="80" v-if="state.ruleForm.isRepeat === 'true'" />
  438. <el-table-column type="index" width="60" label="序号" />
  439. <el-table-column prop="phoneNo" label="工单标题" show-overflow-tooltip width="180">
  440. <template #default="{ row }">
  441. <span style="color: var(--el-color-primary)">{{ row.title }}</span>
  442. </template>
  443. </el-table-column>
  444. <el-table-column prop="hotspotName" label="热点分类" show-overflow-tooltip> </el-table-column>
  445. <el-table-column prop="no" label="工单编码" show-overflow-tooltip> </el-table-column>
  446. <el-table-column prop="currentStepName" label="当前环节" show-overflow-tooltip></el-table-column>
  447. <el-table-column prop="statusText" label="状态" width="70" fixed="right" align="center">
  448. <template #default="{ row }">
  449. <!-- 草稿 -->
  450. <span style="color: var(--el-color-info)" v-if="row.status === 0">{{ row.statusText }}</span>
  451. <!-- 待签收 -->
  452. <span style="color: var(--el-color-success)" v-if="row.status === 10">{{ row.statusText }}</span>
  453. <!-- 办理中 -->
  454. <span style="color: var(--el-color-primary)" v-if="row.status === 20">{{ row.statusText }}</span>
  455. <!-- 会签中 -->
  456. <span style="color: var(--el-color-primary)" v-if="row.status === 30">{{ row.statusText }}</span>
  457. <!-- 退回 -->
  458. <span style="color: var(--el-color-danger)" v-if="row.status === 40">{{ row.statusText }}</span>
  459. <!-- 办理完成 -->
  460. <span style="color: var(--el-color-success)" v-if="row.status === 50">{{ row.statusText }}</span>
  461. <!-- 已归档 -->
  462. <span style="color: var(--el-color-info)" v-if="row.status === 60">{{ row.statusText }}</span>
  463. </template>
  464. </el-table-column>
  465. <el-table-column prop="statusText" label="操作" width="70" fixed="right" align="center">
  466. <template #default="{ row }">
  467. <el-button link type="primary" @click="onSupply(row)"> 补充 </el-button>
  468. </template>
  469. </el-table-column>
  470. </el-table>
  471. <!-- 分页 -->
  472. <pagination
  473. :total="state.total"
  474. v-model:page="state.queryParams.PageIndex"
  475. v-model:limit="state.queryParams.PageSize"
  476. @pagination="searchHistory"
  477. />
  478. </div>
  479. <div class="right-content-knowledge mt20 box pd20">
  480. <div class="flex-center-between mb20">
  481. <p class="table-title">知识检索</p>
  482. </div>
  483. <div class="knowledge-container">
  484. <el-input
  485. v-model="state.KnowledgeKeyword"
  486. class="knowledge-input mb20"
  487. placeholder="请填写搜索内容"
  488. @keyup.enter="searchKnowledge(state.KnowledgeKeyword)"
  489. >
  490. <template #prefix>
  491. <SvgIcon name="ele-Search" size="16px" />
  492. </template>
  493. <template #suffix>
  494. <el-button
  495. class="knowledge-search-button"
  496. type="primary"
  497. :loading="state.loading"
  498. round
  499. @click="searchKnowledge(state.KnowledgeKeyword)"
  500. >
  501. <SvgIcon name="ele-Search" size="16px" color="#fff" />
  502. </el-button>
  503. </template>
  504. </el-input>
  505. <div>
  506. <span class="mr10" v-if="state.items.length">搜索热词</span>
  507. <el-tag
  508. v-for="(item, index) in state.hotWords"
  509. :key="index"
  510. class="mr10 mb10"
  511. style="cursor: pointer"
  512. @click="knowledgeRetrievalPaged(item)"
  513. round
  514. >
  515. {{ item }}
  516. </el-tag>
  517. </div>
  518. <ul class="mt10" v-loading="state.loading">
  519. <el-empty description="暂无数据" v-if="!state.knowledgeList.length" class="mb20">
  520. <template #image>
  521. <span></span>
  522. </template>
  523. </el-empty>
  524. <li v-for="(item, index) in state.knowledgeList" :key="index" class="mb20" v-else>
  525. <p class="font16">
  526. <SvgIcon name="iconfont icon-dian" size="16px" /> <b>{{ item.title }}</b>
  527. </p>
  528. <p class="pt6 indent text-ellipsis2" v-html="item.content"></p>
  529. </li>
  530. </ul>
  531. </div>
  532. <!-- 分页 -->
  533. <pagination
  534. :total="state.knowledgeTotal"
  535. v-model:page="state.knowledgeQuery.PageIndex"
  536. v-model:limit="state.knowledgeQuery.PageSize"
  537. @pagination="knowledgeRetrievalPaged(state.KnowledgeKeyword)"
  538. :pageSizes="[5, 10, 15, 20]"
  539. layout="total, prev, pager, next"
  540. />
  541. </div>
  542. </el-scrollbar>
  543. </el-col>
  544. </el-row>
  545. <!-- 拓展表单 -->
  546. <order-expand-form ref="ExpandFormRef" @saveExpandForm="saveExpandForm" />
  547. <!-- 历史工单 -->
  548. <order-history ref="HistoryOrderRef" @saveSelect="saveSelect" />
  549. <!-- 提交流程 -->
  550. <order-process ref="processRef" @orderProcessSuccess="orderProcessSuccess" />
  551. <!-- 补充信息 -->
  552. <order-supply ref="SupplyRef" @onSupplySuccess="onSupplySuccess" />
  553. </div>
  554. </template>
  555. <script setup lang="ts" name="orderEdit">
  556. import { defineAsyncComponent, ref, reactive, computed, onMounted, nextTick } from 'vue';
  557. import { ElMessage } from 'element-plus';
  558. import type { FormInstance } from 'element-plus';
  559. import { storeToRefs } from 'pinia';
  560. import { useRoute, useRouter } from 'vue-router';
  561. import { useTelStatus } from '/@/stores/telStatus';
  562. import { desensitizationPhone, throttle } from '/@/utils/tools';
  563. import { commonEnum } from '/@/utils/constants';
  564. import { orderBaseDataAdd, hotSpotType, historyOrder, orderDetail, orderEdit } from '/@/api/business/order';
  565. import { useUserInfo } from '/@/stores/userInfo';
  566. import { treeArea } from '/@/api/business/commonP';
  567. import { knowPopScreen, getKeyWord } from '/@/api/knowledge';
  568. import other from '/@/utils/other';
  569. import { auth } from '/@/utils/authFunction';
  570. import mittBus from '/@/utils/mitt';
  571. // 引入组件
  572. const OrderProcess = defineAsyncComponent(() => import('/@/views/business/order/components/Order-process.vue')); // 提交流程
  573. const OrderExpandForm = defineAsyncComponent(() => import('/@/views/business/order/components/Order-expand-form.vue')); // 拓展表单
  574. const OrderHistory = defineAsyncComponent(() => import('/@/views/business/order/components/Order-history.vue')); // 历史工单
  575. const CommonAdvice = defineAsyncComponent(() => import('/@/components/CommonAdvice/index.vue')); // 常用意见
  576. const OrderSupply = defineAsyncComponent(() => import('/@/views/business/order/components/Order-supply.vue')); // 补充信息
  577. const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue')); // 附件列表
  578. // 定义变量内容
  579. const state = reactive<any>({
  580. createFrom: 'manual', // 工单创建方式 默认手动创建 tel:来电弹单 letter:互联网来信 默认表示手动创建
  581. activeName: 'first', // tabs
  582. ruleForm: {
  583. channel: '', // 来源频道
  584. transferPhone: '', // 转接来源
  585. fromPhone: '', // 来电号码
  586. employeeName: '', // 员工姓名
  587. employeeStaffNo: '', // 员工工号
  588. fromName: '', // 来电人姓名
  589. fromGender: 1, // 来电人性别 默认先生
  590. identityType: 1, // 来电/信人身份 默认市民
  591. licenceType: '', // 证件类型
  592. licenceTypeCode: '', // 证件类型code
  593. licenceNo: '', // 证件号码
  594. ageRange: '', // 年龄段
  595. ageRangeCode: '', // 年龄段code
  596. contact: '', // 联系电话
  597. acceptSms: false, // 是否接收短信 默认false
  598. isSecret: false, // 是否保密 默认false
  599. company: '', // 工作单位
  600. no: '', // 工单编号
  601. title: '', // 工单标题
  602. orderType: 0, // 工单类型 默认通用工单
  603. acceptType: '', // 受理类型
  604. emergencyLevel: 1, // 紧急程度 默认一般
  605. hotspotId: '', // 热点问题
  606. incidentTime: '', // 事件发生时间
  607. areaCode: '', // 区域编码
  608. street: '', // 街道
  609. isRepeat: 'false', // 是否重复工单 默认否
  610. duplicateId: '', //重复工单id
  611. duplicateTitle: '', // 重复工单标题
  612. pushType: '', // 推送类型
  613. pushTypeCode: '', // 推送类型code
  614. content: '', // 工单内容
  615. },
  616. formLoading: false, // 表单加载状态
  617. historyOrderLoading: false, // 历史工单加载状态
  618. loading: false, // 知识检索加载状态
  619. acceptTypeOptions: [], // 受理类型
  620. channelOptions: [], // 来源频道
  621. emergencyLevelOptions: [], // 紧急程度
  622. genderOptions: [], // 性别
  623. identityTypeOptions: [], //来电人身份
  624. licenceTypeOptions: [], // 证件类型
  625. ageRangeOptions: [], // 年龄段
  626. orderTypeOptions: [], // 工单类型
  627. pushTypeOptions: [], //推送分类
  628. areaOptions: [], //省市区
  629. repeatOptions: [
  630. //是否重复
  631. {
  632. value: '是',
  633. key: 'true',
  634. },
  635. {
  636. value: '否',
  637. key: 'false',
  638. },
  639. ],
  640. orgData: [], // 机构数据
  641. tableData: [], // 历史工单
  642. total: 0, // 历史工单总条数
  643. queryParams: {
  644. PageIndex: 1, // 当前页
  645. PageSize: 10, // 每页条数
  646. Keyword: '', // 关键字
  647. },
  648. KnowledgeKeyword: '', //知识检索内容
  649. items: [], // 知识检索列表
  650. knowledgeList: [], //知识检索列表
  651. external: [], // 知识检索展开
  652. hotspotExternal: [], // 热点分类展开
  653. knowledgeQuery: {
  654. // 知识库查询
  655. PageIndex: 1, // 当前页
  656. PageSize: 5, // 每页条数
  657. Keyword: '', // 关键字
  658. },
  659. knowledgeTotal: 0, // 知识库总条数
  660. fileList: [], // 附件列表
  661. expandFormMounted: false, // 是否展开
  662. });
  663. const ruleFormRef = ref<RefType>(); // 表单ref
  664. const queryParamsRef = ref<RefType>(); // 历史工单查询参数ref
  665. const useTelStatusStore = useTelStatus(); // 来电弹单状态
  666. const { telStatusInfo } = storeToRefs(useTelStatusStore); // 来电弹单状态
  667. const storesUserInfo = useUserInfo(); // 用户信息
  668. const { userInfos } = storeToRefs(storesUserInfo); // 用户信息
  669. state.ruleForm.employeeName = userInfos.value.name; // 员工姓名
  670. state.ruleForm.employeeStaffNo = userInfos.value.staffNo; // 员工工号
  671. const route = useRoute(); // 路由
  672. const router = useRouter(); // 路由
  673. // 证件号码验证
  674. const licenceNoPattern = computed(() => {
  675. switch (state.ruleForm.licenceTypeCode) {
  676. case '10': // 身份证
  677. return /^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/;
  678. default: //默认只允许数字字母
  679. return /^[A-Za-z0-9]+$/;
  680. }
  681. });
  682. // 热点分类远程搜索
  683. const HotspotProps = {
  684. label: 'hotSpotFullName',
  685. children: 'children',
  686. isLeaf: 'isLeaf',
  687. };
  688. // 热点分类懒加载
  689. const load = async (node: any, resolve: any) => {
  690. if (node.isLeaf) return resolve([]);
  691. const res: any = await hotSpotType({ id: node.data.id ? node.data.id : '' });
  692. resolve(res.result);
  693. };
  694. // 选择热点分类
  695. const hotSpotChange = (val: any, e: any) => {
  696. state.hotspotExternal = <EmptyArrayType>[];
  697. state.external = <EmptyArrayType>[];
  698. state.hotspotExternal = getParentId(e, state.external);
  699. state.ruleForm.hotspotSpliceName = val.hotSpotFullName;
  700. state.ruleForm.hotspotName = val.hotSpotName;
  701. knowledgeRetrievalPaged(val.hotSpotName);
  702. };
  703. // 知识检索
  704. const knowledgeRetrievalPaged = async (val?: string) => {
  705. if (val) {
  706. state.knowledgeQuery.Keyword = val;
  707. state.KnowledgeKeyword = val;
  708. } else {
  709. state.knowledgeQuery.Keyword = '';
  710. state.KnowledgeKeyword = '';
  711. }
  712. try {
  713. state.loading = true;
  714. const res: any = await knowPopScreen(state.knowledgeQuery);
  715. state.knowledgeList = res.result?.items ?? [];
  716. state.knowledgeTotal = res.result?.total ?? 0;
  717. state.loading = false;
  718. } catch (error) {
  719. state.loading = false;
  720. }
  721. };
  722. // 递归查找父级Id
  723. const getParentId = (val: any, arr: string[]) => {
  724. if (val.data.parentId) {
  725. arr.push(val.data.parentId);
  726. getParentId(val.parent, arr);
  727. }
  728. return arr;
  729. };
  730. // 手机号码脱敏处理
  731. const phoneNumber = computed(() => {
  732. return desensitizationPhone(telStatusInfo.value.onCallArr[0]?.from);
  733. });
  734. // 选择工单类型 处理受理类型选择数据
  735. const selectOrderType = (val: any) => {
  736. ruleFormRef.value.resetFields('acceptType');
  737. state.acceptTypeOptions = state.acceptTypeOptions.map((item: any) => {
  738. let isDisabled = val === 1 && ![30, 35].includes(item.key); // 选择了12315 市场监管受理单 举报:30 投诉:35
  739. return {
  740. key: item.key,
  741. value: item.value,
  742. disabled: isDisabled,
  743. };
  744. });
  745. };
  746. const areaRef = ref<RefType>();
  747. // 选择省市区
  748. const changeArea = () => {
  749. const currentNode = areaRef.value.getCheckedNodes();
  750. state.ruleForm.province = currentNode[0]?.pathLabels[0] ?? '';
  751. state.ruleForm.city = currentNode[0]?.pathLabels[1] ?? '';
  752. state.ruleForm.county = currentNode[0]?.pathLabels[2] ?? '';
  753. };
  754. const ExpandFormRef = ref<RefType>();
  755. // 打开拓展表单
  756. const showExpandForm = () => {
  757. ExpandFormRef.value.openDialog(state.ruleForm.acceptType);
  758. };
  759. // 拓展表单保存
  760. const saveExpandForm = (val: any) => {
  761. const acceptTypeMap: any = {
  762. 30: 'orderReport',
  763. 35: 'orderComplain',
  764. };
  765. const property = acceptTypeMap[state.ruleForm.acceptType];
  766. if (property) {
  767. state.ruleForm[property] = val;
  768. }
  769. };
  770. // 选择来点人身份如果是企业 推送分类自动选择助企纾困
  771. const selectIdentity = (val: number) => {
  772. if (val === 2) {
  773. state.ruleForm.pushTypeObj = state.pushTypeOptions.find((item: any) => item.dicDataValue === '8'); // 助企纾困
  774. state.ruleForm.pushType = state.ruleForm.pushTypeObj.dicDataName;
  775. state.ruleForm.pushTypeCode = state.ruleForm.pushTypeObj.dicDataValue;
  776. }
  777. };
  778. // 删除不必要的属性
  779. const deleteUnnecessaryProperties = (obj: any) => {
  780. const propertiesToDelete = ['ageRangeObj', 'pushTypeObj', 'licenceTypeObj'];
  781. propertiesToDelete.forEach((prop) => Reflect.deleteProperty(obj, prop));
  782. if (obj.acceptType === 30) Reflect.deleteProperty(obj, 'orderComplain');
  783. if (obj.acceptType === 35) Reflect.deleteProperty(obj, 'orderReport');
  784. };
  785. // 是否打开拓展表单
  786. const shouldOpenDialog = (obj: any) => obj.orderType === 1 && obj.acceptType && !ExpandFormRef.value.state.validated;
  787. // 保存
  788. const save = throttle((formEl: FormInstance | undefined) => {
  789. if (!formEl) return;
  790. formEl.validate((valid: boolean) => {
  791. if (!valid) return;
  792. state.ruleForm.hotspotExternal = state.hotspotExternal.join(',');
  793. let submitObj = other.deepClone(state.ruleForm);
  794. deleteUnnecessaryProperties(submitObj);
  795. const editOrderAndNavigate = () => {
  796. orderEdit(submitObj).then(() => {
  797. ElMessage.success('操作成功');
  798. // 关闭当前 tagsView
  799. mittBus.emit('onCurrentContextmenuClick', Object.assign({}, { contextMenuClickId: 1, ...route }));
  800. mittBus.emit('clearCache', 'order');
  801. router.replace({
  802. path: '/business/order/index',
  803. });
  804. });
  805. };
  806. if (shouldOpenDialog(submitObj)) {
  807. ExpandFormRef.value.openDialog(submitObj.acceptType, true);
  808. } else {
  809. editOrderAndNavigate();
  810. }
  811. });
  812. }, 500);
  813. // 提交
  814. const processRef = ref<RefType>();
  815. const submit = throttle((formEl: FormInstance | undefined) => {
  816. if (!formEl) return;
  817. formEl.validate((valid: boolean) => {
  818. if (!valid) return;
  819. state.ruleForm.hotspotExternal = state.hotspotExternal.join(',');
  820. let submitObj = other.deepClone(state.ruleForm);
  821. deleteUnnecessaryProperties(submitObj);
  822. const proceedWithSubmission = () => {
  823. orderEdit(submitObj).then(() => {
  824. processRef.value.openDialog({ id: route.params.id, title: '提交', commonEnum: commonEnum.Seat, processType: 'start' });
  825. });
  826. };
  827. if (submitObj.orderType === 1 && submitObj.acceptType && !ExpandFormRef.value.state.validated) {
  828. //如果没有通过展示弹窗
  829. ExpandFormRef.value.openDialog(submitObj.acceptType, true);
  830. } else {
  831. proceedWithSubmission();
  832. }
  833. });
  834. }, 500);
  835. // 选择是否重复
  836. const isRepeatChange = (val: string) => {
  837. if (val === 'false') clearRepeat();
  838. };
  839. const multipleSelection = ref<any[]>([]); // 重复件表格选中项
  840. const multipleTableRef = ref<RefType>(); // 重复件表格ref
  841. // 清除重复件
  842. const clearRepeat = () => {
  843. state.ruleForm.duplicateTitle = '';
  844. state.ruleForm.duplicateId = '';
  845. multipleTableRef.value.clearSelection();
  846. };
  847. // 选择重复件
  848. const HistoryOrderRef = ref<RefType>();
  849. const selectRepeat = () => {
  850. HistoryOrderRef.value.openDialog(state.ruleForm);
  851. };
  852. // 弹窗确定选择重复件
  853. const saveSelect = (multipleSelection: any) => {
  854. multipleTableRef.value.clearSelection();
  855. state.ruleForm.duplicateTitle = '已选择';
  856. console.log(multipleSelection);
  857. if (multipleSelection) {
  858. multipleSelection.forEach((row: any) => {
  859. multipleTableRef.value!.toggleRowSelection(row, true);
  860. });
  861. }
  862. multipleSelection.value = multipleSelection;
  863. console.log(multipleSelection.value, '121');
  864. HistoryOrderRef.value.closeDialog();
  865. };
  866. // 右边表格选中重复件
  867. const handleSelectionChange = (row: any) => {
  868. multipleSelection.value = row;
  869. };
  870. // 历史工单搜索
  871. const searchKnowledge = (value?: string) => {
  872. if (value) state.KnowledgeKeyword = value;
  873. state.historyOrderLoading = true;
  874. state.historyOrderLoading = false;
  875. };
  876. // 选中常用意见
  877. const chooseAdvice = (item: any) => {
  878. state.ruleForm.content += item.content;
  879. };
  880. // 流程提交成功
  881. const orderProcessSuccess = () => {
  882. // 关闭当前 tagsView
  883. mittBus.emit('onCurrentContextmenuClick', Object.assign({}, { contextMenuClickId: 1, ...route }));
  884. mittBus.emit('clearCache', 'order');
  885. router.push({
  886. path: '/business/order/index',
  887. });
  888. };
  889. /** 搜索按钮操作 */
  890. const handleQuery = throttle(() => {
  891. state.queryParams.PageIndex = 1;
  892. searchHistory();
  893. }, 500);
  894. /** 重置按钮操作 */
  895. const resetQuery = throttle((formEl: FormInstance | undefined) => {
  896. if (!formEl) return;
  897. formEl.resetFields();
  898. handleQuery();
  899. }, 500);
  900. /** 获取历史工单 */
  901. const searchHistory = throttle(() => {
  902. if (!auth('business:order:history')) ElMessage.error('抱歉,您没有权限查询历史工单!');
  903. else {
  904. if (!state.ruleForm.fromPhone) return; // 如果没有来电号码 不进行查询
  905. state.historyOrderLoading = true;
  906. let request = {
  907. ...state.queryParams,
  908. PhoneNo: state.ruleForm.fromPhone,
  909. OrderId: route.params.id, //传入id 排除重复工单选择自己
  910. };
  911. historyOrder(request)
  912. .then((response: any) => {
  913. state.tableData = response?.result.items ?? [];
  914. state.total = response?.result.total;
  915. setTimeout(() => {
  916. state.historyOrderLoading = false;
  917. }, 300);
  918. })
  919. .catch(() => {
  920. state.historyOrderLoading = false;
  921. });
  922. }
  923. }, 500);
  924. // 补充信息
  925. const SupplyRef = ref<RefType>();
  926. const onSupply = (val: any) => {
  927. SupplyRef.value.openDialog(val);
  928. };
  929. // 补充意见提交成功
  930. const onSupplySuccess = () => {
  931. searchHistory();
  932. };
  933. onMounted(() => {
  934. nextTick(async () => {
  935. state.formLoading = true;
  936. state.historyOrderLoading = true;
  937. state.loading = true;
  938. if (!route.params.id) {
  939. ElMessage.warning('参数有误,请重新进入');
  940. state.historyOrderLoading = false;
  941. state.formLoading = false;
  942. state.loading = false;
  943. return;
  944. }
  945. try {
  946. const [area, res, hotspot, response] = await Promise.all([treeArea(), orderBaseDataAdd(), getKeyWord(), orderDetail(route.params.id)]);
  947. state.acceptTypeOptions = res.result?.acceptTypeOptions ?? [];
  948. state.channelOptions = res.result?.channelOptions ?? [];
  949. state.emergencyLevelOptions = res.result?.emergencyLevelOptions ?? [];
  950. state.genderOptions = res.result?.genderOptions ?? [];
  951. state.identityTypeOptions = res.result?.identityTypeOptions ?? [];
  952. state.orderTypeOptions = res.result?.orderTypeOptions ?? [];
  953. state.pushTypeOptions = res.result?.pushTypeOptions ?? [];
  954. state.licenceTypeOptions = res.result?.licenceTypeOptions ?? [];
  955. state.ageRangeOptions = res.result?.ageRangeOptions ?? [];
  956. state.ruleForm.seats = `${userInfos.value.name} [${userInfos.value.staffNo}]`;
  957. state.areaOptions = area.result ?? []; //省市区数据
  958. state.hotWords = hotspot.result ?? []; // 知识库热词
  959. // 如果获取到id 调用查询详情
  960. state.ruleForm = response.result;
  961. if (state.ruleForm.channel === 'RGDH') {
  962. // 来源渠道为电话查询历史工单
  963. searchHistory();
  964. }
  965. if (state.ruleForm.orderType === 1) {
  966. // 工单类型 选择了12315市场监管受理单
  967. state.acceptTypeOptions = state.acceptTypeOptions.map((item: any) => {
  968. if ([30, 35].includes(item.key)) {
  969. //直接投诉或者建议
  970. return {
  971. key: item.key,
  972. value: item.value,
  973. disabled: false,
  974. };
  975. } else {
  976. return {
  977. key: item.key,
  978. value: item.value,
  979. disabled: true,
  980. };
  981. }
  982. });
  983. state.expandFormMounted = true;
  984. }
  985. if (response.result.duplicateId) {
  986. // 是否重复
  987. state.ruleForm.isRepeat = 'true';
  988. state.tableRadio = state.ruleForm.duplicateId;
  989. } else {
  990. state.ruleForm.isRepeat = 'false';
  991. }
  992. if (response.result.hotspotExternal) {
  993. //热点分类默认展开
  994. state.hotspotExternal = state.ruleForm.hotspotExternal.split(',');
  995. }
  996. state.ruleForm.ageRangeObj = {
  997. // 年龄段
  998. dicDataValue: state.ruleForm.ageRangeCode,
  999. dicDataName: state.ruleForm.ageRange,
  1000. };
  1001. state.ruleForm.licenceTypeObj = {
  1002. // 证件类型
  1003. dicDataValue: state.ruleForm.licenceTypeCode,
  1004. dicDataName: state.ruleForm.licenceType,
  1005. };
  1006. state.ruleForm.pushTypeObj = {
  1007. // 推送分类
  1008. dicDataValue: state.ruleForm.pushTypeCode,
  1009. dicDataName: state.ruleForm.pushType,
  1010. };
  1011. knowledgeRetrievalPaged(state.ruleForm.hotspotName);
  1012. state.historyOrderLoading = false;
  1013. state.formLoading = false;
  1014. state.loading = false;
  1015. } catch (error) {
  1016. state.historyOrderLoading = false;
  1017. state.formLoading = false;
  1018. state.loading = false;
  1019. }
  1020. });
  1021. });
  1022. </script>
  1023. <style scoped lang="scss">
  1024. .box {
  1025. background-color: var(--el-color-white);
  1026. border-radius: 8px;
  1027. }
  1028. :deep(.el-divider--horizontal) {
  1029. margin-top: 0;
  1030. }
  1031. .order-edit-container {
  1032. color: var(--hotline-color-text-main);
  1033. .right-content {
  1034. &-knowledge {
  1035. .knowledge-container {
  1036. position: relative;
  1037. .knowledge-input {
  1038. :deep(.el-input__wrapper) {
  1039. border-radius: 20px;
  1040. background: var(--hotline-bg-main-color);
  1041. }
  1042. }
  1043. .knowledge-search-button {
  1044. height: calc(100% - 6px);
  1045. }
  1046. .indent {
  1047. text-indent: 1em;
  1048. color: var(--hotline-color-text-main-light);
  1049. line-height: 20px;
  1050. }
  1051. }
  1052. }
  1053. }
  1054. }
  1055. </style>