todoList.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. <template>
  2. <div class="app-container">
  3. <div class="title-container">
  4. <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
  5. </div>
  6. <y-page-list-layout :page-list="pageData" :page-para="listQuery" :get-page-list="getPage">
  7. <template slot="left">
  8. <el-input v-model="listQuery.keyword" placeholder="关键字搜索..." clearable
  9. style="margin-left: 20px;width: 500px;float: left;">
  10. </el-input>
  11. <el-select v-model="listQuery.nodeName" placeholder="当前节点" style="margin-left: 20px;width: 200px;float: left;" clearable
  12. filterable>
  13. <el-option
  14. v-for="item in majorNodes"
  15. :key="item.code"
  16. :label="item.name"
  17. :value="item.name">
  18. </el-option>
  19. </el-select>
  20. <el-date-picker
  21. style="margin-left: 20px;float: left;"
  22. v-model="orderDate"
  23. type="daterange"
  24. align="center"
  25. unlink-panels
  26. range-separator="至"
  27. start-placeholder="下单日期(开始)"
  28. end-placeholder="下单日期(结束)"
  29. :picker-options="pickerOptions" value-format="yyyy-MM-dd">
  30. </el-date-picker>
  31. <el-button class="filter-item" style="margin-left: 10px;float: left;" type="primary" @click="searchList" round>搜索
  32. </el-button>
  33. <el-button class="filter-item" style="float: left;" round type="success" @click="resetSearch()">重置
  34. </el-button>
  35. <el-button class="filter-item" style="float: left;" round @click="showAllLabel()">显示全部列</el-button>
  36. </template>
  37. <parentTable :data="pageData.records" slot="table" style="width: 100%;" @sortTable="sortTable" @headerClick="switchHeader">
  38. <el-table-column label="项目名称" align="center" width="250" v-if="!hiddenLabels.includes('productionName')" prop="productionName" show-overflow-tooltip>
  39. <template slot-scope="{row}">
  40. <span class="enableClick" @click="toDetail(row)">{{ row.productionName==null?row.orderName: row.productionName }}</span>
  41. </template>
  42. </el-table-column>
  43. <el-table-column label="订单号" align="center" width="150" v-if="!hiddenLabels.includes('orderId')" prop="orderId">
  44. <template slot-scope="{row}">
  45. <span class="enableClick" @click="toDetail(row)">{{ row.orderId }}</span>
  46. </template>
  47. </el-table-column>
  48. <el-table-column label="价值意见书号" align="center" width="200" v-if="!hiddenLabels.includes('statementNo')" prop="statementNo" sortable>
  49. <template slot-scope="{row}">
  50. <span>{{ row.statementNo==null?'-': row.statementNo }}</span>
  51. </template>
  52. </el-table-column>
  53. <el-table-column label="报告号/复评函号" align="center" width="200" v-if="!hiddenLabels.includes('reportNo')" prop="reportNo" sortable>
  54. <template slot-scope="{row}">
  55. <span>{{ row.reportNo==null?'-': row.reportNo }}</span>
  56. </template>
  57. </el-table-column>
  58. <el-table-column label="评估对象类型" align="center" width="120" v-if="!hiddenLabels.includes('businessObjectType')" prop="businessObjectType">
  59. <template slot-scope="{row}">
  60. <span>{{ row.businessObjectType}}</span>
  61. </template>
  62. </el-table-column>
  63. <el-table-column label="待办人" align="center" v-if="!hiddenLabels.includes('handler')" prop="handler">
  64. <template slot-scope="{row}">
  65. <span>{{ row.handler }}</span>
  66. </template>
  67. </el-table-column>
  68. <el-table-column label="当前节点" align="center" width="140" v-if="!hiddenLabels.includes('nodeName')" prop="nodeName" sortable>
  69. <template slot-scope="{row}">
  70. <span>{{ row.nodeName }}</span>
  71. </template>
  72. </el-table-column>
  73. <el-table-column label="客户经理" align="center" v-if="!hiddenLabels.includes('clientManager')" prop="clientManager">
  74. <template slot-scope="{row}">
  75. <span>{{ row.clientManager }}</span>
  76. </template>
  77. </el-table-column>
  78. <el-table-column label="负责人" align="center" v-if="!hiddenLabels.includes('principal')" prop="principal">
  79. <template slot-scope="{row}">
  80. <span>{{ row.principal==null?'-': row.principal }}</span>
  81. </template>
  82. </el-table-column>
  83. <el-table-column label="评估对象类型" align="center" width="130" v-if="!hiddenLabels.includes('businessObjectType')" prop="businessObjectType">
  84. <template slot-scope="{row}">
  85. <span>{{ row.businessObjectType }}</span>
  86. </template>
  87. </el-table-column>
  88. <el-table-column label="客户名称" align="center" width="130" v-if="!hiddenLabels.includes('cclienteleName')" prop="cclienteleName">
  89. <template slot-scope="{row}">
  90. <span>{{ row.cclienteleName }}</span>
  91. </template>
  92. </el-table-column>
  93. <el-table-column label="业务来源" align="center" width="130" v-if="!hiddenLabels.includes('cclienteleSubName')" prop="cclienteleSubName">
  94. <template slot-scope="{row}">
  95. <span>{{ row.cclienteleSubName }}</span>
  96. </template>
  97. </el-table-column>
  98. <el-table-column label="客户联系人" align="center" width="130" v-if="!hiddenLabels.includes('cclienteleContactName')" prop="cclienteleContactName">
  99. <template slot-scope="{row}">
  100. <span>{{ row.cclienteleContactName }}</span>
  101. </template>
  102. </el-table-column>
  103. <el-table-column label="客户联系人电话" align="center" width="130" v-if="!hiddenLabels.includes('cmobile')" prop="cmobile">
  104. <template slot-scope="{row}">
  105. {{ row.cmobile }}
  106. </template>
  107. </el-table-column>
  108. <el-table-column label="下单时间" align="center" width="160" v-if="!hiddenLabels.includes('created')" prop="created">
  109. <template slot-scope="{row}">
  110. <span>{{ row.created }}</span>
  111. </template>
  112. </el-table-column>
  113. <el-table-column label="任务创建时间" align="center" width="160" v-if="!hiddenLabels.includes('taskCreated')" prop="taskCreated" sortable>
  114. <template slot-scope="{row}">
  115. <span>{{ row.taskCreated }}</span>
  116. </template>
  117. </el-table-column>
  118. <el-table-column label="操作" align="center" width="100" fixed="right">
  119. <template slot-scope="{row}">
  120. <el-button type="text" @click="toDetail(row)">办理</el-button>
  121. <el-button type="text" @click="transfer(row.taskId)">转交</el-button>
  122. </template>
  123. </el-table-column>
  124. </parentTable>
  125. </y-page-list-layout>
  126. <TransferDialog :transferDialogVisible="visible" @parentFalse="parentFalse()" @getPage="getPage()" :recordId="recordId"></TransferDialog>
  127. </div>
  128. </template>
  129. <script>
  130. import YPageListLayout from '@/components/YPageListLayout'
  131. import Breadcrumb from '@/components/Breadcrumb'
  132. import TransferDialog from '@/components/TaskTransferDialog'
  133. import { getCookie,setCookie,removeCookie } from '@/utils/auth'
  134. export default {
  135. name: 'MajorTaskTodoList',
  136. components: {
  137. Breadcrumb,
  138. YPageListLayout,
  139. TransferDialog
  140. },
  141. data() {
  142. return {
  143. pageData: { records: [] },
  144. listQuery: {
  145. page: 1,
  146. size: 10,
  147. keyword:null,
  148. descs: null,
  149. ascs:null
  150. },
  151. majorNodes:[],
  152. orderDate:'',
  153. pickerOptions: {
  154. shortcuts: [{
  155. text: '最近一周',
  156. onClick(picker) {
  157. const end = new Date();
  158. const start = new Date();
  159. start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
  160. picker.$emit('pick', [start, end]);
  161. }
  162. }, {
  163. text: '最近一个月',
  164. onClick(picker) {
  165. const end = new Date();
  166. const start = new Date();
  167. start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
  168. picker.$emit('pick', [start, end]);
  169. }
  170. }, {
  171. text: '最近三个月',
  172. onClick(picker) {
  173. const end = new Date();
  174. const start = new Date();
  175. start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
  176. picker.$emit('pick', [start, end]);
  177. }
  178. }]
  179. },
  180. visible:false,
  181. recordId:null,
  182. hiddenLabels:[]
  183. }
  184. },
  185. created() {
  186. if (getCookie("MajorTodoList-hiddenLabels")!=undefined){
  187. this.hiddenLabels = JSON.parse(getCookie("MajorTodoList-hiddenLabels"))
  188. }
  189. this.getPage();
  190. this.getMajorNodes();
  191. },
  192. methods: {
  193. resetSearch() {
  194. this.$router.push({ query: {} });
  195. this.orderDate = '';
  196. this.listQuery = {
  197. current: 1,
  198. size: 10,
  199. descs: 'taskCreated',
  200. }
  201. this.getPage()
  202. },
  203. removeHandle(row) {
  204. // console.log(data)
  205. this.$confirm('确认删除当前记录吗?', '警告', {
  206. confirmButtonText: '确认',
  207. cancelButtonText: '取消',
  208. type: 'warning',
  209. })
  210. .then(async () => {
  211. this.$api.term.delete(row.id).then((res) => {
  212. if (res.code === 200) {
  213. this.$message({
  214. type: 'success',
  215. message: '删除成功',
  216. })
  217. this.getPage()
  218. }
  219. })
  220. })
  221. .catch((err) => {
  222. console.error(err)
  223. })
  224. },
  225. searchList() {
  226. // 重置分页
  227. this.listQuery.page = 1
  228. this.listQuery.size = 10
  229. if (this.orderDate){
  230. this.listQuery.startDate = this.orderDate[0]+' 00:00:00';
  231. this.listQuery.endDate = this.orderDate[1]+ ' 23:59:59';
  232. }
  233. this.getPage()
  234. },
  235. getPage() {
  236. this.$api.workNodeTaskRecord.majorTaskTodoList(this.listQuery).then(res=>{
  237. if (res.code ===200){
  238. this.pageData = res.data;
  239. }
  240. })
  241. },
  242. deleteInfo(id) {
  243. const that = this
  244. that.$confirm('请确认是否删除该数据?', '提示', {
  245. confirmButtonText: '确定',
  246. cancelButtonText: '取消',
  247. type: 'warning',
  248. center: true
  249. }).then(() => {
  250. that.$api.item.delete(id).then(data => {
  251. that.loading = false
  252. if (data.code === 200) {
  253. that.getPage()
  254. } else {
  255. this.$message({
  256. type: 'error',
  257. message: data.msg
  258. })
  259. }
  260. })
  261. }).catch(() => {
  262. })
  263. },
  264. getMajorNodes(){
  265. this.$api.workNode.nodesByBusiness('MAJOR_BUSINESS').then(res=>{
  266. if (res.code === 200){
  267. this.majorNodes = res.data
  268. }
  269. })
  270. },
  271. parentFalse(){
  272. this.visible = false;
  273. },
  274. transfer(recordId){
  275. this.visible = true;
  276. this.recordId = recordId;
  277. },
  278. toDetail(row){
  279. let reportNo = row.reportNo;
  280. let statementNo = row.statementNo;
  281. if (row.nodeCode === 'REPORT_OUT_APPLY' || row.nodeCode === 'LETTER_OUT_APPLY'){
  282. this.$router.push(`/major/my/order?todoBusinessId=${row.businessId}&sNo=${statementNo}&rNo=${reportNo}&tId=${row.taskId}&cId=${row.currentNodeId}`)
  283. return;
  284. }
  285. if (row.nodeCode === 'REPORT_OUT_FINANCE_CHECK' || row.nodeCode === 'REPORT_OUT_DEPARTMENT_CHECK' || row.nodeCode === 'LETTER_OUT_FINANCE_CHECK' || row.nodeCode === 'LETTER_OUT_DEPARTMENT_CHECK'){
  286. this.$router.push(`/out/warehouse/check?todoBusinessId=${row.businessId}&sNo=${statementNo}&rNo=${reportNo}&tId=${row.taskId}&cId=${row.currentNodeId}&nCode=${row.nodeCode}&businessType=MAJOR_BUSINESS`)
  287. return;
  288. }
  289. if (row.nodeCode === 'BUSINESS_ARCHIVING'){
  290. this.$router.push(`/major/saveFile/waiting`)
  291. return;
  292. }
  293. if (row.nodeCode === 'STATEMENT_DELIVERY'){
  294. this.$router.push(`/major/my/order?todoBusinessId=${row.businessId}&sNo=${statementNo}&tId=${row.taskId}&cId=${row.currentNodeId}`)
  295. return;
  296. }
  297. if (row.nodeCode==='STATEMENT_IN' || row.nodeCode==='STATEMENT_OUT' ||
  298. row.nodeCode==='REPORT_IN'|| row.nodeCode==='REPORT_OUT' ||
  299. row.nodeCode==='LETTER_IN' || row.nodeCode==='LETTER_OUT'){
  300. this.$router.push(`/major/production/in?openDialog=${true}`)
  301. return;
  302. }
  303. if (reportNo && statementNo){
  304. this.$router.push(`/major/todo/detail?id=${row.businessId}&reportNo=${reportNo}&statementNo=${row.statementNo}&doWorkflow=${true}&currentNodeId=${row.currentNodeId}&currentNodeCode=${row.nodeCode}&back=${'/major/todo'}`)
  305. }else if (!reportNo && statementNo){
  306. this.$router.push(`/major/todo/detail?id=${row.businessId}&statementNo=${row.statementNo}&doWorkflow=${true}&currentNodeId=${row.currentNodeId}&currentNodeCode=${row.nodeCode}&back=${'/major/todo'}`)
  307. }else if (reportNo && !statementNo){
  308. this.$router.push(`/major/todo/detail?id=${row.businessId}&reportNo=${reportNo}&doWorkflow=${true}&currentNodeId=${row.currentNodeId}&currentNodeCode=${row.nodeCode}&back=${'/major/todo'}`)
  309. }else{
  310. this.$router.push(`/major/todo/detail?id=${row.businessId}&doWorkflow=${true}&currentNodeId=${row.currentNodeId}&currentNodeCode=${row.nodeCode}&back=${'/major/todo'}`)
  311. }
  312. },
  313. sortTable(sortParams){
  314. this.listQuery.ascs = sortParams.ascs;
  315. this.listQuery.descs = sortParams.descs;
  316. this.$api.workNodeTaskRecord.majorTaskTodoList(this.listQuery).then(res=>{
  317. if (res.code ===200){
  318. this.pageData = res.data;
  319. }
  320. })
  321. },
  322. switchHeader(data){
  323. this.hiddenLabels.push(data);
  324. setCookie("MajorTodoList-hiddenLabels",this.hiddenLabels);
  325. },
  326. showAllLabel(){
  327. removeCookie("MajorTodoList-hiddenLabels");
  328. location.reload();
  329. }
  330. },
  331. }
  332. </script>
  333. <style lang="scss" scoped>
  334. .enableClick:hover{
  335. color:#1890ff;
  336. cursor: pointer;
  337. }
  338. </style>