猫妈狗爸伴宠师小程序前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

753 lines
34 KiB

3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
  1. <template>
  2. <!-- <div>服务档案</div> -->
  3. <view class="box box-size">
  4. <view style="margin: 32rpx 0;">
  5. <up-steps :current="currentStep" activeColor="#FFA042" inactiveColor="#E5E5E5" class="up-steps-custom">
  6. <up-steps-item title="喂养要求" :titleStyle="{fontSize: '32rpx', fontWeight: 'bold', color: currentStep === 0 ? '#FFA042' : '#999999'}"></up-steps-item>
  7. <up-steps-item title="清洁要求" :titleStyle="{fontSize: '32rpx', fontWeight: 'bold', color: currentStep === 1 ? '#FFA042' : '#999999'}"></up-steps-item>
  8. <up-steps-item title="附加服务" :titleStyle="{fontSize: '32rpx', fontWeight: 'bold', color: currentStep === 2 ? '#FFA042' : '#999999'}"></up-steps-item>
  9. </up-steps>
  10. </view>
  11. <!-- v-if="detail.includeDryFood
  12. || detail.includeWetFood
  13. || detail.includeHomemadeFood
  14. || detail.includeRawMeat
  15. || detail.includeHealthSupplements
  16. || detail.includeSnacks
  17. " -->
  18. <!-- 喂养要求内容 -->
  19. <view v-if="currentStep === 0">
  20. <view class="top box-size" :style="{borderRadius:'16rpx'}">
  21. <view class="form-title">
  22. 本次喂养过程中您需要喂养的食品包括
  23. </view>
  24. <view v-if="!detail.includeDryFood && !detail.includeWetFood && !detail.includeHomemadeFood && !detail.includeRawMeat && !detail.includeHealthSupplements && !detail.includeSnacks" class="empty-state-full">
  25. <up-icon name="info-circle" size="60rpx" color="#999999"></up-icon>
  26. <text class="empty-text-full">暂无喂养食品</text>
  27. </view>
  28. <view class=" mt32 ml10" v-if="detail.includeDryFood">
  29. <view class="color-A55 size-30 fw400">
  30. 干粮(主粮冻干等)
  31. </view>
  32. <view class="size-30 mt32 fw400">
  33. 干粮摆放位置
  34. </view>
  35. <view class="img mt20">
  36. <template v-if="handleImageUrl(detail.dryFoodLocation).length > 0">
  37. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.dryFoodLocation)" :key="index"></u-image>
  38. </template>
  39. <view v-else class="empty-state">
  40. <up-icon name="info-circle" size="40rpx" color="#999999"></up-icon>
  41. <text class="empty-text">暂无图片</text>
  42. </view>
  43. </view>
  44. <view class="size-30 mt24 flex-between">
  45. <view :style="{color:'#999999'}">干粮喂养重量</view>
  46. <view class="level">
  47. <view class="input_ mr10">
  48. <input type="text" v-model="detail.dryFoodFeedWeight" :style="{width:'80rpx',height:'50rpx',fontSize:'30rpx'}">
  49. </view>
  50. <view>/(单位:)</view>
  51. </view>
  52. </view>
  53. <view class="size-30 mt24 flex-between">
  54. <view :style="{color:'#999999'}">干粮喂养频率</view>
  55. <view class="level">
  56. <view class="input_ mr10">
  57. <input type="text" v-model="detail.dryFoodFeedFrequencyDays" :style="{width:'80rpx',height:'50rpx',fontSize:'30rpx'}">
  58. </view>
  59. <view></view>
  60. <view class="input_ mr10">
  61. <input type="text" v-model="detail.dryFoodFeedFrequencyTimes" :style="{width:'80rpx',height:'50rpx',fontSize:'30rpx'}">
  62. </view>
  63. <view></view>
  64. </view>
  65. </view>
  66. <view class="size-30 mt24" :style="{color:'#999999'}">
  67. 备注信息
  68. </view>
  69. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  70. <input type="text" disabled v-model="detail.dryFoodRemarks" :style="{height:'50rpx',fontSize:'30rpx'}">
  71. </view>
  72. </view>
  73. <view class="line" :style="{borderRadius:'1rpx'}" v-if="detail.includeDryFood"></view>
  74. <view class=" mt32 ml10" v-if="detail.includeWetFood">
  75. <view class="color-A55 size-30 fw400">
  76. 湿粮(罐头等)
  77. </view>
  78. <view class="size-30 mt32 fw400">
  79. 湿粮摆放位置
  80. </view>
  81. <view class="img mt20">
  82. <template v-if="handleImageUrl(detail.wetFoodLocation).length > 0">
  83. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.wetFoodLocation)" :key="index"></u-image>
  84. </template>
  85. <view v-else class="empty-state">
  86. <up-icon name="info-circle" size="40rpx" color="#999999"></up-icon>
  87. <text class="empty-text">暂无图片</text>
  88. </view>
  89. </view>
  90. <view class="size-30 mt24 flex-between">
  91. <view :style="{color:'#999999'}">湿粮喂养重量</view>
  92. <view class="level">
  93. <view class="input_ mr10">
  94. <input type="text" disabled v-model="detail.wetFoodFeedWeight" :style="{width:'80rpx',height:'50rpx',fontSize:'30rpx'}">
  95. </view>
  96. <view>/(单位:)</view>
  97. </view>
  98. </view>
  99. <view class="size-30 mt24 flex-between">
  100. <view :style="{color:'#999999'}">湿粮喂养频率</view>
  101. <view class="level">
  102. <view class="input_ mr10">
  103. <input type="text" disabled v-model="detail.wetFoodFeedFrequencyDays" :style="{width:'80rpx',height:'50rpx',fontSize:'30rpx'}">
  104. </view>
  105. <view></view>
  106. <view class="input_ mr10">
  107. <input type="text" disabled v-model="detail.wetFoodFeedFrequencyTimes" :style="{width:'80rpx',height:'50rpx',fontSize:'30rpx'}">
  108. </view>
  109. <view></view>
  110. </view>
  111. </view>
  112. <view class="size-30 mt24" :style="{color:'#999999'}">
  113. 备注信息
  114. </view>
  115. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  116. <input type="text" v-model="detail.wetFoodRemarks" :style="{height:'50rpx',fontSize:'30rpx'}">
  117. </view>
  118. </view>
  119. <view class="line" :style="{borderRadius:'1rpx'}" v-if="detail.includeWetFood"></view>
  120. <view class=" mt32 ml10" v-if="detail.includeHomemadeFood">
  121. <view class="color-A55 size-30 fw400">
  122. 自制食品
  123. </view>
  124. <view class="size-30 mt32 fw400">
  125. 自制食品摆放位置
  126. </view>
  127. <view class="img mt20">
  128. <template v-if="handleImageUrl(detail.homemadeFoodLocation).length > 0">
  129. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.homemadeFoodLocation)" :key="index"></u-image>
  130. </template>
  131. <view v-else class="empty-state">
  132. <up-icon name="info-circle" size="40rpx" color="#999999"></up-icon>
  133. <text class="empty-text">暂无图片</text>
  134. </view>
  135. </view>
  136. <view class="size-30 mt24" :style="{color:'#999999'}">
  137. 自制饭制作和喂食说明
  138. </view>
  139. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  140. <input type="text" v-model="detail.homemadeFoodInstructions" :style="{height:'50rpx',fontSize:'30rpx'}">
  141. </view>
  142. </view>
  143. <view class="line" :style="{borderRadius:'1rpx'}" v-if="detail.includeHomemadeFood"></view>
  144. <view class=" mt32 ml10" v-if="detail.includeRawMeat">
  145. <view class="color-A55 size-30 fw400">
  146. 生骨肉
  147. </view>
  148. <view class="size-30 mt32 fw400">
  149. 生骨肉摆放位置
  150. </view>
  151. <view class="img mt20">
  152. <template v-if="handleImageUrl(detail.rawMeatLocation).length > 0">
  153. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.rawMeatLocation)" :key="index"></u-image>
  154. </template>
  155. <view v-else class="empty-state">
  156. <up-icon name="info-circle" size="40rpx" color="#999999"></up-icon>
  157. <text class="empty-text">暂无图片</text>
  158. </view>
  159. </view>
  160. <view class="size-30 mt24" :style="{color:'#999999'}">
  161. 生骨肉喂食说明
  162. </view>
  163. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  164. <input type="text" disabled v-model="detail.rawMeatFeedingInstructions" :style="{height:'50rpx',fontSize:'30rpx'}">
  165. </view>
  166. </view>
  167. <view class="line" :style="{borderRadius:'1rpx'}" v-if="detail.includeRawMeat"></view>
  168. <view class=" mt32 ml10" v-if="detail.includeHealthSupplements">
  169. <view class="color-A55 size-30 fw400">
  170. 保健品
  171. </view>
  172. <view class="size-30 mt32 fw400">
  173. 保健品摆放位置
  174. </view>
  175. <view class="img mt20">
  176. <template v-if="handleImageUrl(detail.healthSupplementsLocation).length > 0">
  177. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.healthSupplementsLocation)" :key="index"></u-image>
  178. </template>
  179. <view v-else class="empty-state">
  180. <up-icon name="info-circle" size="40rpx" color="#999999"></up-icon>
  181. <text class="empty-text">暂无图片</text>
  182. </view>
  183. </view>
  184. <view class="size-30 mt24" :style="{color:'#999999'}">
  185. 保健品喂养方式
  186. </view>
  187. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  188. <input type="text" disabled v-model="detail.healthSupplementsFeedingInstructions" :style="{height:'50rpx',fontSize:'30rpx'}">
  189. </view>
  190. </view>
  191. <view class="line" :style="{borderRadius:'1rpx'}" v-if="detail.includeHealthSupplements"></view>
  192. <view class=" mt32 ml10" v-if="detail.includeSnacks">
  193. <view class="color-A55 size-30 fw400">
  194. 零食
  195. </view>
  196. <view class="size-30 mt32 fw400">
  197. 零食摆放位置
  198. </view>
  199. <view class="img mt20">
  200. <template v-if="handleImageUrl(detail.snacksLocation).length > 0">
  201. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.snacksLocation)" :key="index"></u-image>
  202. </template>
  203. <view v-else class="empty-state">
  204. <up-icon name="info-circle" size="40rpx" color="#999999"></up-icon>
  205. <text class="empty-text">暂无图片</text>
  206. </view>
  207. </view>
  208. <view class="size-30 mt24" :style="{color:'#999999'}">
  209. 零食喂养方式
  210. </view>
  211. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  212. <input type="text" disabled v-model="detail.snacksFeedingMethod" :style="{height:'50rpx',fontSize:'30rpx'}">
  213. </view>
  214. </view>
  215. <view class="line" :style="{borderRadius:'1rpx'}" v-if="detail.includeSnacks"></view>
  216. </view>
  217. <view class="top mt24" :style="{borderRadius:'16rpx'}">
  218. <view class="form-title">
  219. 食盆/自动喂食器
  220. </view>
  221. <view class=" mt32 ml10">
  222. <view class="color-A55 size-30 fw400">
  223. 喂食器具摆放位置
  224. </view>
  225. <view class="mt20">
  226. <template v-if="handleImageUrl(detail.feedingTrayAutomaticFeederLocation).length > 0">
  227. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.feedingTrayAutomaticFeederLocation)" :key="index"></u-image>
  228. </template>
  229. <view v-else class="empty-state">
  230. <up-icon name="info-circle" size="40rpx" color="#999999"></up-icon>
  231. <text class="empty-text">暂无图片</text>
  232. </view>
  233. </view>
  234. <view class="size-30 mt24" :style="{color:'#999999'}">
  235. 备注信息
  236. </view>
  237. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  238. <input type="text" disabled v-model="detail.feedingTrayAutomaticFeederRemarks" :style="{height:'50rpx',fontSize:'30rpx'}">
  239. </view>
  240. </view>
  241. </view>
  242. <view class="top mt24" :style="{borderRadius:'16rpx'}">
  243. <view class="form-title">
  244. 饮用水
  245. </view>
  246. <view class=" mt32 ml10">
  247. <view class="color-A55 size-30 fw400">
  248. 饮用水摆放位置
  249. </view>
  250. <view class="mt20">
  251. <template v-if="handleImageUrl(detail.waterBowlLocation).length > 0">
  252. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.waterBowlLocation)" :key="index"></u-image>
  253. </template>
  254. <view v-else class="empty-state">
  255. <up-icon name="info-circle" size="40rpx" color="#999999"></up-icon>
  256. <text class="empty-text">暂无图片</text>
  257. </view>
  258. </view>
  259. <view class="size-30 mt24" :style="{color:'#999999'}">
  260. 饮用水添加要求
  261. </view>
  262. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  263. <input type="text" disabled v-model="detail.waterBowlRemarks" :style="{height:'50rpx',fontSize:'30rpx'}">
  264. </view>
  265. </view>
  266. </view>
  267. <view class="top mt24" :style="{borderRadius:'16rpx'}">
  268. <view class="form-title">
  269. 其他补充信息(非必填)
  270. </view>
  271. <view class=" mt32 ml10">
  272. <view class="size-30 mt24" :style="{color:'#999999'}">
  273. 备注信息
  274. </view>
  275. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  276. <input type="text" disabled v-model="detail.otherRemark" :style="{height:'50rpx',fontSize:'30rpx'}">
  277. </view>
  278. </view>
  279. </view>
  280. </view>
  281. <!-- 清洁要求内容 -->
  282. <view v-if="currentStep === 1">
  283. <view class="top box-size" :style="{borderRadius:'16rpx'}">
  284. <view class="form-title">
  285. 您需要的清洁内容
  286. </view>
  287. <view v-if="!detail.includeCatLitter && !detail.includeUrinePad" class="empty-state-full">
  288. <up-icon name="info-circle" size="60rpx" color="#999999"></up-icon>
  289. <text class="empty-text-full">暂无清洁内容</text>
  290. </view>
  291. <view class="mt32 ml10" v-if="detail.includeCatLitter">
  292. <view class="color-A55 size-30 fw400">
  293. 猫砂
  294. </view>
  295. <view class="size-30 mt32 fw400">
  296. 猫砂摆放位置
  297. </view>
  298. <view class="img mt20">
  299. <template v-if="handleImageUrl(detail.catLitterLocation).length > 0">
  300. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.catLitterLocation)" :key="index"></u-image>
  301. </template>
  302. <view v-else class="empty-state">
  303. <up-icon name="info-circle" size="40rpx" color="#999999"></up-icon>
  304. <text class="empty-text">暂无图片</text>
  305. </view>
  306. </view>
  307. <view class="size-30 mt24 flex-between">
  308. <view :style="{color:'#999999'}">猫砂更换频率</view>
  309. <view class="level">
  310. <view class="input_ mr10">
  311. <input type="text" disabled v-model="detail.catLitterChangeFrequencyDays" :style="{width:'80rpx',height:'50rpx',fontSize:'30rpx'}">
  312. </view>
  313. <view></view>
  314. <view class="input_ mr10">
  315. <input type="text" disabled v-model="detail.catLitterChangeFrequencyTimes" :style="{width:'80rpx',height:'50rpx',fontSize:'30rpx'}">
  316. </view>
  317. <view></view>
  318. </view>
  319. </view>
  320. <view class="size-30 mt24" :style="{color:'#999999'}">
  321. 备注信息
  322. </view>
  323. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  324. <input type="text" v-model="detail.catLitterRemarks" :style="{height:'50rpx',fontSize:'30rpx'}">
  325. </view>
  326. </view>
  327. <view class="line" :style="{borderRadius:'1rpx'}" v-if="detail.includeCatLitter"></view>
  328. <view class="mt32 ml10" v-if="detail.includeUrinePad">
  329. <view class="color-A55 size-30 fw400">
  330. 尿垫
  331. </view>
  332. <view class="size-30 mt32 fw400">
  333. 尿垫摆放位置
  334. </view>
  335. <view class="img mt20">
  336. <template v-if="handleImageUrl(detail.urinePadLocation).length > 0">
  337. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.urinePadLocation)" :key="index"></u-image>
  338. </template>
  339. <view v-else class="empty-state">
  340. <up-icon name="info-circle" size="40rpx" color="#999999"></up-icon>
  341. <text class="empty-text">暂无图片</text>
  342. </view>
  343. </view>
  344. <view class="size-30 mt24 flex-between">
  345. <view :style="{color:'#999999'}">更换尿垫</view>
  346. <view class="level">
  347. <view class="input_ mr10">
  348. <input type="text" v-model="detail.urinePadChangeFrequency" :style="{width:'80rpx',height:'50rpx',fontSize:'30rpx'}">
  349. </view>
  350. <view></view>
  351. </view>
  352. </view>
  353. <view class="size-30 mt24 flex-between">
  354. <view :style="{color:'#999999'}">尿垫更换频率</view>
  355. <view class="level">
  356. <view class="input_ mr10">
  357. <input type="text" v-model="detail.urinePadChangeFrequencyDays" :style="{width:'80rpx',height:'50rpx',fontSize:'30rpx'}">
  358. </view>
  359. <view></view>
  360. <view class="input_ mr10">
  361. <input type="text" v-model="detail.urinePadChangeFrequencyTimes" :style="{width:'80rpx',height:'50rpx',fontSize:'30rpx'}">
  362. </view>
  363. <view></view>
  364. </view>
  365. </view>
  366. <view class="size-30 mt24" :style="{color:'#999999'}">
  367. 备注信息
  368. </view>
  369. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  370. <input type="text" disabled v-model="detail.urinePadRemarks" :style="{height:'50rpx',fontSize:'30rpx'}">
  371. </view>
  372. </view>
  373. </view>
  374. </view>
  375. <!-- 附加服务内容 -->
  376. <view v-if="currentStep === 2">
  377. <view class="top box-size" :style="{borderRadius:'16rpx'}">
  378. <view class="form-title">
  379. 您需要的附加服务
  380. </view>
  381. <view v-if="!detail.additionalService || (!detail.playtimeService && !detail.furCleaningService && !detail.groomingService && !detail.deepCleaningService)" class="empty-state-full">
  382. <up-icon name="info-circle" size="60rpx" color="#999999"></up-icon>
  383. <text class="empty-text-full">暂无附加服务</text>
  384. </view>
  385. <!-- 陪玩服务 -->
  386. <view class="mt32 ml10" v-if="detail.playtimeService">
  387. <view class="color-A55 size-30 fw400">
  388. 陪玩
  389. </view>
  390. <view class="size-30 mt32 fw400">
  391. 陪玩用具摆放位置
  392. </view>
  393. <view class="img mt20">
  394. <template v-if="handleImageUrl(detail.playtimeToolsLocation).length > 0">
  395. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.playtimeToolsLocation)" :key="index"></u-image>
  396. </template>
  397. <view v-else class="empty-state">
  398. <up-icon name="info-circle" size="40rpx" color="#999999"></up-icon>
  399. <text class="empty-text">暂无图片</text>
  400. </view>
  401. </view>
  402. <view class="size-30 mt24" :style="{color:'#999999'}">
  403. 您希望的互动方式和要求
  404. </view>
  405. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  406. <input type="text" v-model="detail.playtimeRequirements" :style="{height:'50rpx',fontSize:'30rpx'}">
  407. </view>
  408. </view>
  409. <view class="line" :style="{borderRadius:'1rpx'}" v-if="detail.playtimeService"></view>
  410. <!-- 活动区吸毛 -->
  411. <view class="mt32 ml10" v-if="detail.furCleaningService">
  412. <view class="color-A55 size-30 fw400">
  413. 活动区吸毛
  414. </view>
  415. <view class="size-30 mt32 fw400">
  416. 吸毛用品摆放位置
  417. </view>
  418. <view class="img mt20">
  419. <template v-if="handleImageUrl(detail.furCleaningToolsLocation).length > 0">
  420. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.furCleaningToolsLocation)" :key="index"></u-image>
  421. </template>
  422. <view v-else class="empty-state">
  423. <up-icon name="info-circle" size="40rpx" color="#999999"></up-icon>
  424. <text class="empty-text">暂无图片</text>
  425. </view>
  426. </view>
  427. <view class="size-30 mt24" :style="{color:'#999999'}">
  428. 请说明吸毛区域及要求
  429. </view>
  430. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  431. <input type="text" v-model="detail.furCleaningRequirements" :style="{height:'50rpx',fontSize:'30rpx'}">
  432. </view>
  433. </view>
  434. <view class="line" :style="{borderRadius:'1rpx'}" v-if="detail.furCleaningService"></view>
  435. <!-- 毛发梳理 -->
  436. <view class="mt32 ml10" v-if="detail.groomingService">
  437. <view class="color-A55 size-30 fw400">
  438. 毛发梳理
  439. </view>
  440. <view class="size-30 mt32 fw400">
  441. 毛发梳理用品摆放位置
  442. </view>
  443. <view class="img mt20">
  444. <template v-if="handleImageUrl(detail.groomingToolsLocation).length > 0">
  445. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.groomingToolsLocation)" :key="index"></u-image>
  446. </template>
  447. <view v-else class="empty-state">
  448. <up-icon name="info-circle" size="40rpx" color="#999999"></up-icon>
  449. <text class="empty-text">暂无图片</text>
  450. </view>
  451. </view>
  452. <view class="size-30 mt24" :style="{color:'#999999'}">
  453. 请说明毛发梳理要求(: 天数,次数等)
  454. </view>
  455. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  456. <input type="text" v-model="detail.groomingRequirements" :style="{height:'50rpx',fontSize:'30rpx'}">
  457. </view>
  458. </view>
  459. <view class="line" :style="{borderRadius:'1rpx'}" v-if="detail.groomingService"></view>
  460. <!-- 食具深度清洁 -->
  461. <view class="mt32 ml10" v-if="detail.deepCleaningService">
  462. <view class="color-A55 size-30 fw400">
  463. 食具深度清洁
  464. </view>
  465. <view class="size-30 mt32 fw400">
  466. 需深度清洁的用具及消毒剂摆放位置
  467. </view>
  468. <view class="img mt20">
  469. <template v-if="handleImageUrl(detail.deepCleaningToolsLocation).length > 0">
  470. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.deepCleaningToolsLocation)" :key="index"></u-image>
  471. </template>
  472. <view v-else class="empty-state">
  473. <up-icon name="info-circle" size="40rpx" color="#999999"></up-icon>
  474. <text class="empty-text">暂无图片</text>
  475. </view>
  476. </view>
  477. <view class="size-30 mt24" :style="{color:'#999999'}">
  478. 请说明食具/饮水机深度清洁要求(如清洁方式消毒剂使用方式频率等)
  479. </view>
  480. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  481. <input type="text" v-model="detail.deepCleaningRemarks" :style="{height:'50rpx',fontSize:'30rpx'}">
  482. </view>
  483. </view>
  484. <view class="line" :style="{borderRadius:'1rpx'}" v-if="detail.deepCleaningService"></view>
  485. <!-- 喂药上药 -->
  486. <view class="mt32 ml10" v-if="detail.administerMedication">
  487. <view class="color-A55 size-30 fw400">
  488. 喂药上药
  489. </view>
  490. <view class="size-30 mt32 fw400">
  491. 药品摆放位置
  492. </view>
  493. <view class="img mt20">
  494. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.administerMedicationLocation)" :key="index"></u-image>
  495. </view>
  496. <view class="size-30 mt24" :style="{color:'#999999'}">
  497. 请说明药品使用方式
  498. </view>
  499. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  500. <input type="text" disabled v-model="detail.administerMedicationRemarks" :style="{height:'50rpx',fontSize:'30rpx'}">
  501. </view>
  502. </view>
  503. <view class="line" :style="{borderRadius:'1rpx'}" v-if="detail.administerMedication"></view>
  504. <!-- 遛狗服务 -->
  505. <view class="mt32 ml10" v-if="detail.walkDog">
  506. <view class="color-A55 size-30 fw400">
  507. 遛狗服务
  508. </view>
  509. <view class="size-30 mt32 fw400">
  510. 遛狗用品摆放位置
  511. </view>
  512. <view class="img mt20">
  513. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.walkDogToolsLocation)" :key="index"></u-image>
  514. </view>
  515. <!-- 雨天遛狗 -->
  516. <view v-if="detail.walkDogRainyDay">
  517. <view class="size-30 mt32 fw400">
  518. 狗狗雨具位置
  519. </view>
  520. <view class="img mt20">
  521. <u-image class="img" :src="item" mode="aspectFill" width="173rpx" height="230rpx" @click="previewImage(item)" v-for="(item, index) in handleImageUrl(detail.dogRainGearLocation)" :key="index"></u-image>
  522. </view>
  523. <view class="size-30 mt24" :style="{color:'#999999'}">
  524. 下雨天遛狗要求
  525. </view>
  526. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  527. <input type="text" v-model="detail.walkDogRainRemark" :style="{height:'50rpx',fontSize:'30rpx'}">
  528. </view>
  529. </view>
  530. <!-- 遛狗时长 -->
  531. <view v-if="detail.isWalkDogDuration">
  532. <view class="size-30 mt24" :style="{color:'#999999'}">
  533. 遛狗时长
  534. </view>
  535. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  536. <input type="text" v-model="detail.walkDogDuration" :style="{height:'50rpx',fontSize:'30rpx'}">
  537. </view>
  538. </view>
  539. <!-- 狗狗行为 -->
  540. <view v-if="detail.isDogBehavior">
  541. <view class="size-30 mt24" :style="{color:'#999999'}">
  542. 狗狗行为
  543. </view>
  544. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  545. <input type="text" v-model="detail.dogBehavior" :style="{height:'50rpx',fontSize:'30rpx'}">
  546. </view>
  547. </view>
  548. <!-- 偏好区域 -->
  549. <view v-if="detail.isFavoriteRegion">
  550. <view class="size-30 mt24" :style="{color:'#999999'}">
  551. 偏好区域
  552. </view>
  553. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  554. <input type="text" v-model="detail.favoriteRegion" :style="{height:'50rpx',fontSize:'30rpx'}">
  555. </view>
  556. </view>
  557. <!-- 偏好路线 -->
  558. <view v-if="detail.isFavoriteRoute">
  559. <view class="size-30 mt24" :style="{color:'#999999'}">
  560. 偏好路线
  561. </view>
  562. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  563. <input type="text" v-model="detail.favoriteRoute" :style="{height:'50rpx',fontSize:'30rpx'}">
  564. </view>
  565. </view>
  566. </view>
  567. <!-- 附加服务备注 -->
  568. <view class="mt32 ml10">
  569. <view class="size-30 mt24" :style="{color:'#999999'}">
  570. 附加服务备注
  571. </view>
  572. <view class="notes mt16 box-size ml--15" :style="{borderRadius:'16rpx'}">
  573. <input type="text" v-model="detail.additionalServicesRemarks" :style="{height:'50rpx',fontSize:'30rpx'}">
  574. </view>
  575. </view>
  576. </view>
  577. </view>
  578. <!-- 底部按钮 -->
  579. <view class="buttom_ mt60 box-size level" v-if="currentStep > 0">
  580. <view class="buttom_item level size-30" :style="{borderRadius:'41rpx',color:'#fff'}" @click="prevStep">
  581. 上一页
  582. </view>
  583. <view class="buttom_item level size-30" :style="{borderRadius:'41rpx',color:'#fff'}" @click="nextStep">
  584. {{ currentStep === 2 ? '完成' : '下一页' }}
  585. </view>
  586. </view>
  587. <view class="buttom mt60 box-size" v-else>
  588. <view class="buttom-item level size-30" :style="{borderRadius:'41rpx',color:'#fff'}" @click="nextStep">
  589. 下一页
  590. </view>
  591. </view>
  592. </view>
  593. </template>
  594. <script>
  595. import {
  596. getpetList
  597. } from "@/api/pet/index.js"
  598. import {
  599. getDictList
  600. } from "@/api/system/user.js"
  601. import {
  602. getPetCareByPetId
  603. } from "@/api/order/order.js";
  604. export default {
  605. data() {
  606. return {
  607. detail: {},
  608. show: false,
  609. petTypes: [],
  610. petType: '',
  611. orderId: 0,
  612. currentStep: 0, // 当前步骤,0:喂养要求,1:清洁要求,2:附加服务
  613. }
  614. },
  615. onLoad(options) {
  616. this.orderId = options.petId
  617. this.getPetCareByPetId()
  618. // 如果有指定步骤,则切换到对应步骤
  619. if (options.step) {
  620. this.currentStep = parseInt(options.step)
  621. }
  622. },
  623. methods: {
  624. getPetCareByPetId() {
  625. getPetCareByPetId(this.orderId).then(res => {
  626. this.detail = res.data || {}
  627. })
  628. },
  629. handleImageUrl(url) {
  630. if (!url) return []
  631. return url.split(',')
  632. },
  633. previewImage(url) {
  634. uni.previewImage({
  635. urls: [url]
  636. })
  637. },
  638. // 切换到上一步
  639. prevStep() {
  640. if (this.currentStep > 0) {
  641. this.currentStep--;
  642. }
  643. },
  644. // 切换到下一步
  645. nextStep() {
  646. if (this.currentStep < 2) {
  647. this.currentStep++;
  648. } else {
  649. // 如果是最后一步,可以提交表单或返回上一页
  650. uni.navigateBack();
  651. }
  652. },
  653. }
  654. }
  655. </script>
  656. <style scoped lang="scss">
  657. @import"detail.scss";
  658. @import"steps-custom.scss";
  659. .empty-state {
  660. display: flex;
  661. flex-direction: column;
  662. align-items: center;
  663. justify-content: center;
  664. width: 173rpx;
  665. height: 230rpx;
  666. background-color: #f5f5f5;
  667. border-radius: 8rpx;
  668. }
  669. .empty-text {
  670. margin-top: 10rpx;
  671. font-size: 24rpx;
  672. color: #999999;
  673. }
  674. .empty-state-full {
  675. display: flex;
  676. flex-direction: column;
  677. align-items: center;
  678. justify-content: center;
  679. width: 100%;
  680. height: 200rpx;
  681. background-color: #f9f9f9;
  682. border-radius: 8rpx;
  683. margin-top: 20rpx;
  684. }
  685. .empty-text-full {
  686. margin-top: 20rpx;
  687. font-size: 28rpx;
  688. color: #999999;
  689. }
  690. /* 自定义步骤条样式 */
  691. :deep(.up-steps-custom) {
  692. .u-steps-item__wrapper {
  693. width: 40rpx !important;
  694. height: 40rpx !important;
  695. &__circle {
  696. width: 40rpx !important;
  697. height: 40rpx !important;
  698. background: #E5E5E5;
  699. &__text {
  700. font-size: 24rpx;
  701. }
  702. }
  703. }
  704. .u-steps-item__line {
  705. top: 20rpx !important;
  706. height: 4rpx !important;
  707. background: #E5E5E5 !important;
  708. }
  709. /* 激活状态样式 */
  710. .u-steps-item--active {
  711. .u-steps-item__wrapper__circle {
  712. background: linear-gradient(90deg, #FFA042, #FFD591) !important;
  713. }
  714. }
  715. /* 已完成步骤前的线条样式 */
  716. .u-steps-item--process {
  717. .u-steps-item__line {
  718. background: linear-gradient(90deg, #FFA042, #FFD591) !important;
  719. }
  720. }
  721. }
  722. </style>