list.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  1. <template>
  2. <div>
  3. <Toptitle title="采购请款单">
  4. <Dropdown trigger="click" @on-click='handleTotalAll'>
  5. <Button type="primary">批量<Icon type="ios-arrow-down" style="padding-left:10px"/></Button>
  6. <DropdownMenu slot="list">
  7. <DropdownItem name='1'>提交审批</DropdownItem>
  8. <DropdownItem name='2'>审批</DropdownItem>
  9. <DropdownItem name='3'>删除</DropdownItem>
  10. <DropdownItem name='4'>打印</DropdownItem>
  11. </DropdownMenu>
  12. </Dropdown>
  13. </Toptitle>
  14. <div class="content">
  15. <Form class="form_content" :label-width='120'>
  16. <FormItem label='请款单号:'>
  17. <Input class="form_item" placeholder="请搜素" v-model="searchData.payment_no" clearable/>
  18. </FormItem>
  19. <FormItem label='申请部门:'>
  20. <Select class="form_item" v-model="searchData.section_id" filterable clearable>
  21. <Option v-for="item in sectionList" :key="item.id" :label="item.title" :value="item.id"/>
  22. </Select>
  23. </FormItem>
  24. <FormItem label='请款人:'>
  25. <Select class="form_item" v-model="searchData.payment_id" filterable clearable>
  26. <Option v-for="item in users" :key='item.id' :value="item.id" :label="item.nickname"/>
  27. </Select>
  28. </FormItem>
  29. <FormItem label='供应商名称:'>
  30. <Select class="form_item" v-model="searchData.supply_id" filterable clearable>
  31. <Option v-for="(item,index) in suppliersList" :key="index" :value="item.id" :label="item.title"></Option>
  32. </Select>
  33. </FormItem>
  34. <FormItem label='联系人:'>
  35. <Select class="form_item" v-model="searchData.link" filterable clearable>
  36. <Option v-for="item in users" :key='item.id' :value="item.id" :label="item.nickname"/>
  37. </Select>
  38. </FormItem>
  39. <FormItem label='制单人:'>
  40. <Select class="form_item" v-model="searchData.crt_id" filterable clearable>
  41. <Option v-for="item in users" :key='item.id' :value="item.id" :label="item.nickname"/>
  42. </Select>
  43. </FormItem>
  44. <FormItem label='审批状态:'>
  45. <Select class="form_item" v-model="searchData.state" clearable>
  46. <Option :value="0" label="未提交审批"/>
  47. <Option :value="1" label="已提交未审批"/>
  48. <Option :value="2" label='已审批'/>
  49. </Select>
  50. </FormItem>
  51. <FormItem label='待审人:' >
  52. <Select class="form_item" v-model="searchData.pend_id" clearable>
  53. <Option v-for="item in users" :key='item.id' :value="item.id" :label="item.nickname"/>
  54. </Select>
  55. </FormItem>
  56. <FormItem label='审批人:' style="width:100%">
  57. <Select class="form_item" v-model="searchData.check_id" filterable clearable>
  58. <Option v-for="item in users" :key='item.id' :value="item.id" :label="item.nickname"/>
  59. </Select>
  60. </FormItem>
  61. <FormItem label='创建时间:'>
  62. <DatePicker type="date" placeholder="年/月/日" class="form_item" v-model="searchData.crt_start_time"></DatePicker>~
  63. <DatePicker type="date" placeholder="年/月/日" class="form_item" v-model="searchData.crt_end_time"></DatePicker>
  64. </FormItem>
  65. <FormItem label='请款日期:'>
  66. <DatePicker type="date" placeholder="年/月/日" class="form_item" v-model="searchData.payment_start_time"></DatePicker>~
  67. <DatePicker type="date" placeholder="年/月/日" class="form_item" v-model="searchData.payment_end_time"></DatePicker>
  68. </FormItem>
  69. <FormItem label='回票时间:'>
  70. <DatePicker type="date" placeholder="年/月/日" class="form_item" v-model="searchData.invoice_start_time"></DatePicker>~
  71. <DatePicker type="date" placeholder="年/月/日" class="form_item" v-model="searchData.invoice_end_time"></DatePicker>
  72. </FormItem>
  73. <FormItem label='审批时间:'>
  74. <DatePicker type="date" placeholder="年/月/日" class="form_item" v-model="searchData.check_start_time"></DatePicker>~
  75. <DatePicker type="date" placeholder="年/月/日" class="form_item" v-model="searchData.check_end_time"></DatePicker>
  76. </FormItem>
  77. <FormItem :label-width='50'>
  78. <Button type="primary" @click="initData(searchData)">搜索</Button>
  79. </FormItem>
  80. </Form>
  81. <div class="before_table"><Button type="primary" @click="goPage(1)">新增</Button></div>
  82. <Table :data='tableData' :columns='tableColumns' border max-height='350' @on-selection-change='DataSelect' :loading='loading'>
  83. <template slot="set" slot-scope="{row}">
  84. <a style="margin-right:10px" v-show="row.state==0||row.state==2" @click='handelSet(row,1)'>提交审批</a>
  85. <a style="margin-right:10px" v-show="row.state==2" @click='handelSet(row,2)'>弃审</a>
  86. <a style="margin-right:10px" v-show="row.state==1" @click='handelSet(row,1)'>审批</a>
  87. <a style="margin-right:10px" v-show="row.state==1" @click='handelSet(row,2)'>撤销提交</a>
  88. <a style="margin-right:10px" @click="goPage(3,row)">详情</a>
  89. <a @click="goPage(2,row)" style="margin-right:10px">编辑</a>
  90. <a style="margin-right:10px" v-show="row.state==0" @click="handleDel(row)">删除</a>
  91. <a>打印</a>
  92. </template>
  93. </Table>
  94. </div>
  95. <div class="pageSlotStyle">
  96. <Page :page-size-opts="[10, 20, 30, 40,100,1000]"
  97. @on-page-size-change='changeSize'
  98. @on-change='changePage'
  99. :current='page_index'
  100. show-total
  101. :total="total"
  102. show-sizer
  103. :page-size='page_size' />
  104. </div>
  105. <Modal title="提交审批" v-model="show_submit">
  106. <Form :label-width='100'>
  107. <FormItem label="审批人:">
  108. <Select v-model="check_id">
  109. <Option v-for="item in users" :key='item.id' :value="item.id" :label="item.nickname"></Option>
  110. </Select>
  111. </FormItem>
  112. </Form>
  113. <div slot="footer">
  114. <Button type="primary" ghost @click="show_submit=false">取消</Button>
  115. <Button type="primary" @click="submit">确认</Button>
  116. </div>
  117. </Modal>
  118. </div>
  119. </template>
  120. <script>
  121. export default {
  122. data(){
  123. return{
  124. suppliersList:[],
  125. sectionList:[],
  126. loading:false,
  127. submit_state:false,
  128. searchData:{
  129. payment_no:"",
  130. payment_id:'',
  131. supply_id:'',
  132. link:'',
  133. crt_id:'',
  134. section_id:'',
  135. pend_id:'',
  136. check_id:'',
  137. state:'',
  138. crt_start_time:'',
  139. crt_end_time:'',
  140. payment_start_time:'',
  141. payment_end_time:'',
  142. invoice_start_time:'',
  143. invoice_end_time:'',
  144. check_start_time:'',
  145. check_end_time:'',
  146. },
  147. chooseData:{},
  148. check_id:'',
  149. users:[],
  150. show_submit:false,
  151. page_index:1,
  152. page_size:10,
  153. total:0,
  154. selectData:[],
  155. tableData:[],
  156. tableColumns:[
  157. {type:'selection',minWidth:80,align:'center'},
  158. {title:'请款单号',align:'center',minWidth:140,key:'payment_no'},
  159. {title:'申请部门',align:'center',minWidth:150,key:'section_title'},
  160. {title:'请款人',align:'center',minWidth:120,key:'payment_name'},
  161. {title:'请款日期',align:'center',minWidth:130,key:'payment_time',render:(h,params)=>{
  162. const {row} = params;
  163. return h('span',{},this.func.replaceDateNoHMS(row.payment_time))
  164. }},
  165. {title:'供应商名称',align:'center',minWidth:300,key:'supply_title'},
  166. {title:'联系人',align:'center',minWidth:120,key:'link'},
  167. {title:'联系电话',align:'center',minWidth:120,key:'mobile'},
  168. {title:'汇款信息',align:'center',minWidth:120,key:'information',ellipsis:true,tooltip:true},
  169. {title:'申请金额',align:'center',minWidth:120,key:'apply_price'},
  170. {title:'回票时间',align:'center',minWidth:130,key:'invoice_time',render:(h,params)=>{
  171. const {row} = params;
  172. return h('span',{},this.func.replaceDateNoHMS(row.invoice_time))
  173. }},
  174. {title:'制单人',align:'center',minWidth:120,key:'crt_name'},
  175. {title:'创建时间',align:'center',minWidth:130,key:'crt_time',render:(h,params)=>{
  176. const {row} = params;
  177. return h('span',{},this.func.replaceDateNoHMS(row.crt_time))
  178. }},
  179. {title:'审批状态',align:'center',minWidth:140,key:'state',render:(h,params)=>{
  180. const {row} = params;
  181. const text = row.state==0?'未提交审批':row.state==1?'已提交未审批':'已审批';
  182. return h('span',{},text)
  183. }},
  184. {title:'待审人',align:'center',minWidth:120,key:'pend_name'},
  185. {title:'审批人',align:'center',minWidth:120,key:'check_name'},
  186. {title:'审批时间',align:'center',minWidth:130,key:'check_time',render:(h,params)=>{
  187. const {row} = params;
  188. return h('span',{},this.func.replaceDateNoHMS(row.check_time))
  189. }},
  190. {title:'操作',align:'center',minWidth:300,key:'',slot:'set'}
  191. ]
  192. }
  193. },
  194. created(){
  195. //获取人员列表
  196. this.axios.get('/api/user').then(res=>{
  197. this.users = res.data.data
  198. })
  199. //获取部列表
  200. this.axios.get('/api/employee_depart_list').then(res=>{
  201. this.sectionList = res.data;
  202. });
  203. // 获取供应商列表
  204. this.axios({ method: 'get', url: '/api/supply_list', }).then((res) => { this.suppliersList = res.data.data }).catch((err) => { });
  205. },
  206. mounted(){
  207. this.initData();
  208. },
  209. methods:{
  210. handleTotalAll(name){
  211. switch(name){
  212. case "1":
  213. if(this.selectData.length==0){
  214. return this.$Message.warning('请先选择数据!');
  215. }
  216. let arr = [];
  217. arr = this.selectData.filter(v=>{
  218. return v.state==0||v.state==2
  219. })
  220. if(arr.length != this.selectData.length){
  221. return this.$Message.warning('数据中有不能提交审批的数据!')
  222. }
  223. console.log(arr);
  224. let state = false;
  225. arr.forEach(v=>{
  226. if(v.state!=arr[0].state){
  227. state = true;
  228. }
  229. })
  230. if(state){
  231. return this.$Message.warning('请选择状态相同的数据!')
  232. }
  233. this.show_submit = true;
  234. this.submit_state = true;
  235. this.check_id='';
  236. break;
  237. case '2':
  238. if(this.selectData.length==0){
  239. return this.$Message.warning('请先选择数据!');
  240. };
  241. let ar = [];
  242. ar = this.selectData.filter(v=>{
  243. return v.state == 1;
  244. })
  245. if(ar.length!=this.selectData.length){
  246. return this.$Message.warning('数据中有不能审批的数据!')
  247. }
  248. this.confirmDelete({
  249. title:'确认?',
  250. content: "确认审批?",
  251. then: () => {
  252. let payment_no = [];
  253. this.selectData.forEach(v=>{
  254. payment_no.push(v.payment_no);
  255. })
  256. this.axios.post('/api/payment_check',{payment_no,id:JSON.parse(localStorage.getItem('user_info')).id,state:1}).then(res=>{
  257. if(res.code==200){
  258. this.$Message.success(res.msg);
  259. this.initData(this.searchData);
  260. }
  261. })
  262. }
  263. })
  264. break;
  265. case '3':
  266. if(this.selectData.length==0){
  267. return this.$Message.warning('请先选择数据!');
  268. };
  269. let stateData = this.selectData.filter(v=>{
  270. return v.state == 1||v.state == 2;
  271. });
  272. if(stateData.length!=0){
  273. return this.$Message.warning('数据中有不能删除的数据,请重新选择!')
  274. }
  275. let payment = [];
  276. this.selectData.forEach(v=>{
  277. payment.push(v.payment_no);
  278. })
  279. this.confirmDelete({
  280. content: "确认删除么?",
  281. then: () => {
  282. this.axios
  283. .post("/api/payment_del", { payment_no:payment})
  284. .then((res) => {
  285. if (res.code == 200) {
  286. if(this.page_index!=1||this.tableData.length==1){
  287. this.page_index--;
  288. }
  289. this.$Message.success(res.msg);
  290. this.initData(this.searchData);
  291. }
  292. });
  293. },
  294. });
  295. break;
  296. case '4':
  297. if(this.selectData.length==0){
  298. return this.$Message.warning('请先选择数据!');
  299. };
  300. break;
  301. }
  302. },
  303. handleDel(row){
  304. this.confirmDelete({
  305. content: "确认删除么?",
  306. then: () => {
  307. this.axios
  308. .post("/api/payment_del", { payment_no:[row.payment_no]})
  309. .then((res) => {
  310. if (res.code == 200) {
  311. this.$Message.success(res.msg);
  312. if(this.page_index!=1||this.tableData.length==1){
  313. this.page_index--;
  314. }
  315. this.initData(this.searchData);
  316. }
  317. });
  318. },
  319. });
  320. },
  321. changePage(e){
  322. this.page_index = e;
  323. this.initData(this.searchData);
  324. },
  325. changeSize(e){
  326. this.page_size = e;
  327. this.page_index =1;
  328. this.initData(this.searchData);
  329. },
  330. submit(){
  331. if(!this.check_id){
  332. return this.$Message.warning('请选择审批人!')
  333. }
  334. if(this.submit_state){
  335. let payment_no = [];
  336. this.selectData.forEach(v=>{
  337. payment_no.push(v.payment_no);
  338. })
  339. this.axios.post('/api/payment_check',{id:this.check_id,payment_no,state:this.selectData[0].state}).then(res=>{
  340. if(res.code==200){
  341. this.$Message.success(res.msg);
  342. this.initData(this.searchData);
  343. this.check_id = '';
  344. this.show_submit = false;
  345. this.submit_state = false;
  346. }
  347. })
  348. }else{
  349. this.axios.post('/api/payment_check',{id:this.check_id,payment_no:[this.chooseData.payment_no],state:this.chooseData.state}).then(res=>{
  350. if(res.code==200){
  351. this.$Message.success(res.msg);
  352. this.initData(this.searchData);
  353. this.check_id = '';
  354. this.show_submit = false;
  355. }
  356. })
  357. }
  358. },
  359. handelSet(row,type){
  360. switch(type){
  361. case 1:
  362. if(row.state == 0||row.state == 2){
  363. this.show_submit = true;
  364. this.chooseData = row;
  365. }else{
  366. this.confirmDelete({
  367. title:'确认?',
  368. content: "确认审批?",
  369. then: () => {
  370. this.axios.post('/api/payment_check',{payment_no:[row.payment_no],id:JSON.parse(localStorage.getItem('user_info')).id,state:row.state}).then(res=>{
  371. if(res.code==200){
  372. this.$Message.success(res.msg);
  373. this.initData(this.searchData);
  374. }
  375. })
  376. }
  377. })
  378. }
  379. break;
  380. case 2:
  381. this.confirmDelete({
  382. title:'确认',
  383. content: `${row.state==1?'确定撤销提交吗?':'确定弃审吗?'}`,
  384. then: () => {
  385. this.axios
  386. .post("/api/payment_un_check", { payment_no:row.payment_no,state: row.state })
  387. .then((res) => {
  388. if (res.code == 200) {
  389. this.$Message.success(res.msg);
  390. this.initData(this.searchData);
  391. // this.undata_navData();
  392. }
  393. });
  394. },
  395. });
  396. break;
  397. }
  398. },
  399. initData(row){
  400. let obj = {};
  401. if(row){
  402. obj = JSON.parse(JSON.stringify(row));
  403. obj.crt_start_time = obj.crt_start_time?Date.parse(obj.crt_start_time).toString().slice(0,10):'';
  404. obj.crt_end_time = obj.crt_end_time?Date.parse(obj.crt_end_time).toString().slice(0,10):'';
  405. obj.payment_start_time = obj.payment_start_time?Date.parse(obj.payment_start_time).toString().slice(0,10):'';
  406. obj.payment_end_time = obj.payment_end_time?Date.parse(obj.payment_end_time).toString().slice(0,10):'';
  407. obj.invoice_start_time = obj.invoice_start_time?Date.parse(obj.invoice_start_time).toString().slice(0,10):'';
  408. obj.invoice_end_time = obj.invoice_end_time?Date.parse(obj.invoice_end_time).toString().slice(0,10):'';
  409. obj.check_start_time = obj.check_start_time?Date.parse(obj.check_start_time).toString().slice(0,10):'';
  410. obj.check_end_time = obj.check_end_time?Date.parse(obj.check_end_time).toString().slice(0,10):'';
  411. }
  412. this.loading = true;
  413. this.axios.post('/api/payment_list',{...obj,page_index:this.page_index,page_size:this.page_size}).then(res=>{
  414. this.tableData = res.data.data;
  415. this.total = res.data.total;
  416. this.loading = false;
  417. })
  418. },
  419. DataSelect(e){
  420. this.selectData = e;
  421. },
  422. goPage(type,row){
  423. if(type==1){
  424. this.$router.push({path:'/cms/PayrollRequisition/edit',query:{type}})
  425. }else if(type==2){
  426. this.$router.push({path:'/cms/PayrollRequisition/edit',query:{type,payment_no:row.payment_no,state:row.state}})
  427. }else{
  428. this.$router.push({path:'/cms/PayrollRequisition/detail',query:{type,payment_no:row.payment_no,state:row.state}})
  429. }
  430. }
  431. }
  432. }
  433. </script>
  434. <style lang="scss" scoped>
  435. .content{
  436. height: 85%;
  437. overflow: auto;
  438. .form_content{
  439. margin-top:10px;
  440. display: flex;
  441. flex-wrap: wrap;
  442. .form_item{
  443. width:200px
  444. }
  445. }
  446. .before_table{
  447. display: flex;
  448. flex-direction: row-reverse;
  449. margin-bottom: 10px;
  450. }
  451. }
  452. .pageSlotStyle{
  453. text-align: center;
  454. margin-top:10px;
  455. }
  456. </style>