index.vue 21 KB

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