details.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. <template>
  2. <div class="page">
  3. <el-form label-width="150px">
  4. <div class="page-title">
  5. <div class="page-title-div">
  6. <el-page-header @back="$router.go(-1)" content="条码管理">
  7. </el-page-header>
  8. </div>
  9. </div>
  10. <!-- tab切换 -->
  11. <div class="switch">
  12. <div class="switch_left">
  13. <ul>
  14. <li :class="{ active: num == 1 }" @click="tab(1)">详情</li>
  15. </ul>
  16. </div>
  17. <div class="switch_right">
  18. <el-button @click="openPrint" size="small">打印</el-button>
  19. <el-button @click="edit" size="small">编辑</el-button>
  20. <el-button @click="$router.go(-1)" size="small">关闭</el-button>
  21. </div>
  22. </div>
  23. <div class="content-detail" v-show="num == 1">
  24. <div class="basic-details">
  25. <div class="basic-details-title">
  26. <span class="border-span">基本信息</span>
  27. </div>
  28. <el-row>
  29. <el-col :span="8">
  30. <el-form-item label="条码类型">
  31. <span>{{ data.dictBarName }}</span>
  32. </el-form-item>
  33. </el-col>
  34. <el-col :span="8">
  35. <el-form-item label="状态">
  36. <span v-if="data.status">生效</span>
  37. <span v-else>失效</span>
  38. </el-form-item>
  39. </el-col>
  40. <el-col :span="8">
  41. <el-form-item label="条码摆放类型">
  42. <span>
  43. {{ data.putType == 1 ? '横向摆放' : '纵向摆放' }}
  44. </span>
  45. </el-form-item>
  46. </el-col>
  47. <el-col :span="8">
  48. <el-form-item label="条码尺寸">
  49. <span> {{ data.sizeWide }} cm</span> *
  50. <span> {{ data.sizeLong }} cm</span>
  51. </el-form-item>
  52. </el-col>
  53. <el-col :span="8">
  54. <el-form-item label="创建人">
  55. <span v-if="data.createUserName">
  56. {{ data.createUserName }}
  57. </span>
  58. </el-form-item>
  59. </el-col>
  60. <el-col :span="8">
  61. <el-form-item label="创建时间">
  62. <span> {{ data.createTime }} </span>
  63. </el-form-item>
  64. </el-col>
  65. </el-row>
  66. <div class="basic-details-title">
  67. <span class="border-span">条码信息</span>
  68. </div>
  69. <el-table
  70. ref="singleTable"
  71. :data="barCodeList"
  72. border
  73. tooltip-effect="dark"
  74. style="width: 100%"
  75. class="el-table__body-wrapper"
  76. :header-cell-style="{ background: '#F0F3F3' }"
  77. :header-row-style="{ lineHeight: '0' }"
  78. >
  79. <el-table-column type="index" width="80px" label="序号">
  80. </el-table-column>
  81. <el-table-column label="字段code值" prop="modeCode">
  82. </el-table-column>
  83. <el-table-column label="字段名称" prop="modeName">
  84. </el-table-column>
  85. <el-table-column label="样例数据" prop="sampleData">
  86. </el-table-column>
  87. <el-table-column label="排序" prop="sort"> </el-table-column>
  88. <el-table-column label="分隔符" prop="separ"> </el-table-column>
  89. <el-table-column label="字体类型" prop="fontType">
  90. <template slot-scope="scope">
  91. <span>{{ codeTypeObj[scope.row.fontType] }}</span>
  92. </template>
  93. </el-table-column>
  94. <el-table-column label="字体大小" prop="fontSize">
  95. <template slot-scope="scope">
  96. <span>{{ codeIndexList[scope.row.fontSize] }}</span>
  97. </template>
  98. </el-table-column>
  99. </el-table>
  100. </div>
  101. </div>
  102. </el-form>
  103. <!-- 打印 -->
  104. <print :openBarCode.sync="openWindows" :config="config"></print>
  105. <!-- 编辑 -->
  106. <el-dialog
  107. class="edit-dialog"
  108. title="修改"
  109. :visible.sync="dialogVisible"
  110. width="80%"
  111. >
  112. <addComponent :viewForm="viewData" @edit="submit" />
  113. </el-dialog>
  114. </div>
  115. </template>
  116. <script>
  117. import barCode from '@/api/main/barCode';
  118. import { deepClone } from '@/utils/index';
  119. import selectUpload from '@/components/selectUpload';
  120. import codeLogo from '@/assets/img/codeLogo.png';
  121. import print from '@/components/print';
  122. import addComponent from './add.vue';
  123. import { mapSetArray } from '@/utils/common';
  124. export default {
  125. components: { selectUpload, print, addComponent },
  126. data() {
  127. return {
  128. num: 1,
  129. dialogVisible: false, //编辑弹窗
  130. data: {},
  131. typeValue: null,
  132. form: {},
  133. type: [],
  134. barCodeList: [], //条码信息列表
  135. openWindows: false, //打印弹窗
  136. config: {},
  137. viewData: {},
  138. codeIndexList: { 0.3: '小', 0.5: '中', 0.8: '大' },
  139. codeTypeList: [
  140. { id: 1, text: '宋体' },
  141. { id: 2, text: '微软雅黑' },
  142. { id: 3, text: 'Arial' }
  143. ],
  144. codeTypeObj: {
  145. 1: '宋体',
  146. 2: '微软雅黑',
  147. 3: 'Arial'
  148. }
  149. };
  150. },
  151. async created() {
  152. this.getInfo();
  153. },
  154. methods: {
  155. tab(index) {
  156. this.num = index;
  157. },
  158. // 表格数据
  159. async getInfo() {
  160. let res = await barCode.infoApi(this.$route.query.id);
  161. // if (res) {
  162. // console.log(res.data)
  163. // if (res.success) {
  164. this.data = res.data;
  165. // 排序code1 - code14
  166. let arr = res.data.useModeList.sort((a, b) => {
  167. return a.barAvg.substr(4) - b.barAvg.substr(4);
  168. });
  169. console.log(arr);
  170. let newArr = [];
  171. arr.forEach((item) => {
  172. if (item.modeCode) {
  173. newArr.push(item);
  174. }
  175. });
  176. this.barCodeList = mapSetArray(newArr, 'modeCode');
  177. // 将表格数据按 modeCode 去重
  178. // console.log(this.barCodeList)
  179. // this.config = {
  180. // imagePath: codeLogo,
  181. // put_type: res.data.put_type,
  182. // width:
  183. // res.data.put_type == 0
  184. // ? res.data.size_wide * 25
  185. // : res.data.size_wide * 8,
  186. // height:
  187. // res.data.put_type == 0
  188. // ? res.data.size_long * 25
  189. // : res.data.size_long * 8,
  190. // value: res.data.qrCode,
  191. // code1: res.data.stripcodeset.code1,
  192. // code2: res.data.stripcodeset.code2,
  193. // code3: res.data.stripcodeset.code3,
  194. // code4: res.data.stripcodeset.code4,
  195. // code5: res.data.stripcodeset.code5,
  196. // code6: res.data.stripcodeset.code6,
  197. // code7: res.data.stripcodeset.code7,
  198. // code8: res.data.stripcodeset.code8,
  199. // code9: res.data.stripcodeset.code9,
  200. // code10: res.data.stripcodeset.code10,
  201. // code11: res.data.stripcodeset.code11,
  202. // code12: res.data.stripcodeset.code12,
  203. // code13: res.data.stripcodeset.code13,
  204. // code14: res.data.stripcodeset.code14,
  205. // fontSizeCode1: res.data.stripcodeset.fontSizeCode1,
  206. // fontSizeCode2: res.data.stripcodeset.fontSizeCode2,
  207. // fontSizeCode3: res.data.stripcodeset.fontSizeCode3,
  208. // fontSizeCode4: res.data.stripcodeset.fontSizeCode4,
  209. // fontSizeCode5: res.data.stripcodeset.fontSizeCode5,
  210. // fontSizeCode6: res.data.stripcodeset.fontSizeCode6,
  211. // fontSizeCode7: res.data.stripcodeset.fontSizeCode7,
  212. // fontSizeCode8: res.data.stripcodeset.fontSizeCode8,
  213. // fontSizeCode9: res.data.stripcodeset.fontSizeCode9,
  214. // fontSizeCode10: res.data.stripcodeset.fontSizeCode10,
  215. // fontSizeCode11: res.data.stripcodeset.fontSizeCode11,
  216. // fontSizeCode12: res.data.stripcodeset.fontSizeCode12,
  217. // fontSizeCode13: res.data.stripcodeset.fontSizeCode13,
  218. // fontSizeCode14: res.data.stripcodeset.fontSizeCode14,
  219. // typefaceCode1: res.data.stripcodeset.typefaceCode1,
  220. // typefaceCode2: res.data.stripcodeset.typefaceCode2,
  221. // typefaceCode3: res.data.stripcodeset.typefaceCode3,
  222. // typefaceCode4: res.data.stripcodeset.typefaceCode4,
  223. // typefaceCode5: res.data.stripcodeset.typefaceCode5,
  224. // typefaceCode6: res.data.stripcodeset.typefaceCode6,
  225. // typefaceCode7: res.data.stripcodeset.typefaceCode7,
  226. // typefaceCode8: res.data.stripcodeset.typefaceCode8,
  227. // typefaceCode9: res.data.stripcodeset.typefaceCode9,
  228. // typefaceCode10: res.data.stripcodeset.typefaceCode10,
  229. // typefaceCode11: res.data.stripcodeset.typefaceCode11,
  230. // typefaceCode12: res.data.stripcodeset.typefaceCode12,
  231. // typefaceCode13: res.data.stripcodeset.typefaceCode13,
  232. // typefaceCode14: res.data.stripcodeset.typefaceCode14
  233. // }
  234. // }
  235. // }
  236. },
  237. //打印弹窗
  238. openPrint() {
  239. this.openWindows = true;
  240. console.log(this.config);
  241. },
  242. //编辑弹窗
  243. edit() {
  244. this.viewData = deepClone(this.data);
  245. this.dialogVisible = true;
  246. },
  247. // 修改提交
  248. submit(info) {
  249. let res = barCode.saveBarcode(info);
  250. if (res.success) {
  251. this.$message.success('修改成功!');
  252. this.getInfo();
  253. this.dialogVisible = false;
  254. }
  255. }
  256. }
  257. };
  258. </script>
  259. <style lang="scss" scoped>
  260. .page {
  261. padding: 10px;
  262. }
  263. .page-title {
  264. background: #fff;
  265. font-size: 18px;
  266. padding: 6px 20px;
  267. font-weight: 500;
  268. .page-title-div {
  269. margin: 5px 0;
  270. height: 30px;
  271. line-height: 30px;
  272. border-bottom: 1px solid #eaeefb;
  273. .title-div-no {
  274. margin-left: 10px;
  275. font-weight: 400;
  276. color: #909090;
  277. font-size: 14px;
  278. }
  279. }
  280. }
  281. .page-data {
  282. padding-top: 10px;
  283. }
  284. .content-detail {
  285. background: #fff;
  286. padding: 20px;
  287. }
  288. .flows {
  289. .flow-left {
  290. width: 156px;
  291. height: 70px;
  292. border: 1px dashed #ccc;
  293. padding: 10px;
  294. }
  295. .row {
  296. margin-top: 13px;
  297. }
  298. }
  299. .basic-details-title {
  300. margin-bottom: 12px;
  301. margin-top: 20px;
  302. border-bottom: 1px solid #157a2c;
  303. padding-bottom: 8px;
  304. display: flex;
  305. justify-content: space-between;
  306. }
  307. .basic-details-title .border-span {
  308. height: 18px;
  309. font-size: 16px;
  310. border-left: 4px solid #157a2c;
  311. padding-left: 8px;
  312. font-weight: 500;
  313. }
  314. .heade-right {
  315. // float: right;
  316. .heade-right-content {
  317. margin-right: 12px;
  318. font-size: 14px;
  319. display: inline-block;
  320. .content-key {
  321. color: #3e3e3e;
  322. margin-right: 12px;
  323. font-weight: 500;
  324. }
  325. .content-value {
  326. color: #000;
  327. }
  328. }
  329. }
  330. .list-title {
  331. font-size: 14px;
  332. color: #3e3e3e;
  333. margin: 10px 0px;
  334. }
  335. .goods {
  336. background: #a30014;
  337. border: 1px solid #a30014;
  338. }
  339. .details-title {
  340. display: inline-block;
  341. color: #6e6e6e;
  342. font-size: 14px;
  343. font-weight: bold;
  344. margin-right: 13px;
  345. width: 70px;
  346. text-align: right;
  347. }
  348. .details-con {
  349. color: #3e3e3e;
  350. font-size: 14px;
  351. }
  352. .detailed-tab {
  353. margin-left: 10px;
  354. margin-top: 10px;
  355. }
  356. ::v-deep .el-form-item--medium .el-form-item__label {
  357. color: #6e6e6e;
  358. font-size: 14px;
  359. font-weight: bold;
  360. }
  361. .warehouse {
  362. display: block;
  363. border-bottom: 1px solid #eaeefb;
  364. padding: 10px 0;
  365. }
  366. .box-card {
  367. .store-box {
  368. width: 80%;
  369. .store-box-span {
  370. display: inline-block;
  371. font-size: 14px;
  372. height: 50px;
  373. width: 50px;
  374. text-align: center;
  375. line-height: 50px;
  376. color: #fff;
  377. margin: 2px;
  378. }
  379. }
  380. }
  381. .vacant {
  382. background: #3196fb;
  383. }
  384. .inUse {
  385. background: #157a2c;
  386. }
  387. .invalid {
  388. background: #cccccc;
  389. }
  390. .full {
  391. background: #cc3300;
  392. }
  393. </style>