AfterSales.vue 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. <template>
  2. <view class="after_sales">
  3. <view class="sales_info" v-if="tableList.length > 0">
  4. <view>名称:{{ fieldRow('categoryName') }}</view>
  5. <view>类型:{{ fieldRow('productCategoryName') }}</view>
  6. <view>编码:{{ fieldRow('categoryCode') }}</view>
  7. <view>发货条码:{{ fieldRow('barcodes') }}</view>
  8. <view>发货时间:{{ fieldRow('shipmentDate') }}</view>
  9. <view>质保有效期:{{ fieldRow('guaranteePeriodDeadline') }}</view>
  10. <view>计量数量:{{ fieldRow('measureQuantity') }}</view>
  11. <view class="action" v-if="type != 'view'">
  12. <text class="text">
  13. 操作:
  14. </text>
  15. <u-button @click="goProblem('add')" :plain="true" :hairline="true" size='mini' type="default"
  16. text="添加故障"></u-button>
  17. <u-button v-if="!isReport" @click="del" :plain="true" :hairline="true" size='mini' type="default"
  18. class="delete" text="删除"></u-button>
  19. </view>
  20. </view>
  21. <view v-for="(item, index) in faultDetails" :key="index" class="view_box" style="position: relative;">
  22. <myCard @edit="goProblem('edit',index,item)" @del="delProblem(index)" :item="item" :index="index+1"
  23. :columns="columns" :btnList="btnData">
  24. <view class="images" slot="imageUrl">
  25. <PreviewPhoto type="view" :imageList="imagesData(item)" />
  26. </view>
  27. </myCard>
  28. </view>
  29. </view>
  30. </template>
  31. <script>
  32. import PreviewPhoto from "@/pages/maintenance/check/components/PreviewPhoto.vue"
  33. import myCard from '@/pages/saleManage/components/myCard.vue'
  34. export default {
  35. components: {
  36. myCard,
  37. PreviewPhoto
  38. },
  39. props: {
  40. itemList: {
  41. type: Array,
  42. default: () => []
  43. },
  44. type: {
  45. type: String,
  46. default: 'edit'
  47. },
  48. // 是否是售后工单的 报工或者修改进入
  49. isReport: {
  50. type: Boolean,
  51. default: false
  52. }
  53. },
  54. watch: {
  55. itemList: {
  56. handler(newVal) {
  57. let list = JSON.parse(JSON.stringify(newVal));
  58. list.map((el) => {
  59. el.faultDetails = el.faultDetails ? el.faultDetails : []
  60. })
  61. this.tableList = list
  62. },
  63. deep: true,
  64. immediate: true
  65. }
  66. },
  67. computed: {
  68. faultDetails() {
  69. if (this.tableList.length > 0) {
  70. return this.tableList[0].faultDetails
  71. }
  72. return []
  73. },
  74. fieldRow() {
  75. return (field) => {
  76. if (this.tableList.length == 0) return '';
  77. return this.tableList[0][field]
  78. }
  79. },
  80. btnData() {
  81. if (this.type == 'view') {
  82. return []
  83. }
  84. if (this.isReport) {
  85. this.btnList[1].judge = [{
  86. authorities: '',
  87. }, {
  88. key: 'customize',
  89. value: ['5'],
  90. }]
  91. }
  92. return this.btnList;
  93. },
  94. imagesData() {
  95. return (item) => {
  96. console.log(item, 'item')
  97. let list = item.imageUrl || [];
  98. return list;
  99. }
  100. }
  101. },
  102. data() {
  103. return {
  104. typeOptions: [{
  105. text: '维修',
  106. value: '1'
  107. },
  108. {
  109. text: '保养',
  110. value: '2'
  111. },
  112. {
  113. text: '安装',
  114. value: '3'
  115. }
  116. ],
  117. columns: [
  118. [{
  119. label: '故障类型:',
  120. prop: 'type',
  121. className: 'perce100',
  122. formatter: (row) => {
  123. const user = this.typeOptions.find(item => item.value === row.type);
  124. return user.text
  125. }
  126. }],
  127. [{
  128. label: '故障现象:',
  129. prop: 'faultPhenomenon',
  130. }],
  131. [{
  132. label: '故障原因:',
  133. prop: 'faultReason'
  134. }],
  135. [{
  136. label: '维修过程:',
  137. prop: 'maintenanceProcess',
  138. }],
  139. [{
  140. label: '图片:',
  141. prop: 'maintenanceProcess',
  142. slot: 'imageUrl',
  143. className: 'perce100 image_url',
  144. }],
  145. [{
  146. label: '操作:',
  147. prop: 'action',
  148. type: this.type != 'view' ? 'action' : '',
  149. className: 'perce100',
  150. }],
  151. ],
  152. btnList: [{
  153. name: '编辑',
  154. apiName: 'edit',
  155. btnType: 'error',
  156. type: '2',
  157. pageUrl: '',
  158. },
  159. {
  160. name: '删除',
  161. apiName: 'del',
  162. btnType: 'error',
  163. type: '2',
  164. pageUrl: '',
  165. }
  166. ],
  167. tableList: []
  168. }
  169. },
  170. onLoad({}) {},
  171. created() {
  172. uni.$off('updateFaultList')
  173. uni.$on('updateFaultList', ({
  174. type,
  175. data,
  176. index
  177. }) => {
  178. console.log(data, 'datadatadatadatadatadata')
  179. if (type == 'add' || type == 'report') {
  180. if (this.isReport) {
  181. data.customize = '5'
  182. }
  183. this.tableList[0].faultDetails.push(data)
  184. } else {
  185. this.$set(this.tableList[0].faultDetails, index, data)
  186. }
  187. })
  188. },
  189. methods: {
  190. del() {
  191. uni.showModal({
  192. title: '确认删除',
  193. content: '确定要删除这条售后对象吗?',
  194. confirmText: '删除',
  195. confirmColor: '#FF4D4F',
  196. success: (res) => {
  197. if (res.confirm) {
  198. this.tableList = [];
  199. } else if (res.cancel) {
  200. // 用户点击了取消按钮
  201. console.log('用户取消删除');
  202. }
  203. }
  204. });
  205. },
  206. // 删除故障
  207. delProblem(index) {
  208. uni.showModal({
  209. title: '确认删除',
  210. content: '确定要删除这条故障吗?',
  211. confirmText: '删除',
  212. confirmColor: '#FF4D4F',
  213. success: (res) => {
  214. if (res.confirm) {
  215. this.tableList[0].faultDetails.splice(index, 1);
  216. } else if (res.cancel) {
  217. // 用户点击了取消按钮
  218. console.log('用户取消删除');
  219. }
  220. }
  221. });
  222. },
  223. // 现在只针对做 一 对 多 的 故障数据
  224. goProblem(type, index, obj = {}) {
  225. let str = this.type == 'report' ? 'report' : '';
  226. let resD = JSON.parse(JSON.stringify(obj));
  227. let arr = [];
  228. if (resD.imageUrl && resD.imageUrl.length > 0) {
  229. arr = JSON.stringify(resD.imageUrl);
  230. delete resD.imageUrl;
  231. }
  232. console.log(arr,'arr ----')
  233. let data = JSON.stringify(resD);
  234. uni.navigateTo({
  235. url: `/pages/salesServiceManagement/demandList/components/faultAdd?type=${type}&index=${index}&data=${data}&str=${str}&arr=${encodeURIComponent(arr)}`
  236. })
  237. },
  238. addFault() {
  239. },
  240. // 返回列表数据
  241. getTabData() {
  242. if (!this.isReport) return this.tableList || [];
  243. let list = this.tableList.map((el) => {
  244. if (el.customize) {
  245. delete el.customize;
  246. }
  247. return el;
  248. })
  249. return list;
  250. }
  251. },
  252. }
  253. </script>
  254. <style lang="scss" scoped>
  255. .after_sales {
  256. .sales_info {
  257. padding: 8px 16px;
  258. font-size: 13px;
  259. font-style: normal;
  260. font-weight: 400;
  261. line-height: 22px;
  262. word-wrap: break-word;
  263. border-bottom: 6rpx solid #E1E1E1;
  264. .action {
  265. display: flex;
  266. line-height: 22px;
  267. .text {
  268. margin-right: 12rpx;
  269. }
  270. /deep/ .u-button {
  271. width: 100rpx;
  272. font-size: 26rpx;
  273. margin-left: 10rpx;
  274. margin-right: 0rpx;
  275. background: #157a2c;
  276. color: #fff !important;
  277. }
  278. }
  279. }
  280. .view_box {
  281. /deep/ .card_box {
  282. .image_url {
  283. width: 110%;
  284. .item_one {
  285. .text {
  286. display: block;
  287. }
  288. }
  289. }
  290. }
  291. }
  292. }
  293. .card_box {
  294. .item_box {
  295. .text {
  296. display: block !important;
  297. }
  298. }
  299. }
  300. </style>