vue2-client 1.15.23 → 1.15.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/jest.config.js +22 -22
- package/package.json +1 -1
- package/src/base-client/components/common/XForm/XForm.vue +2 -1
- package/src/base-client/components/common/XForm/demo.vue +105 -105
- package/src/base-client/components/common/XRate/demo.vue +102 -102
- package/src/layouts/BlankView.vue +1 -2
- package/src/pages/WorkflowDetail/WorkFlowDemo3.vue +203 -0
- package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +12 -0
- package/src/router/async/router.map.js +3 -2
- package/src/router/index.js +27 -27
- package/src/utils/routerUtil.js +1 -1
- package/test/request.test.js +17 -17
package/jest.config.js
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
-
const path = require('path')
|
2
|
-
require('dotenv').config({ path: path.resolve(__dirname, '.env') })
|
3
|
-
|
4
|
-
module.exports = {
|
5
|
-
setupFiles: ['<rootDir>/jest.setup.js'],
|
6
|
-
moduleNameMapper: {
|
7
|
-
'^@vue2-client/(.*)$': '<rootDir>/src/$1',
|
8
|
-
'^@/(.*)$': '<rootDir>/src/$1',
|
9
|
-
'\\.(css|less)$': 'identity-obj-proxy',
|
10
|
-
},
|
11
|
-
moduleFileExtensions: ['js', 'json', 'jsx', 'ts', 'tsx', 'node', 'vue'],
|
12
|
-
testEnvironment: 'jsdom',
|
13
|
-
transform: {
|
14
|
-
'^.+\\.js$': 'babel-jest',
|
15
|
-
'^.+\\.vue$': 'vue-jest',
|
16
|
-
'^.+\\.less$': 'jest-transform-stub',
|
17
|
-
},
|
18
|
-
transformIgnorePatterns: [
|
19
|
-
'/node_modules/(?!ant-design-vue)',
|
20
|
-
]
|
21
|
-
// 其他 Jest 配置项...
|
22
|
-
}
|
1
|
+
const path = require('path')
|
2
|
+
require('dotenv').config({ path: path.resolve(__dirname, '.env') })
|
3
|
+
|
4
|
+
module.exports = {
|
5
|
+
setupFiles: ['<rootDir>/jest.setup.js'],
|
6
|
+
moduleNameMapper: {
|
7
|
+
'^@vue2-client/(.*)$': '<rootDir>/src/$1',
|
8
|
+
'^@/(.*)$': '<rootDir>/src/$1',
|
9
|
+
'\\.(css|less)$': 'identity-obj-proxy',
|
10
|
+
},
|
11
|
+
moduleFileExtensions: ['js', 'json', 'jsx', 'ts', 'tsx', 'node', 'vue'],
|
12
|
+
testEnvironment: 'jsdom',
|
13
|
+
transform: {
|
14
|
+
'^.+\\.js$': 'babel-jest',
|
15
|
+
'^.+\\.vue$': 'vue-jest',
|
16
|
+
'^.+\\.less$': 'jest-transform-stub',
|
17
|
+
},
|
18
|
+
transformIgnorePatterns: [
|
19
|
+
'/node_modules/(?!ant-design-vue)',
|
20
|
+
]
|
21
|
+
// 其他 Jest 配置项...
|
22
|
+
}
|
package/package.json
CHANGED
@@ -377,7 +377,8 @@ export default {
|
|
377
377
|
if (this.form[key] === null || this.form[key] === '') {
|
378
378
|
this.form[key] = undefined
|
379
379
|
}
|
380
|
-
|
380
|
+
// 树形选择框重置后会重置为[undefined],查询时为[null]
|
381
|
+
if (Array.isArray(this.form[key]) && (this.form[key].length === 0 || this.form[key][0] === null || this.form[key][0] === undefined)) {
|
381
382
|
this.form[key] = undefined
|
382
383
|
}
|
383
384
|
// 如果 form 中没有值,但是有默认值
|
@@ -1,105 +1,105 @@
|
|
1
|
-
<template>
|
2
|
-
<div class="demo-container">
|
3
|
-
<h2>XFormItem Demo</h2>
|
4
|
-
|
5
|
-
<!-- 查询模式演示 -->
|
6
|
-
<div class="demo-section">
|
7
|
-
<h3>查询模式</h3>
|
8
|
-
<x-form-item
|
9
|
-
:attr="queryAttr"
|
10
|
-
:form="queryForm"
|
11
|
-
mode="查询"
|
12
|
-
:showLabel="true"
|
13
|
-
/>
|
14
|
-
<div class="value-display">
|
15
|
-
当前值: {{ queryForm.rate || '未选择' }}
|
16
|
-
</div>
|
17
|
-
</div>
|
18
|
-
|
19
|
-
<!-- 新增模式演示 -->
|
20
|
-
<div class="demo-section">
|
21
|
-
<h3>新增模式</h3>
|
22
|
-
<x-form-item
|
23
|
-
:attr="addAttr"
|
24
|
-
:form="addForm"
|
25
|
-
mode="新增/修改"
|
26
|
-
:showLabel="true"
|
27
|
-
/>
|
28
|
-
<div class="value-display">
|
29
|
-
当前值: {{ addForm.rate || '未评分' }}
|
30
|
-
</div>
|
31
|
-
</div>
|
32
|
-
</div>
|
33
|
-
</template>
|
34
|
-
|
35
|
-
<script>
|
36
|
-
import XFormItem from './XFormItem.vue'
|
37
|
-
|
38
|
-
export default {
|
39
|
-
name: 'XFormItemDemo',
|
40
|
-
components: {
|
41
|
-
XFormItem
|
42
|
-
},
|
43
|
-
data () {
|
44
|
-
return {
|
45
|
-
// 查询表单配置
|
46
|
-
queryAttr: {
|
47
|
-
type: 'rate',
|
48
|
-
name: '评分查询',
|
49
|
-
queryType: 'IN',
|
50
|
-
model: 'rate',
|
51
|
-
placeholder: '请选择评分',
|
52
|
-
allowHalf: true,
|
53
|
-
maxCount: 5
|
54
|
-
},
|
55
|
-
queryForm: {
|
56
|
-
},
|
57
|
-
|
58
|
-
// 新增表单配置
|
59
|
-
addAttr: {
|
60
|
-
type: 'rate',
|
61
|
-
name: '评分',
|
62
|
-
model: 'rate',
|
63
|
-
allowHalf: true,
|
64
|
-
maxCount: 10
|
65
|
-
},
|
66
|
-
addForm: {
|
67
|
-
rate: 3
|
68
|
-
}
|
69
|
-
}
|
70
|
-
}
|
71
|
-
}
|
72
|
-
</script>
|
73
|
-
|
74
|
-
<style lang="less" scoped>
|
75
|
-
.demo-container {
|
76
|
-
padding: 20px;
|
77
|
-
max-width: 800px;
|
78
|
-
margin: 0 auto;
|
79
|
-
background-color: #f5f5f5;
|
80
|
-
|
81
|
-
h2 {
|
82
|
-
margin-bottom: 20px;
|
83
|
-
color: #1890ff;
|
84
|
-
}
|
85
|
-
|
86
|
-
.demo-section {
|
87
|
-
margin-bottom: 30px;
|
88
|
-
padding: 20px;
|
89
|
-
border: 1px solid #e8e8e8;
|
90
|
-
border-radius: 4px;
|
91
|
-
|
92
|
-
h3 {
|
93
|
-
margin-bottom: 16px;
|
94
|
-
color: #333;
|
95
|
-
}
|
96
|
-
|
97
|
-
.value-display {
|
98
|
-
margin-top: 16px;
|
99
|
-
padding: 8px;
|
100
|
-
background-color: #f5f5f5;
|
101
|
-
border-radius: 4px;
|
102
|
-
}
|
103
|
-
}
|
104
|
-
}
|
105
|
-
</style>
|
1
|
+
<template>
|
2
|
+
<div class="demo-container">
|
3
|
+
<h2>XFormItem Demo</h2>
|
4
|
+
|
5
|
+
<!-- 查询模式演示 -->
|
6
|
+
<div class="demo-section">
|
7
|
+
<h3>查询模式</h3>
|
8
|
+
<x-form-item
|
9
|
+
:attr="queryAttr"
|
10
|
+
:form="queryForm"
|
11
|
+
mode="查询"
|
12
|
+
:showLabel="true"
|
13
|
+
/>
|
14
|
+
<div class="value-display">
|
15
|
+
当前值: {{ queryForm.rate || '未选择' }}
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
|
19
|
+
<!-- 新增模式演示 -->
|
20
|
+
<div class="demo-section">
|
21
|
+
<h3>新增模式</h3>
|
22
|
+
<x-form-item
|
23
|
+
:attr="addAttr"
|
24
|
+
:form="addForm"
|
25
|
+
mode="新增/修改"
|
26
|
+
:showLabel="true"
|
27
|
+
/>
|
28
|
+
<div class="value-display">
|
29
|
+
当前值: {{ addForm.rate || '未评分' }}
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
</template>
|
34
|
+
|
35
|
+
<script>
|
36
|
+
import XFormItem from './XFormItem.vue'
|
37
|
+
|
38
|
+
export default {
|
39
|
+
name: 'XFormItemDemo',
|
40
|
+
components: {
|
41
|
+
XFormItem
|
42
|
+
},
|
43
|
+
data () {
|
44
|
+
return {
|
45
|
+
// 查询表单配置
|
46
|
+
queryAttr: {
|
47
|
+
type: 'rate',
|
48
|
+
name: '评分查询',
|
49
|
+
queryType: 'IN',
|
50
|
+
model: 'rate',
|
51
|
+
placeholder: '请选择评分',
|
52
|
+
allowHalf: true,
|
53
|
+
maxCount: 5
|
54
|
+
},
|
55
|
+
queryForm: {
|
56
|
+
},
|
57
|
+
|
58
|
+
// 新增表单配置
|
59
|
+
addAttr: {
|
60
|
+
type: 'rate',
|
61
|
+
name: '评分',
|
62
|
+
model: 'rate',
|
63
|
+
allowHalf: true,
|
64
|
+
maxCount: 10
|
65
|
+
},
|
66
|
+
addForm: {
|
67
|
+
rate: 3
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
71
|
+
}
|
72
|
+
</script>
|
73
|
+
|
74
|
+
<style lang="less" scoped>
|
75
|
+
.demo-container {
|
76
|
+
padding: 20px;
|
77
|
+
max-width: 800px;
|
78
|
+
margin: 0 auto;
|
79
|
+
background-color: #f5f5f5;
|
80
|
+
|
81
|
+
h2 {
|
82
|
+
margin-bottom: 20px;
|
83
|
+
color: #1890ff;
|
84
|
+
}
|
85
|
+
|
86
|
+
.demo-section {
|
87
|
+
margin-bottom: 30px;
|
88
|
+
padding: 20px;
|
89
|
+
border: 1px solid #e8e8e8;
|
90
|
+
border-radius: 4px;
|
91
|
+
|
92
|
+
h3 {
|
93
|
+
margin-bottom: 16px;
|
94
|
+
color: #333;
|
95
|
+
}
|
96
|
+
|
97
|
+
.value-display {
|
98
|
+
margin-top: 16px;
|
99
|
+
padding: 8px;
|
100
|
+
background-color: #f5f5f5;
|
101
|
+
border-radius: 4px;
|
102
|
+
}
|
103
|
+
}
|
104
|
+
}
|
105
|
+
</style>
|
@@ -1,102 +1,102 @@
|
|
1
|
-
<template>
|
2
|
-
<div class="demo-container">
|
3
|
-
<h2>XRate 评分组件示例</h2>
|
4
|
-
|
5
|
-
<div class="demo-section">
|
6
|
-
<h3>基础用法</h3>
|
7
|
-
<x-rate v-model="basicRate" />
|
8
|
-
<div>当前值: {{ basicRate }}</div>
|
9
|
-
<a-button @click="resetBasicRate">重置</a-button>
|
10
|
-
</div>
|
11
|
-
|
12
|
-
<div class="demo-section">
|
13
|
-
<h3>允许半星</h3>
|
14
|
-
<x-rate v-model="halfRate" :allow-half="true" />
|
15
|
-
<div>当前值: {{ halfRate }}</div>
|
16
|
-
</div>
|
17
|
-
|
18
|
-
<div class="demo-section">
|
19
|
-
<h3>自定义最大分值</h3>
|
20
|
-
<x-rate v-model="customRate" :max-count="10" />
|
21
|
-
<div>当前值: {{ customRate }}</div>
|
22
|
-
</div>
|
23
|
-
|
24
|
-
<div class="demo-section">
|
25
|
-
<h3>查询模式</h3>
|
26
|
-
<x-rate v-model="queryRate" mode="查询" />
|
27
|
-
<div>当前值: {{ queryRate }}</div>
|
28
|
-
</div>
|
29
|
-
|
30
|
-
<div class="demo-section">
|
31
|
-
<h3>查询模式(多选)</h3>
|
32
|
-
<x-rate v-model="queryMultiRate" mode="查询" query-type="IN" />
|
33
|
-
<div>当前值: {{ queryMultiRate }}</div>
|
34
|
-
</div>
|
35
|
-
|
36
|
-
<div class="demo-section">
|
37
|
-
<h3>禁用状态</h3>
|
38
|
-
<x-rate v-model="disabledRate" :disabled="true" />
|
39
|
-
<div>当前值: {{ disabledRate }}</div>
|
40
|
-
</div>
|
41
|
-
|
42
|
-
<div class="demo-section">
|
43
|
-
<h3>空值处理</h3>
|
44
|
-
<x-rate v-model="emptyRate" />
|
45
|
-
<div>当前值: {{ emptyRate }}</div>
|
46
|
-
<a-button @click="clearRate">清除</a-button>
|
47
|
-
</div>
|
48
|
-
</div>
|
49
|
-
</template>
|
50
|
-
|
51
|
-
<script>
|
52
|
-
import XRate from './index.vue'
|
53
|
-
|
54
|
-
export default {
|
55
|
-
name: 'XRateDemo',
|
56
|
-
components: {
|
57
|
-
XRate
|
58
|
-
},
|
59
|
-
data () {
|
60
|
-
return {
|
61
|
-
basicRate: 3,
|
62
|
-
halfRate: 3.5,
|
63
|
-
customRate: 7,
|
64
|
-
queryRate: 4,
|
65
|
-
queryMultiRate: [3, 4],
|
66
|
-
disabledRate: 2,
|
67
|
-
emptyRate: undefined
|
68
|
-
}
|
69
|
-
},
|
70
|
-
methods: {
|
71
|
-
resetBasicRate () {
|
72
|
-
this.basicRate = 3
|
73
|
-
},
|
74
|
-
clearRate () {
|
75
|
-
this.emptyRate = undefined
|
76
|
-
}
|
77
|
-
}
|
78
|
-
}
|
79
|
-
</script>
|
80
|
-
|
81
|
-
<style lang="less" scoped>
|
82
|
-
.demo-container {
|
83
|
-
padding: 20px;
|
84
|
-
|
85
|
-
.demo-section {
|
86
|
-
margin-bottom: 30px;
|
87
|
-
padding: 20px;
|
88
|
-
border: 1px solid #eee;
|
89
|
-
border-radius: 4px;
|
90
|
-
|
91
|
-
h3 {
|
92
|
-
margin-top: 0;
|
93
|
-
margin-bottom: 16px;
|
94
|
-
color: #333;
|
95
|
-
}
|
96
|
-
|
97
|
-
.ant-btn {
|
98
|
-
margin-top: 8px;
|
99
|
-
}
|
100
|
-
}
|
101
|
-
}
|
102
|
-
</style>
|
1
|
+
<template>
|
2
|
+
<div class="demo-container">
|
3
|
+
<h2>XRate 评分组件示例</h2>
|
4
|
+
|
5
|
+
<div class="demo-section">
|
6
|
+
<h3>基础用法</h3>
|
7
|
+
<x-rate v-model="basicRate" />
|
8
|
+
<div>当前值: {{ basicRate }}</div>
|
9
|
+
<a-button @click="resetBasicRate">重置</a-button>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<div class="demo-section">
|
13
|
+
<h3>允许半星</h3>
|
14
|
+
<x-rate v-model="halfRate" :allow-half="true" />
|
15
|
+
<div>当前值: {{ halfRate }}</div>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<div class="demo-section">
|
19
|
+
<h3>自定义最大分值</h3>
|
20
|
+
<x-rate v-model="customRate" :max-count="10" />
|
21
|
+
<div>当前值: {{ customRate }}</div>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<div class="demo-section">
|
25
|
+
<h3>查询模式</h3>
|
26
|
+
<x-rate v-model="queryRate" mode="查询" />
|
27
|
+
<div>当前值: {{ queryRate }}</div>
|
28
|
+
</div>
|
29
|
+
|
30
|
+
<div class="demo-section">
|
31
|
+
<h3>查询模式(多选)</h3>
|
32
|
+
<x-rate v-model="queryMultiRate" mode="查询" query-type="IN" />
|
33
|
+
<div>当前值: {{ queryMultiRate }}</div>
|
34
|
+
</div>
|
35
|
+
|
36
|
+
<div class="demo-section">
|
37
|
+
<h3>禁用状态</h3>
|
38
|
+
<x-rate v-model="disabledRate" :disabled="true" />
|
39
|
+
<div>当前值: {{ disabledRate }}</div>
|
40
|
+
</div>
|
41
|
+
|
42
|
+
<div class="demo-section">
|
43
|
+
<h3>空值处理</h3>
|
44
|
+
<x-rate v-model="emptyRate" />
|
45
|
+
<div>当前值: {{ emptyRate }}</div>
|
46
|
+
<a-button @click="clearRate">清除</a-button>
|
47
|
+
</div>
|
48
|
+
</div>
|
49
|
+
</template>
|
50
|
+
|
51
|
+
<script>
|
52
|
+
import XRate from './index.vue'
|
53
|
+
|
54
|
+
export default {
|
55
|
+
name: 'XRateDemo',
|
56
|
+
components: {
|
57
|
+
XRate
|
58
|
+
},
|
59
|
+
data () {
|
60
|
+
return {
|
61
|
+
basicRate: 3,
|
62
|
+
halfRate: 3.5,
|
63
|
+
customRate: 7,
|
64
|
+
queryRate: 4,
|
65
|
+
queryMultiRate: [3, 4],
|
66
|
+
disabledRate: 2,
|
67
|
+
emptyRate: undefined
|
68
|
+
}
|
69
|
+
},
|
70
|
+
methods: {
|
71
|
+
resetBasicRate () {
|
72
|
+
this.basicRate = 3
|
73
|
+
},
|
74
|
+
clearRate () {
|
75
|
+
this.emptyRate = undefined
|
76
|
+
}
|
77
|
+
}
|
78
|
+
}
|
79
|
+
</script>
|
80
|
+
|
81
|
+
<style lang="less" scoped>
|
82
|
+
.demo-container {
|
83
|
+
padding: 20px;
|
84
|
+
|
85
|
+
.demo-section {
|
86
|
+
margin-bottom: 30px;
|
87
|
+
padding: 20px;
|
88
|
+
border: 1px solid #eee;
|
89
|
+
border-radius: 4px;
|
90
|
+
|
91
|
+
h3 {
|
92
|
+
margin-top: 0;
|
93
|
+
margin-bottom: 16px;
|
94
|
+
color: #333;
|
95
|
+
}
|
96
|
+
|
97
|
+
.ant-btn {
|
98
|
+
margin-top: 8px;
|
99
|
+
}
|
100
|
+
}
|
101
|
+
}
|
102
|
+
</style>
|
@@ -1,9 +1,8 @@
|
|
1
1
|
<template>
|
2
2
|
<page-toggle-transition :disabled="animate.disabled" :animate="animate.name" :direction="animate.direction">
|
3
|
-
<a-keep-alive :exclude-keys="excludeKeys" v-
|
3
|
+
<a-keep-alive :exclude-keys="excludeKeys" v-model="clearCaches">
|
4
4
|
<router-view v-if="!refreshing" :key="$route.path" />
|
5
5
|
</a-keep-alive>
|
6
|
-
<router-view v-else-if="!refreshing" />
|
7
6
|
</page-toggle-transition>
|
8
7
|
</template>
|
9
8
|
|
@@ -0,0 +1,203 @@
|
|
1
|
+
<template>
|
2
|
+
<div id="beingProcessed">
|
3
|
+
<x-form-table
|
4
|
+
title="我的工单"
|
5
|
+
ref="xFormTable"
|
6
|
+
:queryParamsName="queryParamsName"
|
7
|
+
:fixed-query-form="{
|
8
|
+
users_f_handler_id: currUser.id,
|
9
|
+
}"
|
10
|
+
@action="toDetail">
|
11
|
+
<template slot="button">
|
12
|
+
<a-button @click="addApply">
|
13
|
+
<a-icon type="plus"/>
|
14
|
+
发起报建
|
15
|
+
</a-button>
|
16
|
+
</template>
|
17
|
+
</x-form-table>
|
18
|
+
<a-modal
|
19
|
+
v-model="applyAddFlag"
|
20
|
+
:footer="null"
|
21
|
+
:dialog-style="{ top: '5rem' }"
|
22
|
+
:z-index="1001"
|
23
|
+
title="发起报建"
|
24
|
+
:destroyOnClose="true">
|
25
|
+
<x-add-native-form ref="xForm" @onSubmit="applySubmit"/>
|
26
|
+
</a-modal>
|
27
|
+
<WorkflowDetail
|
28
|
+
ref="workFlow"
|
29
|
+
@success="success"
|
30
|
+
@nextClick="nextClick"
|
31
|
+
@x-form-item-emit-func="handleFormItemEvent"
|
32
|
+
>
|
33
|
+
</WorkflowDetail>
|
34
|
+
<!-- 地址选择器 -->
|
35
|
+
<address-select ref="addressSelect" @setAddress="setForm"></address-select>
|
36
|
+
</div>
|
37
|
+
</template>
|
38
|
+
|
39
|
+
<script>
|
40
|
+
import WorkflowDetail from '@vue2-client/pages/WorkflowDetail/WorkflowDetail.vue'
|
41
|
+
import XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable'
|
42
|
+
import XAddNativeForm from '@vue2-client/base-client/components/common/XAddNativeForm/XAddNativeForm.vue'
|
43
|
+
import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
|
44
|
+
import { mapState } from 'vuex'
|
45
|
+
import AddressSelect from '@vue2-client/pages/addressSelect/index.vue'
|
46
|
+
import XFormGroup from '@vue2-client/base-client/components/common/XFormGroup'
|
47
|
+
|
48
|
+
export default {
|
49
|
+
name: 'Apply',
|
50
|
+
components: {
|
51
|
+
XFormTable,
|
52
|
+
XAddNativeForm,
|
53
|
+
WorkflowDetail,
|
54
|
+
AddressSelect,
|
55
|
+
XFormGroup,
|
56
|
+
},
|
57
|
+
// 透传给子组件的方法(目前XFormTable接了)
|
58
|
+
provide () {
|
59
|
+
return {
|
60
|
+
generalFunction: {
|
61
|
+
setCancel: this.setCancel,
|
62
|
+
chargeAdd: this.chargeAdd,
|
63
|
+
addUser: this.addUser,
|
64
|
+
editUser: this.editUser,
|
65
|
+
addContract: this.addContract,
|
66
|
+
addcharge: this.addcharge,
|
67
|
+
updateFormData: this.updateFormData,
|
68
|
+
chargeCancel: this.chargeCancel,
|
69
|
+
chargeBatchRefund: this.chargeBatchRefund,
|
70
|
+
}
|
71
|
+
}
|
72
|
+
},
|
73
|
+
data () {
|
74
|
+
return {
|
75
|
+
// 查询配置文件名
|
76
|
+
queryParamsName: 'ApplyProcessCRUD',
|
77
|
+
// 发起报建弹框控制
|
78
|
+
applyAddFlag: false,
|
79
|
+
// 提交加载动画
|
80
|
+
confirmLoading: false,
|
81
|
+
refreshFn: null,
|
82
|
+
chargeVisible: false
|
83
|
+
}
|
84
|
+
},
|
85
|
+
computed: {
|
86
|
+
...mapState('account', { currUser: 'user' }),
|
87
|
+
},
|
88
|
+
methods: {
|
89
|
+
addApply () {
|
90
|
+
console.log('打开了吗')
|
91
|
+
this.applyAddFlag = true
|
92
|
+
this.$nextTick(
|
93
|
+
() => {
|
94
|
+
getConfigByName('addApplyForm', 'af-apply', (res) => {
|
95
|
+
this.$refs.xForm.init({
|
96
|
+
businessType: '新增',
|
97
|
+
title: '发起报建',
|
98
|
+
...res
|
99
|
+
})
|
100
|
+
})
|
101
|
+
}
|
102
|
+
)
|
103
|
+
},
|
104
|
+
applySubmit (formData) {
|
105
|
+
runLogic('addApply', formData).then(
|
106
|
+
res => {
|
107
|
+
this.$message.success('发起报建成功')
|
108
|
+
this.$refs.xFormTable.refreshTable(true)
|
109
|
+
this.applyAddFlag = false
|
110
|
+
}
|
111
|
+
).catch(() => {
|
112
|
+
this.applyAddFlag = false
|
113
|
+
})
|
114
|
+
},
|
115
|
+
success () {
|
116
|
+
console.log('完工')
|
117
|
+
},
|
118
|
+
toDetail (record, id) {
|
119
|
+
this.$refs.workFlow.init({
|
120
|
+
workflowId: record.ab_f_workflow_id
|
121
|
+
})
|
122
|
+
},
|
123
|
+
handleFormItemEvent (func, data, value) {
|
124
|
+
console.log('打印一下:', func, data, value)
|
125
|
+
if (func === 'selectAddress') {
|
126
|
+
this.$refs.addressSelect.setFormShow()
|
127
|
+
}
|
128
|
+
},
|
129
|
+
setForm (record) {
|
130
|
+
this.$refs.workFlow.setFormValue({ address: record.f_address, address_id: record.f_address_id })
|
131
|
+
},
|
132
|
+
nextClick ({ form, formStep, workflowId }) {
|
133
|
+
console.log('success', form, formStep, workflowId)
|
134
|
+
const data = {
|
135
|
+
workflowId,
|
136
|
+
form,
|
137
|
+
formStep
|
138
|
+
}
|
139
|
+
runLogic('applySubmitAfter', data, 'af-apply').then(
|
140
|
+
res => {
|
141
|
+
if (res) {
|
142
|
+
// this.$message.success('提交成功!')
|
143
|
+
this.$refs.xFormTable.refreshTable(true)
|
144
|
+
}
|
145
|
+
}
|
146
|
+
)
|
147
|
+
},
|
148
|
+
// 协议作废
|
149
|
+
setCancel (record, refreshFn) {
|
150
|
+
this.$refs.cancelContract.setCancel(record, refreshFn)
|
151
|
+
},
|
152
|
+
// 增值收费新增
|
153
|
+
chargeAdd (refreshFn) {
|
154
|
+
this.$refs.addCharge.chargeAdd(this.$refs.workFlow.workflowId, refreshFn)
|
155
|
+
},
|
156
|
+
// 协议新增
|
157
|
+
addContract (refreshFn) {
|
158
|
+
this.$refs.addContract.addContract(this.$refs.workFlow.workflowId, refreshFn)
|
159
|
+
},
|
160
|
+
// 新增用户
|
161
|
+
addUser (refreshFn) {
|
162
|
+
if (this.$refs.workFlow.$refs.baseInformation.details.f_workflow_define_name != '团购报建流程') {
|
163
|
+
this.$message.success('只有团购报建流程才可以新增用户信息!')
|
164
|
+
return
|
165
|
+
}
|
166
|
+
this.$refs.addUser.addUser(this.$refs.workFlow.workflowId, refreshFn)
|
167
|
+
},
|
168
|
+
// 编辑用户
|
169
|
+
editUser (record, refreshFn) {
|
170
|
+
this.$refs.addUser.editUser(record, refreshFn)
|
171
|
+
},
|
172
|
+
// 新增收费
|
173
|
+
addcharge (refreshFn) {
|
174
|
+
this.$refs.addApplyCharge.addcharge(this.$refs.workFlow.workflowId, refreshFn)
|
175
|
+
},
|
176
|
+
// 报装缴费页面初始化
|
177
|
+
updateFormData (workflowId) {
|
178
|
+
if (this.$refs.workFlow.$refs.baseInformation.details.f_sub_state == '报装缴费') {
|
179
|
+
runLogic('getApplyBusinessrecode', { f_workflow_id: workflowId }, 'af-apply').then((res) => {
|
180
|
+
this.$refs.workFlow.$refs.workflowHandle.$refs.xAddForm.setForm(res)
|
181
|
+
})
|
182
|
+
} else if (this.$refs.workFlow.$refs.baseInformation.details.f_sub_state == '合同签订') {
|
183
|
+
runLogic('queryAgreementAmount', { workflowId: workflowId }, 'af-apply').then((res) => {
|
184
|
+
this.$refs.workFlow.$refs.workflowHandle.$refs.xAddForm.setForm({ add_amount: res[0].f_contract_money })
|
185
|
+
})
|
186
|
+
}
|
187
|
+
},
|
188
|
+
// 增值收费单个数据的撤销功能
|
189
|
+
chargeCancel (record, refreshFn) {
|
190
|
+
this.$refs.cancel.chargeCancel(record, refreshFn)
|
191
|
+
},
|
192
|
+
// 批量撤销(退费)
|
193
|
+
chargeBatchRefund (selectedRowKeys, selectedRows, refreshFn) {
|
194
|
+
if (selectedRowKeys.length === 0 || selectedRows.length === 0) {
|
195
|
+
this.$message.warn('请选择要退费的记录', 5)
|
196
|
+
return
|
197
|
+
}
|
198
|
+
const workflowId = this.$refs.workFlow.workflowId
|
199
|
+
this.$refs.batchRefund.selectRow(selectedRowKeys, selectedRows, refreshFn, workflowId)
|
200
|
+
}
|
201
|
+
}
|
202
|
+
}
|
203
|
+
</script>
|
@@ -67,6 +67,7 @@
|
|
67
67
|
<a-card :bordered="false" :loading="loadingHistory" :body-style="{ paddingTop: 0 }">
|
68
68
|
<x-tab
|
69
69
|
v-if="showTab"
|
70
|
+
:compProp="{ buttonState: { extra: true }, disableAction: false }"
|
70
71
|
:local-config="tabDesigner"
|
71
72
|
:extra-data="{ workflowId:workflowId }"
|
72
73
|
:body-style="{ padding: 0 }"
|
@@ -390,9 +391,14 @@ export default {
|
|
390
391
|
return true
|
391
392
|
}
|
392
393
|
} else {
|
394
|
+
// 当前进行节点的数据
|
393
395
|
const step = this.stepsForChild.find(item => item.id === this.activeStepId)
|
394
396
|
// 检查角色和部门权限
|
395
397
|
if (step && step.properties && step.properties.chargePerson) {
|
398
|
+
// 如果当前节点的负责人选项中有设置选择人员 当前节点就只能由上一步设置的负责人操作
|
399
|
+
if (step.properties.chargePerson.needSelectPerson) {
|
400
|
+
return step.handler === this.currUser.name
|
401
|
+
}
|
396
402
|
if (step.properties.chargePerson.personList && step.properties.chargePerson.personList.length > 0) {
|
397
403
|
// 使用some方法判断当前人员是否满足任一条件
|
398
404
|
return step.properties.chargePerson.personList.some(item => {
|
@@ -774,6 +780,12 @@ export default {
|
|
774
780
|
this.loadingHistory = true
|
775
781
|
this.currentStepId = this.preBtnTo
|
776
782
|
this.activeStepId = this.preBtnTo
|
783
|
+
|
784
|
+
// 新增:重置按钮状态
|
785
|
+
this.stepDone = false
|
786
|
+
this.beforeStepActive = false
|
787
|
+
this.operationType = 'submit'
|
788
|
+
|
777
789
|
this.$emit('refresh')
|
778
790
|
this.onClose()
|
779
791
|
this.init()
|
@@ -54,8 +54,9 @@ routerResource.example = {
|
|
54
54
|
path: 'example',
|
55
55
|
name: '示例主页面',
|
56
56
|
// component: () => import('@vue2-client/pages/WorkflowDetail/WorkFlowDemo2.vue'),
|
57
|
+
component: () => import('@vue2-client/pages/WorkflowDetail/WorkFlowDemo3.vue'),
|
57
58
|
// component: () => import('@vue2-client/pages/WorkflowDetail/WorkFlowDemo.vue'),
|
58
|
-
component: () => import('@vue2-client/pages/addressSelect/addressDemo.vue'),
|
59
|
+
// component: () => import('@vue2-client/pages/addressSelect/addressDemo.vue'),
|
59
60
|
// component: () => import('@vue2-client/base-client/components/common/XDescriptions/demo.vue'),
|
60
61
|
// component: () => import('@vue2-client/base-client/components/common/XAddNativeForm/demo.vue'),
|
61
62
|
// component: () => import('@vue2-client/base-client/components/common/XFormGroup/demo.vue'),
|
@@ -99,7 +100,7 @@ const routerMap = {
|
|
99
100
|
path: '/',
|
100
101
|
name: '首页',
|
101
102
|
// 只有在非微前端环境下才进行重定向,或者通过环境变量控制
|
102
|
-
redirect:
|
103
|
+
redirect: window.__MICRO_APP_ENVIRONMENT__ ? undefined : homePage,
|
103
104
|
component: process.env.VUE_APP_SINGLE_PAPER === 'TRUE' ? view.blank : view.tabs,
|
104
105
|
},
|
105
106
|
exp403: {
|
package/src/router/index.js
CHANGED
@@ -1,27 +1,27 @@
|
|
1
|
-
import { formatRoutes } from '@vue2-client/utils/routerUtil'
|
2
|
-
|
3
|
-
// 不需要登录拦截的路由配置
|
4
|
-
const loginIgnore = {
|
5
|
-
names: ['404', '403'], // 根据路由名称匹配
|
6
|
-
paths: ['/login', '/example', '/system/example', '/system/example/default', '/system/example/sub-example', '/submitTicket', '/submitTicket/', '/ServiceReview', '/DynamicStatistics', '/NewDynamicStatistics'], // 根据路由fullPath匹配
|
7
|
-
/**
|
8
|
-
* 判断路由是否包含在该配置中
|
9
|
-
* @param route vue-router 的 route 对象
|
10
|
-
* @returns {boolean}
|
11
|
-
*/
|
12
|
-
includes (route) {
|
13
|
-
return this.names.includes(route.name) || this.paths.includes(route.path)
|
14
|
-
}
|
15
|
-
}
|
16
|
-
|
17
|
-
/**
|
18
|
-
* 初始化路由实例
|
19
|
-
* @param isAsync 是否异步路由模式
|
20
|
-
* @returns {RouterOptions}
|
21
|
-
*/
|
22
|
-
function initRouter (isAsync) {
|
23
|
-
const options = require('./async/config.async').default
|
24
|
-
formatRoutes(options.routes)
|
25
|
-
return options
|
26
|
-
}
|
27
|
-
export { loginIgnore, initRouter }
|
1
|
+
import { formatRoutes } from '@vue2-client/utils/routerUtil'
|
2
|
+
|
3
|
+
// 不需要登录拦截的路由配置
|
4
|
+
const loginIgnore = {
|
5
|
+
names: ['404', '403'], // 根据路由名称匹配
|
6
|
+
paths: ['/login', '/example', '/system/example', '/system/example/default', '/system/example/sub-example', '/submitTicket', '/submitTicket/', '/ServiceReview', '/DynamicStatistics', '/NewDynamicStatistics'], // 根据路由fullPath匹配
|
7
|
+
/**
|
8
|
+
* 判断路由是否包含在该配置中
|
9
|
+
* @param route vue-router 的 route 对象
|
10
|
+
* @returns {boolean}
|
11
|
+
*/
|
12
|
+
includes (route) {
|
13
|
+
return this.names.includes(route.name) || this.paths.includes(route.path)
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
/**
|
18
|
+
* 初始化路由实例
|
19
|
+
* @param isAsync 是否异步路由模式
|
20
|
+
* @returns {RouterOptions}
|
21
|
+
*/
|
22
|
+
function initRouter (isAsync) {
|
23
|
+
const options = require('./async/config.async').default
|
24
|
+
formatRoutes(options.routes)
|
25
|
+
return options
|
26
|
+
}
|
27
|
+
export { loginIgnore, initRouter }
|
package/src/utils/routerUtil.js
CHANGED
@@ -182,7 +182,7 @@ function loadRoutes (routesConfig) {
|
|
182
182
|
if (routesConfig && routesConfig.length > 0) {
|
183
183
|
const routes = parseRoutes(routesConfig, appRouterMap.routerMap)
|
184
184
|
// 设置路由首页
|
185
|
-
if (
|
185
|
+
if (!window.__MICRO_APP_ENVIRONMENT__) {
|
186
186
|
routes[0].redirect = store.state.setting.homePage
|
187
187
|
}
|
188
188
|
let finalRoutes = mergeRoutes(basicOptions.routes, routes)
|
package/test/request.test.js
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
import EncryptUtil from '@vue2-client/utils/EncryptUtil'
|
2
|
-
import { test, describe } from '@jest/globals'
|
3
|
-
|
4
|
-
describe('请求加密模块', () => {
|
5
|
-
const VALID_KEY = 'a964287a2cef8781ed76bd63dcadd578'
|
6
|
-
const TEST_PAYLOAD = {
|
7
|
-
username: 'admin',
|
8
|
-
password: 'P@ssw0rd_测试',
|
9
|
-
timestamp: Date.now()
|
10
|
-
}
|
11
|
-
|
12
|
-
// CBC加密测试
|
13
|
-
test('应生成有效的加密字符串', () => {
|
14
|
-
const encrypted = EncryptUtil.AESEncryptCBC(TEST_PAYLOAD, VALID_KEY)
|
15
|
-
console.log(encrypted)
|
16
|
-
})
|
17
|
-
})
|
1
|
+
import EncryptUtil from '@vue2-client/utils/EncryptUtil'
|
2
|
+
import { test, describe } from '@jest/globals'
|
3
|
+
|
4
|
+
describe('请求加密模块', () => {
|
5
|
+
const VALID_KEY = 'a964287a2cef8781ed76bd63dcadd578'
|
6
|
+
const TEST_PAYLOAD = {
|
7
|
+
username: 'admin',
|
8
|
+
password: 'P@ssw0rd_测试',
|
9
|
+
timestamp: Date.now()
|
10
|
+
}
|
11
|
+
|
12
|
+
// CBC加密测试
|
13
|
+
test('应生成有效的加密字符串', () => {
|
14
|
+
const encrypted = EncryptUtil.AESEncryptCBC(TEST_PAYLOAD, VALID_KEY)
|
15
|
+
console.log(encrypted)
|
16
|
+
})
|
17
|
+
})
|