index.vue 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022
  1. <template>
  2. <el-button class="button-select" link :type="props.order?.canSign ? 'danger' : 'primary'" @click="onOrderDetail" title="点击查看工单详情">
  3. <slot>工单详情</slot>
  4. </el-button>
  5. <el-dialog
  6. v-model="state.dialogVisible"
  7. class="order-detail-dialog"
  8. draggable
  9. ref="dialogRef"
  10. width="80%"
  11. append-to-body
  12. destroy-on-close
  13. @close="close"
  14. :close-on-click-modal="false"
  15. >
  16. <template #header>
  17. <el-tabs v-model="state.activeName" @tab-change="handleClick">
  18. <el-tab-pane :name="item.value" v-for="item in state.tabPaneList" :key="item.value" :label="item.label"></el-tab-pane>
  19. </el-tabs>
  20. </template>
  21. <!-- 工单详情 -->
  22. <el-collapse v-model="state.collapseArr" v-show="state.activeName === '0'" class="collapse-box" v-loading="state.loading">
  23. <el-collapse-item name="1">
  24. <template #title>
  25. <p class="pl20">
  26. <b class="font14">来电人信息</b>
  27. </p>
  28. </template>
  29. <div class="collapse-container">
  30. <el-form label-width="100px" ref="ruleFormRef">
  31. <el-row :gutter="10">
  32. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.transferPhone">
  33. <el-form-item label="转接来源"> {{ state.ruleForm.transferPhone }} </el-form-item>
  34. </el-col>
  35. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.fromPhone">
  36. <el-form-item label="来电号码">
  37. {{ state.ruleForm.fromPhone }}
  38. <el-button
  39. plain
  40. title="查看录音文件"
  41. size="small"
  42. type="primary"
  43. class="ml8"
  44. @click="recordFile(state.ruleForm)"
  45. v-if="
  46. ['ZiGong'].includes(themeConfig.appScope)
  47. ? state.ruleForm?.recordingAbsolutePath && userInfos.isCenter
  48. : state.ruleForm?.recordingAbsolutePath
  49. "
  50. >录音文件</el-button
  51. >
  52. <el-button
  53. plain
  54. title="外呼"
  55. size="small"
  56. type="primary"
  57. class="ml8"
  58. @click="callPhone(state.ruleForm.fromPhone)"
  59. v-if="['ZiGong', 'LuZhou'].includes(themeConfig.appScope)"
  60. >外呼</el-button
  61. >
  62. <el-checkbox-group v-model="prefixOptions" :max="1" v-if="['ZiGong', 'LuZhou'].includes(themeConfig.appScope)" class="checkbox ml5">
  63. <el-checkbox value="add">加0</el-checkbox>
  64. <el-checkbox value="remove">减0</el-checkbox>
  65. </el-checkbox-group>
  66. </el-form-item>
  67. </el-col>
  68. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
  69. <el-form-item label="来电人姓名">
  70. {{ state.ruleForm.fromName }} <el-text type="danger" tag="b" v-if="state.ruleForm.isSecret" class="ml15">保密</el-text>
  71. </el-form-item>
  72. </el-col>
  73. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
  74. <el-form-item label="来电人性别">
  75. {{ state.ruleForm.fromGenderText }}
  76. </el-form-item>
  77. </el-col>
  78. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.contact">
  79. <el-form-item label="联系电话">
  80. <span> {{ state.ruleForm.contact }}</span>
  81. <el-button plain title="外呼" size="small" type="primary" class="ml8" @click="callPhone(state.ruleForm.contact)">外呼</el-button>
  82. <el-checkbox-group v-model="prefixOptions" :max="1" v-if="['ZiGong', 'LuZhou'].includes(themeConfig.appScope)" class="checkbox ml5">
  83. <el-checkbox value="add">加0</el-checkbox>
  84. <el-checkbox value="remove">减0</el-checkbox>
  85. </el-checkbox-group>
  86. </el-form-item>
  87. </el-col>
  88. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
  89. <el-form-item label="来电主体"> {{ state.ruleForm.identityTypeText }} </el-form-item>
  90. </el-col>
  91. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.licenceType">
  92. <el-form-item label="证件类型"> {{ state.ruleForm.licenceType }} </el-form-item>
  93. </el-col>
  94. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.licenceNo">
  95. <el-form-item label="证件号码"> {{ state.ruleForm.licenceNo }} </el-form-item>
  96. </el-col>
  97. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
  98. <el-form-item label="受理短信"> {{ state.ruleForm.smsSendedText }} </el-form-item>
  99. </el-col>
  100. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm?.incidentTime">
  101. <el-form-item label="事发时间"> {{ formatDate(state.ruleForm?.incidentTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
  102. </el-col>
  103. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm?.incidentPurpose">
  104. <el-form-item label="事发目的"> {{ state.ruleForm.incidentPurpose }} </el-form-item>
  105. </el-col>
  106. <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12" v-if="state.ruleForm.enterpriseName">
  107. <el-form-item label="企业名称"> {{ state.ruleForm.enterpriseName }} </el-form-item>
  108. </el-col>
  109. <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12" v-if="state.ruleForm.zhuanBanMingCheng">
  110. <el-form-item label="专班名称"> {{ state.ruleForm.zhuanBanMingCheng }} </el-form-item>
  111. </el-col>
  112. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.ruleForm.fullAddress">
  113. <el-form-item label="事发地址"> {{ state.ruleForm.fullAddress }} </el-form-item>
  114. </el-col>
  115. </el-row>
  116. </el-form>
  117. </div>
  118. </el-collapse-item>
  119. <el-collapse-item name="2">
  120. <template #title>
  121. <p class="pl20">
  122. <b class="font14">工单信息</b>
  123. </p>
  124. </template>
  125. <div class="collapse-container">
  126. <el-form label-width="100px" ref="ruleFormRef">
  127. <el-row :gutter="10">
  128. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
  129. <el-form-item label="来源渠道"> {{ state.ruleForm.sourceChannel }} </el-form-item>
  130. </el-col>
  131. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
  132. <el-form-item label="受理类型"> {{ state.ruleForm.acceptType }} </el-form-item>
  133. </el-col>
  134. <!-- 中心才能查看密码 -->
  135. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
  136. <el-form-item label="工单编码">
  137. {{ state.ruleForm.no }} <span v-if="state.ruleForm.password && userInfos.isCenter"> 【{{ state.ruleForm.password }}】</span>
  138. </el-form-item>
  139. </el-col>
  140. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.provinceNo">
  141. <el-form-item label="省本地编码">
  142. <div style="word-break: break-all">{{ state.ruleForm.provinceNo }}</div>
  143. </el-form-item>
  144. </el-col>
  145. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.receiveProvinceNo">
  146. <el-form-item label="省编码">
  147. <div style="word-break: break-all">{{ state.ruleForm.receiveProvinceNo }}</div>
  148. </el-form-item>
  149. </el-col>
  150. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="state.ruleForm?.orderExtension?.orderTypeCode">
  151. <el-form-item label="工单类型">
  152. {{ state.ruleForm.orderExtension?.orderType }}
  153. <el-button link type="primary" class="ml10" @click="showExpandInfo"><SvgIcon name="ele-Document" class="mr2" /> 拓展信息</el-button>
  154. </el-form-item>
  155. </el-col>
  156. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
  157. <el-form-item label="是否重复">
  158. {{
  159. state.ruleForm.duplicateIds && state.ruleForm.duplicateIds.length > 0 ? '是(' + state.ruleForm.duplicateIds.length + '次)' : '否'
  160. }}
  161. <el-button
  162. plain
  163. title="查看重复工单"
  164. size="small"
  165. type="primary"
  166. class="ml8"
  167. @click="showRepeatInfo"
  168. v-if="state.ruleForm.duplicateIds && state.ruleForm.duplicateIds.length > 0"
  169. >查看重复工单</el-button
  170. >
  171. </el-form-item>
  172. </el-col>
  173. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
  174. <el-form-item label="热点分类"> {{ state.ruleForm.hotspotSpliceName }} </el-form-item>
  175. </el-col>
  176. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
  177. <el-form-item label="受理人">
  178. <span>{{ state.ruleForm?.acceptorName }}</span>
  179. </el-form-item>
  180. </el-col>
  181. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.startTime">
  182. <el-form-item label="受理时间"> {{ formatDate(state.ruleForm?.startTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
  183. </el-col>
  184. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.pushType">
  185. <el-form-item label="推送分类"> {{ state.ruleForm.pushType }} </el-form-item>
  186. </el-col>
  187. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="['ZiGong'].includes(themeConfig.appScope) && state.ruleForm.focusOnEvents">
  188. <el-form-item label="重点标签">
  189. <span class="color-danger" v-if="state.ruleForm.isUrgent">紧急,</span>
  190. <span class="color-danger" v-if="state.ruleForm.is24HoursComplete">24小时办结,</span>
  191. <span class="color-danger" v-if="state.ruleForm.isThreePartyConference">三方通话</span>
  192. </el-form-item>
  193. </el-col>
  194. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="['ZiGong'].includes(themeConfig.appScope) && state.ruleForm.orderTag">
  195. <el-form-item label="工单标签"> {{ state.ruleForm.orderTag }} </el-form-item>
  196. </el-col>
  197. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="['ZiGong'].includes(themeConfig.appScope) && state.ruleForm.company">
  198. <el-form-item label="工作单位"> {{ state.ruleForm.company }} </el-form-item>
  199. </el-col>
  200. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  201. <el-form-item label="工单标题">
  202. {{ state.ruleForm.title }} <el-tag class="ml10" v-if="state.ruleForm?.workflowId">{{ state.ruleForm.statusText }}</el-tag>
  203. </el-form-item>
  204. </el-col>
  205. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  206. <el-form-item label="受理内容">
  207. <div v-html="showKeyWord(state.ruleForm.content, state.ruleForm.sensitive)" class="formatted-text"></div>
  208. </el-form-item>
  209. </el-col>
  210. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  211. <el-form-item label="附件">
  212. <annex-list name="附件列表" readonly :businessId="state.ruleForm.id" classify="查看附件" v-model="state.ruleForm.files" />
  213. </el-form-item>
  214. </el-col>
  215. </el-row>
  216. </el-form>
  217. </div>
  218. </el-collapse-item>
  219. <el-collapse-item name="3">
  220. <template #title>
  221. <p class="pl20">
  222. <b class="font14">结果信息</b>
  223. </p>
  224. </template>
  225. <div class="collapse-container">
  226. <el-form label-width="100px" ref="ruleFormRef" class="show-info-form">
  227. <el-row :gutter="10">
  228. <el-col :xs="24" :sm="24" :md="8" :lg="6" :xl="6">
  229. <el-form-item label="交办部门"> 热线中心 </el-form-item>
  230. </el-col>
  231. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.centerToOrgTime">
  232. <el-form-item label="交办时间"> {{ formatDate(state.ruleForm.centerToOrgTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
  233. </el-col>
  234. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.actualHandleOrgNam">
  235. <el-form-item label="办理部门"> {{ state.ruleForm.actualHandleOrgName }}</el-form-item>
  236. </el-col>
  237. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.actualHandleTime">
  238. <el-form-item label="办理时间"> {{ formatDate(state.ruleForm.actualHandleTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
  239. </el-col>
  240. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.timeLimit">
  241. <el-form-item label="工单办理期限">
  242. {{ state.ruleForm.timeLimit }}
  243. <span class="color-danger" v-if="['ZiGong'].includes(themeConfig.appScope) && state.ruleForm.is24HoursComplete"
  244. >24小时办结</span
  245. ></el-form-item
  246. >
  247. </el-col>
  248. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.expiredTime">
  249. <el-form-item label="工单期满时间">
  250. {{ formatDate(state.ruleForm.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}
  251. </el-form-item>
  252. </el-col>
  253. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.orderTerminateStatus">
  254. <el-form-item label="终止状态">
  255. <span class="color-danger">{{ state.ruleForm.orderTerminateStatus }}</span>
  256. </el-form-item>
  257. </el-col>
  258. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm?.delayString">
  259. <el-form-item label="信件延期">
  260. <span class="color-danger">{{ state.ruleForm?.delayString }}</span></el-form-item
  261. >
  262. </el-col>
  263. <!-- 只有中心能看到省期满时间 -->
  264. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.expiredTimeProvince && userInfos.isCenter">
  265. <el-form-item label="省期满时间">
  266. {{ formatDate(state.ruleForm.expiredTimeProvince, 'YYYY-mm-dd HH:MM:SS') }}
  267. </el-form-item>
  268. </el-col>
  269. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.publishState !== null">
  270. <el-form-item label="是否公开"> {{ state.ruleForm.publishState ? '公开' : '不公开' }} </el-form-item>
  271. </el-col>
  272. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="['YiBin'].includes(themeConfig.appScope)">
  273. <el-form-item label="部门处理结果" class="formatted-text"> {{ state.ruleForm.isResolvedText }} </el-form-item>
  274. </el-col>
  275. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.ruleForm.centerOpinion">
  276. <el-form-item label="中心意见" class="formatted-text"> {{ state.ruleForm.centerOpinion }} </el-form-item>
  277. </el-col>
  278. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.ruleForm.fileOpinion">
  279. <el-form-item label="承办意见" class="formatted-text"> {{ state.ruleForm.fileOpinion }} </el-form-item>
  280. </el-col>
  281. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.ruleForm.provinceSendBackString">
  282. <el-form-item label="省件退回" class="formatted-text color-danger"> {{ state.ruleForm.provinceSendBackString }} </el-form-item>
  283. </el-col>
  284. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.ruleForm.provinceRevokeString">
  285. <el-form-item label="省件撤单" class="formatted-text color-danger"> {{ state.ruleForm.provinceRevokeString }} </el-form-item>
  286. </el-col>
  287. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.ruleForm.sendBackOpinion">
  288. <el-form-item label="退回意见" class="formatted-text"> {{ state.ruleForm.sendBackOpinion }} </el-form-item>
  289. </el-col>
  290. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.ruleForm.sendBackRefuseOpinion">
  291. <el-form-item label="退回不通过原因" label-width="120px" class="formatted-text">
  292. {{ state.ruleForm.sendBackRefuseOpinion }}
  293. </el-form-item>
  294. </el-col>
  295. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.ruleForm.sendBackAuditTime">
  296. <el-form-item label="退回审批时间" label-width="120px">
  297. {{ formatDate(state.ruleForm.sendBackAuditTime, 'YYYY-mm-dd HH:MM:SS') }}
  298. </el-form-item>
  299. </el-col>
  300. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.ruleForm.orderRemarks?.length">
  301. <el-form-item label="备注信息">
  302. <el-row v-for="(item, index) in state.ruleForm.orderRemarks" class="w100 mb10" :key="index">
  303. <el-col class="formatted-text">备注信息:{{ item.remark }} </el-col>
  304. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">备注人:{{ item.remarkUser }} </el-col>
  305. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">备注日期:{{ formatDate(item.remarkTime, 'YYYY-mm-dd HH:MM:SS') }}</el-col>
  306. </el-row>
  307. </el-form-item>
  308. </el-col>
  309. </el-row>
  310. </el-form>
  311. </div>
  312. </el-collapse-item>
  313. <el-collapse-item name="4" v-if="state.supplements && state.supplements.length">
  314. <template #title>
  315. <p class="pl20">
  316. <b class="font14">补充信息</b>
  317. </p>
  318. </template>
  319. <div class="collapse-container">
  320. <div v-for="i in state.supplements" :key="i" class="plug-container">
  321. <el-form label-width="100px" ref="ruleFormRef" class="pt10 pb10">
  322. <el-row :gutter="10">
  323. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
  324. <el-form-item label="补充部门">
  325. {{ i.creator.organization }}
  326. </el-form-item>
  327. </el-col>
  328. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
  329. <el-form-item label="补充时间"> {{ formatDate(i.creationTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
  330. </el-col>
  331. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
  332. <el-form-item label="补充人">
  333. {{ i.creator.name }} <span v-if="i.creator.staffNo">[{{ i.creator.staffNo }} ]</span></el-form-item
  334. >
  335. </el-col>
  336. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  337. <el-form-item label="补充详情" class="formatted-text">
  338. {{ i.opinion }}
  339. </el-form-item>
  340. </el-col>
  341. </el-row>
  342. </el-form>
  343. </div>
  344. </div>
  345. </el-collapse-item>
  346. </el-collapse>
  347. <!-- 历史工单 -->
  348. <div v-show="state.activeName === '1'">
  349. <history-order :ruleForm="state.ruleForm" :orderId="state.orderId" ref="historyOrderRef" readonly :maxHeight="500" />
  350. </div>
  351. <!-- 回访详情 -->
  352. <div v-show="state.activeName === '2'">
  353. <el-form
  354. label-width="120px"
  355. label-position="left"
  356. v-if="state.ruleForm.orderVisits && state.ruleForm.orderVisits.length"
  357. class="show-info-form"
  358. >
  359. <el-row :gutter="10">
  360. <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
  361. <el-form-item label="回访状态">
  362. {{ state.ruleForm?.orderVisits[state.ruleForm?.orderVisits.length - 1]?.visitStateText }}
  363. </el-form-item>
  364. </el-col>
  365. <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
  366. <el-form-item label="回访方式">
  367. {{ state.ruleForm?.orderVisits[state.ruleForm?.orderVisits.length - 1]?.visitTypeText }}
  368. </el-form-item>
  369. </el-col>
  370. <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
  371. <el-form-item label="当前回访人">
  372. {{ state.ruleForm?.orderVisits[state.ruleForm?.orderVisits.length - 1]?.employeeName }}
  373. </el-form-item>
  374. </el-col>
  375. <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
  376. <el-form-item label="回访任务创建时间" label-width="130px">
  377. {{ formatDate(state.ruleForm?.orderVisits[state.ruleForm?.orderVisits.length - 1]?.creationTime, 'YYYY-mm-dd HH:MM:SS') }}
  378. </el-form-item>
  379. </el-col>
  380. <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
  381. <el-form-item label="回访时间">
  382. {{ formatDate(state.ruleForm?.orderVisits[state.ruleForm?.orderVisits.length - 1]?.visitTime, 'YYYY-mm-dd HH:MM:SS') }}
  383. </el-form-item>
  384. </el-col>
  385. <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
  386. <el-form-item label="回访标签">
  387. <span v-if="state.ruleForm?.orderVisits[0]?.isPutThrough !== null">{{
  388. state.ruleForm?.orderVisits[state.ruleForm?.orderVisits.length - 1]?.isPutThrough ? '已接通' : '未接通'
  389. }}</span>
  390. </el-form-item>
  391. </el-col>
  392. </el-row>
  393. <el-row v-for="item in state.ruleForm?.orderVisits[state.ruleForm?.orderVisits.length - 1]?.orderVisitDetails" :key="item.id" :gutter="10">
  394. <!-- 务员评价 -->
  395. <template v-if="item.visitTarget === 10">
  396. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  397. <el-divider content-position="left">
  398. <el-text tag="b" size="large" type="primary"> 话务员回访 </el-text>
  399. </el-divider>
  400. </el-col>
  401. <el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
  402. <el-form-item label="语音评价">
  403. {{ item.voiceEvaluateText }}
  404. </el-form-item>
  405. </el-col>
  406. <el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
  407. <el-form-item label="话务员评价">
  408. {{ item.seatEvaluateText }}
  409. </el-form-item>
  410. </el-col>
  411. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  412. <el-form-item label="话务员回访内容">
  413. {{ item.visitContent }}
  414. </el-form-item>
  415. </el-col>
  416. </template>
  417. <!-- 部门评价 -->
  418. <template v-if="item.visitTarget === 20">
  419. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  420. <el-divider content-position="left">
  421. <el-text tag="b" size="large" type="primary"> {{ item.visitOrgName }} </el-text>
  422. </el-divider>
  423. </el-col>
  424. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  425. <el-form-item label="部门办件结果">
  426. {{ item.orgProcessingResults?.value }}
  427. </el-form-item>
  428. </el-col>
  429. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  430. <el-form-item label="不满意原因">
  431. {{ item.orgNoSatisfiedReason?.map((item) => item.value).join(',') }}
  432. </el-form-item>
  433. </el-col>
  434. <!-- <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  435. <el-form-item label="部门办件态度">
  436. {{ item.orgHandledAttitude?.value }}
  437. </el-form-item>
  438. </el-col>-->
  439. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  440. <el-form-item label="部门回访内容" class="formatted-text">
  441. {{ item.visitContent }}
  442. </el-form-item>
  443. </el-col>
  444. </template>
  445. </el-row>
  446. </el-form>
  447. <el-empty v-else />
  448. </div>
  449. <!-- 市民画像 -->
  450. <div v-show="state.activeName === '3'" class="flex-center-center">
  451. <div style="max-width: 800px">
  452. <citizen-portrait :orderInfo="state.ruleForm" ref="citizenPortraitRef" :editable="false" />
  453. </div>
  454. </div>
  455. <!-- 副本工单 -->
  456. <div v-show="state.activeName === '4'">
  457. <copy-order ref="copyOrderRef" :orderId="state.orderId" />
  458. </div>
  459. <template #footer>
  460. <span class="dialog-footer">
  461. <el-text v-if="['ZiGong'].includes(themeConfig.appScope) && state.ruleForm?.sendBackAuditEndTime" type="danger" tag="b" class="mr20">
  462. 退回截止时间:{{ formatDate(state.ruleForm?.sendBackAuditEndTime, 'YYYY-mm-dd HH:MM:SS') }}
  463. </el-text>
  464. <!-- 单会签中+未到汇总节点 canEndCountersign 为true表示当前工单正在会签中,可以结束会签-->
  465. <el-button
  466. type="primary"
  467. @click="onCloseCountersignature"
  468. :loading="state.loading"
  469. v-auth="'business:order:closeCountersignature'"
  470. v-if="state.ruleForm?.countersignId && state.ruleForm.status !== 9"
  471. >结束会签</el-button
  472. >
  473. <!-- 有流程信息就可以查询明细 -->
  474. <el-button type="primary" @click="onRecord" :loading="state.loading" v-if="state.ruleForm?.workflowId">流程明细</el-button>
  475. <!-- 有流程信息就可以撤回 -->
  476. <el-button
  477. type="primary"
  478. @click="onSpecialHandle"
  479. :loading="state.loading"
  480. v-if="state.ruleForm?.workflowId && state.ruleForm.status !== 9"
  481. v-auth="'business:order:teti'"
  482. >特 提</el-button
  483. >
  484. <!-- 100-200 表示工单正在办理中,可以督办 -->
  485. <el-button
  486. type="primary"
  487. @click="onSupervise"
  488. :loading="state.loading"
  489. v-if="isInRange(state.ruleForm?.status, 100, 200) && state.ruleForm.status !== 9"
  490. v-auth="'business:order:supervise:apply'"
  491. >督 办</el-button
  492. >
  493. <!-- 100-200 表示工单正在办理中,可以催办 -->
  494. <el-button
  495. type="primary"
  496. @click="onUrge"
  497. :loading="state.loading"
  498. v-if="isInRange(state.ruleForm?.status, 100, 200) && state.ruleForm.status !== 9"
  499. v-auth="'business:order:urge:apply'"
  500. >
  501. 催 办</el-button
  502. >
  503. <!-- 100-200 表示工单正在办理中,可以延期申请 -->
  504. <!-- isCanDelay 为true表示可以发起延期申请并且可以办理工单(当前工单没有发起或者正在延期流程中)-->
  505. <el-button
  506. type="primary"
  507. @click="onSubmit('延期申请', '延期附件')"
  508. :loading="state.loading"
  509. v-if="isInRange(state.ruleForm?.status, 100, 200) && state.ruleForm?.isCanDelay && state.ruleForm.status !== 9"
  510. v-auth="'business:order:delay'"
  511. >延 期</el-button
  512. >
  513. <!-- 只有发起了延期流程的可以取消延期 -->
  514. <!-- isCanDelay 为false表示可以发起取消延期申请(当前工单已在延期流程中)-->
  515. <el-button
  516. type="primary"
  517. @click="onCancelDelay"
  518. :loading="state.loading"
  519. v-auth="'business:order:cancelDelay'"
  520. v-if="state.ruleForm?.isCanCancelDelay && state.ruleForm.status !== 9"
  521. >取消延期</el-button
  522. >
  523. <!-- 100-200 表示工单正在办理中 并且应该自己办理 -->
  524. <el-button
  525. type="primary"
  526. @click="onSubmit('工单办理')"
  527. :loading="state.loading"
  528. v-if="isInRange(state.ruleForm?.status, 100, 200) && state.ruleForm?.canHandle && state.ruleForm.status !== 9"
  529. v-auth="'business:order:handle'"
  530. >办 理</el-button
  531. >
  532. <!-- 代办可用 canInsteadHandle -->
  533. <el-button
  534. type="primary"
  535. @click="onSubmit('工单代办')"
  536. :loading="state.loading"
  537. v-if="state.ruleForm?.canInsteadHandle && state.ruleForm.status !== 9"
  538. v-auth="'business:order:handle:instead'"
  539. >代 办</el-button
  540. >
  541. <!-- 流程结束之后不展示补充按钮 -->
  542. <!-- <el-button type="primary" @click="onSupply" :loading="state.loading" v-if="[0].includes(state.workflow.status)"
  543. >补 充</el-button
  544. >-->
  545. <!-- <el-button type="primary" @click="onRevoke" :loading="state.loading">撤 销</el-button>-->
  546. <!-- 100-200 表示工单正在办理中 并且应该自己办理 -->
  547. <el-button
  548. type="primary"
  549. @click="onSubmit('工单退回', '退回附件', '退回附件', '退回意见')"
  550. :loading="state.loading"
  551. v-if="
  552. isInRange(state.ruleForm?.status, 100, 200) && state.ruleForm?.canHandle && state.ruleForm?.canPrevious && state.ruleForm.status !== 9
  553. "
  554. v-auth="'business:order:return'"
  555. >退 回</el-button
  556. >
  557. </span>
  558. </template>
  559. </el-dialog>
  560. <!-- 扩展信息 -->
  561. <order-expand-detail ref="orderExpandDetailRef" />
  562. <!-- 流转记录 -->
  563. <audit-record ref="auditRecordRef">
  564. <template #header>
  565. <el-form label-width="90px" ref="ruleFormRef">
  566. <el-row :gutter="35">
  567. <el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
  568. <el-form-item label="工单编码"> {{ state.ruleForm.no }} </el-form-item>
  569. </el-col>
  570. <el-col :xs="24" :sm="16" :md="16" :lg="16" :xl="16">
  571. <el-form-item label="工单标题"> {{ state.ruleForm.title }} </el-form-item>
  572. </el-col>
  573. </el-row>
  574. </el-form>
  575. </template>
  576. </audit-record>
  577. <!-- 工单补充 -->
  578. <order-supply ref="orderSupplyRef" @onSupplySuccess="onSupplySuccess" />
  579. <!-- 工单督办 -->
  580. <order-supervise ref="orderSuperviseRef" @updateList="onSuperviseSuccess" />
  581. <!-- 工单催办 -->
  582. <order-urge ref="orderUrgeRef" @updateList="onSuperviseSuccess" />
  583. <!-- 流程审批 -->
  584. <process-audit ref="processAuditRef" @orderProcessSuccess="orderProcessSuccess" />
  585. <!-- 重复工单 -->
  586. <order-repeat ref="orderRepeatRef" />
  587. <!-- 特提 -->
  588. <special-handle-order ref="specialHandleOrderRef" @updateList="onSpecialHandleSuccess" />
  589. <!-- 播放录音 -->
  590. <play-record ref="playRecordRef" />
  591. <!-- 自贡流程办理 -->
  592. <z-g-process ref="zgProcessRef" @orderProcessSuccess="orderProcessSuccess" />
  593. </template>
  594. <script setup lang="ts" name="orderDetail">
  595. import { defineAsyncComponent, PropType, reactive, ref } from 'vue';
  596. import { isInRange, transformFile } from '@/utils/tools';
  597. import { cancelDelay, endCounterSign, orderDetail } from '@/api/business/order';
  598. import { ElMessage, ElMessageBox } from 'element-plus';
  599. import { formatDate } from '@/utils/formatTime';
  600. import { callCenterOutbound } from '@/utils/callCenter';
  601. import { useUserInfo } from '@/stores/userInfo';
  602. import { storeToRefs } from 'pinia';
  603. import { useThemeConfig } from '@/stores/themeConfig';
  604. // 引入组件
  605. const OrderExpandDetail = defineAsyncComponent(() => import('@/views/business/order/components/Order-expand-detail.vue')); // 扩展信息
  606. const OrderSupply = defineAsyncComponent(() => import('@/views/business/order/components/Order-supply.vue')); // 工单补充
  607. const OrderSupervise = defineAsyncComponent(() => import('@/views/business/supervise/components/Order-supervise.vue')); // 工单督办
  608. const OrderUrge = defineAsyncComponent(() => import('@/views/business/urge/components/Order-urge.vue')); // 工单催办
  609. const OrderRepeat = defineAsyncComponent(() => import('@/views/business/order/components/Order-repeat.vue')); // 重复工单
  610. const AuditRecord = defineAsyncComponent(() => import('@/components/AuditRecord/index.vue')); // 流程明细
  611. const AnnexList = defineAsyncComponent(() => import('@/components/AnnexList/index.vue')); // 附件列表
  612. const ProcessAudit = defineAsyncComponent(() => import('@/components/ProcessAudit/index.vue')); // 流程审批
  613. const HistoryOrder = defineAsyncComponent(() => import('@/views/todo/seats/accept/History.vue')); // 历史工单
  614. const CitizenPortrait = defineAsyncComponent(() => import('@/views/todo/seats/accept/Citizen-portrait.vue')); // 市民画像
  615. const SpecialHandleOrder = defineAsyncComponent(() => import('@/views/business/special/components/Special-apply-order.vue')); // 特提申请
  616. const PlayRecord = defineAsyncComponent(() => import('@/components/PlayRecord/index.vue')); // 播放录音
  617. const CopyOrder = defineAsyncComponent(() => import('@/views/todo/seats/accept/Copy.vue')); // 副本工单
  618. const ZGProcess = defineAsyncComponent(() => import('@/components/ProcessAudit/ZGProcess.vue')); // 自贡流程
  619. type ButtonType = '' | 'default' | 'success' | 'warning' | 'info' | 'text' | 'primary' | 'danger';
  620. const props = defineProps({
  621. order: {
  622. // 工单详情
  623. type: [Object, null] as PropType<Object | null>,
  624. default: {},
  625. required: true,
  626. },
  627. type: {
  628. type: String as PropType<ButtonType>,
  629. default: 'primary',
  630. },
  631. source: {
  632. // 来源(根据来源判断 有特殊逻辑处理)
  633. type: String,
  634. default: '',
  635. },
  636. });
  637. const storesUserInfo = useUserInfo();
  638. const storesThemeConfig = useThemeConfig();
  639. const { themeConfig } = storeToRefs(storesThemeConfig);
  640. const { userInfos } = storeToRefs(storesUserInfo); // 用户信息
  641. // 定义子组件向父组件传值/事件
  642. const emit = defineEmits(['updateList']);
  643. // 定义变量内容
  644. const state = reactive<any>({
  645. dialogVisible: false, // 弹窗显示隐藏
  646. ruleForm: {
  647. // 表单数据
  648. },
  649. activeName: '0', // tab切换
  650. tabPaneList: [
  651. // tab列表
  652. {
  653. label: '工单详情',
  654. value: '0',
  655. },
  656. {
  657. label: '历史工单',
  658. value: '1',
  659. },
  660. {
  661. label: '回访详情',
  662. value: '2',
  663. },
  664. {
  665. label: '市民画像',
  666. value: '3',
  667. },
  668. {
  669. label: '副本工单',
  670. value: '4',
  671. },
  672. ],
  673. collapseArr: ['1', '2', '3'], //展开列表
  674. loading: false,
  675. supplements: [], // 补充内容
  676. workflow: {}, // 工单流程内容
  677. orderId: '', //工单id
  678. });
  679. const ruleFormRef = ref<RefType>(); // 表单ref
  680. // 高亮关键词
  681. const showKeyWord = (val: string[], keywordArr: string[]) => {
  682. let str: any = val;
  683. if (keywordArr && keywordArr.length) {
  684. // 2.定制关键词对应正则
  685. keywordArr.forEach((e) => {
  686. let regStr = '' + `(${e})`;
  687. let reg = new RegExp(regStr, 'g');
  688. // 3.正则替换,关键词飘红
  689. str = str.replace(reg, '<span class="color-danger font-bold"">' + e + '</span>');
  690. });
  691. }
  692. return str;
  693. };
  694. // 查看工单详情
  695. const getOrderDetail = async (id: string) => {
  696. state.loading = true;
  697. try {
  698. const { result } = await orderDetail(id);
  699. state.ruleForm = result;
  700. state.ruleForm.files = transformFile(state.ruleForm.files);
  701. state.workflow = state.ruleForm?.workflow ?? {};
  702. state.supplements = result?.workflow?.supplements ?? [];
  703. state.loading = false;
  704. } catch (error) {
  705. state.loading = false;
  706. state.dialogVisible = false;
  707. }
  708. };
  709. // 查询历史工单
  710. const historyOrderRef = ref<RefType>(); // 历史工单
  711. const getHistoryList = async () => {
  712. state.loading = true;
  713. try {
  714. historyOrderRef.value.searchHistory();
  715. state.dialogVisible = true;
  716. state.loading = false;
  717. } catch (error) {
  718. state.loading = false;
  719. state.dialogVisible = false;
  720. }
  721. };
  722. // 查询市民画像
  723. const citizenPortraitRef = ref<RefType>(); // 市民画像
  724. const getPortraitList = async () => {
  725. state.loading = true;
  726. try {
  727. citizenPortraitRef.value?.getCitizen(state.ruleForm);
  728. state.dialogVisible = true;
  729. state.loading = false;
  730. } catch (error) {
  731. console.log(error, '2');
  732. state.loading = false;
  733. state.dialogVisible = false;
  734. }
  735. };
  736. // 打开弹窗
  737. const openDialog = (val: any) => {
  738. if (!val || !val.id) {
  739. ElMessage.error('工单id不能为空');
  740. return;
  741. }
  742. state.dialogVisible = true;
  743. state.orderId = val.id;
  744. if (val.activeName) {
  745. state.activeName = val.activeName; //传入查询tab
  746. handleClick(val.activeName);
  747. } else {
  748. getOrderDetail(state.orderId);
  749. }
  750. };
  751. const close = () => {
  752. state.activeName = '0';
  753. currentVisitObj.value = null;
  754. };
  755. // 切换tab 查询列表
  756. const handleClick = (val: string) => {
  757. switch (val) {
  758. case '0': //工单详情
  759. getOrderDetail(state.orderId);
  760. break;
  761. case '1': // 历史工单
  762. getHistoryList();
  763. break;
  764. case '2': // 回访记录
  765. break;
  766. case '3': // 市民画像
  767. getPortraitList();
  768. break;
  769. case '4': // 副本工单
  770. getCopyOrder();
  771. break;
  772. default:
  773. getOrderDetail(state.orderId);
  774. break;
  775. }
  776. };
  777. // 关闭弹窗
  778. const closeDialog = () => {
  779. state.dialogVisible = false;
  780. };
  781. // 查看录音文件 播放录音
  782. const playRecordRef = ref<RefType>();
  783. const recordFile = (obj: any) => {
  784. playRecordRef.value.openDialog(obj.callId);
  785. };
  786. const prefixOptions = ref<EmptyArrayType>([]);
  787. // 电话外呼
  788. const callPhone = (phoneNumber: any) => {
  789. let finalNumber = phoneNumber;
  790. // 处理加0
  791. if (prefixOptions.value.includes('add')) {
  792. finalNumber = '0' + finalNumber;
  793. }
  794. // 处理减0
  795. if (prefixOptions.value.includes('remove')) {
  796. finalNumber = finalNumber.startsWith('0') ? finalNumber.slice(1) : finalNumber;
  797. }
  798. // 移除号码中的非数字字符
  799. finalNumber = finalNumber.replace(/\D/g, '');
  800. if (['YiBin'].includes(themeConfig.value.appScope)) {
  801. callCenterOutbound(finalNumber);
  802. } else {
  803. callCenterOutbound(finalNumber);
  804. }
  805. };
  806. const orderRepeatRef = ref<RefType>();
  807. // 展示重复工单列表
  808. const showRepeatInfo = () => {
  809. orderRepeatRef.value.openDialog(state.ruleForm);
  810. };
  811. // 展示扩展表单
  812. const orderExpandDetailRef = ref<RefType>(); // 扩展信息
  813. const showExpandInfo = () => {
  814. orderExpandDetailRef.value.openDialog(state.ruleForm.orderExtension);
  815. };
  816. // 流转记录
  817. const auditRecordRef = ref<RefType>(); // 流转记录
  818. const zgProcessRef = ref<RefType>();
  819. const onRecord = () => {
  820. const params = {
  821. dialogTitle: '流转记录',
  822. ...state.ruleForm,
  823. };
  824. auditRecordRef.value.openDialog(params);
  825. };
  826. // 提交流程
  827. const processAuditRef = ref<RefType>(); // 处理流程
  828. const onSubmit = (val: string, annexName: string = '办理附件', classify: string = '办理附件', inputPlaceholder = '办理意见') => {
  829. if (['工单办理', '工单退回'].includes(val) && state.ruleForm.isReturnUnderApproval) {
  830. ElMessage.warning(`该工单存在正在审核中的退回,不能办理!`);
  831. return;
  832. }
  833. const params = {
  834. id: state.ruleForm.workflowId,
  835. processType: val,
  836. orderDetail: state.ruleForm,
  837. extra: {
  838. dialogTitle: val,
  839. inputPlaceholder,
  840. annexName,
  841. classify,
  842. },
  843. };
  844. if(['ZiGong'].includes(themeConfig.value.appScope)){
  845. if (['工单办理', '工单代办', '工单退回'].includes(val)) {
  846. zgProcessRef.value.openDialog(params);
  847. } else {
  848. processAuditRef.value.openDialog(params);
  849. }
  850. }else{
  851. processAuditRef.value.openDialog(params);
  852. }
  853. };
  854. // 流程提交成功
  855. const orderProcessSuccess = () => {
  856. closeDialog();
  857. emit('updateList');
  858. };
  859. // 补充信息
  860. const orderSupplyRef = ref<RefType>(); // 工单补充
  861. const onSupply = () => {
  862. // 穿入当前流程id
  863. orderSupplyRef.value.openDialog(state.ruleForm);
  864. };
  865. // 补充意见提交成功
  866. const onSupplySuccess = () => {
  867. handleClick(state.activeName);
  868. emit('updateList');
  869. };
  870. // 督办
  871. const orderSuperviseRef = ref<RefType>(); // 工单督办
  872. const onSupervise = () => {
  873. orderSuperviseRef.value.openDialog(state.ruleForm);
  874. };
  875. // 催办
  876. const orderUrgeRef = ref<RefType>(); // 工单催办
  877. const onUrge = () => {
  878. orderUrgeRef.value.openDialog(state.ruleForm);
  879. };
  880. // 督办提交成功
  881. const onSuperviseSuccess = () => {
  882. handleClick(state.activeName);
  883. emit('updateList');
  884. };
  885. // 查看回访详情
  886. const currentVisitObj = ref<any>();
  887. const onVisitDetail = (row: any) => {
  888. currentVisitObj.value = row;
  889. };
  890. // 查询副本工单
  891. const copyOrderRef = ref<RefType>();
  892. const getCopyOrder = () => {
  893. copyOrderRef.value.queryList();
  894. };
  895. // 特提
  896. const specialHandleOrderRef = ref<RefType>(); // 特提
  897. const onSpecialHandle = () => {
  898. if (state.ruleForm.isReturnUnderApproval) {
  899. ElMessage.warning(`该工单存在正在审核中的退回,不能特提!`);
  900. return;
  901. }
  902. if (state.ruleForm.status == 200) {
  903. // 会签工单无法进行特提
  904. ElMessage.warning('工单会签中,请先结束会签!');
  905. return;
  906. }
  907. specialHandleOrderRef.value.openDialog(state.ruleForm);
  908. };
  909. // 特提提交成功
  910. const onSpecialHandleSuccess = () => {
  911. handleClick(state.activeName);
  912. emit('updateList');
  913. };
  914. // 结束会签
  915. const onCloseCountersignature = () => {
  916. ElMessageBox.confirm(`当前工单正在会签中,是否确认结束会签?`, '提示', {
  917. confirmButtonText: '结束会签',
  918. cancelButtonText: '取消',
  919. type: 'warning',
  920. draggable: true,
  921. cancelButtonClass: 'default-button',
  922. autofocus: false,
  923. })
  924. .then(() => {
  925. endCounterSign({ countersignId: state.ruleForm.countersignId })
  926. .then(() => {
  927. ElMessage.success('结束会签成功');
  928. emit('updateList');
  929. closeDialog();
  930. })
  931. .catch(() => {
  932. emit('updateList');
  933. });
  934. })
  935. .catch(() => {});
  936. };
  937. // 取消延期
  938. const onCancelDelay = () => {
  939. ElMessageBox.confirm(`当前工单正在延期中,是否确认取消延期?`, '提示', {
  940. confirmButtonText: '确定取消',
  941. cancelButtonText: '取消',
  942. type: 'warning',
  943. draggable: true,
  944. cancelButtonClass: 'default-button',
  945. autofocus: false,
  946. })
  947. .then(() => {
  948. cancelDelay({ id: state.ruleForm.id })
  949. .then(() => {
  950. ElMessage.success('取消延期成功');
  951. emit('updateList');
  952. closeDialog();
  953. })
  954. .catch(() => {
  955. emit('updateList');
  956. });
  957. })
  958. .catch(() => {});
  959. };
  960. // 工单详情
  961. const onOrderDetail = () => {
  962. openDialog(props.order);
  963. };
  964. // 暴露变量
  965. defineExpose({
  966. openDialog,
  967. closeDialog,
  968. });
  969. </script>
  970. <style lang="scss" scoped>
  971. .order-detail-container {
  972. display: inline-flex;
  973. }
  974. .collapse-box {
  975. :deep(.el-collapse-item__header) {
  976. background-color: var(--hotline-bg-main-color);
  977. height: 40px;
  978. border-radius: var(--el-border-radius-base);
  979. }
  980. :deep(.el-collapse-item__content) {
  981. padding-bottom: 10px !important;
  982. .el-form-item {
  983. margin-bottom: 5px;
  984. .el-form-item__content {
  985. line-height: 20px;
  986. }
  987. }
  988. }
  989. .collapse-container {
  990. padding: 10px;
  991. .plug-container {
  992. border: var(--el-border);
  993. border-radius: var(--el-border-radius-base);
  994. margin-bottom: 15px;
  995. &:last-child {
  996. margin-bottom: 0;
  997. }
  998. }
  999. }
  1000. }
  1001. :deep(.el-tabs__item) {
  1002. font-size: var(--el-font-size-base);
  1003. }
  1004. :deep(.el-collapse-item__wrap) {
  1005. border-bottom: none;
  1006. }
  1007. .checkbox {
  1008. :deep(.el-checkbox) {
  1009. margin-right: 5px;
  1010. }
  1011. }
  1012. /*.button-select{
  1013. -webkit-user-select:initial;
  1014. -moz-user-select: initial;
  1015. -ms-user-select: initial;
  1016. user-select:initial;
  1017. }*/
  1018. </style>