index.vue 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never">
  4. <div class="filter-container">
  5. <el-form
  6. label-width="100px"
  7. class="ele-form-search"
  8. @keyup.enter.native="reload"
  9. @submit.native.prevent
  10. >
  11. <el-row :gutter="15">
  12. <el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }">
  13. <el-form-item label="订单编号:" prop="orderNo">
  14. <el-input v-model="params.orderNo" clearable></el-input>
  15. </el-form-item>
  16. </el-col>
  17. <el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }">
  18. <el-form-item label="项目名称:" prop="projectName">
  19. <el-input v-model="params.projectName" clearable></el-input>
  20. </el-form-item>
  21. </el-col>
  22. <el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }">
  23. <el-form-item label="客户名称:" prop="customerName">
  24. <el-input v-model="params.customerName" clearable></el-input>
  25. </el-form-item>
  26. </el-col>
  27. <el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }">
  28. <el-form-item label="创建时间:" prop="createTime">
  29. <el-date-picker
  30. v-model="timeSearch"
  31. style="width: 100%"
  32. value-format="yyyy-MM-dd"
  33. type="daterange"
  34. range-separator="-"
  35. start-placeholder="开始日期"
  36. end-placeholder="结束日期"
  37. :default-time="['00:00:00', '23:59:59']"
  38. />
  39. </el-form-item>
  40. </el-col>
  41. <el-col v-bind="styleResponsive ? { lg: 4, md: 24 } : { span: 4 }">
  42. <div class="ele-form-actions">
  43. <el-button
  44. type="primary"
  45. icon="el-icon-search"
  46. class="ele-btn-icon"
  47. @click="reload('search')"
  48. >
  49. 查询
  50. </el-button>
  51. <el-button @click="reload('reset')">重置</el-button>
  52. </div>
  53. </el-col>
  54. </el-row>
  55. </el-form>
  56. </div>
  57. </el-card>
  58. <div class="ele-table-container" style="height: 100%">
  59. <ele-pro-table
  60. ref="table"
  61. :columns="columns"
  62. :datasource="datasource"
  63. :pageSizes="[10, 20, 50, 100]"
  64. :pageSize="20"
  65. height="calc(100% - 80px)"
  66. :key="tableKey"
  67. >
  68. <template v-slot:firstProcessDeliveryTime="{ row }">
  69. <el-date-picker
  70. v-if="!row.isEdit && !row.firstProcessDeliveryTime"
  71. v-model="firstTime"
  72. type="date"
  73. value-format="yyyy-MM-dd"
  74. placeholder="选择日期"
  75. @change="handleDateChange($event, row)"
  76. >
  77. </el-date-picker>
  78. <span> {{ row.firstProcessDeliveryTime || '请选择' }}</span>
  79. <i
  80. v-if="!row.firstProcessDeliveryTime"
  81. class="xiada el-icon-edit"
  82. @click="editFirstTime(row)"
  83. ></i>
  84. </template>
  85. <template v-slot:produceRoutingName="{ row }">
  86. <el-link
  87. type="primary"
  88. :underline="false"
  89. @click="produceRouting(row)"
  90. >
  91. {{ row.produceRoutingName }}</el-link
  92. >
  93. </template>
  94. <!-- 材料完成 -->
  95. <!-- 出库 -->
  96. <template v-slot:deliveryRecords="{ row }">
  97. <div v-if="row.deliveryStatus === 0" class="delivery-status">
  98. <span> 未发货 </span>
  99. <span> 数量:{{ row.productQuantity }} </span>
  100. </div>
  101. <div v-if="row.deliveryStatus === 1" class="delivery-status">
  102. <span> 已发:{{ row.deliveryQuantity }} </span>
  103. <span>
  104. 未发:{{ row.productQuantity - row.deliveryQuantity }}
  105. </span>
  106. </div>
  107. <div v-if="row.deliveryStatus === 2" class="delivery-status">
  108. <span> 全部发货 </span>
  109. <span> 数量:{{ row.deliveryQuantity }} </span>
  110. </div>
  111. </template>
  112. </ele-pro-table>
  113. </div>
  114. <produceRouting ref="produceRouting"></produceRouting>
  115. </div>
  116. </template>
  117. <script>
  118. import { h } from 'vue';
  119. import produceRouting from './components/produceRouting.vue';
  120. import {
  121. getList,
  122. getListPage,
  123. updateFirstProcessDeliveryTime,
  124. getProduceRoutingDetail
  125. } from '@/api/boss/index.js';
  126. import { mapGetters } from 'vuex';
  127. import { getColumns } from './columns.js';
  128. import datasss from './data.js';
  129. import { getRecords } from '@/utils/util';
  130. import { getByCode } from '@/api/system/dictionary-data';
  131. export default {
  132. components: {
  133. produceRouting
  134. },
  135. data() {
  136. return {
  137. tableKey: '',
  138. datasss: datasss,
  139. timeSearch: null,
  140. params: {
  141. startDate: '',
  142. endDate: '',
  143. customerId: '',
  144. projectId: '',
  145. orderNo: '',
  146. customerName: '',
  147. projectName: ''
  148. },
  149. columns: [],
  150. orderObj: {
  151. 0: '未提交',
  152. 1: '审核中',
  153. 2: '已审核',
  154. 3: '审核未通过',
  155. 7: '作废'
  156. },
  157. statusObj: {
  158. 0: '未发货',
  159. 1: '部分发货',
  160. 2: '全部发货'
  161. },
  162. firstTime: '',
  163. records: []
  164. };
  165. },
  166. computed: {
  167. ...mapGetters(['user']),
  168. // 是否开启响应式布局
  169. styleResponsive() {
  170. return this.$store.state.theme.styleResponsive;
  171. }
  172. },
  173. methods: {
  174. reload(type) {
  175. if (this.timeSearch) {
  176. this.params.startDate = this.timeSearch[0];
  177. this.params.endDate = this.timeSearch[1];
  178. }
  179. if (type == 'reset') {
  180. this.params = {
  181. startDate: '',
  182. endDate: '',
  183. customerId: '',
  184. projectId: '',
  185. orderNo: ''
  186. };
  187. }
  188. this.$refs.table.reload({ page: 1, where: this.params });
  189. },
  190. datasource({ page, where, limit, ...row }) {
  191. return getListPage({
  192. ...where,
  193. pageNum: page,
  194. size: limit
  195. });
  196. },
  197. editFirstTime(row) {
  198. row.isEdit = !row.isEdit;
  199. },
  200. // 选择首工序的时间
  201. async handleDateChange(e, item) {
  202. await updateFirstProcessDeliveryTime({
  203. id: item.saleOrderMaterialId,
  204. processDeliveryTime: e
  205. });
  206. this.$refs.table.reload({ where: this.params });
  207. },
  208. //打开工艺路线详情
  209. async produceRouting(row) {
  210. const res = await getProduceRoutingDetail({
  211. isDetail: false,
  212. pageNum: 1,
  213. size: -1,
  214. routingId: row.produceRoutingId
  215. });
  216. this.$refs.produceRouting.open({
  217. row: row,
  218. process: res
  219. });
  220. }
  221. },
  222. mounted() {
  223. this.$store.dispatch('theme/setBodyFullscreen', true);
  224. },
  225. beforeDestroy() {
  226. this.$store.dispatch('theme/setBodyFullscreen', false);
  227. },
  228. async created() {
  229. const res1 = await getByCode('production_status');
  230. this.productionStatus = res1.data;
  231. this.columns = getColumns(this);
  232. },
  233. beforeUpdate() {
  234. console.log('更新');
  235. }
  236. };
  237. </script>
  238. <style lang="scss" scoped>
  239. .app-container {
  240. background: #f0f3f3;
  241. min-height: calc(100vh - 84px);
  242. }
  243. .zw-page-table {
  244. background: #ffffff;
  245. padding-top: 20px;
  246. }
  247. .pagination-wrap {
  248. display: flex;
  249. justify-content: flex-end;
  250. padding: 10px 0;
  251. }
  252. .table {
  253. width: 100%;
  254. margin-top: 10px;
  255. }
  256. .outline {
  257. width: 100%;
  258. // min-width: 1px;
  259. position: relative;
  260. border-bottom: 1px solid #e5e5e5;
  261. // display: flex;
  262. // align-items: center;
  263. }
  264. .outlineBox .outline:last-child {
  265. border-bottom: none;
  266. }
  267. .xiada {
  268. position: absolute;
  269. top: 50%;
  270. right: 0;
  271. transform: translateY(-50%);
  272. }
  273. .records {
  274. display: flex;
  275. }
  276. //
  277. :deep(.spanbox) {
  278. display: flex;
  279. flex-wrap: wrap;
  280. }
  281. :deep(.span) {
  282. flex: 1;
  283. }
  284. .flex-col {
  285. display: flex;
  286. flex-direction: column;
  287. .col {
  288. flex: 1;
  289. align-content: center;
  290. white-space: nowrap;
  291. text-overflow: ellipsis;
  292. overflow: hidden;
  293. }
  294. }
  295. :deep(.el-card__body) {
  296. padding: 15px 15px 0 15px;
  297. }
  298. .ele-body {
  299. height: calc(100vh - 95px);
  300. .ele-table-container {
  301. height: 100%;
  302. :deep(.el-card__body) {
  303. padding: 0.3vw;
  304. }
  305. :deep(.ele-table-tool-default) {
  306. padding: 0 15px;
  307. }
  308. :deep(.has-gutter) {
  309. height: 50px;
  310. }
  311. :deep(.el-table__header) {
  312. height: 50px;
  313. // background-color: #615fe7;
  314. }
  315. :deep(.ele-pro-table) {
  316. height: 99%;
  317. }
  318. :deep(.el-table) {
  319. // font-size: 0.62vw;
  320. }
  321. }
  322. }
  323. .delivery-status {
  324. display: flex;
  325. justify-content: space-around;
  326. }
  327. </style>