print-order.vue 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398
  1. <template>
  2. <div class="mod-order-order">
  3. <div class="search-bar">
  4. <el-form
  5. :inline="true"
  6. :model="dataForm"
  7. @keyup.enter.native="getDataList(this.page)"
  8. size="small">
  9. <div class="input-row">
  10. <el-form-item :label="this.$i18n.t('order.number') + ':'" :label-width=" lang === 'en' ? '145px' : '85px'">
  11. <el-input
  12. v-model="dataForm.orderNumber"
  13. :placeholder="this.$i18n.t('order.number')"
  14. clearable
  15. size="small"
  16. ></el-input>
  17. </el-form-item>
  18. <el-form-item label="三方单号" :label-width=" lang === 'en' ? '145px' : '85px'">
  19. <el-input
  20. v-model="dataForm.orderNo"
  21. placeholder="请输入三方单号"
  22. clearable
  23. size="small"
  24. ></el-input>
  25. </el-form-item>
  26. <el-form-item label="订单状态" :label-width=" lang === 'en' ? '145px' : '85px'">
  27. <el-select
  28. v-model="dataForm.status"
  29. clearable
  30. placeholder="请选择订单状态"
  31. size="small"
  32. @change="orderStatus">
  33. <el-option
  34. v-for="item in options"
  35. :key="item.value"
  36. :label="item.label"
  37. :value="item.value"
  38. ></el-option>
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item label="产品名称" :label-width=" lang === 'en' ? '145px' : '85px'">
  42. <template>
  43. <el-select
  44. v-model="dataForm.prodName"
  45. size="small"
  46. clearable
  47. placeholder="产品名称">
  48. <el-option key="yjxk" label="圆角小卡" value="圆角小卡"></el-option>
  49. <el-option key="zjxk" label="直角小卡" value="直角小卡"></el-option>
  50. <el-option key="egg" label="二宫格" value="二宫格"></el-option>
  51. <el-option key="pld" label="拍立得" value="拍立得"></el-option>
  52. <el-option key="zpfm" label="直拍封面" value="直拍封面"></el-option>
  53. <el-option key="sq" label="书签" value="书签"></el-option>
  54. <el-option key="mxp" label="明信片" value="明信片"></el-option>
  55. <el-option key="fk" label="方卡" value="方卡"></el-option>
  56. <el-option key="hz" label="徽章" value="徽章"></el-option>
  57. <el-option key="sf" label="手幅" value="手幅"></el-option>
  58. </el-select>
  59. </template>
  60. </el-form-item>
  61. <el-form-item label="覆膜工艺" :label-width=" lang === 'en' ? '145px' : '85px'">
  62. <template>
  63. <el-select
  64. v-model="dataForm.skuName"
  65. size="small"
  66. clearable
  67. placeholder="覆膜工艺">
  68. <el-option key="lm" label="镜面膜" value="镜面"></el-option>
  69. <el-option key="ym" label="哑膜" value="哑膜"></el-option>
  70. <el-option key="ls" label="镭射" value="镭射"></el-option>
  71. <el-option key="mtx" label="满天星" value="满天星"></el-option>
  72. <el-option key="axm" label="爱心膜" value="爱心膜"></el-option>
  73. <!-- <el-option key="bls" label="玻璃碎" value="玻璃碎"></el-option>-->
  74. <!-- <el-option key="zgz" label="珠光" value="珠光"></el-option>-->
  75. <el-option key="xx" label="星星" value="星星"></el-option>
  76. <el-option key="szxs" label="十字星闪" value="十字星闪"></el-option>
  77. <el-option key="wjx" label="五角旗星" value="五角旗星"></el-option>
  78. <el-option key="yhm" label="烟花膜" value="烟花膜"></el-option>
  79. </el-select>
  80. </template>
  81. </el-form-item>
  82. <el-form-item :label="this.$i18n.t('order.theRecipientSName') + ':'" :label-width=" lang === 'en' ? '145px' : '100px'">
  83. <el-input
  84. v-model="dataForm.receiverName"
  85. :placeholder="this.$i18n.t('order.pleaseEnRecipName')"
  86. clearable
  87. size="small"
  88. ></el-input>
  89. </el-form-item>
  90. <el-form-item label="运单号:" :label-width=" lang === 'en' ? '145px' : '85px'">
  91. <el-input
  92. v-model="dataForm.deliveryNo"
  93. placeholder="运单号"
  94. clearable
  95. size="small"></el-input>
  96. </el-form-item>
  97. <el-form-item :label="this.$i18n.t('shop.contactTel') + ':'" :label-width=" lang === 'en' ? '145px' : '85px'">
  98. <el-input
  99. v-model="dataForm.receiverMobile"
  100. :placeholder="this.$i18n.t('order.pleaseEnterNumber')"
  101. clearable
  102. size="small"
  103. ></el-input>
  104. </el-form-item>
  105. <el-form-item label="客服备注" :label-width=" lang === 'en' ? '145px' : '85px'">
  106. <el-input
  107. v-model="dataForm.remark"
  108. placeholder="客服备注"
  109. clearable
  110. size="small"
  111. ></el-input>
  112. </el-form-item>
  113. <el-form-item label="是否合单" :label-width=" lang === 'en' ? '145px' : '85px'">
  114. <template>
  115. <el-select
  116. v-model="dataForm.isMerge"
  117. clearable
  118. size="small">
  119. <el-option key="1" label="否" value="1"></el-option>
  120. <el-option key="2" label="是" value="2"></el-option>
  121. </el-select>
  122. </template>
  123. </el-form-item>
  124. <el-form-item label="张数:" :label-width=" lang === 'en' ? '145px' : '85px'">
  125. <InputNumberRange v-model="productNumsRange"></InputNumberRange>
  126. </el-form-item>
  127. <el-form-item :label="this.$i18n.t('order.createTime') + ':' " :label-width=" lang === 'en' ? '145px' : '85px'">
  128. <el-date-picker
  129. size="small"
  130. v-model="dateRange"
  131. type="datetimerange"
  132. :default-time="['00:00:00', '23:59:59']"
  133. :range-separator="this.$i18n.t('time.tip')"
  134. value-format="yyyy-MM-dd HH:mm:ss"
  135. :start-placeholder="this.$i18n.t('time.start')"
  136. :end-placeholder="this.$i18n.t('time.end')"
  137. ></el-date-picker
  138. >
  139. </el-form-item>
  140. <el-form-item>
  141. <div v-for="(item, index) in numList" class="default-btn" style="margin-left: 1px;font-size: 15px;" :class="{ 'is-active': numActive === index }"
  142. @click="setNumRange(index)">{{item}}</div>
  143. </el-form-item>
  144. <el-form-item>
  145. <div class="default-btn" :class="{ 'is-active': timeActive === 1 }" @click="setDateRange(1)">{{
  146. $t("time.t")
  147. }}</div>
  148. <div class="default-btn" :class="{ 'is-active': timeActive === 2 }" @click="setDateRange(2)">{{
  149. $t("time.y")
  150. }}</div>
  151. <div class="default-btn" :class="{ 'is-active': timeActive === 3 }" @click="setDateRange(3)">{{
  152. $t("time.n")
  153. }}</div>
  154. <div class="default-btn" :class="{ 'is-active': timeActive === 4 }" @click="setDateRange(4)">{{
  155. $t("temp.m")
  156. }}</div>
  157. <div class="default-btn primary-btn" @click="searchChange(true)">{{ $t("order.query") }}</div>
  158. <div class="default-btn" @click="clear()">{{ $t("shop.resetMap") }}</div>
  159. </el-form-item>
  160. </div>
  161. </el-form>
  162. </div>
  163. <div class="main">
  164. <div class="content">
  165. <div style="margin-bottom: 20px">
  166. <el-checkbox @change="checked=>handleSelectAll(checked)" class="all-check-btn" v-model="selectAll">全选 </el-checkbox>
  167. <span v-if="dataListSelections.size" class="had-selected">已选 {{dataListSelections.size}}</span>
  168. <span v-if="dataListSelections.size" class="had-selected" style="font-weight: bold;color: red;font-size: 20px"> {{selectSheets}}张</span>
  169. <el-button size="small" type="primary" icon="el-icon-plus" @click="openGenerateWaveDialog">生成波次</el-button>
  170. <el-button size="small" icon="el-icon-upload2" @click="openAddToWaveDialog">添加已有波次</el-button>
  171. <!-- <el-button size="small" type="success" @click="checkAndAutoCreateWave">自动生成波次</el-button>-->
  172. </div>
  173. <!-- 列标题 -->
  174. <div :class="['tit', showHeadScroll ? 'fixed-top' : '']">
  175. <el-row style="width: 100%">
  176. <el-col :span="7" id="prod-info-title">
  177. <span class="item product">订单信息</span>
  178. </el-col>
  179. <el-col :span="4" class="column-title">
  180. <span class="item">产品材质</span>
  181. </el-col>
  182. <el-col :span="2" class="column-title">
  183. <span class="item">张数</span>
  184. </el-col>
  185. <el-col :span="1" class="column-title">
  186. <span class="item">合单</span>
  187. </el-col>
  188. <el-col :span="3" class="column-title">
  189. <span class="item">买家/收货人</span>
  190. </el-col>
  191. <el-col :span="2" class="column-title">
  192. <span class="item">订单状态</span>
  193. </el-col>
  194. <el-col :span="2" class="column-title">
  195. <span class="item">客服备注</span>
  196. </el-col>
  197. <el-col :span="3" class="column-title">
  198. <span class="item">{{ $t("publics.operating") }}</span>
  199. </el-col>
  200. </el-row>
  201. </div>
  202. <div
  203. class="prod"
  204. v-for="(order, index) in dataList"
  205. :key="order.printOrderId">
  206. <div class="prod-tit">
  207. <el-checkbox v-model="order.checkStatus" :ref="'checkbox' + index" @change="checked=>handleSelectionChange(checked, order)"></el-checkbox>
  208. <span class="order-number">{{ $t("order.number") }}:{{ order.orderNumber }}</span>
  209. <span class="order-time">用户下单时间:{{ order.orderTime }}</span>
  210. <span class="order-time">推送时间:{{ order.createTime }}</span>
  211. <span class="order-time">运单号:{{ order.deliveryNo }}</span>
  212. <el-tag effect="dark" v-if="order.isPromotion === 1" type="danger">优先</el-tag>
  213. </div>
  214. <div class="prod-cont">
  215. <el-row style="width: 100%">
  216. <el-col :span="7" style="height: 100%">
  217. <div class="item prod-item">
  218. <!-- 订单信息 -->
  219. <div class=" items name">
  220. <div class="order-prod-item-info">
  221. <div class="info">
  222. <div class="prod-image">
  223. <prod-pic
  224. height="60"
  225. width="60"
  226. :pic="order.pic"
  227. ></prod-pic>
  228. </div>
  229. <div class="prod-name">
  230. <div class="prod-con">
  231. <div class="prod-name-txt">
  232. {{ order.prodName }}
  233. </div>
  234. <div class="order-status" v-if="order.waveNo" style="cursor: pointer" @click="jumpToWave(order.orderNumber, order.waveId)">
  235. 所属波次号: {{order.waveNo}}
  236. </div>
  237. </div>
  238. </div>
  239. </div>
  240. </div>
  241. </div>
  242. </div>
  243. </el-col>
  244. <el-col :span="4" style="height: 100%">
  245. <div class="item prod-item">
  246. <span>{{order.prodName}}</span>
  247. <!--<el-tooltip placement="top">
  248. <div
  249. slot="content"
  250. style="font-size: 8px"
  251. v-for="orderItem in order.orderItemList"
  252. :key="orderItem.orderItemId">
  253. <div>{{orderItem.prodName}}</div>
  254. </div>
  255. <span v-if="order.orderItemList.length > 1">{{order.orderItemList[0].prodName}} <br/>......</span>
  256. <span v-else>{{order.orderItemList[0].prodName}}</span>
  257. </el-tooltip>-->
  258. </div>
  259. </el-col>
  260. <!-- 张数 -->
  261. <el-col :span="2" style="height: 100%">
  262. <div class="item">
  263. <span style="font-size: 24px; color: red">{{order.prodNums}} 张</span>
  264. </div>
  265. </el-col>
  266. <!-- 是否合单 -->
  267. <el-col :span="1" style="height: 100%">
  268. <div class="item">
  269. <el-tag type="info" effect="dark" v-if="order.isMerge == 1">否</el-tag>
  270. <el-tag type="danger" effect="dark" v-if="order.isMerge == 2">是</el-tag>
  271. </div>
  272. </el-col>
  273. <!-- 买家信息 -->
  274. <el-col :span="3" style="height: 100%">
  275. <div class="item">
  276. <div class="buyer-info">
  277. <div>
  278. <el-tooltip placement="top">
  279. <div slot="content" style="font-size: 8px">
  280. <span>{{order.userAddrOrder.province }}</span>
  281. <span>{{order.userAddrOrder.city }}</span>
  282. <span>{{order.userAddrOrder.area }}</span>
  283. <span>{{order.userAddrOrder.street }}</span>
  284. <span>{{order.userAddrOrder.addr }}</span>
  285. </div>
  286. <div>
  287. <span>{{order.userAddrOrder.receiver }}</span>
  288. <br/>
  289. <span>{{order.userAddrOrder.mobile }}</span>
  290. </div>
  291. </el-tooltip>
  292. </div>
  293. <!--<div class="buyer-name">{{ order.receiverName }}</div>
  294. <div class="buyer-phone">{{ order.receiverMobile }}</div>-->
  295. </div>
  296. </div>
  297. </el-col>
  298. <!-- 订单状态 -->
  299. <el-col :span="2" style="height: 100%">
  300. <div class="item">
  301. <span>
  302. <el-tag
  303. v-if="order.status === 1"
  304. type="primary"
  305. >待打印</el-tag
  306. >
  307. <el-tag
  308. v-else-if="order.status === 2"
  309. type="danger"
  310. >待发货</el-tag
  311. >
  312. <el-tag
  313. v-else-if="order.status === 3"
  314. type="success"
  315. >已发货</el-tag>
  316. <el-tag
  317. v-else-if="order.status === 4"
  318. type="warning"
  319. >异常</el-tag>
  320. <el-tag
  321. v-else-if="order.status === 11"
  322. type="info"
  323. >已取消</el-tag>
  324. </span>
  325. </div>
  326. </el-col>
  327. <el-col :span="2" style="height: 100%">
  328. <div class="item">
  329. <el-tooltip placement="top" v-if="order.remark">
  330. <div slot="content" style="font-size: 16px">
  331. <span>{{ order.remark }}</span>
  332. </div>
  333. <div>
  334. <div class="buyer-name" style="color:red;overflow: hidden; width: 100px; text-overflow:ellipsis">{{ order.remark }}</div>
  335. </div>
  336. </el-tooltip>
  337. <span v-else>暂无备注</span>
  338. </div>
  339. </el-col>
  340. <el-col :span="3" style="height: 100%">
  341. <div class="item">
  342. <div class="operate">
  343. <div
  344. class="default-btn text-btn operate-btn"
  345. @click="openPrintOrderDialog(order.orderNumber)">详情</div>
  346. <div
  347. class="default-btn text-btn operate-btn"
  348. @click="updateStatus(order, 4)"
  349. v-if="order.status === 1">标记异常</div>
  350. <div
  351. class="default-btn text-btn operate-btn"
  352. @click="updateStatus(order, 1)"
  353. v-if="order.status === 4">标记正常</div>
  354. <div
  355. class="default-btn text-btn operate-btn"
  356. @click="updateStatus(order, 11)">取消订单
  357. </div>
  358. </div>
  359. </div>
  360. </el-col>
  361. </el-row>
  362. </div>
  363. </div>
  364. <div class="empty" v-if="!dataList.length">
  365. {{ $t("order.noData") }}
  366. </div>
  367. </div>
  368. </div>
  369. <el-pagination
  370. ref="orderListTable"
  371. v-if="dataList.length"
  372. @size-change="sizeChangeHandle"
  373. @current-change="currentChangeHandle"
  374. :current-page="page.currentPage"
  375. :page-sizes="[10, 20, 50, 100]"
  376. :page-size="page.pageSize"
  377. :total="page.total"
  378. layout="total, sizes, prev, pager, next, jumper"
  379. ></el-pagination>
  380. <!-- 生成波次弹窗 -->
  381. <el-dialog
  382. title="生成波次"
  383. :visible.sync="generateWaveDialogVisible"
  384. width="40%"
  385. center
  386. :close-on-click-modal="false"
  387. :close-on-press-escape="false"
  388. >
  389. <el-form :model="wave">
  390. <el-form-item label="波次号" label-width="100px">
  391. <span autocomplete="off">{{wave.waveNo}}</span>
  392. </el-form-item>
  393. <el-form-item label="备注名" label-width="100px">
  394. <el-input v-model="wave.waveName" autocomplete="off"></el-input>
  395. </el-form-item>
  396. <el-form-item label="订单数" label-width="100px">
  397. <span autocomplete="off">{{dataListSelections.size}}</span>
  398. </el-form-item>
  399. </el-form>
  400. <div slot="footer" class="dialog-footer">
  401. <el-button type="primary" @click="createWave">生 成</el-button>
  402. </div>
  403. </el-dialog>
  404. <!-- 添加到已有波次弹窗 -->
  405. <el-dialog
  406. title="添加到已有波次"
  407. :visible.sync="addToWaveDialogVisible"
  408. width="40%"
  409. center
  410. :close-on-click-modal="false"
  411. :close-on-press-escape="false"
  412. @close="handleAddToWaveDialogClose"
  413. >
  414. <el-form :model="wave">
  415. <el-form-item label="波次" label-width="100px">
  416. <el-select v-model="wave.selectWaveId" clearable placeholder="请选择波次" @change="handleWaveChange" style="width: 300px">
  417. <el-option-group
  418. label="波次号|备注名">
  419. <el-option
  420. v-for="(item, index) in wave.latestWaveList"
  421. :key="item.waveId"
  422. :label="item.waveNo + '|' + item.waveName"
  423. :value="item.waveId">
  424. </el-option>
  425. </el-option-group>
  426. </el-select>
  427. </el-form-item>
  428. <el-form-item label="原订单数" label-width="100px">
  429. <span autocomplete="off">{{wave.orderNum}}</span>
  430. </el-form-item>
  431. <el-form-item label="添加数" label-width="100px">
  432. <span autocomplete="off">{{dataListSelections.size}}</span>
  433. </el-form-item>
  434. </el-form>
  435. <div slot="footer" class="dialog-footer">
  436. <el-button type="primary" @click="addToWave">添 加</el-button>
  437. </div>
  438. </el-dialog>
  439. <!-- 订单详情 -->
  440. <print-order-info ref="printOrderInfo" v-if="printOrderDialogVisible" @printOrderClose="printOrderClose"></print-order-info>
  441. <!-- 波次订单 -->
  442. <wave-print-order ref="wavePrintOrder"></wave-print-order>
  443. </div>
  444. </template>
  445. <script>
  446. import ProdPic from '@/components/prod-pic'
  447. import InputNumberRange from '@/components/input-number-range';
  448. import PrintOrderInfo from './print-order-info';
  449. import WavePrintOrder from './wave-print-order';
  450. import moment from 'moment'
  451. export default {
  452. data () {
  453. return {
  454. // 是否全选
  455. selectAll: false,
  456. showHeadScroll: false, // 修改物流相关
  457. logVisible: false,
  458. radio: '1',
  459. logisticsInfo: [], // 包裹列表
  460. logDataForm: {
  461. dvyId: '', // 当前物流公司id
  462. dvyFlowId: '', // 物流单号
  463. dvyNames: [] // 物流公司列表
  464. },
  465. uploadVisible: false,
  466. lang: localStorage.getItem('lang'),
  467. errorNum: 0,
  468. // 确认修改弹窗
  469. isReviseLog: true, // 是否正在修改物流信息
  470. confirmList: [], // 确认修改信息
  471. dataForm: {status:1},
  472. sts: 0,
  473. dateRange: [],
  474. productNumsRange:[],
  475. status: null,
  476. options: [
  477. {
  478. value: 1,
  479. label: "待打印"
  480. },
  481. {
  482. value: 2,
  483. label: "待发货"
  484. },
  485. {
  486. value: 3,
  487. label: "已发货"
  488. },
  489. {
  490. value: 4,
  491. label: "异常"
  492. },
  493. {
  494. value: 11,
  495. label: "已取消"
  496. },
  497. ],
  498. refund: [
  499. {
  500. value: 0,
  501. label: this.$i18n.t('order.noAfterSales')},
  502. {
  503. value: 1,
  504. label: this.$i18n.t('order.requestARefund')
  505. },
  506. {
  507. value: 2,
  508. label: this.$i18n.t('order.refundsuccessfully')
  509. },
  510. {
  511. value: 3,
  512. label: this.$i18n.t('order.partialRefundSucc')
  513. },
  514. {
  515. value: 4,
  516. label: this.$i18n.t('order.refundFailed')
  517. }],
  518. resourcesUrl: process.env.VUE_APP_RESOURCES_URL,
  519. dataList: [],
  520. page: {
  521. total: 0, // 总页数
  522. currentPage: 1, // 当前页数
  523. pageSize: 50 // 每页显示多少条
  524. },
  525. numList: [10, 20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,'更多'],
  526. dataListLoading: false,
  527. dataListSelections: new Set(),
  528. selectSheets: 0,
  529. generateWaveDialogVisible: false,
  530. timeActive: null,
  531. numActive: null,
  532. priceWidth: '109px',
  533. infoWidth: '400px',
  534. orderCreateBatchVisible: false,
  535. orderCreateBatchLoading: false,
  536. wavePrintOrderVisible: false,
  537. newWaveNo: null,
  538. wave:{
  539. waveNo:null,
  540. waveName:null,
  541. orderNumberList: null,
  542. latestWaveList: null,
  543. selectWaveId: null,
  544. orderNum: 0,
  545. sheets:0
  546. },
  547. printChannel: "KuaiYin",
  548. addToWaveDialogVisible: false,
  549. printOrderDialogVisible: false
  550. }
  551. },
  552. components: {
  553. ProdPic,
  554. InputNumberRange,
  555. PrintOrderInfo,
  556. WavePrintOrder
  557. },
  558. computed: {
  559. // 二级菜单折叠状态
  560. sidebarFold: {
  561. get () { return this.$store.state.common.sidebarFold },
  562. set (val) { this.$store.commit('common/updateSidebarFold', val) }
  563. }
  564. },
  565. created () {
  566. // 携带参数查询
  567. this.getDataList(this.page, this.$route.query)
  568. // // 请求物流公司
  569. // this.getLogisticsList()
  570. },
  571. activated () {
  572. // 携带参数查询
  573. var query = this.$route.query
  574. if (Object.keys(query).length > 0) {
  575. this.getDataList(this.page, query)
  576. }
  577. },
  578. mounted () {
  579. // 监听页面滚动
  580. // window.addEventListener('scroll', this.scrollToTop)
  581. },
  582. watch: {
  583. },
  584. methods: {
  585. printOrderClose(){
  586. this.printOrderDialogVisible = false;
  587. },
  588. wavePrintOrderClose(){
  589. this.wavePrintOrderVisible = false;
  590. },
  591. jumpToWave(orderNumber, waveId){
  592. this.$refs.wavePrintOrder.openAndQueryPrintOrder({orderNumber: orderNumber, waveId: waveId})
  593. },
  594. openPrintOrderDialog(orderNumber){
  595. this.printOrderDialogVisible = true;
  596. this.$nextTick(() => {
  597. this.$refs.printOrderInfo.init({
  598. orderNumber: orderNumber,
  599. })
  600. });
  601. },
  602. openGenerateWaveDialog(){
  603. if(this.dataListSelections.size === 0){
  604. this.$message.error("请至少选择一个订单");
  605. return ;
  606. }
  607. this.$http({
  608. url: this.$http.adornUrl(`/wave/wave/getLatestWaveNo`),
  609. method: 'GET',
  610. params: this.$http.adornParams({printChannel:this.printChannel})
  611. }).then(({data}) => {
  612. if(data.status == "success"){
  613. this.generateWaveDialogVisible = true;
  614. this.wave.waveNo = data.result;
  615. }
  616. })
  617. },
  618. openAddToWaveDialog(){
  619. if(this.dataListSelections.size === 0){
  620. this.$message.error("请至少选择一个订单");
  621. return ;
  622. }
  623. this.$http({
  624. url: this.$http.adornUrl(`/wave/wave/getLatestWave`),
  625. method: 'GET',
  626. params: this.$http.adornParams({printChannel:this.printChannel, queryLimit: 30})
  627. }).then(({data}) => {
  628. if(data.status == "success"){
  629. this.addToWaveDialogVisible = true;
  630. this.wave.latestWaveList = data.result;
  631. }
  632. })
  633. },
  634. checkAndAutoCreateWave(){
  635. this.$confirm('确定要自动生成波次吗?', '提示', {
  636. confirmButtonText: '确定',
  637. cancelButtonText: '取消',
  638. type: 'warning'
  639. }).then(() => {
  640. this.$http({
  641. url: this.$http.adornUrl(`/wave/wave/checkAndAutoCreateWave`),
  642. method: 'POST',
  643. data: this.$http.adornData()
  644. }).then(({data}) => {
  645. if(data){
  646. this.$message({
  647. type: "success",
  648. message: "波次生成成功"
  649. })
  650. }else{
  651. this.$message({
  652. type: "warning",
  653. message: "无波次生成"
  654. })
  655. }
  656. }).catch(() => {
  657. this.$message({
  658. type: "error",
  659. message: "波次生成失败"
  660. })
  661. })
  662. });
  663. },
  664. handleWaveChange(val){
  665. this.wave.latestWaveList.forEach(item =>{
  666. if(item.waveId == val){
  667. this.wave.orderNum = item.orderNum;
  668. return;
  669. }
  670. })
  671. },
  672. handleAddToWaveDialogClose(){
  673. this.wave.selectWaveId = null;
  674. this.wave.orderNum = 0;
  675. },
  676. updateStatus(row, status){
  677. this.$http({
  678. url: this.$http.adornUrl(`/printOrder/printOrder/updateStatus`),
  679. method: 'POST',
  680. data: this.$http.adornData({printOrderId: row.printOrderId, status: status})
  681. }).then(({data}) => {
  682. if(data){
  683. this.$message({
  684. message: "标记成功",
  685. type: 'success'
  686. })
  687. this.getDataList(this.page, null, false);
  688. }else{
  689. this.$message({
  690. message: "标记失败",
  691. type: 'error'
  692. })
  693. }
  694. })
  695. },
  696. createWave(){
  697. let dataBody = {waveName: this.wave.waveName, "orderNumberList": [...this.dataListSelections], "printChannel": this.printChannel};
  698. this.$http({
  699. url: this.$http.adornUrl(`/wave/wave/create`),
  700. method: 'POST',
  701. data: this.$http.adornData(dataBody)
  702. }).then(({data}) => {
  703. if(data){
  704. this.generateWaveDialogVisible = false;
  705. this.$message({
  706. message: "生成波次成功",
  707. type: 'success'
  708. })
  709. this.getDataList(this.page);
  710. let it = this;
  711. this.dataList.forEach((item, index) => {
  712. it.$set(item,'checkStatus',false)
  713. it.dataListSelections.delete(item.orderNumber);
  714. it.selectAll = false;
  715. })
  716. }else{
  717. this.$message({
  718. message: "生成波次失败",
  719. type: 'error'
  720. })
  721. }
  722. })
  723. },
  724. addToWave(){
  725. if(!this.wave.selectWaveId){
  726. this.$message({
  727. message: "请选择波次",
  728. type: 'error'
  729. })
  730. return;
  731. }
  732. let dataBody = {waveId: this.wave.selectWaveId, "orderNumberList": [...this.dataListSelections], "printChannel": this.printChannel};
  733. this.$http({
  734. url: this.$http.adornUrl(`/wave/wave/addToWave`),
  735. method: 'POST',
  736. data: this.$http.adornData(dataBody)
  737. }).then(({data}) => {
  738. if(data.status == "success"){
  739. this.addToWaveDialogVisible = false;
  740. this.$message({
  741. message: data.msg,
  742. type: 'success'
  743. })
  744. this.getDataList(this.page);
  745. let it = this;
  746. this.dataList.forEach((item, index) => {
  747. it.$set(item,'checkStatus',false)
  748. it.dataListSelections.delete(item.orderNumber);
  749. it.selectAll = false;
  750. });
  751. }else{
  752. this.$message({
  753. message: data.msg,
  754. type: 'error'
  755. })
  756. }
  757. })
  758. },
  759. openCreateOrderBatchDialog(){
  760. this.orderCreateBatchVisible = true;
  761. },
  762. handleOrderAuditStatusUpdate(auditStatusReturn){
  763. let it = this;
  764. this.dataList.forEach((item, index) => {
  765. if(item.orderNumber == auditStatusReturn.orderNumber){
  766. it.$set(item,'auditStatus',auditStatusReturn.auditStatus)
  767. return;
  768. }
  769. })
  770. },
  771. /**
  772. * 全选按钮
  773. */
  774. handleSelectAll (checked) {
  775. let it = this;
  776. it.selectSheets = 0;
  777. if(checked){
  778. it.selectAll = true;
  779. this.dataList.forEach((item, index) => {
  780. it.$set(item,'checkStatus',true)
  781. it.dataListSelections.add(item.orderNumber);
  782. it.selectSheets = it.selectSheets + item.prodNums;
  783. })
  784. }else{
  785. this.dataList.forEach((item, index) => {
  786. it.$set(item,'checkStatus',false)
  787. it.dataListSelections.delete(item.orderNumber);
  788. })
  789. it.selectAll = false;
  790. this.selectSheets = 0;
  791. }
  792. },
  793. handleSelectionChange(checked, order){
  794. if(checked){
  795. this.dataListSelections.add(order.orderNumber);
  796. this.selectSheets = this.selectSheets + order.prodNums;
  797. if(this.dataListSelections.size === this.dataList.length){
  798. this.selectAll = true;
  799. }
  800. }else{
  801. this.dataListSelections.delete(order.orderNumber);
  802. this.selectSheets = this.selectSheets - order.prodNums;
  803. if(this.dataListSelections.size == 0){
  804. this.selectAll = false;
  805. this.selectSheets = 0;
  806. }
  807. }
  808. },
  809. /**
  810. * 页面滚动事件
  811. */
  812. scrollToTop () {
  813. // let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
  814. // this.showHeadScroll = scrollTop > 400
  815. },
  816. /**
  817. * 获取数据列表
  818. */
  819. getDataList (page, params, newData = false) {
  820. page = (page === undefined ? this.page : page)
  821. this.dataListLoading = true
  822. if (newData || !this.theData) {
  823. this.theData = {
  824. current: page == null ? this.page.currentPage : page.currentPage,
  825. size: page == null ? this.page.pageSize : page.pageSize,
  826. 'orderNumber': this.dataForm.orderNumber,
  827. 'receiverName': this.dataForm.receiverName,
  828. 'receiverMobile': this.dataForm.receiverMobile,
  829. 'status': this.dataForm.status,
  830. 'refundStatus': this.dataForm.refundStatus,
  831. 'startTime': this.dateRange === null ? null : this.dateRange[0], // 开始时间
  832. 'endTime': this.dateRange === null ? null : this.dateRange[1], // 结束时间
  833. 'startProductNums': this.productNumsRange === null ? null : this.productNumsRange[0], // 订购数量起
  834. 'endProductNums': this.productNumsRange === null ? null : this.productNumsRange[1], // 订购数量起
  835. 'prodName': this.dataForm.prodName, // 产品名称
  836. 'isMerge': this.dataForm.isMerge, // 是否合单
  837. 'printChannel': this.printChannel,
  838. 'skuName': this.dataForm.skuName,
  839. 'prodNums': this.dataForm.prodNums,
  840. 'deliveryNo': this.dataForm.deliveryNo,
  841. 'isPromotion': this.dataForm.isPromotion,
  842. 'orderNo': this.dataForm.orderNo,
  843. 'remark': this.dataForm.remark
  844. }
  845. } else {
  846. this.theData.current = page == null ? this.page.currentPage : page.currentPage
  847. this.theData.size = page == null ? this.page.pageSize : page.pageSize
  848. this.theData.status = this.dataForm.status
  849. }
  850. this.$http({
  851. url: this.$http.adornUrl('/printOrder/printOrder/page'),
  852. method: 'get',
  853. params: this.$http.adornParams(
  854. Object.assign(this.theData, params
  855. ), false
  856. )
  857. }).then(({ data }) => {
  858. this.dataList = data.records;
  859. this.page.total = data.total
  860. this.sts = !this.status ? 0 : this.status
  861. this.dataListLoading = false
  862. this.activeName = !this.status ? '0' : this.status + '';
  863. let it = this;
  864. this.dataList.forEach((item, index) => {
  865. it.$set(item,'checkStatus',false)
  866. it.dataListSelections.delete(item.orderNumber);
  867. })
  868. this.dataListSelections = new Set();
  869. this.selectAll = false;
  870. this.selectSheets = 0;
  871. })
  872. },
  873. // 每页数
  874. sizeChangeHandle (val) {
  875. this.page.pageSize = val
  876. this.page.currentPage = 1
  877. this.getDataList(this.page)
  878. },
  879. // 当前页
  880. currentChangeHandle (val) {
  881. this.dataListSelections = new Set();
  882. this.page.currentPage = val
  883. this.getDataList(this.page, null, false);
  884. },
  885. // 多选
  886. selectionChangeHandle (val) {
  887. this.dataListSelections = val
  888. },
  889. orderStatus (val) {
  890. this.status = val
  891. this.activeName = val + ''
  892. this.getDataList(this.page)
  893. },
  894. /**
  895. * 根据选项设置时间
  896. * 1:今天 2:昨天 3: 近七天 4:近30天 5:近60天
  897. */
  898. setDateRange (val) {
  899. this.timeActive = val
  900. var startDay = null
  901. var endDay = null
  902. if (val === 1) {
  903. startDay = 0
  904. endDay = 0
  905. } else if (val === 2) {
  906. startDay = -1
  907. endDay = -1
  908. } else if (val === 3) {
  909. startDay = -7
  910. endDay = -1
  911. } else if (val === 4) {
  912. startDay = -30
  913. endDay = -1
  914. } else {
  915. return
  916. }
  917. // 开始时间
  918. let startTime = moment().add(startDay, 'days').startOf('days').format('LL')
  919. // 结束时间
  920. let endTime = moment().add(endDay, 'days').endOf('days').format('LL')
  921. this.dateRange = [startTime, endTime]
  922. },
  923. setNumRange(val){
  924. this.numActive = val;
  925. if(val == this.numList.length - 1){
  926. this.dataForm.prodNums = -1;
  927. }else{
  928. this.dataForm.prodNums = this.numList[val];
  929. }
  930. this.getDataList(this.page, null, true);
  931. },
  932. // 查看订单
  933. addOrUpdateHandle (orderNumber, shopId, status) {
  934. this.$refs.orderInfo.init({
  935. orderNumber: orderNumber,
  936. shopId: shopId,
  937. status: status
  938. })
  939. },
  940. // 删除
  941. deleteHandle (id) {
  942. var ids = id ? [id] : this.dataListSelections.map(item => {
  943. return item.orderId
  944. })
  945. this.$confirm(`${this.$i18n.t('sys.makeSure')}[${id ? this.$i18n.t('text.delBtn') : this.$i18n.t('sys.batchDelete')}]${this.$i18n.t('text.menu')}?`, this.$i18n.t('text.tips'), {
  946. confirmButtonText: this.$i18n.t('crud.filter.submitBtn'),
  947. cancelButtonText: this.$i18n.t('crud.filter.cancelBtn'),
  948. type: 'warning'
  949. }).then(() => {
  950. this.$http({
  951. url: this.$http.adornUrl(`/prod/spec/${ids}`),
  952. method: 'delete',
  953. data: this.$http.adornData(ids, false)
  954. }).then(({ data }) => {
  955. this.$message({
  956. message: this.$i18n.t('publics.operation'),
  957. type: 'success',
  958. duration: 1500,
  959. onClose: () => {
  960. this.getDataList(this.page)
  961. }
  962. })
  963. })
  964. }).catch(() => { })
  965. },
  966. // 清空按钮
  967. clear () {
  968. this.dataForm = {};
  969. this.dateRange = [];
  970. this.status = null;
  971. this.timeActive = null;
  972. this.numActive = null;
  973. this.getDataList(this.page, null, false)
  974. },
  975. // 搜索查询
  976. searchChange (newData = false) {
  977. this.page.currentPage = 1;
  978. this.getDataList(this.page, null, newData)
  979. },
  980. },
  981. destroyed () {
  982. // 页面销毁时移除监听
  983. window.removeEventListener('scroll', this.handleScroll)
  984. }
  985. }
  986. </script>
  987. <style lang="scss" scoped>
  988. .mod-order-order {
  989. .search-bar {
  990. .input-row {
  991. .select-time-btn {
  992. margin-right: 20px;
  993. display: inline-block;
  994. color: #AAAAAA;
  995. font-size: 14px;
  996. cursor:pointer;
  997. &:last-child {
  998. margin-right: 0;
  999. }
  1000. }
  1001. .select-time-btn.is-active {
  1002. color: #155BD4;
  1003. }
  1004. }
  1005. }
  1006. .main {
  1007. .content {
  1008. .all-check-btn {
  1009. margin-right: 10px;
  1010. }
  1011. .had-selected {
  1012. font-size: 12px;
  1013. margin-right: 10px;
  1014. }
  1015. }
  1016. .order-status-nav {
  1017. position: relative;
  1018. display: block;
  1019. width: 100%;
  1020. margin-bottom: 15px;
  1021. height: 40px;
  1022. line-height: 40px;
  1023. border-bottom: 1px solid #ddd;
  1024. ul,
  1025. li {
  1026. list-style: none;
  1027. padding: 0;
  1028. margin: 0;
  1029. }
  1030. .nav-item {
  1031. float: left;
  1032. height: 40px;
  1033. line-height: 40px;
  1034. background: #f7f8fa;
  1035. border: 1px solid #ddd;
  1036. padding: 0 20px;
  1037. margin: 0 -1px -1px 0;
  1038. cursor: pointer;
  1039. }
  1040. .selected {
  1041. background: #fff;
  1042. border-bottom: 1px solid #fff;
  1043. }
  1044. }
  1045. .status-nav {
  1046. ::v-deep .el-tabs__item {
  1047. padding: 0 20px ;
  1048. min-width: 68px;
  1049. width: auto;
  1050. text-align: center;
  1051. }
  1052. ::v-deep .el-tabs__nav-wrap::after{
  1053. height: 1px;
  1054. }
  1055. }
  1056. .tit {
  1057. display: flex;
  1058. align-items: center;
  1059. margin-bottom: 15px;
  1060. background: #F7F8FA;
  1061. z-index: 11;
  1062. height: 57px;
  1063. font-weight: bold;
  1064. .column-title {
  1065. text-align: center;
  1066. }
  1067. .item {
  1068. padding: 0 10px;
  1069. width: 10%;
  1070. text-align: center;
  1071. }
  1072. .product {
  1073. width: 25%;
  1074. margin-bottom: 15px;
  1075. text-align: left !important;
  1076. }
  1077. }
  1078. .fixed-top {
  1079. position: fixed;
  1080. width: calc(83.5% + var(--tit-width-incremental));
  1081. top: 90px;
  1082. }
  1083. .prod {
  1084. margin-bottom: 15px;
  1085. .prod-tit {
  1086. padding: 10px;
  1087. background: #F7F8FA;
  1088. height: 49px;
  1089. display: flex;
  1090. align-items: center;
  1091. border-left: 1px solid #EBEDF0;
  1092. border-top: 1px solid #EBEDF0;
  1093. border-right: 1px solid #EBEDF0;
  1094. .order-number{
  1095. color: #333333;
  1096. font-size: 14px
  1097. }
  1098. .order-index{
  1099. color: red;
  1100. font-size: 14px;
  1101. font-weight: bold;
  1102. }
  1103. .order-time{
  1104. color: #999999;
  1105. font-size: 14px
  1106. }
  1107. span {
  1108. margin-right: 15px;
  1109. }
  1110. }
  1111. .prod-cont {
  1112. display: flex;
  1113. border: 1px solid #EBEDF0;
  1114. color: #495060;
  1115. .item {
  1116. display: flex;
  1117. display: -webkit-flex;
  1118. align-items: center;
  1119. padding: 10px;
  1120. text-align: center;
  1121. justify-content: center !important;
  1122. height: 100%;
  1123. border-right: 1px solid #eee;
  1124. .totalprice {
  1125. color: #ff4141;
  1126. margin-bottom: 10px;
  1127. }
  1128. .operate {
  1129. color: #2d8cf0;
  1130. .operate-btn {
  1131. margin: 0 !important;
  1132. height: auto;
  1133. }
  1134. .default-btn + .default-btn {
  1135. display: block;
  1136. margin-top: 10px;
  1137. margin-left: 0;
  1138. }
  1139. }
  1140. .buyer-info {
  1141. .buyer-name {
  1142. margin-bottom: 4px;
  1143. }
  1144. }
  1145. span {
  1146. display: block;
  1147. }
  1148. }
  1149. .prod-item {
  1150. padding: 0;
  1151. display: flex;
  1152. flex-direction: column !important;
  1153. height: 100%;
  1154. border-right: 1px solid #eee;
  1155. .items.name {
  1156. width: 100%;
  1157. display: flex;
  1158. align-items: center;
  1159. border-bottom: 1px solid #EBEDF0;
  1160. padding: 10px !important;
  1161. text-align: left;
  1162. &:last-child {
  1163. border-bottom: none;
  1164. }
  1165. .order-prod-item-info {
  1166. width: 100%;
  1167. display: flex;
  1168. flex-direction: column;
  1169. .info {
  1170. display: flex;
  1171. align-items: center;
  1172. .prod-image {
  1173. min-height: 80px;
  1174. width: 80px;
  1175. height: auto;
  1176. margin-right: 20px;
  1177. padding: 0;
  1178. line-height: 80px;
  1179. img {
  1180. width: 100%;
  1181. height: 100%;
  1182. object-fit: contain;
  1183. }
  1184. }
  1185. .prod-name {
  1186. width: 100% !important;
  1187. .prod-con {
  1188. width: 85% !important;
  1189. display: block;
  1190. padding: 0 !important;
  1191. .prod-name-txt {
  1192. padding-right: 10px;
  1193. box-sizing: border-box;
  1194. display: -webkit-box;
  1195. -webkit-box-orient: vertical;
  1196. -webkit-line-clamp: 2;
  1197. overflow: hidden;
  1198. }
  1199. .order-status {
  1200. display: inline-block;
  1201. margin-top: 15px;
  1202. margin-right: 10px;
  1203. padding: 2px 4px;
  1204. border: 1px solid #e43130;
  1205. border-radius: 2px;
  1206. color: #e43130;
  1207. font-size: 14px;
  1208. }
  1209. }
  1210. }
  1211. }
  1212. // 赠品盒子
  1213. .order-prod-item-give-con {
  1214. width: 100%;
  1215. padding: 10px 50px 0 10px;
  1216. box-sizing: border-box;
  1217. .giveaway-item {
  1218. display: flex;
  1219. margin-bottom: 10px;
  1220. &:last-child {
  1221. margin-bottom: 0;
  1222. }
  1223. }
  1224. .giveaway-item-name {
  1225. box-sizing: border-box;
  1226. display: -webkit-box;
  1227. -webkit-box-orient: vertical;
  1228. -webkit-line-clamp: 1;
  1229. overflow: hidden;
  1230. }
  1231. .giveaway-item-sku-count {
  1232. margin-left: 10px;
  1233. color: #999;
  1234. width: 20px;
  1235. }
  1236. }
  1237. }
  1238. .prod-price {
  1239. width: 28%;
  1240. display: flex;
  1241. justify-content: flex-start;
  1242. flex-direction: column;
  1243. overflow: hidden;
  1244. position: relative;
  1245. right: 0 !important;
  1246. span {
  1247. display: block;
  1248. text-align: left;
  1249. word-break: keep-all;
  1250. &:first-child {
  1251. margin-bottom: 10px;
  1252. }
  1253. }
  1254. }
  1255. }
  1256. }
  1257. }
  1258. }
  1259. .empty {
  1260. display: block;
  1261. height: 200px;
  1262. line-height: 200px;
  1263. text-align: center;
  1264. color: #aaa;
  1265. }
  1266. .transaction-price {
  1267. text-align: center;
  1268. }
  1269. }
  1270. // 修改物流弹窗
  1271. .change-logistics {
  1272. color: #333;
  1273. padding: 0 20px;
  1274. .warning {
  1275. padding: 10px;
  1276. border: 1px solid #f1924e;
  1277. background: #fff5ed;
  1278. }
  1279. .log-list {
  1280. max-height: 600px;
  1281. margin-top: 30px;
  1282. overflow-y: auto;
  1283. .item {
  1284. padding-bottom: 20px;
  1285. .i-tit {
  1286. display: flex;
  1287. align-items: center;
  1288. .big {
  1289. font-weight: 600;
  1290. margin-right: 15px;
  1291. }
  1292. }
  1293. .item-goods {
  1294. position: relative;
  1295. width: 100%;
  1296. height: 110px;
  1297. overflow-x: auto;
  1298. .goods-box {
  1299. position: absolute;
  1300. left: 0;
  1301. display: flex;
  1302. margin-top: 0;
  1303. -webkit-transition: all 0.3s;
  1304. -moz-transition: all 0.3s;
  1305. transition: all 0.3s;
  1306. .item {
  1307. margin-right: 10px;
  1308. font-size: 12px;
  1309. cursor: pointer;
  1310. .img {
  1311. width: 60px;
  1312. height: 60px;
  1313. font-size: 0;
  1314. margin-bottom: 4px;
  1315. margin-top: 4px;
  1316. position: relative;
  1317. img {
  1318. width: 100%;
  1319. height: 100%;
  1320. }
  1321. .number {
  1322. position: absolute;
  1323. bottom: 0;
  1324. right: 0;
  1325. background: rgba(0, 0, 0, 0.3);
  1326. color: #fff;
  1327. border-radius: 6px 0 6px 0;
  1328. font-size: 12px;
  1329. height: 16px;
  1330. line-height: 16px;
  1331. padding: 0 5px;
  1332. }
  1333. }
  1334. .name {
  1335. width: 60px;
  1336. height: 16px;
  1337. line-height: 16px;
  1338. white-space: nowrap;
  1339. overflow: hidden;
  1340. text-overflow: ellipsis;
  1341. color: #999;
  1342. }
  1343. }
  1344. .item:last-child {
  1345. margin: 0;
  1346. }
  1347. }
  1348. }
  1349. .info-int {
  1350. &.el-form-item__content,
  1351. &.el-form-item__label,
  1352. .el-input__suffix-inner,
  1353. .el-input__icon {
  1354. height: 32px;
  1355. line-height: 32px;
  1356. }
  1357. display: flex;
  1358. .form-item {
  1359. margin-right: 15px;
  1360. }
  1361. }
  1362. }
  1363. }
  1364. .log-info-table {
  1365. margin-top: 20px;
  1366. max-height: 600px;
  1367. overflow-y: auto;
  1368. }
  1369. }
  1370. @media (max-width:1660px) {
  1371. .fixed-top {
  1372. width: calc(79.5% + var(--tit-width-incremental)) !important;
  1373. }
  1374. }
  1375. @media (max-width:1360px) {
  1376. .fixed-top {
  1377. width: calc(75.5% + var(--tit-width-incremental)) !important;
  1378. }
  1379. }
  1380. }
  1381. </style>