index.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869
  1. <template>
  2. <div class="divBox relative">
  3. <el-card :bordered="false" shadow="never" class="ivu-mt" :body-style="{ padding: '0 20px 20px' }">
  4. <el-tabs v-model="loginType" class="list-tabs">
  5. <el-tab-pane :label="item.name" :name="item.type.toString()" v-for="(item, index) in headeNum" :key="index" />
  6. </el-tabs>
  7. <div v-if="loginType === '1'" class="information">
  8. <div class="basic-information" v-loading="loading">
  9. <div><span class="tips">商户名称:</span>{{ merData.name }}</div>
  10. <div><span class="tips">商户登录帐号:</span>{{ merData.phone }}</div>
  11. <div><span class="tips">商户负责人姓名:</span>{{ merData.realName }}</div>
  12. <div><span class="tips">商户分类:</span>{{ merData.merCategory }}</div>
  13. <div><span class="tips">商户类别:</span>{{ merData.isSelf | selfTypeFilter }}</div>
  14. <div><span class="tips">店铺类型:</span>{{ merData.merType }}</div>
  15. <div><span class="tips">商户手续费:</span>{{ merData.handlingFee }}%</div>
  16. <div><span class="tips">添加商品:</span>{{ merData.productSwitch ? '需平台审核' : '平台免审核' }}</div>
  17. <div>
  18. <span class="tips">商户星级:</span
  19. ><el-rate v-model="merData.starLevel" disabled text-color="#ff9900"> </el-rate>
  20. </div>
  21. <div><span class="tips">商户入驻时间:</span>{{ merData.createTime }}</div>
  22. <div v-if="merData.qualificationPicture">
  23. <span class="tips">商户资质:</span>
  24. <div class="acea-row">
  25. <div v-for="(item, index) in JSON.parse(merData.qualificationPicture)" :key="index" class="pictrue">
  26. <el-image :src="item" :preview-src-list="[item]"> </el-image>
  27. </div>
  28. </div>
  29. </div>
  30. <div v-hasPermi="['merchant:switch:update']">
  31. <span class="tips">开启商户:</span>
  32. <el-switch
  33. v-model="merData.isSwitch"
  34. :active-value="true"
  35. :inactive-value="false"
  36. active-text="开启"
  37. inactive-text="关闭"
  38. @change="changeSwitch"
  39. >
  40. </el-switch>
  41. </div>
  42. </div>
  43. </div>
  44. <div v-if="loginType === '2'" class="business-msg">
  45. <div class="form-data">
  46. <el-form :model="merInfoForm" :rules="rules" ref="merInfoForm" label-width="140px" class="demo-ruleForm">
  47. <el-form-item label="商户主头像:" prop="avatar">
  48. <div class="upLoadPicBox acea-row" @click="modalPicTap('1', 'avatar')">
  49. <div v-if="merInfoForm.avatar" class="pictrue"><img :src="merInfoForm.avatar" /></div>
  50. <div v-else class="upLoad">
  51. <i class="el-icon-camera cameraIconfont" />
  52. </div>
  53. <div class="from-tips">请上传小于500kb的图片(90*90 px)</div>
  54. </div>
  55. </el-form-item>
  56. <el-form-item label="H5商户背景图:" prop="backImage">
  57. <div class="upLoadPicBox acea-row" @click="modalPicTap('1', 'backImage')">
  58. <div v-if="merInfoForm.backImage" class="pictrue"><img :src="merInfoForm.backImage" /></div>
  59. <div v-else class="upLoad">
  60. <i class="el-icon-camera cameraIconfont" />
  61. </div>
  62. <div class="from-tips">请上传小于500kb的图片(375*180 px)</div>
  63. </div>
  64. </el-form-item>
  65. <el-form-item label="H5商户街背景图:" prop="streetBackImage">
  66. <div class="upLoadPicBox acea-row" @click="modalPicTap('1', 'streetBackImage')">
  67. <div v-if="merInfoForm.streetBackImage" class="pictrue">
  68. <img :src="merInfoForm.streetBackImage" />
  69. </div>
  70. <div v-else class="upLoad">
  71. <i class="el-icon-camera cameraIconfont" />
  72. </div>
  73. <div class="from-tips">请上传小于500kb的图片(355*78 px)</div>
  74. </div>
  75. </el-form-item>
  76. <el-form-item label="H5商户封面图:" prop="coverImage">
  77. <div class="upLoadPicBox acea-row" @click="modalPicTap('1', 'coverImage')">
  78. <div v-if="merInfoForm.coverImage" class="pictrue">
  79. <img :src="merInfoForm.coverImage" />
  80. </div>
  81. <div v-else class="upLoad">
  82. <i class="el-icon-camera cameraIconfont" />
  83. </div>
  84. <div class="from-tips">请上传小于500kb的图片(350*350 px)</div>
  85. </div>
  86. </el-form-item>
  87. <el-form-item label="H5商户logo(横):" prop="rectangleLogo">
  88. <div class="upLoadPicBox acea-row" @click="modalPicTap('1', 'rectangleLogo')">
  89. <div v-if="merInfoForm.rectangleLogo" class="pictrue">
  90. <img :src="merInfoForm.rectangleLogo" />
  91. </div>
  92. <div v-else class="upLoad">
  93. <i class="el-icon-camera cameraIconfont" />
  94. </div>
  95. <div class="from-tips">请上传小于500kb的图片(300*88 px)</div>
  96. </div>
  97. </el-form-item>
  98. <el-form-item label="商户简介:" prop="intro">
  99. <el-input type="textarea" v-model.trim="merInfoForm.intro" maxlength="200" class="width100"></el-input>
  100. </el-form-item>
  101. <el-form-item label="商户关键字:" prop="labelarr">
  102. <keyword @getLabelarr="getLabelarr" :labelarr="labelarr" class="width100"></keyword>
  103. </el-form-item>
  104. <el-form-item label="客服类型:" prop="serviceType">
  105. <el-select v-model="merInfoForm.serviceType" placeholder="请选择" class="width100">
  106. <el-option v-for="item in serviceList" :key="item.value" :label="item.label" :value="item.value">
  107. </el-option>
  108. </el-select>
  109. </el-form-item>
  110. <el-form-item v-if="merInfoForm.serviceType === 'H5'" label="H5链接:" prop="serviceLink">
  111. <el-input v-model.trim="merInfoForm.serviceLink" class="width100"></el-input>
  112. </el-form-item>
  113. <el-form-item v-if="merInfoForm.serviceType === 'phone'" label="电话:" prop="servicePhone">
  114. <el-input v-model.trim="merInfoForm.servicePhone" class="width100"></el-input>
  115. </el-form-item>
  116. <el-form-item label="警戒库存:" prop="alertStock">
  117. <el-input-number
  118. v-model.trim="merInfoForm.alertStock"
  119. :min="1"
  120. :max="9999"
  121. label="警戒库存"
  122. ></el-input-number>
  123. </el-form-item>
  124. <el-form-item label="自提开关:" prop="alertStock">
  125. <el-switch
  126. v-model="merInfoForm.isTakeTheir"
  127. :active-value="true"
  128. :inactive-value="false"
  129. active-text="开启"
  130. inactive-text="关闭"
  131. >
  132. </el-switch>
  133. </el-form-item>
  134. <el-form-item label="首单立减:" prop="alertStock">
  135. <el-input-number
  136. v-model.trim="merInfoForm.alertStock"
  137. :min="1"
  138. :max="9999"
  139. label="起送费"
  140. ></el-input-number>
  141. </el-form-item>
  142. <el-form-item label="起送费:" prop="alertStock">
  143. <el-input-number
  144. v-model.trim="merInfoForm.alertStock"
  145. :min="1"
  146. :max="9999"
  147. label="起送费"
  148. ></el-input-number>
  149. </el-form-item>
  150. <el-form-item label="配送费开关:" prop="alertStock">
  151. <el-switch
  152. v-model="merInfoForm.isTakeTheir"
  153. :active-value="true"
  154. :inactive-value="false"
  155. active-text="开启"
  156. inactive-text="关闭"
  157. >
  158. </el-switch>
  159. </el-form-item>
  160. <el-form-item label="是否减免配送费:" prop="electrPrintingSwitch" v-if="merInfoForm.isTakeTheir">
  161. <el-radio-group v-model="merInfoForm.electrPrintingSwitch">
  162. <el-radio :label="0">全免</el-radio>
  163. <el-radio :label="1">免部分</el-radio>
  164. </el-radio-group>
  165. <el-input-number
  166. v-if="merInfoForm.electrPrintingSwitch === 1"
  167. v-model.trim="merInfoForm.alertStock"
  168. :min="1"
  169. :max="9999"
  170. label="起送费"
  171. ></el-input-number>
  172. </el-form-item>
  173. <el-form-item label="小票打印开关:" prop="receiptPrintingSwitch">
  174. <el-radio-group v-model="merInfoForm.receiptPrintingSwitch">
  175. <!-- 小票打印开关:0关闭,1=手动打印,2=自动打印,3=自动和手动-->
  176. <el-radio :label="0">关闭</el-radio>
  177. <el-radio :label="1">手动打印</el-radio>
  178. <el-radio :label="2">自动打印</el-radio>
  179. <el-radio :label="3">自动和手动</el-radio>
  180. </el-radio-group>
  181. </el-form-item>
  182. <el-form-item label="电子面单开关:" prop="electrPrintingSwitch">
  183. <el-radio-group v-model="merInfoForm.electrPrintingSwitch">
  184. <el-radio :label="0">关闭</el-radio>
  185. <el-radio :label="1">开启</el-radio>
  186. </el-radio-group>
  187. </el-form-item>
  188. <el-form-item label="商户地址:" prop="addressDetail">
  189. <el-input
  190. class="width100"
  191. v-model="merInfoForm.addressDetail"
  192. enter-button="查找位置"
  193. placeholder="请查找位置"
  194. readonly
  195. >
  196. <!--el-button
  197. slot="append"
  198. style="background: #46a6ff; color: #fff; border-radius: 0 4px 4px 0;"
  199. @click="onSearchs">
  200. 查找位置</el-button-->
  201. </el-input>
  202. <iframe id="mapPage" width="100%" height="500px" frameborder="0" :src="keyUrl" />
  203. </el-form-item>
  204. <el-form-item v-if="checkPermi(['merchant:config:info:edit'])">
  205. <el-button type="primary" @click="handlerSubmit('merInfoForm')">确定</el-button>
  206. </el-form-item>
  207. </el-form>
  208. </div>
  209. </div>
  210. <div v-if="loginType === '3'" class="business-msg">
  211. <div class="form-data">
  212. <el-form ref="settlementForm" :model="settlementForm" label-width="100px">
  213. <el-form-item label="结算类型:" label-width="120px">
  214. <el-radio-group v-model="settlementForm.settlementType">
  215. <el-radio label="bank">银行卡</el-radio>
  216. <el-radio label="wechat">微信</el-radio>
  217. <el-radio label="alipay">支付宝</el-radio>
  218. </el-radio-group>
  219. </el-form-item>
  220. </el-form>
  221. <z-b-parser
  222. v-if="loginType === '3'"
  223. :is-create="1"
  224. :form-conf="formConf"
  225. :edit-data="transferData"
  226. :form-name="formId"
  227. @submit="transferhandlerSubmit"
  228. :key-num="keyNum"
  229. />
  230. </div>
  231. </div>
  232. </el-card>
  233. </div>
  234. </template>
  235. <script>
  236. // +----------------------------------------------------------------------
  237. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  238. // +----------------------------------------------------------------------
  239. // | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
  240. // +----------------------------------------------------------------------
  241. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  242. // +----------------------------------------------------------------------
  243. // | Author: CRMEB Team <admin@crmeb.com>
  244. // +----------------------------------------------------------------------
  245. import {
  246. merchantSwitchApi,
  247. merchantTransferEditApi,
  248. getBaseInfoApi,
  249. merchantUpdateApi,
  250. merchantConfigInfoApi,
  251. merchantTransferApi,
  252. } from '@/api/merchant';
  253. import { checkPermi } from '@/utils/permission'; // 权限判断函数
  254. import { Debounce } from '@/utils/validate';
  255. import Cookies from 'js-cookie';
  256. export default {
  257. name: 'Information',
  258. data() {
  259. var checkPhone = (rule, value, callback) => {
  260. if (value === '') {
  261. callback(new Error('请输入客服电话'));
  262. } else {
  263. let regPone = null;
  264. const mobile = /^1(3|4|5|6|7|8|9)\d{9}$/; // 最新16手机正则
  265. const tel = /^(0[0-9]{2,3}\-)([2-9][0-9]{4,7})+(\-[0-9]{1,4})?$/; // 座机
  266. if (value.charAt(0) == 0) {
  267. // charAt查找第一个字符方法,用来判断输入的是座机还是手机号
  268. regPone = tel;
  269. } else {
  270. regPone = mobile;
  271. }
  272. if (!regPone.test(value)) {
  273. return callback(new Error("请填写客服电话(座机格式'区号-座机号码')"));
  274. }
  275. callback();
  276. }
  277. };
  278. const validateVal = (rule, value, callback) => {
  279. if (this.labelarr.length === 0) {
  280. callback(new Error('请输入后回车'));
  281. } else {
  282. callback();
  283. }
  284. };
  285. return {
  286. formConf: { fields: [] },
  287. isCreate: 0,
  288. loginType: '1',
  289. headeNum: [
  290. { type: '1', name: '商户信息' },
  291. { type: '2', name: '店铺信息' },
  292. { type: '3', name: '结算信息' },
  293. ],
  294. merData: {}, // 默认数据
  295. submitLoading: false, // 提交loading
  296. editData: {},
  297. transferData: {},
  298. keyNum: 0,
  299. loading: false,
  300. merInfoForm: {
  301. avatar: '',
  302. backImage: '',
  303. streetBackImage: '',
  304. rectangleLogo: '',
  305. coverImage: '',
  306. intro: '',
  307. keywords: '',
  308. alertStock: 1,
  309. addressDetail: '',
  310. serviceType: '',
  311. serviceLink: null,
  312. servicePhone: '',
  313. latitude: '', //纬度
  314. longitude: '', //经度
  315. isTakeTheir: false,
  316. receiptPrintingSwitch: 0, // 小票打印开关:0关闭,1=自动打印,2=手动打印,3=自动和手动
  317. electrPrintingSwitch: 0, // 电子面单开关 0关闭 1开启
  318. txMapKey: '',
  319. },
  320. rules: {
  321. intro: [{ required: true, message: '请输入商户简介', trigger: 'blur' }],
  322. avatar: [{ required: true, message: '请上传商户主头像', trigger: 'change' }],
  323. backImage: [{ required: true, message: '请上传H5商户背景图', trigger: 'change' }],
  324. streetBackImage: [{ required: true, message: '请上传H5商户街背景图', trigger: 'change' }],
  325. coverImage: [{ required: true, message: '请上传商户封面图', trigger: 'change' }],
  326. rectangleLogo: [{ required: true, message: '请上传商户logo(横)', trigger: 'change' }],
  327. labelarr: [{ required: true, validator: validateVal, trigger: 'blur' }],
  328. alertStock: [{ required: true, message: '请输入警戒库存', trigger: 'blur' }],
  329. serviceType: [{ required: true, message: '请选择客服类型', trigger: 'change' }],
  330. serviceLink: [{ required: true, message: '请输入H5链接', trigger: 'blur' }],
  331. servicePhone: [{ required: true, validator: checkPhone, trigger: 'blur' }],
  332. addressDetail: [{ required: true, message: '请选择商户地址', trigger: 'blur' }],
  333. },
  334. keyUrl: '',
  335. labelarr: [],
  336. serviceList: [
  337. {
  338. value: 'H5',
  339. label: 'H5链接',
  340. },
  341. {
  342. value: 'phone',
  343. label: '电话',
  344. },
  345. ],
  346. settlementForm: {
  347. settlementType: 'bank',
  348. },
  349. formId: '结算信息-银行卡',
  350. };
  351. },
  352. watch: {
  353. 'settlementForm.settlementType': {
  354. handler: function (val) {
  355. switch (val) {
  356. case 'bank':
  357. this.formId = '结算信息-银行卡';
  358. break;
  359. case 'wechat':
  360. this.formId = '结算信息-微信';
  361. break;
  362. default:
  363. this.formId = '结算信息-支付宝';
  364. break;
  365. }
  366. this.keyNum += 1;
  367. },
  368. immediate: false,
  369. deep: true,
  370. },
  371. },
  372. created() {
  373. if (checkPermi(['merchant:config:info'])) this.getConfigInfo();
  374. if (checkPermi(['merchant:settlement:info'])) this.getMerchantTransfer();
  375. if (checkPermi(['merchant:base:info'])) this.getInfo();
  376. },
  377. mounted: function () {
  378. let that = this;
  379. window.addEventListener(
  380. 'message',
  381. function (event) {
  382. // 接收位置信息,用户选择确认位置点后选点组件会触发该事件,回传用户的位置信息
  383. var loc = event.data;
  384. if (loc && loc.module === 'locationPicker') {
  385. // 防止其他应用也会向该页面post信息,需判断module是否为'locationPicker'
  386. window.parent.selectAdderss(loc);
  387. }
  388. },
  389. false,
  390. );
  391. window.selectAdderss = this.selectAdderss;
  392. },
  393. methods: {
  394. checkPermi,
  395. getLabelarr(attr) {
  396. this.labelarr = attr;
  397. },
  398. // 点击商品图
  399. modalPicTap(tit, val) {
  400. const _this = this;
  401. this.$modalUpload(
  402. function (img) {
  403. if (!img) return;
  404. switch (val) {
  405. case 'avatar':
  406. _this.merInfoForm.avatar = img[0].sattDir;
  407. break;
  408. case 'backImage':
  409. _this.merInfoForm.backImage = img[0].sattDir;
  410. break;
  411. case 'rectangleLogo':
  412. _this.merInfoForm.rectangleLogo = img[0].sattDir;
  413. break;
  414. case 'coverImage':
  415. _this.merInfoForm.coverImage = img[0].sattDir;
  416. break;
  417. default:
  418. _this.merInfoForm.streetBackImage = img[0].sattDir;
  419. break;
  420. }
  421. },
  422. tit,
  423. 'content',
  424. );
  425. },
  426. // 选择经纬度
  427. selectAdderss(data) {
  428. this.merInfoForm.addressDetail = data.poiaddress + data.poiname;
  429. this.merInfoForm.city=data.cityname;
  430. this.merInfoForm.latitude = data.latlng.lat;
  431. this.merInfoForm.longitude = data.latlng.lng;
  432. },
  433. changeSwitch() {
  434. const changeSwitch = this.merData.isSwitch ? '开启' : '关闭';
  435. this.$modalSure(`${changeSwitch}该商户吗`)
  436. .then(() => {
  437. merchantSwitchApi()
  438. .then((res) => {
  439. this.$modal.msgSuccess('修改成功');
  440. })
  441. .catch(() => {
  442. this.merData.isSwitch = !this.merData.isSwitch;
  443. });
  444. })
  445. .catch(() => {
  446. this.merData.isSwitch = !this.merData.isSwitch;
  447. });
  448. },
  449. handlerSubmit: Debounce(function (formName) {
  450. this.$refs[formName].validate((valid) => {
  451. if (valid) {
  452. this.merInfoForm.keywords = this.labelarr.join(',');
  453. merchantUpdateApi(this.merInfoForm).then((res) => {
  454. this.$message.success('操作成功');
  455. Cookies.set('merPrint', this.merInfoForm.receiptPrintingSwitch); // 打印机标识
  456. Cookies.set('merElectPrint', this.merInfoForm.electrPrintingSwitch); // 电子面单打印开关
  457. this.getConfigInfo();
  458. });
  459. } else {
  460. console.log('error submit!!');
  461. return false;
  462. }
  463. });
  464. }),
  465. transferhandlerSubmit: Debounce(function (formValue) {
  466. if (checkPermi(['merchant:settlement:info:edit'])) {
  467. merchantTransferEditApi({
  468. id: this.formId,
  469. settlementType: this.settlementForm.settlementType,
  470. alipayCode: formValue.alipayCode,
  471. alipayQrcodeUrl: formValue.alipayQrcodeUrl,
  472. bankAddress: formValue.bankAddress,
  473. bankCard: formValue.bankCard,
  474. bankName: formValue.bankName,
  475. bankUserName: formValue.bankUserName,
  476. wechatCode: formValue.wechatCode,
  477. wechatQrcodeUrl: formValue.wechatQrcodeUrl,
  478. realName: formValue.realName,
  479. }).then((res) => {
  480. this.$message.success('操作成功');
  481. this.getMerchantTransfer();
  482. });
  483. } else {
  484. this.$message.warning('暂无操作权限');
  485. }
  486. }),
  487. // 获取商户信息
  488. getInfo() {
  489. this.loading = true;
  490. getBaseInfoApi()
  491. .then((res) => {
  492. this.merData = res;
  493. localStorage.setItem('JavaMerchantBaseInfo', JSON.stringify(res));
  494. this.loading = false;
  495. })
  496. .catch(() => {
  497. this.loading = false;
  498. });
  499. },
  500. // 获取商户配置信息
  501. getConfigInfo() {
  502. merchantConfigInfoApi().then((res) => {
  503. this.merInfoForm = res;
  504. //alert(this.merInfoForm.txMapKey)
  505. this.keyUrl = `https://apis.map.qq.com/tools/locpicker?type=1&key=${this.merInfoForm.txMapKey}&referer=myapp`;
  506. localStorage.setItem('JavaMerchantConfigInfo', JSON.stringify(res));
  507. this.labelarr = res.keywords.split(',') || [];
  508. });
  509. },
  510. // 获取转账信息
  511. getMerchantTransfer() {
  512. merchantTransferApi().then((res) => {
  513. this.transferData = res;
  514. this.settlementForm = res;
  515. });
  516. },
  517. },
  518. };
  519. </script>
  520. <style lang="scss" scoped>
  521. .width100 {
  522. width: 700px;
  523. }
  524. .pictrue {
  525. width: 60px;
  526. height: 60px;
  527. border: 1px dotted rgba(0, 0, 0, 0.1);
  528. margin-right: 10px;
  529. position: relative;
  530. cursor: pointer;
  531. ::v-deep.el-image {
  532. width: 60px;
  533. height: 60px;
  534. }
  535. video {
  536. width: 100%;
  537. height: 100%;
  538. }
  539. }
  540. ::v-deep.el-textarea__inner {
  541. height: 90px;
  542. }
  543. .information {
  544. width: 100%;
  545. display: flex;
  546. flex-direction: column;
  547. padding: 25px 0 0 50px;
  548. /*align-items: center;*/
  549. h2 {
  550. text-align: center;
  551. color: #303133;
  552. font-weight: bold;
  553. font-size: 20px;
  554. }
  555. .lab-title {
  556. width: max-content;
  557. font-size: 14px;
  558. font-weight: bold;
  559. color: #303133;
  560. margin: 10px 10%;
  561. &::before {
  562. content: '';
  563. display: inline-block;
  564. width: 3px;
  565. height: 13px;
  566. background-color: var(--prev-color-primary);
  567. margin-right: 6px;
  568. position: relative;
  569. top: 1px;
  570. }
  571. }
  572. .user-msg {
  573. padding: 0 20px;
  574. margin-top: 30px;
  575. }
  576. .basic-information {
  577. font-size: 13px;
  578. color: #303133;
  579. font-weight: 400;
  580. text-rendering: optimizeLegibility;
  581. .tips {
  582. color: #606266;
  583. width: 110px;
  584. text-align: right;
  585. }
  586. > div {
  587. margin-bottom: 16px;
  588. flex-wrap: nowrap;
  589. display: flex;
  590. align-items: center;
  591. white-space: nowrap;
  592. }
  593. }
  594. .trip {
  595. padding-left: 10px;
  596. color: #ffb027;
  597. font-weight: normal;
  598. }
  599. .selWidth {
  600. width: 100%;
  601. }
  602. .demo-ruleForm {
  603. overflow: hidden;
  604. .form-item {
  605. width: 48%;
  606. display: inline-block;
  607. }
  608. }
  609. .form-data {
  610. padding: 30px 8%;
  611. .map-sty {
  612. width: 90%;
  613. text-align: right;
  614. margin: 0 0 0 10%;
  615. }
  616. .pictrue img {
  617. border-radius: 4px;
  618. object-fit: cover;
  619. }
  620. .tip-form {
  621. display: flex;
  622. align-items: center;
  623. span {
  624. white-space: nowrap;
  625. padding-left: 10px;
  626. line-height: 20px;
  627. }
  628. }
  629. }
  630. .submit-button {
  631. display: flex;
  632. justify-content: center;
  633. position: fixed;
  634. bottom: 20px;
  635. // left: 50%;
  636. width: 80%;
  637. padding: 10px 0;
  638. background-color: rgba(255, 255, 255, 0.7);
  639. }
  640. }
  641. .font_red {
  642. color: red;
  643. margin-right: 5px;
  644. font-weight: bold;
  645. }
  646. .margin_main {
  647. position: relative;
  648. .margin_price {
  649. cursor: pointer;
  650. }
  651. &:hover {
  652. .margin_modal {
  653. display: flex;
  654. }
  655. }
  656. .margin_modal {
  657. position: absolute;
  658. left: 0;
  659. top: 30px;
  660. border-radius: 8px;
  661. background: #fff;
  662. align-items: center;
  663. justify-content: center;
  664. z-index: 9;
  665. width: 250px;
  666. height: 320px;
  667. box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, 0.3);
  668. display: none;
  669. .alic {
  670. text-align: center;
  671. }
  672. img {
  673. display: block;
  674. width: 150px;
  675. height: 116px;
  676. margin: 0 auto 50px;
  677. }
  678. span {
  679. margin-bottom: 10px;
  680. display: block;
  681. font-weight: normal;
  682. text-align: center;
  683. }
  684. .text_g {
  685. font-size: 16px;
  686. color: #303133;
  687. }
  688. .text_b {
  689. color: #606266;
  690. font-size: 18px;
  691. font-weight: bold;
  692. margin-bottom: 14px;
  693. &.b02 {
  694. color: #ef9b6f;
  695. }
  696. &.b01 {
  697. color: #57d1a0;
  698. }
  699. }
  700. .el-button {
  701. margin-top: 25px;
  702. }
  703. }
  704. .margin_refused {
  705. display: block;
  706. margin-bottom: 10px;
  707. text-align: center;
  708. color: #606266;
  709. span {
  710. display: inline;
  711. // color: red;
  712. }
  713. }
  714. }
  715. .margin_count {
  716. position: relative;
  717. display: inline-block;
  718. .pay_btn:hover + .erweima {
  719. display: block;
  720. }
  721. .erweima {
  722. position: absolute;
  723. left: 0;
  724. top: 30px;
  725. z-index: 9;
  726. display: none;
  727. width: 250px;
  728. height: 320px;
  729. text-align: center;
  730. background: #fff;
  731. border-radius: 8px;
  732. padding: 10px;
  733. box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, 0.3);
  734. img {
  735. width: 160px;
  736. height: 160px;
  737. margin-top: 20px;
  738. }
  739. .pay_type {
  740. font-size: 16px;
  741. color: #303133;
  742. font-weight: normal;
  743. }
  744. .pay_price {
  745. font-size: 18px;
  746. color: #e57272;
  747. margin: 10px 0;
  748. }
  749. .pay_title {
  750. font-size: 16px;
  751. color: #303133;
  752. margin-top: 20px;
  753. }
  754. .pay_time {
  755. font-size: 12px;
  756. color: #6d7278;
  757. }
  758. }
  759. }
  760. ::v-deep .el-upload--picture-card {
  761. width: 58px;
  762. height: 58px;
  763. line-height: 70px;
  764. }
  765. ::v-deep.el-upload-list__item {
  766. width: 58px;
  767. height: 58px;
  768. }
  769. .upLoadPicBox_qualification {
  770. display: flex;
  771. flex-wrap: wrap;
  772. .uploadpicBox_list {
  773. position: relative;
  774. height: 58px;
  775. width: 58px;
  776. margin: 0 20px 20px 0;
  777. .uploadpicBox_list_image {
  778. position: absolute;
  779. top: 0;
  780. left: 0;
  781. width: 58px;
  782. height: 58px;
  783. border-radius: 4px;
  784. overflow: hidden;
  785. img {
  786. width: 100%;
  787. height: 100%;
  788. }
  789. }
  790. .uploadpicBox_list_method {
  791. position: absolute;
  792. top: 0;
  793. left: 0;
  794. font-size: 18px;
  795. font-weight: bold;
  796. color: #fff;
  797. display: flex;
  798. align-items: center;
  799. justify-content: space-around;
  800. background: rgba(0, 0, 0, 0.4);
  801. border-radius: 4px;
  802. opacity: 0;
  803. width: 100%;
  804. height: 100%;
  805. transition: 0.3s;
  806. }
  807. }
  808. }
  809. .uploadpicBox_list:hover .uploadpicBox_list_method {
  810. z-index: 11;
  811. opacity: 1;
  812. }
  813. </style>