分支自 SuZhouGuanHong/TaiYuanTaiZhong

PCS
dengjunjie
2023-12-13 113d1d4262d8f9e78a9d92123713c41669ad6c87
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
//1、此文件中的代码都是对基础业务进行扩展,也只能在此处编写代码,其他地方编写的代码会被代码生成器生成的代码覆盖
//2、此文件中的方法会与serviceFilter.js进行合并,终终执行的就是此文件中的方法
//3、components为扩展组件,可自定义页面的头部、body及尾部的额外显示的内容,分别对应的组件为:
//gridHeader、gridBody、gridFooter、modelHeader、modelBody、modelFooter共6个组件位置,如果不需要扩展组件,请忽略此处
//4、text为界面显示额外描述信息
//5、buttons->view/box/detail分别为查询界面、弹出框、弹出框明细表额外扩展的按钮
//6、methods为整个页面所有方法的业务代码扩展,如果需要在界面上的操作前、后编写业务,请覆盖此方法
//7、methods方法中可获取任意vue对象、方法、属性,可查看ViewGridConfig路径下的js文件及ViewGrid.vue的data属性
//如手动刷新表数据:this.search();
//获取表的列配置信息:this.columns  明细表表的配置信息this.detail.columns
//8、获取子组件gridHeader、gridBody、gridFooter、modelHeader、modelBody、modelFooter则使用
//this.$refs.gridHeader获取gridHeader为自己扩展的对象
//9、在子组件gridHeader、gridBody、gridFooter、modelHeader、modelBody、modelFooter的方法中调用并获得父组件
// this.$emit("parentCall", $vue => {}) //$vue为父组件对象,具体使用参考order->GridHeader.vue文件
 
//10、子父件传参除8、9方式,另可使用已封装的vuex,使用方式:this.$store.getters.data().xxx = this;使用实例:App_News.js
 
//此处的下面的属性与方法都是对基础业务代码的扩展,如果不需要扩展则忽略对应的方法也不要写在下面
//serviceFilter.js
//所的文件都最终会合并到ViewGrid.vue文件中
 
import { h, resolveComponent } from 'vue';
import gridHeader from "./SellOrderComponents/GridHeader.vue"
import gridFooter from "./SellOrderComponents/GridFooter.vue"
import modelFooter from "./SellOrderComponents/ModelFooter.vue"
import modelBody from "./SellOrderComponents/ModelBody.vue"
let extension = {
  components: {//动态扩充组件或组件路径
    //表单header、content、footer对应位置扩充的组件
    gridHeader: gridHeader,
    gridBody: {
      render() {
        return [
          h(resolveComponent('el-alert'), {
            style: { 'margin-bottom': '12px' },
            'show-icon': true, type: 'warning',
            closable: false, title: '一对一全部由代码生成不需要写任何代码,点击新建或编辑查看明细表,可根据需要实现扩展gridHeader、gridBody、gridFooter、modelHeader、modelBody、modelFooter任意位置'
          }, ''),
        ]
      }
    },
    gridFooter: gridFooter,
    //弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
    modelHeader: "",
    modelBody: modelBody,
    modelFooter: modelFooter,
  },
  text: "示例覆盖全部可扩展方法,前台扩展文件SellOrder.js,后台Partial->SellOrdeService.cs",
  //this.filterPermission('表名','权限值,如:Add')来判断页面上是否有某个按钮的权限
  buttons: { //根据需要自行实现扩展按钮
    //注:没有编辑或新建权限的情况下,是不会显示此处添加的扩展按钮,如果仍需要显示此处的按钮,可以把按钮在methods的onInited方法中添加,如:this.boxButtons.push(...)
    view: [//ViewGrid查询界面按钮
      
    ],
    box: //新建、编辑弹出框按钮
      [//ViewGrid查询界面按钮
        {
          name: "点我1",
          icon: 'el-icon-delete',
          value: 'Edit',
          class: '',
          type: 'success',
          index: 1,//显示的位置
          onClick: function () {
            this.$message.error("扩展的明细Box按钮,可设置index值指定显示位置,可使用this.$refs拿到包括自定义扩展的所有组件");
          }
        }],
    detail: //新建、编辑弹出框明细表table表按钮
      [//ViewGrid查询界面按钮
        {
          name: "点我2",
          icon: 'el-icon-delete',
          value: 'Edit',
          class: '',
          type: 'success',
          index: 1,//显示的位置
          onClick: function () {
            this.$message.error("扩展的明细table按钮,可设置index值指定显示位置");
          }
        }]
  },//扩展的按钮
  methods: {
    //扩展方法使用示例,根据需要实行下面的方法
    getServiceDate() {
      this.http.post("/api/SellOrder/getServiceDate", {}, '正在调用后台数据').then(date => {
        this.$message.error("从后台获取的服务器时间是:" + date);
      })
    },
    mounted() {
      //this.$message.success('mounted方法执行时,你可以此处编写业务逻辑');
    },
    //方式1,通过select选择触发显示与隐藏
    onInit() {
 
     this.buttons.splice(1,0,...[
      {
        name: "点我弹出框",
        icon: 'md-create',
        value: 'Edit',
        class: '',
        type: 'primary',
        index: 1,//显示的位置
        onClick: function () { //扩展按钮执行事件
          //this可以获取所有属性,包括this.$refs.gridHeader/gridBody等获取扩展组件对象
          // this.$message("测试扩展按钮");
          this.$refs.gridHeader.open1();
        }
      }, {
        name: "调用后台",
        icon: 'md-create',
        value: 'Edit',
        class: '',
        type: 'primary',
        index: 1,//显示的位置
        onClick: function () { //扩展按钮执行事件
          this.getServiceDate();
        }
      }
     ])
 
      //获取订单类型select配置,当前订单类型select改变值时,动态设置Remark,SellNo两个字段是否显示 
      var orderTypeOption = this.getFormOption("OrderType");
      orderTypeOption.onChange = (val) => {
        //当订单类型select改变值时,如果选中的是发货(对应字典编号为2),emark,SellNo隐藏,否则显示出来
        this.getFormOption("Remark").hidden = val == "2"
       // var sellNoOption = this.getFormOption("SellNo").hidden = val == "2"
      }
 
      //点击单元格编辑与结束编辑(默认是点击单元格编辑,鼠标离开结束编辑)
      this.detailOptions.clickEdit = true;
 
  
      //设置主表合计
      this.summary = true;
      //设置明细表合计
      this.detailOptions.summary = true;
      //表格设置为单选
      // this.single=true;
      // this.detailOptions.single=true;
      //设置编辑表单数量字段的最小与最大值
      this.editFormOptions.forEach(x => {
        x.forEach(item => {
          //设置输入的数量的最小值与最大值(默认是1)
          if (item.field == "Qty") {
            item.min = 10;
            item.max =100000;
          }
        });
      })
 
      //动态修改table并给列添加事件
      this.columns.forEach(x => {
        if (x.field == "Qty") {
          x.formatter = (row) => {
            return '<a style="color:#2196F3;">' + row.Qty + "(弹出框)" + '</a>'
          }
          x.click = (row, column, event) => {
            this.$refs.gridHeader.open2(row)
          }
        }
      })
 
      //动态设置查询界面table高度
      this.tableHeight = 300;
 
    },
    onInited() {
      this.detailOptions.columnIndex=false;
      this.detailOptions.ck=true;
      //设置主表求字段,后台需要实现SummaryExpress方法
      this.columns.forEach(x => {
        if (x.field == 'Qty'||x.field=='Weight') {
          x.summary = true;
        }
      })
      //设置明细表高度
      this.detailOptions.height = 220;
      this.boxOptions.height = document.body.clientHeight * 0.90;
      //设置明细表求字和段,后台需要实现GetDetailSummary方法
      this.detailOptions.columns.forEach(x => {
        if (x.field == 'Weight' || x.field == 'Qty') {
          x.summary = true;
        }
      })
      //   this.$message.success('create方法执行后', desc: '你可以SellOrder.js中编写业务逻辑,其他方法同样适用' });
    },
    searchBefore(param) { //查询ViewGird表数据前,param查询参数
      //你可以指定param查询的参数,处如果返回false,则不会执行查询
      // this.$message.success(this.table.cnName + ',查询前' });
      // console.log("扩展的"this.detailOptions.cnName + '触发loadDetailTableBefore');
      return true;
    },
    searchAfter(result) { //查询ViewGird表数据后param查询参数,result回返查询的结果
      // this.$notify({
      //   title: '查询结果',
      //   message: '返回的对象:' + JSON.stringify(result),
      //   type: 'success'
      // });
      return true;
    },
    searchDetailBefore(param) {//查询从表表数据前,param查询参数
      //  this.$message.success(this.detailOptions.cnName + '查询前' });
      return true;
    },
    searchDetailAfter(data) {//查询从表后param查询参数,result回返查询的结果
      // this.$notify({
      //   title: '明细查询结果',
      //   message: '返回的对象:' + JSON.stringify(data),
      //   type: 'success'
      // });
      return true;
    },
    delBefore(ids, rows) { //查询界面的表删除前 ids为删除的id数组,rows删除的行
      let auditStatus = rows.some(x => { return x.AuditStatus > 0 });
      // if (auditStatus) {
      //   this.$message.error('只能删除未审核的数据')
      //   return false;
      // }
      this.$message.success('删除前,选择的Id:' + ids.join(','));
      return true;
    },
    delAfter(result) {//查询界面的表删除后
      return true;
    },
    delDetailRow(rows) { //弹出框删除明细表的行数据(只是对table操作,并没有操作后台)
      console.log(rows)
      return true;
    },
    addBefore(formData) { //新建保存前formData为对象,包括明细表
      //formData格式:
      // {
      //     mainData: { 主表字段1: 'x1', 主表字段2: 'x2' },
      //     detailData: [{ 明细表字段1: d1 }],
      //     delKeys: null //删除明细表行数据的id
      // }
 
      //formData.mainData.xxx="xxxx";//还可以继续手动添加值
 
      //如果需要同时提交其他数据到后台,请设置formData.extra=xxxx
      //后台在表xxxxService.cs中重写Add方法即可从saveDataModel参数中拿到extra提交的对象
      console.log(this.detailOptions.cnName + '新建前,提交的数据:' + JSON.stringify(formData));
      return true;
    },
    async addBeforeAsync(formData) {
      //2020.12.06增加新建前异步方法同步处理
      //功能同上,区别在于此处可以做一些异步请求处理,全:
      // var _result = await this.http.post("/api/SellOrder/getPageData", {}, true).then(result => {
      //   console.log("1、异步请求前")
      //   return result;
      // })
      // console.log("2、异步请求,同步处理结果:" + JSON.stringify(_result))
      return true;
    },
    addAfter(result) {//新建保存后result返回的状态及表单对象
      console.log(this.detailOptions.cnName + '新建完成后,返回的数据' + JSON.stringify(result));
      return true;
    },
    updateBefore(formData) { //编辑保存前formData为对象,包括明细表、删除行的Id
      //formData格式:(自己调试出输看)
      // {
      //     mainData: { 主表字段1: 'x1', 主表字段2: 'x2' },
      //     detailData: [{ 明细表字段1: d1 }],
      //     delKeys: null //删除明细表行数据的id
      // }
 
      //formData.mainData.xxx="xxxx";//还可以继续手动添加值
 
      //如果需要同时提交其他数据到后台,请设置formData.extra=xxxx
      //后台在表xxxxService.cs中重写Update方法即可从saveDataModel参数中拿到extra提交的对象
 
      console.log(this.detailOptions.cnName + '编辑前,提交的数据:' + JSON.stringify(formData));
      //获取扩展的modelFooter属性text
      //  console.log(this.$refs.modelFooter.text)
      return true;
    },
    async updateBeforeAsync(formData) {
      //2020.12.06增加修改前异步方法同步处理
      //功能同上,区别在于此处可以做一些异步请求处理,全:
      var _result = await this.http.post("/api/SellOrder/getPageData", {}, true).then(result => {
        console.log("1、异步请求前")
        return result;
      })
      console.log("2、异步请求,同步处理结果:" + JSON.stringify(_result))
      return true;
    },
    updateAfter(result) {//编辑保存后result返回的状态及表单对象
      //  this.$message.success(this.detailOptions.cnName + '编辑完成后,返回的数据' + JSON.stringify(result));
      return true;
    },
    auditBefore(ids, rows) {//审核前
      if (rows.length > 2) {//每次最多只能审核2条数据
        this.$message.error('最多只能选择两条数据');
        return false;
      }
      return true;
    },
    auditAfter(result, rows) {// 审核后
      if (result.status) {
        result.message = "审核成功。。。。。" + result.message;
      }
      return true;
    },
    resetAddFormBefore() { //重置新建表单前的内容
      return true;
    },
    resetAddFormAfter() { //重置新建表单后的内容
      //如果某些字段不需要重置,则可以重新赋值
      this.editFormFields.Remark = '新建重置默认值66666';
      //给明细表添加默认一行
      this.$refs.detail.rowData.push({ Remark: "新建666666" });
      return true;
    },
    resetUpdateFormBefore() { //重置编辑表单前的内容
      //this.editFormFields当前值
      console.log(this.editFormFields)
      //当前明细表的行
      console.log(this.$refs.detail.rowData)
      return true;
    },
    resetUpdateFormAfter() { //重置编辑表单后的内容
      //如果某些字段不需要重置,则可以重新赋值
      this.editFormFields.Remark = '编辑重置默认值66666';
      //给明细表添加默认一行
      this.$refs.detail.rowData.push({ Remark: "编辑666666" });
      return true;
    },
    importAfter(data) { //导入excel后刷新table表格数据
      this.search(); //刷新table
    },
    modelOpenBefore(row) { //点击编辑/新建按钮弹出框前,可以在此处写逻辑,如,从后台获取数据
 
    },
    async modelOpenBeforeAsync(row) { //点击编辑/新建按钮弹出框前,可以在此处写逻辑,如,从后台获取数据
      //2021.01.10
      if (row) {
        console.log("编辑操作")
      } else {
        console.log("新建操作")
      }
      //打开弹出框前,http请求同步执行
      // var _result = await this.http.post("url", {}, true).then(result => {
 
      //   _result = result;
      // })
      // console.log(result);
      //返回false不会弹出框 
      //this.$message.error("不能打开弹出框 ");
      return true;
    },
    getFormOption(field) {
      let option;
      this.editFormOptions.forEach(x => {
        x.forEach(item => {
          if (item.field == field) {
            option = item;
          }
        })
      })
      return option;
    },
 
    //方式2,通过打开弹出框时触发显示与隐藏
    modelOpenAfter(row) {  //编辑或新建时,根据不同的情况控制字段是否显示 
      //   this.editFormOptions.forEach(x => {
      //     x.forEach(item => {
      //       if (item.field == "Remark" || item.field == "SellNo") {
      //         //如果不是新建,则隐藏Remark,SellNo两个字段是否显示 
      //          //也可以根据row当前编辑行的值来处理
      //         this.$set(item, "hidden", this.currentAction != "Add")
      //       }
      //     })
      //   })
    },
    rowClick({ row, column, event }) { //查询界面table点击行选中当前行
      this.$refs.table.$refs.table.toggleRowSelection(row);
    },
    // detailRowClick ({ row, column, event }) {
    //   //编辑弹出框从表table点击行选中当前行,没有从表的不用管
    //   this.$refs.detail.$refs.table.toggleRowSelection(row);
    // }
  }
};
export default extension;