代理记账中共新前端
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 

309 wiersze
7.9 KiB

  1. <template>
  2. <div class="app-container">
  3. <div class="header_main">
  4. <el-dropdown trigger="click" placement="bottom-start">
  5. <div class="select_address el-dropdown-link">
  6. <span class="sanjiao-right"></span>
  7. <p>{{cityName}}</p>
  8. </div>
  9. <el-dropdown-menu slot="dropdown" style="width: 8vw;text-align: center;">
  10. <el-dropdown-item v-for="(item,index) in deptOptions">
  11. <div class="selected" @click="chooseCity(item.orgCode)">
  12. <p>{{item.deptName}}</p>
  13. </div>
  14. </el-dropdown-item>
  15. </el-dropdown-menu>
  16. </el-dropdown>
  17. <el-dropdown trigger="click" placement="bottom-start">
  18. <div class="el-dropdown-link select_main">
  19. <div class="select_address">
  20. <span class="sanjiao-right"></span>
  21. <p>{{townName}}</p>
  22. </div>
  23. <!-- <div class="select_address"></div>-->
  24. </div>
  25. <el-dropdown-menu slot="dropdown" style="width: 16vw;text-align: center;">
  26. <el-dropdown-item v-for="(item,index) in townList">
  27. <div class="selected" @click="chooseTown(item.orgCode)">
  28. <p>{{item.deptName}}</p>
  29. </div>
  30. </el-dropdown-item>
  31. </el-dropdown-menu>
  32. </el-dropdown>
  33. <p class="todo_num">待处理合作社:<span>{{total}}</span>个</p>
  34. </div>
  35. <div class="main">
  36. <div class="left_main">
  37. <el-table :data="list" style="width: 100%;">
  38. <el-table-column prop="orgName" label="村" />
  39. <el-table-column prop="bookName" label="组织名称" show-overflow-tooltip />
  40. <el-table-column prop="voucherCount" label="记账笔数" >
  41. <template slot-scope="scope">
  42. {{scope.row.voucherCount}} <span class="num">7</span>
  43. </template>
  44. </el-table-column>
  45. <el-table-column prop="contracCount" label="合同数量" />
  46. <el-table-column prop="otherCount" label="其他" />
  47. <el-table-column prop="allCount" label="任务总数" />
  48. <el-table-column prop="distriDate" :formatter="dateFormatter" label="下发日期" sortable />
  49. <el-table-column prop="endAt" label="截止日期" sortable />
  50. <el-table-column label="操作">
  51. <template slot-scope="scope">
  52. <el-button type="primary" size="mini" icon="el-icon-edit" @click="finishTask(scope.row)"></el-button>
  53. </template>
  54. </el-table-column>
  55. </el-table>
  56. </div>
  57. <RightYearMonthSelector class="right_main" :year.sync="parms.orderYear" :month.sync="parms.orderMonth" @dateChanged="chooseMonth"/>
  58. </div>
  59. </div>
  60. </template>
  61. <script>
  62. import {cityTree} from "@/api/misc/misc_dept";
  63. import {ENV} from "@/utils/env";
  64. import {accountingTodoTaskList, finishTask} from "@/api/agentcenter/accounting_task";
  65. import {date, date_format} from "@/utils/date";
  66. import RightYearMonthSelector from "@/components/framework/RightYearMonthSelector.vue";
  67. export default {
  68. name: "todo",
  69. components: {RightYearMonthSelector},
  70. data() {
  71. return {
  72. deptOptions: [],
  73. list: [],
  74. total: 0,
  75. parms: {
  76. countyCode: null,
  77. townCode: null,
  78. orderYear: date_format('%Y'),
  79. orderMonth: date_format('%m'),
  80. },
  81. }
  82. },
  83. created() {
  84. this.getDeptTree();
  85. },
  86. methods:{
  87. getDeptTree() {
  88. cityTree({rootId: ENV.UserDeptId()}).then((resp) => {
  89. this.deptOptions = resp.data;
  90. if(this.deptOptions.length)
  91. {
  92. this.parms.countyCode = this.deptOptions[0].orgCode;
  93. this.getTaskList();
  94. }
  95. });
  96. },
  97. chooseCity(cmd) {
  98. this.parms.countyCode = cmd;
  99. this.parms.townCode = null;
  100. this.getTaskList();
  101. },
  102. chooseTown(cmd) {
  103. this.parms.townCode = cmd;
  104. this.getTaskList();
  105. },
  106. getTaskList() {
  107. if(!this.parms.countyCode || !this.parms.orderYear || !this.parms.orderMonth)
  108. return;
  109. accountingTodoTaskList(this.parms).then((resp) => {
  110. this.list = resp.rows;
  111. this.total = resp.total;
  112. })
  113. },
  114. chooseMonth(year, month) {
  115. this.getTaskList();
  116. },
  117. dateFormatter(row, column, cellValue, index) {
  118. return cellValue ? date(cellValue, 'yyyy-MM-dd HH:mm:ss', 'yyyy-MM-dd') : '';
  119. },
  120. finishTask(row) {
  121. finishTask({
  122. taskId: row.id,
  123. }).then((resp) => {
  124. this.$message.success('完成成功');
  125. this.getTaskList();
  126. });
  127. },
  128. },
  129. mounted(){
  130. },
  131. computed: {
  132. cityName() {
  133. if(!this.deptOptions.length)
  134. return '';
  135. let dept = this.deptOptions.find((x) => x.orgCode === this.parms.countyCode);
  136. return dept ? dept.deptName : '';
  137. },
  138. townList() {
  139. if(!this.deptOptions.length)
  140. return [];
  141. let dept = this.deptOptions.find((x) => x.orgCode === this.parms.countyCode);
  142. return dept ? dept.children || [] : [];
  143. },
  144. townName() {
  145. if(!this.townList.length)
  146. return '';
  147. let dept = this.townList.find((x) => x.orgCode === this.parms.townCode);
  148. return dept ? dept.deptName : '';
  149. },
  150. },
  151. }
  152. </script>
  153. <style lang="scss" scoped>
  154. p{margin: 0;line-height: 1;}
  155. .app-container{
  156. background-color: #f5f6f8;
  157. width: 100%;
  158. height: 91vh;
  159. }
  160. .el-dropdown-link {
  161. cursor: pointer;
  162. }
  163. .title{
  164. display: flex;
  165. align-items: center;
  166. i{
  167. display: inline-block;
  168. width: 5px;
  169. height: 20px;
  170. background: #4d7cfe;
  171. border-radius: 5px;
  172. margin-right: 10px;
  173. }
  174. p{
  175. font-size: 16px;
  176. }
  177. }
  178. .num{
  179. color: #3976ff;
  180. display: inline-block;
  181. background-color: #e2ebff;
  182. width: 1.8vw;
  183. border-radius: 5px;
  184. margin-left: 5px;
  185. }
  186. ::v-deep .el-table .cell{
  187. text-align: center;
  188. }
  189. ::v-deep .el-table .el-table__cell{
  190. border: none!important;
  191. }
  192. ::v-deep .el-table::before{
  193. display: none;
  194. }
  195. ::v-deep .el-table .el-table__header-wrapper th{
  196. background-color: transparent;
  197. }
  198. ::v-deep .el-table tr{
  199. background-color: transparent;
  200. }
  201. .selected{
  202. display: flex;
  203. height: 4vh;
  204. p{
  205. width: 8vw;
  206. line-height: 4vh;
  207. text-align: center;
  208. }
  209. }
  210. .header_main{
  211. display: flex;
  212. align-items: center;
  213. position: relative;
  214. .select_main{
  215. display: flex;
  216. align-items: center;
  217. & .select_address:nth-child(1){
  218. margin-right: 0vw;
  219. /* border-top-right-radius: initial;
  220. border-bottom-right-radius: initial;*/
  221. }
  222. & .select_address:nth-child(2){
  223. margin-right: 0vw;
  224. border-top-left-radius: initial;
  225. border-bottom-left-radius: initial;
  226. }
  227. }
  228. .select_address{
  229. display: flex;
  230. align-items: center;
  231. justify-content: center;
  232. margin-right: 2vw;
  233. background-color: #ffffff;
  234. padding: 0px 0px;
  235. border-radius: 8px;
  236. box-shadow: 0 0 10px #dedfe1;
  237. width: 8vw;
  238. height: 4vh;
  239. overflow: hidden;
  240. .sanjiao-right {
  241. display: inline-block;
  242. border-left: 8px solid #000;
  243. border-left-color: initial;
  244. border-top: 5px solid transparent;
  245. border-bottom: 5px solid transparent;
  246. margin-right: 5px;
  247. }
  248. .select_time{
  249. text-align: center;
  250. width: 100%;
  251. height: 4vh;
  252. line-height: 4vh;
  253. background-color: #3976ff;
  254. color: #ffffff;
  255. }
  256. }
  257. .todo_num{
  258. margin-left: auto;
  259. span{
  260. font-size: 24px;
  261. color: #3976ff;
  262. }
  263. }
  264. }
  265. .main{
  266. display: flex;
  267. .left_main{
  268. width: 92%;
  269. margin-right: 0.57%;
  270. margin-top: 15px;
  271. border-radius: 8px;
  272. box-shadow: 4px 0px 10px rgba(0, 0, 0, 0.13);
  273. background: #fff;
  274. padding: 15px 20px;
  275. height: calc(91vh - 91px);
  276. }
  277. .right_main{
  278. width: 7.43%;
  279. margin-top: 15px;
  280. border-radius: 8px;
  281. box-shadow: 4px 0px 10px rgba(0, 0, 0, 0.13);
  282. background: #fff;
  283. padding: 15px 20px;
  284. height: calc(91vh - 91px);
  285. }
  286. }
  287. </style>