create.blade.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. @extends('layouts.app')
  2. @section('content')
  3. <div id="nav2">
  4. @component('process.menu')@endcomponent
  5. </div>
  6. <div class="container-fluid mt-3" id="list">
  7. <div class="card col-md-8 offset-md-2">
  8. <div class="card-body">
  9. <div class="form-group row">
  10. <label class="col-3 col-form-label text-right" >单据号</label>
  11. <input v-model="process.wms_code" class="form-control col-6" :class="error.wms_code && error.wms_code.length>0 ? 'is-invalid' :''">&nbsp;&nbsp;&nbsp;
  12. <input class="btn btn-info col-2" type="button" @click="addProcessContent()" value="新增库单据">
  13. <span v-if="error.wms_code && error.wms_code.length>0" class="invalid-feedback col-7 offset-3 mt-0" role="alert">
  14. <strong>@{{ error.wms_code[0] }}</strong>
  15. </span>
  16. </div>
  17. <div class="form-group row" v-if="processContents.length>0" v-for="processContent in processContents">
  18. <div class="col-8 offset-md-3 pl-0 pt-2 border rounded">
  19. <div class="row pt-2">
  20. <label class="col-3 col-form-label text-right">单据号@{{ processContent.i }}</label>
  21. <b class="col-7">@{{ processContent.wms_code }}</b>
  22. </div>
  23. <div class="row pt-2" v-if="processContent.addBtnShow">
  24. <label class="col-3 col-form-label text-right">选择商品</label>
  25. <span class=" col-9 input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:1.5;text-align: center;">
  26. <ul class="list-group tooltipTarget" title="双击选择商品" style="width: 100%" onselectstart="return false;">
  27. <li v-for="commodity in processContent.commodities" :id="commodity.id" class="list-group-item list-group-item-action p-0 m-0"
  28. @dblclick="selectedCommodity(commodity,processContent.wms_code)" :class="processContent.commodity_id==commodity.id ? 'active' :''">
  29. <p class="form-inline" style="cursor: default;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;"><small class="text-left text-info col-6">@{{ commodity.name }}</small>
  30. <small class="text-left col-6" >
  31. <a v-for="barcode in commodity.barcodes">@{{ barcode.code }}&nbsp;&nbsp;&nbsp;</a>
  32. </small></p></li>
  33. </ul>
  34. </span>
  35. </div>
  36. <div class="row pt-2">
  37. <label class="col-3 col-form-label text-right">商品名</label>
  38. <b class="col-7">@{{ processContent.commodity_name }}</b>
  39. </div>
  40. <div class="row pt-2">
  41. <label class="col-3 col-form-label text-right">条码</label>
  42. <ul class="p-0 m-0 ml-2 list-unstyled list-inline" v-if="processContent.commodity_barcodes && processContent.commodity_barcodes.length>0">
  43. <li v-for="barcode in processContent.commodity_barcodes"><small>@{{ barcode.code }}</small></li>
  44. </ul>
  45. </div>
  46. <div class="row pt-2">
  47. <label class="col-3 col-form-label text-right">SKU</label>
  48. <b class="col-7">@{{ processContent.commodity_sku }}</b>
  49. </div>
  50. <div class="row pt-2">
  51. <label class="col-3 col-form-label text-right">单据类型</label>
  52. <select :disabled="!processContent.addBtnShow" v-model="processContent.bill_type" class="col-7 form-control"
  53. :class="processContentError[processContent.wms_code] && processContentError[processContent.wms_code].bill_type ? 'is-invalid' :''">
  54. <option value="移库单">移库单</option>
  55. <option value="入库单">入库单</option>
  56. <option value="出库单">出库单</option>
  57. </select>
  58. </div>
  59. <div class="row pt-2">
  60. <label class="col-3 col-form-label text-right">数量</label>
  61. <input :readonly="!processContent.addBtnShow" v-model="processContent.amount" type="text" class="form-control col-7"
  62. :class="processContentError[processContent.wms_code] && processContentError[processContent.wms_code].amount ? 'is-invalid' :''">
  63. <span v-if="processContentError[processContent.wms_code] && processContentError[processContent.wms_code].amount" class="invalid-feedback col-7 offset-3 mt-0" role="alert">
  64. <strong>@{{ processContentError[processContent.wms_code].amount[0] }}</strong>
  65. </span>
  66. </div>
  67. <div class="col-8 offset-2 pt-2" v-if="processContent.addBtnShow">
  68. <input type="button" @click="confirmStore(processContent.wms_code,processContent.commodity_id,processContent.amount)" value="确定新增" class="btn btn-primary form-control">
  69. </div>
  70. <div class="col-8 offset-2 pt-2 pb-2">
  71. <input type="button" @click="deleteProcessContent(processContent.wms_code)" value="删除" class="btn btn-danger form-control">
  72. </div>
  73. </div>
  74. </div>
  75. <div class="form-group row">
  76. <label class="col-3 col-form-label text-right" >货主</label>
  77. <input readonly v-if="processContents.length>0" :value="processContents[processContents.length-1].owner_name" class="form-control col-7" :class="error.owner_id && error.owner_id.length>0 ? 'is-invalid' :''">
  78. <span v-if="error.owner_id && error.owner_id.length>0" class="invalid-feedback col-7 offset-3 mt-0" role="alert">
  79. <strong>@{{ error.owner_id[0] }}</strong>
  80. </span>
  81. </div>
  82. <div class="form-group row">
  83. <label class="col-3 col-form-label text-right" >加工类型</label>
  84. <select v-model="process.process_method_id" class="form-control col-7" :class="error.process_method_id && error.process_method_id.length>0 ? 'is-invalid' :''">
  85. <option v-for="processMethod in processMethods" :value="processMethod.id">@{{ processMethod.name }}</option>
  86. </select>
  87. </div>
  88. <div class="form-group row">
  89. <label class="col-3 col-form-label text-right" >加工数量</label>
  90. <input v-model="process.amount" type="text" class="form-control col-7" :class="error.amount && error.amount.length>0 ? 'is-invalid' :''">
  91. <span v-if="error.amount && error.amount.length>0" class="invalid-feedback col-7 offset-3 mt-0" role="alert">
  92. <strong>@{{ error.amount[0] }}</strong>
  93. </span>
  94. </div>
  95. <div class="form-group row">
  96. <label class="col-3 col-form-label text-right" >单价</label>
  97. <input v-model="process.unit_price" type="text" class="form-control col-7" :class="error.unit_price && error.unit_price.length>0 ? 'is-invalid' :''">
  98. <span v-if="error.unit_price && error.unit_price.length>0" class="invalid-feedback col-7 offset-3 mt-0" role="alert">
  99. <strong>@{{ error.unit_price[0] }}</strong>
  100. </span>
  101. </div>
  102. <div class="form-group row">
  103. <label class="col-3 col-form-label text-right" >备注(选填)</label>
  104. <textarea v-model="process.remark" type="text" class="form-control col-7"></textarea>
  105. </div>
  106. <div class="form-group row">
  107. <label class="col-3 col-form-label text-right" >引用教程(选填)</label>
  108. <span class=" col-7 input-group p-0" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.7;text-align: center;">
  109. <ul class="list-group" style="width: 100%" onselectstart="return false;">
  110. <li v-for="tutorial in tutorials" :data-original-title="tutorial.style ? '双击删除教程' :'双击添加教程'" :id="tutorial.id" class="tooltipTarget list-group-item list-group-item-action p-0 m-0"
  111. @dblclick="selectedTutorial(tutorial)" :class="tutorial.style ? 'active' :''">
  112. <p class="form-inline" style="cursor: default;">@{{ tutorial.name }}</p></li>
  113. </ul>
  114. </span>
  115. </div>
  116. <div class="form-group row">
  117. <div class="col-8 offset-2">
  118. <input type="button" @click="submit()" class="btn btn-success form-control" value="提交">
  119. </div>
  120. </div>
  121. </div>
  122. </div>
  123. </div>
  124. @endsection
  125. @section('lastScript')
  126. <script>
  127. let vueList=new Vue({
  128. el:'#list',
  129. data:{
  130. process:{wms_code:'',owner_id:'',process_method_id:'',unit_price:'',remark:'',amount:''},
  131. error:{wms_code:[],owner_id:[],process_method_id:[],unit_price:[],amount:[]},
  132. processContentError:[],
  133. processContents:[],
  134. processMethods:[
  135. @foreach($processMethods as $processMethod)
  136. {!! $processMethod !!},
  137. @endforeach
  138. ],
  139. tutorials:[],
  140. selectedTutorials:[],
  141. },
  142. watch:{
  143. processContents:{
  144. handler(){
  145. if (this.processContents.length===1){
  146. this.process.owner_id=this.processContents[(this.processContents.length)-1].owner_id;
  147. this.getTutorial(this.processContents[(this.processContents.length)-1].owner_id);
  148. }
  149. }
  150. },
  151. },
  152. mounted:function(){
  153. $(".tooltipTarget").tooltip({'trigger':'hover'});
  154. },
  155. methods:{
  156. //新增库单据
  157. addProcessContent(){
  158. let _this=this;
  159. let wms_code=_this.process.wms_code;
  160. if (!wms_code){
  161. tempTip.setDuration(3000);
  162. tempTip.show('未输入单据号!');
  163. return;
  164. }
  165. if (_this.processContents.length>0 && _this.processContents[_this.processContents.length-1].addBtnShow) return;
  166. let isUnique=true;
  167. _this.processContents.every(function (processContent) {
  168. if (processContent.wms_code==wms_code){
  169. isUnique=false;
  170. return false;
  171. }
  172. return true;
  173. });
  174. if (!isUnique){
  175. tempTip.setDuration(3000);
  176. tempTip.show('下方已添加该单据!');
  177. return;
  178. }
  179. axios.post('{{url("api/thirdPart/flux/process/getProcessContent")}}',{wms_code:wms_code})
  180. .then(function (response) {
  181. let processContent={};
  182. processContent['wms_code']=response.data.wms_code;
  183. processContent['owner_name']=response.data.owner_name;
  184. processContent['owner_id']=response.data.owner_id;
  185. processContent['commodities']=response.data.commodities;
  186. processContent['commodity_id']='';
  187. processContent['commodity_name']='';
  188. processContent['commodity_barcodes']=[];
  189. processContent['commodity_sku']='';
  190. processContent['bill_type']=response.data.bill_type;
  191. processContent['amount']=response.data.amount;
  192. processContent['addBtnShow']=true;
  193. _this.processContents.unshift(processContent);
  194. }).catch(function (err) {
  195. tempTip.setDuration(3000);
  196. tempTip.show('查询单据号失败!网络错误:'+err);
  197. });
  198. },
  199. //确定新增
  200. confirmStore(wms_code,commodity_id,amount){
  201. if (!commodity_id) {
  202. tempTip.setDuration(2000);
  203. tempTip.show("尚未选择商品!");
  204. return;
  205. }
  206. if (!amount) {
  207. tempTip.setDuration(2000);
  208. tempTip.show("尚未填写数量!");
  209. return;
  210. }
  211. let _this=this;
  212. _this.processContents.every(function (processContent) {
  213. if (processContent.wms_code==wms_code) {
  214. processContent.addBtnShow=false;
  215. return false;
  216. }
  217. return true;
  218. });
  219. },
  220. //删除新增
  221. deleteProcessContent(wms_code){
  222. let _this=this;
  223. _this.processContents.every(function (processContent,i) {
  224. if (processContent.wms_code==wms_code) {
  225. _this.processContents.splice(i,1);
  226. return false;
  227. }
  228. return true;
  229. });
  230. },
  231. //获取教程
  232. getTutorial(owner_id){
  233. let _this=this;
  234. axios.post("{{url('process/ownerGetTutorials')}}"+"/"+owner_id)
  235. .then(function (response) {
  236. _this.tutorials=[];
  237. response.data.forEach(function (tutorialOne) {
  238. let tutorial={};
  239. tutorial['id']=tutorialOne.id;
  240. tutorial['name']=tutorialOne.name;
  241. tutorial['style']=false;
  242. _this.tutorials.push(tutorial);
  243. });
  244. }).catch(function (err) {
  245. tempTip.setDuration(5000);
  246. tempTip.show('获取教程失败!网络错误:'+err);
  247. });
  248. },
  249. //选择商品
  250. selectedCommodity(commodity,wms_code){
  251. let _this=this;
  252. _this.processContents.every(function (processContent) {
  253. if (processContent.wms_code==wms_code){
  254. processContent.commodity_id=commodity.id;
  255. processContent.commodity_name=commodity.name;
  256. processContent.commodity_barcodes=commodity.barcodes;
  257. processContent.commodity_sku=commodity.sku;
  258. return false;
  259. }
  260. return true;
  261. });
  262. },
  263. //选择教程
  264. selectedTutorial(tutorial){
  265. let _this=this;
  266. if (tutorial.style){
  267. for (let i=0;i<_this.selectedTutorials.length;i++){
  268. if (_this.selectedTutorials[i]==tutorial.id) {
  269. _this.selectedTutorials.splice(i,1);
  270. break;
  271. }
  272. }
  273. _this.tutorials.every(function (tutorialOne) {
  274. if (tutorialOne.id==tutorial.id){
  275. tutorialOne.style=false;
  276. return false;
  277. }
  278. return true;
  279. });
  280. }else {
  281. _this.selectedTutorials.push(tutorial.id);
  282. _this.tutorials.every(function (tutorialOne) {
  283. if (tutorialOne.id==tutorial.id){
  284. tutorialOne.style=true;
  285. return false;
  286. }
  287. return true;
  288. });
  289. }
  290. setTimeout(function(){
  291. $(".tooltipTarget").tooltip({'trigger':'hover'});
  292. },10);
  293. },
  294. //异补提交
  295. submit(){
  296. let _this=this;
  297. let owner_id=_this.process.owner_id;
  298. let process_method_id=_this.process.process_method_id;
  299. let unit_price=_this.process.unit_price;
  300. let remark=_this.process.remark;
  301. let amount=_this.process.amount;
  302. if (!owner_id || !process_method_id || !unit_price || !amount) {
  303. tempTip.setDuration(5000);
  304. tempTip.show('请确认您信息输入的完整性!');
  305. return;
  306. }
  307. _this.processContentError=[];
  308. axios.post('{{url("process")}}',{
  309. owner_id:owner_id,process_method_id:process_method_id,unit_price:unit_price,
  310. remark:remark,amount:amount,processContents:_this.processContents,tutorials:_this.selectedTutorials
  311. }).then(function (response) {
  312. if (response.data.error && response.data.data=="process"){
  313. _this.error=response.data.error;
  314. return;
  315. }
  316. _this.error={wms_code:[],owner_id:[],process_method_id:[],unit_price:[],amount:[]};
  317. if (response.data.error){
  318. _this.processContentError=response.data.error;
  319. return;
  320. }
  321. location.href="{{url('process')}}";
  322. }).catch(function (err) {
  323. tempTip.setDuration(5000);
  324. tempTip.show('提交失败!网络错误:'+err);
  325. });
  326. }
  327. },
  328. });
  329. </script>
  330. @endsection