index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743
  1. <template>
  2. <view class="page">
  3. <image src="/static/image/indexback.png" mode="" style="width: 100%;height: 622rpx;"></image>
  4. <view class="dept dis a-c j-c" @click="deptSelect">
  5. <text class="mr-1">{{ deptradioName }}</text>
  6. <u-icon name="arrow-down" color="#333333" size="14"></u-icon>
  7. </view>
  8. <view class="Service dis f-c a-c j-c " @click="Service">
  9. <image class="" src="/static/icon/customerService.png" mode=""></image>
  10. <text>客服</text>
  11. </view>
  12. <view class="content">
  13. <uni-tab :tabList="tabList" :value="activeTab" noactivebackgroundColor="rgba(254, 249, 239, 55%)">
  14. <!-- 第一个标签内容 -->
  15. <template #content0>
  16. <view class=" dis f-c " style="padding: 20rpx 30rpx 30rpx;">
  17. <text class="imgtitle">请上传车辆行驶证正反页面</text>
  18. <view class="colorBlock"> </view>
  19. <view class="imageUpload" @click="OCRUploadShow = true">
  20. <image src="/static/image/Frame 1321319407.png" mode="aspectFill"></image>
  21. </view>
  22. <view class="quotebtn dis a-c j-c font-weight" @click="manualQuote">
  23. 手动报价
  24. </view>
  25. </view>
  26. </template>
  27. <!-- 第二个标签内容 -->
  28. <template #content1>
  29. <view class=" dis f-c " style="padding: 40rpx 30rpx 30rpx ;">
  30. <view class="license dis f-c ">
  31. <view class="dis a-c ">
  32. <image src="/static/image/licensePlateicon.png" mode=""></image>
  33. <text class="title">车牌号</text>
  34. </view>
  35. <view class="licensePlateRegion mt-2 dis a-c ">
  36. <view class="Region dis a-c j-c " @click="Regionselect">
  37. {{ licenseActiveName }}
  38. </view>
  39. <u--input v-model="licenseValue" placeholder="请输入" border="bottom" clearable
  40. maxlength="7" @input="handleInput"
  41. :customStyle="{ borderColor: '#FDE935 !important' }"></u--input>
  42. </view>
  43. </view>
  44. <view class="license dis f-c mt-3">
  45. <view class="dis ">
  46. <image src="/static/image/caricon.png" mode=""></image>
  47. <text class="title">车辆种类</text>
  48. </view>
  49. <view class="u--input dis a-c j-s" @tap="carTypeShow = true">
  50. <text v-if="carTypeCode" style="font-size: 30rpx; color: #303133;line-height: 52rpx;">{{
  51. carTypeCode }}</text>
  52. <text v-else style="font-size: 30rpx; color: #999;line-height: 52rpx;">请选择车辆类型</text>
  53. <u-icon name="arrow-down" color="#333333" size="14"></u-icon>
  54. </view>
  55. </view>
  56. <view class="licenslist dis mt-3">
  57. <view class="item dis a-c j-c" v-for="(items, index) in historicalVehicle" :key="index"
  58. @click="licensePlateQuery(items.licenseNo)">
  59. <text>{{ items.licenseNo }}</text>
  60. </view>
  61. </view>
  62. <view class="quotebtn dis a-c j-c font-weight" @click="manualQuote1">
  63. 手动报价
  64. </view>
  65. </view>
  66. </template>
  67. </uni-tab>
  68. </view>
  69. <view class="swiper">
  70. <u-swiper :list="bannerList" indicator height="180rpx" radius="10" imgMode="heightFix"></u-swiper>
  71. </view>
  72. <!-- 车牌地区选择 -->
  73. <uni-Popup :show="licenseShow" bgColor="#F8F8F8" @close='licenseclose'>
  74. <template #content>
  75. <view class="licenselist dis f-wrap j-s">
  76. <view class="item dis a-c j-c" :class="{ active: item === licenseActiveName }"
  77. v-for="item in licenselist" :key="item" @tap="licenseItem(item)">
  78. <text>{{ item }}</text>
  79. </view>
  80. </view>
  81. </template>
  82. </uni-Popup>
  83. <!-- 租户机构选择 -->
  84. <uni-Popup :show="deptSelectShow" @close='deptclose' headerTitle="选择出单机构" overflow="auto" maxHeight="580rpx">
  85. <template #content>
  86. <view class="overflow">
  87. <view class="deptselect dis f-c ">
  88. <u-radio-group v-model="deptradiovalue" placement="column" iconPlacement="right"
  89. @change="deptchange">
  90. <view class="item dis a-c " v-for="(item, index) in tenantOrglist" :key="index">
  91. <u-radio activeColor="#FDE935" iconColor='#333' :name="item.systemCode"
  92. style="width: 100%;">
  93. <view class="textregion dis f-c ">
  94. <text>{{ item.sysName }}</text>
  95. <text>{{ item.deptName }}</text>
  96. </view>
  97. <image :src="item.iconAddress" mode=""></image>
  98. </u-radio>
  99. </view>
  100. </u-radio-group>
  101. </view>
  102. </view>
  103. </template>
  104. </uni-Popup>
  105. <!-- 车型选择 -->
  106. <u-picker :show="carTypeShow" :columns="car_kind_codeoptions" keyName="label" @cancel="carTypeShow = false"
  107. @confirm="carTypeconfirm"></u-picker>
  108. <uni-OCRUploadPopup :show="OCRUploadShow" :list='carPopuptablist' @close="OCRUploadShow = false"
  109. :checkType="checkType" @carCallback="carCallback">
  110. </uni-OCRUploadPopup>
  111. </view>
  112. </template>
  113. <script>
  114. import {
  115. mapState,
  116. mapMutations
  117. } from "vuex"
  118. import store from '@/store';
  119. export default {
  120. data() {
  121. return {
  122. //历史车辆信息
  123. historicalVehicle: [],
  124. //车辆信息
  125. carInfo: {
  126. licenseNo: "", //车牌号
  127. brandName: "", //车辆品牌型号
  128. vinNo: "", //车架号
  129. engineNo: "", //发动机号
  130. modelCode: "", //车型编码
  131. seatCount: "", //核定载客量 核定载人数
  132. purchasePrice: "", //新车购置价最低,行业实际价值,协商价值
  133. carBrand: "", //车型品牌
  134. ciCarName: "", //行业车型名称
  135. ciModelCode: "", //行业车型编码
  136. completeKerbMass: "", //整备质量
  137. exhaustScale: "", //排量
  138. factory: "", //工厂名称
  139. factoryid: "", //工厂编码
  140. frameNo: "", //车架号
  141. licenseKindCode: "02", //号牌种类
  142. vehicleclass: "", //车辆类型
  143. familyName: "", //车型
  144. modelcname: "", //车型名称
  145. powertypecode: "", //燃料类型编码
  146. vehicleweight: "", //总质量
  147. limitLoad: "", //核定载质量
  148. carYear: "", //年款
  149. carKindCode: "A0", //车辆种类
  150. powertype: "汽油", //燃料类型
  151. energyTypeCode: "0", //能源种类
  152. displacement: "", //排量
  153. powerScale: "", //功率
  154. registerDate: "", //注册日期
  155. issueDate: "", //发证日期
  156. transferFlag: false, //过户标志
  157. transferFlagBi: false, //商业过户标志
  158. transferDate: "", //过户日期
  159. loanStatus: 0, //贷款标志
  160. firstBeneMan: "", //第一受益人
  161. noLicenseFlag: false, //是否新车
  162. carTypeCode: "K33", //客车A0 货车H0          
  163. carNatureCode: "02", //使用性质 家庭自用8A 非营业企业8B 非营业党政机关,事业团体8C 非营业货车8D
  164. propertyCode: "1", //所属性质 1个人 2企业 3个人
  165. outOfInsurance: false, //脱保
  166. usedCar: false, //二手车
  167. vehicleUseCode: "05" //车辆用途
  168. },
  169. ownersInfo: {}, //车主
  170. policyHolderInfo: {}, //投保人
  171. insuredPersonInfo: {}, //被保人
  172. checkType: "carInfo",
  173. OCRUploadShow: false, //上传弹窗
  174. carPopuptablist: [{
  175. name: '行车本正页',
  176. }, {
  177. name: '行车本副页',
  178. }],
  179. licenseNo: "", //车牌号
  180. carTypeCode: "客车", //车辆类型
  181. carTypeCodeValue: "A0",
  182. carTypeShow: false, //选择车型
  183. tenantOrglist: [], //租户机构列表
  184. tenantLoaded: false, //机构列表是否已加载(防止 onShow 补加载与 onLoad 重复执行)
  185. tenantLoading: false, //机构列表是否加载中(防重入)
  186. historyLoaded: false, //历史报价车牌是否已加载
  187. loadedToken: '', //数据加载时的token(用于检测登录账号变化,401重登/换账号时重置并重载)
  188. deptradiovalue: '',
  189. deptradioName: '',
  190. licenseActiveName: '晋', //车牌选中
  191. licenseValue: "",
  192. licenseShow: false, //车牌选择
  193. deptSelectShow: false, //机构选择弹窗显示/隐藏
  194. bannerList: ["/static/image/banner.png"],
  195. activeTab: 0, //
  196. tabList: [{
  197. label: '传图报价',
  198. id: 0
  199. },
  200. {
  201. label: '车牌号报价',
  202. id: 1
  203. }
  204. ],
  205. licenselist: ["京", "沪", "粤", "津", "冀", "豫", "云", "辽", "黑", "湘", "皖", "鲁", "苏",
  206. "浙", "赣", "鄂", "桂", "甘", "晋", "陕", "蒙", "吉", "闽", "贵", "渝", "川",
  207. "青", "琼", "宁", "挂", "藏", "港", "澳", "新", "使", "学"
  208. ],
  209. carInfoImgViewList: [],
  210. //影像id
  211. carImageListId: [], //车辆
  212. ownerImageListId: [], //车主
  213. policyHolderImageListId: [], //投保人
  214. insuredPersonImageListId: [], //被保人
  215. car_kind_codeoptions: [],
  216. }
  217. },
  218. async onShow() {
  219. if (!store.state.token) {
  220. // 未登录先跳登录页,避免在首页发起需要登录态的请求;已在登录页时不重复跳转
  221. let pages = getCurrentPages();
  222. let currentPage = pages[pages.length - 1];
  223. if (!(currentPage && currentPage.route === 'pages/login/login')) {
  224. uni.navigateTo({
  225. url: "/pages/login/login"
  226. });
  227. }
  228. return;
  229. }
  230. // 登录账号变化(401重登/换账号)时重置加载标志并清空旧数据,重新拉取
  231. // 注意:不重置 tenantLoading,避免打断执行中 onLoad 的防重入(否则会重复请求/重复签到)
  232. if (this.loadedToken !== store.state.token) {
  233. this.tenantLoaded = false;
  234. this.historyLoaded = false;
  235. this.tenantOrglist = [];
  236. this.historicalVehicle = [];
  237. this.deptradiovalue = '';
  238. this.deptradioName = '';
  239. }
  240. // 已登录但首页数据未加载(如未登录时进入过首页后再登录,onLoad 不会重新执行),补加载
  241. if (!this.tenantLoaded) {
  242. await this.loadHomeData(); // 与 onLoad 生命周期共用同一加载方法(内部有防重入)
  243. } else if (!this.historyLoaded) {
  244. this.loadHistoryQuote(); //机构已加载但历史车牌失败过,单独补
  245. }
  246. await this.getDicType("car_kind_code"); //车辆种类
  247. },
  248. onLoad() {
  249. // 页面生命周期:首次进入触发初始化加载。注意不能 this.onLoad() 直接调用——
  250. // 页面生命周期钩子不挂载到组件实例,onShow 中补加载需走 methods 里的 loadHomeData
  251. this.loadHomeData();
  252. },
  253. beforeCreate() {
  254. // setTimeout(() => {
  255. // this.$refs.app_update.update(); //调用子组件检查更新方法
  256. // }, 500)
  257. },
  258. methods: {
  259. ...mapMutations(['activelicenseNo']),
  260. // 首页初始化数据加载:onLoad 生命周期与 onShow 补加载共用(页面生命周期钩子不可 this.onLoad() 调用,故抽为普通方法)
  261. async loadHomeData() {
  262. if (!store.state.token) {
  263. return; // 未登录不发请求(onShow 会跳转登录页),避免 getTenantList 等接口 401 弹“登录已失效”
  264. }
  265. if (this.tenantLoading || this.tenantLoaded) {
  266. return; // 防重入:加载中或已加载过则不再执行,避免重复请求/重复签到
  267. }
  268. const loadToken = store.state.token; // 快照本次加载的token,完成时校验账号是否已变化
  269. this.tenantLoading = true;
  270. try {
  271. let res = await this.$http.post('/userInfo/getTenantList'); //获取机构列表
  272. if (res.code == '200') {
  273. if (res.data && res.data.length) {
  274. if (res.data.length > 1) {
  275. this.tenantOrglist = res.data;
  276. if (!store.state.system_code) {
  277. this.deptSelectShow = true; //多个租户弹窗选择
  278. } else {
  279. this.deptradiovalue = store.state.system_code;
  280. this.deptradioName = store.state.system_Name;
  281. }
  282. } else {
  283. //单个租户赋值第一个(仅组件内数据,写store/签到等副作用在校验通过后执行)
  284. this.tenantOrglist = res.data;
  285. this.deptradiovalue = res.data[0].systemCode;
  286. this.deptradioName = res.data[0].deptName;
  287. }
  288. }
  289. // 账号校验前置:加载期间账号已变化则放弃并清理,避免旧账号数据污染store/重复签到
  290. if (store.state.token !== loadToken) {
  291. this.tenantOrglist = [];
  292. this.deptradiovalue = '';
  293. this.deptradioName = '';
  294. this.deptSelectShow = false;
  295. return;
  296. }
  297. // 校验通过后才执行写store与签到等副作用操作
  298. if (res.data && res.data.length === 1) {
  299. store.commit('setUserModules', {
  300. title: 'system_code',
  301. data: this.tenantOrglist[0].systemCode
  302. })
  303. store.commit('setUserModules', {
  304. title: 'system_Name',
  305. data: this.tenantOrglist[0].sysName
  306. })
  307. await this.bannerquery(); //获取轮播图
  308. await this.getUserInfo(); //获取人员信息
  309. await this.$http.post('/signIn/doSignIn')
  310. }
  311. // 整条初始化链成功后才置位(任一环节失败则不置位,onShow 下次可重试)
  312. this.tenantLoaded = true;
  313. this.loadedToken = loadToken;
  314. } else {
  315. uni.showToast({
  316. icon: 'none',
  317. title: res.msg || '租户接口异常',
  318. })
  319. }
  320. } catch (e) {
  321. // 静默:401 由 dataFactory 统一处理,网络异常不中断;tenantLoaded 保持 false,下次 onShow 可重试
  322. } finally {
  323. this.tenantLoading = false;
  324. }
  325. try {
  326. await this.loadHistoryQuote(); //获取历史报价车牌
  327. } catch (e) {
  328. // 静默:历史报价车牌加载失败不影响主流程
  329. }
  330. },
  331. //获取历史报价车牌(独立方法,失败后 onShow 可单独重试)
  332. async loadHistoryQuote() {
  333. const loadToken = store.state.token; // 快照token,完成时校验账号是否已变化
  334. let res1 = await this.$http.get('/supplementOrder/getHistoryQuote');
  335. if (res1.code == '200') {
  336. if (store.state.token !== loadToken) {
  337. return; // 加载期间账号已变化,放弃(数据属于旧账号)
  338. }
  339. this.historicalVehicle = res1.data;
  340. this.historyLoaded = true;
  341. }
  342. },
  343. arr() {
  344. uni.navigateTo({
  345. url: '/pages/reward/benefitPackage'
  346. })
  347. },
  348. //车牌号查询相关历史订单
  349. licensePlateQuery(item) {
  350. // this.activelicenseNo(item);
  351. uni.navigateTo({
  352. url: '/pages/quote/quoteRecords?license=' + item,
  353. })
  354. },
  355. //获取登录人信息
  356. async getUserInfo() {
  357. let userInfoRes = await this.$http.get('/appUser/userInfoGet', {}); //用户信息
  358. store.commit('setUserModules', { //用户信息
  359. title: 'userInfo',
  360. data: {
  361. sysUser: {
  362. ...userInfoRes.data
  363. }
  364. }
  365. })
  366. },
  367. //获取轮播图
  368. async bannerquery() {
  369. let res = await this.$http.post('/poster/queryPage');
  370. if (res.code == '200' && res.data.records.length > 0) {
  371. let list = res.data.records.map(val => {
  372. return val.previewUrl;
  373. })
  374. this.bannerList = list;
  375. }
  376. },
  377. //数据字典
  378. async getDicType(type, vehicle) {
  379. if (vehicle) {
  380. let res = await this.$http.get(`/dict/get?dictCode=${type}&parentValue=${vehicle}`);
  381. this[type + vehicle + "options"] = [res.data];
  382. } else {
  383. let res = await this.$http.get('/dict/get?dictCode=' + type);
  384. this[type + "options"] = [res.data];
  385. }
  386. },
  387. //影像识别回调事件
  388. carCallback(obj) {
  389. this.carInfoImgViewList = [];
  390. if (obj.frontImg) {
  391. this.carInfoImgViewList.push({
  392. img: obj.frontImg,
  393. deg: 0,
  394. })
  395. }
  396. if (obj.backImg) {
  397. this.carInfoImgViewList.push({
  398. img: obj.backImg,
  399. deg: 0,
  400. })
  401. }
  402. this.carImageListId = obj.ImgList;
  403. Object.assign(this.carInfo, obj.Info);
  404. this.OCRUploadShow = false;
  405. let params = {
  406. carInfo: this.carInfo,
  407. carInfoImgViewList: this.carInfoImgViewList,
  408. carImageListId: this.carImageListId,
  409. }
  410. uni.navigateTo({
  411. url: '/pages/quote/quoteInfo?info=' + JSON.stringify(params)
  412. })
  413. },
  414. //用户机构选择
  415. deptSelect() {
  416. this.deptSelectShow = true;
  417. },
  418. //车牌地区选择
  419. Regionselect() {
  420. this.licenseShow = true;
  421. },
  422. licenseItem(item) {
  423. this.licenseActiveName = item;
  424. this.licenseShow = false;
  425. },
  426. licenseclose() {
  427. this.licenseShow = false;
  428. },
  429. deptclose() {
  430. this.deptSelectShow = false;
  431. },
  432. handleInput(event) {
  433. // 将过滤后的值转换为大写
  434. this.licenseValue = event.toUpperCase();
  435. },
  436. carTypeconfirm(value) {
  437. this.carTypeCode = value.value[0].label;
  438. this.carTypeCodeValue = value.value[0].value;
  439. this.carTypeShow = false;
  440. },
  441. //选择机构
  442. async deptchange(name) {
  443. let info = this.tenantOrglist.find(val => val.systemCode == name);
  444. this.deptradiovalue = info.systemCode;
  445. this.deptradioName = info.sysName;
  446. await store.commit('setUserModules', {
  447. title: 'system_code',
  448. data: info.systemCode,
  449. })
  450. store.commit('setUserModules', {
  451. title: 'system_Name',
  452. data: info.sysName
  453. })
  454. this.deptSelectShow = false;
  455. await this.bannerquery();
  456. await this.getUserInfo();
  457. let res1 = await this.$http.post('/signIn/doSignIn', )
  458. },
  459. async manualQuote() {
  460. uni.navigateTo({
  461. url: '/pages/quote/quoteInfo'
  462. })
  463. },
  464. async manualQuote1() {
  465. if (this.licenseValue !== "" && this.carTypeCodeValue !== "") {
  466. let params = {
  467. licenseNo: this.licenseActiveName + this.licenseValue,
  468. carKindCode: this.carTypeCodeValue,
  469. }
  470. let res = await this.$http.get('/supplementOrder/getCarRecord', params);
  471. if (res.code == '200') {
  472. Object.assign(this.carInfo, res.data.carInfoVo);
  473. Object.assign(this.ownersInfo, res.data.ownersInfo);
  474. Object.assign(this.policyHolderInfo, res.data.policyHolderInfo);
  475. Object.assign(this.insuredPersonInfo, res.data.insuredPersonInfo);
  476. uni.navigateTo({
  477. url: '/pages/quote/quoteInfo',
  478. success: (res) => {
  479. res.eventChannel
  480. .emit(
  481. "acceptData", {
  482. carInfo: this.carInfo,
  483. ownersInfo: this.ownersInfo,
  484. policyHolderInfo: this.policyHolderInfo,
  485. insuredPersonInfo: this.insuredPersonInfo,
  486. })
  487. }
  488. })
  489. } else {
  490. uni.navigateTo({
  491. url: '/pages/quote/quoteInfo'
  492. })
  493. }
  494. } else {
  495. uni.showToast({
  496. title: "请输入车牌号",
  497. icon: 'none',
  498. });
  499. }
  500. },
  501. Service() {
  502. uni.navigateTo({
  503. url: '/pages/tool/helpAndSupport'
  504. })
  505. }
  506. }
  507. }
  508. </script>
  509. <style lang="scss" scoped>
  510. .page {
  511. background-color: #F8F8F8;
  512. height: 100vh;
  513. }
  514. .content {
  515. position: absolute;
  516. top: 327rpx;
  517. left: 0;
  518. right: 0;
  519. padding: 20rpx 30rpx 30rpx;
  520. box-sizing: border-box;
  521. .imgtitle {
  522. font-size: 26rpx;
  523. color: #333;
  524. }
  525. .block {
  526. width: 85%;
  527. height: 50%;
  528. background: #FFFFFF;
  529. border-radius: 10rpx;
  530. border: 1px solid #FFFCB5;
  531. }
  532. .colorBlock {
  533. position: absolute;
  534. top: 52rpx; // 根据实际图片高度调整
  535. left: 50%;
  536. transform: translateX(-50%);
  537. width: 80%;
  538. height: 300rpx;
  539. margin: 0 auto;
  540. margin-top: 16rpx;
  541. background: #fff;
  542. border-radius: 10rpx 10rpx 10rpx 10rpx;
  543. border: 2rpx solid #FFFCB5;
  544. }
  545. .imageUpload {
  546. position: relative;
  547. width: 100%;
  548. height: 376rpx;
  549. background: #fff;
  550. box-shadow: 0px 0px 16px 0px rgba(146, 141, 97, 0.1);
  551. border-radius: 10rpx 10rpx 10rpx 10rpx;
  552. border: 1px solid #FFFCB5;
  553. margin-top: 40rpx;
  554. padding: 30rpx;
  555. box-sizing: border-box;
  556. >image {
  557. width: 100%;
  558. height: 100%;
  559. }
  560. }
  561. .quotebtn {
  562. background: #FDE935;
  563. padding: 19rpx 147rpx;
  564. box-sizing: border-box;
  565. border-radius: 58rpx;
  566. font-size: 36rpx;
  567. color: #1F1F1F;
  568. margin: 60rpx 17rpx 0 17rpx;
  569. }
  570. }
  571. .dept {
  572. position: absolute;
  573. top: 103rpx;
  574. left: 30rpx;
  575. text {
  576. font-size: 30rpx;
  577. color: #333333;
  578. }
  579. }
  580. .Service {
  581. position: absolute;
  582. top: 85rpx;
  583. right: 30rpx;
  584. font-size: 20rpx;
  585. color: #333;
  586. image {
  587. width: 48rpx;
  588. height: 48rpx;
  589. }
  590. }
  591. .swiper {
  592. padding: 30rpx;
  593. margin-top: 480rpx;
  594. box-sizing: border-box;
  595. }
  596. .license {
  597. image {
  598. width: 40rpx;
  599. height: 40rpx;
  600. margin-right: 10rpx;
  601. }
  602. .title {
  603. font-size: 30rpx;
  604. color: #333;
  605. }
  606. .licensePlateRegion {
  607. .Region {
  608. width: 80rpx;
  609. height: 75rpx;
  610. border-radius: 4rpx;
  611. border: 1px solid #FDE935;
  612. padding: 17rpx 25rpx;
  613. font-size: 30rpx;
  614. box-sizing: border-box;
  615. color: #333;
  616. font-weight: bold;
  617. margin-right: 27rpx;
  618. }
  619. }
  620. }
  621. ::v-deep {
  622. .input-placeholder {
  623. font-size: 30rpx;
  624. color: #999 !important;
  625. }
  626. }
  627. //车牌地区选择
  628. .licenselist {
  629. .item {
  630. padding: 12rpx 10rpx;
  631. background-color: #fff;
  632. border-radius: 8rpx;
  633. margin: 8rpx;
  634. font-size: 40rpx;
  635. color: #333;
  636. font-weight: 500;
  637. box-sizing: border-box;
  638. }
  639. .active {
  640. background-color: #FDE935;
  641. }
  642. }
  643. //出单机构选择
  644. .overflow {
  645. padding: 30rpx;
  646. box-sizing: border-box;
  647. .deptselect {
  648. .item {
  649. border-radius: 10rpx;
  650. border: 1px solid #EEEEEE;
  651. padding: 24rpx 25rpx;
  652. margin-bottom: 30rpx;
  653. width: 100%;
  654. box-sizing: border-box;
  655. image {
  656. width: 72rpx;
  657. height: 72rpx;
  658. margin-right: 20rpx;
  659. }
  660. .textregion {
  661. margin-right: auto;
  662. text:first-child {
  663. font-size: 32rpx;
  664. color: #333;
  665. font-weight: bold;
  666. }
  667. text:last-child {
  668. font-size: 30rpx;
  669. color: #666;
  670. }
  671. }
  672. }
  673. }
  674. }
  675. .licenslist {
  676. overflow-x: auto;
  677. /* 超出后可以左右滑动 */
  678. white-space: nowrap;
  679. /* 防止子元素换行 */
  680. padding: 10rpx 0;
  681. /* 添加一些内边距 */
  682. .item {
  683. flex: 0 0 auto;
  684. /* 防止子元素被压缩 */
  685. padding: 8rpx 20rpx;
  686. box-sizing: border-box;
  687. background: linear-gradient(270deg, rgba(253, 233, 53, 0.2) 0%, rgba(220, 238, 111, 0.2) 100%);
  688. border-radius: 2rpx;
  689. margin-right: 10rpx;
  690. font-size: 26rpx;
  691. color: #000;
  692. }
  693. }
  694. .u--input {
  695. padding: 12rpx 18rpx;
  696. border-bottom: 0.5px solid rgb(253, 233, 53);
  697. }
  698. </style>