index.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <script>
  2. import useColumns from "./columns";
  3. export default {
  4. name: "ASPA-SEE",
  5. components: {
  6. zgdButton: () => import("../operating-btn/zgd/index.vue"),
  7. clButton: () => import("../operating-btn/cl/index.vue"),
  8. ElFormatValue: () =>
  9. import(
  10. "@/views/business/as/after-sales/components/format-value/index.vue"
  11. ),
  12. ElImagePreview: () =>
  13. import(
  14. "@/views/business/as/after-sales/components/image-preview/index.vue"
  15. ),
  16. },
  17. data() {
  18. const { formColumns } = useColumns();
  19. const params = this.$init.params(formColumns);
  20. return {
  21. params,
  22. formColumns,
  23. size: "mini",
  24. loading: false,
  25. title: "问题详情",
  26. imgUrl: require("../images/order.png"),
  27. };
  28. },
  29. methods: {
  30. useBack() {},
  31. useEdit() {},
  32. },
  33. created() {},
  34. };
  35. </script>
  36. <template>
  37. <div class="ASPA-SEE" v-loading="loading">
  38. <van-sticky style="width: 100%">
  39. <van-nav-bar
  40. :title="title"
  41. left-text="返回"
  42. right-text="编辑"
  43. left-arrow
  44. @click-left="useBack"
  45. @click-right="useEdit"
  46. style="width: 100%"
  47. />
  48. </van-sticky>
  49. <el-form :model="params">
  50. <el-descriptions :column="1" :size="size" :reverse="true">
  51. <template slot="title">
  52. <div class="mes_title">
  53. <div style="display: flex; align-items: center">
  54. <el-image
  55. style="width: 16px; height: 16px; margin-right: 10px"
  56. :src="imgUrl"
  57. fit="contain"
  58. ></el-image>
  59. <span>单号:{{ params.problemCode }}</span>
  60. </div>
  61. <span>{{
  62. params.createTime &&
  63. new Date(params.createTime.replace(/-/g, "/")).Format(
  64. "yyyy-MM-dd HH:mm"
  65. )
  66. }}</span>
  67. </div>
  68. </template>
  69. <el-descriptions-item
  70. v-for="({ item, attr }, index) in formColumns"
  71. :label="item.title"
  72. >
  73. <el-format-value
  74. v-if="attr.is === 'el-select'"
  75. v-model="params[item.key]"
  76. :dicts="attr.options"
  77. ></el-format-value>
  78. <!-- <el-image-preview
  79. v-else-if="attr.is === 'el-image-preview'"
  80. v-model="params[item.key]"
  81. ></el-image-preview> -->
  82. <span v-else>{{ params[item.key] }}</span>
  83. </el-descriptions-item>
  84. </el-descriptions>
  85. <el-row type="flex" justify="end" style="margin: 15px 0">
  86. <zgd-button :size="size"></zgd-button>
  87. <cl-button :size="size"></cl-button>
  88. </el-row>
  89. <el-card shadow="never">
  90. <p class="dispose">
  91. <span>问题处理情况</span>
  92. <span style="color: #ff8500; font-size: 12px"
  93. >持续时长:{{ params.processingTime }}</span
  94. >
  95. </p>
  96. <el-timeline style="padding: 16px 12px">
  97. <el-timeline-item
  98. v-for="(flow, index) in params.processFlow"
  99. :key="index"
  100. :timestamp="flow.timestamp"
  101. size="large"
  102. >
  103. <div>
  104. <span
  105. >[{{
  106. handleStatus(
  107. flow.problemStateConvert,
  108. flow.problemStateSolve
  109. )
  110. }}] {{ flow.content }}</span
  111. >
  112. <div style="padding: 6px 0 0">
  113. <span>处理人:{{ flow.processorName }}</span>
  114. <el-button
  115. v-if="flow.processorWay"
  116. type="text"
  117. @click="useCall(flow)"
  118. style="padding: 0px 12px"
  119. >{{ flow.processorWay }}</el-button
  120. >
  121. </div>
  122. </div>
  123. </el-timeline-item>
  124. </el-timeline>
  125. </el-card>
  126. </el-form>
  127. </div>
  128. </template>
  129. <style lang="scss" scoped>
  130. .ASPA-SEE {
  131. width: 100%;
  132. height: 100vh;
  133. overflow: hidden;
  134. background-color: #f7f7f7;
  135. .el-form {
  136. height: calc(100vh - 46px);
  137. padding: 16px;
  138. background-color: #f7f7f7;
  139. overflow-x: hidden;
  140. overflow-y: auto;
  141. }
  142. .el-descriptions {
  143. padding: 12px;
  144. background-color: #fff;
  145. border-radius: 4px;
  146. }
  147. }
  148. ::v-deep .el-descriptions__header {
  149. margin: 0 0 12px;
  150. color: #303133;
  151. }
  152. ::v-deep .el-descriptions__title {
  153. width: 100%;
  154. }
  155. .mes_title {
  156. width: 100%;
  157. font-size: 14px;
  158. display: flex;
  159. align-items: center;
  160. justify-content: space-between;
  161. }
  162. ::v-deep .van-uploader__upload {
  163. display: none;
  164. }
  165. .el-card {
  166. font-size: 14px;
  167. }
  168. ::v-deep .el-card__body {
  169. padding: 0;
  170. }
  171. .dispose {
  172. border-bottom: 1px solid #e2dede;
  173. margin: 0;
  174. line-height: 28px;
  175. padding: 6px 12px;
  176. font-weight: 600;
  177. display: flex;
  178. justify-content: space-between;
  179. align-items: center;
  180. }
  181. </style>