张庆宇 2 週之前
父節點
當前提交
d8cb15c389
共有 4 個檔案被更改,包括 1752 行新增296 行删除
  1. 615
    0
      src/views/sto/main/cargo.vue
  2. 290
    296
      src/views/sto/main/material.vue
  3. 352
    0
      src/views/sto/main/price.vue
  4. 495
    0
      src/views/sto/main/ware.vue

+ 615
- 0
src/views/sto/main/cargo.vue 查看文件

@@ -0,0 +1,615 @@
1
+<template>
2
+  <div>
3
+    <!-- 查询条件 -->
4
+    <el-card :body-style="cardBodyStyle">
5
+      <el-form :model="query" label-width="auto" label-position="right">
6
+        <el-row :gutter="10">
7
+          <el-col :span="5">
8
+            <el-form-item label="上游客户" style="margin-bottom: 0px;">
9
+              <el-select v-model="query.uperCustomerId" filterable placeholder="请选择上游客户" clearable style="width:100%;" size="small">
10
+                <el-option v-for="item in optionsCustomer" :key="item.id" :label="item.customerNm" :value="item.id" />
11
+              </el-select>
12
+            </el-form-item>
13
+          </el-col>
14
+          <el-col :span="5">
15
+            <el-form-item label="客户" style="margin-bottom: 0px;">
16
+              <el-select v-model="query.customerId" filterable placeholder="请选择客户" clearable style="width:100%;" size="small">
17
+                <el-option v-for="item in optionsCustomer" :key="item.id" :label="item.customerNm" :value="item.id" />
18
+              </el-select>
19
+            </el-form-item>
20
+          </el-col>
21
+          <el-col :span="4">
22
+            <el-form-item label="" style="margin-bottom: 0px; margin-top: 5px;">
23
+              <el-button type="primary" @click="handleSearch">查询</el-button>
24
+              <el-button type="success" @click="handleAdd">新增</el-button>
25
+              <el-button type="info" @click="handleReset">重置</el-button>
26
+            </el-form-item>
27
+          </el-col>
28
+        </el-row>
29
+      </el-form>
30
+    </el-card>
31
+
32
+    <!-- 数据表格 -->
33
+    <el-card :body-style="cardBodyStyle">
34
+      <el-table :data="tableData" border highlight-current-row v-loading="loading">
35
+        <el-table-column type="index" label="序号" align="center" width="60">
36
+          <template #default="scope">
37
+            <span>{{ scope.$index + (currentPage - 1) * pageSize + 1 }}</span>
38
+          </template>
39
+        </el-table-column>
40
+        <el-table-column prop="uperCustomerName" label="上游客户" width="180" show-overflow-tooltip />
41
+        <el-table-column prop="customerName" label="客户" width="180" show-overflow-tooltip />
42
+        <el-table-column prop="sumWeight" label="可使用量(吨)" width="120" show-overflow-tooltip align="right">
43
+          <template #default="scope">
44
+            <span>{{ scope.row.sumWeight ? scope.row.sumWeight.toFixed(3) : '0.000' }}</span>
45
+          </template>
46
+        </el-table-column>
47
+        <el-table-column prop="useWeight" label="已使用量(吨)" width="120" show-overflow-tooltip align="right">
48
+          <template #default="scope">
49
+            <span>{{ scope.row.useWeight ? scope.row.useWeight.toFixed(3) : '0.000' }}</span>
50
+          </template>
51
+        </el-table-column>
52
+        <!-- 启用状态列 -->
53
+<!--        <el-table-column prop="enableStatus" label="启用状态" width="100" align="center">
54
+          <template #default="scope">
55
+            <el-switch
56
+                v-model="scope.row.enableStatus"
57
+                :active-value="'1'"
58
+                :inactive-value="'0'"
59
+                @change="handleEnableStatusChange(scope.row)"
60
+            />
61
+          </template>
62
+        </el-table-column>-->
63
+        <el-table-column label="启用状态操作" width="120" fixed="right">
64
+          <template #default="scope">
65
+            <el-button
66
+                plain
67
+                :type="scope.row.enableStatus === '1' ? 'danger' : 'success'"
68
+                size="mini"
69
+                @click="handleToggleEnableStatus(scope.row)"
70
+                :loading="enableStatusLoading"
71
+            >
72
+              {{ scope.row.enableStatus === '1' ? '禁用' : '启用' }}
73
+            </el-button>
74
+          </template>
75
+        </el-table-column>
76
+        <el-table-column label="操作" width="120" fixed="right">
77
+          <template #default="scope">
78
+            <el-button plain type="warning" size="mini" @click="handleEdit(scope.row)">编辑</el-button>
79
+          </template>
80
+        </el-table-column>
81
+        <el-table-column label="日志记录" width="100" fixed="right">
82
+          <template #default="scope">
83
+            <el-button plain type="primary" size="mini" @click="handleLog(scope.row)">查看</el-button>
84
+          </template>
85
+        </el-table-column>
86
+      </el-table>
87
+    </el-card>
88
+
89
+    <!-- 分页 -->
90
+    <el-card :body-style="cardBodyStyle">
91
+      <el-pagination :current-page="currentPage" :page-size="pageSize" :page-sizes="pageSizes" :total="totalRows"
92
+                     background layout="total, sizes, prev, pager, next, jumper"
93
+                     @size-change="handleSizeChange"
94
+                     @current-change="handleCurrentChange" />
95
+    </el-card>
96
+
97
+    <!-- 新增/编辑对话框 -->
98
+    <el-dialog :title="form.id ? '货权调整' : '新增货权'" v-model="dialogVisible" width="500px" :close-on-click-modal="false">
99
+      <el-form :model="form" label-width="120px" label-position="right" :rules="rules" ref="ruleFormRef">
100
+        <el-form-item label="上游客户" prop="uperCustomerId">
101
+          <el-select
102
+              v-model="form.uperCustomerId"
103
+              filterable
104
+              placeholder="请选择上游客户"
105
+              :disabled="!!form.id"
106
+              style="width: 100%;">
107
+            <el-option v-for="item in optionsCustomer" :key="item.id" :label="item.customerNm" :value="item.id" />
108
+          </el-select>
109
+        </el-form-item>
110
+        <el-form-item label="客户" prop="customerId">
111
+          <el-select
112
+              v-model="form.customerId"
113
+              filterable
114
+              placeholder="请选择客户"
115
+              :disabled="!!form.id"
116
+              style="width: 100%;">
117
+            <el-option v-for="item in optionsCustomer" :key="item.id" :label="item.customerNm" :value="item.id" />
118
+          </el-select>
119
+        </el-form-item>
120
+        <!-- 编辑时显示启用状态 -->
121
+        <el-form-item v-if="form.id" label="启用状态">
122
+          <el-tag :type="form.enableStatus === '1' ? 'success' : 'info'">
123
+            {{ form.enableStatus === '1' ? '已启用' : '未启用' }}
124
+          </el-tag>
125
+        </el-form-item>
126
+        <el-form-item label="修改内容" prop="subStr">
127
+          <el-select
128
+              v-model="form.subStr"
129
+              placeholder="请选择修改内容"
130
+              :disabled="isReduceDisabled"
131
+              style="width: 100%;">
132
+            <el-option label="增加" value="增加" />
133
+            <el-option label="减少" value="减少" :disabled="isReduceDisabled" />
134
+          </el-select>
135
+          <div v-if="isReduceDisabled" style="color: #f56c6c; font-size: 12px; margin-top: 5px;">
136
+            当前记录已启用且可使用量为0,不能进行减少操作
137
+          </div>
138
+        </el-form-item>
139
+        <el-form-item label="重量" prop="weight">
140
+          <el-input v-model="form.weight" type="number" placeholder="请输入重量" style="width: 100%;">
141
+            <template slot="append">吨</template>
142
+          </el-input>
143
+        </el-form-item>
144
+        <el-form-item label="单号" prop="ordNo">
145
+          <el-input v-model="form.ordNo" placeholder="请输入单号" style="width: 100%;" />
146
+        </el-form-item>
147
+        <el-form-item label="备注" prop="remark">
148
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入备注" style="width: 100%;" />
149
+        </el-form-item>
150
+      </el-form>
151
+      <template #footer>
152
+        <div class="dialog-footer">
153
+          <el-button type="success" plain @click="handleSave">保存</el-button>
154
+          <el-button type="danger" plain @click="handleCancelSave">取消</el-button>
155
+        </div>
156
+      </template>
157
+    </el-dialog>
158
+
159
+    <!-- 日志记录对话框 -->
160
+    <el-dialog title="转移数量变动日志" v-model="logDialogVisible" width="900px" :close-on-click-modal="false">
161
+      <!-- 日志查询条件 -->
162
+      <el-form :model="logQuery" label-width="auto" label-position="right">
163
+        <el-row :gutter="10">
164
+          <el-col :span="10">
165
+            <el-form-item label="修改时间" style="margin-bottom: 0px;">
166
+              <el-date-picker
167
+                  v-model="logQuery.dateRange"
168
+                  type="daterange"
169
+                  range-separator="至"
170
+                  start-placeholder="开始日期"
171
+                  end-placeholder="结束日期"
172
+                  value-format="yyyy-MM-dd"
173
+                  style="width:100%;"
174
+                  size="small"
175
+              />
176
+            </el-form-item>
177
+          </el-col>
178
+          <el-col :span="4">
179
+            <el-form-item label="修改类型" style="margin-bottom: 0px;">
180
+              <el-select v-model="logQuery.subStr" placeholder="请选择" clearable style="width:100%;" size="small">
181
+                <el-option label="增加" value="增加" />
182
+                <el-option label="减少" value="减少" />
183
+              </el-select>
184
+            </el-form-item>
185
+          </el-col>
186
+          <el-col :span="4">
187
+            <el-form-item label="修改来源" style="margin-bottom: 0px;">
188
+              <el-select v-model="logQuery.changeFrom" placeholder="请选择" clearable style="width:100%;" size="small">
189
+                <el-option label="手动调整" value="手动调整" />
190
+                <el-option label="货权转移" value="货权转移" />
191
+              </el-select>
192
+            </el-form-item>
193
+          </el-col>
194
+          <el-col :span="3">
195
+            <el-form-item label="" style="margin-bottom: 0px; margin-top: 5px;">
196
+              <el-button type="primary" @click="handleLogSearch">查询</el-button>
197
+            </el-form-item>
198
+          </el-col>
199
+        </el-row>
200
+      </el-form>
201
+
202
+      <!-- 日志表格 -->
203
+      <el-table :data="logTableData" border highlight-current-row v-loading="logLoading">
204
+        <el-table-column type="index" label="序号" align="center" width="60">
205
+          <template #default="scope">
206
+            <span>{{ scope.$index + (logCurrentPage - 1) * logPageSize + 1 }}</span>
207
+          </template>
208
+        </el-table-column>
209
+        <el-table-column prop="modifyTime" label="修改时间" width="180" show-overflow-tooltip>
210
+          <template #default="scope">
211
+            <span>{{ formatDate(scope.row.modifyTime) }}</span>
212
+          </template>
213
+        </el-table-column>
214
+        <el-table-column prop="modifyName" label="修改人员" width="120" show-overflow-tooltip />
215
+        <el-table-column prop="weight" label="修改重量(吨)" width="120" show-overflow-tooltip align="right">
216
+          <template #default="scope">
217
+            <span>{{ scope.row.weight ? scope.row.weight.toFixed(3) : '0.000' }}</span>
218
+          </template>
219
+        </el-table-column>
220
+        <el-table-column prop="subStr" label="修改类型" width="100" show-overflow-tooltip />
221
+        <el-table-column prop="changeFrom" label="修改来源" width="120" show-overflow-tooltip />
222
+        <el-table-column prop="ordNo" label="单号" width="150" show-overflow-tooltip />
223
+        <el-table-column prop="remark" label="备注" show-overflow-tooltip />
224
+      </el-table>
225
+
226
+      <!-- 日志分页 -->
227
+      <div style="margin-top: 15px;">
228
+        <el-pagination :current-page="logCurrentPage" :page-size="logPageSize" :page-sizes="logPageSizes" :total="logTotalRows"
229
+                       background layout="total, sizes, prev, pager, next, jumper"
230
+                       @size-change="handleLogSizeChange"
231
+                       @current-change="handleLogCurrentChange" />
232
+      </div>
233
+    </el-dialog>
234
+  </div>
235
+</template>
236
+
237
+<script>
238
+import axios from '@/axios'
239
+
240
+export default {
241
+  data() {
242
+    return {
243
+      cardBodyStyle: { padding: '10px' },
244
+      // 查询条件
245
+      query: {
246
+        uperCustomerId: '',
247
+        customerId: ''
248
+      },
249
+      // 表格数据
250
+      tableData: [],
251
+      loading: false,
252
+      // 对话框控制
253
+      dialogVisible: false,
254
+      logDialogVisible: false,
255
+      // 客户选项
256
+      optionsCustomer: [],
257
+      // 表单数据
258
+      form: {
259
+        id: '',
260
+        uperCustomerId: '',
261
+        customerId: '',
262
+        subStr: '',
263
+        weight: '',
264
+        ordNo: '',
265
+        remark: '',
266
+        enableStatus: '0',
267
+        sumWeight: 0
268
+      },
269
+      // 分页相关
270
+      currentPage: 1,
271
+      totalRows: 0,
272
+      pageSizes: [10, 20, 50, 100],
273
+      pageSize: 10,
274
+      // 日志查询条件
275
+      logQuery: {
276
+        dateRange: [],
277
+        subStr: '',
278
+        changeFrom: ''
279
+      },
280
+      // 日志表格数据
281
+      logTableData: [],
282
+      logLoading: false,
283
+      // 日志分页相关
284
+      logCurrentPage: 1,
285
+      logTotalRows: 0,
286
+      logPageSizes: [10, 20, 50, 100],
287
+      logPageSize: 10,
288
+      // 当前选中的货权记录(用于日志查询)
289
+      currentCargoRecord: null,
290
+      // 启用状态修改加载状态
291
+      enableStatusLoading: false,
292
+      // 表单验证规则
293
+      rules: {
294
+        uperCustomerId: [
295
+          { required: true, message: '请选择上游客户', trigger: 'change' }
296
+        ],
297
+        customerId: [
298
+          { required: true, message: '请选择客户', trigger: 'change' }
299
+        ],
300
+        subStr: [
301
+          { required: true, message: '请选择修改内容', trigger: 'change' }
302
+        ],
303
+        weight: [
304
+          { required: true, message: '请输入重量', trigger: 'blur' },
305
+          { validator: this.validateWeight, trigger: 'blur' }
306
+        ]
307
+      }
308
+    }
309
+  },
310
+  computed: {
311
+    // 计算是否禁用减少操作
312
+    isReduceDisabled() {
313
+      if (!this.form.id) {
314
+        // 新增时,减少操作不可用
315
+        return true
316
+      }
317
+      // 编辑时,如果启用状态为1且可使用量为0,则禁用减少操作
318
+      return this.form.enableStatus === '1' && (this.form.sumWeight === 0 || this.form.sumWeight === null)
319
+    }
320
+  },
321
+  mounted() {
322
+    this.getTableData()
323
+    this.getAllCustomer()
324
+  },
325
+  methods: {
326
+    // 重量验证
327
+    validateWeight(rule, value, callback) {
328
+      if (!value) {
329
+        callback(new Error('请输入重量'))
330
+      } else if (parseFloat(value) <= 0) {
331
+        callback(new Error('重量必须大于0'))
332
+      } else {
333
+        callback()
334
+      }
335
+    },
336
+
337
+    // 查询
338
+    handleSearch() {
339
+      this.currentPage = 1
340
+      this.getTableData()
341
+    },
342
+
343
+    // 重置查询条件
344
+    handleReset() {
345
+      this.query = {
346
+        uperCustomerId: '',
347
+        customerId: ''
348
+      }
349
+      this.currentPage = 1
350
+      this.getTableData()
351
+    },
352
+
353
+    // 新增按钮
354
+    handleAdd() {
355
+      this.form = {
356
+        id: '',
357
+        uperCustomerId: '',
358
+        customerId: '',
359
+        subStr: '增加', // 新增时默认为增加
360
+        weight: '',
361
+        ordNo: '',
362
+        remark: '',
363
+        enableStatus: '0',
364
+        sumWeight: 0
365
+      }
366
+      this.dialogVisible = true
367
+      // 清除表单验证
368
+      if (this.$refs.ruleFormRef) {
369
+        this.$refs.ruleFormRef.clearValidate()
370
+      }
371
+    },
372
+
373
+    // 编辑按钮
374
+    handleEdit(row) {
375
+      this.form = {
376
+        id: row.id,
377
+        uperCustomerId: row.uperCustomerId,
378
+        customerId: row.customerId,
379
+        subStr: '增加', // 编辑时默认为增加
380
+        weight: '',
381
+        ordNo: '',
382
+        remark: '',
383
+        enableStatus: row.enableStatus,
384
+        sumWeight: row.sumWeight
385
+      }
386
+      this.dialogVisible = true
387
+      // 清除表单验证
388
+      if (this.$refs.ruleFormRef) {
389
+        this.$refs.ruleFormRef.clearValidate()
390
+      }
391
+    },
392
+
393
+    // 查看日志
394
+    handleLog(row) {
395
+      this.currentCargoRecord = row
396
+      this.logQuery = {
397
+        dateRange: [],
398
+        subStr: '',
399
+        changeFrom: ''
400
+      }
401
+      this.logCurrentPage = 1
402
+      this.getLogTableData()
403
+      this.logDialogVisible = true
404
+    },
405
+
406
+    // 日志查询
407
+    handleLogSearch() {
408
+      this.logCurrentPage = 1
409
+      this.getLogTableData()
410
+    },
411
+
412
+    // 保存
413
+    handleSave() {
414
+      this.$refs.ruleFormRef.validate((valid) => {
415
+        if (valid) {
416
+          // 使用transfer接口进行货权调整
417
+          const url = 'sto/Cargo/transfer'
418
+          const param = {
419
+            json: JSON.stringify(this.form)
420
+          }
421
+          axios.post(url, param).then(response => {
422
+            if (response.data.code == 0) {
423
+              this.$message({
424
+                message: '保存成功',
425
+                type: 'success',
426
+              })
427
+              this.dialogVisible = false
428
+              this.getTableData()
429
+            } else {
430
+              this.$message({
431
+                type: 'error',
432
+                message: '保存失败:' + response.data.msg
433
+              })
434
+            }
435
+          }).catch(error => {
436
+            this.$message({
437
+              type: 'error',
438
+              message: '请求失败:' + error
439
+            })
440
+          })
441
+        } else {
442
+          this.$message({
443
+            type: 'warning',
444
+            message: '请完善表单信息'
445
+          })
446
+          return false
447
+        }
448
+      })
449
+    },
450
+
451
+    // 取消保存
452
+    handleCancelSave() {
453
+      this.dialogVisible = false
454
+    },
455
+
456
+    // 切换启用状态
457
+    handleToggleEnableStatus(row) {
458
+      const newStatus = row.enableStatus === '1' ? '0' : '1'
459
+      const action = newStatus === '1' ? '启用' : '禁用'
460
+
461
+      this.$confirm(`确定要${action}此货权记录吗?`, '提示', {
462
+        type: 'warning'
463
+      }).then(() => {
464
+        this.updateEnableStatus(row.id, newStatus)
465
+      }).catch(() => {})
466
+    },
467
+
468
+    // 更新启用状态
469
+    updateEnableStatus(id, enableStatus) {
470
+      this.enableStatusLoading = true
471
+      const url = 'sto/Cargo/updateEnableStatus'
472
+      const param = {
473
+        id: id,
474
+        enableStatus: enableStatus
475
+      }
476
+
477
+      axios.post(url, param).then(response => {
478
+        if (response.data.code == 0) {
479
+          this.$message({
480
+            message: '操作成功',
481
+            type: 'success',
482
+          })
483
+          this.getTableData() // 刷新表格数据
484
+        } else {
485
+          this.$message({
486
+            type: 'error',
487
+            message: '操作失败:' + response.data.msg
488
+          })
489
+          // 操作失败,刷新表格以恢复正确的状态
490
+          this.getTableData()
491
+        }
492
+        this.enableStatusLoading = false
493
+      }).catch(error => {
494
+        this.enableStatusLoading = false
495
+        this.$message({
496
+          type: 'error',
497
+          message: '请求失败:' + error
498
+        })
499
+        // 请求失败,刷新表格以恢复正确的状态
500
+        this.getTableData()
501
+      })
502
+    },
503
+
504
+    // 开关状态改变事件
505
+    handleEnableStatusChange(row) {
506
+      this.updateEnableStatus(row.id, row.enableStatus)
507
+    },
508
+
509
+    // 分页大小改变
510
+    handleSizeChange(val) {
511
+      this.pageSize = val
512
+      this.getTableData()
513
+    },
514
+
515
+    // 当前页改变
516
+    handleCurrentChange(val) {
517
+      this.currentPage = val
518
+      this.getTableData()
519
+    },
520
+
521
+    // 日志分页大小改变
522
+    handleLogSizeChange(val) {
523
+      this.logPageSize = val
524
+      this.getLogTableData()
525
+    },
526
+
527
+    // 日志当前页改变
528
+    handleLogCurrentChange(val) {
529
+      this.logCurrentPage = val
530
+      this.getLogTableData()
531
+    },
532
+
533
+    // 格式化日期
534
+    formatDate(dateString) {
535
+      if (!dateString) return ''
536
+      const date = new Date(dateString)
537
+      return date.toLocaleString()
538
+    },
539
+
540
+    // 获取表格数据
541
+    getTableData() {
542
+      this.loading = true
543
+      const url = 'sto/Cargo/query'
544
+      const param = {
545
+        page: this.currentPage,
546
+        rows: this.pageSize,
547
+        uperCustomerId: this.query.uperCustomerId,
548
+        customerId: this.query.customerId
549
+      }
550
+      axios.get(url, param).then(response => {
551
+        if (response.data.code == 0) {
552
+          this.tableData = response.data.data.records || response.data.data.list
553
+          this.totalRows = response.data.data.total
554
+        } else {
555
+          this.$message.error('操作失败!' + response.data.msg)
556
+        }
557
+        this.loading = false
558
+      }).catch(error => {
559
+        this.loading = false
560
+        this.$message.error('请求失败:' + error)
561
+      })
562
+    },
563
+
564
+    // 获取日志表格数据
565
+    getLogTableData() {
566
+      this.logLoading = true
567
+      const url = 'sto/CargoChangeRecord/query'
568
+      const param = {
569
+        page: this.logCurrentPage,
570
+        rows: this.logPageSize,
571
+        uperCustomerId: this.currentCargoRecord ? this.currentCargoRecord.uperCustomerId : '',
572
+        customerId: this.currentCargoRecord ? this.currentCargoRecord.customerId : '',
573
+        startDate: this.logQuery.dateRange && this.logQuery.dateRange[0] ? this.logQuery.dateRange[0] : '',
574
+        endDate: this.logQuery.dateRange && this.logQuery.dateRange[1] ? this.logQuery.dateRange[1] : '',
575
+        subStr: this.logQuery.subStr,
576
+        changeFrom: this.logQuery.changeFrom
577
+      }
578
+      axios.get(url, param).then(response => {
579
+        if (response.data.code == 0) {
580
+          this.logTableData = response.data.data.records || response.data.data.list
581
+          this.logTotalRows = response.data.data.total
582
+        } else {
583
+          this.$message.error('操作失败!' + response.data.msg)
584
+        }
585
+        this.logLoading = false
586
+      }).catch(error => {
587
+        this.logLoading = false
588
+        this.$message.error('请求失败:' + error)
589
+      })
590
+    },
591
+
592
+    // 获取所有客户
593
+    getAllCustomer() {
594
+      const url = 'sto/Customer/query'
595
+      const param = {
596
+        page: 1,
597
+        rows: 1000
598
+      }
599
+      axios.get(url, param).then(response => {
600
+        if (response.data.code == 0) {
601
+          this.optionsCustomer = response.data.data.records || response.data.data.list
602
+        }
603
+      }).catch(error => {
604
+        this.$message.error('获取客户列表失败:' + error)
605
+      })
606
+    }
607
+  }
608
+}
609
+</script>
610
+
611
+<style scoped>
612
+::v-deep .el-dialog__body {
613
+  background-color: #F2F6FC;
614
+}
615
+</style>

+ 290
- 296
src/views/sto/main/material.vue 查看文件

@@ -1,349 +1,343 @@
1 1
 <template>
2 2
   <div>
3 3
     <el-card :body-style="cardBodyStyle">
4
-      <el-form :inline="true" label-position="right" label-width="100px">
5
-        <el-form-item label="" class="no-show-error-message">
6
-          <el-input v-model="queryParams.material" size="small" placeholder="请输入物料名称或编码" style="width:300px;float: left;margin-right: 10px;"></el-input>
7
-          <el-input v-model="queryParams.standard" size="small" placeholder="请输入钢种" style="width:300px;float: left;margin-right: 10px;"></el-input>
8
-          <el-button v-prevent-re-click type="primary" plain @click="handleSearch">查询</el-button>
9
-          <el-button v-prevent-re-click type="primary" @click="handleAdd">新增</el-button>
10
-        </el-form-item>
4
+      <el-form :model="query" label-width="auto" label-position="right">
5
+        <el-row :gutter="10">
6
+          <el-col :span="5">
7
+            <el-form-item label="物料名称/编码" style="margin-bottom: 0px;">
8
+              <el-input v-model="query.material" clearable placeholder="请输入物料名称或编码" style="width:100%;"></el-input>
9
+            </el-form-item>
10
+          </el-col>
11
+          <el-col :span="5">
12
+            <el-form-item label="钢种" style="margin-bottom: 0px;">
13
+              <el-input v-model="query.standard" clearable placeholder="请输入钢种" style="width:100%;"></el-input>
14
+            </el-form-item>
15
+          </el-col>
16
+          <el-col :span="4">
17
+            <el-form-item label="" style="margin-bottom: 0px; margin-top: 5px;">
18
+              <el-button type="primary" @click="handleSearch">查询</el-button>
19
+              <el-button type="success" @click="insertDialog">新增</el-button>
20
+            </el-form-item>
21
+          </el-col>
22
+        </el-row>
11 23
       </el-form>
12 24
     </el-card>
13 25
 
14 26
     <el-card :body-style="cardBodyStyle">
15
-      <el-table :data="tableData" border v-loading="loading" style="width: 100%">
16
-        <el-table-column prop="materialName" label="物料名称" width="150" header-align="center" align="center" show-overflow-tooltip>
17
-        </el-table-column>
18
-        <el-table-column prop="materialCode" label="物料编码" width="120" header-align="center" align="center" show-overflow-tooltip>
19
-        </el-table-column>
20
-        <el-table-column prop="materialStandard" label="钢种" width="150" header-align="center" align="center" show-overflow-tooltip>
21
-        </el-table-column>
22
-        <el-table-column prop="materialModel" label="尺寸" width="120" header-align="center" align="center" show-overflow-tooltip>
23
-        </el-table-column>
24
-        <el-table-column prop="materialAttr1" label="属性1" width="120" header-align="center" align="center" show-overflow-tooltip>
25
-        </el-table-column>
26
-        <el-table-column prop="materialAttr2" label="属性2" width="120" header-align="center" align="center" show-overflow-tooltip>
27
-        </el-table-column>
28
-        <el-table-column prop="materialAttr3" label="属性3" width="120" header-align="center" align="center" show-overflow-tooltip>
29
-        </el-table-column>
30
-        <el-table-column prop="materialAttr4" label="属性4" width="120" header-align="center" align="center" show-overflow-tooltip>
31
-        </el-table-column>
32
-        <el-table-column prop="materialAttr5" label="属性5" width="120" header-align="center" align="center" show-overflow-tooltip>
27
+      <el-table :data="tableData" border highlight-current-row @selection-change="handleSelectionChange" :height="height">
28
+        <el-table-column type="selection" fixed></el-table-column>
29
+        <el-table-column type="index" label="序号" align="center" width="60">
30
+          <template #default="scope">
31
+            <span>{{ scope.$index + (currentPage - 1) * pageSize + 1 }}</span>
32
+          </template>
33 33
         </el-table-column>
34
-        <el-table-column label="操作" width="200" header-align="center" align="center" fixed="right">
34
+        <el-table-column prop="materialName" label="物料名称" width="150" header-align="center" align="center" show-overflow-tooltip></el-table-column>
35
+        <el-table-column prop="materialCode" label="物料编码" width="120" header-align="center" align="center" show-overflow-tooltip></el-table-column>
36
+        <el-table-column prop="materialStandard" label="钢种" width="150" header-align="center" align="center" show-overflow-tooltip></el-table-column>
37
+        <el-table-column prop="materialModel" label="尺寸" width="120" header-align="center" align="center" show-overflow-tooltip></el-table-column>
38
+        <el-table-column prop="materialAttr1" label="属性1" width="120" header-align="center" align="center" show-overflow-tooltip></el-table-column>
39
+        <el-table-column prop="materialAttr2" label="属性2" width="120" header-align="center" align="center" show-overflow-tooltip></el-table-column>
40
+        <el-table-column prop="materialAttr3" label="属性3" width="120" header-align="center" align="center" show-overflow-tooltip></el-table-column>
41
+        <el-table-column prop="materialAttr4" label="属性4" width="120" header-align="center" align="center" show-overflow-tooltip></el-table-column>
42
+        <el-table-column prop="materialAttr5" label="属性5" width="120" header-align="center" align="center" show-overflow-tooltip></el-table-column>
43
+        <el-table-column label="操作" header-align="center" align="center" width="200px" fixed="right">
35 44
           <template #default="scope">
36
-            <el-button plain type="warning" size="mini" @click="handleEdit(scope.row)">编辑</el-button>
37
-            <el-button plain type="danger" size="mini" @click="handleDelete(scope.row)">删除</el-button>
45
+            <el-button plain type="warning" @click="handleEdit(scope.row)">编辑</el-button>
46
+            <el-button plain type="danger" @click="handleRemove(scope.row)">删除</el-button>
38 47
           </template>
39 48
         </el-table-column>
40 49
       </el-table>
50
+    </el-card>
41 51
 
42
-      <el-pagination
43
-          @size-change="handleSizeChange"
44
-          @current-change="handleCurrentChange"
45
-          :current-page="pagination.currentPage"
46
-          :page-sizes="pagination.pageSizes"
47
-          :page-size="pagination.pageSize"
48
-          layout="total, sizes, prev, pager, next, jumper"
49
-          :total="pagination.totalRows">
52
+    <el-card :body-style="cardBodyStyle">
53
+      <el-pagination :current-page="currentPage" :page-size="pageSize" :page-sizes="pageSizes" :total="totalRows"
54
+                     background layout="total, sizes, prev, pager, next, jumper"
55
+                     @size-change="handleSizeChange"
56
+                     @current-change="handleCurrentChange">
50 57
       </el-pagination>
51 58
     </el-card>
52 59
 
53 60
     <!-- 新增/编辑对话框 -->
54
-    <el-dialog
55
-        :close-on-click-modal="false"
56
-        :title="form.id ? '编辑物料' : '新增物料'"
57
-        v-model="dialogVisible"
58
-        width="600px">
59
-      <el-form :model="form" label-width="100px" :rules="rules" ref="formRef">
60
-        <el-form-item label="物料名称" prop="materialName">
61
-          <el-input v-model="form.materialName" style="width: 400px;" placeholder="请输入物料名称"></el-input>
62
-        </el-form-item>
63
-        <el-form-item label="物料编码" prop="materialCode">
64
-          <el-input v-model="form.materialCode" style="width: 400px;" placeholder="请输入物料编码"></el-input>
65
-        </el-form-item>
66
-        <el-form-item label="钢种" prop="materialStandard">
67
-          <el-input v-model="form.materialStandard" style="width: 400px;" placeholder="请输入钢种"></el-input>
68
-        </el-form-item>
69
-        <el-form-item label="尺寸">
70
-          <el-input v-model="form.materialModel" style="width: 400px;" placeholder="请输入尺寸"></el-input>
71
-        </el-form-item>
72
-        <el-form-item label="属性1">
73
-          <el-input v-model="form.materialAttr1" style="width: 400px;" placeholder="请输入属性1"></el-input>
74
-        </el-form-item>
75
-        <el-form-item label="属性2">
76
-          <el-input v-model="form.materialAttr2" style="width: 400px;" placeholder="请输入属性2"></el-input>
77
-        </el-form-item>
78
-        <el-form-item label="属性3">
79
-          <el-input v-model="form.materialAttr3" style="width: 400px;" placeholder="请输入属性3"></el-input>
80
-        </el-form-item>
81
-        <el-form-item label="属性4">
82
-          <el-input v-model="form.materialAttr4" style="width: 400px;" placeholder="请输入属性4"></el-input>
83
-        </el-form-item>
84
-        <el-form-item label="属性5">
85
-          <el-input v-model="form.materialAttr5" style="width: 400px;" placeholder="请输入属性5"></el-input>
86
-        </el-form-item>
87
-      </el-form>
61
+    <el-dialog class="diaClass" :close-on-click-modal="false" draggable :title="dialogTitle" v-model="dialogVisible" width="50%" top="5vh">
62
+      <el-card>
63
+        <el-form :model="form" label-width="120px" label-position="right" inline ref="ruleFormRef" :rules="rules">
64
+          <el-row>
65
+            <el-col :span="12">
66
+              <el-form-item label="物料名称" prop="materialName">
67
+                <el-input v-model="form.materialName" maxlength="100" placeholder="请输入物料名称"></el-input>
68
+              </el-form-item>
69
+            </el-col>
70
+            <el-col :span="12">
71
+              <el-form-item label="物料编码" prop="materialCode">
72
+                <el-input v-model="form.materialCode" maxlength="100" placeholder="请输入物料编码"></el-input>
73
+              </el-form-item>
74
+            </el-col>
75
+            <el-col :span="12">
76
+              <el-form-item label="钢种" prop="materialStandard">
77
+                <el-input v-model="form.materialStandard" maxlength="50" placeholder="请输入钢种"></el-input>
78
+              </el-form-item>
79
+            </el-col>
80
+            <el-col :span="12">
81
+              <el-form-item label="尺寸">
82
+                <el-input v-model="form.materialModel" maxlength="50" placeholder="请输入尺寸"></el-input>
83
+              </el-form-item>
84
+            </el-col>
85
+            <el-col :span="12">
86
+              <el-form-item label="属性1">
87
+                <el-input v-model="form.materialAttr1" maxlength="50" placeholder="请输入属性1"></el-input>
88
+              </el-form-item>
89
+            </el-col>
90
+            <el-col :span="12">
91
+              <el-form-item label="属性2">
92
+                <el-input v-model="form.materialAttr2" maxlength="50" placeholder="请输入属性2"></el-input>
93
+              </el-form-item>
94
+            </el-col>
95
+            <el-col :span="12">
96
+              <el-form-item label="属性3">
97
+                <el-input v-model="form.materialAttr3" maxlength="50" placeholder="请输入属性3"></el-input>
98
+              </el-form-item>
99
+            </el-col>
100
+            <el-col :span="12">
101
+              <el-form-item label="属性4">
102
+                <el-input v-model="form.materialAttr4" maxlength="50" placeholder="请输入属性4"></el-input>
103
+              </el-form-item>
104
+            </el-col>
105
+            <el-col :span="12">
106
+              <el-form-item label="属性5">
107
+                <el-input v-model="form.materialAttr5" maxlength="50" placeholder="请输入属性5"></el-input>
108
+              </el-form-item>
109
+            </el-col>
110
+          </el-row>
111
+        </el-form>
112
+      </el-card>
88 113
       <template #footer>
89 114
         <div class="dialog-footer">
90
-          <el-button type="success" @click="handleSave">保存</el-button>
91
-          <el-button type="danger" @click="handleCancelSave">取消</el-button>
115
+          <el-button type="success" plain @click="handleSave(ruleFormRef)">保存</el-button>
116
+          <el-button type="danger" plain @click="handleCancelSave">取消</el-button>
92 117
         </div>
93 118
       </template>
94 119
     </el-dialog>
95 120
   </div>
96 121
 </template>
97 122
 
98
-<script>
99
-import axios from '@/axios'
100
-export default {
101
-  name: 'MaterialManagement',
102
-  data() {
103
-    return {
104
-      // 表格数据
105
-      tableData: [],
106
-      loading: false,
107
-
108
-      // 分页参数
109
-      pagination: {
110
-        currentPage: 1,
111
-        totalRows: 0,
112
-        pageSizes: [50, 100, 200, 500],
113
-        pageSize: 50
114
-      },
123
+<script setup>
124
+import {getCurrentInstance, onMounted, reactive, ref} from 'vue'
125
+import tools from '@/tools'
126
+import { ElMessage, ElMessageBox } from 'element-plus'
115 127
 
116
-      // 查询条件
117
-      queryParams: {
118
-        material: '',
119
-        standard: ''
120
-      },
128
+const {
129
+  proxy
130
+} = getCurrentInstance()
121 131
 
122
-      // 对话框控制
123
-      dialogVisible: false,
132
+const cardBodyStyle = ref(tools.style.card)
133
+const inputStyle = ref(tools.style.input)
124 134
 
125
-      // 表单数据
126
-      form: {
127
-        id: '',
128
-        materialName: '',
129
-        materialCode: '',
130
-        materialStandard: '',
131
-        materialModel: '',
132
-        materialAttr1: '',
133
-        materialAttr2: '',
134
-        materialAttr3: '',
135
-        materialAttr4: '',
136
-        materialAttr5: ''
137
-      },
135
+/**
136
+ * 查询相关
137
+ */
138
+const query = ref({
139
+  material: '',
140
+  standard: ''
141
+})
138 142
 
139
-      // 表单验证规则
140
-      rules: {
141
-        materialName: [
142
-          { required: true, message: '物料名称不能为空', trigger: 'blur' }
143
-        ],
144
-        materialCode: [
145
-          { required: true, message: '物料编码不能为空', trigger: 'blur' }
146
-        ],
147
-        materialStandard: [
148
-          { required: true, message: '钢种不能为空', trigger: 'blur' }
149
-        ]
150
-      },
143
+const form = ref({
144
+  id: '',
145
+  materialName: '',
146
+  materialCode: '',
147
+  materialStandard: '',
148
+  materialModel: '',
149
+  materialAttr1: '',
150
+  materialAttr2: '',
151
+  materialAttr3: '',
152
+  materialAttr4: '',
153
+  materialAttr5: ''
154
+})
151 155
 
152
-      // 样式
153
-      cardBodyStyle: {
154
-        padding: '10px'
155
-      }
156
-    }
157
-  },
156
+const tableData = ref([])
158 157
 
159
-  // 界面渲染完毕调用 - 初始化表格数据
160
-  mounted() {
161
-    this.getTableData()
162
-  },
163
-
164
-  methods: {
165
-    /**
166
-     * 获取表格数据
167
-     */
168
-    getTableData() {
169
-      this.loading = true
170
-      const url = 'sto/Material/query'
171
-      const params = {
172
-        page: this.pagination.currentPage,
173
-        rows: this.pagination.pageSize,
174
-        material: this.queryParams.material,
175
-        standard: this.queryParams.standard
176
-      }
177
-
178
-      axios.get(url, { params })
179
-          .then(response => {
180
-            this.loading = false
181
-            if (response.data.code === '0') {
182
-              this.tableData = response.data.data.records
183
-              this.pagination.totalRows = response.data.data.total
184
-            } else {
185
-              this.$message.error('查询失败!' + response.data.msg)
186
-            }
187
-          })
188
-          .catch(error => {
189
-            this.loading = false
190
-            this.$message.error('查询失败!' + error.message)
191
-          })
192
-    },
158
+/**
159
+ * 分页相关
160
+ */
161
+const currentPage = ref(1)
162
+const totalRows = ref(0)
163
+const pageSizes = ref([10, 20, 30, 40])
164
+const pageSize = ref(10)
193 165
 
194
-    /**
195
-     * 修改每页条数
196
-     */
197
-    handleSizeChange(val) {
198
-      this.pagination.pageSize = val
199
-      this.pagination.currentPage = 1
200
-      this.getTableData()
201
-    },
166
+/**
167
+ * 对话框相关
168
+ */
169
+const dialogVisible = ref(false)
170
+const dialogTitle = ref('新增物料')
171
+const ruleFormRef = ref()
202 172
 
203
-    /**
204
-     * 修改当前页
205
-     */
206
-    handleCurrentChange(val) {
207
-      this.pagination.currentPage = val
208
-      this.getTableData()
209
-    },
173
+const rules = reactive({
174
+  materialName: [
175
+    {required: true, message: '物料名称不能为空', trigger: 'blur'},
176
+  ],
177
+  materialCode: [
178
+    {required: true, message: '物料编码不能为空', trigger: 'blur'},
179
+  ],
180
+  materialStandard: [
181
+    {required: true, message: '钢种不能为空', trigger: 'blur'},
182
+  ]
183
+})
210 184
 
211
-    /**
212
-     * 查询
213
-     */
214
-    handleSearch() {
215
-      this.pagination.currentPage = 1
216
-      this.getTableData()
217
-    },
185
+/**
186
+ * 方法定义
187
+ */
188
+const handleSearch = () => {
189
+  currentPage.value = 1
190
+  getTableData()
191
+}
218 192
 
219
-    /**
220
-     * 新增
221
-     */
222
-    handleAdd() {
223
-      this.dialogVisible = true
224
-      this.resetForm()
225
-    },
193
+const handleSizeChange = (val) => {
194
+  pageSize.value = val
195
+  getTableData()
196
+}
226 197
 
227
-    /**
228
-     * 编辑
229
-     */
230
-    handleEdit(row) {
231
-      this.dialogVisible = true
232
-      this.$nextTick(() => {
233
-        this.form = { ...row }
234
-      })
235
-    },
198
+const handleCurrentChange = (val) => {
199
+  currentPage.value = val
200
+  getTableData()
201
+}
236 202
 
237
-    /**
238
-     * 保存(新增和编辑)
239
-     */
240
-    handleSave() {
241
-      this.$refs.formRef.validate((valid) => {
242
-        if (!valid) {
243
-          this.$message.warning('请完善表单信息')
244
-          return
245
-        }
203
+const insertDialog = () => {
204
+  form.value = {
205
+    id: '',
206
+    materialName: '',
207
+    materialCode: '',
208
+    materialStandard: '',
209
+    materialModel: '',
210
+    materialAttr1: '',
211
+    materialAttr2: '',
212
+    materialAttr3: '',
213
+    materialAttr4: '',
214
+    materialAttr5: ''
215
+  }
216
+  dialogTitle.value = '新增物料'
217
+  dialogVisible.value = true
218
+}
246 219
 
247
-        const url = 'sto/Material/save'
248
-        const params = {
249
-          json: JSON.stringify(this.form)
220
+const handleSave = (ruleFormRef) => {
221
+  if (!ruleFormRef) return
222
+  ruleFormRef.validate((valid) => {
223
+    if (valid) {
224
+      const url = 'sto/Material/save'
225
+      const param = {
226
+        json: JSON.stringify(form.value)
227
+      }
228
+      proxy.$axios.post(url, param).then(response => {
229
+        if (response.data.code == 0) {
230
+          ElMessage({
231
+            message: '保存成功',
232
+            type: 'success',
233
+          })
234
+          dialogVisible.value = false
235
+          handleSearch()
236
+        } else {
237
+          ElMessage({
238
+            type: 'error',
239
+            message: '操作失败: ' + response.data.msg
240
+          })
250 241
         }
251
-
252
-        axios.post(url, params)
253
-            .then(response => {
254
-              if (response.data.code === '0') {
255
-                this.$message.success(this.form.id ? '更新成功' : '新增成功')
256
-                this.dialogVisible = false
257
-                this.getTableData()
258
-              } else {
259
-                this.$message.error('操作失败!' + response.data.msg)
260
-              }
261
-            })
262
-            .catch(error => {
263
-              this.$message.error('操作失败!' + error.message)
264
-            })
265 242
       })
266
-    },
243
+    }
244
+  })
245
+}
267 246
 
268
-    /**
269
-     * 取消保存
270
-     */
271
-    handleCancelSave() {
272
-      this.dialogVisible = false
273
-      this.resetForm()
274
-    },
247
+const handleCancelSave = () => {
248
+  dialogVisible.value = false
249
+}
275 250
 
276
-    /**
277
-     * 删除
278
-     */
279
-    handleDelete(row) {
280
-      this.$confirm(
281
-          `确定删除物料 "${row.materialName}" 吗?`,
282
-          '提示',
283
-          {
284
-            confirmButtonText: '确认',
285
-            cancelButtonText: '取消',
286
-            type: 'warning',
287
-            draggable: true,
288
-          }
289
-      )
290
-          .then(() => {
291
-            const url = 'sto/Material/remove'
292
-            const params = {
293
-              id: row.id,
294
-            }
251
+const handleEdit = (row) => {
252
+  const url = 'sto/Material/queryByPK'
253
+  const param = {
254
+    id: row.id
255
+  }
256
+  proxy.$axios.get(url, param).then(response => {
257
+    if (response.data.code == '0') {
258
+      form.value = response.data.data
259
+      dialogTitle.value = '编辑物料'
260
+      dialogVisible.value = true
261
+    } else {
262
+      ElMessage.error('操作失败!' + response.data.msg)
263
+    }
264
+  })
265
+}
295 266
 
296
-            axios.post(url, params)
297
-                .then(response => {
298
-                  if (response.data.code === '0') {
299
-                    this.$message.success('删除成功!')
300
-                    this.getTableData()
301
-                  } else {
302
-                    this.$message.error('删除失败!' + response.data.msg)
303
-                  }
304
-                })
305
-                .catch(error => {
306
-                  this.$message.error('删除失败!' + error.message)
307
-                })
308
-          })
309
-          .catch(() => {
310
-            this.$message.info('已取消删除')
311
-          })
312
-    },
267
+const handleRemove = (row) => {
268
+  ElMessageBox.confirm(
269
+      `确定删除物料 "${row.materialName}" 吗?`,
270
+      '提示', {
271
+        confirmButtonText: '确认',
272
+        cancelButtonText: '取消',
273
+        type: 'warning',
274
+        draggable: true,
275
+      }
276
+  ).then(() => {
277
+    const url = 'sto/Material/remove'
278
+    const param = {
279
+      id: row.id
280
+    }
281
+    proxy.$axios.get(url, param).then(response => {
282
+      if (response.data.code == '0') {
283
+        ElMessage({
284
+          type: 'success',
285
+          message: '删除成功!',
286
+        })
287
+        getTableData()
288
+      } else {
289
+        ElMessage.error('操作失败!' + response.data.msg)
290
+      }
291
+    })
292
+  }).catch(() => {
293
+    ElMessage({
294
+      type: 'info',
295
+      message: '已取消',
296
+    })
297
+  })
298
+}
313 299
 
300
+const handleSelectionChange = (val) => {
301
+  multipleSelection.value = val
302
+}
314 303
 
315
-    /**
316
-     * 重置表单
317
-     */
318
-    resetForm() {
319
-      this.$nextTick(() => {
320
-        if (this.$refs.formRef) {
321
-          this.$refs.formRef.resetFields()
322
-        }
323
-        this.form = {
324
-          id: '',
325
-          materialName: '',
326
-          materialCode: '',
327
-          materialStandard: '',
328
-          materialModel: '',
329
-          materialAttr1: '',
330
-          materialAttr2: '',
331
-          materialAttr3: '',
332
-          materialAttr4: '',
333
-          materialAttr5: ''
334
-        }
335
-      })
336
-    }
304
+const getTableData = () => {
305
+  const url = 'sto/Material/query'
306
+  const param = {
307
+    page: currentPage.value,
308
+    rows: pageSize.value,
309
+    material: query.value.material,
310
+    standard: query.value.standard
337 311
   }
312
+  proxy.$axios.get(url, param).then(response => {
313
+    if (response.data.code == '0') {
314
+      tableData.value = response.data.data.records
315
+      totalRows.value = response.data.data.total
316
+    } else {
317
+      ElMessage.error('操作失败!' + response.data.msg)
318
+    }
319
+  })
320
+}
321
+
322
+const height = ref(600)
323
+const updateViewportHeight = () => {
324
+  height.value = window.innerHeight * 0.65
338 325
 }
326
+
327
+const multipleSelection = ref([])
328
+
329
+onMounted(() => {
330
+  getTableData()
331
+  updateViewportHeight()
332
+  window.addEventListener('resize', updateViewportHeight)
333
+})
339 334
 </script>
340 335
 
341 336
 <style scoped>
342
-.no-show-error-message {
343
-  margin-bottom: 0;
337
+::v-deep .diaClass .el-form-item {
338
+  width: 100%
344 339
 }
345
-
346
-.dialog-footer {
347
-  text-align: center;
340
+::v-deep .el-dialog__body {
341
+  background-color: #F2F6FC;
348 342
 }
349 343
 </style>

+ 352
- 0
src/views/sto/main/price.vue 查看文件

@@ -0,0 +1,352 @@
1
+<template>
2
+  <div>
3
+    <el-card :body-style="cardBodyStyle">
4
+      <el-form :model="query" label-width="auto" label-position="right">
5
+        <el-row :gutter="10">
6
+          <el-col :span="5">
7
+            <el-form-item label="客户名称" style="margin-bottom: 0px;">
8
+              <el-select v-model="query.customerName" filterable placeholder="请选择客户" clearable style="width:100%;" size="small">
9
+                <el-option v-for="item in optionsCust" :key="item.id" :label="item.customerNm" :value="item.customerNm" />
10
+              </el-select>
11
+            </el-form-item>
12
+          </el-col>
13
+          <el-col :span="4">
14
+            <el-form-item label="" style="margin-bottom: 0px; margin-top: 5px;">
15
+              <el-button type="primary" @click="handleSearch">查询</el-button>
16
+              <el-button type="success" @click="handleAdd">新增</el-button>
17
+            </el-form-item>
18
+          </el-col>
19
+        </el-row>
20
+      </el-form>
21
+    </el-card>
22
+
23
+    <el-card :body-style="cardBodyStyle">
24
+      <el-table :data="tableData" border highlight-current-row v-loading="loading">
25
+        <el-table-column type="index" label="序号" align="center" width="60">
26
+          <template #default="scope">
27
+            <span>{{ scope.$index + (currentPage - 1) * pageSize + 1 }}</span>
28
+          </template>
29
+        </el-table-column>
30
+        <el-table-column prop="customer.customerNm" label="客户名称" width="180" show-overflow-tooltip />
31
+        <el-table-column prop="materialName" label="品名简称" width="180" show-overflow-tooltip />
32
+        <el-table-column prop="keepDay" label="免堆时间(天)" width="150" show-overflow-tooltip />
33
+        <el-table-column prop="ordPrice" label="免堆期价格(元/吨)" width="150" show-overflow-tooltip align="right">
34
+          <template #default="scope">
35
+            <span>{{ scope.row.ordPrice ? scope.row.ordPrice.toFixed(2) : '0.00' }}</span>
36
+          </template>
37
+        </el-table-column>
38
+        <el-table-column prop="outOrdPrice" label="超期价格(元/天/吨)" width="150" show-overflow-tooltip align="right">
39
+          <template #default="scope">
40
+            <span>{{ scope.row.outOrdPrice ? scope.row.outOrdPrice.toFixed(2) : '0.00' }}</span>
41
+          </template>
42
+        </el-table-column>
43
+        <el-table-column prop="payWay" label="支付方式" width="120" show-overflow-tooltip />
44
+        <el-table-column prop="addName" label="添加人" width="120" show-overflow-tooltip />
45
+        <el-table-column prop="addTime" label="添加时间" width="180" show-overflow-tooltip>
46
+          <template #default="scope">
47
+            <span>{{ formatDate(scope.row.addTime) }}</span>
48
+          </template>
49
+        </el-table-column>
50
+        <el-table-column label="操作" width="200" fixed="right">
51
+          <template #default="scope">
52
+            <el-button plain type="warning" size="mini" @click="handleEdit(scope.row)">编辑</el-button>
53
+            <el-button plain type="danger" size="mini" @click="handleDelete(scope.row)">删除</el-button>
54
+          </template>
55
+        </el-table-column>
56
+      </el-table>
57
+    </el-card>
58
+
59
+    <el-card :body-style="cardBodyStyle">
60
+      <el-pagination :current-page="currentPage" :page-size="pageSize" :page-sizes="pageSizes" :total="totalRows"
61
+                     background layout="total, sizes, prev, pager, next, jumper"
62
+                     @size-change="handleSizeChange"
63
+                     @current-change="handleCurrentChange" />
64
+    </el-card>
65
+
66
+    <!-- 新增/编辑对话框 -->
67
+    <el-dialog :title="dialogTitle" v-model="dialogVisible" width="500px" :close-on-click-modal="false">
68
+      <el-form :model="form" label-width="120px" label-position="right" :rules="rules" ref="ruleFormRef">
69
+        <el-form-item label="客户名称" prop="customerId">
70
+          <el-select v-model="form.customerId" filterable placeholder="请选择客户" clearable style="width: 100%;">
71
+            <el-option v-for="item in optionsCust" :key="item.id" :label="item.customerNm" :value="item.id" />
72
+          </el-select>
73
+        </el-form-item>
74
+        <el-form-item label="品名" prop="materialName">
75
+          <el-input v-model="form.materialName" placeholder="请输入品名" style="width: 100%;" />
76
+        </el-form-item>
77
+        <el-form-item label="免堆时间" prop="keepDay">
78
+          <el-input v-model="form.keepDay" type="number" placeholder="请输入免堆时间" style="width: 100%;">
79
+            <template slot="append">天</template>
80
+          </el-input>
81
+        </el-form-item>
82
+        <el-form-item label="免堆期单价" prop="ordPrice">
83
+          <el-input v-model="form.ordPrice" type="number" placeholder="请输入免堆期单价" style="width: 100%;">
84
+            <template slot="append">元/吨</template>
85
+          </el-input>
86
+        </el-form-item>
87
+        <el-form-item label="超期单价" prop="outOrdPrice">
88
+          <el-input v-model="form.outOrdPrice" type="number" placeholder="请输入超期单价" style="width: 100%;">
89
+            <template slot="append">元/天/吨</template>
90
+          </el-input>
91
+        </el-form-item>
92
+        <el-form-item label="支付方式" prop="payWay">
93
+          <el-radio-group v-model="form.payWay">
94
+            <el-radio label="月结">月结</el-radio>
95
+            <el-radio label="现金">现金</el-radio>
96
+          </el-radio-group>
97
+        </el-form-item>
98
+      </el-form>
99
+      <template #footer>
100
+        <div class="dialog-footer">
101
+          <el-button type="success" plain @click="handleSave">保存</el-button>
102
+          <el-button type="danger" plain @click="handleCancelSave">取消</el-button>
103
+        </div>
104
+      </template>
105
+    </el-dialog>
106
+  </div>
107
+</template>
108
+
109
+<script>
110
+import axios from '@/axios'
111
+
112
+export default {
113
+  data() {
114
+    return {
115
+      cardBodyStyle: { padding: '10px' },
116
+      // 查询条件
117
+      query: {
118
+        customerName: '',
119
+      },
120
+      // 表格数据
121
+      tableData: [],
122
+      loading: false,
123
+      // 对话框控制
124
+      dialogVisible: false,
125
+      dialogTitle: '新增价格',
126
+      // 客户选项
127
+      optionsCust: [],
128
+      // 表单数据
129
+      form: {
130
+        id: '',
131
+        customerId: '',
132
+        materialName: '',
133
+        keepDay: '',
134
+        ordPrice: '',
135
+        outOrdPrice: '',
136
+        payWay: '月结'
137
+      },
138
+      // 分页相关
139
+      currentPage: 1,
140
+      totalRows: 0,
141
+      pageSizes: [10, 20, 50, 100],
142
+      pageSize: 10,
143
+      // 表单验证规则
144
+      rules: {
145
+        customerId: [
146
+          { required: true, message: '请选择客户', trigger: 'change' }
147
+        ],
148
+        materialName: [
149
+          { required: true, message: '请输入品名', trigger: 'blur' }
150
+        ],
151
+        keepDay: [
152
+          { required: true, message: '请输入免堆时间', trigger: 'blur' }
153
+        ],
154
+        ordPrice: [
155
+          { required: true, message: '请输入免堆期单价', trigger: 'blur' }
156
+        ],
157
+        outOrdPrice: [
158
+          { required: true, message: '请输入超期单价', trigger: 'blur' }
159
+        ],
160
+        payWay: [
161
+          { required: true, message: '请选择支付方式', trigger: 'change' }
162
+        ]
163
+      }
164
+    }
165
+  },
166
+  mounted() {
167
+    this.getTableData()
168
+    this.getAllCustomer()
169
+  },
170
+  methods: {
171
+    // 查询
172
+    handleSearch() {
173
+      this.currentPage = 1
174
+      this.getTableData()
175
+    },
176
+
177
+    // 新增按钮
178
+    handleAdd() {
179
+      this.dialogTitle = '新增价格'
180
+      this.form = {
181
+        id: '',
182
+        customerId: '',
183
+        materialName: '',
184
+        keepDay: '',
185
+        ordPrice: '',
186
+        outOrdPrice: '',
187
+        payWay: '月结'
188
+      }
189
+      this.dialogVisible = true
190
+      // 清除表单验证
191
+      if (this.$refs.ruleFormRef) {
192
+        this.$refs.ruleFormRef.clearValidate()
193
+      }
194
+    },
195
+
196
+    // 编辑按钮
197
+    handleEdit(row) {
198
+      this.dialogTitle = '编辑价格'
199
+      this.form = {
200
+        id: row.id,
201
+        customerId: row.customerId,
202
+        materialName: row.materialName,
203
+        keepDay: row.keepDay,
204
+        ordPrice: row.ordPrice,
205
+        outOrdPrice: row.outOrdPrice,
206
+        payWay: row.payWay || '月结'
207
+      }
208
+      this.dialogVisible = true
209
+      // 清除表单验证
210
+      if (this.$refs.ruleFormRef) {
211
+        this.$refs.ruleFormRef.clearValidate()
212
+      }
213
+    },
214
+
215
+    // 保存
216
+    handleSave() {
217
+      this.$refs.ruleFormRef.validate((valid) => {
218
+        if (valid) {
219
+          const url = 'sto/Price/save'
220
+          const param = {
221
+            json: JSON.stringify(this.form)
222
+          }
223
+          axios.post(url, param).then(response => {
224
+            if (response.data.code == 0) {
225
+              this.$message({
226
+                message: '保存成功',
227
+                type: 'success',
228
+              })
229
+              this.dialogVisible = false
230
+              this.getTableData()
231
+            } else {
232
+              this.$message({
233
+                type: 'error',
234
+                message: '保存失败:' + response.data.msg
235
+              })
236
+            }
237
+          }).catch(error => {
238
+            this.$message({
239
+              type: 'error',
240
+              message: '请求失败:' + error
241
+            })
242
+          })
243
+        } else {
244
+          this.$message({
245
+            type: 'warning',
246
+            message: '请完善表单信息'
247
+          })
248
+          return false
249
+        }
250
+      })
251
+    },
252
+
253
+    // 取消保存
254
+    handleCancelSave() {
255
+      this.dialogVisible = false
256
+    },
257
+
258
+    // 删除
259
+    handleDelete(row) {
260
+      this.$confirm('确定删除本条记录?', '提示', {
261
+        confirmButtonText: '确认',
262
+        cancelButtonText: '取消',
263
+        type: 'warning',
264
+        draggable: true,
265
+      }).then(() => {
266
+        const url = 'sto/Price/remove'
267
+        const param = { id: row.id }
268
+        axios.post(url, param).then(response => {
269
+          if (response.data.code == 0) {
270
+            this.$message({
271
+              type: 'success',
272
+              message: '删除成功!',
273
+            })
274
+            this.getTableData()
275
+          } else {
276
+            this.$message.error('操作失败!' + response.data.msg)
277
+          }
278
+        })
279
+      }).catch(() => {
280
+        this.$message({
281
+          type: 'info',
282
+          message: '已取消',
283
+        })
284
+      })
285
+    },
286
+
287
+    // 分页大小改变
288
+    handleSizeChange(val) {
289
+      this.pageSize = val
290
+      this.getTableData()
291
+    },
292
+
293
+    // 当前页改变
294
+    handleCurrentChange(val) {
295
+      this.currentPage = val
296
+      this.getTableData()
297
+    },
298
+
299
+    // 格式化日期
300
+    formatDate(dateString) {
301
+      if (!dateString) return ''
302
+      const date = new Date(dateString)
303
+      return date.toLocaleString()
304
+    },
305
+
306
+    // 获取表格数据
307
+    getTableData() {
308
+      this.loading = true
309
+      const url = 'sto/Price/query'
310
+      const param = {
311
+        page: this.currentPage,
312
+        rows: this.pageSize,
313
+        customerName: this.query.customerName
314
+      }
315
+      axios.get(url, param).then(response => {
316
+        if (response.data.code == 0) {
317
+          this.tableData = response.data.data.records || response.data.data.list
318
+          this.totalRows = response.data.data.total
319
+        } else {
320
+          this.$message.error('操作失败!' + response.data.msg)
321
+        }
322
+        this.loading = false
323
+      }).catch(error => {
324
+        this.loading = false
325
+        this.$message.error('请求失败:' + error)
326
+      })
327
+    },
328
+
329
+    // 获取所有客户
330
+    getAllCustomer() {
331
+      const url = 'sto/Customer/query'
332
+      const param = {
333
+        page: 1,
334
+        rows: 1000
335
+      }
336
+      axios.get(url, param).then(response => {
337
+        if (response.data.code == 0) {
338
+          this.optionsCust = response.data.data.records || response.data.data.list
339
+        }
340
+      }).catch(error => {
341
+        this.$message.error('获取客户列表失败:' + error)
342
+      })
343
+    }
344
+  }
345
+}
346
+</script>
347
+
348
+<style scoped>
349
+::v-deep .el-dialog__body {
350
+  background-color: #F2F6FC;
351
+}
352
+</style>

+ 495
- 0
src/views/sto/main/ware.vue 查看文件

@@ -0,0 +1,495 @@
1
+<template>
2
+  <div>
3
+    <el-card :body-style="cardBodyStyle">
4
+      <el-form :model="query" label-width="auto" label-position="right">
5
+        <el-row :gutter="10">
6
+          <el-col :span="5">
7
+            <el-form-item label="库房名称" style="margin-bottom: 0px;" >
8
+              <el-input v-model="query.wareNm" clearable placeholder="请输入库房名称" style="width:100%;"></el-input>
9
+            </el-form-item>
10
+          </el-col>
11
+          <el-col :span="4">
12
+            <el-form-item label="" style="margin-bottom: 0px; margin-top: 5px;">
13
+              <el-button type="primary" @click="handleSearch">查询</el-button>
14
+              <el-button type="success" @click="insertDialog">新增</el-button>
15
+            </el-form-item>
16
+          </el-col>
17
+        </el-row>
18
+      </el-form>
19
+    </el-card>
20
+    <ButtonBox @search="handleSearch" @add="insertDialog"></ButtonBox>
21
+    <el-card :body-style="cardBodyStyle">
22
+      <el-table :data="tableData" border highlight-current-row   @selection-change="handleSelectionChange" :height="height"  >
23
+        <el-table-column type="selection" fixed></el-table-column>
24
+        <el-table-column type="index" label="序号" align="center" width="60">
25
+          <template #default="scope">
26
+            <span>{{ scope.$index + (currentPage - 1) * pageSize + 1 }}</span>
27
+          </template>
28
+        </el-table-column>
29
+        <el-table-column v-if="true" prop="wareNm" label="库房名称" width="150" header-align="center"
30
+                         align="center" show-overflow-tooltip>
31
+        </el-table-column>
32
+        <el-table-column v-if="true" prop="wareCode" label="库房编码" width="150" header-align="center"
33
+                         align="center" show-overflow-tooltip>
34
+        </el-table-column>
35
+        <el-table-column v-if="true" prop="wareLength" label="库房长度" width="150" header-align="center"
36
+                         align="center" show-overflow-tooltip>
37
+        </el-table-column>
38
+        <el-table-column v-if="true" prop="wareWidth" label="库房宽度" width="150" header-align="center"
39
+                         align="center" show-overflow-tooltip>
40
+        </el-table-column>
41
+        <el-table-column label="操作" header-align="center" align="center" width="200px" fixed="right">
42
+          <template #default="scope">
43
+            <el-button plain type="warning" @click="handleEdit(scope.row)">编辑</el-button>
44
+            <el-button plain type="danger" @click="handleRemove(scope.row )">删除</el-button>
45
+          </template>
46
+        </el-table-column>
47
+      </el-table>
48
+    </el-card>
49
+    <el-card :body-style="cardBodyStyle">
50
+      <el-pagination :current-page="currentPage" :page-size="pageSize" :page-sizes="pageSizes" :total="totalRows"
51
+                     background="background" layout="total, sizes, prev, pager, next, jumper"
52
+                     @size-change="handleSizeChange"
53
+                     @current-change="handleCurrentChange">
54
+      </el-pagination>
55
+    </el-card>
56
+
57
+    <el-dialog class="diaClass"  :close-on-click-modal="false" draggable title="新增" v-model="dialogVisible" width="40%" top="5vh"
58
+               @open="openDialog">
59
+      <el-card  >
60
+      <el-form :model="form" label-width="120px" label-position="right" inline ref="ruleFormRef" :rules="rules">
61
+        <el-row>
62
+          <el-col :span="12">
63
+            <el-form-item label="库房名称" prop="wareNm">
64
+              <el-input v-model="form.wareNm" maxlength="100" placeholder="请输入库房名称"></el-input>
65
+            </el-form-item>
66
+          </el-col>
67
+          <el-col :span="12">
68
+            <el-form-item label="库房编码" prop="wareCode">
69
+              <el-input v-model="form.wareCode" maxlength="100"  placeholder="请输入库房编码"></el-input>
70
+            </el-form-item>
71
+          </el-col>
72
+          <el-col :span="12">
73
+            <el-form-item label="库房长度" prop="wareLength">
74
+              <el-input v-model="form.wareLength"  maxlength="50" placeholder="请输入库房长度"></el-input>
75
+            </el-form-item>
76
+          </el-col>
77
+          <el-col :span="12">
78
+            <el-form-item label="库房宽度" prop="wareWidth">
79
+              <el-input v-model="form.wareWidth" maxlength="50" placeholder="请输入库房宽度"></el-input>
80
+            </el-form-item>
81
+          </el-col>
82
+        </el-row>
83
+      </el-form>
84
+
85
+      </el-card>
86
+      <template #footer>
87
+        <div class="dialog-footer">
88
+          <el-button type="success" plain @click="handleInsert(ruleFormRef)">保存</el-button>
89
+          <el-button type="danger" plain @click="handleCancelSave">取消</el-button>
90
+        </div>
91
+      </template>
92
+    </el-dialog>
93
+    <el-dialog class="diaClass"  :close-on-click-modal="false" draggable title="编辑" v-model="dialogVisibleEdit" width="40%" top="5vh"
94
+               @open="openDialog">
95
+      <el-card :body-style="cardBodyStyle">
96
+      <el-form :model="form" label-width="120px" label-position="right" inline ref="ruleFormRef" :rules="rules">
97
+        <el-row>
98
+          <el-col :span="12">
99
+            <el-form-item label="库房名称" prop="wareNm">
100
+              <el-input v-model="form.wareNm" placeholder="请输入库房名称"></el-input>
101
+            </el-form-item>
102
+          </el-col>
103
+          <el-col :span="12">
104
+            <el-form-item label="库房编码" prop="wareCode">
105
+              <el-input v-model="form.wareCode" placeholder="请输入库房编码"></el-input>
106
+            </el-form-item>
107
+          </el-col>
108
+          <el-col :span="12">
109
+            <el-form-item label="库房长度" prop="wareLength">
110
+              <el-input v-model="form.wareLength" placeholder="请输入库房长度"></el-input>
111
+            </el-form-item>
112
+          </el-col>
113
+          <el-col :span="12">
114
+            <el-form-item label="库房宽度" prop="wareWidth">
115
+              <el-input v-model="form.wareWidth" placeholder="请输入库房宽度"></el-input>
116
+            </el-form-item>
117
+          </el-col>
118
+        </el-row>
119
+      </el-form>
120
+
121
+      </el-card>
122
+      <template #footer>
123
+        <div class="dialog-footer">
124
+          <el-button type="success" plain @click="handleSave(ruleFormRef)">保存</el-button>
125
+          <el-button type="danger" plain @click="handleCancelSave2">取消</el-button>
126
+        </div>
127
+      </template>
128
+    </el-dialog>
129
+  </div>
130
+
131
+</template>
132
+
133
+<script setup>
134
+import {getCurrentInstance, onMounted, reactive, ref} from 'vue'
135
+import tools from '@/tools'
136
+import ButtonBox from "@/components/ButtonBox.vue";
137
+
138
+const {
139
+  proxy
140
+} = getCurrentInstance()
141
+
142
+const cardBodyStyle = ref(tools.style.card)
143
+const inputStyle = ref(tools.style.input)
144
+
145
+
146
+
147
+const url = ref('sto/Ware/query')
148
+
149
+/**
150
+ *   查询
151
+ */
152
+
153
+const form = ref({
154
+  wareNm: '',
155
+  wareCode: '',
156
+  wareLength: '',
157
+  wareWidth: ''
158
+});
159
+
160
+const query = ref({
161
+  wareNm: '',
162
+  wareCode: '',
163
+  wareLength: '',
164
+  wareWidth: ''
165
+})
166
+const tableData = ref([])
167
+const TableBoxRef = ref(null)
168
+const handleSearch = () => {
169
+  // TableBoxRef.value.search()
170
+  getTableData()
171
+}
172
+
173
+
174
+
175
+
176
+/**
177
+ * 分页
178
+ */
179
+const currentPage = ref(1)
180
+const totalRows = ref(0)
181
+const pageSizes = ref([ 10, 20, 30, 40])
182
+const pageSize = ref(10)
183
+const handleSizeChange = (val) => {
184
+  pageSize.value = val
185
+  getTableData()
186
+}
187
+const handleCurrentChange = (val) => {
188
+  currentPage.value = val
189
+  getTableData()
190
+}
191
+/**
192
+ * 分页
193
+ */
194
+
195
+
196
+/**
197
+ * 新增
198
+ */
199
+const dialogVisible = ref(false)
200
+const dialogVisibleEdit = ref(false)
201
+
202
+const ruleFormRef = ref()
203
+
204
+const rules = reactive({
205
+  wareNm: [
206
+    {required: true, message: '不允许为空', trigger: 'blur'},
207
+  ],
208
+  wareCode: [
209
+    {required: true, message: '不允许为空', trigger: 'blur'},
210
+  ],
211
+  wareLength: [
212
+    {required: true, message: '不允许为空', trigger: 'blur'},
213
+  ],
214
+  wareWidth: [
215
+    {required: true, message: '不允许为空', trigger: 'blur'},
216
+  ],
217
+
218
+})
219
+
220
+const insertDialog = () => {
221
+  form.value = {
222
+    wareNm: '',
223
+    wareCode: '',
224
+    wareLength: '',
225
+    wareWidth: ''
226
+  }
227
+  dialogVisible.value = true
228
+}
229
+/**
230
+ * 新增
231
+ */
232
+
233
+
234
+/**
235
+ * 保存、修改、删除
236
+ */
237
+const refUpload = ref()
238
+
239
+const openDialog = () => {
240
+
241
+}
242
+
243
+
244
+const handleSave = (ruleFormRef) => {
245
+  if (!ruleFormRef) return
246
+  ruleFormRef.validate((valid) => {
247
+    if (valid) {
248
+      console.log('submit!')
249
+      var url = 'sto/Ware/save'
250
+      var param = {
251
+        json: JSON.stringify(form.value),
252
+
253
+      }
254
+      proxy.$axios.post(url, param).then(response => {
255
+        if (response.data.code == 0) {
256
+          ElMessage({
257
+            message: '保存成功',
258
+            type: 'success',
259
+          })
260
+          dialogVisibleEdit.value = false
261
+          handleSearch()
262
+        } else {
263
+          ElMessage({
264
+            type: 'error',
265
+            message: '操作失败' + response.data.msg
266
+          })
267
+        }
268
+      });
269
+    } else {
270
+      console.log('error submit!')
271
+      return false
272
+    }
273
+  })
274
+};
275
+const handleInsert = (ruleFormRef) => {
276
+  if (!ruleFormRef) return
277
+  ruleFormRef.validate((valid) => {
278
+    if (valid) {
279
+      console.log('submit!')
280
+      var url = 'sto/Ware/save'
281
+      var param = {
282
+        json: JSON.stringify(form.value),
283
+
284
+      }
285
+      console.log('form.value!' ,form.value)
286
+      proxy.$axios.post(url, param).then(response => {
287
+        if (response.data.code == 0) {
288
+          ElMessage({
289
+            message: '保存成功',
290
+            type: 'success',
291
+          })
292
+          dialogVisible.value = false
293
+          handleSearch()
294
+        } else {
295
+          ElMessage({
296
+            type: 'error',
297
+            message: '操作失败' + response.data.msg
298
+          })
299
+        }
300
+      });
301
+    } else {
302
+      console.log('error submit!')
303
+      return false
304
+    }
305
+  })
306
+};
307
+
308
+const handleCancelSave = () => {
309
+  dialogVisible.value = false
310
+}
311
+const handleCancelSave2 = () => {
312
+  dialogVisibleEdit.value = false
313
+}
314
+
315
+const handleEdit = (row) => {
316
+  var url = 'sto/Ware/queryByPK'
317
+  var param = {
318
+    id: row.id
319
+  }
320
+  proxy.$axios.get(url, param).then(response => {
321
+    if (response.data.code == '0') {
322
+      form.value = response.data.data
323
+      console.log(form.value)
324
+      dialogVisibleEdit.value = true
325
+    } else {
326
+      ElMessage.error('操作失败!' + response.data.msg)
327
+    }
328
+  })
329
+}
330
+
331
+const handleRemove = (row) => {
332
+  var url = 'sto/Ware/remove'
333
+  var param = {
334
+    id: row.id
335
+  }
336
+  ElMessageBox.confirm(
337
+      '确定删除本条记录?',
338
+      '提示', {
339
+        confirmButtonText: '确认',
340
+        cancelButtonText: '取消',
341
+        type: 'warning',
342
+        draggable: true,
343
+      }
344
+  )
345
+      .then(() => {
346
+        proxy.$axios.get(url, param).then(response => {
347
+          if (response.data.code == '0') {
348
+            console.log(response.data.data)
349
+            ElMessage({
350
+              type: 'success',
351
+              message: '删除成功!',
352
+            });
353
+            getTableData()
354
+          } else {
355
+            ElMessage.error('操作失败!' + response.data.msg)
356
+          }
357
+        })
358
+      })
359
+      .catch(() => {
360
+        ElMessage({
361
+          type: 'info',
362
+          message: '已取消',
363
+        })
364
+      })
365
+
366
+
367
+}
368
+
369
+
370
+/**
371
+ * 保存、修改、删除
372
+ */
373
+
374
+const multipleSelection = ref([])
375
+const handleSelectionChange = (val) => {
376
+  multipleSelection.value = val
377
+}
378
+
379
+const handleRemoveBatch = () => {
380
+  console.log('handleRemoveBatch')
381
+
382
+  if (multipleSelection.value.length < 1) {
383
+    ElMessage({
384
+      type: 'warning',
385
+      message: '请选择要删除的数据!'
386
+    })
387
+    return
388
+  }
389
+
390
+  ElMessageBox.confirm('此操作将删除该数据, 是否继续?', '提示', {
391
+    confirmButtonText: '确定',
392
+    cancelButtonText: '取消',
393
+    type: 'warning'
394
+  }).then(() => {
395
+    var ids = []
396
+    multipleSelection.value.forEach((item, index) => {
397
+      ids.push(item.id)
398
+    })
399
+    /* var url = 'cot/SignRequest/removeBatch'*/
400
+    var param = {
401
+      ids: JSON.stringify(ids)
402
+    }
403
+    proxy.$axios.post(url, param).then(response => {
404
+      if (response.data.code == '0') {
405
+        ElMessage({
406
+          type: 'success',
407
+          message: '操作成功!',
408
+        });
409
+        getTableData()
410
+        dialogVisible.value = false
411
+      } else {
412
+        ElMessage({
413
+          type: 'error',
414
+          message: '操作失败!' + response.data.msg
415
+        });
416
+      }
417
+    })
418
+  }).catch(() => {
419
+    ElMessage({
420
+      type: 'info',
421
+      message: '已取消删除'
422
+    })
423
+  })
424
+}
425
+
426
+const handleEditBatch = () => {
427
+  console.log('handleEditBatch')
428
+  if (multipleSelection.value.length != 1) {
429
+    ElMessage({
430
+      type: 'warning',
431
+      message: '请选择一条数据编辑!'
432
+    })
433
+    return
434
+  }
435
+  handleEdit(multipleSelection.value[0])
436
+}
437
+
438
+const handleUpload = () => {
439
+  console.log('handleUpload')
440
+}
441
+
442
+const handleDownload = () => {
443
+  console.log('handleDownload')
444
+}
445
+
446
+const handleImport = () => {
447
+  console.log('handleImport')
448
+}
449
+
450
+const handleExport = () => {
451
+  console.log('handleExport')
452
+}
453
+const getTableData = () => {
454
+  var url = 'sto/Ware/query'
455
+  var param = {
456
+    page: currentPage.value,
457
+    rows: pageSize.value,
458
+    wareNm: query.value.wareNm,
459
+    wareCode: query.value.wareCode,
460
+    wareLength: query.value.wareLength,
461
+    wareWidth: query.value.wareWidth,
462
+    json: JSON.stringify(query.value)
463
+  }
464
+  proxy.$axios.get(url, param).then(response => {
465
+    if (response.data.code == '0') {
466
+      tableData.value = response.data.data.records
467
+      totalRows.value = response.data.data.total
468
+    } else {
469
+      ElMessage.error('操作失败!' + response.data.msg)
470
+    }
471
+  })
472
+}
473
+const height = ref(600)
474
+const updateViewportHeight = () => {
475
+  height.value = window.innerHeight * 0.65
476
+  console.log( window.innerHeight);
477
+};
478
+onMounted(() => {
479
+  getTableData()
480
+  updateViewportHeight()
481
+})
482
+</script>
483
+
484
+<style scoped>
485
+::v-deep .diaClass .el-form-item {
486
+  width: 100%
487
+}
488
+::v-deep .el-autocomplete{
489
+  width: 100%;
490
+}
491
+::v-deep .el-dialog__body {
492
+  background-color: #F2F6FC;
493
+}
494
+</style>
495
+

Loading…
取消
儲存