index.vue 64 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541
  1. <template>
  2. <div class="app-container">
  3. <div v-if="isPercentage" class="percentage" style="width: 210px;height: 90px;background: #fff;position: fixed;bottom: 0;left: 0;z-index: 9999999999999;">
  4. <h4 style="padding-left: 10px;line-height: 0;">导出进度:</h4>
  5. <el-progress style="padding-left: 10px;" :text-inside="true" :stroke-width="26" :percentage="percentage" />
  6. </div>
  7. <el-tabs v-model="activeName" @tab-click="handleClick">
  8. <el-tab-pane label="备件退库" name="first">
  9. <div class="filter-container">
  10. <el-select v-model="getdataListParm.parammaps.pastureName" style="width: 140px;" placeholder="牧场" class="filter-item">
  11. <el-option v-for="item in findAllPasture" :key="item.id" :label="item.name" :value="item.name" />
  12. </el-select>
  13. <el-input v-model="getdataListParm.parammaps.orderNumber" placeholder="出库单号" style="width: 200px;" class="filter-item" />
  14. <el-date-picker ref="inputDatetime" v-model="getdataListParm.parammaps.inputDatetime" class="inputDatetime" type="datetimerange" style="width: 250px;top:-3px;" format="yyyy-MM-dd" value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" />
  15. <el-select v-model="getdataListParm.parammaps.easStatus" style="width: 150px;" clearable placeholder="EAS同步状态" class="filter-item">
  16. <el-option v-for="item in easStatus.easStatusList" :key="item.id" :label="item.name" :value="item.id" />
  17. </el-select>
  18. <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="form_search">搜索</el-button>
  19. <div>
  20. <el-button v-if="isRetreatAdd" class="filter-item" type="primary" icon="el-icon-edit" @click="form_add">新增</el-button>
  21. <el-button v-if="isEasSynchronization" class="filter-item" type="primary" style="float: right;" @click="handleEAS">EAS同步</el-button>
  22. <el-button class="filter-item" style="margin-left: 10px;" type="success" icon="el-icon-upload2" @click="sapUpload">SAP上传</el-button>
  23. </div>
  24. </div>
  25. <el-table
  26. :key="tableKey"
  27. v-loading="listLoading"
  28. element-loading-text="给我一点时间"
  29. :data="list"
  30. border
  31. fit
  32. highlight-current-row
  33. style="width: 100%;"
  34. :row-style="rowStyle"
  35. :cell-style="cellStyle"
  36. class="elTable"
  37. @selection-change="change_table_selection"
  38. @current-change="handleCurrentChange"
  39. >
  40. <el-table-column type="selection" :selectable="checkboxInit" align="center" width="50" />
  41. <el-table-column label="序号" align="center" type="index" width="50px">
  42. <template slot-scope="scope">
  43. <span>{{ scope.$index + (pageNum-1) * pageSize + 1 }}</span>
  44. </template>
  45. </el-table-column>
  46. <el-table-column label="出库单号" min-width="150px" align="center">
  47. <template slot-scope="scope">
  48. <span>{{ scope.row.useForm }}</span>
  49. </template>
  50. </el-table-column>
  51. <el-table-column label="牧场" min-width="90px" align="center">
  52. <template slot-scope="scope">
  53. <span>{{ scope.row.pastureName }}</span>
  54. </template>
  55. </el-table-column>
  56. <el-table-column label="部门" min-width="90px" align="center">
  57. <template slot-scope="scope">
  58. <span>{{ scope.row.departmentName }}</span>
  59. </template>
  60. </el-table-column>
  61. <el-table-column label="录入人" min-width="80px" align="center">
  62. <template slot-scope="scope">
  63. <span>{{ scope.row.quitName }}</span>
  64. </template>
  65. </el-table-column>
  66. <el-table-column label="退库日期" sortable prop="quitDate" min-width="80px" align="center" />
  67. <el-table-column label="EAS同步状态" min-width="120px" align="center">
  68. <template slot-scope="scope">
  69. <span>{{ scope.row.easStatus }}</span>
  70. </template>
  71. </el-table-column>
  72. <el-table-column prop="ProofCode" label="sap编码" min-width="80px" align="center">
  73. <template slot-scope="scope">
  74. <span>{{scope.row.ProofCode}}</span>
  75. </template>
  76. </el-table-column>
  77. <el-table-column prop="ProofCode" label="sap上传状态" min-width="80px" align="center">
  78. <template slot-scope="scope">
  79. <span v-if="scope.row.ProofCode">已上传</span>
  80. <span v-else>未上传</span>
  81. </template>
  82. </el-table-column>
  83. <el-table-column label="操作" align="center" width="250" class-name="small-padding fixed-width" fixed="right">
  84. <template slot-scope="{row}">
  85. <el-button v-if="isRetreatSee" type="primary" size="mini" @click="form_see(row)">查看</el-button>
  86. <el-button v-if="isRetreatDelate" type="danger" size="mini" @click="handleDelate(row)">删除</el-button>
  87. </template>
  88. </el-table-column>
  89. </el-table>
  90. <pagination v-show="total>0" :total="total" :page.sync="getdataListParm.offset" :limit.sync="getdataListParm.pagecount" @pagination="getList" />
  91. </el-tab-pane>
  92. <el-tab-pane label="退库记录" name="second">
  93. <div class="filter-container">
  94. <el-select v-model="getdataListParm2.parammaps.pastureName" style="width: 140px;" placeholder="牧场" class="filter-item">
  95. <el-option v-for="item in findAllPasture" :key="item.id" :label="item.name" :value="item.name" />
  96. </el-select>
  97. <el-input v-model="getdataListParm2.parammaps.useForm" placeholder="出库单号" style="width: 200px;" class="filter-item" />
  98. <el-input v-model="getdataListParm2.parammaps.partCode" placeholder="备件编号" style="width: 200px;" class="filter-item" />
  99. <el-input v-model="getdataListParm2.parammaps.partName" placeholder="备件名称" style="width: 200px;" class="filter-item" />
  100. <el-select v-model="getdataListParm2.parammaps.providerId" style="width: 140px;" filterable clearable placeholder="供应商" class="filter-item">
  101. <el-option v-for="item in findAllProvider" :key="item.id" :label="item.name" :value="item.id" />
  102. </el-select>
  103. <el-date-picker ref="inputDatetime2" v-model="getdataListParm2.parammaps.inputDatetime" class="inputDatetime" type="datetimerange" style="width: 250px;top:-3px;" format="yyyy-MM-dd" value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" />
  104. <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="form_search2">搜索</el-button>
  105. <div>
  106. <el-button v-if="isRetreatExport" v-waves class="filter-item" type="success" icon="el-icon-upload2" @click="handleDownload">导出</el-button>
  107. </div>
  108. </div>
  109. <el-table
  110. :key="tableKey2"
  111. v-loading="listLoading2"
  112. element-loading-text="给我一点时间"
  113. :data="list2"
  114. border
  115. fit
  116. highlight-current-row
  117. style="width: 100%;"
  118. :row-style="rowStyle"
  119. :cell-style="cellStyle"
  120. class="elTable table-fixed"
  121. @sort-change="tableSort1"
  122. >
  123. <el-table-column label="序号" align="center" type="index" width="50px">
  124. <template slot-scope="scope">
  125. <span>{{ scope.$index + (pageNum2-1) * pageSize2 + 1 }}</span>
  126. </template>
  127. </el-table-column>
  128. <el-table-column label="牧场" min-width="130px" align="center">
  129. <template slot-scope="scope">
  130. <span>{{ scope.row.pastureName }}</span><br>
  131. </template>
  132. </el-table-column>
  133. <el-table-column label="出库单号" align="center" min-width="150px">
  134. <template slot-scope="scope">
  135. <span>{{ scope.row.useForm }}</span>
  136. </template>
  137. </el-table-column>
  138. <el-table-column label="备件编号" min-width="150px" align="center">
  139. <template slot-scope="scope">
  140. <span>{{ scope.row.partCode }}</span><br>
  141. </template>
  142. </el-table-column>
  143. <el-table-column label="备件名称" align="center" min-width="150px">
  144. <template slot-scope="scope">
  145. <span>{{ scope.row.partName }}</span>
  146. </template>
  147. </el-table-column>
  148. <el-table-column label="备件规格" min-width="130px" align="center">
  149. <template slot-scope="scope">
  150. <span>{{ scope.row.specification }}</span><br>
  151. </template>
  152. </el-table-column>
  153. <el-table-column label="备件品牌" min-width="130px" align="center">
  154. <template slot-scope="scope">
  155. <span>{{ scope.row.brand }}</span><br>
  156. </template>
  157. </el-table-column>
  158. <el-table-column label="计量单位" align="center" min-width="100px">
  159. <template slot-scope="scope">
  160. <span>{{ scope.row.unit }}</span>
  161. </template>
  162. </el-table-column>
  163. <el-table-column label="供应商" min-width="130px" align="center">
  164. <template slot-scope="scope">
  165. <span>{{ scope.row.providerName }}</span><br>
  166. </template>
  167. </el-table-column>
  168. <el-table-column label="库位" align="center" min-width="130px">
  169. <template slot-scope="scope">
  170. <span>{{ scope.row.location }}</span>
  171. </template>
  172. </el-table-column>
  173. <el-table-column label="出库数量" sortable prop="useNumber" min-width="90px" align="center">
  174. <template slot-scope="scope">
  175. <span>{{ scope.row.useNumber }}</span><br>
  176. </template>
  177. </el-table-column>
  178. <el-table-column label="退库数量" sortable prop="quitNumber" min-width="90px" align="center">
  179. <template slot-scope="scope">
  180. <span>{{ scope.row.quitNumber }}</span><br>
  181. </template>
  182. </el-table-column>
  183. <el-table-column label="单价" sortable prop="price" min-width="90px" align="center">
  184. <template slot-scope="scope">
  185. <span>{{ scope.row.price }}</span><br>
  186. </template>
  187. </el-table-column>
  188. <el-table-column label="总价" sortable prop="sumPrice" min-width="90px" align="center">
  189. <template slot-scope="scope">
  190. <span>{{ scope.row.sumPrice }}</span><br>
  191. </template>
  192. </el-table-column>
  193. <el-table-column label="退库原因" align="center" min-width="90px">
  194. <template slot-scope="scope">
  195. <span>{{ scope.row.note }}</span>
  196. </template>
  197. </el-table-column>
  198. <el-table-column label="录入人" align="center" min-width="90px">
  199. <template slot-scope="scope">
  200. <span>{{ scope.row.quitName }}</span>
  201. </template>
  202. </el-table-column>
  203. <el-table-column label="退库日期" min-width="120px" align="center">
  204. <template slot-scope="scope">
  205. <span>{{ scope.row.quitDate }}</span><br>
  206. </template>
  207. </el-table-column>
  208. </el-table>
  209. <pagination v-show="total2>0" :total="total2" :page.sync="getdataListParm2.offset" :limit.sync="getdataListParm2.pagecount" @pagination="getList2" />
  210. </el-tab-pane>
  211. </el-tabs>
  212. <!-- 弹出层新增or修改 -->
  213. <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" :close-on-click-modal="false" width="90%">
  214. <div class="app-container">
  215. <el-form ref="createTemp" :rules="rules" :model="createTemp" label-position="right" label-width="100px" style="width: 90%;margin:0 auto;">
  216. <el-row>
  217. <el-col :span="8">
  218. <el-form-item label="出库单号:" prop="applyCode">
  219. <el-autocomplete
  220. v-model="createTemp.applyCode"
  221. value-key="useForm"
  222. class="inline-input"
  223. :fetch-suggestions="spareNumberSearch"
  224. placeholder="请输入出库单号"
  225. style="width:100%"
  226. @select="handleSelectSpareNumber"
  227. @blur="handleBlurSpareNumber"
  228. >
  229. <template slot-scope="{ item }">
  230. <span class="addr">{{ item.useForm }}</span>
  231. </template>
  232. </el-autocomplete>
  233. </el-form-item>
  234. </el-col>
  235. <el-col :span="8">
  236. <el-form-item label="牧场:" prop="pastureId">
  237. <el-select v-model="createTemp.pastureId" placeholder="牧场" class="filter-item" style="width:100%">
  238. <el-option
  239. v-for="item in findAllPasture"
  240. :key="item.id"
  241. :label="item.name"
  242. :value="item.id"
  243. />
  244. </el-select>
  245. </el-form-item>
  246. </el-col>
  247. <el-col :span="8">
  248. <el-form-item label="部门:" prop="deptId">
  249. <el-select v-model="createTemp.deptId" placeholder="部门" class="filter-item" style="width:100%">
  250. <el-option
  251. v-for="item in findAllDepart"
  252. :key="item.id"
  253. :label="item.name"
  254. :value="item.id"
  255. />
  256. </el-select>
  257. </el-form-item>
  258. </el-col>
  259. </el-row>
  260. <el-row>
  261. <el-col :span="8">
  262. <el-form-item label="录入人:" prop="quitId">
  263. <el-select v-model="createTemp.quitId" placeholder="录入人" class="filter-item" style="width:100%">
  264. <el-option
  265. v-for="item in findAllEmploye"
  266. :key="item.id"
  267. :label="item.name"
  268. :value="item.id"
  269. />
  270. </el-select>
  271. </el-form-item>
  272. </el-col>
  273. <el-col :span="8">
  274. <el-form-item label="退库日期" prop="quitDate">
  275. <el-date-picker
  276. v-model="createTemp.quitDate"
  277. :picker-options="pickerOptions"
  278. type="date"
  279. placeholder="退库日期"
  280. format="yyyy-MM-dd"
  281. value-format="yyyy-MM-dd"
  282. style="width:100%"
  283. />
  284. </el-form-item>
  285. </el-col>
  286. <el-col :span="8">
  287. <el-form-item label="退库原因:" prop="note">
  288. <el-input ref="note" v-model="createTemp.note" placeholder="退库原因" />
  289. </el-form-item>
  290. </el-col>
  291. </el-row>
  292. <el-row>
  293. <el-col :span="10">
  294. <el-form-item label="备件:" prop="partCode">
  295. <el-autocomplete
  296. v-model="createTemp.partCode"
  297. value-key="name"
  298. class="inline-input"
  299. :fetch-suggestions="sparePartSearch"
  300. placeholder="请输入备件编号或备件名称或备件规格"
  301. style="width:550px"
  302. @select="handleSelectSparePart"
  303. >
  304. <template slot-scope="{ item }">
  305. <b>备件编号:</b><div class="name" style="display: inline;">{{ item.partCode }}</div>&nbsp;
  306. | &nbsp;<b>备件名称:</b><span class="addr">{{ item.partName }}</span>&nbsp;
  307. | &nbsp;<b>备件规格:</b><span class="addr">{{ item.specification }}</span>
  308. </template>
  309. </el-autocomplete>
  310. </el-form-item>
  311. </el-col>
  312. </el-row>
  313. </el-form>
  314. <h5 style="float:right;">总金额:{{ TotalAmount }}</h5>
  315. <el-table
  316. :key="tableKey"
  317. v-loading="listLoading"
  318. element-loading-text="给我一点时间"
  319. :data="listAdd"
  320. border
  321. fit
  322. highlight-current-row
  323. style="width: 100%;margin-bottom:30px"
  324. :row-style="rowStyle"
  325. :cell-style="cellStyle"
  326. class="elTable"
  327. >
  328. <!-- table表格 -->
  329. <el-table-column label="序号" align="center" type="index" width="50px" />
  330. <el-table-column label="备件编号" prop="partCode" align="center" min-width="90">
  331. <template slot-scope="scope">
  332. <span>{{ scope.row.partCode }}</span>
  333. </template>
  334. </el-table-column>
  335. <el-table-column label="备件名称" prop="partName" align="center" min-width="90">
  336. <template slot-scope="scope">
  337. <span>{{ scope.row.partName }}</span>
  338. </template>
  339. </el-table-column>
  340. <el-table-column label="备件规格" prop="specification" min-width="80px" align="center">
  341. <template slot-scope="scope">
  342. <span>{{ scope.row.specification }}</span>
  343. </template>
  344. </el-table-column>
  345. <el-table-column label="备件图片" prop="picpath" min-width="110px" align="center">
  346. <template slot-scope="scope">
  347. <el-popover placement="right" title="" trigger="hover">
  348. <img v-if="scope.row.picpath !== ''" :src="scope.row.picpath">
  349. <img v-if="scope.row.picpath !== ''" slot="reference" :src="scope.row.picpath" :alt="scope.row.srcpath" style="height: 100px;width:100px;">
  350. </el-popover>
  351. </template>
  352. </el-table-column>
  353. <el-table-column label="备件品牌" prop="brandName" align="center" min-width="60">
  354. <template slot-scope="scope">
  355. <span>{{ scope.row.brandName }}</span>
  356. </template>
  357. </el-table-column>
  358. <el-table-column label="供应商" prop="providerName" align="center" min-width="60">
  359. <template slot-scope="scope">
  360. <span>{{ scope.row.providerName }}</span>
  361. </template>
  362. </el-table-column>
  363. <el-table-column label="计量单位" prop="unit" align="center" min-width="60">
  364. <template slot-scope="scope">
  365. <span>{{ scope.row.unit }}</span>
  366. </template>
  367. </el-table-column>
  368. <el-table-column label="库位" prop="warehoseCode" align="center" min-width="60">
  369. <template slot-scope="scope">
  370. <span>{{ scope.row.warehoseCode }}</span>
  371. </template>
  372. </el-table-column>
  373. <el-table-column label="已退库数量" prop="quitNumberC" align="center" min-width="60">
  374. <template slot-scope="scope">
  375. <span>{{ scope.row.quitNumberC }}</span>
  376. </template>
  377. </el-table-column>
  378. <el-table-column label="已出库数量" prop="checkoutNumber" align="center" min-width="60">
  379. <template slot-scope="scope">
  380. <span>{{ scope.row.checkoutNumber }}</span>
  381. </template>
  382. </el-table-column>
  383. <el-table-column label="退库数量" min-width="120px" align="center" valign="middle">
  384. <template slot-scope="scope">
  385. <el-form :model="scope.row" :rules="rules">
  386. <el-form-item prop="quitNumber">
  387. <el-input v-model="scope.row.quitNumber" style="margin-top:15px" @blur="blurQuitNumber" />
  388. </el-form-item>
  389. </el-form>
  390. </template>
  391. </el-table-column>
  392. <el-table-column label="单价" min-width="110px" align="center" valign="middle">
  393. <template slot-scope="scope">
  394. <span>{{ scope.row.price }}</span>
  395. </template>
  396. </el-table-column>
  397. <el-table-column label="总价" min-width="110px" align="center" valign="middle">
  398. <template slot-scope="scope">
  399. <span>{{ scope.row.price * parseFloat(scope.row.quitNumber) | keepTwoNum }}</span>
  400. </template>
  401. </el-table-column>
  402. <el-table-column label="操作" align="center" width="100" class-name="small-padding fixed-width" fixed="right">
  403. <template slot-scope="{row}">
  404. <a class="del" @click="partDelete(row)">删除</a>
  405. </template>
  406. </el-table-column>
  407. </el-table>
  408. <div slot="footer" class="dialog-footer" style="bottom:10px">
  409. <el-button type="primary" :disabled="isokDisable" @click="dialogStatus==='create'?add_dialog_save():edit_dialog_save()">保存并关闭</el-button>
  410. <el-button @click="dialogFormVisible = false;getList()">取消并关闭</el-button>
  411. </div>
  412. </div>
  413. </el-dialog>
  414. <!-- 查看 -->
  415. <el-dialog :title="textMap[dialogStatusSee]" :visible.sync="dialogFormVisibleSee" :close-on-click-modal="false" width="90%">
  416. <div class="app-containerSee">
  417. <el-form ref="seeTemp" :rules="rules" :model="seeTemp" label-position="right" label-width="100px" style="width: 90%;margin:0 auto;">
  418. <el-row>
  419. <el-col :span="8">
  420. <el-form-item label="出库单号:" prop="useForm">
  421. <el-input ref="useForm" v-model="seeTemp.useForm" disabled />
  422. </el-form-item>
  423. </el-col>
  424. <el-col :span="8">
  425. <el-form-item label="牧场:" prop="pastureName">
  426. <el-input ref="pastureName" v-model="seeTemp.pastureName" disabled />
  427. </el-form-item>
  428. </el-col>
  429. <el-col :span="8">
  430. <el-form-item label="部门:" prop="departmentName">
  431. <el-input ref="departmentName" v-model="seeTemp.departmentName" disabled />
  432. </el-form-item>
  433. </el-col>
  434. </el-row>
  435. <el-row>
  436. <el-col :span="8">
  437. <el-form-item label="录入人:" prop="quitName">
  438. <el-input ref="quitName" v-model="seeTemp.quitName" disabled />
  439. </el-form-item>
  440. </el-col>
  441. <el-col :span="8">
  442. <el-form-item label="退库日期:" prop="quitDate">
  443. <el-input ref="quitDate" v-model="seeTemp.quitDate" disabled />
  444. </el-form-item>
  445. </el-col>
  446. <el-col :span="8">
  447. <el-form-item label="退库原因:" prop="note">
  448. <el-input ref="note" v-model="seeTemp.note" disabled />
  449. </el-form-item>
  450. </el-col>
  451. </el-row>
  452. </el-form>
  453. <h5 style="float:right;">总金额:{{ TotalAmount }}</h5>
  454. <el-table
  455. :key="tableKey"
  456. v-loading="listLoadingSee"
  457. element-loading-text="给我一点时间"
  458. :data="listSee"
  459. border
  460. fit
  461. highlight-current-row
  462. style="width: 100%;margin-bottom:30px"
  463. :row-style="rowStyle"
  464. :cell-style="cellStyle"
  465. class="elTable"
  466. @sort-change="tableSort2"
  467. >
  468. <el-table-column label="序号" align="center" type="index" width="50px" />
  469. <el-table-column label="备件编号" prop="partCode" align="center" min-width="90">
  470. <template slot-scope="scope">
  471. <span>{{ scope.row.partCode }}</span>
  472. </template>
  473. </el-table-column>
  474. <el-table-column label="备件名称" prop="partName" align="center" min-width="90">
  475. <template slot-scope="scope">
  476. <span>{{ scope.row.partName }}</span>
  477. </template>
  478. </el-table-column>
  479. <el-table-column label="备件规格" prop="specification" min-width="80px" align="center">
  480. <template slot-scope="scope">
  481. <span>{{ scope.row.specification }}</span>
  482. </template>
  483. </el-table-column>
  484. <el-table-column label="备件图片" prop="picpath" min-width="110px" align="center">
  485. <template slot-scope="scope">
  486. <el-popover placement="right" title="" trigger="hover">
  487. <img v-if="scope.row.picpath !== ''" :src="scope.row.picpath">
  488. <img v-if="scope.row.picpath !== ''" slot="reference" :src="scope.row.picpath" :alt="scope.row.srcpath" style="height: 100px;width:100px;">
  489. </el-popover>
  490. </template>
  491. </el-table-column>
  492. <el-table-column label="备件品牌" prop="brand" align="center" min-width="60">
  493. <template slot-scope="scope">
  494. <span>{{ scope.row.brand }}</span>
  495. </template>
  496. </el-table-column>
  497. <el-table-column label="供应商" prop="providerName" align="center" min-width="60">
  498. <template slot-scope="scope">
  499. <span>{{ scope.row.providerName }}</span>
  500. </template>
  501. </el-table-column>
  502. <el-table-column label="计量单位" min-width="120px" align="center" valign="middle">
  503. <template slot-scope="scope">
  504. <span>{{ scope.row.unit }}</span>
  505. </template>
  506. </el-table-column>
  507. <el-table-column label="库位" min-width="120px" align="center" valign="middle">
  508. <template slot-scope="scope">
  509. <span>{{ scope.row.location }}</span>
  510. </template>
  511. </el-table-column>
  512. <el-table-column label="已退库数量" sortable prop="applyNumber" min-width="120px" align="center" valign="middle">
  513. <template slot-scope="scope">
  514. <span>{{ scope.row.applyNumber }}</span>
  515. </template>
  516. </el-table-column>
  517. <el-table-column label="已出库数量" sortable prop="useNumber" min-width="120px" align="center" valign="middle">
  518. <template slot-scope="scope">
  519. <span>{{ scope.row.useNumber }}</span>
  520. </template>
  521. </el-table-column>
  522. <el-table-column label="退库数量" sortable prop="quitNumber" min-width="120px" align="center" valign="middle">
  523. <template slot-scope="scope">
  524. <span>{{ scope.row.quitNumber }}</span>
  525. </template>
  526. </el-table-column>
  527. <el-table-column label="单价" sortable prop="price" min-width="110px" align="center" valign="middle">
  528. <template slot-scope="scope">
  529. <span>{{ scope.row.price }}</span>
  530. </template>
  531. </el-table-column>
  532. <el-table-column label="总价" sortable prop="sumPrice" min-width="110px" align="center" valign="middle">
  533. <template slot-scope="scope">
  534. <span>{{ scope.row.sumPrice }}</span>
  535. </template>
  536. </el-table-column>
  537. </el-table>
  538. <div slot="footer" class="dialog-footer" style="bottom:5px;">
  539. <el-button @click="dialogFormVisibleSee = false">关闭</el-button>
  540. </div>
  541. </div>
  542. </el-dialog>
  543. <!-- EAS同步 -->
  544. <el-dialog :title="textMap[easStatus.dialogStatus]" :visible.sync="easStatus.dialogFormVisible" :close-on-click-modal="false" width="80%">
  545. <div class="easStatus">
  546. <el-table
  547. :key="easStatus.tableKey"
  548. v-loading="easStatus.listLoading"
  549. element-loading-text="给我一点时间"
  550. :data="easStatus.list"
  551. border
  552. fit
  553. highlight-current-row
  554. style="width: 100%;"
  555. :row-style="rowStyle"
  556. :cell-style="cellStyle"
  557. class="elTable table-fixed"
  558. >
  559. <el-table-column label="序号" align="center" type="index" width="50px">
  560. <template slot-scope="scope">
  561. <span>{{ scope.$index + (pageNum-1) * pageSize + 1 }}</span>
  562. </template>
  563. </el-table-column>
  564. <el-table-column label="出库单号" min-width="110px" align="center" prop="useForm" />
  565. <el-table-column label="牧场" min-width="110px" align="center" prop="pastureName" />
  566. <el-table-column label="部门" min-width="110px" align="center" prop="departmentName" />
  567. <el-table-column label="录入人" min-width="110px" align="center" prop="empName" />
  568. <el-table-column label="退库日期" min-width="110px" align="center" prop="createTime" />
  569. <el-table-column label="失败原因" min-width="110px" align="center" prop="failReason" />
  570. <el-table-column label="操作" align="center" width="300px" class-name="small-padding fixed-width" fixed="right">
  571. <template slot-scope="{row}">
  572. <el-button v-if="isManualSynchronization" type="primary" size="mini" style="width:70px;" @click="handleManual(row)">手动同步</el-button>
  573. <el-button v-if="isCloseSynchronization" type="danger" size="mini" style="width:70px;" @click="handleClose(row)">关闭同步</el-button>
  574. <el-button v-if="isIgnoreSynchronization" type="danger" size="mini" style="width:70px;" @click="handleIgnore(row)">忽略同步</el-button>
  575. </template>
  576. </el-table-column>
  577. </el-table>
  578. <pagination v-show="easStatus.total>0" :total="easStatus.total" :page.sync="easStatus.getdataListParm.offset" :limit.sync="easStatus.getdataListParm.pagecount" @pagination="getListEasStatusLst" />
  579. </div>
  580. <div slot="footer" class="dialog-footer" style="bottom: 10px;">
  581. <el-button @click="easStatus.dialogFormVisible = false;getList()">关闭</el-button>
  582. </div>
  583. </el-dialog>
  584. </div>
  585. </template>
  586. <script>
  587. // / 引入
  588. import { GetDataByName, GetDataByNames, ExecDataByConfig, GetAccount, PostDataByName, EasSync, checkButtons,SapQuit } from '@/api/common'
  589. import waves from '@/directive/waves' // waves directive
  590. import { parseTime, sortChange, json2excel } from '@/utils/index.js'
  591. // eslint-disable-next-line no-unused-vars
  592. import { validateEMail } from '@/utils/validate.js'
  593. import Pagination from '@/components/Pagination' // secondary package based on el-pagination
  594. import { MessageBox } from 'element-ui'
  595. import Cookies from 'js-cookie'
  596. export default {
  597. isSap:1,
  598. isSrm:1,
  599. selectList: [],
  600. name: 'Retreat',
  601. components: { Pagination },
  602. directives: { waves },
  603. filters: {
  604. keepTwoNum(value) {
  605. value = Number(value)
  606. return value.toFixed(2)
  607. }
  608. },
  609. data() {
  610. return {
  611. buttons: [],
  612. currentRow:{},
  613. isRetreatsap: [],
  614. isRetreatSee: [], isRetreatExport: [], isRetreatAdd: [], isRetreatDelate: [],
  615. isEasSynchronization: [], isManualSynchronization: [], isCloseSynchronization: [], isIgnoreSynchronization: [],
  616. isokDisable: false,
  617. findAllProvider: [],
  618. findAllPasture: [],
  619. findAllDepart: [],
  620. findAllEmploye: [],
  621. requestParams: [
  622. { name: 'findAllProvider', offset: 0, pagecount: 0, params: [] },
  623. { name: 'findAllPasture', offset: 0, pagecount: 0, returntype: 'Map', parammaps: { 'id': Cookies.get('pastureid') }},
  624. { name: 'findAllDepart', offset: 0, pagecount: 0, parammaps: { 'pastureId': Cookies.get('pastureid'), 'eId': Cookies.get('employeid') }},
  625. { name: 'findAllEmploye', offset: 0, pagecount: 0, parammaps: { 'pastureId': Cookies.get('pastureid') }}
  626. ],
  627. pickerOptions: {
  628. disabledDate(time) {
  629. return time.getTime() > Date.now()// 当天之前的时间可选
  630. }
  631. },
  632. textMap: {
  633. zgExamine: '主管审核',
  634. kgExamine: '库管审核',
  635. zlExamine: '审核',
  636. update: '编辑',
  637. create: '新增',
  638. see: '查看',
  639. ImportInfo: '导入信息',
  640. easStatus: 'EAS同步—同步失败数据'
  641. },
  642. rules: {
  643. applyCode: [{ required: true, message: '必填', trigger: 'blur' }]
  644. },
  645. rowStyle: { maxHeight: 50 + 'px', height: 45 + 'px' },
  646. cellStyle: { padding: 0 + 'px' },
  647. statues: [{ id: '1', name: '审核中' }, { id: '2', name: '已通过' }, { id: '3', name: '未通过' }],
  648. getdataListParm: {
  649. name: 'getBigPartquitlist',
  650. page: 1,
  651. offset: 1,
  652. pagecount: 10,
  653. returntype: 'Map',
  654. parammaps: {
  655. pastureName: Cookies.get('pasturename'),
  656. useForm: '',
  657. inputDatetime: '',
  658. startTime: '',
  659. stopTime: '',
  660. easStatus: ''
  661. }
  662. },
  663. tableKey: 0,
  664. listLoading: true,
  665. total: 0,
  666. list: [],
  667. activeName: 'first',
  668. tableKey2: 0,
  669. listLoading2: true,
  670. total2: 0,
  671. list2: [],
  672. getdataListParm2: {
  673. name: 'getPartquitDetaillist',
  674. page: 1,
  675. offset: 1,
  676. pagecount: 10,
  677. returntype: 'Map',
  678. parammaps: {
  679. inputDatetime: '',
  680. useForm: '',
  681. startTime: '',
  682. stopTime: '',
  683. partCode: '',
  684. partName: '',
  685. providerId: '',
  686. pastureName: Cookies.get('pasturename')
  687. }
  688. },
  689. requestParam: {
  690. name: 'insertAsset',
  691. offset: 0,
  692. pagecount: 0,
  693. parammaps: {}
  694. },
  695. listLoadingSee: true,
  696. listSee: [],
  697. totalSee: 0,
  698. dialogStatusSee: '',
  699. dialogFormVisibleSee: false,
  700. seeTemp: {},
  701. getdataListSee: {
  702. name: 'getPartquitlist',
  703. returntype: 'Map',
  704. parammaps: {}
  705. },
  706. dialogFormVisible: false,
  707. dialogStatus: '',
  708. createTemp: {
  709. useForm: '',
  710. applyCode: '',
  711. quitDate: parseTime(new Date(), '{y}-{m}-{d}'),
  712. deptId: this.$store.state.user.departmentid,
  713. quitId: this.$store.state.user.employeid,
  714. note: '',
  715. pastureId: this.$store.state.user.pastureid
  716. },
  717. requestSparePart: {
  718. name: 'getpartUseListBybigTK',
  719. page: 1,
  720. offset: 1,
  721. pagecount: 20,
  722. returntype: 'Map',
  723. parammaps: {}
  724. },
  725. requestSpareNumber: {
  726. name: 'getBigpartusecode',
  727. page: 1,
  728. offset: 1,
  729. pagecount: 10,
  730. returntype: 'Map',
  731. parammaps: {
  732. pastureId: Cookies.get('pastureid')
  733. }
  734. },
  735. getParmCreateAmount: {
  736. name: 'getPartsAmountList',
  737. page: 0,
  738. offset: 0,
  739. pagecount: 0,
  740. returntype: 'Map',
  741. parammaps: {
  742. pastureId: Cookies.get('pastureid')
  743. }
  744. },
  745. listAdd: [],
  746. postDataPramas: {},
  747. downloadParam: {},
  748. TotalAmount: 0,
  749. isPercentage: false,
  750. percentage: 1,
  751. // EAS同步
  752. easStatus: {
  753. easStatusList: [{ name: '同步成功', id: '1' }, { name: '同步失败', id: '0' }, { name: '关闭同步', id: '2' }],
  754. dialogStatus: '',
  755. dialogFormVisible: false,
  756. tableKey: 0,
  757. total: 0,
  758. listLoading: true,
  759. list: [],
  760. getdataListParm: {
  761. name: 'getbigpartquitSync',
  762. page: 1,
  763. offset: 1,
  764. pagecount: 10,
  765. returntype: 'Map',
  766. parammaps: {
  767. pastureid: Cookies.get('pastureid')
  768. }
  769. }
  770. }
  771. }
  772. },
  773. computed: {
  774. },
  775. watch: {
  776. listAdd: {
  777. deep: true,
  778. handler: function (item) {
  779. this.listAdd.forEach(function(i){
  780. if(parseInt(i.quitNumber) > (parseInt(i.checkoutNumber)-parseInt(i.quitNumberC))){
  781. i.quitNumber = parseInt(i.checkoutNumber)-parseInt(i.quitNumberC)
  782. }
  783. })
  784. }
  785. },
  786. },
  787. created() {
  788. const that = this
  789. GetDataByName({ 'name': 'getUserPCButtons', 'parammaps': { 'jwt_username': Cookies.get('name') }}).then(response => {
  790. that.buttons = response.data.list
  791. console.log(that.buttons, 'that.buttons')
  792. that.get_auto_buttons()
  793. })
  794. this.get_select_list()
  795. this.getList()
  796. },
  797. methods: {
  798. tableSort1(column) {
  799. sortChange(column, this.list2)
  800. },
  801. tableSort2(column) {
  802. sortChange(column, this.listSee)
  803. },
  804. get_auto_buttons() {
  805. const RetreatAdd = 'customs:Retreat:add'
  806. const isRetreatAdd = checkButtons(this.$store.state.user.buttons, RetreatAdd)
  807. this.isRetreatAdd = isRetreatAdd
  808. const Retreatsap = 'customs:Retreat:sap'
  809. const isRetreatsap = checkButtons(this.$store.state.user.buttons, Retreatsap)
  810. this.isRetreatsap = isRetreatsap
  811. const RetreatSee = 'customs:Retreat:see'
  812. const isRetreatSee = checkButtons(this.$store.state.user.buttons, RetreatSee)
  813. this.isRetreatSee = isRetreatSee
  814. const RetreatExport = 'customs:Retreat:export'
  815. const isRetreatExport = checkButtons(this.$store.state.user.buttons, RetreatExport)
  816. this.isRetreatExport = isRetreatExport
  817. const RetreatDelate = 'customs:Retreat:delate'
  818. const isRetreatDelate = checkButtons(this.$store.state.user.buttons, RetreatDelate)
  819. this.isRetreatDelate = isRetreatDelate
  820. const EasSynchronization = 'customs:retreat:easSynchronization'
  821. const isEasSynchronization = checkButtons(this.$store.state.user.buttons, EasSynchronization)
  822. this.isEasSynchronization = isEasSynchronization
  823. const ManualSynchronization = 'customs:retreat:manualSynchronization'
  824. const isManualSynchronization = checkButtons(this.$store.state.user.buttons, ManualSynchronization)
  825. this.isManualSynchronization = isManualSynchronization
  826. const CloseSynchronization = 'customs:retreat:closeSynchronization'
  827. const isCloseSynchronization = checkButtons(this.$store.state.user.buttons, CloseSynchronization)
  828. this.isCloseSynchronization = isCloseSynchronization
  829. const IgnoreSynchronization = 'customs:retreat:ignoreSynchronization'
  830. const isIgnoreSynchronization = checkButtons(this.$store.state.user.buttons, IgnoreSynchronization)
  831. this.isIgnoreSynchronization = isIgnoreSynchronization
  832. },
  833. getList() {
  834. this.listLoading = true
  835. if (this.$refs['inputDatetime'] !== undefined && this.$refs['inputDatetime'].value !== null) {
  836. this.getdataListParm.parammaps.startTime = this.$refs['inputDatetime'].value[0]
  837. this.getdataListParm.parammaps.stopTime = this.$refs['inputDatetime'].value[1]
  838. } else {
  839. this.getdataListParm.parammaps.startTime = ''
  840. this.getdataListParm.parammaps.stopTime = ''
  841. }
  842. GetDataByName(this.getdataListParm).then(response => {
  843. console.log('table数据', response.data.list)
  844. this.list = response.data.list
  845. this.pageNum = response.data.pageNum
  846. this.pageSize = response.data.pageSize
  847. if (response.data.total) {
  848. this.total = response.data.total
  849. }
  850. // Just to simulate the time of the request
  851. setTimeout(() => {
  852. this.listLoading = false
  853. }, 100)
  854. })
  855. },
  856. statue: function(cellValue) {
  857. // console.log(cellValue.isZeroStock)
  858. if (cellValue.statue == 0) {
  859. return '审核中'
  860. } else if (cellValue.statue == 1) {
  861. return '已通过'
  862. } else {
  863. return '未通过'
  864. }
  865. },
  866. form_search() {
  867. console.log('点击了table搜索')
  868. if (this.getdataListParm.parammaps.inputDatetime === null) {
  869. this.getdataListParm.parammaps.inputDatetime = ''
  870. }
  871. this.getdataListParm.offset = 1
  872. this.listLoading = true
  873. this.getList()
  874. },
  875. handleClick(tab, event) {
  876. console.log(tab, event)
  877. if (tab.name === 'second') {
  878. this.getList2()
  879. } else {
  880. this.getList()
  881. }
  882. },
  883. getList2() {
  884. this.listLoading2 = true
  885. if (this.$refs['inputDatetime2'] !== undefined && this.$refs['inputDatetime2'].value !== null) {
  886. this.getdataListParm2.parammaps.startTime = this.$refs['inputDatetime2'].value[0]
  887. this.getdataListParm2.parammaps.stopTime = this.$refs['inputDatetime2'].value[1]
  888. } else {
  889. this.getdataListParm2.parammaps.startTime = ''
  890. this.getdataListParm2.parammaps.stopTime = ''
  891. }
  892. GetDataByName(this.getdataListParm2).then(response => {
  893. console.log('table数据', response.data.list)
  894. this.list2 = response.data.list
  895. this.pageNum2 = response.data.pageNum
  896. this.pageSize2 = response.data.pageSize
  897. if (response.data.total) {
  898. this.total2 = response.data.total
  899. }
  900. setTimeout(() => {
  901. this.listLoading2 = false
  902. }, 100)
  903. })
  904. },
  905. form_search2() {
  906. this.listLoading2 = true
  907. if (this.getdataListParm2.parammaps.inputDatetime === null) {
  908. this.getdataListParm2.parammaps.inputDatetime = ''
  909. }
  910. this.getdataListParm2.offset = 1
  911. this.getList2()
  912. },
  913. resetCreateTemp() {
  914. this.createTemp.useForm = ''
  915. this.createTemp.pastureId = this.$store.state.user.pastureid
  916. this.createTemp.deptId = this.$store.state.user.departmentid
  917. this.createTemp.applyCode = ''
  918. this.createTemp.note = ''
  919. this.createTemp.quitId = this.$store.state.user.employeid
  920. this.createTemp.quitDate = parseTime(new Date(), '{y}-{m}-{d}')
  921. this.listAdd = []
  922. this.TotalAmount = 0
  923. this.createTemp.id = ''
  924. },
  925. form_add() {
  926. this.resetCreateTemp()
  927. this.dialogStatus = 'create'
  928. this.dialogFormVisible = true
  929. },
  930. spareNumberSearch(queryString, cb) {
  931. console.log('出库单号模糊查询输入值', queryString)
  932. this.requestSpareNumber.parammaps['applyCode'] = queryString
  933. GetDataByName(this.requestSpareNumber).then(response => {
  934. console.log('出库单号模糊查询搜索data', response.data.list)
  935. cb(response.data.list)
  936. })
  937. },
  938. handleSelectSpareNumber(item) {
  939. console.log('出库单号模糊查询选中值', item)
  940. console.log('出库单号模糊查询选中值', item.id)
  941. this.createTemp.applyCode = item.useForm
  942. this.createTemp.id = item.id
  943. this.listAdd = []
  944. this.TotalAmount = 0
  945. this.$forceUpdate()
  946. },
  947. sparePartSearch(queryString, cb) {
  948. console.log('备件模糊查询输入值', queryString)
  949. this.requestSparePart.parammaps.id = this.createTemp.id
  950. this.requestSparePart.parammaps['partCode'] = queryString
  951. GetDataByName(this.requestSparePart).then(response => {
  952. console.log('备件模糊查询搜索data', response.data.list)
  953. if (response.data.list == null) {
  954. cb([])
  955. } else {
  956. cb(response.data.list)
  957. }
  958. })
  959. },
  960. handleCurrentChange(val) {
  961. this.currentRow = val;
  962. console.log("currentRow",this.currentRow)
  963. },
  964. checkboxInit(row,index){
  965. // console.log(row)
  966. if(row.ProofCode){
  967. return 0
  968. } else {
  969. var data1 = new Date(row.creatTime)
  970. var data2 = new Date('2022-10-25')
  971. if(data1 > data2){ return 1 } else {return 0}
  972. }
  973. },
  974. //监听 - 表格 - 勾选
  975. change_table_selection(val) {
  976. this.selectList = val
  977. console.log('勾选数据selectList', this.selectList)
  978. },
  979. sapUpload(){
  980. const that = this
  981. console.log("currentRow ProofCode",this.currentRow.ProofCode)
  982. var send_data = this.selectList
  983. if(send_data.length == 0){
  984. that.$notify({ title: '失败', message: '请勾选数据!' , type: 'error', duration: 2000 })
  985. return false
  986. }
  987. console.log(that.isSap)
  988. if(that.isSap == 1){
  989. that.isSap = 0
  990. SapQuit(send_data).then(response => {
  991. console.log('response', response)
  992. if (response.msg !== 'fail') {
  993. that.$notify({ title: '成功', message: '上传成功', type: 'success', duration: 2000 })
  994. that.selectList = []
  995. that.getList()
  996. } else {
  997. that.$notify({ title: '失败', message: '上传失败' , type: 'error', duration: 2000 })
  998. }
  999. })
  1000. } else {
  1001. that.$notify({ title: '失败', message: '正在请求中,请稍等几秒钟后再点击' , type: 'error', duration: 2000 })
  1002. }
  1003. setTimeout(() => {
  1004. that.isSap = 1
  1005. }, 3000)
  1006. // if(true){
  1007. // if(this.currentRow.ProofCode){
  1008. // console.log("currentRow ProofCode 这个值说明已经上传了,不用上传")
  1009. // //如果有这个值说明已经上传了,不用上传
  1010. // } else {
  1011. // console.log("currentRow ProofCode没有这个值")
  1012. // console.log("currentRow ProofCode",this.currentRow.ProofCode)
  1013. // const useForm = this.currentRow.useForm
  1014. // const creatTime = this.currentRow.creatTime
  1015. // console.log("useForm",useForm)
  1016. // var send_data = {
  1017. // "useForm":useForm,
  1018. // "quitDate":creatTime,
  1019. // "pastureid":Cookies.get('pastureid')
  1020. // }
  1021. // SapQuit(send_data).then(response => {
  1022. // console.log('response', response)
  1023. // if (response.msg !== 'fail') {
  1024. // that.$notify({ title: '成功', message: '上传成功', type: 'success', duration: 2000 })
  1025. // that.getList()
  1026. // } else {
  1027. // that.$notify({ title: '失败', message: '上传失败' , type: 'error', duration: 2000 })
  1028. // }
  1029. // })
  1030. // }
  1031. },
  1032. handleBlurSpareNumber() {
  1033. this.createTemp.applyCode = ''
  1034. this.createTemp.id = ''
  1035. },
  1036. handleSelectSparePart(item) {
  1037. console.log('备件模糊查询选中值', item)
  1038. this.$set(item, 'sumPrice', (parseFloat(item.quitNumber) * parseFloat(item.price)).toFixed(2))
  1039. console.log('备件模糊查询选中值', item.id)
  1040. console.log(this.listAdd)
  1041. this.TotalAmount = 0
  1042. if (this.listAdd.length > 0) {
  1043. if (this.listAdd.find(obj => obj.id === item.id)) {
  1044. this.$message({
  1045. type: 'warning',
  1046. message: '此备件已存在,请重新选择备件'
  1047. })
  1048. for (let i = 0; i < this.listAdd.length; i++) {
  1049. this.TotalAmount += parseFloat(this.listAdd[i].quitNumber) * parseFloat(this.listAdd[i].price)
  1050. this.TotalAmount = parseFloat((this.TotalAmount).toFixed(2))
  1051. }
  1052. } else {
  1053. this.getParmCreateAmount.parammaps.partCode = item.partCode
  1054. GetDataByName(this.getParmCreateAmount).then(response => {
  1055. this.$nextTick(() => {
  1056. console.log('新增根据编号获取备件库存数量', response.data.list[0].reporteryNum)
  1057. item.reportery = response.data.list[0].reporteryNum
  1058. this.listAdd.unshift(item)
  1059. for (let i = 0; i < this.listAdd.length; i++) {
  1060. this.TotalAmount += parseFloat(this.listAdd[i].quitNumber) * parseFloat(this.listAdd[i].price)
  1061. this.TotalAmount = parseFloat((this.TotalAmount).toFixed(2))
  1062. }
  1063. if (item.srcpath !== null && item.picpath !== null && item.srcpath !== undefined && item.picpath !== undefined) {
  1064. this.$set(item, 'srcpath', process.env.VUE_APP_BASE_API + item.srcpath)
  1065. this.$set(item, 'picpath', process.env.VUE_APP_BASE_API + item.picpath)
  1066. } else {
  1067. item.srcpath = ''
  1068. item.picpath = ''
  1069. }
  1070. this.$forceUpdate()
  1071. })
  1072. })
  1073. console.log(this.listAdd.length)
  1074. }
  1075. } else {
  1076. this.getParmCreateAmount.parammaps.partCode = item.partCode
  1077. GetDataByName(this.getParmCreateAmount).then(response => {
  1078. this.$nextTick(() => {
  1079. console.log('新增根据编号获取备件库存数量', response.data.list[0].reporteryNum)
  1080. this.$set(item, 'reportery', response.data.list[0].reporteryNum)
  1081. // item.reportery = response.data.list[0].reporteryNum
  1082. this.listAdd.unshift(item)
  1083. for (let i = 0; i < this.listAdd.length; i++) {
  1084. this.TotalAmount += parseFloat(this.listAdd[i].quitNumber) * parseFloat(this.listAdd[i].price)
  1085. this.TotalAmount = parseFloat((this.TotalAmount).toFixed(2))
  1086. }
  1087. if (item.srcpath !== null && item.picpath !== null && item.srcpath !== undefined && item.picpath !== undefined) {
  1088. this.$set(item, 'srcpath', process.env.VUE_APP_BASE_API + item.srcpath)
  1089. this.$set(item, 'picpath', process.env.VUE_APP_BASE_API + item.picpath)
  1090. } else {
  1091. item.srcpath = ''
  1092. item.picpath = ''
  1093. }
  1094. this.$forceUpdate()
  1095. })
  1096. })
  1097. }
  1098. this.$forceUpdate()
  1099. },
  1100. blurQuitNumber() {
  1101. this.TotalAmount = 0
  1102. for (let i = 0; i < this.listAdd.length; i++) {
  1103. // console.log((parseFloat(this.listAdd[i].price) * parseFloat(this.listAdd[i].quitNumber)).toFixed(2))
  1104. this.TotalAmount += parseFloat(this.listAdd[i].price) * parseFloat(this.listAdd[i].quitNumber)
  1105. this.TotalAmount = parseFloat((this.TotalAmount).toFixed(2))
  1106. }
  1107. },
  1108. add_dialog_save() {
  1109. this.isokDisable = true
  1110. setTimeout(() => {
  1111. this.isokDisable = false
  1112. }, 1000)
  1113. this.$refs['createTemp'].validate(valid => {
  1114. if (valid) {
  1115. console.log(this.listAdd)
  1116. if (this.listAdd.length !== 0) {
  1117. for (var j = 0; j < this.listAdd.length; j++) {
  1118. console.log(this.listAdd[j].refundNumber)
  1119. // eslint-disable-next-line use-isnan
  1120. if (this.listAdd[j].quitNumber == null || this.listAdd[j].quitNumber === '') {
  1121. this.$message({
  1122. type: 'warning',
  1123. message: '请检查退库数量是否未填写',
  1124. duration: 2000
  1125. })
  1126. return false
  1127. } else {
  1128. var rulesQuitNumber = /(^[1-9](\d+)?(\.\d{1,2})?$)|(^\d\.\d{1,2}$)/
  1129. console.log(this.listAdd[j].quitNumber)
  1130. console.log(this.listAdd[j].checkoutNumber)
  1131. // 领用数量quitNumberC已出库数量checkoutNumber退库数量quitNumber
  1132. console.log('退库数量', this.listAdd[j].quitNumber)
  1133. console.log('已出库数量', this.listAdd[j].checkoutNumber)
  1134. console.log('领用数量', this.listAdd[j].quitNumberC)
  1135. var minNumber = parseFloat(this.listAdd[j].checkoutNumber) - parseFloat(this.listAdd[j].quitNumberC)
  1136. console.log(minNumber)
  1137. if (!rulesQuitNumber.test(parseFloat(this.listAdd[j].quitNumber))) {
  1138. this.$message({
  1139. type: 'error',
  1140. message: '退库数量请输入正数,最多保留两位小数点',
  1141. duration: 2000
  1142. })
  1143. return false
  1144. } else if (parseFloat(this.listAdd[j].quitNumber) > minNumber) {
  1145. this.$message({
  1146. type: 'error',
  1147. message: '退库数量不可大于出库数量-已退库数量',
  1148. duration: 2000
  1149. })
  1150. return false
  1151. }
  1152. }
  1153. }
  1154. this.postDataPramas.common = { 'returnmap': '0' }
  1155. this.postDataPramas.data = []
  1156. this.postDataPramas.data[0] = { 'name': 'insertBigPartquit', 'type': 'e', 'parammaps': {
  1157. pastureId: this.createTemp.pastureId,
  1158. deptId: this.createTemp.deptId,
  1159. useForm: this.createTemp.applyCode,
  1160. employeId: this.createTemp.employeId,
  1161. quitId: this.createTemp.quitId,
  1162. quitDate: this.createTemp.quitDate,
  1163. note: this.createTemp.note
  1164. }}
  1165. // eslint-disable-next-line no-irregular-whitespace
  1166. this.postDataPramas.data[1] = { 'name': 'insertSpotList', 'resultmaps': { 'list': this.listAdd }}
  1167. this.postDataPramas.data[1].children = []
  1168. this.postDataPramas.data[1].children[0] = { 'name': 'insertPartquit', 'type': 'e', 'parammaps': {
  1169. bigId: '@insertBigPartquit.LastInsertId',
  1170. location: '@insertSpotList.warehoseCode',
  1171. partId: '@insertSpotList.partId',
  1172. partCode: '@insertSpotList.partCode',
  1173. partName: '@insertSpotList.partName',
  1174. specification: '@insertSpotList.specification',
  1175. price: '@insertSpotList.price',
  1176. unit: '@insertSpotList.unit',
  1177. brand: '@insertSpotList.brandName',
  1178. contractId: '@insertSpotList.contractId',
  1179. providerName: '@insertSpotList.providerName',
  1180. providerId: '@insertSpotList.providerId',
  1181. applyNumber: '@insertSpotList.quitNumberC',
  1182. quitNumber: '@insertSpotList.quitNumber',
  1183. useNumber: '@insertSpotList.checkoutNumber',
  1184. reportery: '@insertSpotList.reportery',
  1185. partUseId: '@insertSpotList.id'
  1186. }}
  1187. this.postDataPramas.data[1].children[1] = { 'name': 'updatePartRepertoryTK', 'type': 'e', 'parammaps': {
  1188. quitNumber: '@insertSpotList.quitNumber',
  1189. providerId: '@insertSpotList.providerId',
  1190. partCode: '@insertSpotList.partCode',
  1191. contractId: '@insertSpotList.contractId',
  1192. price: '@insertSpotList.price',
  1193. locationId: '@insertSpotList.locationId'
  1194. }}
  1195. this.postDataPramas.data[1].children[2] = { 'name': 'updatePartUseQuit', 'type': 'e', 'parammaps': {
  1196. quitNumber: '@insertSpotList.quitNumber',
  1197. id: '@insertSpotList.id'
  1198. }}
  1199. ExecDataByConfig(this.postDataPramas).then(response => {
  1200. console.log('新增保存发送参数', this.postDataPramas)
  1201. if (response.msg === 'fail') {
  1202. this.$notify({
  1203. title: '保存失败',
  1204. message: response.data,
  1205. type: 'warning',
  1206. duration: 2000
  1207. })
  1208. } else {
  1209. this.getdataListParm.parammaps.inputDatetime = ''
  1210. this.$notify({ title: '', message: '保存成功', type: 'success', duration: 2000 })
  1211. this.dialogFormVisible = false
  1212. setTimeout(() => {
  1213. this.getList()
  1214. }, 1000)
  1215. }
  1216. })
  1217. return true
  1218. } else {
  1219. this.$message({
  1220. title: '',
  1221. message: '请选择备件',
  1222. type: 'warning',
  1223. duration: 2000
  1224. })
  1225. return false
  1226. }
  1227. }
  1228. })
  1229. },
  1230. partDelete(row) {
  1231. console.log(this.listAdd)
  1232. MessageBox.confirm('设备名称:' + row.partName, '确认删除?', {
  1233. confirmButtonText: '确认',
  1234. cancelButtonText: '取消',
  1235. type: 'warning'
  1236. }).then(() => {
  1237. // console.log(this.list2)
  1238. this.TotalAmount = 0
  1239. for (var i = 0; i < this.listAdd.length; i++) {
  1240. console.log(this.listAdd[i])
  1241. if (this.listAdd[i].id === row.id) {
  1242. var listAddIndex = this.listAdd.indexOf(this.listAdd[i])
  1243. }
  1244. if (listAddIndex > -1) {
  1245. this.listAdd.splice(listAddIndex, 1)
  1246. return
  1247. }
  1248. this.TotalAmount = parseFloat(this.listAdd[i].quitNumber) * parseFloat(this.listAdd[i].price)
  1249. this.TotalAmount = parseFloat((this.TotalAmount).toFixed(2))
  1250. }
  1251. })
  1252. },
  1253. handleDelate(row) {
  1254. console.log('点击了删除')
  1255. this.seeTemp = Object.assign({}, row)
  1256. this.getdataListSee.parammaps.bigId = this.seeTemp.id
  1257. this.getSeeList()
  1258. MessageBox.confirm('确认删除此条信息?', {
  1259. confirmButtonText: '确认',
  1260. cancelButtonText: '取消',
  1261. type: 'warning'
  1262. }).then(() => {
  1263. this.postDataPramas.common = { 'returnmap': '0' }
  1264. this.postDataPramas.data = []
  1265. this.postDataPramas.data[0] = { 'name': 'insertSpotList', 'resultmaps': { 'list': this.listSee }}
  1266. this.postDataPramas.data[0].children = []
  1267. this.postDataPramas.data[0].children[0] = { 'name': 'updatePartRepertoryTKDel', 'type': 'e', 'parammaps': {
  1268. quitNumber: '@insertSpotList.quitNumber',
  1269. providerId: '@insertSpotList.providerId',
  1270. partCode: '@insertSpotList.partCode',
  1271. contractId: '@insertSpotList.contractId',
  1272. pastureId: row.pastureId
  1273. }}
  1274. this.postDataPramas.data[0].children[1] = { 'name': 'deletePartQuit', 'type': 'e', 'parammaps': {
  1275. id: '@insertSpotList.id'
  1276. }}
  1277. this.postDataPramas.data[0].children[2] = { 'name': 'updatePartUseDel', 'type': 'e', 'parammaps': {
  1278. quitNumber: '@insertSpotList.quitNumber',
  1279. partUseId: '@insertSpotList.partUseId'
  1280. }}
  1281. this.postDataPramas.data[1] = { 'name': 'deleteBigPartQuit', 'type': 'e', 'parammaps': {
  1282. id: row.id
  1283. }}
  1284. ExecDataByConfig(this.postDataPramas).then(response => {
  1285. this.getList()
  1286. this.$notify({
  1287. title: '成功',
  1288. message: '删除成功',
  1289. type: 'success',
  1290. duration: 2000
  1291. })
  1292. })
  1293. })
  1294. .catch(() => {
  1295. this.$message({
  1296. type: 'info',
  1297. message: '已取消删除'
  1298. })
  1299. })
  1300. },
  1301. // 查看
  1302. form_see(row) {
  1303. this.dialogStatusSee = 'see'
  1304. this.dialogFormVisibleSee = true
  1305. this.seeTemp = Object.assign({}, row)
  1306. this.seeTemp.quitDate = parseTime(this.seeTemp.quitDate, '{y}-{m}-{d}')
  1307. this.TotalAmount = 0
  1308. console.log('查看上方数据(从table读取)', this.seeTemp)
  1309. this.getSeeList()
  1310. },
  1311. getSeeList() {
  1312. this.getdataListSee.parammaps.bigId = this.seeTemp.id
  1313. GetDataByName(this.getdataListSee).then(response => {
  1314. console.log('查看下方table数据', response.data.list)
  1315. this.listSee = response.data.list
  1316. if (response.data.list !== null) {
  1317. this.TotalAmount = 0
  1318. for (let i = 0; i < response.data.list.length; i++) {
  1319. this.TotalAmount += parseFloat(response.data.list[i].sumPrice)
  1320. if (response.data.list[i].srcpath !== null && response.data.list[i].picpath !== null && response.data.list[i].srcpath !== undefined && response.data.list[i].picpath !== undefined) {
  1321. this.listSee[i].srcpath = process.env.VUE_APP_BASE_API + response.data.list[i].srcpath
  1322. this.listSee[i].picpath = process.env.VUE_APP_BASE_API + response.data.list[i].picpath
  1323. } else {
  1324. this.listSee[i].srcpath = ''
  1325. this.listSee[i].picpath = ''
  1326. }
  1327. }
  1328. this.TotalAmount = this.TotalAmount.toFixed(2)
  1329. }
  1330. setTimeout(() => {
  1331. this.listLoadingSee = false
  1332. }, 100)
  1333. })
  1334. },
  1335. form_edit(row) {
  1336. this.temp = Object.assign({}, row) // copy obj
  1337. this.dialogStatus = 'update'
  1338. this.dialogFormVisible = true
  1339. this.$nextTick(() => {
  1340. this.$refs['temp'].clearValidate()
  1341. })
  1342. },
  1343. get_select_list() {
  1344. GetDataByNames(this.requestParams).then(response => {
  1345. this.findAllProvider = response.data.findAllProvider.list
  1346. this.findAllPasture = response.data.findAllPasture.list
  1347. this.findAllDepart = response.data.findAllDepart.list
  1348. this.findAllEmploye = response.data.findAllEmploye.list
  1349. })
  1350. },
  1351. handleDownload() {
  1352. console.log('点击了导出')
  1353. this.$alert('退库记录正在导出中,请勿刷新或离开本页面,若导出时间过长,建议缩小导出数据范围重新导出', {})
  1354. this.isPercentage = true
  1355. this.percentage = 1
  1356. var timer = setInterval(() => {
  1357. this.percentage += 5
  1358. if (this.percentage > 95) {
  1359. this.percentage = 99
  1360. clearInterval(timer)
  1361. }
  1362. this.percentage = this.percentage
  1363. }, 1000)
  1364. this.downloadParam.name = 'getPartquitDetaillist'
  1365. this.downloadParam.parammaps = this.getdataListParm2.parammaps
  1366. GetAccount(this.downloadParam).then(response => {
  1367. if (response.data.list !== '') {
  1368. this.percentage = 99
  1369. setTimeout(() => {
  1370. this.isPercentage = false
  1371. }, 2000)
  1372. }
  1373. this.$nextTick(() => {
  1374. const ExcelDatas = [
  1375. {
  1376. tHeader: ['牧场', '出库单号', '备件编号', '备件名称', '备件规格', '备件品牌', '计量单位', '供应商', '库位', '出库数量', '退库数量', '单价', '总价', '退库原因', '录入人', '退库日期'],
  1377. filterVal: ['pastureName', 'useForm', 'partCode', 'partName', 'specification', 'brand', 'unit', 'providerName', 'location', 'useNumber', 'refundNumber', 'price', 'sumPrice', 'note', 'empname', 'quitDate'],
  1378. tableDatas: response.data.list,
  1379. sheetName: '退库记录'
  1380. }
  1381. ]
  1382. json2excel(ExcelDatas, '退库记录', true, 'xlsx')
  1383. })
  1384. })
  1385. },
  1386. handleEAS() {
  1387. this.easStatus.dialogStatus = 'easStatus'
  1388. this.easStatus.dialogFormVisible = true
  1389. this.getListEasStatusLst()
  1390. },
  1391. getListEasStatusLst() {
  1392. this.easStatus.listLoading = true
  1393. GetDataByName(this.easStatus.getdataListParm).then(response => {
  1394. if (response.data.list !== null) {
  1395. this.easStatus.list = response.data.list
  1396. } else {
  1397. this.easStatus.list = []
  1398. }
  1399. this.easStatus.pageNum = response.data.pageNum
  1400. this.easStatus.pageSize = response.data.pageSize
  1401. if (response.data.total) {
  1402. this.easStatus.total = response.data.total
  1403. }
  1404. })
  1405. setTimeout(() => {
  1406. this.easStatus.listLoading = false
  1407. }, 100)
  1408. },
  1409. handleClose(row) {
  1410. MessageBox.confirm('是否确认关闭同步此数据?', {
  1411. confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning'
  1412. }).then(() => {
  1413. this.requestParam = {}
  1414. this.requestParam.name = 'updatebigpartquitSync'
  1415. this.requestParam.parammaps = {}
  1416. this.requestParam.parammaps.issync = '2'
  1417. this.requestParam.parammaps.id = row.id
  1418. PostDataByName(this.requestParam).then((response) => {
  1419. if (response.msg !== 'fail') {
  1420. this.$notify({ title: '成功', message: '关闭同步成功', type: 'success', duration: 2000 })
  1421. this.getListEasStatusLst()
  1422. this.getList()
  1423. } else {
  1424. this.$notify({ title: '失败', message: response.data, type: 'warning', duration: 2000 })
  1425. this.getListEasStatusLst()
  1426. this.getList()
  1427. }
  1428. })
  1429. }).catch(() => {
  1430. this.$message({ type: 'info', message: '已取消关闭同步' })
  1431. })
  1432. },
  1433. handleManual(row) {
  1434. MessageBox.confirm('是否确认同步此数据至EAS?', {
  1435. confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning'
  1436. }).then(() => {
  1437. this.requestParam = {}
  1438. this.requestParam.typeIn = row.typeIn
  1439. this.requestParam.billCode = row.billCode
  1440. EasSync(this.requestParam).then((response) => {
  1441. if (response.msg !== 'fail') {
  1442. this.$notify({ title: '成功', message: '手动同步成功', type: 'success', duration: 2000 })
  1443. this.getListEasStatusLst()
  1444. this.getList()
  1445. } else {
  1446. this.$notify({ title: '失败', message: response.data, type: 'warning', duration: 2000 })
  1447. this.getListEasStatusLst()
  1448. this.getList()
  1449. }
  1450. })
  1451. }).catch(() => {
  1452. this.$message({ type: 'info', message: '已取消手动同步' })
  1453. })
  1454. },
  1455. handleIgnore(row) {
  1456. MessageBox.confirm('是否确认忽略同步此数据?', {
  1457. confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning'
  1458. }).then(() => {
  1459. this.requestParam = {}
  1460. this.requestParam.name = 'updatebigpartquitSync'
  1461. this.requestParam.parammaps = {}
  1462. this.requestParam.parammaps.issync = '3'
  1463. this.requestParam.parammaps.id = row.id
  1464. PostDataByName(this.requestParam).then((response) => {
  1465. if (response.msg !== 'fail') {
  1466. this.$notify({ title: '成功', message: '忽略同步成功', type: 'success', duration: 2000 })
  1467. this.getListEasStatusLst()
  1468. this.getList()
  1469. } else {
  1470. this.$notify({ title: '失败', message: response.data, type: 'warning', duration: 2000 })
  1471. this.getListEasStatusLst()
  1472. this.getList()
  1473. }
  1474. })
  1475. }).catch(() => {
  1476. this.$message({ type: 'info', message: '已取消忽略同步' })
  1477. })
  1478. }
  1479. // ---------------------------------------------------------------------
  1480. }
  1481. }
  1482. </script>
  1483. <style lang="scss" scoped>
  1484. .pagination-container{
  1485. display: block !important;
  1486. }
  1487. </style>