detail.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732
  1. <template>
  2. <home-container>
  3. <view class="report-container">
  4. <!-- 表单区域 -->
  5. <uni-forms ref="form" :rules="rules" :modelValue="formData" label-position="top" err-show-type="modal">
  6. <!-- <scroll-view class="form-scroll" scroll-y> -->
  7. <!-- 安检员信息分组 (默认折叠) -->
  8. <uni-card :is-shadow="true" :shadow="shadow">
  9. <uni-collapse :accordion="false">
  10. <uni-collapse-item title="安检员信息" name="group1" :open="false" :show-animation="true">
  11. <template v-slot:title>
  12. <view class="header-section collapse-title">
  13. <uni-row>
  14. <uni-col :span="8">
  15. <view>
  16. <image v-if="currentUser.avatar" :src="currentUser.avatar" class="cu-avatar xl round"></image>
  17. </view>
  18. </uni-col>
  19. <uni-col :span="16" class="flex padding justify-between">
  20. <uni-row>
  21. <uni-col>
  22. <text>{{ formData.inspectUserName }} </text>
  23. <!-- <text class="collapse-summary">{{ formData.securityLocationText }} </text>
  24. <text class="collapse-summary">{{ formData.positionText }} </text> -->
  25. </uni-col>
  26. <uni-col>
  27. <view v-if="formData.teamName"><text>查获班组:</text><text class="collapse-summary">{{
  28. formData.teamName }}</text></view>
  29. <view v-if="formData.reportTeamText"><text>上报班组:</text><text class="collapse-summary">{{
  30. formData.reportTeamText }}</text></view>
  31. </uni-col>
  32. </uni-row>
  33. </uni-col>
  34. </uni-row>
  35. </view>
  36. </template>
  37. <uni-forms-item label="安检员" name="inspectUserName">
  38. <text class="form-value">{{ formData.inspectUserName }}</text>
  39. </uni-forms-item>
  40. <uni-forms-item label="查获时间" name="seizureTime">
  41. <!-- <uni-datetime-picker type="datetime" :readonly="true" :start="startDate" :end="endDate"
  42. v-model="formData.seizureTime" /> -->
  43. <uni-easyinput v-model="formData.seizureTime" :disabled="true" class="custom-location" />
  44. </uni-forms-item>
  45. <uni-forms-item label="安检位置" name="securityLocation">
  46. <!-- <uni-data-picker :localdata="position_options" popup-title="请选择安检位置" v-model="formData.securityLocation"
  47. :readonly="true" /> -->
  48. <uni-easyinput v-model="formData.securityLocation" :disabled="true" class="custom-location" />
  49. </uni-forms-item>
  50. <uni-forms-item label="安检岗位" name="checkMethod">
  51. <!-- <uni-data-picker :localdata="item_check_method_options" :map="dataOptionMap" popup-title="请选择安检岗位"
  52. v-model="formData.checkMethod" :readonly="true" @change="onItemCheckMethodChange" /> -->
  53. <uni-easyinput v-model="formData.checkMethodText" :disabled="true" class="custom-location" />
  54. </uni-forms-item>
  55. <uni-forms-item label="查获班组" name="team">
  56. <!-- <uni-data-picker :localdata="teams" :readonly="true" popup-title="请选择查获班组" v-model="formData.team"
  57. @change="onTeamChange" /> -->
  58. <uni-easyinput v-model="formData.team" :disabled="true" class="custom-location" />
  59. </uni-forms-item>
  60. <uni-forms-item label="上报班组" name="reportTeam">
  61. <!-- <uni-data-picker :localdata="teams" :readonly="true" popup-title="请选择上报班组" v-model="formData.reportTeam"
  62. @change="onReportTeamChange" /> -->
  63. <uni-easyinput v-model="formData.reportTeam" :disabled="true" class="custom-location" />
  64. </uni-forms-item>
  65. </uni-collapse-item>
  66. </uni-collapse>
  67. </uni-card>
  68. <!-- 违禁品信息分组 -->
  69. <uni-card :is-shadow="true" :shadow="shadow">
  70. <uni-collapse :accordion="false" :value="['group2']">
  71. <uni-collapse-item title="违禁品信息" name="group2" :show-animation="true">
  72. <template v-slot:title>
  73. <view class="collapse-title">
  74. <text>违禁品信息</text>
  75. <text class="collapse-summary" v-if="formData.forbiddenName">{{ formData.forbiddenName }} ·
  76. {{ formData.quantity }}{{ formData.unitText }}</text>
  77. </view>
  78. </template>
  79. <uni-forms-item label="违禁品类别/类型" name="forbiddenCategory">
  80. <!-- <uni-data-picker :localdata="item_category_options" :map="dataTreeOptionMap" popup-title="请选择违禁品类别"
  81. v-model="formData.forbiddenCategory" @change="onCategoryChange" /> -->
  82. <uni-easyinput v-model="formData.forbiddenCategory" :disabled="true" class="custom-location" />
  83. </uni-forms-item>
  84. <uni-forms-item label="违禁品名称" name="forbiddenName">
  85. <!-- <uni-combox :candidates="forbiddenNames" v-model="formData.forbiddenName"></uni-combox> -->
  86. <uni-easyinput v-model="formData.forbiddenName" :disabled="true" class="custom-location" />
  87. </uni-forms-item>
  88. <uni-forms-item label="数量" name="quantity">
  89. <view class="number-input">
  90. <uni-easyinput v-model="formData.quantity" type="number" placeholder="1" class="input-number"
  91. :disabled="true" />
  92. <!-- <uni-easyinput v-model="formData.unit" :disabled="true" class="custom-location" /> -->
  93. <!-- <uni-data-picker :localdata="item_unit_options" :map="dataOptionMap" popup-title="请选择单位"
  94. v-model="formData.unit" @change="onUnitChange" name="unit" /> -->
  95. </view>
  96. </uni-forms-item>
  97. </uni-collapse-item>
  98. </uni-collapse>
  99. </uni-card>
  100. <!-- 查获部位分组 -->
  101. <uni-card :is-shadow="true" :shadow="shadow">
  102. <uni-collapse :accordion="false" :value="['group3']">
  103. <uni-collapse-item title="查获部位" name="group3" :show-animation="true">
  104. <template v-slot:title>
  105. <view class="collapse-title">
  106. <text>查获部位</text>
  107. <text class="collapse-summary" v-if="formData.partCategoryText">{{ formData.partCategoryText }} ·
  108. {{ formData.customLocation || formData.locationText }}</text>
  109. </view>
  110. </template>
  111. <uni-forms-item label="部位类别/类型" name="partCategory">
  112. <!-- <uni-data-picker :localdata="check_point_options" :map="dataTreeOptionMap" popup-title="请选择部位类别"
  113. v-model="formData.partCategory" @change="onPartCategoryChange" /> -->
  114. <uni-easyinput v-model="formData.partCategory" :disabled="true" class="custom-location" />
  115. </uni-forms-item>
  116. <uni-forms-item label="具体位置" name="location">
  117. <view class="location-input">
  118. <!-- <uni-easyinput v-model="formData.customLocation" :disabled="true" class="custom-location" /> -->
  119. <uni-easyinput v-model="formData.customLocation" :disabled="true" class="custom-location" />
  120. </view>
  121. </uni-forms-item>
  122. <uni-forms-item label="处理方式" name="handlingMethod">
  123. <!-- <uni-data-picker popup-title="请选择处理方式" :map="dataOptionMap" :localdata="item_handling_method_options"
  124. v-model="formData.handlingMethod" @change="onMethodChange" /> -->
  125. <uni-easyinput v-model="formData.handlingMethod" :disabled="true" class="custom-location" />
  126. </uni-forms-item>
  127. <uni-forms-item label="是否隐匿夹带" name="isConcealed">
  128. <uni-easyinput v-model="formData.isConcealed" :disabled="true" class="custom-location" />
  129. </uni-forms-item>
  130. </uni-collapse-item>
  131. </uni-collapse>
  132. </uni-card>
  133. <!-- 违禁品照片分组 -->
  134. <uni-card :is-shadow="true" :shadow="shadow">
  135. <uni-collapse :accordion="false" :value="['group4']">
  136. <uni-collapse-item title="违禁品照片" name="group4" :show-animation="true">
  137. <uni-file-picker v-if="ready" v-model="formData.images" limit="8" title="最多上传8张" :image-styles="imageStyles"
  138. fileMediatype="image" mode="grid" :readonly="true"/>
  139. </uni-collapse-item>
  140. </uni-collapse>
  141. </uni-card>
  142. <!-- 旅客信息分组 -->
  143. <!-- <uni-card :is-shadow="true" :shadow="shadow">
  144. <uni-collapse :accordion="false" :value="['group5']">
  145. <uni-collapse-item title="旅客信息" name="group5" :show-animation="true">
  146. <template v-slot:title>
  147. <view class="collapse-title">
  148. <text>旅客信息</text>
  149. <text class="collapse-summary" v-if="formData.passengerName">{{ formData.passengerName }} ·
  150. {{ formData.flightNumber || '无航班号' }}</text>
  151. </view>
  152. </template>
  153. <uni-forms-item label="姓名" name="passengerName">
  154. <uni-easyinput v-model="formData.passengerName" placeholder="请输入旅客姓名" :disabled="true" />
  155. </uni-forms-item>
  156. <uni-forms-item label="证件号" name="passengerId">
  157. <uni-easyinput v-model="formData.passengerId" placeholder="请输入证件号 (可选)" :disabled="true" />
  158. </uni-forms-item>
  159. <uni-forms-item label="航班号" name="flightNumber">
  160. <uni-easyinput v-model="formData.flightNumber" placeholder="例如:CA1234 (可选)" :disabled="true" />
  161. </uni-forms-item>
  162. </uni-collapse-item>
  163. </uni-collapse>
  164. </uni-card> -->
  165. <!-- 提交按钮 -->
  166. <!-- <button type="primary" class="submit-btn" @click="submitForm">提交上报</button> -->
  167. <!-- </scroll-view> -->
  168. </uni-forms>
  169. </view>
  170. </home-container>
  171. </template>
  172. <script>
  173. import HomeContainer from "@/components/HomeContainer.vue";
  174. import { treeSelectByType } from "@/api/system/common"
  175. import useDictMixin from '@/utils/dict'
  176. import { addSeizureRecord } from '@/api/seizure/seizureRecord.js'
  177. import { getInfo } from '@/api/seizure/seizureRecord.js'
  178. export default {
  179. components: { HomeContainer },
  180. mixins: [useDictMixin],
  181. computed: {
  182. currentUser() {
  183. return this.$store.state.user;
  184. }
  185. },
  186. data() {
  187. return {
  188. ready: false,
  189. // 阴影效果配置
  190. shadow: '0 2px 6px rgba(0, 0, 0, 0.1)',
  191. // 表单数据
  192. formData: {
  193. // 安检员信息
  194. inspectUserName: this.$store.state.user.name,
  195. inspectUserId: this.$store.state.user.id,
  196. seizureTime: this.formatDateTime(new Date()),
  197. securityLocation: '',
  198. securityLocationText: '',
  199. checkMethod: '', // 检查岗位
  200. checkMethodText: '',
  201. teamId: 1,
  202. team: 'morning-a',
  203. teamName: '早班A组',
  204. reportTeam: '',
  205. reportTeamText: '',
  206. // 违禁品信息
  207. forbiddenCategory: '',
  208. forbiddenCategoryText: '',
  209. forbiddenType: '',
  210. forbiddenTypeText: '',
  211. forbiddenName: '',
  212. quantity: '1',
  213. unit: '',
  214. unitText: '',
  215. // 查获部位
  216. partCategory: '',
  217. partCategoryText: '',
  218. partType: '',
  219. partTypeText: '',
  220. location: '',
  221. locationText: '',
  222. customLocation: '',
  223. handlingMethod: '',
  224. handlingMethodDesc: '',
  225. isConcealed: 'no',
  226. // 旅客信息
  227. passengerName: '',
  228. passengerId: '',
  229. flightNumber: '',
  230. // 照片
  231. images: [],
  232. //暂时不要
  233. channelCode: '无',
  234. attendanceId: 111111,
  235. attendanceTeamId: 111111,
  236. attendanceTeamName: '无',
  237. attendanceDepartmentId: 111111,
  238. attendanceDepartmentName: '无',
  239. attendanceStationId: 111111,
  240. attendanceStationName: '无',
  241. regionalCode: 111111,
  242. regionalName: '无',
  243. terminlCode: 111111,
  244. terminlName: '无',
  245. channelName: '无',
  246. inspectTeamId: 111111,
  247. inspectTeamName: '无',
  248. inspectDepartmentId: 111111,
  249. inspectDepartmentName: '无',
  250. checkMethodDesc: '无',
  251. },
  252. // 验证规则
  253. rules: {
  254. },
  255. // 数据选项
  256. item_check_method_options: [], // 检查岗位
  257. position_options: [], // 位置通道
  258. teams: [
  259. { text: '早班A组', value: 'morning-a' },
  260. { text: '早班B组', value: 'morning-b' },
  261. { text: '中班A组', value: 'noon-a' },
  262. { text: '中班B组', value: 'noon-b' },
  263. { text: '晚班A组', value: 'night-a' },
  264. { text: '晚班B组', value: 'night-b' }
  265. ],
  266. forbiddenNames: ['打火机', '汽油'],
  267. item_category_options: [], // 物品分类
  268. typeData: [],
  269. item_unit_options: [],
  270. check_point_options: [],
  271. partTypeData: [],
  272. locations: [
  273. { text: '上衣口袋', value: 'jacket-pocket' },
  274. { text: '裤子口袋', value: 'pants-pocket' },
  275. { text: '行李箱夹层', value: 'luggage-interlayer' },
  276. { text: '背包侧袋', value: 'bag-side' }
  277. ],
  278. item_handling_method_options: [], // 处理方式
  279. concealOptions: [
  280. { name: '是', value: 'yes' },
  281. { name: '否', value: 'no' }
  282. ],
  283. // 其他数据
  284. startDate: '2020-01-01',
  285. endDate: '2030-12-31',
  286. imageStyles: {
  287. width: 80,
  288. height: 80,
  289. border: {
  290. color: '#eee',
  291. width: '1px',
  292. style: 'solid'
  293. }
  294. },
  295. dataOptionMap: { text: 'label', value: 'value' }, // 级联字段映射关系
  296. dataTreeOptionMap: { text: 'label', value: 'code' } // 级联字段映射关系树结构
  297. }
  298. },
  299. onLoad(options) {
  300. // 从 URL 参数取 id
  301. const id = options.id
  302. if (id) {
  303. this.loadDetail(id)
  304. }
  305. },
  306. methods: {
  307. async loadDetail(id) {
  308. uni.showLoading({ title: '加载中...' })
  309. try {
  310. console.log("id", id)
  311. const res = await getInfo(id)
  312. console.log("res", res)
  313. if (res.code === 200) {
  314. this.formData = res.data
  315. this.formData.securityLocation = res.data.regionalName
  316. this.formData.securityLocationText = res.data.regionalName
  317. this.formData.team = res.data.inspectStationName+" / "+res.data.inspectDepartmentName+" / "+res.data.inspectTeamName
  318. this.formData.teamName = res.data.inspectStationName+" / "+res.data.inspectDepartmentName+" / "+res.data.inspectTeamName,
  319. this.formData.reportTeam = res.data.attendanceTeamName
  320. this.formData.reportTeamText = res.data.attendanceTeamName
  321. this.formData.passengerId = res.data.passengerCard
  322. this.formData.flightNumber = res.data.passengerFlight
  323. this.formData.checkMethodText = res.data.checkMethodDesc
  324. this.formData.forbiddenCategory = res.data.itemSeizureItemsList[0].categoryNameOne,
  325. this.formData.forbiddenCategoryText = res.data.itemSeizureItemsList[0].categoryNameOne,
  326. this.formData.forbiddenType = res.data.itemSeizureItemsList[0].forbiddenTypeText,
  327. this.formData.forbiddenTypeText = res.data.itemSeizureItemsList[0].forbiddenTypeText,
  328. this.formData.quantity = res.data.itemSeizureItemsList[0].quantity,
  329. this.formData.unit = res.data.itemSeizureItemsList[0].unitDesc,
  330. this.formData.unitDesc = res.data.itemSeizureItemsList[0].unitDesc,
  331. this.formData.forbiddenName = res.data.itemSeizureItemsList[0].itemName,
  332. this.formData.partCategory = res.data.itemSeizureItemsList[0].checkPositionNameOne,
  333. this.formData.partCategoryText = res.data.itemSeizureItemsList[0].checkPositionNameOne,
  334. this.formData.customLocation = res.data.itemSeizureItemsList[0].checkPositionSpecific,
  335. this.formData.isActiveConcealment = res.data.itemSeizureItemsList[0].isActiveConcealment,
  336. this.formData.handlingMethod = res.data.itemSeizureItemsList[0].handlingMethodDesc,
  337. this.formData.handlingMethodDesc = res.data.itemSeizureItemsList[0].handlingMethodDesc,
  338. console.log("")
  339. if(res.data.itemSeizureItemsList[0].baseAttachmentList){
  340. this.formData.images = res.data.itemSeizureItemsList[0].baseAttachmentList.map(item => ({
  341. url: item.attachmentUrl,
  342. name: item.attachmentUrl.split('/').pop(),
  343. extname: '.' + item.attachmentUrl.split('.').pop()
  344. }));
  345. }
  346. // 数据装完后才让组件渲染
  347. this.$nextTick(() => (this.ready = true));
  348. if (res.data.itemSeizureItemsList[0].isActiveConcealment == 1) {
  349. this.formData.isConcealed = '是'
  350. } else {
  351. this.formData.isConcealed = '否'
  352. }
  353. console.log("this.formData", this.formData)
  354. // 初始化下拉选项
  355. // this.initOptions()
  356. } else {
  357. uni.showToast({ title: '详情加载失败', icon: 'none' })
  358. }
  359. } catch (e) {
  360. console.log("eee", e)
  361. uni.showToast({ title: '加载失败', icon: 'none' })
  362. } finally {
  363. uni.hideLoading()
  364. }
  365. },
  366. formatDateTime(date) {
  367. const y = date.getFullYear();
  368. const m = String(date.getMonth() + 1).padStart(2, '0');
  369. const d = String(date.getDate()).padStart(2, '0');
  370. const h = String(date.getHours()).padStart(2, '0');
  371. const mm = String(date.getMinutes()).padStart(2, '0');
  372. const s = String(date.getSeconds()).padStart(2, '0');
  373. return `${y}-${m}-${d} ${h}:${mm}:${s}`;
  374. },
  375. // 安检位置变化
  376. onLocationChange(e) {
  377. this.formData.securityLocation = e.detail.value[1]?.value || '';
  378. this.formData.securityLocationText = e.detail.value[1]?.label || e.detail.value[0]?.label || '';
  379. },
  380. // 通用取值:只拿最后一级
  381. lastValue(e) {
  382. const val = e.detail.value;
  383. if (Array.isArray(val)) return val[val.length - 1] || '';
  384. if (val && typeof val === 'object') return val.value || '';
  385. return String(val || '');
  386. },
  387. // 安检岗位
  388. onItemCheckMethodChange(e) {
  389. this.formData.checkMethod = e.detail.value[0]?.value || '';
  390. this.formData.checkMethodText = e.detail.value[0]?.text || e.detail.value[0]?.text || '';
  391. },
  392. // 查获班组变化
  393. onTeamChange(e) {
  394. this.formData.team = e.detail.value;
  395. this.formData.teamName = e.detail.value[1]?.label || e.detail.value[0]?.label || '';
  396. },
  397. // 上报班组变化
  398. onReportTeamChange(e) {
  399. this.formData.reportTeam = e.detail.value;
  400. this.formData.reportTeamText = e.detail.value[1]?.label || e.detail.value[0]?.label || '';
  401. },
  402. // 违禁品类别变化
  403. onCategoryChange(e) {
  404. this.formData.forbiddenCategory = e.detail.value[0].value;
  405. this.formData.forbiddenCategoryText = e.detail.value[0].label;
  406. this.formData.forbiddenType = '';
  407. this.formData.forbiddenTypeText = '';
  408. // 根据类别加载类型数据 需要调用接口
  409. },
  410. // 违禁品类型变化
  411. onTypeChange(e) {
  412. this.formData.forbiddenType = e.detail.value[0].value;
  413. this.formData.forbiddenTypeText = e.detail.value[0].text;
  414. this.formData.forbiddenName = this.formData.forbiddenName + ' - ' + e.detail.value[0].text;
  415. },
  416. // 单位变化
  417. onUnitChange(e) {
  418. this.formData.unit = e.detail.value;
  419. this.formData.unitText =
  420. this.item_unit_options.find(item => item.value === e.detail.value)?.label || '件';
  421. },
  422. // 部位类别变化
  423. onPartCategoryChange(e) {
  424. this.formData.partCategory = e.detail.value[0].value;
  425. this.formData.partCategoryText = e.detail.value[0].text;
  426. this.formData.partType = '';
  427. this.formData.partTypeText = '';
  428. this.formData.customLocation = '';
  429. // 根据部位类别加载类型数据
  430. if (this.formData.partCategory === 'body') {
  431. this.partTypeData = [
  432. { text: '口袋', value: 'pocket' },
  433. { text: '腰带', value: 'belt' },
  434. { text: '鞋底', value: 'shoe' }
  435. ];
  436. } else if (this.formData.partCategory === 'luggage') {
  437. this.partTypeData = [
  438. { text: '夹层', value: 'interlayer' },
  439. { text: '侧袋', value: 'sidepocket' },
  440. { text: '主仓', value: 'main' }
  441. ];
  442. } else {
  443. this.partTypeData = [
  444. { text: '外层', value: 'outer' },
  445. { text: '内层', value: 'inner' },
  446. { text: '特殊部位', value: 'special' }
  447. ];
  448. }
  449. },
  450. // 部位类型变化
  451. onPartTypeChange(e) {
  452. this.formData.partType = e.detail.value[0].value;
  453. this.formData.partTypeText = e.detail.value[0].text;
  454. },
  455. // 具体位置选择
  456. onLocationSelectChange(e) {
  457. this.formData.location = e.detail.value;
  458. this.formData.locationText = this.locations.find(item => item.value === e.detail.value)?.text || '';
  459. this.formData.customLocation = this.formData.locationText;
  460. },
  461. // 处理方式变化
  462. onMethodChange(e) {
  463. this.formData.handlingMethod = e.detail.value;
  464. this.formData.handlingMethodDesc = this.item_handling_method_options.find(item => item.value === e.detail.value)?.label || '';
  465. },
  466. // 是否有意隐匿选择
  467. bindConcealChange(e) {
  468. this.formData.isConcealed = e.detail.value;
  469. },
  470. // 提交表单
  471. }
  472. }
  473. </script>
  474. <style lang="scss" scoped>
  475. .report-container {
  476. // background-color: #f5f5f5;
  477. min-height: 100vh;
  478. padding-top: 180rpx;
  479. }
  480. .form-scroll {
  481. height: calc(100vh - 50px);
  482. padding: 1px;
  483. box-sizing: border-box;
  484. }
  485. /* 卡片样式 */
  486. ::v-deep .uni-card {
  487. margin-bottom: 15px;
  488. border-radius: 8px;
  489. overflow: hidden;
  490. .uni-card__content {
  491. padding: 0;
  492. }
  493. }
  494. /* 折叠面板标题 */
  495. .collapse-title {
  496. display: flex;
  497. flex-direction: column;
  498. padding: 12px 15px;
  499. .collapse-summary {
  500. font-size: 12px;
  501. color: #999;
  502. margin-top: 4px;
  503. }
  504. }
  505. /* 表单项样式 */
  506. ::v-deep .uni-forms-item {
  507. margin-bottom: 0;
  508. padding: 0 15px;
  509. .uni-forms-item__label {
  510. padding: 12px 0 8px;
  511. font-size: 14px;
  512. color: #666;
  513. width: auto !important;
  514. }
  515. .uni-forms-item__content {
  516. padding: 0 0 12px;
  517. border-bottom: 1px solid #f0f0f0;
  518. }
  519. &:last-child .uni-forms-item__content {
  520. border-bottom: none;
  521. }
  522. }
  523. .picker-box {
  524. display: flex;
  525. align-items: center;
  526. justify-content: space-between;
  527. height: 44px;
  528. .picker-value {
  529. font-size: 15px;
  530. color: #333;
  531. &:empty::after {
  532. content: attr(placeholder);
  533. color: #999;
  534. }
  535. }
  536. &.disabled {
  537. opacity: 0.5;
  538. }
  539. }
  540. .form-value {
  541. font-size: 15px;
  542. color: #333;
  543. height: 44px;
  544. line-height: 44px;
  545. }
  546. .number-input {
  547. display: flex;
  548. align-items: center;
  549. height: 44px;
  550. .input-number {
  551. flex: 1;
  552. }
  553. .unit-picker {
  554. width: 80px;
  555. margin-left: 10px;
  556. }
  557. }
  558. .location-input {
  559. display: flex;
  560. height: 44px;
  561. .picker-box {
  562. width: 120px;
  563. }
  564. .custom-location {
  565. flex: 1;
  566. margin-left: 0px;
  567. }
  568. }
  569. .radio-group {
  570. display: flex;
  571. padding: 8px 0;
  572. .radio-item {
  573. display: flex;
  574. align-items: center;
  575. margin-right: 30px;
  576. text {
  577. font-size: 15px;
  578. color: #333;
  579. margin-left: 5px;
  580. }
  581. }
  582. }
  583. .submit-btn {
  584. margin-top: 20px;
  585. width: calc(100% - 30px);
  586. margin-left: 15px;
  587. }
  588. /* 底部弹窗样式调整 */
  589. ::v-deep .uni-popup__wrapper {
  590. border-radius: 16px 16px 0 0;
  591. .uni-popup__wrapper-box {
  592. max-height: 70vh;
  593. overflow-y: auto;
  594. }
  595. .uni-data-pickerview {
  596. padding-bottom: 20px;
  597. }
  598. }
  599. </style>