order-search.vue 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. <!-- 搜索表单 -->
  2. <template>
  3. <el-form
  4. label-width="90px"
  5. class="ele-form-search"
  6. @keyup.enter.native="search"
  7. @submit.native.prevent
  8. >
  9. <el-row :gutter="15">
  10. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  11. <el-form-item label="销售订单号:">
  12. <el-input v-model="where.code" placeholder="请输入"></el-input>
  13. </el-form-item>
  14. </el-col>
  15. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  16. <el-form-item label="产品编码:">
  17. <el-input v-model="where.productCode" placeholder="请输入"></el-input>
  18. </el-form-item>
  19. </el-col>
  20. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  21. <el-form-item label="行号:">
  22. <el-input v-model="where.lineNumber" placeholder="请输入"></el-input>
  23. </el-form-item>
  24. </el-col>
  25. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  26. <el-form-item label="牌号:">
  27. <el-input v-model="where.brandNo" placeholder="请输入"></el-input>
  28. </el-form-item>
  29. </el-col>
  30. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  31. <el-form-item label="型号:">
  32. <el-input v-model="where.model" placeholder="请输入"></el-input>
  33. </el-form-item>
  34. </el-col>
  35. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  36. <el-form-item label="订单来源:">
  37. <DictSelection dictName="订单来源" clearable v-model="where.orderSource">
  38. </DictSelection>
  39. </el-form-item>
  40. </el-col>
  41. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  42. <el-form-item label="客户名称:">
  43. <el-input v-model="where.customerName" placeholder="请输入"></el-input>
  44. </el-form-item>
  45. </el-col>
  46. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  47. <el-form-item label="订单类型:">
  48. <DictSelection dictName="订单类型" clearable v-model="where.orderType">
  49. </DictSelection>
  50. </el-form-item>
  51. </el-col>
  52. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  53. <el-form-item label="生产状态:">
  54. <el-select v-model="where.proStu" placeholder="请选择">
  55. <el-option
  56. v-if="chooseName=='first'"
  57. v-for="item in awaitProcuct"
  58. :key="item.value"
  59. :label="item.label"
  60. :value="item.value">
  61. </el-option>
  62. <el-option
  63. v-if="chooseName=='second'"
  64. v-for="item in alreadyProcuct"
  65. :key="item.value"
  66. :label="item.label"
  67. :value="item.value">
  68. </el-option>
  69. </el-select>
  70. </el-form-item>
  71. </el-col>
  72. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  73. <el-form-item label="按单按库:">
  74. <DictSelection dictName="按单按库" clearable v-model="where.orderLibraryType">
  75. </DictSelection>
  76. </el-form-item>
  77. </el-col>
  78. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  79. <el-form-item label="业务员:">
  80. <el-input v-model="where.salesman" placeholder="请输入"></el-input>
  81. </el-form-item>
  82. </el-col>
  83. <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  84. <el-form-item label="组合编码:">
  85. <el-input v-model="where.ddh" placeholder="请输入"></el-input>
  86. </el-form-item>
  87. </el-col> -->
  88. <el-col v-bind="styleResponsive ? { lg: 12, md: 12 } : { span: 12 }">
  89. <el-form-item label="交货日期:">
  90. <el-date-picker
  91. style="width: 100%;"
  92. v-model="time"
  93. type="daterange"
  94. range-separator="至"
  95. start-placeholder="开始日期"
  96. end-placeholder="结束日期"
  97. value-format="yyyy-MM-dd HH:mm:ss"
  98. :default-time="['00:00:00', '23:59:59']"
  99. >
  100. </el-date-picker>
  101. </el-form-item>
  102. </el-col>
  103. <el-col v-bind="styleResponsive ? { lg: 12, md: 12 } : { span: 12 }">
  104. <div class="ele-form-actions">
  105. <el-button
  106. type="primary"
  107. icon="el-icon-search"
  108. class="ele-btn-icon"
  109. @click="search"
  110. size="small"
  111. >
  112. 查询
  113. </el-button>
  114. <el-button @click="reset"
  115. icon="el-icon-refresh-left"
  116. size="small"
  117. type="primary"
  118. >重置</el-button>
  119. </div>
  120. </el-col>
  121. <el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
  122. <el-form-item label-width="0px">
  123. <el-button @click="goProduct">转生产计划</el-button>
  124. <el-button type="primary" @click="orderRefresh">订单刷新</el-button>
  125. <el-button type="success" @click="toCreate">创建订单</el-button>
  126. <el-upload
  127. class="avatar-uploader"
  128. action="#"
  129. :show-file-list="false"
  130. :http-request="uploadFile"
  131. :before-upload="beforeUpload"
  132. :on-change="handleChange"
  133. >
  134. <el-button type="warning">批量导入</el-button>
  135. </el-upload>
  136. <el-button type="info">
  137. <a :href="fileUrl" download="销售订单导入模板.xls" class="button-link">下载模板</a>
  138. </el-button>
  139. <el-button type="danger">批量删除</el-button>
  140. </el-form-item>
  141. </el-col>
  142. </el-row>
  143. <!-- 导入异常 -->
  144. <import-exception ref="importDialog"> </import-exception>
  145. <!-- 创建订单 -->
  146. <create-order ref="createDialog"> </create-order>
  147. <!-- 订单组合 -->
  148. <group-order ref="groupDialog"> </group-order>
  149. </el-form>
  150. </template>
  151. <script>
  152. import ImportException from '../components/import-exception.vue'
  153. import CreateOrder from '../components/create-order.vue'
  154. import GroupOrder from '../components/group-order.vue'
  155. import { importFile } from '@/api/saleOrder';
  156. import fileUrl from '@/assets/file/销售订单导入模板.xlsx';
  157. import { pullSalesOrder } from '@/api/saleOrder';
  158. export default {
  159. props: {
  160. selection:Array
  161. },
  162. components: {
  163. ImportException,
  164. CreateOrder,
  165. GroupOrder
  166. },
  167. data() {
  168. // 默认表单数据
  169. const defaultWhere = {
  170. code:'',
  171. productCode:'',
  172. customerName:'',
  173. lineNumber:'',
  174. model:'',
  175. brandNo:'',
  176. orderSource:'',
  177. orderType:'',
  178. proStu:'',
  179. orderLibraryType:'',
  180. salesman:'',
  181. };
  182. return {
  183. fileUrl,
  184. // 表单数据
  185. where: { ...defaultWhere },
  186. time:[],
  187. fileList:[],
  188. awaitProcuct:[
  189. {value:1,label:'待排产'}
  190. ],
  191. alreadyProcuct:[
  192. {value:0,label:'所有状态'},
  193. {value:2,label:'待发布'},
  194. {value:3,label:'发布失败'},
  195. {value:4,label:'待生产'},
  196. {value:5,label:'生产中'},
  197. {value:6,label:'已完成'},
  198. {value:7,label:'已延期'}
  199. ],
  200. chooseName:'first'
  201. };
  202. },
  203. computed: {
  204. // 是否开启响应式布局
  205. styleResponsive() {
  206. return this.$store.state.theme.styleResponsive;
  207. }
  208. },
  209. created(){
  210. },
  211. methods: {
  212. setData(activeName){
  213. this.chooseName = activeName
  214. },
  215. /* 搜索 */
  216. search() {
  217. if(this.time.length){
  218. this.where.startTime = this.time[0]
  219. this.where.endTime = this.time[1]
  220. }
  221. this.$emit('search', this.where);
  222. },
  223. /* 重置 */
  224. reset() {
  225. this.time = []
  226. this.where = { ...this.defaultWhere };
  227. this.search();
  228. },
  229. toImport(){
  230. this.$refs.importDialog.open()
  231. },
  232. toCreate(){
  233. this.$refs.createDialog.open()
  234. },
  235. toGroup(){
  236. this.$refs.groupDialog.open()
  237. },
  238. goProduct(){
  239. if(!this.selection.length){
  240. return this.$message.warning('请先勾选一个或多个订单!')
  241. }
  242. const productCode = this.selection[0].productCode
  243. for(var i=0;i<this.selection.length;i++){
  244. if(productCode != this.selection[i].productCode){
  245. return this.$message.warning('产品编码不一致!')
  246. }
  247. }
  248. this.$router.push({
  249. path: '/saleOrder/salesToProduction',
  250. query:{
  251. selection:JSON.stringify(this.selection)
  252. }
  253. });
  254. },
  255. // 刷新订单
  256. orderRefresh(){
  257. pullSalesOrder().then(res=>{
  258. })
  259. },
  260. handleChange(file, fileList) {
  261. this.fileList = fileList;
  262. console.log(fileList)
  263. },
  264. //上传限制
  265. beforeUpload (file) {
  266. const isLt10M = file.size / 1024 / 1024 < 10;
  267. if (!isLt10M) {
  268. this.$message.error('上传文件大小不能超过 10MB!');
  269. }
  270. return isLt10M;
  271. },
  272. //文件上传
  273. uploadFile (param) {
  274. let fd = new FormData();
  275. this.fileList.forEach(item=>{
  276. fd.append("importExcel",item.raw);
  277. })
  278. importFile(fd).then(res=>{
  279. this.$emit('search', this.where);
  280. })
  281. },
  282. }
  283. };
  284. </script>
  285. <style lang="scss" scoped>
  286. .ele-form-actions{
  287. display:flex;
  288. align-items: center;
  289. justify-content: flex-end;
  290. }
  291. .avatar-uploader{
  292. display: inline-block;
  293. margin: 0 10px;
  294. }
  295. .button-link{
  296. color: #fff;
  297. }
  298. </style>