You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

537 lines
22 KiB

8 months ago
8 months ago
3 months ago
3 months ago
6 months ago
3 months ago
6 months ago
6 months ago
4 months ago
6 months ago
6 months ago
6 months ago
6 months ago
4 months ago
6 months ago
4 months ago
6 months ago
4 months ago
6 months ago
4 months ago
4 months ago
6 months ago
7 months ago
6 months ago
6 months ago
6 months ago
4 months ago
6 months ago
3 months ago
7 months ago
6 months ago
6 months ago
6 months ago
7 months ago
4 months ago
3 months ago
4 months ago
3 months ago
4 months ago
4 months ago
4 months ago
3 months ago
6 months ago
7 months ago
8 months ago
6 months ago
4 months ago
6 months ago
6 months ago
8 months ago
3 months ago
7 months ago
8 months ago
6 months ago
8 months ago
7 months ago
6 months ago
4 months ago
4 months ago
3 months ago
6 months ago
8 months ago
6 months ago
6 months ago
6 months ago
6 months ago
4 months ago
6 months ago
8 months ago
4 months ago
6 months ago
7 months ago
6 months ago
3 months ago
3 months ago
3 months ago
6 months ago
4 months ago
3 months ago
6 months ago
3 months ago
4 months ago
4 months ago
6 months ago
4 months ago
4 months ago
4 months ago
4 months ago
6 months ago
6 months ago
4 months ago
6 months ago
7 months ago
6 months ago
6 months ago
7 months ago
6 months ago
8 months ago
4 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
4 months ago
3 months ago
4 months ago
6 months ago
4 months ago
6 months ago
6 months ago
6 months ago
3 months ago
3 months ago
3 months ago
6 months ago
4 months ago
6 months ago
4 months ago
6 months ago
4 months ago
3 months ago
6 months ago
4 months ago
6 months ago
4 months ago
4 months ago
4 months ago
6 months ago
4 months ago
6 months ago
3 months ago
4 months ago
3 months ago
6 months ago
6 months ago
4 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
4 months ago
6 months ago
3 months ago
8 months ago
6 months ago
6 months ago
8 months ago
4 months ago
8 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
8 months ago
7 months ago
8 months ago
7 months ago
6 months ago
7 months ago
6 months ago
6 months ago
6 months ago
6 months ago
3 months ago
8 months ago
  1. <template>
  2. <div>
  3. <div class="pda-container" v-loading.fullscreen.lock="fullscreenLoading"
  4. element-loading-background="rgba(255, 255, 255, 0.3)"
  5. element-loading-spinner="el-icon-loading"
  6. :element-loading-text="loadingText">
  7. <div class="status-bar">
  8. <div class="goBack" @click="handleBack"><i class="el-icon-arrow-left"></i>上一页</div>
  9. <div class="goBack">登记到达</div>
  10. <div class="network" style="color: #fff" @click="$router.push({ path: '/' })">🏠首页</div>
  11. </div>
  12. <div style="overflow-y: auto">
  13. <!-- Step 1: 扫描 -->
  14. <div v-if="processFlag === 1">
  15. <div class="scan-box" style="margin: 2px;">
  16. <el-input clearable v-model="scanCode" placeholder="扫描PO条码或输入PO号"
  17. inputmode="none"
  18. autocomplete="off"
  19. autocorrect="off"
  20. spellcheck="false"
  21. @keyup.enter.native="searchPoList" ref="scanCodeRef" />
  22. </div>
  23. <div class="item-list" v-if="poList.length > 0" style="margin: 2px;">
  24. <el-form label-position="top" style="margin: 3px;">
  25. <el-row :gutter="5" @click.native="recvLine(poDetail)"
  26. v-for="(poDetail, index) in poList" :key="index" :class="index < poList.length - 1 ? 'bottom-line-row' : ''">
  27. <el-col :span="8">
  28. <el-form-item label="商品编码"><span>{{ poDetail.partNo }}</span></el-form-item>
  29. </el-col>
  30. <el-col :span="8">
  31. <el-form-item label="行号/下达号"><span>{{ poDetail.lineNo }}/{{ poDetail.wdr || '*' }}</span></el-form-item>
  32. </el-col>
  33. <el-col :span="8">
  34. <el-form-item label="">
  35. <el-button type="text" class="recvButton" @click="recvLine(poDetail)"
  36. style="margin-top: 10px;margin-left: 20px" size="small">接收</el-button>
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="24">
  40. <el-form-item label="商品描述"><span>{{ poDetail.description }}</span></el-form-item>
  41. </el-col>
  42. <el-col :span="6" :class="{ mt10: getTextWidth(poDetail.description) > 34 }">
  43. <el-form-item label="订单数量"><span>{{ poDetail.purchaseQty }}</span></el-form-item>
  44. </el-col>
  45. <el-col :span="6" :class="{ mt10: getTextWidth(poDetail.description) > 34 }">
  46. <el-form-item label="待收数量"><span>{{ poDetail.qtyToReceive }}</span></el-form-item>
  47. </el-col>
  48. <el-col :span="6" :class="{ mt10: getTextWidth(poDetail.description) > 34 }">
  49. <el-form-item label="计划数量"><span>{{ poDetail.invQtyToReceive }}</span></el-form-item>
  50. </el-col>
  51. <el-col :span="6" :class="{ mt10: getTextWidth(poDetail.description) > 34 }">
  52. <el-form-item style="margin-left: 20px" label="单位"><span>{{ poDetail.purchaseUOM }}</span></el-form-item>
  53. </el-col>
  54. </el-row>
  55. </el-form>
  56. </div>
  57. </div>
  58. <!-- Step 2: 收货明细 -->
  59. <div v-if="processFlag === 2">
  60. <el-form label-position="top" class="form-section" style="margin: 5px;">
  61. <el-row :gutter="20">
  62. <el-col :span="12"><el-form-item label="PO号码"><el-input v-model="recvItem.orderNo" disabled /></el-form-item></el-col>
  63. <el-col :span="12"><el-form-item label="行号/下达号"><el-input v-model="displayLineWdr" disabled /></el-form-item></el-col>
  64. <el-col :span="12"><el-form-item label="商品编码"><el-input v-model="recvItem.partNo" disabled /></el-form-item></el-col>
  65. <el-col :span="12"><el-form-item label="计量单位"><el-input v-model="recvItem.purchaseUOM" disabled /></el-form-item></el-col>
  66. <el-col :span="24"><el-form-item label="商品名称"><el-input v-model="recvItem.description" disabled /></el-form-item></el-col>
  67. <el-col :span="12"><el-form-item label="订单数量"><el-input v-model="recvItem.purchaseQty" disabled /></el-form-item></el-col>
  68. <el-col :span="12"><el-form-item label="待收数量"><el-input v-model="recvItem.qtyToReceive" disabled /></el-form-item></el-col>
  69. <el-col :span="12">
  70. <el-form-item label="此次接收数量">
  71. <el-input v-model="recvItem.transQty" />
  72. </el-form-item>
  73. </el-col>
  74. <el-col :span="12">
  75. <el-form-item label=" ">
  76. <!-- <el-button type="text" @click.stop="handlingUnitStep" :disabled="recvItem.needHandlingUnit !== 'Y'"
  77. :class="{ 'disabled-button': recvItem.needHandlingUnit !== 'Y' }"
  78. style="font-size: 16px" size="small">包装记录</el-button>-->
  79. <el-button type="text" @click.stop="handlingUnitStep"
  80. style="font-size: 16px" size="small">包装记录</el-button>
  81. </el-form-item>
  82. </el-col>
  83. <el-col :span="12"><el-form-item label="制造日期">
  84. <el-date-picker v-model="recvItem.manufactureDate"
  85. type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
  86. placeholder="选择制造日期" style="width: 100%"
  87. inputmode="none"
  88. autocomplete="off"
  89. autocorrect="off"
  90. disabled
  91. spellcheck="false" />
  92. </el-form-item></el-col>
  93. <el-col :span="12"><el-form-item label="供应商批次">
  94. <el-input v-model="recvItem.supplierBatchNo" disabled placeholder="请输入供应商批次" />
  95. </el-form-item></el-col>
  96. <el-col :span="12"><el-form-item label="WDR">
  97. <el-input v-model="recvItem.wdr" placeholder="请输入WDR" />
  98. </el-form-item></el-col>
  99. <el-col :span="12"><el-form-item label="到达日期">
  100. <el-date-picker v-model="recvItem.arrivalDate" type="date" format="yyyy-MM-dd HH:mm:ss"
  101. value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择到达日期" style="width: 100%"
  102. inputmode="none"
  103. autocomplete="off"
  104. autocorrect="off"
  105. spellcheck="false" />
  106. </el-form-item></el-col>
  107. <el-col :span="12"><el-form-item label="库位"><el-input v-model="recvItem.locationNo" placeholder="请输入库位" @blur="validateLocation" /></el-form-item></el-col>
  108. <el-col :span="12"><el-form-item label="批号"><el-input v-model="recvItem.batchNo" placeholder="请输入批号" /></el-form-item></el-col>
  109. <el-col :span="8" style="margin-top: 10px"><el-form-item><el-button type="text" style="font-size: 16px;margin-left: 30px" @click="processFlag = 1">回退</el-button></el-form-item></el-col>
  110. <el-col :span="8" style="margin-top: 10px"><el-form-item><el-button type="text" style="font-size: 16px;margin-left: 20px" @click="receivePo">保存</el-button></el-form-item></el-col>
  111. <el-col :span="8" style="margin-top: 10px"><el-form-item><el-button type="text" style="font-size: 16px;margin-left: 10px" @click="$router.push('/')">退出</el-button></el-form-item></el-col>
  112. </el-row>
  113. </el-form>
  114. </div>
  115. <!-- Step 3: 包装记录 -->
  116. <div v-if="processFlag === 3">
  117. <el-form label-position="top" class="form-section" style="margin: 5px;">
  118. <el-row :gutter="20">
  119. <el-col :span="12"><el-form-item label="商品编码"><el-input v-model="recvItem.partNo" disabled /></el-form-item></el-col>
  120. <el-col :span="12"><el-form-item label="计量单位"><el-input v-model="recvItem.purchaseUOM" disabled /></el-form-item></el-col>
  121. <el-col :span="24"><el-form-item label="商品名称"><el-input v-model="recvItem.description" disabled /></el-form-item></el-col>
  122. <el-col :span="8"><el-form-item label="单包装数量"><el-input v-model="hanlingItem.perQty" /></el-form-item></el-col>
  123. <el-col :span="8"><el-form-item label="包装数"><el-input v-model="hanlingItem.packageQty" /></el-form-item></el-col>
  124. <el-col :span="8" style="margin-top: 24px"><el-form-item>
  125. <el-button type="text" @click="createHandlingUnit" style="font-size: 16px">创建</el-button></el-form-item></el-col>
  126. <el-table :data="handlingUnit" :row-style="{ height: '30px' }" style="width: 94%; margin-left: 10px;" highlight-current-row>
  127. <el-table-column prop="code" label="序号" />
  128. <el-table-column prop="packageQty" label="包装数" width="80" />
  129. <el-table-column prop="perQty" label="单包装数量" width="100" />
  130. <el-table-column label="操作">
  131. <template slot-scope="scope">
  132. <a @click="removeItem(scope.$index)">删除</a>
  133. </template>
  134. </el-table-column>
  135. </el-table>
  136. <el-col :span="24"><el-form-item><span>合计</span><span style="margin-left: 38%">{{ totalQty }}</span></el-form-item></el-col>
  137. <el-col :span="12"><el-form-item><el-button type="text" @click="processFlag = 2" style="font-size: 18px;margin-left: 60px">回退</el-button></el-form-item></el-col>
  138. <el-col :span="12"><el-form-item><el-button type="text" @click="processFlag = 2" style="font-size: 18px;">确定</el-button></el-form-item></el-col>
  139. </el-row>
  140. </el-form>
  141. </div>
  142. </div>
  143. </div>
  144. </div>
  145. </template>
  146. <script>
  147. import { getPoList, receivePo, printLabel, getNextItemNo, validateLocationForReceiveCase } from "@/api/po/po.js";
  148. export default {
  149. data() {
  150. return {
  151. processFlag: 1,
  152. scanCode: '',
  153. poList: [],
  154. recvItem: {},
  155. handlingUnit: [],
  156. hanlingItem: { code: '', qty: '', perQty: '', packageQty: '' },
  157. site:localStorage.getItem('site'),
  158. warehouseId:localStorage.getItem('selectedWarehouse'),
  159. fullscreenLoading: false, // 控制全屏loading
  160. loadingText: '加载中...' // 动态loading文本
  161. };
  162. },
  163. computed: {
  164. totalQty() {
  165. const sum = this.handlingUnit.reduce((sum, item) => sum + Number(item.qty), 0);
  166. this.recvItem.transQty = sum;
  167. return sum;
  168. },
  169. huKey() {
  170. return `hu_${this.recvItem.poNumber}_${this.recvItem.lineNo}`;
  171. },
  172. displayLineWdr() {
  173. return `${this.recvItem.lineNo || ''}/${this.recvItem.wdr || '*'}`;
  174. }
  175. },
  176. methods: {
  177. // 计算“显示宽度”
  178. getTextWidth(text) {
  179. if (!text) return 0
  180. let len = 0
  181. for (let char of text) {
  182. // 中文、全角符号
  183. if (/[\u4e00-\u9fa5\u3000-\u303F\uFF00-\uFFEF]/.test(char)) {
  184. len += 2
  185. } else {
  186. len += 1
  187. }
  188. }
  189. return len
  190. },
  191. handleBack() {
  192. if (this.processFlag === 1) this.$router.back();
  193. else if (this.processFlag === 3) this.processFlag = 2;
  194. else this.processFlag = 1;
  195. },
  196. searchPoList() {
  197. if (!this.scanCode) return this.poList = [];
  198. // 开始搜索时显示loading
  199. this.loadingText = '搜索中...';
  200. this.fullscreenLoading = true;
  201. getPoList({ poNumber: this.scanCode,site: this.site }).then(({ data }) => {
  202. if (data.code === 0) {
  203. this.poList = data.rows
  204. } else {
  205. this.$message.error(data.msg || '操作失败');
  206. }
  207. // 搜索完成后让输入框失去焦点
  208. this.$nextTick(() => {
  209. if (this.$refs.scanCodeRef) {
  210. this.$refs.scanCodeRef.blur();
  211. }
  212. });
  213. }).catch(error => {
  214. console.error('搜索失败:', error);
  215. this.$message.error('搜索失败,请重试');
  216. }).finally(() => {
  217. // 搜索完成后关闭loading
  218. this.fullscreenLoading = false;
  219. });
  220. },
  221. async recvLine(row) {
  222. if (row.authorizationRequired=='TRUE') {
  223. return this.$message.warning("该采购订单需要审核,无法接收");
  224. }
  225. if (row.receiveCaseDB!='INVDIR' && row.receiveCaseDB!='QAINV' && row.receiveCaseDB!='ARRINV') {
  226. return this.$message.warning("该采购订单行的收货方式为"+row.receiveCase+",无法接收");
  227. }
  228. if (row.poStatus === 'Stopped' || row.poStatus === 'Closed' || row.poStatus === 'Cancelled' || row.poStatus === 'Planned') {
  229. return this.$message.warning("该采购订单状态为"+row.poStatus+",无法接收");
  230. }
  231. if (row.status === 'Stopped' || row.status === 'Closed' || row.status === 'Cancelled') {
  232. return this.$message.warning("该采购订单行状态为"+row.status+",无法接收");
  233. }
  234. if (row.convFactor !== 1) {
  235. return this.$message.warning("采购计量单位和库存计量单位不一致,无法接收");
  236. }
  237. // 获取下一个itemNo
  238. let nextItemNo = 1;
  239. try {
  240. const { data } = await getNextItemNo({
  241. orderNo: row.orderNo,
  242. lineNo: row.lineNo,
  243. releaseNo: row.releaseNo || ''
  244. });
  245. if (data.code === 0) {
  246. nextItemNo = data.data;
  247. }
  248. } catch (error) {
  249. console.error('获取itemNo失败:', error);
  250. // 失败时使用默认值1
  251. }
  252. this.recvItem = {
  253. ...row,
  254. poNo: row.orderNo || this.scanCode,
  255. dueinQty: row.qtyToReceive || row.invQtyToReceive,
  256. transQty: '',
  257. itemNo: nextItemNo,
  258. batchNo: row.orderNo+'-'+row.lineNo+'-'+row.releaseNo+'-'+nextItemNo,
  259. deliveryDate: row.plannedDeliveryDate || '',
  260. arrivalDate: this.getCurrentDate(),
  261. supplierBatchNo: '',
  262. wdr:"*"
  263. };
  264. this.processFlag = 2;
  265. },
  266. // 获取当前日期
  267. getCurrentDate() {
  268. const now = new Date();
  269. return now.getFullYear() + '-' +
  270. String(now.getMonth() + 1).padStart(2, '0') + '-' +
  271. String(now.getDate()).padStart(2, '0') + ' ' +
  272. String(now.getHours()).padStart(2, '0') + ':' +
  273. String(now.getMinutes()).padStart(2, '0') + ':' +
  274. String(now.getSeconds()).padStart(2, '0');
  275. },
  276. handlingUnitStep() {
  277. this.processFlag = 3;
  278. const saved = localStorage.getItem(this.huKey);
  279. this.handlingUnit = saved ? JSON.parse(saved) : [];
  280. },
  281. createHandlingUnit() {
  282. const { perQty, packageQty } = this.hanlingItem;
  283. if (!perQty || !packageQty || isNaN(perQty) || isNaN(packageQty)) {
  284. return this.$message.warning("请填写有效的包装信息");
  285. }
  286. const qty = parseFloat(perQty) * parseInt(packageQty);
  287. const code = String(this.handlingUnit.length + 1);
  288. const newItem = { ...this.hanlingItem, qty, code };
  289. this.handlingUnit.push(newItem);
  290. localStorage.setItem(this.huKey, JSON.stringify(this.handlingUnit));
  291. // 创建HU后清空包装数和单包装数量
  292. this.hanlingItem.perQty = '';
  293. this.hanlingItem.packageQty = '';
  294. },
  295. removeItem(index) {
  296. this.handlingUnit.splice(index, 1);
  297. localStorage.setItem(this.huKey, JSON.stringify(this.handlingUnit));
  298. },
  299. // 清除所有handlingUnit缓存
  300. clearAllHandlingUnitCache() {
  301. this.hanlingItem = { code: '', qty: '', perQty: '', packageQty: '' };
  302. const keys = Object.keys(localStorage);
  303. keys.forEach(key => {
  304. if (key.startsWith('hu_')) {
  305. localStorage.removeItem(key);
  306. }
  307. });
  308. },
  309. // 校验库位
  310. async validateLocation() {
  311. if (!this.recvItem.locationNo || !this.recvItem.receiveCaseDB) {
  312. return;
  313. }
  314. try {
  315. const { data } = await validateLocationForReceiveCase({
  316. site: this.site,
  317. locationId: this.recvItem.locationNo,
  318. receiveCaseDB: this.recvItem.receiveCaseDB
  319. });
  320. if (data.code !== 0) {
  321. this.$message.error(data.msg || '库位校验失败');
  322. // 清空库位输入
  323. this.recvItem.locationNo = '';
  324. }
  325. } catch (error) {
  326. console.error('库位校验失败:', error);
  327. this.$message.error('库位校验失败,请重试');
  328. // 清空库位输入
  329. this.recvItem.locationNo = '';
  330. }
  331. },
  332. async receivePo() {
  333. if (this.fullscreenLoading) return; // 防止重复点
  334. this.loadingText = '提交中...';
  335. this.fullscreenLoading = true;
  336. const item = this.recvItem;
  337. if (!item.transQty || !item.locationNo || !item.batchNo) {
  338. this.fullscreenLoading = false;
  339. return this.$message.error("请填写完整信息");
  340. }
  341. // 提交前再次校验库位
  342. try {
  343. const { data: validationData } = await validateLocationForReceiveCase({
  344. site: this.site,
  345. locationId: item.locationNo,
  346. receiveCaseDB: item.receiveCaseDB
  347. });
  348. if (validationData.code !== 0) {
  349. this.fullscreenLoading = false;
  350. return this.$message.error(validationData.msg || '库位校验失败');
  351. }
  352. } catch (error) {
  353. console.error('库位校验失败:', error);
  354. this.fullscreenLoading = false;
  355. return this.$message.error('库位校验失败,请重试');
  356. }
  357. // 构建符合服务端TransDetailDto结构的数据
  358. const receiveData = {
  359. // 基本字段
  360. site: this.site,
  361. warehouseId: this.warehouseId,
  362. partNo: item.partNo,
  363. partDesc: item.description,
  364. transQty: item.transQty,
  365. batchNo: item.batchNo,
  366. locationNo: item.locationNo,
  367. itemNo: item.itemNo,
  368. wdr: item.wdr || '*',
  369. deliveryDate: item.deliveryDate,
  370. arrivalDate: item.arrivalDate,
  371. supplierBatchNo: item.supplierBatchNo,
  372. samplePercent: item.samplePercent || 0,
  373. sampleQty: item.sampleQty || 0,
  374. // PO相关字段
  375. poNo: item.poNumber || item.poNo,
  376. orderNo: item.orderNo,
  377. lineNo: item.lineNo,
  378. releaseNo: item.releaseNo,
  379. receiptNo: item.receiptNo,
  380. orderRef1: item.orderNo,
  381. supplierNo: item.supplierNo,
  382. purchaseUOM: item.purchaseUOM,
  383. receiveCase: item.receiveCase,
  384. receiveCaseDB: item.receiveCaseDB,
  385. inventoryPartDB: item.inventoryPartDB,
  386. // 业务控制字段
  387. needHandlingUnit: item.needHandlingUnit ,
  388. needCheck: item.needCheck ,
  389. warehouseType: item.warehouseType ,
  390. // 日期字段
  391. manufactureDate: item.manufactureDate,
  392. // 处理单元列表
  393. handlingUnitList: this.handlingUnit.map(hu => ({
  394. perQty: hu.perQty,
  395. packageQty: hu.packageQty
  396. }))
  397. };
  398. receivePo(receiveData).then(({ data }) => {
  399. if (data.code === 0) {
  400. this.$message.success("操作成功");
  401. this.clearAllHandlingUnitCache();
  402. this.printViaServer(data.data,item.needCheck); // 调用打印
  403. this.processFlag = 1;
  404. this.scanCode = '';
  405. this.poList = [];
  406. this.recvItem = {};
  407. this.handlingUnit = [];
  408. } else {
  409. this.$message.error(data.msg || '操作失败');
  410. }
  411. }).catch(error => {
  412. console.error('接收失败:', error);
  413. this.$message.error('网络错误,请重试');
  414. }).finally(() => {
  415. this.fullscreenLoading = false; // 结束后关闭loading
  416. });
  417. },
  418. /**
  419. * 通过服务器打印
  420. */
  421. async printViaServer(receiptNo,needCheck) {
  422. this.$emit('print-start')
  423. try {
  424. const printRequest = {
  425. reportId: this.reportId,
  426. zplCode: this.zplCode,
  427. paperSize: this.paperSize,
  428. orientation: this.orientation,
  429. dpi: this.dpi,
  430. userId: localStorage.getItem('userName'),
  431. username: localStorage.getItem('userName'),
  432. site: localStorage.getItem('site'),
  433. receiptNo: receiptNo,
  434. needCheck:needCheck,
  435. printLabel:"BIL标签"
  436. }
  437. const { data } = await printLabel(printRequest)
  438. if (data.code === 200) {
  439. this.$message.success(`打印任务已发送!`)
  440. }
  441. } catch (error) {
  442. console.error('服务器打印失败:', error)
  443. this.$message.error(`打印失败: ${error.message || error}`)
  444. }
  445. },
  446. },
  447. mounted() {
  448. this.$nextTick(() => this.$refs.scanCodeRef.focus());
  449. },
  450. };
  451. </script>
  452. <style scoped>
  453. .mt10 {
  454. margin-top: 10px;
  455. }
  456. .scan-box input {
  457. width: 100%;
  458. padding: 12px;
  459. font-size: 16px;
  460. }
  461. .item-list {
  462. flex: 1;
  463. overflow-y: auto;
  464. margin: 10px 0;
  465. border: 1px solid rgba(200, 200, 200, 0.8);
  466. }
  467. .item-list span {
  468. color: #000;
  469. font-size: 15px;
  470. }
  471. .bottom-line-row {
  472. border-bottom: 1px solid rgba(200, 200, 200, 0.8);
  473. }
  474. .recvButton {
  475. font-size: 16px;
  476. border-radius: 3px;
  477. color: #17b3a3;
  478. }
  479. .item-list .el-row {
  480. cursor: pointer;
  481. transition: background 0.3s;
  482. }
  483. .item-list .el-row:hover {
  484. background: #f5f7fa;
  485. }
  486. .disabled-button {
  487. color: #ccc !important;
  488. cursor: not-allowed !important;
  489. }
  490. .form-section >>> .el-col {
  491. margin-bottom: 12px;
  492. }
  493. .status-bar {
  494. display: flex;
  495. justify-content: space-between;
  496. align-items: center;
  497. background: #17b3a3;
  498. color: white;
  499. }
  500. /* 自定义loading样式 */
  501. .pda-container >>> .el-loading-mask {
  502. background-color: rgba(255, 255, 255, 0.3) !important;
  503. }
  504. .pda-container >>> .el-loading-spinner {
  505. margin-top: -25px;
  506. }
  507. .pda-container >>> .el-loading-spinner .circular {
  508. width: 35px;
  509. height: 35px;
  510. }
  511. .pda-container >>> .el-loading-text {
  512. color: #17b3a3 !important;
  513. font-size: 14px;
  514. font-weight: 500;
  515. margin-top: 10px;
  516. }
  517. </style>