detail.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612
  1. <template>
  2. <el-card shadow="never" class="aui-card--fill">
  3. <div class="mod-home">
  4. <div class="top adfac">
  5. <div class="back adfac" @click="handleBack">
  6. <img src="@/assets/img/back.png">
  7. <span>返回</span>
  8. </div>
  9. <div class="line"></div>
  10. <div class="text">活动详情</div>
  11. </div>
  12. <div class="tab adfac">
  13. <div class="tab-pre" :class="{'active':tidx==1}" @click="changeTab(1)">基础资料</div>
  14. <div class="tab-pre" :class="{'active':tidx==2}" @click="changeTab(2)">活动参与</div>
  15. </div>
  16. <div class="form" v-if="tidx===1">
  17. <el-form ref="basicRef" :model="basicForm" label-width="125px">
  18. <el-form-item label="活动类型" prop="typeId">
  19. <div class="form-text">{{ typeOptions.find(t=>t.id===basicForm.typeId)?(typeOptions.find(t=>t.id===basicForm.typeId).typeName||''):'' }}</div>
  20. </el-form-item>
  21. <el-form-item label="活动分类" prop="categoryId">
  22. <div class="form-text">{{ categoryOptions.find(t=>t.id===basicForm.categoryId)?(categoryOptions.find(t=>t.id===basicForm.categoryId).categoryName||''):'' }}</div>
  23. </el-form-item>
  24. <el-form-item label="活动名称" prop="activityName">
  25. <div class="form-text">{{ basicForm.activityName||'' }}</div>
  26. </el-form-item>
  27. <el-form-item label="报名时间" prop="signupEndTime">
  28. <div class="adfac">
  29. <div class="form-text">{{ basicForm.signupStartTime||'' }}</div>
  30. <span style="margin: 0 10px;">至</span>
  31. <div class="form-text">{{ basicForm.signupEndTime||'' }}</div>
  32. </div>
  33. </el-form-item>
  34. <el-form-item label="活动时间" prop="activityEndTime">
  35. <div class="adfac">
  36. <div class="form-text">{{ basicForm.activityStartTime||'' }}</div>
  37. <span style="margin: 0 10px;">至</span>
  38. <div class="form-text">{{ basicForm.activityEndTime||'' }}</div>
  39. </div>
  40. </el-form-item>
  41. <el-form-item label="活动地点" prop="districtId">
  42. <div class="adfac">
  43. <div class="form-text">{{ provinceOptions.find(t=>t.id===basicForm.provinceId)?(provinceOptions.find(t=>t.id===basicForm.provinceId).name||''):'' }}</div>
  44. <div class="form-text">{{ cityOptions.find(t=>t.id===basicForm.cityId)?(cityOptions.find(t=>t.id===basicForm.cityId).name||''):'' }}</div>
  45. <div class="form-text">{{ areaOptions.find(t=>t.id===basicForm.districtId)?(areaOptions.find(t=>t.id===basicForm.districtId).name||''):'' }}</div>
  46. <div class="form-text">{{ basicForm.address||'' }}</div>
  47. </div>
  48. </el-form-item>
  49. <el-form-item label="渠道方" prop="channelId">
  50. <div class="form-text">{{ channelOptions.find(t=>t.id===basicForm.channelId)?(channelOptions.find(t=>t.id===basicForm.channelId).channelName||''):'' }}</div>
  51. </el-form-item>
  52. <el-form-item label="举办方" prop="organizerId">
  53. <div class="form-text">{{ organizerOptions.find(t=>t.id===basicForm.organizerId)?(organizerOptions.find(t=>t.id===basicForm.organizerId).channelName||''):'' }}</div>
  54. </el-form-item>
  55. <el-form-item label="活动封面图片" prop="coverFile">
  56. <div class="adfac">
  57. <img :src="img.url" v-for="img in fileListCover" :key="img.url" style="width: 158px;height: 214px;">
  58. </div>
  59. </el-form-item>
  60. <el-form-item label="活动详情banner" prop="imageFiles">
  61. <div class="adfac">
  62. <img :src="img.url" v-for="img in fileListBanner" :key="img.url" style="width: 306px;height: 220px;margin-right: 20px;">
  63. </div>
  64. </el-form-item>
  65. <el-form-item label="活动详情" prop="activityDetails" class="formdetail">
  66. <div v-html="basicForm.activityDetails||''"></div>
  67. <!-- <editor-vue style="margin-top: -30px;" :content="basicForm.activityDetails" @EditorChange="getEditor" ref="infoIntroduceRef"></editor-vue> -->
  68. </el-form-item>
  69. </el-form>
  70. </div>
  71. <div class="form" v-else-if="tidx===2">
  72. <el-form ref="moreRef" :model="moreForm" label-width="125px">
  73. <el-form-item label="参与方式" prop="joinMode">
  74. <div class="form-text">{{ dataList.find(t=>t.dictValue===moreForm.joinMode)?(dataList.find(t=>t.dictValue===moreForm.joinMode).dictLabel||''):'' }}</div>
  75. </el-form-item>
  76. <el-form-item label="报名人数">
  77. <div class="f-text adfac" v-if="moreForm.recruitmentFlag===1" style="height: 40px; margin-left: 0;">最多报名人数{{ moreForm.recruitmentMax||0 }}人,最少报名人数{{ moreForm.recruitmentMin||0 }}人</div>
  78. <div class="form-text" v-else>不限制</div>
  79. </el-form-item>
  80. <el-form-item label="会员等级">
  81. <div class="f-text adfac" v-if="moreForm.userLevelFlag===1" style="height: 40px; margin-left: 0;">限制{{ moreForm.userLevel||0 }}级</div>
  82. <div class="form-text" v-else>不限制</div>
  83. </el-form-item>
  84. <el-form-item label="会员年龄">
  85. <div class="f-text adfac" v-if="moreForm.userAgeFlag===1" style="height: 40px; margin-left: 0;">最小参加年龄{{ moreForm.userAgeMin||0 }}岁,最大参加年龄{{ moreForm.userAgeMax||0 }}岁</div>
  86. <div class="form-text" v-else>不限制</div>
  87. </el-form-item>
  88. <el-form-item label="公益支持">
  89. <div class="f-text adfac" v-if="moreForm.activityLimit===2" style="height: 40px; margin-left: 0;">需要专享券</div>
  90. <div class="f-text adfac" v-else-if="moreForm.activityLimit===1" style="height: 40px; margin-left: 0;">需要{{moreForm.valueLimit||0}}爱心值</div>
  91. <div class="form-text" v-else>免费</div>
  92. </el-form-item>
  93. <el-form-item label="爱心值对应内容" v-if="moreForm.activityLimit==1">
  94. <div class="f-text adfac" style="height: 40px; margin-left: 0;">{{ moreForm.loveValueContent||'' }}</div>
  95. </el-form-item>
  96. <el-form-item label="可获得义工时长" prop="volunteerHours">
  97. <div class="f-text adfac" style="height: 40px; margin-left: 0;">{{ moreForm.volunteerHours||0 }}小时</div>
  98. </el-form-item>
  99. <el-form-item label="报名次数限制">
  100. <div class="f-text adfac" style="height: 40px; margin-left: 0;">{{ moreForm.timesLimit?(moreForm.timesLimit+'次'):'不限制' }}</div>
  101. </el-form-item>
  102. <el-form-item label="负责人" prop="contact">
  103. <div class="f-text adfac" style="height: 40px; margin-left: 0;">{{ moreForm.contact||'' }}</div>
  104. </el-form-item>
  105. <el-form-item label="负责人电话" prop="contactPhone">
  106. <div class="f-text adfac" style="height: 40px; margin-left: 0;">{{ moreForm.contactPhone||'' }}</div>
  107. </el-form-item>
  108. <el-form-item label="上架状态" prop="state">
  109. <div class="form-text">{{ moreForm.state?'已上架':'已下架' }}</div>
  110. </el-form-item>
  111. </el-form>
  112. </div>
  113. </div>
  114. </el-card>
  115. </template>
  116. <script>
  117. import moment from 'moment'
  118. import Cookies from 'js-cookie'
  119. import editorVue from '@/components/editor'
  120. import mixinRegionModule from '@/mixins/region-module.js'
  121. import { getDictDataList } from '@/utils'
  122. export default {
  123. components: { editorVue },
  124. mixins: [mixinRegionModule],
  125. data () {
  126. return {
  127. dataList: getDictDataList('join_mode'),
  128. currentFile: '',
  129. cropperIndex: null,
  130. showCropper: false,
  131. isCropper: true,
  132. currentFile2: '',
  133. cropperIndex2: null,
  134. showCropper2: false,
  135. isCropper2: true,
  136. updType: 1,
  137. typeOptions: [],
  138. categoryOptions: [],
  139. channelOptions: [],
  140. organizerOptions: [],
  141. tidx: 1,
  142. basicForm: {
  143. id: '',
  144. typeId: '',
  145. categoryId: '',
  146. activityName: '',
  147. signupStartEnd: [],
  148. signupStartTime: '',
  149. signupEndTime: '',
  150. activityStartEnd: [],
  151. activityStartTime: '',
  152. activityEndTime: '',
  153. provinceId: '',
  154. cityId: '',
  155. districtId: '',
  156. address: '',
  157. channelId: '',
  158. organizerId: '',
  159. coverFile: '',
  160. imageFiles: '',
  161. activityDetails: ''
  162. },
  163. activityDetailsTemp: '',
  164. url: `${window.SITE_CONFIG['apiURL']}/sys/oss/upload?token=${Cookies.get('token')}`,
  165. fileListCover: [],
  166. fileListBanner: [],
  167. moreForm: {
  168. joinMode: '',
  169. recruitmentFlag: 1,
  170. recruitmentMax: '',
  171. recruitmentMin: '',
  172. userLevelFlag: 1,
  173. userLevel: 1,
  174. userAgeFlag: 1,
  175. userAgeMin: '',
  176. userAgeMax: '',
  177. activityLimit: 1,
  178. valueLimit: '',
  179. loveValueContent: '',
  180. volunteerHours: 0,
  181. timesLimit: '',
  182. contact: '',
  183. contactPhone: '',
  184. state: false
  185. },
  186. moreForm2: {
  187. joinMode: ''
  188. }
  189. }
  190. },
  191. created () {
  192. this.getTypeOptions()
  193. this.getCategoryOptions()
  194. },
  195. mounted () {
  196. this.provincAreaDetailInfoList()
  197. this.getSupplierOptions()
  198. this.$nextTick(() => {
  199. if (this.$route.query.id) {
  200. this.getDetail(this.$route.query.id)
  201. }
  202. })
  203. },
  204. methods: {
  205. recruitmentChange (e) {
  206. if (e === 1) {
  207. this.moreForm.recruitmentMax = 1
  208. this.moreForm.recruitmentMin = 1
  209. } else {
  210. this.moreForm.recruitmentMax = 0
  211. this.moreForm.recruitmentMin = 0
  212. }
  213. },
  214. userLevelChange (e) {
  215. if (e === 1) this.moreForm.userLevel = 1
  216. else this.moreForm.userLevel = 0
  217. },
  218. userAgeChange (e) {
  219. if (e === 1) {
  220. this.moreForm.userAgeMax = 1
  221. this.moreForm.userAgeMin = 1
  222. } else {
  223. this.moreForm.userAgeMax = 0
  224. this.moreForm.userAgeMin = 0
  225. }
  226. },
  227. regionChange (val, type) {
  228. if (type === 'province') {
  229. this.basicForm.cityId = ''
  230. this.basicForm.districtId = ''
  231. this.cityAreaDetailInfoList(val)
  232. } else if (type === 'city') {
  233. this.basicForm.districtId = ''
  234. this.countyAreaDetailInfoList(val)
  235. }
  236. },
  237. getDetail (id) {
  238. this.$http.get('/core/activity/' + id).then(({ data: res }) => {
  239. if (res.code !== 0) return this.$message.error(res.msg)
  240. // this.basicForm = { ...this.basicForm, ...res.data }
  241. this.updateObjectFromSource(this.basicForm, res.data)
  242. this.activityDetailsTemp = res.data.activityDetails
  243. this.basicForm.signupStartEnd = [this.basicForm.signupStartTime, this.basicForm.signupEndTime]
  244. this.basicForm.activityStartEnd = [this.basicForm.activityStartTime, this.basicForm.activityEndTime]
  245. this.basicForm.channelId = this.basicForm.channelId
  246. this.basicForm.organizerId = this.basicForm.organizerId
  247. this.fileListCover = [{ name: '', url: res.data.coverFile }]
  248. this.fileListBanner = res.data.imageFiles.split(',').map(item => ({ name: '', url: item }))
  249. if (this.basicForm.cityId) {
  250. this.cityAreaDetailInfoList(this.basicForm.provinceId)
  251. }
  252. if (this.basicForm.districtId) {
  253. this.countyAreaDetailInfoList(this.basicForm.cityId)
  254. }
  255. this.updateObjectFromSource(this.moreForm, res.data)
  256. this.moreForm.recruitmentFlag = +this.moreForm.recruitmentMax === 0 ? 2 : 1
  257. this.moreForm.userLevelFlag = +this.moreForm.userLevel === 0 ? 0 : 1
  258. this.moreForm.userAgeFlag = +this.moreForm.userAgeMax === 0 ? 2 : 1
  259. this.moreForm.state = !!res.data.state
  260. })
  261. },
  262. updateObjectFromSource (target, source) {
  263. for (const key of Object.keys(target)) {
  264. if (Object.prototype.hasOwnProperty.call(source, key)) {
  265. target[key] = source[key]
  266. }
  267. }
  268. },
  269. getEditor (val) {
  270. this.basicForm.activityDetails = val
  271. },
  272. getTypeOptions () {
  273. this.$http.get('/core/activity/type/page', { params: { page: 1, limit: -1 } }).then(res => {
  274. this.typeOptions = res.data.data.list.filter(l => l.enable === 1) || []
  275. })
  276. },
  277. getCategoryOptions () {
  278. this.$http.get('/core/activity/category/page', { params: { page: 1, limit: -1 } }).then(res => {
  279. this.categoryOptions = res.data.data.list.filter(l => l.enable === 1) || []
  280. })
  281. },
  282. getSupplierOptions () {
  283. this.$http.get('/core/channel/page', { params: { page: 1, limit: -1 } }).then(res => {
  284. this.channelOptions = res.data.data.list.filter(item => item.type === 1) || []
  285. this.organizerOptions = res.data.data.list.filter(item => item.type === 2) || []
  286. })
  287. },
  288. handleSignupDateChange (val, key) {
  289. this.basicForm[key] = moment(val).format('YYYY-MM-DD HH:mm')
  290. },
  291. handleActivityDateChange (val, key) {
  292. this.basicForm[key] = moment(val).format('YYYY-MM-DD HH:mm')
  293. },
  294. beforeUploadHandle (file, index, fixedNumber, name) {
  295. this.updType = index
  296. if (file.type !== 'image/jpg' && file.type !== 'image/jpeg' && file.type !== 'image/png') {
  297. this.$message.error(
  298. this.$t('upload.tip', { format: 'jpg、png、gif' })
  299. )
  300. return false
  301. }
  302. if (this.updType === 1) {
  303. if (this.isCropper) {
  304. this.currentFile = file
  305. this.cropperIndex = name
  306. this.showCropper = true
  307. this.$nextTick(() => {
  308. this.$refs.vueCropper.init()
  309. })
  310. return false
  311. }
  312. } else if (this.updType === 2) {
  313. if (this.isCropper2) {
  314. this.currentFile2 = file
  315. this.cropperIndex2 = name
  316. this.showCropper2 = true
  317. this.$nextTick(() => {
  318. this.$refs.vueCropper2.init()
  319. })
  320. return false
  321. }
  322. }
  323. },
  324. cropperUpload (data) {
  325. this.showCropper = false
  326. if (data !== 'close') {
  327. this.$http.post('/sys/oss/upload', data).then((res) => {
  328. if (res.data.code === 0) {
  329. this.successHandleCover(res.data)
  330. }
  331. })
  332. }
  333. },
  334. cropperUpload2 (data) {
  335. this.showCropper2 = false
  336. if (data !== 'close') {
  337. this.$http.post('/sys/oss/upload', data).then((res) => {
  338. if (res.data.code === 0) {
  339. this.successHandleBanner(res.data)
  340. }
  341. })
  342. }
  343. },
  344. handleRemoveCover (file, fileList) {
  345. this.fileListCover = fileList.map((item) => item) || []
  346. this.basicForm.coverFile = ''
  347. },
  348. successHandleCover (res, file, fileList) {
  349. if (res.code !== 0) {
  350. return this.$message.error(res.msg)
  351. }
  352. this.fileListCover.unshift({
  353. name: '',
  354. url: res.data
  355. })
  356. this.basicForm.coverFile = this.fileListCover[0].url
  357. },
  358. handleRemoveBanner (file, fileList) {
  359. this.fileListBanner = fileList.map((item) => item)
  360. this.basicForm.imageFiles = this.fileListBanner.map(item => item.url).join(',')
  361. },
  362. successHandleBanner (res, file, fileList) {
  363. if (res.code !== 0) {
  364. return this.$message.error(res.msg)
  365. }
  366. this.fileListBanner.unshift({
  367. name: '',
  368. url: res.data
  369. })
  370. this.basicForm.imageFiles = this.fileListBanner.map(item => item.url).join(',')
  371. },
  372. handleBack () {
  373. this.$router.push('/activity-list')
  374. },
  375. changeTab (idx) {
  376. this.tidx = idx
  377. },
  378. handleNext () {
  379. this.$refs.basicRef.validate(valid => {
  380. if (valid) {
  381. if (Date.parse(this.basicForm.signupStartTime) > Date.parse(this.basicForm.signupEndTime)) return this.$message.error('报名结束时间不能小于报名开始时间')
  382. if (Date.parse(this.basicForm.signupEndTime) < Date.parse(new Date())) return this.$message.error('报名结束时间不能小于当前时间')
  383. if (Date.parse(this.basicForm.signupEndTime) > Date.parse(this.basicForm.activityStartTime)) return this.$message.error('活动开始时间不能小于报名结束时间')
  384. if (Date.parse(this.basicForm.activityStartTime) > Date.parse(this.basicForm.activityEndTime)) return this.$message.error('活动结束时间不能小于活动开始时间')
  385. if (!this.basicForm.coverFile) return this.$message.error('请上传活动封面图片')
  386. if (!this.basicForm.imageFiles) return this.$message.error('请上传活动详情Banner')
  387. if (!this.basicForm.activityDetails) return this.$message.error('请输入活动详情')
  388. this.tidx = 2
  389. if (this.basicForm.typeId === '1977564813261750273') {
  390. this.moreForm.activityLimit = 2
  391. this.moreForm.valueLimit = 1
  392. }
  393. } else {
  394. return false
  395. }
  396. })
  397. },
  398. handlePrevious () {
  399. this.tidx = 1
  400. this.$nextTick(() => {
  401. setTimeout(() => {
  402. this.$refs.infoIntroduceRef.init()
  403. this.basicForm.activityDetails = this.activityDetails
  404. }, 500)
  405. })
  406. },
  407. handleSave () {
  408. this.$refs.moreRef.validate(valid => {
  409. if (valid) {
  410. if (this.moreForm.recruitmentFlag === 1) {
  411. if (!this.moreForm.recruitmentMax) return this.$message.error('请输入最多报名人数')
  412. if (!this.moreForm.recruitmentMin) return this.$message.error('请输入最少报名人数')
  413. if (+this.moreForm.recruitmentMin > +this.moreForm.recruitmentMax) return this.$message.error('最少报名人数不能大于最多报名人数')
  414. } else {
  415. this.moreForm.recruitmentMax = 0
  416. this.moreForm.recruitmentMin = 0
  417. }
  418. if (this.moreForm.userLevelFlag === 1) {
  419. if (!this.moreForm.userLevel) return this.$message.error('请输入会员最小限制等级')
  420. } else {
  421. this.moreForm.userLevel = 0
  422. }
  423. if (this.moreForm.userAgeFlag === 1) {
  424. if (!this.moreForm.userAgeMin) return this.$message.error('请输入最小参加年龄')
  425. if (!this.moreForm.userAgeMax) return this.$message.error('请输入最大参加年龄')
  426. if (+this.moreForm.userAgeMin > +this.moreForm.userAgeMax) return this.$message.error('最小参加年龄不能大于最大参加年龄')
  427. } else {
  428. this.moreForm.userAgeMin = 0
  429. this.moreForm.userAgeMax = 0
  430. }
  431. if (this.moreForm.activityLimit === 1) {
  432. if (!this.moreForm.valueLimit) return this.$message.error('请输入爱心值数量')
  433. } else if (this.moreForm.activityLimit === 2) {
  434. if (!this.moreForm.valueLimit) return this.$message.error('请输入专享券数量')
  435. }
  436. let { signupStartEnd, activityStartEnd, ...newBasic } = JSON.parse(JSON.stringify(this.basicForm))
  437. let { recruitmentFlag, userAgeFlag, userLevelFlag, ...newMore } = JSON.parse(JSON.stringify(this.moreForm))
  438. let dto = { ...newBasic, ...newMore }
  439. dto.state = dto.state ? 1 : 0
  440. this.$http[dto.id ? 'put' : 'post']('/core/activity', dto).then(res => {
  441. if (res.data.code !== 0) return this.$message.error(res.data.msg)
  442. this.$message.success('发布成功')
  443. this.$router.push('/activity-list')
  444. })
  445. } else {
  446. return false
  447. }
  448. })
  449. }
  450. }
  451. }
  452. </script>
  453. <style scoped lang="scss">
  454. ::v-deep .formdetail .el-form-item__content{
  455. line-height: inherit !important;
  456. }
  457. .top {
  458. padding-bottom: 13px;
  459. box-shadow: inset 0px -1px 0px 0px #F0F1F7;
  460. .back {
  461. cursor: pointer;
  462. img {
  463. width: 22px;
  464. height: 22px;
  465. }
  466. span {
  467. font-family: PingFang-SC, PingFang-SC;
  468. font-weight: bold;
  469. font-size: 14px;
  470. color: #00AE57;
  471. line-height: 20px;
  472. margin-left: 6px;
  473. }
  474. }
  475. .line {
  476. width: 1px;
  477. height: 16px;
  478. background: #F0F1F7;
  479. margin-left: 14px;
  480. }
  481. .text {
  482. font-family: PingFangSC, PingFang SC;
  483. font-weight: 400;
  484. font-size: 14px;
  485. color: #657588;
  486. line-height: 20px;
  487. margin-left: 10px;
  488. }
  489. }
  490. .tab{
  491. height: 48px;
  492. box-shadow: inset 0px -1px 0px 0px #F0F1F7;
  493. &-pre{
  494. width: 120px;
  495. height: 48px;
  496. font-family: PingFangSC, PingFang SC;
  497. font-weight: 400;
  498. font-size: 14px;
  499. color: #393939;
  500. line-height: 20px;
  501. cursor: pointer;
  502. position: relative;
  503. padding-left: 7px;
  504. box-sizing: border-box;
  505. display: flex;
  506. flex-direction: column;
  507. justify-content: center;
  508. &.active{
  509. font-weight: bold;
  510. &::after{
  511. content: '';
  512. position: absolute;
  513. left: 7px;
  514. bottom: 2px;
  515. width: 55px;
  516. height: 2px;
  517. background: #00AE57;
  518. }
  519. }
  520. }
  521. }
  522. .form{
  523. padding: 20px 0 1px;
  524. }
  525. .btns{
  526. border-top: 1px solid #F0F1F7;
  527. padding: 24px 0 0 126px;
  528. }
  529. .f-text{
  530. font-family: PingFangSC, PingFang SC;
  531. font-weight: 400;
  532. font-size: 14px;
  533. color: #393939;
  534. line-height: 20px;
  535. margin: 0 10px 0 56px;
  536. }
  537. .f-text2{
  538. font-family: PingFangSC, PingFang SC;
  539. font-weight: 400;
  540. font-size: 14px;
  541. color: #393939;
  542. line-height: 20px;
  543. margin-left: 6px;
  544. }
  545. .f-tip{
  546. font-family: PingFangSC, PingFang SC;
  547. font-weight: 400;
  548. font-size: 12px;
  549. color: #F4657A;
  550. line-height: 17px;
  551. margin-left: 20px;
  552. }
  553. ::v-deep .el-radio__label{
  554. line-height: 20px;
  555. }
  556. .avatar-uploader-icon {
  557. font-size: 28px;
  558. color: #8c939d;
  559. width: 84px;
  560. height: 84px;
  561. line-height: 84px;
  562. text-align: center;
  563. }
  564. ::v-deep .el-upload--picture-card{
  565. width: 84px !important;
  566. height: 84px !important;
  567. display: flex;
  568. align-items: center;
  569. justify-content: center;
  570. }
  571. .avatar {
  572. width: 84px;
  573. height: 84px;
  574. display: block;
  575. }
  576. .upload-demo{
  577. display: flex !important;
  578. flex-wrap: wrap;
  579. }
  580. ::v-deep .el-upload-list--picture-card .el-upload-list__item{
  581. width: 84px !important;
  582. height: 84px !important;
  583. }
  584. .upload_tip{
  585. font-family: PingFangSC, PingFang SC;
  586. font-weight: 400;
  587. font-size: 12px;
  588. color: #A4A4A4;
  589. line-height: 17px;
  590. margin-top: 2px;
  591. }
  592. ::v-deep .redLabel>.el-form-item__label{
  593. &::before{
  594. content: "*";
  595. color: #F56C6C;
  596. margin-right: 4px;
  597. }
  598. }
  599. </style>