group.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826
  1. <template>
  2. <view class="nvue-page-root">
  3. <view class="head">
  4. <view class="header-wrap">
  5. <view class="index-header">
  6. <uni-icons class="fanhui" custom-prefix="iconfont" type="icon-fanhui"
  7. @click="leftClick"></uni-icons>
  8. <view class="input-wrap">
  9. <text class="iconfont">组盘</text>
  10. </view>
  11. <view class="map-wrap" @click="rightClick">
  12. <uni-icons class="lanya" custom-prefix="iconfont" type="icon-lanya"></uni-icons>
  13. </view>
  14. </view>
  15. </view>
  16. <view class="blank"></view>
  17. </view>
  18. <view class="uni-common-mt" style="padding: 5px;">
  19. <view class="uni-input-wrapper" style="margin: 5px auto;">
  20. <input class="uni-input" auto-focus="true" :focus="firstFocus" placeholder="请扫描托盘码或产品码"
  21. v-model="viewText" @input="hideKeyboard" />
  22. </view>
  23. <view class="uni-form-item uni-column">
  24. <view class="uni-input-wrapper" style="margin: 5px auto;">
  25. <text class="uni-form-item__title" style="width: 25%;">托盘码</text>
  26. <input class="uni-input" :value="container_code" disabled="true" />
  27. </view>
  28. <view class="uni-padding-wrap uni-common-mt">
  29. <button type="primary" @click="SelectProduct()">选择货物</button>
  30. </view>
  31. <view class="uni-input-wrapper table-title">
  32. <!-- <view class="tab-tr" style="width: 40%;">编码</view> -->
  33. <view class="tab-tr" style="width: 80%;">名称</view>
  34. <view class="tab-tr-end" style="width: 12%;">重量</view>
  35. </view>
  36. <view style="min-height:244px;overflow-y:auto;max-height:244px">
  37. <view class="uni-input-wrapper table-data" v-for="(item,index) in tableData" :key="index">
  38. <view class="tab-tr"
  39. style="text-align: center;width: 80%;color:cadetblue; white-space: nowrap;text-overflow: ellipsis;overflow: hidden;"
  40. @click="Delete(item)">
  41. {{item.product_name}}
  42. </view>
  43. <view class="tab-tr-end" style="width: 12%;color:blue" @click="Update(item)">{{item.weight}}
  44. </view>
  45. </view>
  46. </view>
  47. <view class="uni-input-wrapper button-sp-area">
  48. <button type="primary" plain="true" @click="groupDisk()">组盘</button>
  49. <button type="primary" plain="true" @click="in_stock()">入库单</button>
  50. </view>
  51. </view>
  52. </view>
  53. <!-- 输入框示例 -->
  54. <uni-popup ref="inputDialog" type="dialog">
  55. <uni-popup-dialog ref="inputClose" mode="input" :title="product_name" value="" placeholder="请填写重量"
  56. @confirm="UpdateWeight"></uni-popup-dialog>
  57. </uni-popup>
  58. <!-- 提示窗示例 -->
  59. <uni-popup ref="deleteDialog" type="dialog">
  60. <uni-popup-dialog type="info" cancelText="取消" confirmText="确定" title="提示" :content="del_tips"
  61. @confirm="dialogConfirm" @close="dialogClose"></uni-popup-dialog>
  62. </uni-popup>
  63. <!-- 提示窗示例 -->
  64. <uni-popup ref="groupDialog" type="dialog">
  65. <uni-popup-dialog type="info" cancelText="取消" confirmText="确定" title="提示" content="确定组盘?"
  66. @confirm="dialogGroup" @close="dialogClose"></uni-popup-dialog>
  67. </uni-popup>
  68. <!-- 引入自定义模态框 -->
  69. <custom-modal :visible="modalVisible">
  70. <!-- 模态框的内容 -->
  71. <view>
  72. <text>提示</text>
  73. <view class="uni-input-wrapper" style="margin: 5px auto;">
  74. <text class="uni-form-item__title" style="width: 30%;">货物名称</text>
  75. <input class="uni-input" :value="product_name" disabled="true" />
  76. </view>
  77. <view class="uni-input-wrapper" style="margin: 5px auto;">
  78. <text class="uni-form-item__title" style="width: 30%;">重量</text>
  79. <input type="number" class="uni-input" :value="product_weight" @input="weightChange" />
  80. </view>
  81. <view>
  82. <text style="width: 30%;float: left;height: 35px;line-height: 35px;">生产日期</text>
  83. <picker style="width: 70%;float: right;" mode="date" :value="plandate" :start="startDate"
  84. :end="endDate" @change="plandateChange">
  85. <view class="uni-input">{{plandate}}</view>
  86. </picker>
  87. </view>
  88. <br><br>
  89. <view class="uni-input-wrapper" style="margin: 5px auto;">
  90. <text style="width: 30%;float: left;height: 35px;line-height: 35px;">有效期</text>
  91. <input type="number" class="uni-input" :value="expiredate" @input="expiredateChange" />
  92. </view>
  93. <view>
  94. <button class="mini-btn" size="mini" @click="closeModal" style="width: 50%;float: left;">关闭</button>
  95. <button class="mini-btn" type="primary" size="mini" @click="SelectConfirm"
  96. style="width: 50%;">添加</button>
  97. </view>
  98. </view>
  99. </custom-modal>
  100. </view>
  101. </template>
  102. <script>
  103. // import printConnect from "@/common/print.js"; //引入打印机模板文件
  104. import CustomModal from "@/components/CustomModal/CustomModal.vue";
  105. let _this = null;
  106. import {
  107. mapGetters,
  108. mapActions
  109. } from 'vuex';
  110. import {
  111. GET_INFODATA,
  112. GET_CONNECTBLEDATA
  113. } from "@/store/gettersType.js";
  114. import {
  115. SET_CONNECTBLEDATA
  116. } from '@/store/actionsType.js';
  117. // #ifdef APP-PLUS
  118. const modal = uni.requireNativePlugin('modal');
  119. // const HPRT = uni.requireNativePlugin('DCloud-RichAlert');
  120. const printModule = uni.requireNativePlugin('PrintModuleCPCL');
  121. // #endif
  122. let print;
  123. var reqRootUrl = plus.storage.getItem("reqRootUrl");
  124. let rData = [];
  125. const SpeechTTS = uni.requireNativePlugin('MT-TTS-Speech');
  126. export default {
  127. components: {
  128. CustomModal
  129. },
  130. data() {
  131. const currentDate = this.getDate({
  132. format: true
  133. });
  134. return {
  135. index: 0,
  136. product_sn: "",
  137. product_name: "",
  138. product_weight: "",
  139. product_code: "",
  140. del_tips: "",
  141. sn: "",
  142. isStart: true,
  143. modalVisible: false,
  144. bArray: [], //用于搜索蓝牙去重用的
  145. no_match_list: [], //没有配对的蓝牙列表
  146. match_list: "", //已连接蓝牙打印机
  147. val: "",
  148. valArr: [],
  149. url: '',
  150. item: {
  151. name: "HM",
  152. mac: "E0:6E:41:34:E0:93",
  153. },
  154. result: -1,
  155. title: 'input',
  156. firstFocus: false,
  157. src: '../../../static/eye-1.png',
  158. platform: '',
  159. container_code: "",
  160. viewText: "",
  161. tableData: [],
  162. plandate: currentDate,
  163. expiredate: 0,
  164. }
  165. },
  166. computed: {
  167. ...mapGetters([GET_INFODATA, GET_CONNECTBLEDATA]),
  168. startDate() {
  169. return this.getDate('start');
  170. },
  171. endDate() {
  172. return this.getDate('end');
  173. },
  174. },
  175. methods: {
  176. onUnload() {
  177. SpeechTTS.destroy();
  178. },
  179. speak_init() {
  180. // console.log('>> TTS:init...')
  181. SpeechTTS.init((callback) => {
  182. // SpeechTTS.setEngine("com.iflytek.speechcloud"); // 设置引擎
  183. SpeechTTS.setEngine("com.google.android.tts"); // 设置引擎
  184. // console.log('>> tts: init success');
  185. SpeechTTS.setPitch(50); // 设置语调 setPitch(num) 0-100, 默认 50
  186. SpeechTTS.setSpeed(65); // 设置语速 setSpeed(num) 0-100, 默认 50
  187. });
  188. SpeechTTS.onDone((res) => {
  189. // console.log(">> tts: play end " + res)
  190. });
  191. },
  192. leftClick: function() {
  193. setTimeout(() => {
  194. uni.navigateBack();
  195. // uni.redirectTo({
  196. // url: '/pages/sample/main',
  197. // })
  198. }, 30);
  199. // this.$emit('change', this.value)
  200. },
  201. rightClick: function() {
  202. setTimeout(() => {
  203. uni.navigateTo({
  204. url: '/pages/sample/richAlert',
  205. })
  206. }, 30);
  207. // this.$emit("rightClick")
  208. },
  209. onLoad() {
  210. this.platform = uni.getSystemInfoSync().platform
  211. // #ifdef APP-PLUS-NVUE
  212. // #endif
  213. _this = this;
  214. _this.firstFocus = true;
  215. // 打印相关
  216. setTimeout(() => {
  217. this.$init_bluetooth();
  218. }, 500);
  219. if (this.result !== 0) {
  220. this.closeBT()
  221. setTimeout(() => {
  222. let item = {
  223. name: "HM-A300-E093",
  224. mac: "60:6E:41:34:E0:93",
  225. };
  226. this.confirm_bluetooth(item)
  227. }, 1500);
  228. } else {
  229. // console.log("scssssss")
  230. }
  231. },
  232. onShow() {
  233. uni.hideKeyboard();
  234. setTimeout(() => {
  235. _this.firstFocus = true;
  236. this.getList();
  237. this.speak_init();
  238. }, 500);
  239. },
  240. SelectProduct() {
  241. setTimeout(() => {
  242. _this.firstFocus = false;
  243. uni.navigateTo({
  244. url: '/pages/sample/select_product',
  245. })
  246. }, 30);
  247. },
  248. hideKeyboard: function(event) {
  249. uni.hideKeyboard();
  250. let Value = event.detail.value;
  251. Value.trim();
  252. if (Value !== "" && Value !== null && Value !== undefined) {
  253. uni.request({
  254. url: reqRootUrl + '/wms/api',
  255. method: 'POST',
  256. headers: {
  257. 'Content-Type': 'application/json'
  258. },
  259. data: JSON.stringify({
  260. "method": "CodeGet",
  261. "param": {
  262. "code": Value,
  263. }
  264. }),
  265. success: (ret) => {
  266. let rows = ret.data.data;
  267. if (_this.isEmpty(rows)) {
  268. _this.alertInfo("托盘码错误,请重新扫描!")
  269. _this.$nextTick(() => {
  270. _this.firstFocus = false;
  271. _this.firstFocus = true;
  272. _this.viewText = "";
  273. _this.container_code = "";
  274. })
  275. _this.$forceUpdate()
  276. } else {
  277. _this.alertInfo("扫码成功!")
  278. if (!_this.isEmpty(rows["container_code"])) {
  279. _this.$nextTick(() => {
  280. _this.firstFocus = false;
  281. _this.firstFocus = true;
  282. _this.viewText = "";
  283. this.container_code = Value
  284. })
  285. } else {
  286. if (!_this.isEmpty(rows["product"])) {
  287. _this.modalVisible = true;
  288. _this.product_sn = rows["product"]["sn"];
  289. _this.product_name = rows["product"]["name"];
  290. _this.product_weight = "9";
  291. _this.viewText = "";
  292. }
  293. }
  294. }
  295. },
  296. fail: (err) => {
  297. // console.log('request fail', err);
  298. },
  299. complete: () => {
  300. // console.log('complete');
  301. }
  302. })
  303. }
  304. },
  305. closeModal() {
  306. // 关闭模态框
  307. this.modalVisible = false;
  308. },
  309. plandateChange: function(e) {
  310. this.plandate = e.target.value
  311. },
  312. expiredateChange: function(e) {
  313. this.expiredate = e.target.value
  314. },
  315. weightChange: function(e) {
  316. this.weight = e.target.value
  317. },
  318. getDate(type) {
  319. const date = new Date();
  320. let year = date.getFullYear();
  321. let month = date.getMonth() + 1;
  322. let day = date.getDate();
  323. if (type === 'start') {
  324. year = year - 60;
  325. } else if (type === 'end') {
  326. year = year + 2;
  327. }
  328. month = month > 9 ? month : '0' + month;
  329. day = day > 9 ? day : '0' + day;
  330. return `${year}-${month}-${day}`;
  331. },
  332. SelectConfirm() {
  333. _this.firstFocus = false;
  334. setTimeout(() => {
  335. uni.request({
  336. url: reqRootUrl + '/wms/api',
  337. method: 'POST',
  338. headers: {
  339. 'Content-Type': 'application/json'
  340. },
  341. data: JSON.stringify({
  342. "method": "GroupDiskAdd",
  343. "param": {
  344. "product_sn": _this.product_sn,
  345. "weight": parseFloat(_this.product_weight),
  346. "plandate": new Date(this.plandate).getTime(),
  347. "expiredate": parseFloat(this.expiredate),
  348. }
  349. }),
  350. success: (ret) => {
  351. if (ret.data.ret === "ok") {
  352. setTimeout(() => {
  353. _this.getList();
  354. }, 30);
  355. }
  356. },
  357. fail: (err) => {
  358. // console.log('request fail', err);
  359. },
  360. complete: () => {
  361. // console.log('complete');
  362. }
  363. })
  364. _this.alertInfo("添加成功!")
  365. _this.$nextTick(() => {
  366. _this.firstFocus = true;
  367. _this.viewText = "";
  368. _this.product_sn = "";
  369. _this.product_name = "";
  370. _this.product_weight = "";
  371. // 关闭窗口后,恢复默认内容
  372. this.modalVisible = false;
  373. })
  374. }, 30)
  375. },
  376. Delete(item) {
  377. this.sn = item["sn"]
  378. this.del_tips = "确定删除货物" + item["product_name"] + "?";
  379. this.$refs.deleteDialog.open()
  380. },
  381. dialogConfirm() {
  382. setTimeout(() => {
  383. uni.hideLoading()
  384. if (parseFloat() <= 0) {
  385. modal.toast({
  386. message: msg,
  387. duration: 6
  388. });
  389. return
  390. } else {
  391. uni.request({
  392. url: reqRootUrl + '/wms/api',
  393. method: 'POST',
  394. headers: {
  395. 'Content-Type': 'application/json'
  396. },
  397. data: JSON.stringify({
  398. "method": "GroupDiskDelete",
  399. "param": {
  400. [_this.sn]: {}
  401. }
  402. }),
  403. success: (ret) => {
  404. _this.alertInfo("删除成功!")
  405. _this.getList()
  406. //处理成功逻辑
  407. },
  408. fail: (err) => {
  409. // console.log('request fail', err);
  410. },
  411. complete: () => {
  412. // console.log('complete');
  413. }
  414. })
  415. }
  416. // 关闭窗口后,恢复默认内容
  417. this.$refs.deleteDialog.close()
  418. }, 30)
  419. },
  420. dialogClose() {
  421. _this.getList();
  422. },
  423. Update(item) {
  424. this.sn = item["sn"]
  425. this.product_name = item["product_name"] + "当前重量为:" + item["weight"]
  426. this.$refs.inputDialog.open()
  427. },
  428. UpdateWeight(val) {
  429. setTimeout(() => {
  430. uni.hideLoading()
  431. if (parseFloat(val) <= 0) {
  432. modal.toast({
  433. message: msg,
  434. duration: 6
  435. });
  436. return
  437. } else {
  438. uni.request({
  439. url: reqRootUrl + '/wms/api',
  440. method: 'POST',
  441. headers: {
  442. 'Content-Type': 'application/json'
  443. },
  444. data: JSON.stringify({
  445. "method": "GroupDiskUpdate",
  446. "param": {
  447. [_this.sn]: {
  448. "weight": parseFloat(val)
  449. }
  450. }
  451. }),
  452. success: (ret) => {
  453. _this.alertInfo("更新成功!")
  454. _this.getList()
  455. //处理成功逻辑
  456. },
  457. fail: (err) => {
  458. // console.log('request fail', err);
  459. },
  460. complete: () => {
  461. // console.log('complete');
  462. }
  463. })
  464. }
  465. // 关闭窗口后,恢复默认内容
  466. this.$refs.inputDialog.close()
  467. }, 30)
  468. },
  469. getList() {
  470. _this.$forceUpdate()
  471. uni.request({
  472. url: reqRootUrl + '/wms/api',
  473. method: 'POST',
  474. headers: {
  475. 'Content-Type': 'application/json'
  476. },
  477. data: JSON.stringify({
  478. "method": "GroupDiskGet",
  479. "param": {
  480. "status": "status_wait",
  481. }
  482. }),
  483. success: (ret) => {
  484. //处理成功逻辑
  485. let rows = ret.data.data;
  486. if (rows != null) {
  487. rData = rows;
  488. _this.product_sn = rData[0]["product_sn"];
  489. _this.product_name = rData[0]["product_name"];
  490. _this.product_code = rData[0]["product_code"];
  491. this.tableData = rows;
  492. } else {
  493. rData = [];
  494. this.tableData = [];
  495. }
  496. },
  497. fail: (err) => {
  498. // console.log('request fail', err);
  499. },
  500. complete: () => {
  501. // console.log('complete');
  502. }
  503. })
  504. },
  505. groupDisk: function() {
  506. _this.firstFocus = false;
  507. if (_this.isEmpty(rData)) {
  508. _this.alertInfo("组盘失败,货物不能为空")
  509. return;
  510. }
  511. let str = _this.product_name;
  512. if (_this.isEmpty(_this.container_code)) {
  513. // 产品类别是铁桶的 不允许托盘码为空
  514. if (str.indexOf("铁桶") > -1) {
  515. _this.alertInfo("组盘失败,托盘码不能为空")
  516. return;
  517. }
  518. }
  519. setTimeout(() => {
  520. this.$refs.groupDialog.open()
  521. }, 30)
  522. },
  523. dialogGroup() {
  524. let sns = [];
  525. let productSn = rData[0]["product_sn"];
  526. if (rData.length > 1) {
  527. _this.alertInfo("组盘失败!只能添加一种产品")
  528. return
  529. }
  530. for (var i = 0; i < rData.length; i++) {
  531. if (rData[i]["status"] !== "status_wait") {
  532. continue
  533. }
  534. sns.push(rData[i].sn)
  535. }
  536. let str = _this.product_name;
  537. if (str.indexOf("木箱") > -1) {
  538. _this.container_code = ""
  539. }
  540. uni.request({
  541. url: reqRootUrl + '/wms/api',
  542. method: 'POST',
  543. headers: {
  544. 'Content-Type': 'application/json'
  545. },
  546. data: JSON.stringify({
  547. "method": "ReceiptAdd",
  548. "param": {
  549. "group_disk_sn_list": sns,
  550. "container_code": _this.container_code,
  551. "types": "normal",
  552. }
  553. }),
  554. success: (ret) => {
  555. this.$refs.groupDialog.close()
  556. if (ret.data.ret === "ok") {
  557. _this.alertInfo("组盘成功")
  558. _this.$nextTick(() => {
  559. _this.firstFocus = false;
  560. _this.firstFocus = true;
  561. _this.viewText = "";
  562. _this.container_code = "";
  563. })
  564. _this.$forceUpdate()
  565. // _this.AddOrder(ret.data.data["sn"])
  566. if (str.indexOf("木箱") > -1) {
  567. this.handlePrint(ret.data.data["receipt_num"])
  568. }
  569. _this.getList()
  570. uni.removeStorageSync("container_code")
  571. // _this.containerAdd()
  572. } else {
  573. _this.alertInfo("组盘失败!" + ret.data.msg)
  574. }
  575. },
  576. fail: (err) => {
  577. // console.log('request fail', err);
  578. },
  579. complete: () => {
  580. // console.log('complete');
  581. }
  582. })
  583. },
  584. in_stock: function(code) {
  585. setTimeout(() => {
  586. uni.navigateTo({
  587. url: '/pages/sample/in_stock',
  588. })
  589. }, 500);
  590. },
  591. isEmpty: function(obj) {
  592. return typeof obj === undefined || obj == null || obj === "" || obj === "000000000000000000000000" ||
  593. obj.length === 0;
  594. },
  595. alertInfo(str) {
  596. SpeechTTS.speak({
  597. text: str,
  598. });
  599. modal.toast({
  600. message: str,
  601. duration: 6,
  602. });
  603. },
  604. onNavigationBarButtonTap: function(e) {
  605. setTimeout(() => {
  606. uni.navigateTo({
  607. url: '/pages/sample/richAlert',
  608. })
  609. }, 500);
  610. },
  611. // 打印机相关
  612. ...mapActions([SET_CONNECTBLEDATA]),
  613. // 连接打印机
  614. confirm_bluetooth(item) {
  615. // let {
  616. // name,
  617. // mac
  618. // } = item;
  619. uni.showLoading({
  620. title: "连接中...",
  621. mask: true
  622. })
  623. let mac = item.mac;
  624. try {
  625. printModule.connectionBT({
  626. 'address': mac
  627. }, result => {
  628. // console.log("result ",result)
  629. const msg = JSON.stringify(result);
  630. this.result = JSON.parse(msg).result;
  631. modal.toast({
  632. message: msg,
  633. duration: 6
  634. });
  635. uni.hideLoading()
  636. printModule.setDisConnectBTListener((ret) => {
  637. modal.toast({
  638. message: '蓝牙断开',
  639. duration: 6
  640. });
  641. })
  642. })
  643. } catch (e) {
  644. console.log(e)
  645. }
  646. },
  647. //搜索没匹配的蓝牙设备
  648. search_bluetooth(address) {
  649. let _this = this;
  650. //检查蓝牙是否开启
  651. this.$check_bluetooth_open().then(ores => {
  652. if (ores) {
  653. console.log(ores);
  654. //搜索蓝牙
  655. _this.$search_bluetooth().then(bres => {
  656. console.log(bres);
  657. if (bres.code) {
  658. _this.$search_pipei().then(pres => {
  659. console.log(pres);
  660. })
  661. }
  662. })
  663. }
  664. })
  665. },
  666. handlePrint(code) {
  667. printModule.printAreaSize({
  668. 'height': '500',
  669. 'number': '1'
  670. }, result => {})
  671. printModule.printBarCode({
  672. 'x_pos': '10',
  673. 'y_pos': '100',
  674. 'code_type': '128',
  675. 'ratio': '1',
  676. 'height': '250',
  677. 'width': '3',
  678. 'rotation': 'BARCODE',
  679. 'undertext': true,
  680. 'number': '4',
  681. 'offset': '5',
  682. "textAlign": "right",
  683. 'code_data': code
  684. });
  685. printModule.printForm()
  686. printModule.print()
  687. },
  688. closeBT() {
  689. printModule.closeBT();
  690. },
  691. },
  692. }
  693. </script>
  694. <style scoped>
  695. .nvue-page-root {
  696. background-color: #F8F8F8;
  697. padding-bottom: 0px;
  698. }
  699. .uni-form-item__title {
  700. margin: 5px auto;
  701. }
  702. .uni-input-wrapper {
  703. /* #ifndef APP-NVUE */
  704. display: flex;
  705. /* #endif */
  706. flex-direction: row;
  707. flex-wrap: nowrap;
  708. background-color: #FFFFFF;
  709. }
  710. .uni-input {
  711. height: 28px;
  712. line-height: 28px;
  713. font-size: 15px;
  714. padding: 1px;
  715. flex: 1;
  716. border-radius: 5px;
  717. border: 1px solid #cfdadd;
  718. background-color: #FFFFFF;
  719. }
  720. .mini-btn {
  721. height: 30px;
  722. padding-left: 1px;
  723. padding-right: 1px;
  724. }
  725. .uni-eye-active {
  726. color: #007AFF;
  727. }
  728. .table-title {
  729. background-color: aliceblue;
  730. font-weight: 700;
  731. margin-top: 10px;
  732. height: 40px;
  733. }
  734. .table-data {
  735. background-color: aliceblue;
  736. font-weight: 700;
  737. margin-top: 1px;
  738. height: 40px;
  739. }
  740. .tab-tr {
  741. width: 25%;
  742. line-height: 50px;
  743. border-right: 1px solid #ccc;
  744. margin: auto;
  745. text-align: center;
  746. }
  747. .tab-tr-end {
  748. width: 25%;
  749. line-height: 50px;
  750. border-right: 0px solid #ccc;
  751. margin: auto;
  752. text-align: center;
  753. }
  754. </style>
  755. <style lang="scss">
  756. $color-base: #0039a6;
  757. $words-color-base: #333333;
  758. $words-color-light: #999999;
  759. .header-wrap {
  760. width: 100%;
  761. position: fixed;
  762. top: 0;
  763. z-index: 999;
  764. .index-header {
  765. height: 88upx;
  766. line-height: 88upx;
  767. padding: 0 30upx;
  768. padding-top: 40upx;
  769. background-color: $color-base;
  770. font-Size: 28upx;
  771. color: #fff;
  772. display: flex;
  773. align-items: center;
  774. justify-content: space-between;
  775. .fanhui {
  776. color: #fff !important;
  777. font-size: 28px;
  778. padding-top: 5px;
  779. font-weight: 700;
  780. }
  781. .lanya {
  782. color: #fff !important;
  783. font-size: 28px;
  784. padding-top: 5px;
  785. }
  786. .map-wrap {
  787. padding-top: 5px;
  788. }
  789. }
  790. }
  791. .blank {
  792. height: 126upx;
  793. }
  794. </style>