Browse Source

1.新增超级管理员可终止资产、大中型与个贷业务
2.新增查询大中型与个贷查询终止流程列表页面

GouGengquan 5 tháng trước cách đây
mục cha
commit
fbf012371e

+ 3 - 0
src/api/modules/major.js

@@ -33,6 +33,9 @@ export default {
   page(params){
     return request.get(`major/page`, { params: params })
   },
+  getTerminatedPage(params){
+    return request.get(`major/getTerminatedPage`, { params: params })
+  },
   doRecall(params){
     return request.get(`major/recall/${params}`)
   },

+ 3 - 0
src/api/modules/personal.js

@@ -6,6 +6,9 @@ export default {
   list(params) {
     return request.get(`personal`, { params: params })
   },
+  getTerminatedPage(params) {
+    return request.get(`personal/getTerminatedPage`, { params: params })
+  },
   detail(params) {
     return request.get(`personal/${params}`)
   },

+ 4 - 0
src/router/urlMap.js

@@ -78,6 +78,7 @@ import _views_major_my_done from '@/views/major/doneList'
 import _views_major_detail from '@/views/major/detail'
 import _views_major_production_in from '@/views/major/productionIn'
 import _views_major_my_order from '@/views/major/myOrder'
+import _views_major_terminate_list from '@/views/major/terminateList'
 import _views_finance_real_fund from '@/views/finance/fundList'
 import _views_finance_real_fund_create from '@/views/finance/fundList'
 import _views_out_apply_check from '@/views/finance/outWarehouseCheck'
@@ -91,6 +92,7 @@ import _views_personal_my_order from '@/views/personal/myOrder'
 import _views_personal_order from '@/views/personal/order'
 import _views_personal_todoList from '@/views/personal/todoList'
 import _views_personal_todo from '@/views/personal/todoDetail'
+import _views_personal_terminate_list from '@/views/personal/terminateList'
 import _views_assets_all_list from '@/views/assets/allList'
 import _views_assets_my_order_list from '@/views/assets/myOrderList'
 import _views_assets_add_order from '@/views/assets/addAssetsOrder'
@@ -216,6 +218,7 @@ export default {
   _views_major_detail,
   _views_major_production_in,
   _views_major_my_order,
+  _views_major_terminate_list,
   _views_finance_real_fund,
   _views_finance_real_fund_create,
   _views_out_apply_check,
@@ -237,6 +240,7 @@ export default {
   _views_personal_save_file,
   _views_personal_readonly_detail,
   _views_personal_done,
+  _views_personal_terminate_list,
   _views_complex_index,
   _views_major_old_list,
   _views_commission_major_rate,

+ 303 - 266
src/views/assets/allList.vue

@@ -1,124 +1,114 @@
 <template>
-    <div class="app-container">
-        <div class="title-container">
-            <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
-        </div>
-        <y-page-list-layout :page-list="pageData" :page-para="listQuery" :get-page-list="selectPage">
-            <template slot="left">
-                <el-input style="margin-left: 20px;width: 300px;float: left;" class="filter-item"
-                    v-model="listQuery.keyWord" placeholder="项目编号/报告号/项目名称/业务来源" clearable>
-                </el-input>
-                <el-select v-model="listQuery.principalId" filterable placeholder="项目负责人(可搜索)"
-                    style=" width: 200px;margin-left: 10px;float: left;">
-                    <el-option v-for="(u, id) in allUsers" :label="u.name" :value="u.id"></el-option>
-                </el-select>
-                <el-select v-model="listQuery.clientManagerId" filterable placeholder="客户经理(可搜索)"
-                    style=" width: 200px;margin-left: 10px;float: left;">
-                    <el-option v-for="(u, id) in allUsers" :label="u.name" :value="u.id"></el-option>
-                </el-select>
-                <el-select v-model="listQuery.assetsBusinessGener" filterable placeholder="业务类型"
-                    style=" width: 200px;margin-left: 10px;float: left;">
-                    <el-option v-for="(s, value) in assetsBusinessGeners" :label="s.label" :value="s.value"></el-option>
-                </el-select>
-                <el-select v-model="listQuery.nodeCode" filterable placeholder="流程节点(可搜索)"
-                    style=" width: 200px;margin-left: 10px;float: left;">
-                    <el-option v-for="item in nodes" :label="item.name" :value="item.code">
-                    </el-option>
-                </el-select>
-                <el-select v-model="listQuery.departmentId" filterable placeholder="接单部门"
-                    style=" width: 200px;margin-left: 10px;float: left;">
-                    <el-option v-for="(d, id) in allotDepartment" :label="d.name" :value="d.id"></el-option>
-                </el-select>
-                <el-button class="filter-item" style="margin-left: 10px;float: left;" type="primary" @click="searchList"
-                    round>搜索
-                </el-button>
-                <el-button class="filter-item" style="float: left;" round type="success" @click="resetParams()">重置
-                </el-button>
-            </template>
-            <parentTable ref="table" v-loading="listLoading" :data="pageData.records" slot="table" style="width: 100%;">
-                <el-table-column label="项目编号" align="center" width="150">
-                    <template slot-scope="{row}">
-                        <span @contextmenu.prevent="$doCopy(row.orderId)">{{ row.orderId }}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column label="分单类型" align="center" width="150">
-                    <template slot-scope="{row}">
-                        <span>{{ row.allotType }}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column label="意见书号" align="center" width="250">
-                    <template slot-scope="{row}">
-                        <span @contextmenu.prevent="$doCopy(row.statementNo)">{{ row.statementNo == null ? '-' : row.statementNo }}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column label="报告号" align="center" width="250">
-                    <template slot-scope="{row}">
-                        <span @contextmenu.prevent="$doCopy(row.reportNo)">{{ row.reportNo == null ? '-' : row.reportNo }}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column label="项目名称" align="center" width="250">
-                    <template slot-scope="{row}">
-                        <span>{{ row.reportName || row.statementName || row.name }}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column label="业务类型" align="center" width="150">
-                    <template slot-scope="{row}">
-                        <span>{{ row.assetsBusinessGener }}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column label="客户名称" align="center" width="150">
-                    <template slot-scope="{row}">
-                        <span>{{ row.customerName }}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column label="业务来源" align="center" width="150">
-                    <template slot-scope="{row}">
-                        <span>{{ row.customerSubName }}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column label="委托人" align="center" width="150">
-                    <template slot-scope="{row}">
-                        <span>{{ row.bailor == null ? '-' : row.bailor }}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column label="委托人联系电话" align="center" width="150">
-                    <template slot-scope="{row}">
-                        <span>{{ row.bailorContactTel == null ? '-' : row.bailorContactTel }}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column label="当前节点" align="center" width="150">
-                    <template slot-scope="{row}">
-                        <span>{{ row.currentNodeName }}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column label="当前节点负责人" align="center" width="150">
-                    <template slot-scope="{row}">
-                        <span>{{ row.handlerName }}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column label="项目负责人" align="center" width="150">
-                    <template slot-scope="{row}">
-                        <span>{{ row.principalName == null ? '-' : row.principalName }}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column label="客户经理" align="center" width="150">
-                    <template slot-scope="{row}">
-                        <span>{{ row.clientManagerName }}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column label="下单时间" align="center" width="150">
-                    <template slot-scope="{row}">
-                        <span>{{ row.created }}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column label="操作" align="center" width="80" fixed="right">
-                    <template slot-scope="{row}">
-                        <el-button type="text" @click="orderDetail(row)">查看</el-button>
-                    </template>
-                </el-table-column>
-            </parentTable>
-        </y-page-list-layout>
+  <div class="app-container">
+    <div class="title-container">
+      <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
     </div>
+    <y-page-list-layout :page-list="pageData" :page-para="listQuery" :get-page-list="selectPage">
+      <template slot="left">
+        <el-input style="margin-left: 20px;width: 300px;float: left;" class="filter-item" v-model="listQuery.keyWord" placeholder="项目编号/报告号/项目名称/业务来源" clearable></el-input>
+        <el-select v-model="listQuery.principalId" filterable placeholder="项目负责人(可搜索)" style=" width: 200px;margin-left: 10px;float: left;">
+          <el-option v-for="(u, id) in allUsers" :label="u.name" :value="u.id"></el-option>
+        </el-select>
+        <el-select v-model="listQuery.clientManagerId" filterable placeholder="客户经理(可搜索)" style=" width: 200px;margin-left: 10px;float: left;">
+          <el-option v-for="(u, id) in allUsers" :label="u.name" :value="u.id"></el-option>
+        </el-select>
+        <el-select v-model="listQuery.assetsBusinessGener" filterable placeholder="业务类型" style=" width: 200px;margin-left: 10px;float: left;">
+          <el-option v-for="(s, value) in assetsBusinessGeners" :label="s.label" :value="s.value"></el-option>
+        </el-select>
+        <el-select v-model="listQuery.nodeCode" filterable placeholder="流程节点(可搜索)" style=" width: 200px;margin-left: 10px;float: left;">
+          <el-option v-for="item in nodes" :label="item.name" :value="item.code"></el-option>
+        </el-select>
+        <el-select v-model="listQuery.departmentId" filterable placeholder="接单部门" style=" width: 200px;margin-left: 10px;float: left;">
+          <el-option v-for="(d, id) in allotDepartment" :label="d.name" :value="d.id"></el-option>
+        </el-select>
+        <el-button class="filter-item" style="margin-left: 10px;float: left;" type="primary" @click="searchList" round>搜索</el-button>
+        <el-button class="filter-item" style="float: left;" round type="success" @click="resetParams()">重置</el-button>
+      </template>
+      <parentTable ref="table" v-loading="listLoading" :data="pageData.records" slot="table" style="width: 100%;">
+        <el-table-column label="项目编号" align="center" width="150">
+          <template slot-scope="{row}">
+            <span @contextmenu.prevent="$doCopy(row.orderId)">{{ row.orderId }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="分单类型" align="center" width="150">
+          <template slot-scope="{row}">
+            <span>{{ row.allotType }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="意见书号" align="center" width="250">
+          <template slot-scope="{row}">
+            <span @contextmenu.prevent="$doCopy(row.statementNo)">{{ row.statementNo == null ? '-' : row.statementNo }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="报告号" align="center" width="250">
+          <template slot-scope="{row}">
+            <span @contextmenu.prevent="$doCopy(row.reportNo)">{{ row.reportNo == null ? '-' : row.reportNo }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="项目名称" align="center" width="250">
+          <template slot-scope="{row}">
+            <span>{{ row.reportName || row.statementName || row.name }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="业务类型" align="center" width="150">
+          <template slot-scope="{row}">
+            <span>{{ row.assetsBusinessGener }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="客户名称" align="center" width="150">
+          <template slot-scope="{row}">
+            <span>{{ row.customerName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="业务来源" align="center" width="150">
+          <template slot-scope="{row}">
+            <span>{{ row.customerSubName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="委托人" align="center" width="150">
+          <template slot-scope="{row}">
+            <span>{{ row.bailor == null ? '-' : row.bailor }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="委托人联系电话" align="center" width="150">
+          <template slot-scope="{row}">
+            <span>{{ row.bailorContactTel == null ? '-' : row.bailorContactTel }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="当前节点" align="center" width="150">
+          <template slot-scope="{row}">
+            <span>{{ row.currentNodeName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="当前节点负责人" align="center" width="150">
+          <template slot-scope="{row}">
+            <span>{{ row.handlerName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="项目负责人" align="center" width="150">
+          <template slot-scope="{row}">
+            <span>{{ row.principalName == null ? '-' : row.principalName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="客户经理" align="center" width="150">
+          <template slot-scope="{row}">
+            <span>{{ row.clientManagerName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="下单时间" align="center" width="150">
+          <template slot-scope="{row}">
+            <span>{{ row.created }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" width="100" fixed="right">
+          <template slot-scope="{row}">
+            <el-button type="text" @click="orderDetail(row)">查看</el-button>
+            <PermissionButton menu-code="_views_assets_order_terminated" class-name="filter-item" name type="text" @click="terminate(row.currentNodeId, row.statementNo, row.reportNo)" />
+          </template>
+        </el-table-column>
+      </parentTable>
+    </y-page-list-layout>
+  </div>
 </template>
 
 <script>
@@ -127,160 +117,207 @@ import Breadcrumb from '@/components/Breadcrumb'
 import PermissionButton from '@/components/PermissionButton/PermissionButton'
 
 export default {
-    name: 'AssetsAllList',
-    components: {
-        Breadcrumb,
-        YPageListLayout,
-        PermissionButton,
-    },
-    data() {
-        return {
-            pageData: { records: [] },
-            listLoading: false,
-            listQuery: {
-                page: 1,
-                size: 10,
-                current: 1,
-                // 节点code
-                nodeCode: null,
-                // 客户经理id
-                clientManagerId: null,
-                // 项目负责人id
-                principalId: null,
-                // 业务类型
-                assetsBusinessGener: null,
-                // 关键字
-                keyWord: null,
-                departmentId: null,
-                selectByDepartment: false,
-                selectByAll: true
-            },
-            // 接单部门
-            allotDepartment: [],
-            // 用户下拉列表
-            allUsers: [],
-            // 节点信息下拉列表
-            nodes: [],
-            // 业务类型下拉列表
-            assetsBusinessGeners: [
-                {
-                    value: '企业价值',
-                    label: '企业价值'
-                }, {
-                    value: '单项资产',
-                    label: '单项资产'
-                }, {
-                    value: '资产组合',
-                    label: '资产组合'
-                }, {
-                    value: '无形资产',
-                    label: '无形资产'
-                }, {
-                    value: '森林资源资产',
-                    label: '森林资源资产'
-                }, {
-                    value: '珠宝首饰艺术品',
-                    label: '珠宝首饰艺术品'
-                }, {
-                    value: '其他资产评估',
-                    label: '其他资产评估'
-                }
-            ]
-        }
-    },
-    created() {
-        // 获取用户下拉列表
-        this.getAllUser();
-        // 获取节点下拉列表
-        this.getNodes();
-        // 获取分单部门
-        this.getAllotDepartment();
-        // 获取资产业务订单
-        this.selectPage();
-    },
-    methods: {
-        // 无条件分页查询
-        selectPage() {
-            // this.listQuery.selectByDepartment = true;
-            this.listLoading = true;
-            this.$api.assets.selectPage(this.listQuery).then(res => {
-                if (res.code === 200) {
-                    this.pageData = res.data;
-                }
-                this.listLoading = false;
-            })
+  name: 'AssetsAllList',
+  components: {
+    Breadcrumb,
+    YPageListLayout,
+    PermissionButton,
+  },
+  data() {
+    return {
+      pageData: { records: [] },
+      listLoading: false,
+      listQuery: {
+        page: 1,
+        size: 10,
+        current: 1,
+        // 节点code
+        nodeCode: null,
+        // 客户经理id
+        clientManagerId: null,
+        // 项目负责人id
+        principalId: null,
+        // 业务类型
+        assetsBusinessGener: null,
+        // 关键字
+        keyWord: null,
+        departmentId: null,
+        selectByDepartment: false,
+        selectByAll: true,
+      },
+      // 接单部门
+      allotDepartment: [],
+      // 用户下拉列表
+      allUsers: [],
+      // 节点信息下拉列表
+      nodes: [],
+      // 业务类型下拉列表
+      assetsBusinessGeners: [
+        {
+          value: '企业价值',
+          label: '企业价值',
         },
-        // 条件查询
-        searchList() {
-            // 重置分页
-            this.listQuery.page = 1
-            this.listQuery.size = 10
-            this.selectPage()
+        {
+          value: '单项资产',
+          label: '单项资产',
         },
-        // 重置搜索条件
-        resetParams() {
-            this.$router.push({ query: {} });
-            this.listQuery = {
-                page: 1,
-                size: 10,
-                current: 1,
-                // 节点code
-                nodeCode: null,
-                // 客户经理id
-                clientManagerId: null,
-                // 项目负责人id
-                principalId: null,
-                // 业务类型
-                assetsBusinessGener: null,
-                // 关键字
-                keyWord: null,
-                departmentId: null,
-                selectByDepartment: false,
-                selectByAll: true
-            }
-            this.selectPage();
+        {
+          value: '资产组合',
+          label: '资产组合',
         },
-        // 获取所有用户下拉列表
-        getAllUser() {
-            this.$api.user.simpleAll().then(res => {
-                if (res.code === 200) {
-                    this.allUsers = res.data;
-                }
-            })
+        {
+          value: '无形资产',
+          label: '无形资产',
         },
-        getNodes() {
-            this.$api.workNode.enum().then(res => {
-                if (res.code === 200) {
-                    this.nodes = res.data
-                }
-            })
+        {
+          value: '森林资源资产',
+          label: '森林资源资产',
         },
-        orderDetail(row) {
-            const newRow = {
-                assetsId: row.assetsId,
-                statementNo: row.statementNo,
-                reportNo: row.reportNo,
-            }
-            this.$router.push({
-                path: "/assets/orderDetail",
-                query: {
-                    row: JSON.stringify(newRow),
-                    back: '/assets/allList',
-                    couldEdit: false,
-                    couldBack: false,
-                    disabledStatus: true
-                }
-            })
+        {
+          value: '珠宝首饰艺术品',
+          label: '珠宝首饰艺术品',
         },
-        // 获取部门下拉列表
-        getAllotDepartment() {
-            this.$api.department.allot('ASSET_BUSINESS').then(res => {
-                if (res.code === 200) {
-                    this.allotDepartment = res.data;
-                }
-            })
-        }
+        {
+          value: '其他资产评估',
+          label: '其他资产评估',
+        },
+      ],
     }
+  },
+  created() {
+    // 获取用户下拉列表
+    this.getAllUser()
+    // 获取节点下拉列表
+    this.getNodes()
+    // 获取分单部门
+    this.getAllotDepartment()
+    // 获取资产业务订单
+    this.selectPage()
+  },
+  methods: {
+    // 无条件分页查询
+    selectPage() {
+      // this.listQuery.selectByDepartment = true;
+      this.listLoading = true
+      this.$api.assets.selectPage(this.listQuery).then((res) => {
+        if (res.code === 200) {
+          this.pageData = res.data
+        }
+        this.listLoading = false
+      })
+    },
+    // 条件查询
+    searchList() {
+      // 重置分页
+      this.listQuery.page = 1
+      this.listQuery.size = 10
+      this.selectPage()
+    },
+    // 重置搜索条件
+    resetParams() {
+      this.$router.push({ query: {} })
+      this.listQuery = {
+        page: 1,
+        size: 10,
+        current: 1,
+        // 节点code
+        nodeCode: null,
+        // 客户经理id
+        clientManagerId: null,
+        // 项目负责人id
+        principalId: null,
+        // 业务类型
+        assetsBusinessGener: null,
+        // 关键字
+        keyWord: null,
+        departmentId: null,
+        selectByDepartment: false,
+        selectByAll: true,
+      }
+      this.selectPage()
+    },
+    // 获取所有用户下拉列表
+    getAllUser() {
+      this.$api.user.simpleAll().then((res) => {
+        if (res.code === 200) {
+          this.allUsers = res.data
+        }
+      })
+    },
+    getNodes() {
+      this.$api.workNode.enum().then((res) => {
+        if (res.code === 200) {
+          this.nodes = res.data
+        }
+      })
+    },
+    orderDetail(row) {
+      const newRow = {
+        assetsId: row.assetsId,
+        statementNo: row.statementNo,
+        reportNo: row.reportNo,
+      }
+      this.$router.push({
+        path: '/assets/orderDetail',
+        query: {
+          row: JSON.stringify(newRow),
+          back: '/assets/allList',
+          couldEdit: false,
+          couldBack: false,
+          disabledStatus: true,
+        },
+      })
+    },
+    // 获取部门下拉列表
+    getAllotDepartment() {
+      this.$api.department.allot('ASSET_BUSINESS').then((res) => {
+        if (res.code === 200) {
+          this.allotDepartment = res.data
+        }
+      })
+    },
+    // 终止流程
+    terminate(currentNodeId, statementNo, reportNo) {
+      this.$confirm('该操作将终止流程, 是否继续?', '提示', {
+        confirmButtonText: '终止',
+        cancelButtonText: '取消',
+        type: 'warning',
+      })
+        .then(() => {
+          let commit = new Object()
+          commit.instanceNodeId = currentNodeId;
+          commit.state = 'TERMINATE';
+          commit.comments = '超级管理员终止流程';
+          commit.businessSubId = statementNo;
+          commit.businessMinId = reportNo;
+          commit.ifCheckTask = false;
+          this.$api.workflow.commit(commit).then((res) => {
+            if (res.code === 200 && res.data) {
+              this.$notify({
+                title: '成功',
+                message: '工作流节点提交成功。',
+                type: 'success',
+                duration: 2000,
+              })
+              this.searchList();
+            } else {
+              this.$notify({
+                title: '失败',
+                message: '工作流节点提交失败,请联系管理员。',
+                type: 'error',
+                duration: 2000,
+              })
+            }
+          })
+        })
+        .catch(() => {
+          this.$message({
+            type: 'info',
+            message: '已取消终止',
+          })
+        })
+    },
+  },
 }
 </script>
 

+ 43 - 1
src/views/major/list.vue

@@ -117,9 +117,10 @@
             {{ row.created }}
           </template>
         </el-table-column>
-        <el-table-column label="操作" align="center" width="70" fixed="right">
+        <el-table-column label="操作" align="center" width="100" fixed="right">
           <template slot-scope="{row}">
             <el-button type="text" @click="orderDetail(row)">详情</el-button>
+            <PermissionButton menu-code="_views_major_order_terminated" class-name="filter-item" name type="text" @click="terminate(row.currentNodeId, row.statementNo, row.reportNo)" />
           </template>
         </el-table-column>
       </parentTable>
@@ -235,6 +236,47 @@ export default {
     showAllLabel(){
       removeCookie("MajorPendingList-hiddenLabels");
       location.reload();
+    },
+    // 终止流程
+    terminate(currentNodeId, statementNo, reportNo) {
+      this.$confirm('该操作将终止流程, 是否继续?', '提示', {
+        confirmButtonText: '终止',
+        cancelButtonText: '取消',
+        type: 'warning',
+      })
+        .then(() => {
+          let commit = new Object()
+          commit.instanceNodeId = currentNodeId;
+          commit.state = 'TERMINATE';
+          commit.comments = '超级管理员终止流程';
+          commit.businessSubId = statementNo;
+          commit.businessMinId = reportNo;
+          commit.ifCheckTask = false;
+          this.$api.workflow.commit(commit).then((res) => {
+            if (res.code === 200 && res.data) {
+              this.$notify({
+                title: '成功',
+                message: '工作流节点提交成功。',
+                type: 'success',
+                duration: 2000,
+              })
+              this.fliterSearch();
+            } else {
+              this.$notify({
+                title: '失败',
+                message: '工作流节点提交失败,请联系管理员。',
+                type: 'error',
+                duration: 2000,
+              })
+            }
+          })
+        })
+        .catch(() => {
+          this.$message({
+            type: 'info',
+            message: '已取消终止',
+          })
+        })
     }
   },
   

+ 247 - 0
src/views/major/terminateList.vue

@@ -0,0 +1,247 @@
+<template>
+  <div class="app-container">
+    <div class="title-container">
+      <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
+    </div>
+    <y-page-list-layout :page-list="pageData" :page-para="listQuery" :get-page-list="getTerminatedPage">
+      <template slot="left">
+        <MoreSearchBar business="MAJOR_BUSINESS" @fliterSearch="fliterSearch" @resetParams="resetParams" :listQuery="listQuery" :nodes="majorNodes">
+          <template v-slot:otherButton>
+            <el-button class="filter-item" round @click="showAllLabel()">显示全部列</el-button>
+          </template>
+        </MoreSearchBar>
+      </template>
+      <parentTable ref="table" v-loading="listLoading" :data="pageData.records" slot="table" style="width: 100%;" @sortTable="sortTable" @headerClick="switchHeader">
+        <el-table-column label="项目名称" align="center" width="250" v-if="!hiddenLabels.includes('productionName')" prop="productionName" show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <span class = "enableClick" @click="orderDetail(row)">{{ row.productionName==null?row.name: row.productionName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="订单号" align="center" width="150" v-if="!hiddenLabels.includes('orderId')" prop="orderId">
+          <template slot-scope="{row}">
+            <span class = "enableClick" @click="orderDetail(row)" @contextmenu.prevent="$doCopy(row.orderId)">{{ row.orderId }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="价值意见书号" align="center" width="200" v-if="!hiddenLabels.includes('statementNo')" prop="statementNo" sortable >
+          <template slot-scope="{row}">
+            <span @contextmenu.prevent="$doCopy(row.statementNo)">{{ row.statementNo==null?'-': row.statementNo }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="报告号/复评函号" align="center" width="200" v-if="!hiddenLabels.includes('reportNo')" prop="reportNo" sortable>
+          <template slot-scope="{row}">
+            <span @contextmenu.prevent="$doCopy(row.reportNo)">{{ row.reportNo==null?'-': row.reportNo }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="当前节点" align="center" width="130" v-if="!hiddenLabels.includes('nodeName')" prop="nodeName" sortable>
+          <template slot-scope="{row}">
+            <span>{{ row.nodeName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="待办人" align="center" width="130" v-if="!hiddenLabels.includes('handler')" prop="handler">
+          <template slot-scope="{row}">
+            <span>{{ row.handler }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="委托人" align="center" width="130" v-if="!hiddenLabels.includes('clientName')" prop="clientName">
+          <template slot-scope="{row}">
+            <span>{{ row.clientName==null?'-': row.clientName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="委托人电话" align="center" width="130" v-if="!hiddenLabels.includes('clientTel')" prop="clientTel">
+          <template slot-scope="{row}">
+            <span>{{ row.clientTel==null?'-': row.clientTel }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="产权人" align="center" width="130" v-if="!hiddenLabels.includes('owner')" prop="owner">
+          <template slot-scope="{row}">
+            <span>{{ row.owner==null?'-': row.owner }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="评估总价" align="center" width="130" v-if="!hiddenLabels.includes('evaluateAmount')" prop="evaluateAmount">
+          <template slot-scope="{row}">
+            <span>{{ row.evaluateAmount==null?'-': row.evaluateAmount/10000 +'万'}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="金融类型" align="center" width="130" v-if="!hiddenLabels.includes('financial')" prop="financial">
+          <template slot-scope="{row}">
+            <span>{{ row.financial?'金融':'非金融' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="分单类型" align="center" v-if="!hiddenLabels.includes('allotType')" prop="allotType">
+          <template slot-scope="{row}">
+            <span>{{ row.allotType }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="客户经理" align="center" v-if="!hiddenLabels.includes('clientManager')" prop="clientManager">
+          <template slot-scope="{row}">
+            <span>{{ row.clientManager }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="负责人" align="center" v-if="!hiddenLabels.includes('principal')" prop="principal">
+          <template slot-scope="{row}">
+            <span>{{ row.principal==null?'-': row.principal }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="接单部门" align="center" width="130" v-if="!hiddenLabels.includes('department')" prop="department">
+          <template slot-scope="{row}">
+            <span>{{ row.department }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="评估对象类型" align="center" width="130" v-if="!hiddenLabels.includes('businessObjectType')" prop="businessObjectType">
+          <template slot-scope="{row}">
+            <span>{{ row.businessObjectType }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="客户名称" align="center" width="130" v-if="!hiddenLabels.includes('cclienteleName')" prop="cclienteleName">
+          <template slot-scope="{row}">
+            <span>{{ row.cclienteleName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="业务来源" align="center" width="130" v-if="!hiddenLabels.includes('cclienteleSubName')" prop="cclienteleSubName">
+          <template slot-scope="{row}">
+            <span>{{ row.cclienteleSubName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="客户联系人" align="center" width="130" v-if="!hiddenLabels.includes('cclienteleContactName')" prop="cclienteleContactName">
+          <template slot-scope="{row}">
+            <span>{{ row.cclienteleContactName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="客户联系人电话" align="center" width="130" v-if="!hiddenLabels.includes('cmobile')" prop="cmobile">
+          <template slot-scope="{row}">
+            {{ row.cmobile }}
+          </template>
+        </el-table-column>
+        <el-table-column label="下单时间" align="center" width="110" v-if="!hiddenLabels.includes('created')" prop="created" sortable>
+          <template slot-scope="{row}">
+            {{ row.created }}
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" width="80" fixed="right">
+          <template slot-scope="{row}">
+            <el-button type="text" @click="orderDetail(row)">详情</el-button>
+          </template>
+        </el-table-column>
+      </parentTable>
+    </y-page-list-layout>
+  </div>
+</template>
+<script>
+import YPageListLayout from '@/components/YPageListLayout'
+import Breadcrumb from '@/components/Breadcrumb'
+import PermissionButton from '@/components/PermissionButton/PermissionButton'
+import MoreSearchBar from '@/components/MoreSearchBar'
+import { getCookie,setCookie,removeCookie } from '@/utils/auth'
+
+export default {
+  name: 'MajorList',
+  components: {
+    Breadcrumb,
+    YPageListLayout,
+    PermissionButton,
+    MoreSearchBar
+  },
+
+  data() {
+    return {
+      pageData: { records: [] },
+      listLoading: false,
+      listQuery: {
+        page: 1,
+        size: 10,
+        current: 1,
+        descs: null,
+        ascs:null,
+        keyword:null,
+        startDate:null,
+        endDate:null
+      },
+      majorNodes:[],
+      hiddenLabels:[],
+      loading:false,
+      pgLeader:false
+    }
+  },
+  created() {
+    if (getCookie("MajorPendingList-hiddenLabels")!=undefined){
+      this.hiddenLabels = JSON.parse(getCookie("MajorPendingList-hiddenLabels"))
+    }
+    this.listQuery.keyword = this.$route.query.keyword;
+    this.getTerminatedPage();
+    this.getNodeEnum();
+  },
+  methods: {
+    // 获取终止项目(流程)
+    getTerminatedPage() {
+      this.$api.major.getTerminatedPage(this.listQuery).then(res=>{
+        if (res.code ===200){
+            this.pageData = res.data;
+          }
+      })
+    },
+
+    getNodeEnum() {
+      this.$api.workNode.nodesByBusiness("MAJOR_BUSINESS").then(res => {
+                if (res.code === 200) {
+                    this.majorNodes = res.data;
+                }
+            })
+        },
+
+    fliterSearch(params){
+      this.$api.major.getTerminatedPage(params).then(res=>{
+        if (res.code ===200){
+            this.pageData = res.data;
+        }
+      })
+    },
+
+    resetParams(){
+      this.$router.push({ query: {} });
+      this.listQuery = {
+          current: 1,
+          size: 10,
+          descs: 'created',
+      }
+      this.getTerminatedPage();
+    },
+
+    orderDetail(row){
+      if (row.reportNo && row.statementNo){
+        this.$router.push(`/major/detail?id=${row.majorId}&orderId=${row.orderId}&currentNodeName=${row.nodeName}&couldEdit=${false}&reportNo=${row.reportNo}&statementNo=${row.statementNo}&currentNodeId=${row.currentNodeId}&back=${'/major/list'}`)
+      }else if (!row.reportNo && row.statementNo){
+        this.$router.push(`/major/detail?id=${row.majorId}&orderId=${row.orderId}&currentNodeName=${row.nodeName}&couldEdit=${false}&statementNo=${row.statementNo}&currentNodeId=${row.currentNodeId}&back=${'/major/list'}`)
+      }else if (row.reportNo && !row.statementNo){
+        this.$router.push(`/major/detail?id=${row.majorId}&orderId=${row.orderId}&currentNodeName=${row.nodeName}&couldEdit=${false}&reportNo=${row.reportNo}&currentNodeId=${row.currentNodeId}&back=${'/major/list'}`)
+      }else {
+        this.$router.push(`/major/detail?id=${row.majorId}&orderId=${row.orderId}&currentNodeName=${row.nodeName}&couldEdit=${false}&currentNodeId=${row.currentNodeId}&back=${'/major/list'}`)
+      }
+    },
+    sortTable(sortParams){
+       this.listQuery.ascs = sortParams.ascs;
+       this.listQuery.descs = sortParams.descs;
+       this.$api.major.page(this.listQuery).then(res=>{
+        if (res.code ===200){
+            this.pageData = res.data;
+        }
+      })
+    },
+
+    switchHeader(data){
+      this.hiddenLabels.push(data);
+      setCookie("MajorPendingList-hiddenLabels",this.hiddenLabels);
+    },
+    showAllLabel(){
+      removeCookie("MajorPendingList-hiddenLabels");
+      location.reload();
+    }
+  },
+  
+}
+</script>
+<style lang="scss" scoped>
+  .enableClick:hover{
+    color:#1890ff;
+    cursor: pointer;
+ }
+</style>

+ 42 - 1
src/views/personal/pendingList.vue

@@ -118,9 +118,10 @@
             <span>{{ row.comments?row.comments:'-' }}</span>
           </template>
         </el-table-column>
-        <el-table-column label="操作" align="center" width="80" fixed="right">
+        <el-table-column label="操作" align="center" width="100" fixed="right">
           <template slot-scope="{row}">
             <el-button type="text" @click="orderDetail(row)">详情</el-button>
+            <PermissionButton menu-code="_views_personal_order_terminated" class-name="filter-item" name type="text" @click="terminate(row.currentNodeId, row.orderId)" />
           </template>
         </el-table-column>
       </parentTable>
@@ -228,6 +229,46 @@ export default {
       removeCookie("PersonalPendingList-hiddenLabels");
       location.reload();
     },
+    // 终止流程
+    terminate(currentNodeId, orderId) {
+      this.$confirm('该操作将终止流程, 是否继续?', '提示', {
+        confirmButtonText: '终止',
+        cancelButtonText: '取消',
+        type: 'warning',
+      })
+        .then(() => {
+          let commit = new Object()
+          commit.instanceNodeId = currentNodeId;
+          commit.state = 'TERMINATE';
+          commit.comments = '超级管理员终止流程';
+          commit.businessSubId = orderId;
+          commit.ifCheckTask = false;
+          this.$api.workflow.commit(commit).then((res) => {
+            if (res.code === 200 && res.data) {
+              this.$notify({
+                title: '成功',
+                message: '工作流节点提交成功。',
+                type: 'success',
+                duration: 2000,
+              })
+              this.searchList();
+            } else {
+              this.$notify({
+                title: '失败',
+                message: '工作流节点提交失败,请联系管理员。',
+                type: 'error',
+                duration: 2000,
+              })
+            }
+          })
+        })
+        .catch(() => {
+          this.$message({
+            type: 'info',
+            message: '已取消终止',
+          })
+        })
+    },
   },
   
 }

+ 241 - 0
src/views/personal/terminateList.vue

@@ -0,0 +1,241 @@
+<template>
+  <div class="app-container">
+    <div class="title-container">
+      <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
+    </div>
+    <y-page-list-layout :page-list="pageData" :page-para="listQuery" :get-page-list="getPage" >
+      <template slot="left">
+        <MoreSearchBar business="PERSONAL_BUSINESS" :cancellation="true" :nodes="personalNodes"  @fliterSearch="fliterSearch" @resetParams="resetParams" :listQuery="listQuery">
+          <template v-slot:otherButton>
+            <el-button class="filter-item" round @click="showAllLabel()">显示全部列</el-button>
+          </template>
+        </MoreSearchBar>
+      </template>
+      <parentTable ref="table" :data="pageData.records" slot="table" style="width: 100%;" @headerClick="switchHeader">
+        <el-table-column label="项目编号" align="center" width="150" v-if="!hiddenLabels.includes('orderId')" prop="orderId" >
+          <template slot-scope="{row}">
+            <span class="enableClick" @click="orderDetail(row)" @contextmenu.prevent="$doCopy(row.orderId)">{{ row.orderId }}</span>
+            <input v-show="false" type="text" id="target">
+          </template>
+        </el-table-column>
+        <el-table-column label="坐落" align="center" width="300" v-if="!hiddenLabels.includes('location')" prop="location">
+          <template slot-scope="{row}">
+            <span class="enableClick" @click="orderDetail(row)">{{ row.location }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="当前节点" align="center" width="130"  v-if="!hiddenLabels.includes('currentNodeName')" prop="currentNodeName">
+          <template slot-scope="{row}">
+            <span>{{ row.currentNodeName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="处理人" align="center" width="130" v-if="!hiddenLabels.includes('handlerName')" prop="handlerName">
+          <template slot-scope="{row}">
+            <span>{{ row.handlerName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="面积" align="center" width="130" v-if="!hiddenLabels.includes('acreage')" prop="acreage">
+          <template slot-scope="{row}">
+            <span>{{ row.acreage? row.acreage+'平': '-' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="单价" align="center" width="130" v-if="!hiddenLabels.includes('price')" prop="price">
+          <template slot-scope="{row}">
+            <span>{{ row.price? row.price+'元': '-' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="总价" align="center" width="130" v-if="!hiddenLabels.includes('amount')" prop="amount">
+          <template slot-scope="{row}">
+            <span>{{ row.amount? (row.amount/10000).toFixed(2)+'万': '-' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="客户名称" align="center" width="130" v-if="!hiddenLabels.includes('clientName')" prop="clientName">
+          <template slot-scope="{row}">
+            <span>{{ row.clientName?row.clientName:'-' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="业务来源" align="center" width="130" v-if="!hiddenLabels.includes('clientSubName')" prop="clientSubName">
+          <template slot-scope="{row}">
+            <span>{{ row.clientSubName?row.clientSubName:'-' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="中介" align="center" width="130" v-if="!hiddenLabels.includes('agent')" prop="agent">
+          <template slot-scope="{row}">
+            <span>{{ row.agent?row.agent:'-' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="联系人" align="center" width="130" v-if="!hiddenLabels.includes('contactName')" prop="contactName">
+          <template slot-scope="{row}">
+            <span>{{ row.contactName?row.contactName:'-'}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="联系人电话" align="center" width="130" v-if="!hiddenLabels.includes('contactTel')" prop="contactTel">
+          <template slot-scope="{row}">
+            <span>{{ row.contactTel?row.contactTel:'-' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="委托人" align="center" v-if="!hiddenLabels.includes('bailorA')" prop="bailorA">
+          <template slot-scope="{row}">
+            <span>{{ row.bailorA?row.bailorA:(row.bailorB?row.bailorB:'-')}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="委托人电话" align="center" width="130" v-if="!hiddenLabels.includes('bailoraTel')" prop="bailoraTel">
+          <template slot-scope="{row}">
+            <span>{{ row.bailoraTel?row.bailoraTel:(row.bailorbTel?row.bailorbTel:'-')}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="客户经理" align="center" v-if="!hiddenLabels.includes('clientManager')" prop="clientManager">
+          <template slot-scope="{row}">
+            <span>{{ row.clientManager }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="实勘人" align="center" width="130" v-if="!hiddenLabels.includes('outwardStaffName')" prop="outwardStaffName">
+          <template slot-scope="{row}">
+            <span>{{ row.outwardStaffName? row.outwardStaffName: '-' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="内业人员" align="center" width="130" v-if="!hiddenLabels.includes('inwardStaffName')" prop="inwardStaffName">
+          <template slot-scope="{row}">
+            <span>{{ row.inwardStaffName?row.inwardStaffName:'-' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="定价人员" align="center" width="130" v-if="!hiddenLabels.includes('pricingStaffName')" prop="pricingStaffName">
+          <template slot-scope="{row}">
+            <span>{{ row.pricingStaffName?row.pricingStaffName:'-' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="下单时间" align="center" width="110" v-if="!hiddenLabels.includes('created')" prop="created">
+          <template slot-scope="{row}">
+            {{ row.created }}
+          </template>
+        </el-table-column>
+        <el-table-column label="节点生成时间" align="center" width="110" v-if="!hiddenLabels.includes('nodeTime')" prop="nodeTime" >
+          <template slot-scope="{row}">
+            {{ row.nodeTime }}
+          </template>
+        </el-table-column>
+        <el-table-column label="最新备注" align="center" width="150" v-if="!hiddenLabels.includes('comments')" prop="comments">
+          <template slot-scope="{row}">
+            <span>{{ row.comments?row.comments:'-' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" width="100" fixed="right">
+          <template slot-scope="{row}">
+            <el-button type="text" @click="orderDetail(row)">详情</el-button>
+            <PermissionButton menu-code="_views_personal_order_terminated" class-name="filter-item" name type="text" @click="terminate(row.currentNodeId, row.orderId)" />
+          </template>
+        </el-table-column>
+      </parentTable>
+    </y-page-list-layout>
+  </div>
+</template>
+<script>
+import YPageListLayout from '@/components/YPageListLayout'
+import Breadcrumb from '@/components/Breadcrumb'
+import PermissionButton from '@/components/PermissionButton/PermissionButton'
+import MoreSearchBar from '@/components/MoreSearchBar'
+import { getCookie,setCookie,removeCookie } from '@/utils/auth'
+
+export default {
+  name: 'PersonalPendingList',
+  components: {
+    Breadcrumb,
+    YPageListLayout,
+    PermissionButton,
+    MoreSearchBar,
+  },
+
+  data() {
+    return {
+      pageData: { records: [] },
+      listQuery: {
+        page: 1,
+        size: 10,
+        current: 1,
+        descs: null,
+        ascs:null,
+        keyword:null,
+        startDate:null,
+        endDate:null
+      },
+      personalNodes:[],
+      hiddenLabels:[],
+    }
+  },
+
+  
+  created() {
+    if (getCookie("PersonalPendingList-hiddenLabels")!=undefined){
+      this.hiddenLabels = JSON.parse(getCookie("PersonalPendingList-hiddenLabels"))
+    }
+    this.listQuery.keyword = this.$route.query.keyword;
+    this.getPage();
+    this.getNodeEnum();
+    
+  },
+  methods: {
+    getPage() {
+      let loadingInstance =  this.$loading({ fullscreen: true });
+      if (getCookie('PersonalPendingList') != undefined){
+        this.listQuery.size = parseInt(getCookie('PersonalPendingList'));
+      }
+      this.$api.personal.getTerminatedPage(this.listQuery).then(res=>{
+        if (res.code ===200){
+            this.pageData = res.data;
+            loadingInstance.close();
+        }
+      })
+    },
+
+    getNodeEnum() {
+            this.$api.workNode.nodesByBusiness("PERSONAL_BUSINESS").then(res => {
+                if (res.code === 200) {
+                    this.personalNodes = res.data;
+                }
+            })
+        },
+    fliterSearch(params){
+      this.$api.personal.getTerminatedPage(params).then(res=>{
+        if (res.code ===200){
+            this.pageData = res.data;
+        }
+      })
+    },
+
+    resetParams(){
+      this.$router.push({ query: {} });
+      this.listQuery = {
+          current: 1,
+          size: 10,
+          descs: 'created',
+      }
+      this.getPage();
+    },
+    searchList() {
+      // 重置分页
+      this.listQuery.page = 1
+      this.listQuery.size = 10
+      this.getPage()
+    },
+
+    orderDetail(row){
+      this.$router.push(`/personal/readonly/detail?id=${row.id}&currentNodeName=${row.currentNodeName}&orderId=${row.orderId}&back=${'/personal/pending/list'}`)
+    },
+
+    switchHeader(data){
+      this.hiddenLabels.push(data);
+      setCookie("PersonalPendingList-hiddenLabels",this.hiddenLabels);
+    },
+    showAllLabel(){
+      removeCookie("PersonalPendingList-hiddenLabels");
+      location.reload();
+    }
+  },
+  
+}
+</script>
+<style lang="scss" scoped>
+ .enableClick:hover{
+    color:#1890ff;
+    cursor: pointer;
+ }
+</style>