centaline-data-driven 1.6.70 → 1.6.72

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "centaline-data-driven",
3
- "version": "1.6.70",
3
+ "version": "1.6.72",
4
4
  "description": "ccai",
5
5
  "author": "hjc <3226136347@qq.com>",
6
6
  "private": false,
package/release-log.md CHANGED
@@ -1,3 +1,17 @@
1
+ # v1.6.72
2
+ 2026-09-16
3
+
4
+ 优化
5
+
6
+ Field添加flagCollapse:是否可以折叠 默认 false(主要用于表单里的表格控件)
7
+
8
+ # v1.6.71
9
+ 2026-08-20
10
+
11
+ 优化
12
+
13
+ 列表类界面的操作更新事件响应效果添加动画体验:新增、编辑、删除
14
+
1
15
  # v1.6.70
2
16
  2026-07-30
3
17
 
package/src/Form.vue CHANGED
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div id="form-app" class="data-driven" style="width:100%;height:100%;overflow:auto">
3
3
  <!-- <ct-form :source="formdata.content" :apiParam="apiParam"></ct-form> -->
4
- <ct-form :api="'/PropertyTrust/readDetail'" :apiParam="apiParam" :topHeight="topHeight" :documentHeight="'600px'"></ct-form>
4
+ <ct-form :api="'/api/third-dept-tran/transaction/detail'" :apiParam="apiParam" :topHeight="topHeight" :documentHeight="'600px'"></ct-form>
5
5
  <ct-dialog-list></ct-dialog-list>
6
6
  </div>
7
7
  </template>
@@ -12,7 +12,7 @@
12
12
  data() {
13
13
  return {
14
14
  apiParam:{
15
- "trustID":"2082015429542465536","actionType":1
15
+ "originalTraId":"1526444754463850498","columnName":"transactionNo","actionType":"1","pageStyle":"2","pageTitle":"成交报告","pageOnly":"true"
16
16
  },
17
17
  topHeight:10,
18
18
  }
@@ -48,6 +48,7 @@
48
48
  <!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/customermanage/ProjectCustomerList/getLayoutOfSearch'" :searchDataApi="'/customermanage/ProjectCustomerList/getList'"></ct-searchlist> -->
49
49
  <!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/dealmanagementreport/StandingBookSZList/getLayoutOfSearch'" :searchDataApi="'/dealmanagementreport/StandingBookSZList/getList'"></ct-searchlist> -->
50
50
  <!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/dealmanagementreport/standingbookreport/getLayoutOfSearch'" :searchDataApi="'/dealmanagementreport/standingbookreport/getList'"></ct-searchlist> -->
51
+ <ct-searchlist :apiParam="para" :searchConditionApi="'/saleconfigurationmanagement/CurrencyTypeExchangeRateList/getLayoutOfSearch'" :searchDataApi="'/saleconfigurationmanagement/CurrencyTypeExchangeRateList/getListOfSearchModel'"></ct-searchlist>
51
52
  <!-- CCES -->
52
53
 
53
54
  <!-- <ct-searchlist :apiParam="para"
@@ -114,7 +115,7 @@
114
115
  <!-- <ct-searchlist :appRootUrl="appRootUrl" :searchConditionApi="'/SystemParameterList/getLayoutOfSearch'" :searchDataApi="'/SystemParameterList/getListOfSearchModel'"></ct-searchlist> -->
115
116
  <!-- <ct-searchlist :appRootUrl="appRootUrl" :searchConditionApi="'/EmployeeResourcesTranList/getLayoutOfSearch'" :searchDataApi="'/EmployeeResourcesTranList/getListOfSearchModel'"></ct-searchlist> -->
116
117
  <!-- <ct-searchlist :apiParam="apiParam" :searchConditionApi="'/propertyPublishList/getLayoutOfSearch'" :searchDataApi="'/propertyPublishList/getListOfSearchModel'" :searchStatsApi="'/propertyPublishList/getListStats'"></ct-searchlist> -->
117
- <ct-searchlist :apiParam="para" :searchConditionApi="'/PropertyTrustList/getLayoutOfSearch'" :searchDataApi="'/PropertyTrustList/getListOfSearchModel'"></ct-searchlist>
118
+ <!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/PropertyTrustList/getLayoutOfSearch'" :searchDataApi="'/PropertyTrustList/getListOfSearchModel'"></ct-searchlist> -->
118
119
 
119
120
  <!-- onecard -->
120
121
  <!-- <ct-searchlist :appRootUrl="appRootUrl" :searchConditionApi="'/cache/getLayoutOfSearchForCache'" :searchDataApi="'/cache/getListOfSearchModelForCache'"></ct-searchlist> -->
@@ -155,7 +156,7 @@
155
156
  appRootUrl:'',
156
157
  para:{
157
158
  "type":"left",
158
- chanceID: "10049156"
159
+ // chanceID: "10049156",
159
160
  },
160
161
  }
161
162
  },
@@ -1,112 +1,227 @@
1
1
  <template>
2
2
  <div class="ct-form-list" v-focus="foucus">
3
- <!-- :class="{'tableDisabled':model.tableDisabled}" -->
4
- <div v-if="model.title" class="list-title">
5
- <h5>{{model.title}}</h5>
6
- </div>
7
- <div v-else-if="model.create || (model.selectRouter && model.selectRouter.id) || model.toolButtonsShow.length>0" class="list-title"></div>
8
- <div class="list-button">
9
- <template v-if="!model.tableDisabled">
10
- <ul>
11
- <li v-for="(v,i) in model.toolButtonsShow" >
12
- <component :is="v.is" :vmodel="v" :parentModel="model" @click="toolButtonsClick" @importComplete="importComplete" @change="toolButtonsChangeHandler(v,$event)"></component>
13
- </li>
14
- <li v-if="model.selectRouter!==null">
15
- <component :is="model.selectRouter.is" :vmodel="model.selectRouter" @click="popupSearchListHandle" ></component>
16
- </li>
17
- <li v-if="model.create" >
18
- <el-button :disabled="model.disabled" type="success" class="max-btn-add" style="width: auto;" size="mini" icon="el-icon-circle-plus-outline" @click="addRow">
19
- {{model.createText}}
20
- </el-button>
21
- </li>
22
- </ul>
23
- </template>
24
- </div>
25
-
26
- <div id="listTable">
27
- <el-row>
28
- <el-col :span="24">
29
- <el-table size="mini" class="max-table--border" :data="model.tableData" border
30
- style="width: 100%" highlight-current-row :show-summary="model.showSummary" :summary-method="getSummaries">
31
- <!--操作列-->
32
- <template v-if="model.rowActionRoutersAlign === 1">
33
- <el-table-column label="操作" v-if="model.rows[0].edit || model.rows[0].delete || (model.buttons.length > 0 && model.buttonsShow.length > 0)" :fixed="fixedButtons" :width="'100%'" :render-header="renderHeader" :min-width="tableColumnWith">
34
- <template slot-scope="scope">
35
- <template v-if="!model.tableDisabled">
36
- <span v-if="scope.row.edit || scope.row.isSet" class="el-tag el-tag--info el-tag--mini" style="cursor: pointer;" @click="saveRow(scope.row,scope.$index,true)">
37
- {{scope.row.isSet?'保存':"修改"}}
38
- </span>
39
- <span v-if="scope.row.delete && !scope.row.isSet" class="el-tag el-tag--danger el-tag--mini" style="cursor: pointer;" @click="deleteRow(scope.$index, scope.row.$sourceIndex)">
40
- 删除
41
- </span>
42
- <span v-else-if="scope.row.isSet" class="el-tag el-tag--mini" style="cursor: pointer;" @click="saveRow(scope.row,scope.$index,false)">
43
- 取消
44
- </span>
45
- <span v-for="(v,i) in model.buttons"
46
- v-if="!scope.row.isSet && v.show && ( !v.rightField || !scope.row[v.rightField] || scope.row[v.rightField].value == 1 )"
47
- class="el-tag el-tag--info el-tag--mini" style="cursor: pointer;" @click="buttonClick(scope.row, v)">
48
- {{v.label}}
49
- </span>
50
- </template>
51
- </template>
52
- </el-table-column>
3
+ <el-collapse v-if="model.flagCollapse" v-model="activeName" :class="'el-collapse-saveLine'">
4
+ <el-collapse-item :key="collapseIndex" :title="model.title" :name="model.title"
5
+ :disabled="model.tableDisabled" :class="model.tableDisabled ? 'ct-collapse-item-title' : ''">
6
+ <template slot="title">
7
+ <i class="sign"></i>
8
+ <span>{{ model.title }}</span>
9
+ </template>
10
+ <el-row>
11
+ <div class="list-button">
12
+ <template v-if="!model.tableDisabled">
13
+ <ul>
14
+ <li v-for="(v,i) in model.toolButtonsShow" >
15
+ <component :is="v.is" :vmodel="v" :parentModel="model" @click="toolButtonsClick" @importComplete="importComplete" @change="toolButtonsChangeHandler(v,$event)"></component>
16
+ </li>
17
+ <li v-if="model.selectRouter!==null">
18
+ <component :is="model.selectRouter.is" :vmodel="model.selectRouter" @click="popupSearchListHandle" ></component>
19
+ </li>
20
+ <li v-if="model.create" >
21
+ <el-button :disabled="model.disabled" type="success" class="max-btn-add" style="width: auto;" size="mini" icon="el-icon-circle-plus-outline" @click="addRow">
22
+ {{model.createText}}
23
+ </el-button>
24
+ </li>
25
+ </ul>
53
26
  </template>
27
+ </div>
54
28
 
55
- <!--数据列-->
56
- <el-table-column v-for="(v,i) in model.rows[0].field" :key="i" :prop="v.id" :label="v.label" :width="v.width" :fixed="model.frozenColumns.includes(v.id)" v-if="v.show !== false && v.type!==13" :render-header="renderHeader" :min-width="tableColumnWith">
57
- <template slot="header" slot-scope="scope">
58
- <div :class="[{'ct-table-required':v.required&&model.rows[0].edit&& model.rows[0].delete&&!model.tableDisabled},getHeadClass(v)]">
59
- {{v.label}}
60
- </div>
61
- </template>
62
- <template slot-scope="scope">
63
- <span v-if="scope.row.isSet">
64
- <component ref="Fields" :is="model.currentRow.data[v.id].locked || model.currentRow.data[v.id].is!==v.is?model.currentRow.data[v.id].is:v.is"
65
- :vmodel="model.currentRow.data[v.id]" :api="model.OptApi" :key="model.currentRow.data[v.id].rowKey+itemKey"
66
- @change="changeHandler(model.currentRow.data[v.id], model.currentRow.data.$sourceIndex)"
67
- @input="inputHandler(model.currentRow.data[v.id], model.currentRow.data.$sourceIndex)"></component>
68
- </span>
69
- <span v-else-if="v.is=='ct-sensitiveeye'">
70
- <component ref="Fields" :is="v.is" :vmodel="scope.row[v.id]" :vrowmodel="scope.row" :api="model.OptApi" :key="itemKey"></component>
71
- </span>
72
- <!--可点击的列-->
73
- <span v-else-if="v.router" :class="'cell'" style="display: flex;">
74
- <ct-tablecurrency :router="v.router" :colValue="scope.row[v.id].code1" :rowData="scope.row" @click="rolRouterClickHandler">
75
- </ct-tablecurrency>
76
- </span>
77
- <ct-span v-else :vmodel="scope.row[v.id]" :rowNum="scope.row.$sourceIndex" :rowData="scope.row" :key="scope.row[v.id].rowKey+itemKey" ref="FieldsLabel"></ct-span>
29
+ <div id="listTable">
30
+ <el-row>
31
+ <el-col :span="24">
32
+ <el-table size="mini" class="max-table--border" :data="model.tableData" border
33
+ style="width: 100%" highlight-current-row :show-summary="model.showSummary" :summary-method="getSummaries">
34
+ <!--操作列-->
35
+ <template v-if="model.rowActionRoutersAlign === 1">
36
+ <el-table-column label="操作" v-if="model.rows[0].edit || model.rows[0].delete || (model.buttons.length > 0 && model.buttonsShow.length > 0)" :fixed="fixedButtons" :width="'100%'" :render-header="renderHeader" :min-width="tableColumnWith">
37
+ <template slot-scope="scope">
38
+ <template v-if="!model.tableDisabled">
39
+ <span v-if="scope.row.edit || scope.row.isSet" class="el-tag el-tag--info el-tag--mini" style="cursor: pointer;" @click="saveRow(scope.row,scope.$index,true)">
40
+ {{scope.row.isSet?'保存':"修改"}}
41
+ </span>
42
+ <span v-if="scope.row.delete && !scope.row.isSet" class="el-tag el-tag--danger el-tag--mini" style="cursor: pointer;" @click="deleteRow(scope.$index, scope.row.$sourceIndex)">
43
+ 删除
44
+ </span>
45
+ <span v-else-if="scope.row.isSet" class="el-tag el-tag--mini" style="cursor: pointer;" @click="saveRow(scope.row,scope.$index,false)">
46
+ 取消
47
+ </span>
48
+ <span v-for="(v,i) in model.buttons"
49
+ v-if="!scope.row.isSet && v.show && ( !v.rightField || !scope.row[v.rightField] || scope.row[v.rightField].value == 1 )"
50
+ class="el-tag el-tag--info el-tag--mini" style="cursor: pointer;" @click="buttonClick(scope.row, v)">
51
+ {{v.label}}
52
+ </span>
53
+ </template>
54
+ </template>
55
+ </el-table-column>
56
+ </template>
57
+
58
+ <!--数据列-->
59
+ <el-table-column v-for="(v,i) in model.rows[0].field" :key="i" :prop="v.id" :label="v.label" :width="v.width" :fixed="model.frozenColumns.includes(v.id)" v-if="v.show !== false && v.type!==13" :render-header="renderHeader" :min-width="tableColumnWith">
60
+ <template slot="header" slot-scope="scope">
61
+ <div :class="[{'ct-table-required':v.required&&model.rows[0].edit&& model.rows[0].delete&&!model.tableDisabled},getHeadClass(v)]">
62
+ {{v.label}}
63
+ </div>
64
+ </template>
65
+ <template slot-scope="scope">
66
+ <span v-if="scope.row.isSet">
67
+ <component ref="Fields" :is="model.currentRow.data[v.id].locked || model.currentRow.data[v.id].is!==v.is?model.currentRow.data[v.id].is:v.is"
68
+ :vmodel="model.currentRow.data[v.id]" :api="model.OptApi" :key="model.currentRow.data[v.id].rowKey+itemKey"
69
+ @change="changeHandler(model.currentRow.data[v.id], model.currentRow.data.$sourceIndex)"
70
+ @input="inputHandler(model.currentRow.data[v.id], model.currentRow.data.$sourceIndex)"></component>
71
+ </span>
72
+ <span v-else-if="v.is=='ct-sensitiveeye'">
73
+ <component ref="Fields" :is="v.is" :vmodel="scope.row[v.id]" :vrowmodel="scope.row" :api="model.OptApi" :key="itemKey"></component>
74
+ </span>
75
+ <!--可点击的列-->
76
+ <span v-else-if="v.router" :class="'cell'" style="display: flex;">
77
+ <ct-tablecurrency :router="v.router" :colValue="scope.row[v.id].code1" :rowData="scope.row" @click="rolRouterClickHandler">
78
+ </ct-tablecurrency>
79
+ </span>
80
+ <ct-span v-else :vmodel="scope.row[v.id]" :rowNum="scope.row.$sourceIndex" :rowData="scope.row" :key="scope.row[v.id].rowKey+itemKey" ref="FieldsLabel"></ct-span>
81
+ </template>
82
+ </el-table-column>
83
+
84
+ <!--操作列-->
85
+ <template v-if="model.rowActionRoutersAlign !== 1">
86
+ <el-table-column label="操作" v-if="model.rows[0].edit || model.rows[0].delete || (model.buttons.length > 0 && model.buttonsShow.length > 0)" :fixed="fixedButtons" :width="'100%'" :render-header="renderHeader" :min-width="tableColumnWith">
87
+ <template slot-scope="scope">
88
+ <template v-if="!model.tableDisabled">
89
+ <span v-if="scope.row.edit || scope.row.isSet" class="el-tag el-tag--info el-tag--mini" style="cursor: pointer;" @click="saveRow(scope.row,scope.$index,true)">
90
+ {{scope.row.isSet?'保存':"修改"}}
91
+ </span>
92
+ <span v-if="scope.row.delete && !scope.row.isSet" class="el-tag el-tag--danger el-tag--mini" style="cursor: pointer;" @click="deleteRow(scope.$index, scope.row.$sourceIndex)">
93
+ 删除
94
+ </span>
95
+ <span v-else-if="scope.row.isSet" class="el-tag el-tag--mini" style="cursor: pointer;" @click="saveRow(scope.row,scope.$index,false)">
96
+ 取消
97
+ </span>
98
+ <span v-for="(v,i) in model.buttons"
99
+ v-if="!scope.row.isSet && v.show && ( !v.rightField || !scope.row[v.rightField] || scope.row[v.rightField].value == 1 )"
100
+ class="el-tag el-tag--info el-tag--mini" style="cursor: pointer;" @click="buttonClick(scope.row, v)">
101
+ {{v.label}}
102
+ </span>
103
+ </template>
104
+ </template>
105
+ </el-table-column>
106
+ </template>
107
+ </el-table>
108
+ </el-col>
109
+ </el-row>
110
+ </div>
111
+
112
+ <div v-if="model.description" v-html="model.description"></div>
113
+ </el-row>
114
+ </el-collapse-item>
115
+ </el-collapse>
116
+
117
+ <template v-else>
118
+ <div v-if="model.title" class="list-title">
119
+ <h5>{{model.title}}</h5>
120
+ </div>
121
+ <div v-else-if="model.create || (model.selectRouter && model.selectRouter.id) || model.toolButtonsShow.length>0" class="list-title"></div>
122
+ <div class="list-button">
123
+ <template v-if="!model.tableDisabled">
124
+ <ul>
125
+ <li v-for="(v,i) in model.toolButtonsShow" >
126
+ <component :is="v.is" :vmodel="v" :parentModel="model" @click="toolButtonsClick" @importComplete="importComplete" @change="toolButtonsChangeHandler(v,$event)"></component>
127
+ </li>
128
+ <li v-if="model.selectRouter!==null">
129
+ <component :is="model.selectRouter.is" :vmodel="model.selectRouter" @click="popupSearchListHandle" ></component>
130
+ </li>
131
+ <li v-if="model.create" >
132
+ <el-button :disabled="model.disabled" type="success" class="max-btn-add" style="width: auto;" size="mini" icon="el-icon-circle-plus-outline" @click="addRow">
133
+ {{model.createText}}
134
+ </el-button>
135
+ </li>
136
+ </ul>
137
+ </template>
138
+ </div>
139
+
140
+ <div id="listTable">
141
+ <el-row>
142
+ <el-col :span="24">
143
+ <el-table size="mini" class="max-table--border" :data="model.tableData" border
144
+ style="width: 100%" highlight-current-row :show-summary="model.showSummary" :summary-method="getSummaries">
145
+ <!--操作列-->
146
+ <template v-if="model.rowActionRoutersAlign === 1">
147
+ <el-table-column label="操作" v-if="model.rows[0].edit || model.rows[0].delete || (model.buttons.length > 0 && model.buttonsShow.length > 0)" :fixed="fixedButtons" :width="'100%'" :render-header="renderHeader" :min-width="tableColumnWith">
148
+ <template slot-scope="scope">
149
+ <template v-if="!model.tableDisabled">
150
+ <span v-if="scope.row.edit || scope.row.isSet" class="el-tag el-tag--info el-tag--mini" style="cursor: pointer;" @click="saveRow(scope.row,scope.$index,true)">
151
+ {{scope.row.isSet?'保存':"修改"}}
152
+ </span>
153
+ <span v-if="scope.row.delete && !scope.row.isSet" class="el-tag el-tag--danger el-tag--mini" style="cursor: pointer;" @click="deleteRow(scope.$index, scope.row.$sourceIndex)">
154
+ 删除
155
+ </span>
156
+ <span v-else-if="scope.row.isSet" class="el-tag el-tag--mini" style="cursor: pointer;" @click="saveRow(scope.row,scope.$index,false)">
157
+ 取消
158
+ </span>
159
+ <span v-for="(v,i) in model.buttons"
160
+ v-if="!scope.row.isSet && v.show && ( !v.rightField || !scope.row[v.rightField] || scope.row[v.rightField].value == 1 )"
161
+ class="el-tag el-tag--info el-tag--mini" style="cursor: pointer;" @click="buttonClick(scope.row, v)">
162
+ {{v.label}}
163
+ </span>
164
+ </template>
165
+ </template>
166
+ </el-table-column>
78
167
  </template>
79
- </el-table-column>
80
168
 
81
- <!--操作列-->
82
- <template v-if="model.rowActionRoutersAlign !== 1">
83
- <el-table-column label="操作" v-if="model.rows[0].edit || model.rows[0].delete || (model.buttons.length > 0 && model.buttonsShow.length > 0)" :fixed="fixedButtons" :width="'100%'" :render-header="renderHeader" :min-width="tableColumnWith">
84
- <template slot-scope="scope">
85
- <template v-if="!model.tableDisabled">
86
- <span v-if="scope.row.edit || scope.row.isSet" class="el-tag el-tag--info el-tag--mini" style="cursor: pointer;" @click="saveRow(scope.row,scope.$index,true)">
87
- {{scope.row.isSet?'保存':"修改"}}
88
- </span>
89
- <span v-if="scope.row.delete && !scope.row.isSet" class="el-tag el-tag--danger el-tag--mini" style="cursor: pointer;" @click="deleteRow(scope.$index, scope.row.$sourceIndex)">
90
- 删除
91
- </span>
92
- <span v-else-if="scope.row.isSet" class="el-tag el-tag--mini" style="cursor: pointer;" @click="saveRow(scope.row,scope.$index,false)">
93
- 取消
94
- </span>
95
- <span v-for="(v,i) in model.buttons"
96
- v-if="!scope.row.isSet && v.show && ( !v.rightField || !scope.row[v.rightField] || scope.row[v.rightField].value == 1 )"
97
- class="el-tag el-tag--info el-tag--mini" style="cursor: pointer;" @click="buttonClick(scope.row, v)">
98
- {{v.label}}
99
- </span>
169
+ <!--数据列-->
170
+ <el-table-column v-for="(v,i) in model.rows[0].field" :key="i" :prop="v.id" :label="v.label" :width="v.width" :fixed="model.frozenColumns.includes(v.id)" v-if="v.show !== false && v.type!==13" :render-header="renderHeader" :min-width="tableColumnWith">
171
+ <template slot="header" slot-scope="scope">
172
+ <div :class="[{'ct-table-required':v.required&&model.rows[0].edit&& model.rows[0].delete&&!model.tableDisabled},getHeadClass(v)]">
173
+ {{v.label}}
174
+ </div>
100
175
  </template>
176
+ <template slot-scope="scope">
177
+ <span v-if="scope.row.isSet">
178
+ <component ref="Fields" :is="model.currentRow.data[v.id].locked || model.currentRow.data[v.id].is!==v.is?model.currentRow.data[v.id].is:v.is"
179
+ :vmodel="model.currentRow.data[v.id]" :api="model.OptApi" :key="model.currentRow.data[v.id].rowKey+itemKey"
180
+ @change="changeHandler(model.currentRow.data[v.id], model.currentRow.data.$sourceIndex)"
181
+ @input="inputHandler(model.currentRow.data[v.id], model.currentRow.data.$sourceIndex)"></component>
182
+ </span>
183
+ <span v-else-if="v.is=='ct-sensitiveeye'">
184
+ <component ref="Fields" :is="v.is" :vmodel="scope.row[v.id]" :vrowmodel="scope.row" :api="model.OptApi" :key="itemKey"></component>
185
+ </span>
186
+ <!--可点击的列-->
187
+ <span v-else-if="v.router" :class="'cell'" style="display: flex;">
188
+ <ct-tablecurrency :router="v.router" :colValue="scope.row[v.id].code1" :rowData="scope.row" @click="rolRouterClickHandler">
189
+ </ct-tablecurrency>
190
+ </span>
191
+ <ct-span v-else :vmodel="scope.row[v.id]" :rowNum="scope.row.$sourceIndex" :rowData="scope.row" :key="scope.row[v.id].rowKey+itemKey" ref="FieldsLabel"></ct-span>
101
192
  </template>
102
193
  </el-table-column>
103
- </template>
104
- </el-table>
105
- </el-col>
106
- </el-row>
107
- </div>
108
194
 
109
- <div v-if="model.description" v-html="model.description"></div>
195
+ <!--操作列-->
196
+ <template v-if="model.rowActionRoutersAlign !== 1">
197
+ <el-table-column label="操作" v-if="model.rows[0].edit || model.rows[0].delete || (model.buttons.length > 0 && model.buttonsShow.length > 0)" :fixed="fixedButtons" :width="'100%'" :render-header="renderHeader" :min-width="tableColumnWith">
198
+ <template slot-scope="scope">
199
+ <template v-if="!model.tableDisabled">
200
+ <span v-if="scope.row.edit || scope.row.isSet" class="el-tag el-tag--info el-tag--mini" style="cursor: pointer;" @click="saveRow(scope.row,scope.$index,true)">
201
+ {{scope.row.isSet?'保存':"修改"}}
202
+ </span>
203
+ <span v-if="scope.row.delete && !scope.row.isSet" class="el-tag el-tag--danger el-tag--mini" style="cursor: pointer;" @click="deleteRow(scope.$index, scope.row.$sourceIndex)">
204
+ 删除
205
+ </span>
206
+ <span v-else-if="scope.row.isSet" class="el-tag el-tag--mini" style="cursor: pointer;" @click="saveRow(scope.row,scope.$index,false)">
207
+ 取消
208
+ </span>
209
+ <span v-for="(v,i) in model.buttons"
210
+ v-if="!scope.row.isSet && v.show && ( !v.rightField || !scope.row[v.rightField] || scope.row[v.rightField].value == 1 )"
211
+ class="el-tag el-tag--info el-tag--mini" style="cursor: pointer;" @click="buttonClick(scope.row, v)">
212
+ {{v.label}}
213
+ </span>
214
+ </template>
215
+ </template>
216
+ </el-table-column>
217
+ </template>
218
+ </el-table>
219
+ </el-col>
220
+ </el-row>
221
+ </div>
222
+
223
+ <div v-if="model.description" v-html="model.description"></div>
224
+ </template>
110
225
  </div>
111
226
  </template>
112
227
  <script>
@@ -208,6 +323,8 @@
208
323
  itemKey: Math.random(),
209
324
  tableColumnWith: 0,
210
325
  fixedButtons:false,
326
+ collapseIndex:0,
327
+ activeName:'',
211
328
  }
212
329
  },
213
330
  created() {
@@ -215,6 +332,7 @@
215
332
  this.model = this.vmodel;
216
333
  this.model.OptApi = this.api;
217
334
  this.model.$self=self;
335
+ if(this.model.groupExpand) this.activeName = this.model.title;
218
336
 
219
337
  this.$nextTick(function () {
220
338
  self.model.refField = this.$refs.Fields;
@@ -538,6 +656,9 @@
538
656
  </script>
539
657
 
540
658
  <style>
659
+ .el-collapse-saveLine .el-collapse-item__wrap {
660
+ border-bottom: none;
661
+ }
541
662
  .el-table-add-row {
542
663
  margin-top: 10px;
543
664
  width: 100%;
@@ -968,7 +968,7 @@ export default {
968
968
  let rowNew = this.model.listData[newIndex];
969
969
  let selectMergedIndexOld = -1;
970
970
  let selectMergedIndexNew = -1;
971
- if (rowOld.$rowsMerged) {
971
+ if (rowOld && rowOld.$rowsMerged) {
972
972
  if (rowOld.$rowsMerged.includes(newIndex)) {
973
973
  selectMergedIndexNew = oldIndex;
974
974
  }
@@ -2161,7 +2161,7 @@ export default {
2161
2161
  if (router.flagFreshCurrentRow || router.flagAddRowAfterAction) {
2162
2162
  self.tableComplate = true;
2163
2163
  self.model.getCurrentRowApiData(
2164
- function () {
2164
+ function (editFields) {
2165
2165
  self.$forceUpdate();
2166
2166
  self.tableComplate = false;
2167
2167
  self.$emit("searchComplate");
@@ -2171,12 +2171,56 @@ export default {
2171
2171
  if(self.model.flagNotificationParentAfterContentChanged){
2172
2172
  self.$emit("flagNotificationParentAfterContentChanged");
2173
2173
  }
2174
+
2175
+ if(router.flagAddRowAfterAction){
2176
+ self.rowClickHandle(event,0);
2177
+ self.useTableAnimation("filter");
2178
+ }
2179
+ else{
2180
+ if(editFields && editFields.length>0){
2181
+ self.useTableAnimationFields(editFields);
2182
+ }
2183
+ // self.useTableAnimation(router.flagFreshCurrentRow?"update":"filter");
2184
+ }
2174
2185
  },
2175
2186
  data,
2176
2187
  router
2177
2188
  );
2178
2189
  }
2179
2190
  },
2191
+ useTableAnimation(type){
2192
+ this.$nextTick(() => {
2193
+ const targetRow = this.currentRow;
2194
+ const className = `table-row-${type}`;
2195
+ targetRow.classList.add(className);
2196
+ // 动画结束后移除类名
2197
+ setTimeout(() => {
2198
+ targetRow.classList.remove(className);
2199
+ }, 400);
2200
+ });
2201
+ },
2202
+ useTableAnimationFields(editFields){
2203
+ this.$nextTick(() => {
2204
+ const targetRow = this.currentRow;
2205
+ const className = 'table-row-filter';
2206
+ editFields.forEach((item) => {
2207
+ const cell = targetRow.querySelector(`[columnid="${item}"]`);
2208
+ if (cell) {
2209
+ cell.classList.add(className);
2210
+ }
2211
+ });
2212
+
2213
+ // 动画结束后移除类名
2214
+ setTimeout(() => {
2215
+ editFields.forEach((item) => {
2216
+ const cell = targetRow.querySelector(`[columnid="${item}"]`);
2217
+ if (cell) {
2218
+ cell.classList.remove(className);
2219
+ }
2220
+ });
2221
+ }, 400);
2222
+ });
2223
+ },
2180
2224
  importComplete(res, field) {
2181
2225
  var self = this;
2182
2226
  if (res && res.rtnCode && res.rtnCode === 201) {
@@ -2580,6 +2624,66 @@ export default {
2580
2624
  border-top: 1px solid #ebeef5;
2581
2625
  }
2582
2626
 
2627
+ .table-row-update {
2628
+ transform-origin: center center;
2629
+ animation: rowRoll 0.9s ease;
2630
+ }
2631
+ @keyframes rowRoll{
2632
+ 0% { transform: scaleY(1); }
2633
+ 50% { transform: scaleY(0.3); }
2634
+ 100% { transform: scaleY(1); }
2635
+ }
2636
+ .table-row-filter {
2637
+ animation: rowfilter 0.9s ease forwards;
2638
+ }
2639
+ /* 编辑动画模糊清晰 */
2640
+ @keyframes rowfilter {
2641
+ 0% {filter: blur(4px);opacity: 0.2;}
2642
+ 50% {filter: blur(2px);opacity: 0.6;}
2643
+ 100% {filter: blur(0);opacity: 1;}
2644
+ }
2645
+ .table-row-add {
2646
+ animation: rowSlideIn 0.4s ease-out;
2647
+ }
2648
+ /* 新增动画从上到下显示 */
2649
+ @keyframes rowSlideIn {
2650
+ from { opacity: 0; transform: translateY(-20px); background-color: #f0f9eb; }
2651
+ to { opacity: 1; transform: translateY(0); background-color: transparent; }
2652
+ }
2653
+ .table-row-delete {
2654
+ /* animation: rowFadeOutRoll 0.35s ease-in forwards; */
2655
+ animation: rowFadeOutFilter 0.5s ease forwards;
2656
+ }
2657
+ /* 删除动画向右移 */
2658
+ @keyframes rowFadeOutRight {
2659
+ from { opacity: 1; transform: translateX(0); }
2660
+ to { opacity: 0; transform: translateX(30px); height: 0; padding: 0; overflow: hidden; }
2661
+ }
2662
+ /* 删除动画向左移 */
2663
+ @keyframes rowFadeOutLeft {
2664
+ from { opacity: 1; transform: translateX(0); }
2665
+ to { opacity: 0; transform: translateX(-30px); height: 0; padding: 0; overflow: hidden; }
2666
+ }
2667
+ /* 删除动画向内消失 */
2668
+ @keyframes rowFadeOutRoll {
2669
+ 0% { transform: scaleY(1) scaleX(1); }
2670
+ 50% { transform: scaleY(0.3) scaleX(0.5); }
2671
+ 100% { transform: scaleY(0) scaleX(0); }
2672
+ }
2673
+ /* 删除动画模糊消失 */
2674
+ @keyframes rowFadeOutFilter {
2675
+ 0% {filter: blur(0);opacity: 1;}
2676
+ 50% {filter: blur(2px);opacity: 0.5;}
2677
+ 100% {filter: blur(4px);opacity: 0;}
2678
+ }
2679
+ .table-row-edit {
2680
+ animation: rowHighlight 0.6s ease;
2681
+ }
2682
+ @keyframes rowHighlight {
2683
+ 0%, 100% { background-color: transparent; }
2684
+ 50% { background-color: #ecf5ff; }
2685
+ }
2686
+
2583
2687
  .ct-searchtable .ct-table {
2584
2688
  min-width: 100%;
2585
2689
  border-collapse: collapse;
@@ -448,6 +448,9 @@ const Base = function (source) {
448
448
  set displayRelationFieldValue(v) {
449
449
  source.displayRelationFieldValue = v;
450
450
  },
451
+ get flagCollapse() {
452
+ return source.flagCollapse || false;
453
+ },
451
454
  };
452
455
 
453
456
  return rtn;
@@ -41,6 +41,15 @@ const FormList = function (source, master) {
41
41
  get title() {
42
42
  return master.controlLabel || '';
43
43
  },
44
+ set title(v) {
45
+ master.controlLabel = v;
46
+ },
47
+ get flagCollapse() {
48
+ return master.flagCollapse || false;
49
+ },
50
+ get groupExpand() {
51
+ return master.groupExpand === true;
52
+ },
44
53
  get description() {
45
54
  return master.description || '';
46
55
  },