PersonalInfoTab.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590
  1. <template>
  2. <view class="personal-info-tab">
  3. <uni-loading v-if="loading" />
  4. <view v-else class="user-form">
  5. <uni-row class="demo-uni-row">
  6. <!-- <uni-col :xs="24" :sm="24" :md="24" :lg="6" :xl="6">-->
  7. <!-- <view class="avatar-section">-->
  8. <!-- <cwg-input v-model:value="formData.idBackUrl" type="upload" fkey="idBackUrl"-->
  9. <!-- rulesKey="idBackUrl" :is-upload-d="true" accept="image/png, image/jpeg, image/jpg"-->
  10. <!-- :readonly="isReadonly" :disabled="isReadonly" @change="handleChange">-->
  11. <!-- <view class="cwg-upload">-->
  12. <!-- </view>-->
  13. <!-- </cwg-input>-->
  14. <!-- <view class="text name">{{ formData.firstName }} {{ formData.lastName }}</view>-->
  15. <!-- <view class="text cid">CID:{{ formData.cId }}</view>-->
  16. <!-- <view class="btn-primary" @click="handleEditProfile">-->
  17. <!-- <cwg-icon name="crm-photo-film" :size="16" color="#fff" />-->
  18. <!-- 上传头像-->
  19. <!-- </view>-->
  20. <!-- </view>-->
  21. <!-- </uni-col>-->
  22. <uni-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  23. <uni-forms ref="baseForm" :model="formData" labelWidth="200" label-position="top" :rules="rules"
  24. class="base-info-form">
  25. <uni-row class="demo-uni-row uni-row1">
  26. <!-- cid -->
  27. <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
  28. <uni-forms-item :label="t('PersonalManagement.Label.UserCID')">
  29. <uni-easyinput :disabled="isInfo" :clearable="false" v-model:value="formData.cId" />
  30. </uni-forms-item>
  31. </uni-col>
  32. <!-- 客户类型 -->
  33. <uni-col v-if="formData.customType" :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
  34. <uni-forms-item :label="t('ImproveImmediately.Label.CustomerType')">
  35. <cwg-combox :disabled="isInfo" :clearable="false" v-model:value="formData.customType"
  36. :options="customTypeOptions" :placeholder="t('placeholder.choose')" />
  37. </uni-forms-item>
  38. </uni-col>
  39. <!-- 公司名称 -->
  40. <uni-col v-if="formData.companyName" :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
  41. <uni-forms-item :label="t('ImproveImmediately.Label.CompanyName')">
  42. <uni-easyinput :disabled="isInfo" :clearable="false" v-model="formData.companyName"
  43. :placeholder="t('placeholder.input')" />
  44. </uni-forms-item>
  45. </uni-col>
  46. <!-- 性别 -->
  47. <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
  48. <uni-forms-item :label="t('ImproveImmediately.Label.Gender')">
  49. <cwg-combox :disabled="isInfo" :clearable="false" v-model:value="formData.gender"
  50. :options="sexOptions" :placeholder="t('placeholder.choose')" />
  51. </uni-forms-item>
  52. </uni-col>
  53. <!-- 国家 -->
  54. <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8" v-if="countryOptions.length">
  55. <uni-forms-item :label="t('ImproveImmediately.Label.Nationality')">
  56. <cwg-combox :disabled="isInfo" :clearable="false" :filterable="true"
  57. v-model:value="formData.nationality" :options="countryOptions"
  58. :placeholder="t('placeholder.choose')" @change="changeCountry" />
  59. </uni-forms-item>
  60. </uni-col>
  61. <!-- 姓 -->
  62. <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
  63. <uni-forms-item :label="formData.customType == 2
  64. ? t('ImproveImmediately.Label.CorporationLastName')
  65. : t('ImproveImmediately.Label.LastName')">
  66. <uni-easyinput :disabled="isInfo" :clearable="false" v-model="formData.lastName"
  67. :placeholder="t('placeholder.input')" />
  68. </uni-forms-item>
  69. </uni-col>
  70. <!-- 名 -->
  71. <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
  72. <uni-forms-item :label="formData.customType == 2
  73. ? t('ImproveImmediately.Label.CorporationName')
  74. : t('ImproveImmediately.Label.Name')">
  75. <uni-easyinput :disabled="isInfo" :clearable="false" v-model="formData.firstName"
  76. :placeholder="t('placeholder.input')" />
  77. </uni-forms-item>
  78. </uni-col>
  79. <!-- 法人中间名 -->
  80. <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8" v-if="formData.lang == 'en'">
  81. <uni-forms-item :label="formData.customType == 2
  82. ? t('ImproveImmediately.Label.CorporationMName')
  83. : t('placeholder.middle')">
  84. <uni-easyinput :disabled="isInfo" :clearable="false" v-model="formData.middle"
  85. :placeholder="t('placeholder.Not')" />
  86. </uni-forms-item>
  87. </uni-col>
  88. <!-- 拼音 -->
  89. <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8" v-if="formData.lang == 'cn'">
  90. <uni-forms-item :label="t('ImproveImmediately.Label.NamePinYin')">
  91. <uni-easyinput :disabled="isInfo" :clearable="false" v-model="formData.nameEn"
  92. :placeholder="t('placeholder.input')" />
  93. </uni-forms-item>
  94. </uni-col>
  95. <!-- 手机号 -->
  96. <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
  97. <uni-forms-item :label="t('PersonalManagement.Label.Phone')">
  98. <view style="display: flex; gap: 8px; width: 100%;">
  99. <view style="flex: 0 0 100px;">
  100. <uni-easyinput :disabled="isInfo" :clearable="false" v-model="formData.areaCode"
  101. :placeholder="t('placeholder.areaCode')" />
  102. </view>
  103. <view style="flex: 1;">
  104. <uni-easyinput :disabled="isInfo" :clearable="false" v-model="formData.phone"
  105. :placeholder="t('placeholder.input')" />
  106. </view>
  107. </view>
  108. </uni-forms-item>
  109. </uni-col>
  110. <!-- 邮箱 -->
  111. <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
  112. <uni-forms-item :label="t('PersonalManagement.Label.Email')">
  113. <uni-easyinput :disabled="isInfo" :clearable="false" v-model="formData.email"
  114. :placeholder="t('placeholder.input')" />
  115. </uni-forms-item>
  116. </uni-col>
  117. <!-- 证件号 -->
  118. <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
  119. <uni-forms-item :label="t('ImproveImmediately.Label.IdentityID')">
  120. <uni-easyinput :disabled="isInfo" :clearable="false" v-model="formData.identity"
  121. :placeholder="t('placeholder.input')" />
  122. </uni-forms-item>
  123. </uni-col>
  124. <!-- 生日 -->
  125. <!-- <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">-->
  126. <!-- <uni-forms-item :label="t('ImproveImmediately.Label.Birthday')">-->
  127. <!-- <uni-datetime-picker :disabled="isInfo" :clear-icon="false" type="date" return-type="timestamp"-->
  128. <!-- v-model="formData.birth" :placeholder="t('placeholder.choose')" />-->
  129. <!-- </uni-forms-item>-->
  130. <!-- </uni-col>-->
  131. <!-- 国家/地区 -->
  132. <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8" v-if="countryOptions.length">
  133. <uni-forms-item :label="t('ImproveImmediately.Label.CountryRegionOfResidence')">
  134. <cwg-combox :disabled="isInfo" :clearable="false" :filterable="true" v-model:value="formData.country"
  135. :options="countryOptions" :placeholder="t('placeholder.choose')" />
  136. </uni-forms-item>
  137. </uni-col>
  138. <!-- 省份/州 -->
  139. <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8" v-if="stateOptions.length">
  140. <uni-forms-item :label="t('ImproveImmediately.Label.ProvinceRegion')">
  141. <cwg-combox :disabled="isInfo" :clearable="false" :filterable="true" v-model:value="formData.state"
  142. :options="stateOptions" :placeholder="t('placeholder.choose')" @change="onStateChange" />
  143. </uni-forms-item>
  144. </uni-col>
  145. <!-- 城市 -->
  146. <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8" v-if="cityOptions.length">
  147. <uni-forms-item :label="t('ImproveImmediately.Label.City')">
  148. <cwg-combox :disabled="isInfo" :clearable="false" :filterable="true" v-model:value="formData.city"
  149. :options="cityOptions" :placeholder="t('placeholder.choose')" />
  150. </uni-forms-item>
  151. </uni-col>
  152. <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
  153. <uni-forms-item :label="t('ImproveImmediately.Label.ZipCode')">
  154. <uni-easyinput :disabled="isInfo" :clearable="false" v-model="formData.zipCode"
  155. :placeholder="t('placeholder.input')" />
  156. </uni-forms-item>
  157. </uni-col>
  158. <uni-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  159. <uni-forms-item :label="t('ImproveImmediately.Label.DetailedAddress')">
  160. <uni-easyinput :disabled="isInfo" :clearable="false" v-model="formData.addressLines1"
  161. :placeholder="t('placeholder.input')" />
  162. </uni-forms-item>
  163. </uni-col>
  164. <uni-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  165. <uni-forms-item :label="t('ImproveImmediately.Label.DetailedAddressStandby')">
  166. <uni-easyinput :disabled="isInfo" :clearable="false" v-model="formData.addressLines2"
  167. :placeholder="t('placeholder.input')" />
  168. </uni-forms-item>
  169. </uni-col>
  170. </uni-row>
  171. </uni-forms>
  172. </uni-col>
  173. </uni-row>
  174. </view>
  175. </view>
  176. </template>
  177. <script setup lang="ts">
  178. import { ref, computed, onMounted } from 'vue'
  179. import { useI18n } from 'vue-i18n'
  180. import { personalApi } from '@/service/personal'
  181. import { Patterns, Validators } from '@/utils/validators'
  182. const { t, locale } = useI18n()
  183. interface PersonalInfo {
  184. merchantOrderNo?: string;
  185. cardTypeId?: string;
  186. areaCode?: string;
  187. mobile?: string;
  188. email?: string;
  189. firstName?: string;
  190. lastName?: string;
  191. middle?: string;
  192. birthday?: string;
  193. nationality?: string;
  194. country?: string;
  195. state?: string;
  196. city?: string;
  197. town?: string;
  198. address?: string;
  199. postCode?: string;
  200. gender?: number;
  201. occupation?: string;
  202. annualSalary?: string;
  203. accountPurpose?: string;
  204. expectedMonthlyVolume?: string;
  205. idType?: number;
  206. idNumber?: string;
  207. identity?: string;
  208. ssn?: string;
  209. issueDate?: string;
  210. idNoExpiryDate?: string;
  211. idFrontUrl?: string;
  212. idBackUrl?: string;
  213. idHoldUrl?: string;
  214. ipAddress?: string;
  215. cId?: string;
  216. customId?: string;
  217. customType?: number;
  218. companyName?: string;
  219. nameEn?: string;
  220. birth?: string;
  221. addressLines1?: string;
  222. addressLines2?: string;
  223. zipCode?: string;
  224. photoStatus?: string;
  225. kycStatus?: string;
  226. }
  227. const props = defineProps<{
  228. modelValue: PersonalInfo;
  229. isReadonly?: boolean;
  230. }>()
  231. const emit = defineEmits<{
  232. 'update:modelValue': [value: PersonalInfo];
  233. 'cancel': [];
  234. 'next': [];
  235. }>()
  236. const loading = ref(false)
  237. const formData = computed({
  238. get: () => props.modelValue,
  239. set: (val) => emit('update:modelValue', val),
  240. })
  241. const baseForm = ref<any>(null)
  242. const sexOptions = ref([
  243. { text: t('PersonalManagement.Label.Men'), value: 1 },
  244. { text: t('PersonalManagement.Label.Women'), value: 2 },
  245. ])
  246. const customTypeOptions = ref([
  247. { text: t('ImproveImmediately.Label.CustomerType1'), value: 1 },
  248. { text: t('ImproveImmediately.Label.CustomerType2'), value: 2 },
  249. ])
  250. const idTypeOptions = ref([
  251. { text: t('ImproveImmediately.Label.IDCard'), value: 2 },
  252. { text: t('ImproveImmediately.Label.Passport'), value: 3 },
  253. ])
  254. // 验证函数
  255. function validateName(a: any, b?: any, c?: any) {
  256. const reg = /^[A-Z\s]+$/i
  257. if (typeof c === 'function') {
  258. const value = b
  259. const callback = c
  260. const val = String(value ?? '').trim()
  261. if (!val) return callback(new Error(t('card.vaildate.v4')))
  262. if (!reg.test(val)) return callback(new Error(t('card.vaildate.v38')))
  263. if (val.length < 2 || val.length > 23) return callback(new Error(t('card.vaildate.v39')))
  264. const firstName = String(formData.value?.firstName ?? '').trim()
  265. const lastName = String(formData.value?.lastName ?? '').trim()
  266. if (`${firstName} ${lastName}`.length > 23) return callback(new Error(t('card.vaildate.v40')))
  267. return callback()
  268. }
  269. const val = String(a ?? '').trim()
  270. if (!val) return t('card.vaildate.v4')
  271. if (!reg.test(val)) return t('card.vaildate.v38')
  272. if (val.length < 2 || val.length > 23) return t('card.vaildate.v39')
  273. const firstName = String(formData.value?.firstName ?? '').trim()
  274. const lastName = String(formData.value?.lastName ?? '').trim()
  275. if (`${firstName} ${lastName}`.length > 23) return t('card.vaildate.v40')
  276. return true
  277. }
  278. function validateBirthday(a: any, b?: any, c?: any) {
  279. if (typeof c === 'function') {
  280. const value = b
  281. const callback = c
  282. const val = value
  283. if (!val) return callback(new Error(t('card.vaildate.v5')))
  284. const today = new Date()
  285. const birthDate = new Date(val)
  286. let age = today.getFullYear() - birthDate.getFullYear()
  287. const month = today.getMonth() - birthDate.getMonth()
  288. if (month < 0 || (month === 0 && today.getDate() < birthDate.getDate())) age--
  289. if (age < 18) return callback(new Error(t('card.New.n3')))
  290. return callback()
  291. }
  292. const val = a
  293. if (!val) return t('card.vaildate.v5')
  294. const today = new Date()
  295. const birthDate = new Date(val)
  296. let age = today.getFullYear() - birthDate.getFullYear()
  297. const month = today.getMonth() - birthDate.getMonth()
  298. if (month < 0 || (month === 0 && today.getDate() < birthDate.getDate())) age--
  299. return age < 18 ? t('card.New.n3') : true
  300. }
  301. function validateAddress(a: any, b?: any, c?: any) {
  302. if (typeof c === 'function') {
  303. const value = b
  304. const callback = c
  305. const val = String(value ?? '').trim()
  306. if (!val) return callback(new Error(t('card.vaildate.v27')))
  307. if (val.length < 2 || val.length > 40) return callback(new Error(t('card.New.n1')))
  308. if (!Patterns.address.test(val)) return callback(new Error(t('card.New.n1')))
  309. return callback()
  310. }
  311. const val = String(a ?? '').trim()
  312. if (!val) return t('card.vaildate.v27')
  313. if (val.length < 2 || val.length > 40) return t('card.New.n1')
  314. return Patterns.address.test(val) ? true : t('card.New.n1')
  315. }
  316. const rules = {
  317. areaCode: [Validators.required(t('card.vaildate.v1'))],
  318. mobile: [
  319. Validators.required(t('card.vaildate.v2')),
  320. Validators.pattern(Patterns.mobile, t('card.vaildate.v44')),
  321. ],
  322. email: [
  323. Validators.required(t('card.vaildate.v28')),
  324. Validators.pattern(Patterns.email, t('card.vaildate.v28')),
  325. ],
  326. firstName: [Validators.required(t('card.vaildate.v3')), Validators.custom(validateName)],
  327. lastName: [Validators.required(t('card.vaildate.v4')), Validators.custom(validateName)],
  328. birthday: [
  329. Validators.required(t('card.vaildate.v5'), 'change'),
  330. Validators.custom(validateBirthday, 'change'),
  331. ],
  332. nationality: [Validators.required(t('card.vaildate.v6'), 'change')],
  333. town: [Validators.required(t('card.vaildate.v7'), 'change')],
  334. address: [Validators.required(t('card.vaildate.v27')), Validators.custom(validateAddress)],
  335. gender: [Validators.required(t('card.vaildate.v9'), 'change')],
  336. postCode: [
  337. Validators.required(t('card.vaildate.v8')),
  338. Validators.pattern(Patterns.postcode, t('card.New.n2')),
  339. ],
  340. }
  341. // 国家省份城市数据
  342. const countryList = ref<Array<any>>([])
  343. const stateList = ref<Array<any>>([])
  344. const cityList = ref<Array<any>>([])
  345. const phoneCodes = ref<Array<{ text: string; value: string }>>([])
  346. const isInfo = ref<boolean>(true)
  347. const isZh = computed(() => ['cn', 'zh', 'zhHant'].includes(locale.value))
  348. const isCountryCN = computed(() => ['CN', 'CNX', 'CNA', 'CNT'].includes(formData.value.country || ''))
  349. const getLangName = (item: any) => (isZh.value ? item.name : item.enName)
  350. const createOptions = (list: any[], valueKey = 'code') => {
  351. return list.map((item) => ({
  352. text: getLangName(item),
  353. value: valueKey === 'name' ? getLangName(item) : item[valueKey],
  354. id: item.id,
  355. }))
  356. }
  357. const countryOptions = computed(() => createOptions(countryList.value, 'code'))
  358. const stateOptions = computed(() => createOptions(stateList.value, 'name'))
  359. const cityOptions = computed(() => createOptions(cityList.value, 'name'))
  360. const getCountry = async () => {
  361. const res = await personalApi.Country({})
  362. if (res.code === 200) {
  363. countryList.value = res.data
  364. phoneCodes.value = res.data.map((item: any) => ({
  365. text: `+ ${item.callingCode}`,
  366. value: item.callingCode,
  367. }))
  368. if (formData.value.country) {
  369. const country = countryList.value.find((i) => i.code === formData.value.country)
  370. if (country) {
  371. await getState(country.id)
  372. }
  373. }
  374. }
  375. }
  376. const fetchRegion = async (pid?: number) => {
  377. const res = await personalApi.Country({ pid })
  378. if (res.code !== 200) {
  379. return []
  380. }
  381. return res.data || []
  382. }
  383. const getState = async (pid: number) => {
  384. stateList.value = await fetchRegion(pid)
  385. if (formData.value.state) {
  386. const item = stateList.value.find(
  387. (i) => i.enName === formData.value.state || i.name === formData.value.state,
  388. )
  389. if (item) {
  390. await getCity(item.id)
  391. }
  392. }
  393. }
  394. const getCity = async (pid: number) => {
  395. cityList.value = await fetchRegion(pid)
  396. }
  397. const changeCountry = async (val: any) => {
  398. formData.value.state = ''
  399. formData.value.city = ''
  400. const item = countryOptions.value.find((i: any) => i.value === val)
  401. if (item) {
  402. await getState(item.id)
  403. }
  404. }
  405. const onStateChange = async (val: any) => {
  406. formData.value.city = ''
  407. const item = stateOptions.value.find((i: any) => i.value === val)
  408. if (item) {
  409. await getCity(item.id)
  410. }
  411. }
  412. function handleChange(value: any) {
  413. emit('update:modelValue', { ...formData.value, [value.key]: value.value })
  414. }
  415. const handleEditProfile = () => {
  416. // 头像上传逻辑
  417. }
  418. const handleCancel = () => {
  419. emit('cancel')
  420. }
  421. const handleNext = () => {
  422. emit('next')
  423. }
  424. onMounted(async () => {
  425. loading.value = true
  426. await getCountry()
  427. loading.value = false
  428. })
  429. </script>
  430. <style scoped lang="scss">
  431. @import "@/uni.scss";
  432. .personal-info-tab {
  433. .user-form {
  434. margin-top: px2rpx(30);
  435. .demo-uni-row {
  436. margin-bottom: px2rpx(16);
  437. :deep(.form-label) {
  438. margin: 0 !important;
  439. }
  440. :deep(.form-input) {
  441. border: none !important;
  442. }
  443. .avatar-section {
  444. display: flex;
  445. flex-direction: column;
  446. align-items: center;
  447. gap: px2rpx(12);
  448. padding: px2rpx(16);
  449. .cwg-upload {
  450. width: px2rpx(120);
  451. height: px2rpx(120);
  452. border-radius: 50%;
  453. margin: 0 auto;
  454. }
  455. .text {
  456. font-size: px2rpx(20);
  457. font-weight: 700;
  458. color: var(--bs-heading-color);
  459. }
  460. .btn-primary {
  461. min-width: px2rpx(120);
  462. background-color: var(--bs-heading-color);
  463. color: white;
  464. padding: px2rpx(12);
  465. border: none;
  466. font-size: px2rpx(14);
  467. text-align: center;
  468. cursor: pointer;
  469. display: flex;
  470. align-items: center;
  471. justify-content: center;
  472. gap: px2rpx(8);
  473. &:active {
  474. background-color: #cf1322;
  475. ;
  476. }
  477. }
  478. .cid {
  479. color: var(--color-error);
  480. font-size: px2rpx(12);
  481. margin-top: px2rpx(4);
  482. }
  483. }
  484. }
  485. }
  486. .btns {
  487. display: flex;
  488. justify-content: flex-end;
  489. gap: 30px;
  490. margin-top: 30px;
  491. .btn-primary {
  492. min-width: px2rpx(120);
  493. background-color: var(--bs-heading-color);
  494. color: white;
  495. padding: 12px;
  496. border-radius: 8px;
  497. border: none;
  498. font-size: 14px;
  499. text-align: center;
  500. cursor: pointer;
  501. display: flex;
  502. align-items: center;
  503. justify-content: center;
  504. gap: 8px;
  505. &:active {
  506. background-color: #cf1322;
  507. ;
  508. }
  509. }
  510. }
  511. }
  512. :deep(.uni-row1) {
  513. .uni-col {
  514. padding: 0 10px !important;
  515. }
  516. .base-info-form>span {
  517. display: contents;
  518. }
  519. .uni-forms-item {
  520. min-height: px2rpx(79);
  521. margin-bottom: px2rpx(10);
  522. }
  523. .uni-select,
  524. .uni-combox,
  525. .uni-easyinput__content,
  526. .uni-date-editor--x {
  527. background-color: var(--bs-secondary-bg)!important;
  528. //background-color: var(--color-zinc-100) !important;
  529. }
  530. .uni-date-x {
  531. border: none !important;
  532. //background-color: rgba(195, 195, 195, 0) !important;
  533. }
  534. }
  535. </style>