projectOut.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828
  1. <template>
  2. <div>
  3. <!-- 顶部条-->
  4. <van-nav-bar class="navBar" title="拜访" left-arrow @click-left="onClickLeft" />
  5. <!-- 主体内容-->
  6. <div class="container">
  7. <div class="lineGrey"></div>
  8. <div class="card mt10">
  9. <div class="title f-blue">
  10. {{ storeName }}(<span style="color: #0057ba">{{ urlParameter.storeCode }}</span
  11. >)
  12. </div>
  13. <div class="info1" v-if="addressLine != null">类型:{{ storeCategory }}</div>
  14. <div class="info1" v-if="addressLine != null">地址:{{ addressLine }}</div>
  15. <van-button
  16. type="info"
  17. style="background: rgb(0, 87, 186); color: #fff; margin: 10px 0; border-radius: 5px"
  18. size="small"
  19. plain
  20. class="centerBtn"
  21. @click="visitFn(urlParameter.storeCode)"
  22. >经营情况</van-button
  23. >
  24. <van-button
  25. type="info"
  26. style="background: rgb(0, 87, 186); color: #fff; margin: 10px; border-radius: 5px"
  27. size="small"
  28. plain
  29. v-if="showOrderButton"
  30. class="centerBtn"
  31. @click="overbookingFn(urlParameter)"
  32. >去下单</van-button
  33. >
  34. <van-button
  35. type="info"
  36. v-if="closeProject == '0'"
  37. style="
  38. float: right;
  39. background: #ed5565;
  40. border-color: #ed5565;
  41. color: #fff;
  42. margin: 10px 0;
  43. border-radius: 5px;
  44. "
  45. size="small"
  46. plain
  47. class="centerBtn"
  48. @click="onstopVisit">
  49. 取消项目</van-button
  50. >
  51. </div>
  52. <div class="card">
  53. <div
  54. class="info"
  55. v-for="(item, index) in list"
  56. :key="index"
  57. @click="addStoreVisit(item, index)">
  58. <span class="must" v-show="item.isMust == '0' || item.isMust == '2'">*</span>
  59. <span class="must" v-show="item.isMust != '0' && item.isMust != '2'">&nbsp;</span>
  60. <p style="width: 90%; margin: 0; line-height: 24px; display: inline-block">
  61. {{ item.taskName }}
  62. </p>
  63. <!-- -->
  64. <span v-show="item.processKey != null"><van-icon :name="sp" size="16" /></span>
  65. <span v-show="!item.success" class="arrow" style="background-color: #fff; color: #444"
  66. ><van-icon name="arrow"
  67. /></span>
  68. <span v-show="item.success" class="arrow" style="background-color: #0057ba"
  69. ><van-icon name="success"
  70. /></span>
  71. </div>
  72. </div>
  73. </div>
  74. <div class="tc" style="padding: 0 16px" v-if="closeProject == '0'">
  75. <van-button
  76. v-if="!stopTime"
  77. class="submitBtn"
  78. block
  79. type="info"
  80. color="#0057ba"
  81. @click="endVisitsFn"
  82. >提交项目</van-button
  83. >
  84. </div>
  85. <br />
  86. <div id="allmap"></div>
  87. </div>
  88. </template>
  89. <script>
  90. import sp from './../../assets/sp.png';
  91. import {
  92. getStoreGroupTask,
  93. endVisits,
  94. editDwellTime,
  95. suishenbangStoreSale,
  96. stopVisit,
  97. buryingPoint,
  98. } from '@/api/index';
  99. import axios from 'axios';
  100. import { getOrderUrlByStoreId } from '@/api/inventory';
  101. export default {
  102. name: 'outstoreVisit',
  103. data() {
  104. return {
  105. notes: '',
  106. visitModel: '1',
  107. sp: sp,
  108. uploadshow: false,
  109. closeProject: '',
  110. flag: true,
  111. questionsshow: false,
  112. uploadImgshow: false,
  113. imgs: [],
  114. uploadImages: [],
  115. uploadid1: 'uploadid1',
  116. uploadid2: 'uploadid2',
  117. iscuxiao: false,
  118. text: '',
  119. radio: '',
  120. isEdit: false,
  121. storeId: '',
  122. rdId: '',
  123. lat: '',
  124. lon: '',
  125. list: [],
  126. storeGroupId: '',
  127. visitId: '',
  128. addressLine: '',
  129. storeCategory: '',
  130. storeName: '',
  131. contactName: '',
  132. urlParameter: '',
  133. uType: '-1',
  134. showOrderButton: null,
  135. location: {
  136. lat: '34.6174',
  137. lon: '112.44039',
  138. },
  139. address: '',
  140. showTime: '00:00:00:00',
  141. city: '',
  142. locationAccuracy: '',
  143. id: '89',
  144. startTime: null,
  145. timeN: null,
  146. stopTime: '',
  147. };
  148. },
  149. created() {
  150. this.urlParameter = this.$route.query;
  151. this.storeId = this.$route.query.storeId + '';
  152. this.visitId = this.$route.query.visitId;
  153. this.stopTime = this.$route.query.stopTime;
  154. this.storeCode = this.$route.query.storeCode;
  155. this.rdId = this.$route.query.rdId + '';
  156. this.addressLine = this.$route.query.addressLine;
  157. this.storeCategory = this.$route.query.storeCategory;
  158. this.storeName = this.$route.query.storeName;
  159. this.contactName = this.$route.query.contactName;
  160. this.lat = this.$route.query.lat + '';
  161. this.lon = this.$route.query.lon + '';
  162. this.visitModel = this.$route.query.visitModel + '';
  163. this.uType = localStorage.getItem('uType');
  164. },
  165. beforeRouteLeave(to, from, next) {
  166. if (
  167. (to.path == '/outsidelist/index' && from.path == '/suishenbangOutstoreVisit') ||
  168. (to.path == '/storeAdd' && from.path == '/suishenbangOutstoreVisit')
  169. ) {
  170. if (this.visitId != null && this.visitId != '') {
  171. this.editDwellTimes();
  172. }
  173. }
  174. next();
  175. },
  176. activated() {
  177. this.urlParameter = this.$route.query;
  178. this.storeId = this.$route.query.storeId + '';
  179. this.visitId = this.$route.query.visitId;
  180. this.stopTime = this.$route.query.stopTime;
  181. this.storeCode = this.$route.query.storeCode;
  182. this.rdId = this.$route.query.rdId + '';
  183. this.addressLine = this.$route.query.addressLine;
  184. this.storeCategory = this.$route.query.storeCategory;
  185. this.storeName = this.$route.query.storeName + '';
  186. this.contactName = this.$route.query.contactName + '';
  187. this.lat = this.$route.query.lat + '';
  188. this.lon = this.$route.query.lon + '';
  189. this.list = [];
  190. this.visitModel = this.$route.query.visitModel + '';
  191. this.uType = localStorage.getItem('uType');
  192. if (localStorage.getItem('PGID') != null) {
  193. this.visitId = localStorage.getItem('PGID');
  194. setTimeout(() => {
  195. this.addVisits();
  196. this.timeN = setInterval(this.animation, 16);
  197. });
  198. } else {
  199. setTimeout(() => {
  200. this.addVisits();
  201. this.timeN = setInterval(this.animation, 16);
  202. });
  203. }
  204. },
  205. methods: {
  206. animation() {
  207. //前时间减去上次开启时间减去暂停累计时间
  208. var times = new Date().getTime() - new Date(this.startTime).getTime();
  209. var house = Math.floor(times / 3600000); //毫秒转化为分钟
  210. var minutes = Math.floor(times / 60000 - house * 60); //毫秒转化为分钟
  211. var minutes1 = Math.floor(times / 60000); //毫秒转化为分钟
  212. var seconds = Math.floor((times - minutes1 * 60000) / 1000); //已知分钟将time减去分钟 除去1000得出 秒
  213. var ms = Math.floor((times - minutes1 * 60000 - seconds * 1000) / 10); //
  214. this.showTime =
  215. (house < 10 ? '0' + house : house) +
  216. ':' +
  217. (minutes < 10 ? '0' + minutes : minutes) +
  218. ':' +
  219. (seconds < 10 ? '0' + seconds : seconds) +
  220. ':' +
  221. (ms < 10 ? '0' + ms : ms);
  222. },
  223. // 结束拜访
  224. onstopVisit() {
  225. this.$dialog
  226. .confirm({
  227. confirmButtonText: '确定',
  228. cancelButtonText: '取消',
  229. title: '系统提示',
  230. message: '是否确认结束项目?',
  231. })
  232. .then(() => {
  233. stopVisit({ visitsId: this.visitId }).then((res) => {
  234. if (res.code == 200) {
  235. this.$dialog
  236. .alert({
  237. title: '系统提示',
  238. message: '项目结束成功!',
  239. })
  240. .then(() => {
  241. this.$router.go(-1);
  242. });
  243. } else {
  244. // this.$dialog.alert({
  245. // title: '系统提示',
  246. // message: res.data.msg,
  247. // })
  248. }
  249. });
  250. });
  251. },
  252. overbookingFn(val) {
  253. buryingPoint({
  254. systemModel: '拜访页',
  255. buryingPointType: 1,
  256. buryingPointValue: val.storeName + '(' + val.storeCode + ')',
  257. buryingPointName: '去下单',
  258. buryingPointPosition: '拜访页',
  259. });
  260. this.toastLoading(0, '加载中...', true);
  261. getOrderUrlByStoreId({
  262. storeId: this.$route.query.storeId,
  263. from: this.$route.query.from,
  264. }).then((res) => {
  265. this.toastLoading().clear();
  266. if (res.code == 200 && res.data) {
  267. window.location.href = res.data;
  268. } else {
  269. this.Toast({
  270. message: res.msg,
  271. duration: 5000,
  272. });
  273. }
  274. });
  275. },
  276. visitFn(val) {
  277. var that = this;
  278. suishenbangStoreSale({ storeCode: val }).then((res) => {
  279. if (res.code == 200) {
  280. if (res.data.num != '0') {
  281. window.location.href =
  282. process.env.VUE_APP_SSB_LINK +
  283. '/order/storeVisit/distributionShopDetail?shopCode=' +
  284. val +
  285. '&indexTab=2&visitId=' +
  286. that.visitId +
  287. '&lon=' +
  288. that.lon +
  289. '&lat=' +
  290. that.lat +
  291. '&rdId=' +
  292. that.rdId +
  293. '&storeCategory=' +
  294. that.storeCategory +
  295. '&storeId=' +
  296. that.storeId +
  297. '&storeName=' +
  298. that.storeName +
  299. '&addressLine=' +
  300. that.addressLine;
  301. } else {
  302. that.$toast(res.data.msg);
  303. }
  304. } else {
  305. that.$toast(res.msg);
  306. }
  307. });
  308. },
  309. getLocation() {
  310. let loading1 = this.$toast.loading({
  311. duration: 0,
  312. message: '加载中...',
  313. forbidClick: true,
  314. });
  315. this.list = [];
  316. let url = window.location.href;
  317. let that = this;
  318. let wx = this.wx;
  319. let qiyeData;
  320. const instance = axios.create();
  321. instance.defaults.headers.common['userId'] = localStorage.getItem('loginName');
  322. instance
  323. .get(process.env.VUE_APP_BASE_API + 'mobile/wx/ticket', {
  324. params: {
  325. url: url,
  326. },
  327. })
  328. .then((response) => {
  329. if (response.status == 200) {
  330. loading1.clear();
  331. qiyeData = response.data.data;
  332. wx.config({
  333. beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
  334. debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  335. appId: qiyeData.appId, // 必填,企业微信的corpID
  336. timestamp: qiyeData.timestamp, // 必填,生成签名的时间戳
  337. nonceStr: qiyeData.nonceStr, // 必填,生成签名的随机串
  338. signature: qiyeData.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
  339. jsApiList: ['ready', 'getLocation'], // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
  340. });
  341. wx.ready(function () {
  342. wx.getLocation({
  343. type: 'gcj02',
  344. success: function (res) {
  345. var location = that.CJ02BD(res.latitude, res.longitude);
  346. that.location = location;
  347. if (that.urlParameter.lat == '' || that.urlParameter.lat == null) {
  348. that.lat = that.location.lat;
  349. that.lon = that.location.lon;
  350. }
  351. let PointSum = that
  352. .twoPointSum(that.lat, that.lon, location.lat, location.lon)
  353. .toFixed(2);
  354. if (PointSum > 500) {
  355. that.visitModel = '5';
  356. localStorage.setItem('visitModel', '5');
  357. that.$dialog
  358. .confirm({
  359. confirmButtonText: '确定',
  360. cancelButtonText: '重新定位',
  361. title: '系统提示',
  362. message: '距离本店距离差距太大',
  363. })
  364. .then(() => {
  365. that.addVisits();
  366. })
  367. .catch(() => {
  368. that.getLocation();
  369. });
  370. } else {
  371. that.addVisits();
  372. }
  373. },
  374. fail: function () {
  375. that.$dialog
  376. .alert({
  377. message: 'GPS未开启',
  378. })
  379. .then(() => {
  380. that.getLocation();
  381. });
  382. },
  383. });
  384. });
  385. }
  386. });
  387. },
  388. editDwellTimes() {
  389. let dwellTime = this.weekend(localStorage.getItem('startTime'), new Date()) + '';
  390. editDwellTime({ dwellTime: dwellTime, visitsId: this.visitId }).then((res) => {
  391. if (res.code == 200) {
  392. // localStorage.removeItem("PGID")
  393. }
  394. });
  395. },
  396. weekend(time1) {
  397. var arrtime1 = new Date(time1).getTime();
  398. var arrtime2 = new Date().getTime();
  399. return Math.round((arrtime2 - arrtime1) / 1000);
  400. },
  401. addVisits() {
  402. this.startTime = new Date();
  403. this.closeProject = this.$route.query.closeProject;
  404. var visitEntry = '';
  405. if (this.urlParameter.tabVal == '0') {
  406. visitEntry = '2';
  407. } else {
  408. visitEntry = '1';
  409. }
  410. if (this.$route.query.shopCode != undefined) {
  411. this.storeCode = this.$route.query.shopCode;
  412. }
  413. var that = this;
  414. var map = new TMap.Map('allmap', {
  415. zoom: 14,
  416. center: new TMap.LatLng(39.986785, 116.301012),
  417. });
  418. var geocoder = new TMap.service.Geocoder();
  419. var markers = new TMap.MultiMarker({
  420. map: map,
  421. geometries: [],
  422. });
  423. markers.setGeometries([]);
  424. var input = [that.urlParameter.marklat, that.urlParameter.marklon];
  425. var location = new TMap.LatLng(Number(input[0]), Number(input[1]));
  426. geocoder.getAddress({ location: location }).then(
  427. function (result) {
  428. var addresses = result.result.formatted_addresses;
  429. var params = {
  430. storeId: that.storeId,
  431. storeCode: that.storeCode,
  432. visitEntry: visitEntry,
  433. lat: that.$route.query.lat,
  434. lon: that.$route.query.lon,
  435. visitModel: that.visitModel,
  436. routeDetailsId: that.rdId,
  437. visitSource: '1',
  438. locationCity: '',
  439. projectVisit: 1,
  440. locationRemark: addresses.recommend,
  441. locationAccuracy: that.urlParameter.PointSum,
  442. };
  443. that.locationAccuracy = that.urlParameter.PointSum;
  444. that.city = '';
  445. that.address = addresses.recommend;
  446. localStorage.setItem('address', '');
  447. if (that.visitId != null) {
  448. params.id = that.visitId;
  449. }
  450. let loading2 = that.$toast.loading({
  451. duration: 0,
  452. message: '加载中...',
  453. forbidClick: true,
  454. });
  455. getStoreGroupTask(params).then((res) => {
  456. loading2.clear();
  457. if (res.code == 200) {
  458. localStorage.setItem('PGID', res.data.visitId);
  459. that.notes = res.data.notes;
  460. that.visitId = res.data.visitId;
  461. that.list = res.data.sfaTaskList;
  462. that.storeGroupId = res.data.storeGroupId;
  463. that.showOrderButton = res.data.showOrderButton;
  464. }
  465. });
  466. },
  467. function (err) {
  468. var params = {
  469. storeId: that.storeId,
  470. storeCode: that.storeCode,
  471. visitEntry: visitEntry,
  472. lat: that.$route.query.lat,
  473. lon: that.$route.query.lon,
  474. visitModel: that.visitModel,
  475. routeDetailsId: that.rdId,
  476. visitSource: '1',
  477. locationCity: '',
  478. projectVisit: 1,
  479. locationRemark: '',
  480. locationAccuracy: that.urlParameter.PointSum,
  481. };
  482. that.locationAccuracy = that.urlParameter.PointSum;
  483. that.city = '';
  484. that.address = '';
  485. localStorage.setItem('address', '');
  486. if (that.visitId != null) {
  487. params.id = that.visitId;
  488. }
  489. let loading2 = that.$toast.loading({
  490. duration: 0,
  491. message: '加载中...',
  492. forbidClick: true,
  493. });
  494. getStoreGroupTask(params).then((res) => {
  495. loading2.clear();
  496. if (res.code == 200) {
  497. localStorage.setItem('PGID', res.data.visitId);
  498. that.notes = res.data.notes;
  499. that.visitId = res.data.visitId;
  500. that.list = res.data.sfaTaskList;
  501. that.storeGroupId = res.data.storeGroupId;
  502. that.showOrderButton = res.data.showOrderButton;
  503. }
  504. });
  505. }
  506. );
  507. },
  508. addStoreVisit(val, index) {
  509. if (this.closeProject == '0') {
  510. this.$router.push({
  511. path: '/addStoreVisitP',
  512. query: {
  513. storeId: this.storeId,
  514. storeCode: this.urlParameter.storeCode,
  515. visitId: this.visitId,
  516. ids: index,
  517. taskId: val.taskId,
  518. storeGroupId: this.storeGroupId,
  519. taskType: val.taskType,
  520. photoType: val.photoType,
  521. lat: this.lat,
  522. lon: this.lon,
  523. visitSource: '1',
  524. visitModel: this.visitModel,
  525. locationCity: this.city,
  526. locationRemark: this.address,
  527. locationAccuracy: this.locationAccuracy,
  528. },
  529. });
  530. } else {
  531. this.$router.push({
  532. path: '/addStoreVisitd',
  533. query: {
  534. storeId: this.storeId,
  535. storeCode: this.urlParameter.storeCode,
  536. visitId: this.visitId,
  537. ids: index,
  538. taskId: val.taskId,
  539. storeGroupId: this.storeGroupId,
  540. taskType: val.taskType,
  541. photoType: val.photoType,
  542. lat: this.lat,
  543. lon: this.lon,
  544. visitSource: '1',
  545. visitModel: this.visitModel,
  546. locationCity: this.city,
  547. locationRemark: this.address,
  548. locationAccuracy: this.locationAccuracy,
  549. },
  550. });
  551. }
  552. },
  553. onClickLeft() {
  554. this.$router.go(-1);
  555. },
  556. endVisitsFn() {
  557. if (this.list.length == 0) {
  558. this.$toast('暂无任务提交');
  559. return;
  560. }
  561. for (var vl = 0; vl < this.list.length; vl++) {
  562. if (this.list[vl].isMust == '0') {
  563. if (!this.list[vl].success) {
  564. this.$toast(this.list[vl].taskName + '任务未完成');
  565. return;
  566. }
  567. }
  568. }
  569. let loading1 = this.$toast.loading({
  570. duration: 0,
  571. message: '加载中...',
  572. forbidClick: true,
  573. });
  574. let dwellTime = this.weekend(localStorage.getItem('startTime'), new Date());
  575. let storeCode = this.storeCode;
  576. if (this.$route.query.shopCode != undefined) {
  577. storeCode = this.$route.query.shopCode;
  578. }
  579. if (this.flag) {
  580. this.flag = false;
  581. this.timer = null;
  582. this.timer = setTimeout(() => {
  583. this.flag = true;
  584. }, 5000);
  585. endVisits({
  586. visitSource: '1',
  587. storeGroupId: this.storeGroupId,
  588. id: this.visitId,
  589. storeCode: storeCode,
  590. dwellTime: dwellTime,
  591. visitModel: this.$route.query.visitModel,
  592. }).then((res) => {
  593. this.flag = true;
  594. loading1.clear();
  595. if (res.code == 200) {
  596. this.editDwellTimes();
  597. this.$router.go(-1);
  598. // window.location.replace(window.location.origin + "/mobile/storeGroup")
  599. }
  600. });
  601. }
  602. },
  603. newimgarr1(val) {
  604. this.imgs = val;
  605. },
  606. uploadImgShowFn() {
  607. this.uploadImgshow = true;
  608. if (this.uploadImages.length <= 0) {
  609. this.uploadImgEditText = '';
  610. }
  611. },
  612. previewsImg(index) {
  613. ImagePreview({
  614. images: this.uploadImages,
  615. startPosition: index,
  616. onClose() {
  617. // do something
  618. },
  619. });
  620. },
  621. },
  622. destroyed() {
  623. this.timeN = null;
  624. clearInterval(this.timeN);
  625. },
  626. };
  627. </script>
  628. <style lang="scss" scoped>
  629. .container {
  630. margin-bottom: 10px;
  631. background-color: white;
  632. /*padding:0 16px;*/
  633. }
  634. .navBarOverlay {
  635. background: #fff;
  636. }
  637. .card {
  638. background: #fff;
  639. box-sizing: border-box;
  640. padding: 10px 16px;
  641. .title {
  642. line-height: 32px;
  643. font-size: 16px;
  644. font-weight: bold;
  645. color: #333;
  646. }
  647. .subtitle {
  648. line-height: 24px;
  649. font-size: 14px;
  650. color: #7b7b7b;
  651. .status {
  652. float: right;
  653. }
  654. }
  655. .info {
  656. font-size: 14px;
  657. color: #484848;
  658. padding: 14px;
  659. border-bottom: 1px solid #f1f1f1;
  660. position: relative;
  661. .arrow {
  662. float: right;
  663. display: inline-block;
  664. height: 20px;
  665. width: 20px;
  666. line-height: 20px;
  667. text-align: center;
  668. border-radius: 50%;
  669. background: #0057ba;
  670. color: #fff;
  671. font-weight: bold;
  672. font-size: 14px;
  673. position: absolute;
  674. margin-top: -10px;
  675. right: 0;
  676. top: 50%;
  677. }
  678. }
  679. .info1 {
  680. font-size: 14px;
  681. color: #666;
  682. line-height: 18px;
  683. padding: 4px 0;
  684. position: relative;
  685. .arrow {
  686. float: right;
  687. display: inline-block;
  688. height: 20px;
  689. width: 20px;
  690. line-height: 20px;
  691. text-align: center;
  692. border-radius: 50%;
  693. background: #0057ba;
  694. color: #fff;
  695. font-weight: bold;
  696. font-size: 14px;
  697. margin-top: 9px;
  698. position: absolute;
  699. right: 0;
  700. top: 50%;
  701. margin-top: -10px;
  702. }
  703. }
  704. }
  705. .must {
  706. font-size: 18px;
  707. color: #f56c6c;
  708. margin-right: 2px;
  709. }
  710. .zw {
  711. display: inline-block;
  712. width: 7px;
  713. height: 100%;
  714. }
  715. .lineGrey {
  716. height: 10px;
  717. width: 100%;
  718. background: #f1f1f1;
  719. }
  720. .submitBtn {
  721. margin: 16px 0;
  722. font-size: 18px;
  723. }
  724. .wrapper {
  725. display: flex;
  726. align-items: center;
  727. justify-content: center;
  728. height: 100%;
  729. .block {
  730. width: 100%;
  731. height: 100%;
  732. background-color: #fff;
  733. overflow: auto;
  734. }
  735. }
  736. .questionName {
  737. font-size: 16px;
  738. color: #484848;
  739. /*line-height: 40px;*/
  740. background: #f4f4f4;
  741. padding: 10px 15px;
  742. box-sizing: border-box;
  743. position: relative;
  744. display: flex;
  745. justify-content: center;
  746. .text {
  747. flex: 9;
  748. }
  749. }
  750. .answerDiv {
  751. background: #fff;
  752. padding: 0 15px 10px;
  753. .answerItem {
  754. padding: 10px 0;
  755. border-bottom: 1px solid #dedede;
  756. .name {
  757. line-height: 36px;
  758. font-size: 14px;
  759. color: #8b8b8b;
  760. }
  761. }
  762. }
  763. .border {
  764. border: 1px solid #dedede;
  765. }
  766. .ht30 {
  767. height: 30px;
  768. }
  769. .bodrder-b {
  770. border-bottom: 1px solid #dedede;
  771. }
  772. .img-box {
  773. width: 50%;
  774. /*height: 100%;*/
  775. position: relative;
  776. padding: 10px;
  777. display: inline-block;
  778. i {
  779. position: absolute;
  780. right: 2px;
  781. top: 2px;
  782. }
  783. img {
  784. width: 100%;
  785. height: 100%;
  786. }
  787. }
  788. .imgNull {
  789. text-align: center;
  790. padding-top: 100px;
  791. i {
  792. color: #dedede;
  793. }
  794. div {
  795. padding-top: 30px;
  796. font-size: 18px;
  797. font-weight: bold;
  798. }
  799. }
  800. .card .f-blue {
  801. color: #0057ba;
  802. }
  803. </style>
  804. <style>
  805. .navBarOverlay .van-nav-bar__left .van-icon {
  806. color: #8b8b8b;
  807. }
  808. .navBarOverlay .van-nav-bar__right .van-nav-bar__text {
  809. color: #333;
  810. }
  811. .ht30 .van-radio__label {
  812. color: #8b8b8b;
  813. }
  814. .van-dialog__confirm,
  815. .van-dialog__confirm:active {
  816. color: #0057ba;
  817. }
  818. #allmap {
  819. width: 20px;
  820. height: 20px;
  821. left: -1000px;
  822. position: relative;
  823. }
  824. </style>