index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526
  1. <template>
  2. <div class="app-container">
  3. <div class="filter-container">
  4. <el-select v-model="table1.getdataListParm.parammaps.pastureName" placeholder="牧场" class="filter-item" style="width: 120px;" >
  5. <el-option v-for="item in findAllPasture" :key="item.id" :label="item.name" :value="item.name" />
  6. </el-select>
  7. <el-select v-model="table1.getdataListParm.parammaps.writeoffType" style="width: 140px;" placeholder="冲销类型" class="filter-item" @change="change_type">
  8. <el-option v-for="item in writeoffList" :key="item.id" :label="item.name" :value="item.name" />
  9. </el-select>
  10. <el-input v-model="table1.getdataListParm.parammaps.orderNumber" placeholder="设备管理平台单号" style="width: 200px;" class="filter-item" />
  11. <!-- <el-input v-if="table1.getdataListParm.parammaps.writeoffType == '备件入库'" v-model="table1.getdataListParm.parammaps.orderNumber" placeholder="入库单号" style="width: 200px;" class="filter-item" />
  12. <el-input v-if="table1.getdataListParm.parammaps.writeoffType == '备件出库'" v-model="table1.getdataListParm.parammaps.orderNumber" placeholder="出库单号" style="width: 200px;" class="filter-item" />
  13. <el-input v-if="table1.getdataListParm.parammaps.writeoffType == '备件退库'" v-model="table1.getdataListParm.parammaps.orderNumber" placeholder="退库单号" style="width: 200px;" class="filter-item" />
  14. <el-input v-if="table1.getdataListParm.parammaps.writeoffType == '备件退货'" v-model="table1.getdataListParm.parammaps.orderNumber" placeholder="退货单号" style="width: 200px;" class="filter-item" /> -->
  15. <el-select v-model="table1.getdataListParm.parammaps.hasTicket" style="width: 180px;" clearable placeholder="是否已开票" class="filter-item" v-if="table1.getdataListParm.parammaps.writeoffType == '备件入库' || table1.getdataListParm.parammaps.writeoffType == '备件退货'">
  16. <el-option v-for="item in invoicedReturnDocList" :key="item.id" :label="item.name" :value="item.id" />
  17. </el-select>
  18. <el-button class="filter-item" type="primary" icon="el-icon-search" @click="form_search">搜索</el-button>
  19. <div>
  20. <el-button v-if="isWriteoffAdd" class="filter-item" type="primary" icon="el-icon-edit" @click="form_add">新增</el-button>
  21. </div>
  22. </div>
  23. <el-table
  24. :key="table1.tableKey"
  25. v-loading="table1.listLoading"
  26. element-loading-text="给我一点时间"
  27. :data="table1.list"
  28. border
  29. fit
  30. highlight-current-row
  31. style="width: 100%;"
  32. :row-style="rowStyle"
  33. :cell-style="cellStyle"
  34. class="elTable"
  35. :max-height="myHeight"
  36. >
  37. <el-table-column label="序号" align="center" type="index" width="50px">
  38. <template slot-scope="scope">
  39. <span>{{ scope.$index + (table1.pageNum-1) * table1.pageSize + 1 }}</span>
  40. </template>
  41. </el-table-column>
  42. <el-table-column label="牧场" min-width="150px" align="center" prop="pastureName" />
  43. <el-table-column label="物料凭证号" min-width="150px" align="center" prop="materialCode" />
  44. <!-- <el-table-column label="物料凭证年度" min-width="150px" align="center" prop="proofYear" /> -->
  45. <el-table-column label="凭证中的过账信息" min-width="150px" align="center" prop="chargeDate" />
  46. <el-table-column label="设备管理平台单号" min-width="150px" align="center" prop="orderNumber" />
  47. <!-- <el-table-column label="是否已开票" min-width="150px" align="center" show-overflow-tooltip v-if="table1.getdataListParm.parammaps.writeoffType == '备件入库' || table1.getdataListParm.parammaps.writeoffType == '备件退货'" >
  48. <template slot-scope="scope">
  49. <span v-if="scope.row.hasTicket == 1">是</span>
  50. <span v-if="scope.row.hasTicket == 0">否</span>
  51. <span v-if="scope.row.hasTicket == ''"> </span>
  52. </template>
  53. </el-table-column> -->
  54. <!-- <el-table-column label="设备管理平台行号" min-width="150px" align="center" prop="rowNumber" /> -->
  55. <el-table-column label="状态" min-width="150px" align="center" prop="status" />
  56. <el-table-column label="操作" align="center" width="250" class-name="small-padding fixed-width" fixed="right">
  57. <template slot-scope="{row}">
  58. <el-button v-if="isWriteoffSee" type="primary" size="mini" @click="form_see(row)">查看</el-button>
  59. <!-- <el-button v-if="isWriteoffDel" type="danger" size="mini" @click="handleDelate(row)">删除</el-button> -->
  60. </template>
  61. </el-table-column>
  62. </el-table>
  63. <pagination v-show="table1.total>0" :total="table1.total" :page.sync="table1.getdataListParm.offset" :limit.sync="table1.getdataListParm.pagecount" @pagination="get_table_data" />
  64. <!-- 弹出层新增or修改 -->
  65. <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" :close-on-click-modal="false" width="90%">
  66. <div class="app-container">
  67. <el-form ref="create" :rules="rules" :model="create.temp" label-position="right" label-width="140px" style="width: 90%;margin:0 auto;">
  68. <el-row>
  69. <el-col :span="8">
  70. <el-form-item label="设备管理平台单号:" prop="orderNumber">
  71. <el-input ref="orderNumber" v-model="create.temp.orderNumber" :disabled="dialogStatus=='see'" @blur="blurOrderNumber" />
  72. </el-form-item>
  73. </el-col>
  74. <el-col :span="8">
  75. <el-form-item label="冲销类型:" prop="NumberType">
  76. <el-select v-model="create.temp.NumberType" :disabled="dialogStatus=='see'" placeholder="" class="filter-item" style="width:100%" @change="changeWriteoff">
  77. <el-option v-for="item in writeoffList" :key="item.id" :label="item.name" :value="item.id" />
  78. </el-select>
  79. </el-form-item>
  80. </el-col>
  81. <el-col :span="8">
  82. <el-form-item label="是否已开票:" prop="hasTicket">
  83. <el-select v-model="create.temp.hasTicket" :disabled="dialogStatus=='see'" placeholder="" class="filter-item" style="width:100%">
  84. <el-option v-for="item in invoicedReturnDocList" :key="item.id" :label="item.name" :value="item.id" />
  85. </el-select>
  86. </el-form-item>
  87. </el-col>
  88. </el-row>
  89. <el-row>
  90. <el-col :span="8">
  91. <el-form-item label="物料凭证号:" prop="materialCode">
  92. <el-select v-model="create.temp.materialCode" disabled placeholder="" class="filter-item" style="width:100%">
  93. <el-option v-for="item in materialVoucherNoList" :key="item.id" :label="item.name" :value="item.id" />
  94. </el-select>
  95. </el-form-item>
  96. </el-col>
  97. <el-col :span="8">
  98. <el-form-item label="凭证中的过账日期:" prop="chargeDate">
  99. <el-date-picker v-model="create.temp.chargeDate" disabled :picker-options="pickerOptions" type="date" placeholder="" format="yyyy-MM-dd" value-format="yyyy-MM-dd" style="width:100%" />
  100. </el-form-item>
  101. </el-col>
  102. <el-col :span="8">
  103. <el-form-item label="物料凭证年度:" prop="proofYear">
  104. <el-input ref="proofYear" v-model="create.temp.proofYear" disabled placeholder="" />
  105. </el-form-item>
  106. </el-col>
  107. </el-row>
  108. </el-form>
  109. <el-table
  110. :key="create.tableKey"
  111. v-loading="create.listLoading"
  112. element-loading-text="给我一点时间"
  113. :data="create.list"
  114. border
  115. fit
  116. highlight-current-row
  117. style="width: 100%;margin-bottom:30px"
  118. :row-style="rowStyle"
  119. :cell-style="cellStyle"
  120. class="elTable"
  121. @selection-change="handleSelectionChange"
  122. >
  123. <el-table-column type="selection" width="55" />
  124. <el-table-column label="行号" align="center" prop="rowNumber" width="50px" />
  125. <el-table-column label="备件编号" prop="partCode" align="center" min-width="90" />
  126. <el-table-column label="备件名称" prop="partName" align="center" min-width="90" />
  127. <el-table-column label="备件规格" prop="specification" align="center" min-width="90" />
  128. <el-table-column label="备件品牌" prop="partBrand" align="center" min-width="90" />
  129. <el-table-column label="供应商" prop="supplier" align="center" min-width="90" />
  130. <el-table-column label="库位" prop="warehouse" align="center" min-width="90" />
  131. <el-table-column label="变更数量" prop="changeCount" align="center" min-width="90" />
  132. <el-table-column label="单价" prop="unitPrice" align="center" min-width="90" />
  133. <el-table-column label="总价" prop="totalPrice" align="center" min-width="90" />
  134. </el-table>
  135. <div slot="footer" class="dialog-footer" style="bottom:10px">
  136. <el-button type="primary" v-if="dialogStatus=='create'" :disabled="isokDisable" @click="add_dialog_save()">保存并关闭</el-button>
  137. <el-button @click="dialogFormVisible = false;get_table_data()">取消并关闭</el-button>
  138. </div>
  139. </div>
  140. </el-dialog>
  141. </div>
  142. </template>
  143. <script>
  144. // / 引入
  145. import { GetDataByName, GetDataByNames,postJson, PostDataByName, ExecDataByConfig, checkButtons, failproccess } from '@/api/common'
  146. import { parseTime } from '@/utils/index.js'
  147. import Pagination from '@/components/Pagination' // secondary package based on el-pagination
  148. import { MessageBox } from 'element-ui'
  149. import Cookies from 'js-cookie'
  150. export default {
  151. name: 'Writeoff',
  152. components: { Pagination },
  153. data() {
  154. return {
  155. myHeight:document.documentElement.clientHeight - 85- 200,
  156. findAllPasture: [],
  157. requestParams: [
  158. { name: 'findAllProvider', offset: 0, pagecount: 0, params: [] },
  159. { name: 'findAllPasture', offset: 0, pagecount: 0, returntype: 'Map', parammaps: { 'id': Cookies.get('pastureid') }},
  160. { name: 'getPastureList', offset: 0, pagecount: 0, returntype: 'Map', parammaps: {}},
  161. { name: 'findAllDepart', offset: 0, pagecount: 0, parammaps: { 'pastureId': Cookies.get('pastureid'), 'eId': Cookies.get('employeid') }},
  162. { name: 'findAllEmploye', offset: 0, pagecount: 0, parammaps: { 'pastureId': Cookies.get('pastureid') }}
  163. ],
  164. writeoffList:[
  165. {id:1,name:'备件入库'},
  166. {id:2,name:'备件退货'},
  167. {id:3,name:'备件出库'},
  168. // {id:4,name:'备件退库'}
  169. ], //冲销类型
  170. invoicedReturnDocList:[{id:0,name:'否'},{id:1,name:'是'}],//是否已开票退货单
  171. materialVoucherNoList:[{id:0,name:'11111'},{id:1,name:'2222'}],//物料凭证号
  172. // table1:{
  173. // getdataListParm: {
  174. // name: 'getBigPartTransferList', page: 1, offset: 1, pagecount: 10, returntype: 'Map',
  175. // parammaps: {
  176. // pastureName: Cookies.get('pasturename'),
  177. // writeoffType:'',
  178. // OrderNumber:''
  179. // }
  180. // },
  181. // tableKey: 0, listLoading: false, total: 0, list: [],pageNum:0, pageSize:0
  182. // },
  183. table1:{
  184. getdataListParm: {
  185. name: 'getLaidProofList', page: 1, offset: 1, pagecount: 10, returntype: 'Map',
  186. parammaps: {
  187. pastureName: Cookies.get('pasturename'),
  188. writeoffType:'备件入库',
  189. orderNumber:'',
  190. hasTicket:''
  191. }
  192. },
  193. tableKey: 0, listLoading: false, total: 0, list: [],pageNum:0, pageSize:0
  194. },
  195. rowStyle: { maxHeight: 50 + 'px', height: 45 + 'px' },
  196. cellStyle: { padding: 0 + 'px' },
  197. dialogStatus: '',
  198. dialogFormVisible: false,
  199. textMap: { create: '新增', see: '查看' },
  200. rules: {
  201. orderNumber: [{ required: true, message: '必填', trigger: 'blur' }],
  202. NumberType: [{ required: true, message: '必填', trigger: 'blur' }],
  203. },
  204. create: {
  205. temp:{ applyDate: parseTime(new Date(), '{y}-{m}-{d}')},
  206. getdataListParm: {
  207. name: 'getPartTransferbybigid',
  208. returntype: 'Map',
  209. parammaps: {}
  210. },
  211. getdataListParm2: {
  212. name: 'getPartlaidByBigid',
  213. returntype: 'Map',
  214. parammaps: {bigid:"",hasTicket:1}
  215. },
  216. tableKey: 0, listLoading: false, total: 0, list: [], pageNum:0, pageSize:0
  217. },
  218. isokDisable: false,
  219. pickerOptions: {
  220. disabledDate(time) {
  221. return time.getTime() > Date.now()// 当天之前的时间可选
  222. }
  223. },
  224. isWriteoffAdd:[],
  225. isWriteoffSee:[],
  226. isWriteoffDel:[]
  227. }
  228. },
  229. created() {
  230. const that = this
  231. GetDataByName({ 'name': 'getUserPCButtons', 'parammaps': { 'jwt_username': Cookies.get('name') }}).then(response => {
  232. that.buttons = response.data.list
  233. that.get_auto_buttons()
  234. })
  235. this.get_select_list()
  236. this.get_table_data()
  237. },
  238. methods: {
  239. get_auto_buttons() {
  240. // 新增
  241. const WriteoffAdd = 'customs:writeoff:add'
  242. const isWriteoffAdd = checkButtons(this.$store.state.user.buttons, WriteoffAdd)
  243. this.isWriteoffAdd= isWriteoffAdd
  244. // 查看
  245. const WriteoffSee = 'customs:writeoff:see'
  246. const isWriteoffSee = checkButtons(this.$store.state.user.buttons, WriteoffSee)
  247. this.isWriteoffSee = isWriteoffSee
  248. // 删除
  249. const WriteoffDel = 'customs:writeoff:del'
  250. const isWriteoffDel = checkButtons(this.$store.state.user.buttons, WriteoffDel)
  251. this.isWriteoffDel = isWriteoffDel
  252. },
  253. get_table_data() {
  254. this.table1.listLoading = true
  255. GetDataByName(this.table1.getdataListParm).then(response => {
  256. if(response.data.list){
  257. console.log('table数据', response.data.list)
  258. this.table1.list = response.data.list
  259. this.table1.pageNum = response.data.pageNum
  260. this.table1.pageSize = response.data.pageSize
  261. }else{
  262. this.table1.list = []
  263. this.table1.pageNum = 0
  264. this.table1.pageSize = 0
  265. }
  266. if (response.data.total) {
  267. this.table1.total = response.data.total
  268. }
  269. setTimeout(() => {
  270. this.table1.listLoading = false
  271. }, 100)
  272. })
  273. },
  274. form_search() {
  275. console.log('点击了table搜索')
  276. this.table1.listLoading = true
  277. this.table1.getdataListParm.offset = 1
  278. this.get_table_data()
  279. },
  280. form_add() {
  281. this.dialogStatus = 'create'
  282. this.dialogFormVisible = true
  283. this.create.temp = {'materialCode':'','proofYear':'','chargeDate':'','orderNumber':'','hasTicket':'','orderNumberId':'','NumberType':'','rowsNumber':[]}
  284. this.create.list = []
  285. },
  286. changeWriteoff(item){
  287. this.getTableFormList()
  288. },
  289. blurOrderNumber(){
  290. this.getTableFormList()
  291. },
  292. getTableFormList(){
  293. let url = 'authdata/sap/proof/detail'
  294. let data = {
  295. OrderNumber:this.create.temp.orderNumber,
  296. NumberType:this.create.temp.NumberType
  297. }
  298. if(this.create.temp.orderNumber == ''){
  299. this.$message({ title: '', message: '设备管理平台单号不能为空', type: 'warning', duration: 2000 })
  300. return
  301. }
  302. if(this.create.temp.NumberType == ''){
  303. this.$message({ title: '', message: '冲销类型不能为空', type: 'warning', duration: 2000 })
  304. return
  305. }
  306. postJson(url,data).then(response => {
  307. console.log(response.msg,'response===')
  308. if(response.msg !== 'fail' ){
  309. if(response.data){
  310. this.create.temp = response.data
  311. this.create.temp.rowsNumber = []
  312. if(response.data.parts){
  313. this.create.list = response.data.parts
  314. }else{
  315. this.create.list = []
  316. }
  317. }else{
  318. this.create.list = []
  319. this.create.temp = {}
  320. }
  321. }else{
  322. this.$notify({ title: '失败', message: response.message, type: 'warning', duration: 2000 })
  323. }
  324. }).catch((res)=>{
  325. // this.$message({ title: '', message: re, type: 'warning', duration: 2000 })
  326. })
  327. },
  328. handleSelectionChange(val) {
  329. this.create.temp.rowsNumber = []
  330. for(let i=0;i<val.length;i++){
  331. this.create.temp.rowsNumber.push(val[i].rowNumber)
  332. }
  333. console.log(this.create.temp.rowsNumber)
  334. },
  335. add_dialog_save() {
  336. this.isokDisable = true
  337. setTimeout(() => {
  338. this.isokDisable = false
  339. }, 1000)
  340. // var rowsNumberArr = []
  341. // this.create.list.forEach(function(item){
  342. // rowsNumberArr.push(item.rowNumber)
  343. // })
  344. // console.log('rowsNumberArr',rowsNumberArr)
  345. this.$refs['create'].validate(valid => {
  346. if (valid) {
  347. // console.log('新增保存',this.create.temp.rowsNumber)
  348. let url = "authdata/sap/proof/off"
  349. let data = {
  350. materialCode:this.create.temp.materialCode,
  351. proofYear:this.create.temp.proofYear,
  352. chargeDate:this.create.temp.chargeDate,
  353. orderNumber:this.create.temp.orderNumber,
  354. hasTicket:this.create.temp.hasTicket,
  355. rowsNumber:this.create.temp.rowsNumber,//[]
  356. orderNumberId:this.create.temp.orderNumberId,
  357. NumberType:this.create.temp.NumberType
  358. }
  359. if(this.create.temp.rowsNumber.length == 0){
  360. this.$message({ message: '请选择需要冲销的备件', type: 'warning', duration: 2000 })
  361. return
  362. }
  363. postJson(url,data).then(response => {
  364. if(response.msg !== 'fail'){
  365. this.$notify({ title: '成功', message: '保存成功', type: 'success', duration: 2000 })
  366. this.dialogFormVisible = false
  367. }else{
  368. this.$notify({ title: '失败', message: response.message, type: 'warning', duration: 2000 })
  369. }
  370. })
  371. }
  372. })
  373. },
  374. change_type(item) {
  375. console.log(item)
  376. if(item == "备件入库"){
  377. this.table1.getdataListParm.name = 'getLaidProofList'
  378. this.table1.getdataListParm.parammaps.writeoffType = '备件入库'
  379. }
  380. if(item == "备件出库"){ this.table1.getdataListParm.name = 'getReturnProofList'
  381. this.table1.getdataListParm.parammaps.writeoffType = '备件出库'
  382. }
  383. if(item == "备件退库"){ this.table1.getdataListParm.name = 'getQuitProofList'
  384. this.table1.getdataListParm.parammaps.writeoffType = '备件退库'
  385. }
  386. if(item == "备件退货"){ this.table1.getdataListParm.name = 'getUseProofList'
  387. this.table1.getdataListParm.parammaps.writeoffType = '备件退货'
  388. }
  389. },
  390. // 查看
  391. form_see(row) {
  392. this.dialogStatus = 'see'
  393. this.create.temp = Object.assign({}, row)
  394. console.log('row',row)
  395. // this.create.getdataListParm.parammaps.id = this.create.temp.id
  396. // {id:1,name:'备件入库'},{id:2,name:'备件退货'},{id:3,name:'备件出库'},{id:4,name:'备件退库'}
  397. if(row.NumberType == 1){
  398. this.create.getdataListParm2.name = 'getPartlaidByBigid'
  399. }
  400. if(row.NumberType == 4){
  401. this.create.getdataListParm2.name = 'getPartquitByBigid'
  402. }
  403. if(row.NumberType == 2){
  404. this.create.getdataListParm2.name = 'getPartrefundByBigid'
  405. }
  406. if(row.NumberType == 3){
  407. this.create.getdataListParm2.name = 'getPartuseByBigid'
  408. }
  409. this.create.getdataListParm2.parammaps.bigid = row.id
  410. this.getDialogList2()
  411. // this.getDialogList()
  412. this.dialogFormVisible = true
  413. },
  414. getDialogList2() {
  415. GetDataByName(this.create.getdataListParm2).then(response => {
  416. if(response.data.list){
  417. this.create.list = response.data.list
  418. this.create.pageNum = response.data.pageNum
  419. this.create.pageSize = response.data.pageSize
  420. }else{
  421. this.create.list = []
  422. this.create.pageNum = 0
  423. this.create.pageSize = 0
  424. }
  425. if (response.data.total) {
  426. this.create.total = response.data.total
  427. }
  428. setTimeout(() => {
  429. this.create.listLoading = false
  430. }, 100)
  431. })
  432. },
  433. getDialogList() {
  434. GetDataByName(this.create.getdataListParm).then(response => {
  435. if(response.data.list){
  436. this.create.list = response.data.list
  437. this.create.pageNum = response.data.pageNum
  438. this.create.pageSize = response.data.pageSize
  439. }else{
  440. this.create.list = []
  441. this.create.pageNum = 0
  442. this.create.pageSize = 0
  443. }
  444. if (response.data.total) {
  445. this.create.total = response.data.total
  446. }
  447. setTimeout(() => {
  448. this.create.listLoading = false
  449. }, 100)
  450. })
  451. },
  452. get_select_list() {
  453. GetDataByNames(this.requestParams).then(response => {
  454. this.findAllProvider = response.data.findAllProvider.list
  455. this.findAllPasture = response.data.findAllPasture.list
  456. this.findAllPasture2 = response.data.getPastureList.list
  457. this.findAllDepart = response.data.findAllDepart.list
  458. this.findAllEmploye = response.data.findAllEmploye.list
  459. })
  460. },
  461. handleDelate(row){
  462. MessageBox.confirm('确认删除此条信息?', {
  463. confirmButtonText: '确认',
  464. cancelButtonText: '取消',
  465. type: 'warning'
  466. }).then(() => {
  467. console.log('删除')
  468. }).catch(() => {
  469. this.$message({ type: 'info', message: '已取消删除' })
  470. })
  471. }
  472. }
  473. }
  474. </script>
  475. <style lang="scss" scoped>
  476. .pagination-container{
  477. display: block !important;
  478. }
  479. </style>
  480. <style lang="scss">
  481. .el-step__head.is-success {
  482. color: #409EFF;
  483. border-color: #409EFF;
  484. }
  485. .el-step__title.is-success{
  486. color: #409EFF;
  487. }
  488. .el-step__head.is-process{
  489. color: #409EFF;
  490. border-color: #409EFF;
  491. .el-step__icon.is-text{
  492. background: #409EFF;
  493. color: #fff;
  494. }
  495. }
  496. .step-row{
  497. color: #000;
  498. }
  499. </style>