代理记账中共新前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

496 rivejä
13 KiB

  1. <template>
  2. <div class="app-container">
  3. <div class="header_main">
  4. <TopDeptChooser :county-code.sync="parms.countyCode" :town-code.sync="parms.townCode" :root-id="rootId" @countyChanged="chooseCity" @dataChanged="chooseDept"/>
  5. <p class="todo_num">镇处理进度:<span>{{ countySummary.numTownProcessedTask }}/{{ countySummary.numTown }}</span></p>
  6. <p class="todo_num3">镇审核进度:<span>{{ countySummary.numTownApprovalTask }}/{{ countySummary.numTown }}</span></p>
  7. <p class="todo_num1">合作社处理进度:<span>{{ countySummary.numBookProcessedTask }}/{{ countySummary.numBook }}</span></p>
  8. <p class="todo_num3">合作社审核进度:<span>{{ countySummary.numBookApprovalTask }}/{{ countySummary.numBook }}</span></p>
  9. <p class="todo_num2">任务异常数:<span>{{countySummary.abnormalCount}}</span>个</p>
  10. </div>
  11. <div class="main">
  12. <div class="left_main">
  13. <el-collapse accordion>
  14. <el-collapse-item v-for="(item,index) in list" :key="index">
  15. <template slot="title">
  16. <div class="left_main_tt">
  17. <p>{{item.townName}}</p>
  18. <div class="tt_label">
  19. <p>异常:{{item.numExcept}}</p>
  20. <p>村庄处理进度:{{item.numProcessFinish}}/{{item.num}}</p>
  21. <p>村庄审核进度:{{item.numApprovalFinish}}/{{item.num}}</p>
  22. </div>
  23. </div>
  24. </template>
  25. <el-table :data="item.villageList" style="width: 100%;">
  26. <el-table-column type="expand">
  27. <template slot-scope="props">
  28. <div class="openTable">
  29. <el-row v-for="(task,index) in props.row.taskList" :key="index">
  30. <el-col :span="9">
  31. <div class="tab_main">
  32. <span v-if="task.agentStatus === '1'">未处理</span><span v-if="task.agentStatus === '3'">未审核</span>
  33. <span v-if="task.agentStatus !== '1'" class="tab_green">已处理</span><span class="tab_green" v-if="task.agentStatus === '4'">已审核</span>
  34. <span class="tab_red" v-if="task.abnormalCount > 0">异常:{{task.abnormalCount}}</span>
  35. {{task.bookName}}
  36. </div>
  37. </el-col>
  38. <el-col :span="2">记账:{{task.voucherCount}}</el-col>
  39. <el-col :span="2">合同:{{task.contracCount}}</el-col>
  40. <el-col :span="2">其他:{{task.otherCount}}</el-col>
  41. <el-col :span="9" style="text-align: right"><el-button type="primary" size="mini" @click="gotoRemoteSite(task)">进入账套</el-button></el-col>
  42. </el-row>
  43. </div>
  44. </template>
  45. </el-table-column>
  46. <el-table-column prop="orgName" label="村" show-overflow-tooltip />
  47. <el-table-column prop="num" label="合作社" show-overflow-tooltip />
  48. <el-table-column label="处理进度" show-overflow-tooltip >
  49. <template slot-scope="scope">
  50. {{scope.row.numProcessFinish}}/{{scope.row.num}}
  51. </template>
  52. </el-table-column>
  53. <el-table-column prop="numExcept" label="异常任务" show-overflow-tooltip >
  54. <template slot-scope="scope">
  55. {{scope.row.numExcept || '无'}}
  56. </template>
  57. </el-table-column>
  58. <el-table-column label="审核进度" show-overflow-tooltip >
  59. <template slot-scope="scope">
  60. {{scope.row.numApprovalFinish}}/{{scope.row.num}}
  61. </template>
  62. </el-table-column>
  63. <el-table-column prop="handleNick" label="会计" show-overflow-tooltip />
  64. <el-table-column prop="distriDate" label="下发日期" show-overflow-tooltip />
  65. <el-table-column prop="endAt" label="截止日期" show-overflow-tooltip />
  66. <el-table-column prop="handleDate" label="记账完成日期" show-overflow-tooltip />
  67. <el-table-column label="是否审批完成" show-overflow-tooltip >
  68. <template slot-scope="scope">
  69. <p class="backButton" v-if="!scope.row.approvalFinish">未完成</p>
  70. <p class="backButton2" v-if="scope.row.approvalFinish">已完成</p>
  71. </template>
  72. </el-table-column>
  73. </el-table>
  74. </el-collapse-item>
  75. </el-collapse>
  76. </div>
  77. <RightYearMonthSelector class="right_main" :year.sync="parms.orderYear" :month.sync="parms.orderMonth" @dateChanged="chooseMonth"/>
  78. </div>
  79. </div>
  80. </template>
  81. <script>
  82. import {cityTree, deptTree} from "@/api/misc/misc_dept";
  83. import {ENV} from "@/utils/env";
  84. import {date_format} from "@/utils/date";
  85. import {managerAllTaskList, managerCountyTaskSummary,} from "@/api/agentcenter/task";
  86. import RightYearMonthSelector from "@/components/framework/RightYearMonthSelector.vue";
  87. import TopDeptChooser from "@/components/framework/TopDeptChooser.vue";
  88. export default {
  89. name: "processing",
  90. components: {TopDeptChooser, RightYearMonthSelector},
  91. data() {
  92. return {
  93. list: [],
  94. total: 0,
  95. parms: {
  96. countyCode: null,
  97. townCode: null,
  98. orderYear: date_format('%Y'),
  99. orderMonth: date_format('%m'),
  100. },
  101. countySummary: {
  102. numTown: 0,
  103. numBook: 0,
  104. abnormalCount: 0,
  105. numTownProcessedTask: 0,
  106. numTownApprovalTask: 0,
  107. numBookProcessedTask: 0,
  108. numBookApprovalTask: 0,
  109. },
  110. rootId: ENV.UserDeptId(),
  111. }
  112. },
  113. created() {
  114. },
  115. methods:{
  116. getTaskList() {
  117. if(!this.parms.countyCode || !this.parms.orderYear || !this.parms.orderMonth)
  118. return;
  119. managerAllTaskList(this.parms).then((resp) => {
  120. this.list = resp.rows;
  121. this.total = resp.total;
  122. })
  123. },
  124. chooseDept(countyCode, townCode, what) {
  125. this.getTaskList();
  126. },
  127. chooseCity(countyCode, townCode) {
  128. this.getSummary();
  129. },
  130. chooseMonth(year, month) {
  131. this.getSummary();
  132. this.getTaskList();
  133. },
  134. gotoRemoteSite(task) {
  135. window.open(`/api/open/book/${task.orgCode}/${task.bookId}`, '_blank');
  136. },
  137. getSummary() {
  138. if(!this.parms.countyCode || !this.parms.orderYear || !this.parms.orderMonth)
  139. return;
  140. managerCountyTaskSummary(this.parms).then((resp) => {
  141. this.countySummary = resp.data;
  142. })
  143. }
  144. },
  145. mounted(){
  146. },
  147. computed: {
  148. },
  149. }
  150. </script>
  151. <style lang="scss" scoped>
  152. p{margin: 0;line-height: 1;}
  153. .app-container{
  154. background-color: #f5f6f8;
  155. width: 100%;
  156. height: 91vh;
  157. }
  158. .selected{
  159. display: flex;
  160. height: 4vh;
  161. p{
  162. width: 8vw;
  163. line-height: 4vh;
  164. text-align: center;
  165. }
  166. }
  167. .pickerTime{
  168. opacity: 0;
  169. position: absolute;
  170. left: 0px;
  171. top: 30px;
  172. width: 5px;
  173. height: 5px;
  174. z-index: -1;
  175. }
  176. .el-dropdown-link {
  177. cursor: pointer;
  178. }
  179. .title{
  180. display: flex;
  181. align-items: center;
  182. i{
  183. display: inline-block;
  184. width: 5px;
  185. height: 20px;
  186. background: #4d7cfe;
  187. border-radius: 5px;
  188. margin-right: 10px;
  189. }
  190. p{
  191. font-size: 16px;
  192. }
  193. }
  194. ::v-deep .el-collapse {
  195. border: none;
  196. }
  197. ::v-deep .el-collapse-item__header {
  198. border: none;
  199. }
  200. ::v-deep .el-collapse-item__content {
  201. background-color: #e2ebff;
  202. }
  203. ::v-deep .el-table__expanded-cell {
  204. background-color: #e2ebff;
  205. }
  206. ::v-deep .el-table {
  207. background-color: transparent;
  208. }
  209. ::v-deep .el-table .cell{
  210. text-align: center;
  211. }
  212. ::v-deep .el-table .el-table__cell{
  213. border: none!important;
  214. }
  215. ::v-deep .el-table::before{
  216. display: none;
  217. }
  218. ::v-deep .el-table .el-table__header-wrapper th{
  219. background-color: transparent;
  220. }
  221. ::v-deep .el-table tr{
  222. background-color: transparent;
  223. }
  224. .openTable{
  225. padding: 1vh 2vw;
  226. background-color: #ffffff;
  227. border-radius: 15px;
  228. overflow: hidden;
  229. width: calc(100% - 40px);
  230. margin: 0 auto;
  231. .tab_main{
  232. display: flex;
  233. span{
  234. color: #ffffff;
  235. background-color: #acabab;
  236. padding: 2px 0px;
  237. width: 4vw;
  238. display: inline-block;
  239. border-radius: 7px;
  240. margin-right: 1vw;
  241. text-align: center;
  242. }
  243. .tab_green{
  244. background-color: #209955;
  245. }
  246. .tab_red{
  247. background-color: #ef0027;
  248. }
  249. }
  250. .num{
  251. color: #3976ff;
  252. display: inline-block;
  253. background-color: #e2ebff;
  254. width: 1.8vw;
  255. border-radius: 5px;
  256. margin-left: 5px;
  257. }
  258. .el-col{
  259. padding: 10px 0;
  260. }
  261. }
  262. .header_main{
  263. display: flex;
  264. align-items: center;
  265. position: relative;
  266. .selected{
  267. width: 16vw;
  268. background-color: #ffffff;
  269. position: absolute;
  270. top: 4vh;
  271. left: 10vw;
  272. z-index: 9;
  273. border-radius: 8px;
  274. box-shadow: 0 10px 10px #dedfe1;
  275. padding: 1vh 0;
  276. div{
  277. display: flex;
  278. height: 4vh;
  279. p{
  280. width: 8vw;
  281. line-height: 4vh;
  282. text-align: center;
  283. }
  284. }
  285. }
  286. .select_address{
  287. display: flex;
  288. align-items: center;
  289. justify-content: center;
  290. margin-right: 2vw;
  291. background-color: #ffffff;
  292. padding: 0px 0px;
  293. border-radius: 8px;
  294. box-shadow: 0 0 10px #dedfe1;
  295. width: 8vw;
  296. height: 4vh;
  297. overflow: hidden;
  298. &:nth-child(2){
  299. margin-right: 0vw;
  300. }
  301. &:nth-child(3){
  302. margin-right: 0vw;
  303. border-top-left-radius: initial;
  304. border-bottom-left-radius: initial;
  305. }
  306. .sanjiao-right {
  307. display: inline-block;
  308. border-left: 8px solid #000;
  309. border-left-color: initial;
  310. border-top: 5px solid transparent;
  311. border-bottom: 5px solid transparent;
  312. margin-right: 5px;
  313. }
  314. .select_time{
  315. text-align: center;
  316. width: 100%;
  317. height: 4vh;
  318. line-height: 4vh;
  319. background-color: #3976ff;
  320. color: #ffffff;
  321. }
  322. }
  323. .todo_num{
  324. margin-left: auto;
  325. span{
  326. font-size: 24px;
  327. color: #3976ff;
  328. }
  329. }
  330. .todo_num1{
  331. margin-left: 2vw;
  332. span{
  333. font-size: 24px;
  334. color: #3976ff;
  335. }
  336. }
  337. .todo_num2{
  338. margin-left: 2vw;
  339. span{
  340. font-size: 24px;
  341. color: #ef0027;
  342. }
  343. }
  344. .todo_num3{
  345. margin-left: 2vw;
  346. span{
  347. font-size: 24px;
  348. color: #209955;
  349. }
  350. }
  351. }
  352. .main{
  353. display: flex;
  354. .left_main{
  355. width: 92%;
  356. margin-right: 0.57%;
  357. margin-top: 15px;
  358. border-radius: 8px;
  359. box-shadow: 4px 0px 10px rgba(0, 0, 0, 0.13);
  360. background: #fff;
  361. padding: 15px 20px;
  362. height: calc(91vh - 91px);
  363. .backButton{
  364. color: #3976ff;
  365. display: inline-block;
  366. }
  367. .backButton2{
  368. color: #209955;
  369. display: inline-block;
  370. }
  371. .left_main_tt{
  372. flex: 1;
  373. display: flex;
  374. align-items: center;
  375. justify-content: space-between;
  376. .tt_label{
  377. display: flex;
  378. align-items: center;
  379. p{
  380. margin-right: 2vw;
  381. &:nth-child(1){
  382. color: #ef0027;
  383. }
  384. }
  385. }
  386. }
  387. }
  388. .right_main{
  389. width: 7.43%;
  390. margin-top: 15px;
  391. border-radius: 8px;
  392. box-shadow: 4px 0px 10px rgba(0, 0, 0, 0.13);
  393. background: #fff;
  394. padding: 15px 20px;
  395. height: calc(91vh - 91px);
  396. }
  397. }
  398. .sanjiao-top {
  399. display: inline-block;
  400. border-bottom: 8px solid #414141;
  401. border-bottom-color: initial;
  402. border-left: 5px solid transparent;
  403. border-right: 5px solid transparent;
  404. }
  405. .sanjiao-bottom {
  406. display: inline-block;
  407. border-top: 8px solid #414141;
  408. border-top-color: initial;
  409. border-left: 5px solid transparent;
  410. border-right: 5px solid transparent;
  411. }
  412. .time_main{
  413. display: flex;
  414. flex-direction: column;
  415. align-items: center;
  416. background-color: #f5f6f8;
  417. color: #414141;
  418. width: 75%;
  419. margin: 0 auto;
  420. margin-top: 15px;
  421. padding: 15px 0;
  422. border-radius: 8px;
  423. position: relative;
  424. cursor: pointer;
  425. p{
  426. margin: 10px 0;
  427. }
  428. }
  429. .month_main{
  430. display: flex;
  431. flex-direction: column;
  432. align-items: center;
  433. color: #414141;
  434. p{
  435. margin-top: 3vh;
  436. position: relative;
  437. &.active{
  438. color: #3976ff;
  439. }
  440. &:hover{
  441. color: #3976ff;
  442. cursor: pointer;
  443. }
  444. i{
  445. display: block;
  446. width: 5px;
  447. height: 5px;
  448. background-color: #fc5659;
  449. position: absolute;
  450. top: -5px;
  451. right: -5px;
  452. border-radius: 100%;
  453. }
  454. }
  455. }
  456. </style>