expense.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480
  1. <template>
  2. <section>
  3. <div class="sidebars" style="width: 250px">
  4. <h2><i class="iconfont firerock-iconcaiwu" style="padding-right: 10px"></i>费用报销模块</h2>
  5. <el-col :span="12">
  6. <el-menu
  7. default-active="1-1"
  8. class="el-menu-vertical-demo"
  9. @select="staffs"
  10. background-color="#ffffff"
  11. text-color="#666666"
  12. active-text-color="#20A0FF"
  13. style="width:100%">
  14. <el-submenu index="1">
  15. <template slot="title">
  16. <i class="el-icon-location"></i>
  17. <span>员工费用报表</span>
  18. </template>
  19. <el-menu-item index="1-1">一般费用填报</el-menu-item>
  20. <el-menu-item index="1-2">差旅费用填报</el-menu-item>
  21. <el-menu-item index="1-3">外包费用填报</el-menu-item>
  22. </el-submenu>
  23. <!-- <el-menu-item index="2" @select="bills">
  24. <i class="el-icon-setting"></i>
  25. <span slot="title">我的报销单据</span>
  26. </el-menu-item> -->
  27. </el-menu>
  28. <el-menu
  29. default-active="1-1"
  30. class="el-menu-vertical-demo"
  31. @select="bills"
  32. background-color="#ffffff"
  33. text-color="#666666"
  34. active-text-color="#20A0FF"
  35. style="width:100%">
  36. <el-menu-item index="2" @select="bills">
  37. <i class="el-icon-setting"></i>
  38. <span slot="title">我的报销单据</span>
  39. </el-menu-item>
  40. </el-menu>
  41. </el-col>
  42. </div>
  43. <!-- 内容主体区域 -->
  44. <!-- 上面部分 -->
  45. <div class="staff" style="margin-left: 250px" v-if="!displayTable">
  46. <!-- 公共 -->
  47. <div class="public">
  48. <el-form :model="form" label-width="80px">
  49. <!-- <el-form :model="form" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"> -->
  50. <!-- 填报人 -->
  51. <el-form-item label="填报人">
  52. <el-select v-model="form.region" placeholder="请选择填报人" style="width: 150px">
  53. <el-option label="区域一" value="shanghai"></el-option>
  54. <el-option label="区域二" value="beijing"></el-option>
  55. </el-select>
  56. </el-form-item>
  57. <!-- 填报日期 -->
  58. <el-form-item label="活动时间" style="position: relative;top: 38px;">
  59. <el-col :span="11">
  60. <el-date-picker type="date" placeholder="选择日期" v-model="form.date1" style="width: 200px;"></el-date-picker>
  61. </el-col>
  62. </el-form-item>
  63. <!-- 发票张数 -->
  64. <el-form-item label="发票张数">
  65. <el-input v-model="form.name" style="width: 150px"></el-input>
  66. </el-form-item>
  67. <!-- 费用类型 -->
  68. <el-form-item label="费用类型">
  69. <el-select v-model="form.region" placeholder="请选择费用类型" style="width: 150px">
  70. <el-option label="一般" value="shanghai"></el-option>
  71. <el-option label="外包" value="beijing"></el-option>
  72. <el-option label="差旅" value="beijing"></el-option>
  73. </el-select>
  74. </el-form-item>
  75. <!-- 备注 -->
  76. <el-form-item label="备注" style="display: block; width: 70%; float: left;">
  77. <el-input type="textarea" v-model="form.desc"></el-input>
  78. </el-form-item>
  79. <!-- 总成本 -->
  80. <div style="float: left; line-height: 55px;margin-left:20px">总成本 1000 元</div>
  81. </el-form>
  82. </div>
  83. <!-- 按钮 -->
  84. <div class="pu_button">
  85. <el-button type="primary">新增</el-button>
  86. <el-button type="success">保存</el-button>
  87. <el-button type="warning">提交</el-button>
  88. </div>
  89. <!-- 表格 -->
  90. <div class="pu_table">
  91. <el-table
  92. :data="tableData"
  93. border
  94. style="width: 100%">
  95. <el-table-column
  96. prop="date"
  97. label="项目"
  98. width="180">
  99. </el-table-column>
  100. <el-table-column
  101. prop="name"
  102. label="费用日期"
  103. width="180">
  104. </el-table-column>
  105. <el-table-column
  106. prop="address"
  107. label="发票种类">
  108. </el-table-column>
  109. <el-table-column
  110. prop="a"
  111. label="费用金额">
  112. </el-table-column>
  113. <el-table-column
  114. prop="b"
  115. label="发票号">
  116. </el-table-column>
  117. <el-table-column
  118. prop="c"
  119. label="备注">
  120. </el-table-column>
  121. </el-table>
  122. </div>
  123. </div>
  124. <!-- 下面部分 -->
  125. <div class="staff" style="margin-left: 250px" v-if="displayTable">
  126. <div style="padding:10px;">
  127. <div>
  128. <el-form label-width="80px" inline>
  129. <!-- 填报日期 -->
  130. <el-form-item label="单据编号" >
  131. <el-input v-model="code" placeholder="单据编号" clearable="true"></el-input>
  132. </el-form-item>
  133. <!-- 填报日期 -->
  134. <el-form-item label="填报日期" >
  135. <el-date-picker type="date" clearable="true" placeholder="选择日期" value-format="yyyy-MM-dd" v-model="date" style="width: 200px;"></el-date-picker>
  136. </el-form-item>
  137. <!-- 费用类型 -->
  138. <el-form-item label="费用类型">
  139. <el-select v-model="type" placeholder="请选择费用类型" clearable="true" style="width: 150px">
  140. <el-option label="一般费用" value="0"></el-option>
  141. <el-option label="差旅费用" value="1"></el-option>
  142. <el-option label="外包费用" value="2"></el-option>
  143. </el-select>
  144. </el-form-item>
  145. <el-form-item>
  146. <el-button @click="getList">查找</el-button>
  147. </el-form-item>
  148. </el-form>
  149. </div>
  150. <el-divider ></el-divider>
  151. <!--列表-->
  152. <el-table :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
  153. <el-table-column prop="code" label="票据编号" ></el-table-column>
  154. <el-table-column prop="totalAmount" label="金额" ></el-table-column>
  155. <el-table-column prop="ownerName" label="填报人" ></el-table-column>
  156. <el-table-column prop="createDate" label="填报日期" ></el-table-column>
  157. <el-table-column prop="ticketNum" label="发票张数" ></el-table-column>
  158. <el-table-column prop="type" label="票据类型" >
  159. <template slot-scope="scope">
  160. {{feeType[scope.row.type]}}
  161. </template>
  162. </el-table-column>
  163. <el-table-column prop="remark" label="备注" width="250">
  164. <template slot-scope="scope">
  165. <span style="font-size:12px;">{{scope.row.remark}}</span>
  166. </template>
  167. </el-table-column>
  168. <el-table-column label="操作" width="160">
  169. <template slot-scope="scope">
  170. <el-button icon="el-icon-view" circle size="mini" @click.stop.native="downloadByA(scope.row)"></el-button>
  171. <el-button icon="el-icon-edit" circle size="mini" style="margin-left:10px;" @click.stop.native="showEditName(scope.row)"></el-button>
  172. <el-button icon="el-icon-delete" circle size="mini" style="margin-left:10px;" @click.stop.native="deleteItem(scope.row)"></el-button>
  173. </template>
  174. </el-table-column>
  175. </el-table>
  176. <!--工具条-->
  177. <el-col :span="24" class="toolbar">
  178. <el-pagination
  179. @size-change="handleSizeChange"
  180. @current-change="handleCurrentChange"
  181. :page-sizes="[20 , 50 , 80 , 100]"
  182. :page-size="20"
  183. layout="total, sizes, prev, pager, next"
  184. :total="total"
  185. style="float:right;"
  186. ></el-pagination>
  187. </el-col>
  188. </div>
  189. </div>
  190. </section>
  191. </template>
  192. <script>
  193. export default {
  194. name: "expense",
  195. components: {},
  196. props: {},
  197. data() {
  198. return {
  199. feeType:["一般费用","差旅费用","外包费用"],
  200. listLoading:false,
  201. tableHeight:0,
  202. list:[],
  203. total:0,
  204. code:null,
  205. date:null,
  206. type:null,
  207. ownerId: null,
  208. displayTable: false,
  209. form: {
  210. name: '',
  211. region: '',
  212. date1: '',
  213. date2: '',
  214. delivery: false,
  215. type: [],
  216. resource: '',
  217. desc: '',
  218. kk: ''
  219. },
  220. tableData: [{
  221. date: '测试项目',
  222. name: '2021-5-18',
  223. address: '测试项目',
  224. a: '10000',
  225. b: '10086',
  226. c: 'abc'
  227. },{
  228. date: '测试项目',
  229. name: '2021-5-18',
  230. address: '测试项目',
  231. a: '10000',
  232. b: '10086',
  233. c: 'abc'
  234. },{
  235. date: '测试项目',
  236. name: '2021-5-18',
  237. address: '测试项目',
  238. a: '10000',
  239. b: '10086',
  240. c: 'abc'
  241. },{
  242. date: '测试项目',
  243. name: '2021-5-18',
  244. address: '测试项目',
  245. a: '10000',
  246. b: '10086',
  247. c: 'abc'
  248. },{
  249. date: '测试项目',
  250. name: '2021-5-18',
  251. address: '测试项目',
  252. a: '10000',
  253. b: '10086',
  254. c: 'abc'
  255. }],
  256. options: [{
  257. value: '选项1',
  258. label: '黄金糕'
  259. }, {
  260. value: '选项2',
  261. label: '双皮奶'
  262. }, {
  263. value: '选项3',
  264. label: '蚵仔煎'
  265. }, {
  266. value: '选项4',
  267. label: '龙须面'
  268. }, {
  269. value: '选项5',
  270. label: '北京烤鸭'
  271. }],
  272. addForm:{code:null,companyId:null,createDate:null, ticketNum:0,type:0,remark:null,totalAmount:0,},
  273. page: 1,
  274. size:20,
  275. };
  276. },
  277. computed: {},
  278. watch: {},
  279. created() {
  280. let height = window.innerHeight;
  281. this.tableHeight = height - 195;
  282. const that = this;
  283. window.onresize = function temp() {
  284. that.tableHeight = window.innerHeight - 195;
  285. };
  286. },
  287. mounted() {
  288. this.getList();
  289. },
  290. methods: {
  291. staffs() { // 控制员工费用报表
  292. this.displayTable = false;
  293. },
  294. bills() { // 控制
  295. this.displayTable = true
  296. },
  297. //获取单据列表
  298. getList() {
  299. this.http.post('/expense-sheet/list', {pageIndex: this.page,
  300. pageSize: this.size,
  301. code: this.code,
  302. createDate: this.date,
  303. ownerId:this.ownerId,
  304. type:this.type,
  305. },
  306. res => {
  307. if (res.code == "ok") {
  308. this.list = res.data.records;
  309. this.total = res.data.total;
  310. } else {
  311. this.$message({
  312. message: res.msg,
  313. type: "error"
  314. });
  315. }
  316. },
  317. error => {
  318. this.$message({
  319. message: error,
  320. type: "error"
  321. });
  322. });
  323. },
  324. //删除单据
  325. delete(id) {
  326. this.http.post('/expense-sheet/delete', {id: id},
  327. res => {
  328. if (res.code == "ok") {
  329. this.$message({
  330. message: '填报成功',
  331. type: "success"
  332. });
  333. } else {
  334. this.$message({
  335. message: res.msg,
  336. type: "error"
  337. });
  338. }
  339. },
  340. error => {
  341. this.$message({
  342. message: error,
  343. type: "error"
  344. });
  345. });
  346. },
  347. //创建单据
  348. add() {
  349. this.addForm.items = '';//这里要传发票列表的json转string
  350. this.http.post('/expense-sheet/add', this.addForm,
  351. res => {
  352. if (res.code == "ok") {
  353. this.$message({
  354. message: '填报成功',
  355. type: "success"
  356. });
  357. } else {
  358. this.$message({
  359. message: res.msg,
  360. type: "error"
  361. });
  362. }
  363. },
  364. error => {
  365. this.$message({
  366. message: error,
  367. type: "error"
  368. });
  369. });
  370. },
  371. //获取单据编码
  372. getNextCode() {
  373. this.http.post('/expense-sheet/getNextCode', {
  374. },
  375. res => {
  376. if (res.code == "ok") {
  377. this.addForm.code = res.data;
  378. } else {
  379. this.$message({
  380. message: res.msg,
  381. type: "error"
  382. });
  383. }
  384. },
  385. error => {
  386. this.$message({
  387. message: error,
  388. type: "error"
  389. });
  390. });
  391. },
  392. //分页
  393. handleCurrentChange(val) {
  394. this.page = val;
  395. this.getList();
  396. },
  397. handleSizeChange(val) {
  398. this.size = val;
  399. this.getList();
  400. },
  401. deleteItem(item) {
  402. this.$confirm("确认要删除吗?", "提示", {
  403. //type: 'warning'
  404. }).then(() => {
  405. this.http.post('/expense-sheet/delete', {id:item.id},
  406. res => {
  407. if (res.code == "ok") {
  408. this.getList();
  409. } else {
  410. this.$message({
  411. message: res.msg,
  412. type: "error"
  413. });
  414. }
  415. },
  416. error => {
  417. this.$message({
  418. message: error,
  419. type: "error"
  420. });
  421. });
  422. });
  423. },
  424. },
  425. };
  426. </script>
  427. <style scoped>
  428. .sidebars {
  429. height: 100%;
  430. position: absolute;
  431. border-right: 1px solid #E6E6E6;
  432. }
  433. .sidebars h2 {
  434. margin: 0;
  435. line-height: 45px;
  436. background: #20A0FF;
  437. font-weight: normal;
  438. color: #fff;
  439. padding-left: 20px;
  440. }
  441. .sidebars .el-col-12 {
  442. width: 100%
  443. }
  444. .staff {
  445. }
  446. .public {
  447. height: 185px;
  448. border-bottom: 1px solid #ddd;
  449. }
  450. .public .el-form-item {
  451. display: inline-block;
  452. }
  453. .pu_button {
  454. margin-top: 20px;
  455. width: 100%;
  456. height: 80px;
  457. background: #F2F2F2;
  458. padding: 20px 0 0 20px;
  459. box-sizing: border-box;
  460. }
  461. .pu_table {
  462. margin: 10px 10px 10px 10px;
  463. }
  464. /* 我的单据报销凭证 */
  465. </style>