KouJin пре 1 година
родитељ
комит
6a70703e3b

+ 6 - 2
src/api/DeliveryWarehouse/DeliveryWarehouseList/index.ts

@@ -2,8 +2,12 @@ import request from '@/config/axios'
2 2
 
3 3
 export const DeliveryWarehouseListApi = {
4 4
   // 查询设备分页
5
-  getDeliveryWarehouseListPage: async (params: any) => {
6
-    return await request.get({ url: `/iot/device/page`, params })
5
+  getDeliveryWarehouseListPage: async (data: any) => {
6
+    return await request.post({ url: `/coding/deliverySpare/page`, data })
7
+  },
8
+
9
+  exportDeliveryWarehouseList: async (data: any) => {
10
+    return await request.download({ url: `/coding/deliverySpare/export`, data })
7 11
   },
8 12
 
9 13
 

+ 109 - 0
src/components/Upload/UploadImage.tsx

@@ -0,0 +1,109 @@
1
+import { defineComponent, ref } from 'vue'
2
+import { ElMessage, ElUpload, ElIcon } from 'element-plus'
3
+import { Plus } from '@element-plus/icons-vue'
4
+import type { UploadProps, UploadRequestOptions } from 'element-plus'
5
+import './uploadImage.scss'
6
+
7
+// 自定义错误类型
8
+interface UploadError {
9
+  status: number
10
+  method: string
11
+  url: string
12
+  message: string
13
+}
14
+
15
+export interface UploadImageProps {
16
+  value?: string
17
+  onChange?: (url: string) => void
18
+}
19
+
20
+export default defineComponent({
21
+  name: 'UploadImage',
22
+  props: {
23
+    value: {
24
+      type: String,
25
+      default: ''
26
+    },
27
+    onChange: {
28
+      type: Function as PropType<(url: string) => void>,
29
+      default: undefined
30
+    }
31
+  },
32
+  emits: ['update:value'],
33
+  setup(props, { emit }) {
34
+    const imageUrl = ref(props.value)
35
+
36
+    // 上传成功回调
37
+    const handleSuccess = (response: any) => {
38
+      imageUrl.value = response.url
39
+      emit('update:value', response.url)
40
+      props.onChange?.(response.url)
41
+      ElMessage.success('上传成功')
42
+    }
43
+
44
+    // 上传前校验
45
+    const beforeUpload = (file: File) => {
46
+      // 校验文件类型
47
+      const isImage = ['image/jpeg', 'image/png', 'image/gif'].includes(file.type)
48
+      if (!isImage) {
49
+        ElMessage.error('只能上传图片文件!')
50
+        return false
51
+      }
52
+
53
+      // 校验文件大小
54
+      const isLt2M = file.size / 1024 / 1024 < 2
55
+      if (!isLt2M) {
56
+        ElMessage.error('图片大小不能超过 2MB!')
57
+        return false
58
+      }
59
+
60
+      return true
61
+    }
62
+
63
+    // 自定义上传
64
+    const customUpload = async (options: UploadRequestOptions) => {
65
+      const { file, onSuccess, onError } = options
66
+      try {
67
+        // TODO: 实现实际的上传逻辑
68
+        const formData = new FormData()
69
+        formData.append('file', file)
70
+        
71
+        // 模拟上传
72
+        setTimeout(() => {
73
+          onSuccess?.({ url: '001' })
74
+        }, 1000)
75
+      } catch (error) {
76
+        const err: UploadError = {
77
+          status: 500,
78
+          method: 'POST',
79
+          url: '',
80
+          message: error instanceof Error ? error.message : '上传失败'
81
+        }
82
+        onError?.(err)
83
+        ElMessage.error('上传失败')
84
+      }
85
+    }
86
+
87
+    return () => (
88
+      <div class="upload-image">
89
+        <ElUpload
90
+          class="avatar-uploader"
91
+          show-file-list={false}
92
+          http-request={customUpload}
93
+          on-success={handleSuccess}
94
+          before-upload={beforeUpload}
95
+        >
96
+          {imageUrl.value ? (
97
+            <img src={imageUrl.value} class="avatar" alt="avatar" />
98
+          ) : (
99
+            <div class="avatar-uploader-icon">
100
+              <ElIcon size={20}>
101
+                <Plus />
102
+              </ElIcon>
103
+            </div>
104
+          )}
105
+        </ElUpload>
106
+      </div>
107
+    )
108
+  }
109
+})

+ 31 - 0
src/components/Upload/uploadImage.scss

@@ -0,0 +1,31 @@
1
+.upload-image {
2
+  .avatar-uploader {
3
+    :deep(.el-upload) {
4
+      border: 1px dashed var(--el-border-color);
5
+      border-radius: 6px;
6
+      cursor: pointer;
7
+      position: relative;
8
+      overflow: hidden;
9
+      transition: var(--el-transition-duration);
10
+
11
+      &:hover {
12
+        border-color: var(--el-color-primary);
13
+      }
14
+    }
15
+  }
16
+
17
+  .avatar-uploader-icon {
18
+    width: 178px;
19
+    height: 178px;
20
+    display: flex;
21
+    justify-content: center;
22
+    align-items: center;
23
+    color: var(--el-text-color-secondary);
24
+  }
25
+
26
+  .avatar {
27
+    width: 178px;
28
+    height: 178px;
29
+    display: block;
30
+  }
31
+} 

+ 0 - 0
src/hooks/web/userLoding.ts


+ 574 - 0
src/views/DeliveryWarehouse/DeliveryWarehouseList/compontents/CreateForm.vue

@@ -0,0 +1,574 @@
1
+<template>
2
+  <Dialog v-model="dialogVisible" :defineFullscreen="true" :fullscreen="false" :title="dialogTitle"
3
+          width="800">
4
+    <!--    <a-select  >-->
5
+    <!--      <a-option :index="0" :value="true">是</a-option>-->
6
+    <!--      <a-option :value="false">否</a-option>-->
7
+    <!--    </a-select>-->
8
+    <template #title>
9
+      <MyRadio v-model="active">
10
+        <my-radio-item name="单位信息">
11
+          <template #name>
12
+            单位信息
13
+          </template>
14
+        </my-radio-item>
15
+        <my-radio-item name="库区信息">
16
+          <template #name>
17
+            库区信息
18
+          </template>
19
+        </my-radio-item>
20
+        <my-radio-item name="仓房信息">
21
+          <template #name>
22
+            仓房信息
23
+          </template>
24
+        </my-radio-item>
25
+        <my-radio-item name="财务信息">
26
+          <template #name>
27
+            财务信息
28
+          </template>
29
+        </my-radio-item>
30
+      </MyRadio>
31
+    </template>
32
+    <ContentWrap>
33
+      <el-form
34
+        v-show="active === '单位信息'" ref="formRef1" :model="dwxxReqVO" :rules="formRules1"
35
+               label-width="180">
36
+        <el-row>
37
+          <el-col :span="8">
38
+            <el-form-item label="单位名称" prop="dwmc">
39
+              <el-input v-model="dwxxReqVO.dwmc" placeholder="请输入单位名称"/>
40
+            </el-form-item>
41
+          </el-col>
42
+          <el-col :span="8">
43
+            <el-form-item label="统一信用代码" prop="tyxydm">
44
+              <el-input v-model="dwxxReqVO.tyxydm" placeholder="请输入统一信用代码"/>
45
+            </el-form-item>
46
+          </el-col>
47
+          <el-col :span="8">
48
+            <el-form-item label="法定代表人" prop="fddbr">
49
+              <el-input v-model="dwxxReqVO.fddbr" placeholder="请输入法定代表人"/>
50
+            </el-form-item>
51
+          </el-col>
52
+          <el-col :span="8">
53
+            <el-form-item label="身份证号" prop="sfzh">
54
+              <el-input v-model="dwxxReqVO.sfzh" placeholder="请输入身份证号"/>
55
+            </el-form-item>
56
+          </el-col>
57
+          <el-col :span="8">
58
+            <el-form-item label="联系方式" prop="lxfs">
59
+              <el-input v-model="dwxxReqVO.lxfs" placeholder="请输入联系方式"/>
60
+            </el-form-item>
61
+          </el-col>
62
+          <el-col :span="8">
63
+            <el-form-item label="注册日期" prop="zcrq">
64
+              <el-date-picker
65
+                v-model="dwxxReqVO.zcrq"
66
+                type="date"
67
+                placeholder="请选择注册日期"
68
+              />
69
+            </el-form-item>
70
+          </el-col>
71
+          <el-col :span="8">
72
+            <el-form-item label="注册地址" prop="zcdz">
73
+
74
+              <el-input v-model="dwxxReqVO.zcdz" placeholder="请输入注册地址"/>
75
+            </el-form-item>
76
+          </el-col>
77
+          <el-col :span="8">
78
+            <el-form-item label="邮政编码" prop="yzbm">
79
+              <el-input v-model="dwxxReqVO.yzbm" placeholder="请输入邮政编码"/>
80
+            </el-form-item>
81
+          </el-col>
82
+          <el-col :span="8">
83
+            <el-form-item label="企业性质" prop="qyxz">
84
+              <el-input v-model="dwxxReqVO.qyxz" placeholder="请选择企业性质"/>
85
+            </el-form-item>
86
+          </el-col>
87
+          <el-col :span="8">
88
+            <el-form-item label="上传营业执照" prop="resid">
89
+<!--              <el-upload-->
90
+<!--                class="avatar-uploader"-->
91
+<!--                action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"-->
92
+<!--                :show-file-list="false"-->
93
+<!--                :on-success="handleAvatarSuccess"-->
94
+<!--                :before-upload="beforeAvatarUpload"-->
95
+<!--              >-->
96
+<!--                <img v-if="imageUrl" :src="imageUrl" class="avatar" />-->
97
+<!--                <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>-->
98
+<!--              </el-upload>-->
99
+              <el-input v-model="dwxxReqVO.resid" placeholder="上传营业执照"/>
100
+            </el-form-item>
101
+          </el-col>
102
+        </el-row>
103
+      </el-form>
104
+      <el-form
105
+        v-show="active === '库区信息'" ref="formRef2" :model="kqxxReqVO" :rules="formRules2"
106
+               label-width="180">
107
+        <el-row>
108
+          <el-col :span="8">
109
+            <el-form-item label="库区名称" prop="kqmc">
110
+              <el-input v-model="kqxxReqVO.kqmc" placeholder="请输入库区名称"/>
111
+            </el-form-item>
112
+          </el-col>
113
+          <el-col :span="8">
114
+            <el-form-item label="库区统一编码" prop="kqdm">
115
+              <el-input v-model="kqxxReqVO.kqdm" placeholder="请输入库区统一编码"/>
116
+            </el-form-item>
117
+          </el-col>
118
+          <el-col :span="8">
119
+            <el-form-item label="邮政编码" prop="yzbm">
120
+              <el-input v-model="kqxxReqVO.yzbm" placeholder="请输入邮政编码"/>
121
+            </el-form-item>
122
+          </el-col>
123
+          <el-col :span="16">
124
+            <el-form-item label="行政区划">
125
+              <div style="width:100%;display: flex;justify-content: space-around">
126
+                <el-select v-model="kqxxReqVO.sheng" placeholder="省">
127
+                  <el-option v-for="item in shengList" :key="item.areaCode" :label="item.areaName"
128
+                             :value="item.areaCode"/>
129
+                </el-select>
130
+                <el-select v-model="kqxxReqVO.shi" placeholder="市区">
131
+                  <el-option v-for="item in shiList" :key="item.areaCode" :label="item.areaName"
132
+                             :value="item.areaCode"/>
133
+                </el-select>
134
+                <el-select v-model="kqxxReqVO.xian" placeholder="区县">
135
+                  <el-option v-for="item in xianList" :key="item.areaCode" :label="item.areaName"
136
+                             :value="item.areaCode"/>
137
+                </el-select>
138
+              </div>
139
+
140
+            </el-form-item>
141
+          </el-col>
142
+          <el-col :span="8">
143
+            <el-form-item label="具体地址" prop="jtdz">
144
+              <el-input v-model="kqxxReqVO.jtdz" placeholder="请输入具体地址"/>
145
+            </el-form-item>
146
+          </el-col>
147
+          <el-col :span="8">
148
+            <el-form-item label="库区负责人(实际产权人)" prop="kqfzr">
149
+              <el-input v-model="kqxxReqVO.kqfzr" placeholder="请输入库区负责人"/>
150
+            </el-form-item>
151
+          </el-col>
152
+          <el-col :span="8">
153
+            <el-form-item label="联系电话" prop="lxdh">
154
+              <el-input v-model="kqxxReqVO.lxdh" placeholder="请选择注册日期"/>
155
+            </el-form-item>
156
+          </el-col>
157
+          <el-col :span="8">
158
+            <el-form-item label="占地面积(m²)" prop="zdmj">
159
+              <el-input v-model="kqxxReqVO.zdmj" placeholder="请输入占地面积"/>
160
+            </el-form-item>
161
+          </el-col>
162
+          <el-col :span="8">
163
+            <el-form-item label="库区状态" prop="kqzt">
164
+              <el-input v-model="kqxxReqVO.kqzt" placeholder="请选择库区状态"/>
165
+            </el-form-item>
166
+          </el-col>
167
+          <el-col :span="8">
168
+            <el-form-item label="租仓参考价(元)" prop="zcckj">
169
+              <el-input v-model="kqxxReqVO.zcckj" placeholder="租仓参考价"/>
170
+            </el-form-item>
171
+          </el-col>
172
+          <el-col :span="8">
173
+            <el-form-item label="委托保管参考价:(元/吨)" prop="wtbgckj">
174
+              <el-input v-model="kqxxReqVO.wtbgckj" placeholder="租仓参考价"/>
175
+            </el-form-item>
176
+          </el-col>
177
+          <el-col :span="8">
178
+            <el-form-item label="经纬度" prop="jd">
179
+              <div style="display: flex;justify-content: space-around">
180
+                <el-input v-model="kqxxReqVO.jd" placeholder="经度"/>
181
+                <div>
182
+                  -
183
+                </div>
184
+                <el-input v-model="kqxxReqVO.wd" placeholder="纬度"/>
185
+              </div>
186
+            </el-form-item>
187
+          </el-col>
188
+          <el-col :span="8">
189
+            <el-form-item label="上传库区图" prop="resid">
190
+              <!--                <el-image-->
191
+              <el-input v-model="kqxxReqVO.resid" placeholder="上传库区图"/>
192
+            </el-form-item>
193
+          </el-col>
194
+        </el-row>
195
+      </el-form>
196
+      <el-form
197
+        v-show="active === '仓房信息'" ref="formRef3" :model="caxxReqVOList"
198
+               :rules="formRules3"
199
+               label-width="180">
200
+        <a-table :columns="tableColumns" :data="caxxReqVOList">
201
+          <template #index="{  rowIndex  }">
202
+            {{ rowIndex + 1 }}
203
+          </template>
204
+          <template #cfName="{ record  }">
205
+            <a-input v-model="caxxReqVOList[record.index].cfmc"/>
206
+          </template>
207
+          <template #cfType="{ record  }">
208
+            <a-select v-model="caxxReqVOList[record.index].cflx">
209
+              <a-option v-for="item in getIntDictOptions('system_cflx')" :key="item.value"
210
+                        :value="item.value">{{ item.label }}
211
+              </a-option>
212
+            </a-select>
213
+          </template>
214
+          <template #cfCode="{ record  }">
215
+            <a-input v-model="caxxReqVOList[record.index].cfbm"/>
216
+          </template>
217
+          <template #cfState="{ record  }">
218
+            <a-select v-model="caxxReqVOList[record.index].cazt">
219
+              <a-option v-for="item in getIntDictOptions('system_cazt')" :key="item.value"
220
+                        :value="item.value">{{ item.label }}
221
+              </a-option>
222
+            </a-select>
223
+          </template>
224
+          <template #sjcr="{ record  }">
225
+            <a-input v-model="caxxReqVOList[record.index].sjcr"/>
226
+          </template>
227
+          <template #qtcxsysm="{ record  }">
228
+            <a-input v-model="caxxReqVOList[record.index].qtcxsm"/>
229
+          </template>
230
+          <template #edit="{ record  }">
231
+            <a-button style="font-size: 16px" @click="deleteItem(record)">
232
+              -
233
+            </a-button>
234
+          </template>
235
+          <template #editHeader>
236
+            <a-button class="" style="font-size: 16px" @click="addItem()">
237
+              +
238
+            </a-button>
239
+          </template>
240
+        </a-table>
241
+      </el-form>
242
+      <el-form
243
+        v-show="active === '财务信息'" ref="formRef4" :model="cwxxReqVO" :rules="formRules4"
244
+               label-width="180">
245
+        <el-row>
246
+          <el-col :span="8">
247
+            <el-form-item label="是否国有及国有控股:">
248
+              <el-radio-group v-model="cwxxReqVO.sfgykg">
249
+                <el-radio :value="0">是</el-radio>
250
+                <el-radio :value="1">否</el-radio>
251
+              </el-radio-group>
252
+            </el-form-item>
253
+          </el-col>
254
+          <el-col :span="7">
255
+            <span style="display: none"></span>
256
+          </el-col>
257
+          <el-col :span="8">
258
+            <el-form-item label="上一年总资产">
259
+              <el-input v-model="cwxxReqVO.syndzzc"/>
260
+            </el-form-item>
261
+          </el-col>
262
+        </el-row>
263
+        <el-row style="display: flex;justify-content: space-between">
264
+          <el-col v-for="(item,index) in cwxxReqVO.cwxxYearList" :key="index" :span="8">
265
+            <el-card style="width: 95%;margin: 0 auto">
266
+              <template #header>
267
+                {{ item.cn }}年财务情况
268
+              </template>
269
+              <el-row>
270
+                <el-col :span="24">
271
+                  <el-form-item label="总负债" label-width="80px">
272
+                    <el-input v-model="item.zfz" class="w-[85%]!"/> &nbsp; &nbsp; 万元
273
+                  </el-form-item>
274
+                </el-col>
275
+                <el-col :span="24">
276
+                  <el-form-item label="营业收入" label-width="80px">
277
+                    <el-input v-model="item.yysr" class="w-[85%]! "/> &nbsp; &nbsp; 万元
278
+                  </el-form-item>
279
+                </el-col>
280
+                <el-col :span="24">
281
+                  <el-form-item label="净利润" label-width="80px">
282
+                    <el-input v-model="item.jlr" class="w-[85%]! "/> &nbsp; &nbsp; 万元
283
+                  </el-form-item>
284
+                </el-col>
285
+              </el-row>
286
+            </el-card>
287
+          </el-col>
288
+        </el-row>
289
+      </el-form>
290
+    </ContentWrap>
291
+    <template #footer>
292
+      <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
293
+      <el-button @click="dialogVisible = false">取 消</el-button>
294
+    </template>
295
+  </Dialog>
296
+</template>
297
+<script lang="ts" setup>
298
+import { ref, reactive, watch, onMounted } from 'vue'
299
+import { useI18n } from 'vue-i18n'
300
+import { FormRules } from 'element-plus'
301
+import MyRadio from '@/components/MyRadio/index.vue'
302
+import MyRadioItem from '@/components/MyRadio/MyRadioItem.vue'
303
+import { DeliveryWarehouseSelectApi } from '@/api/DeliveryWarehouse/DeliveryWarehouseSelect'
304
+import { CaxxSaveReqVO } from '@/api/DeliveryWarehouse/DeliveryWarehouseSelect/interface/CaxxSaveReqVO'
305
+import { CwxxRespVO } from '@/api/DeliveryWarehouse/DeliveryWarehouseSelect/interface/CwxxRespVO'
306
+import { KqxxSaveReqVO } from '@/api/DeliveryWarehouse/DeliveryWarehouseSelect/interface/KqxxSaveReqVO'
307
+import { DwxxSaveReqVO } from '@/api/DeliveryWarehouse/DeliveryWarehouseSelect/interface/DwxxSaveReqVO'
308
+import { DeliverySaveVO } from '@/api/DeliveryWarehouse/DeliveryWarehouseSelect/interface/DeliverySaveVO'
309
+import { AdministrativeDivisionApi } from '@/api/system/administrativeDivision'
310
+import { getIntDictOptions } from '@/utils/dict'
311
+
312
+// 接口定义
313
+interface TableColumn {
314
+  title: string
315
+  dataIndex: string
316
+  slotName: string
317
+  align: 'left' | 'center' | 'right'
318
+  width?: number
319
+  titleSlotName?: string
320
+}
321
+
322
+interface AreaOption {
323
+  areaCode: string | number
324
+  areaName: string
325
+}
326
+
327
+interface CaxxItem {
328
+  index?: number
329
+  cfmc?: string
330
+  cflx?: string
331
+  cfbm?: string
332
+  cazt?: string
333
+  sjcr?: string
334
+  qtcxsm?: string
335
+}
336
+
337
+// 组件配置
338
+defineOptions({ name: 'CreateForm' })
339
+
340
+// 国际化
341
+const { t } = useI18n()
342
+// const { message } = useMessage()
343
+
344
+// 表单状态
345
+const dialogVisible = ref(false)
346
+const dialogTitle = ref('新增库区')
347
+const formLoading = ref(false)
348
+const formType = ref('')
349
+const active = ref('单位信息')
350
+
351
+// 表单引用
352
+const formRef1 = ref()
353
+const formRef2 = ref()
354
+const formRef3 = ref()
355
+const formRef4 = ref()
356
+
357
+// 表单数据
358
+const formData = ref<DeliverySaveVO>({
359
+  dwxxReqVO: { dwmc: '' },
360
+  kqxxReqVO: {},
361
+  caxxReqVOList: [],
362
+  cwxxReqVO: {}
363
+})
364
+
365
+const dwxxReqVO = ref<DwxxSaveReqVO>({})
366
+const kqxxReqVO = ref<KqxxSaveReqVO>({})
367
+const caxxReqVOList = ref<CaxxSaveReqVO[]>([])
368
+const cwxxReqVO = ref<CwxxRespVO>({
369
+  cwxxYearList: [
370
+    { cn: '2023', zfz: '', yysr: '', jlr: '' },
371
+    { cn: '2022', zfz: '', yysr: '', jlr: '' },
372
+    { cn: '2021', zfz: '', yysr: '', jlr: '' }
373
+  ],
374
+  sfgykg: 0,
375
+  syndzzc: ''
376
+})
377
+
378
+// 行政区划数据
379
+const shengList = ref<AreaOption[]>([])
380
+const shiList = ref<AreaOption[]>([])
381
+const xianList = ref<AreaOption[]>([])
382
+
383
+// 表格配置
384
+const tableColumns: TableColumn[] = [
385
+  { title: '序号', dataIndex: 'index', slotName: 'index', align: 'center', width: 60 },
386
+  { title: '仓房名称', dataIndex: 'cfName', slotName: 'cfName', align: 'center' },
387
+  { title: '仓房类型', dataIndex: 'cfType', slotName: 'cfType', align: 'center' },
388
+  { title: '仓房编号', dataIndex: 'cfCode', slotName: 'cfCode', align: 'center' },
389
+  { title: '仓房状态', dataIndex: 'cfState', slotName: 'cfState', align: 'center' },
390
+  { title: '设计仓容(吨)', dataIndex: 'sjcr', slotName: 'sjcr', align: 'center' },
391
+  { title: '其他仓型使用说明', dataIndex: 'qtcxsysm', slotName: 'qtcxsysm', align: 'center' },
392
+  { title: '+', dataIndex: 'edit', slotName: 'edit', titleSlotName: 'editHeader', align: 'center' }
393
+]
394
+
395
+// 表单校验规则
396
+const formRules1 = reactive<FormRules>({
397
+  dwmc: [{ required: true, message: '请输入', trigger: 'blur' }],
398
+  tyxydm: [{ required: true, message: '请输入', trigger: 'blur' }],
399
+  fddbr: [{ required: true, message: '请输入', trigger: 'blur' }],
400
+  sfzh: [{ required: true, message: '请输入', trigger: 'blur' }],
401
+  lxfs: [{ required: true, message: '请输入', trigger: 'blur' }],
402
+  zcrq: [{ required: true, message: '请输入', trigger: 'blur' }],
403
+  zcdz: [{ required: true, message: '请输入', trigger: 'blur' }],
404
+  yzbm: [{ required: true, message: '请输入', trigger: 'blur' }],
405
+  qyxz: [{ required: true, message: '请选择', trigger: 'blur' }],
406
+  resid: [{ required: true, message: '请选择', trigger: 'blur' }]
407
+})
408
+const formRules2 = reactive<FormRules>({
409
+  kqmc: [{ required: true, message: '请输入', trigger: 'blur' }],
410
+  kqdm: [{ required: true, message: '请输入', trigger: 'blur' }],
411
+  yzbm: [{ required: true, message: '请输入', trigger: 'blur' }],
412
+  sheng: [{ required: true, message: '请输入', trigger: 'blur' }],
413
+  shi: [{ required: true, message: '请输入', trigger: 'blur' }],
414
+  xian: [{ required: true, message: '请输入', trigger: 'blur' }],
415
+  jtdz: [{ required: true, message: '请输入', trigger: 'blur' }],
416
+  kqfzr: [{ required: true, message: '请输入', trigger: 'blur' }],
417
+  lxdh: [{ required: true, message: '请输入', trigger: 'blur' }],
418
+  zdmj: [{ required: true, message: '请输入', trigger: 'blur' }],
419
+  kqzt: [{ required: true, message: '请输入', trigger: 'blur' }],
420
+  wtbgckj: [{ required: true, message: '请输入', trigger: 'blur' }],
421
+  jd: [{ required: true, message: '请输入', trigger: 'blur' }],
422
+  wd: [{ required: true, message: '请输入', trigger: 'blur' }],
423
+  resid: [{ required: true, message: '请输入', trigger: 'blur' }]
424
+})
425
+const formRules3 = reactive<FormRules>({})
426
+const formRules4 = reactive<FormRules>({})
427
+
428
+// 方法定义
429
+/**
430
+ * 打开弹窗
431
+ */
432
+const open = async (type: string, id?: number) => {
433
+  dialogVisible.value = true
434
+  formType.value = type
435
+  resetForm()
436
+  if (id) {
437
+    formLoading.value = true
438
+    try {
439
+      // 获取数据
440
+    } finally {
441
+      formLoading.value = false
442
+    }
443
+  }
444
+}
445
+
446
+/**
447
+ * 重置表单
448
+ */
449
+const resetForm = () => {
450
+  formRef1.value?.resetFields();
451
+  formRef2.value?.resetFields();
452
+  formRef3.value?.resetFields();
453
+  formRef4.value?.resetFields();
454
+  dwxxReqVO.value = {};
455
+  kqxxReqVO.value = {};
456
+  caxxReqVOList.value = [];
457
+  cwxxReqVO.value = {
458
+    cwxxYearList: [
459
+      { cn: '2023', zfz: '', yysr: '', jlr: '' },
460
+      { cn: '2022', zfz: '', yysr: '', jlr: '' },
461
+      { cn: '2021', zfz: '', yysr: '', jlr: '' }
462
+    ],
463
+    sfgykg: 0,
464
+    syndzzc: ''
465
+  }
466
+}
467
+
468
+/**
469
+ * 删除仓房项
470
+ */
471
+const deleteItem = (record: CaxxItem) => {
472
+  caxxReqVOList.value = caxxReqVOList.value.filter(item => item.index !== record.index)
473
+  caxxReqVOList.value.forEach((item, index) => {
474
+    item.index = index
475
+  })
476
+}
477
+
478
+/**
479
+ * 添加仓房项
480
+ */
481
+const addItem = () => {
482
+  caxxReqVOList.value.unshift({})
483
+  caxxReqVOList.value.forEach((item, index) => {
484
+    item.index = index
485
+  })
486
+}
487
+
488
+/**
489
+ * 获取行政区划数据
490
+ */
491
+const getDivision = async (areaCode?: string): Promise<AreaOption[]> => {
492
+  try {
493
+    return await AdministrativeDivisionApi.getList({ areaCode })
494
+  } catch (err) {
495
+    throw err
496
+  }
497
+}
498
+
499
+/**
500
+ * 提交表单
501
+ */
502
+const submitForm = async () => {
503
+  //校验表单
504
+  try {
505
+    await formRef1.value?.validate()
506
+    await formRef2.value?.validate()
507
+    await formRef3.value?.validate()
508
+    await formRef4.value?.validate()
509
+  }catch (err){
510
+    Message.error('请仔细检查表单')
511
+    return
512
+  }
513
+
514
+  formLoading.value = true
515
+  try {
516
+    if (formType.value === 'create') {
517
+      formData.value.dwxxReqVO = dwxxReqVO.value
518
+      formData.value.kqxxReqVO = kqxxReqVO.value
519
+      formData.value.caxxReqVOList = caxxReqVOList.value
520
+      formData.value.cwxxReqVO = cwxxReqVO.value
521
+      await DeliveryWarehouseSelectApi.createByAll(formData.value)
522
+      Message.success(t('common.createSuccess'))
523
+    } else {
524
+      Message.success(t('common.updateSuccess'))
525
+    }
526
+    dialogVisible.value = false
527
+    emit('success')
528
+  } finally {
529
+    formLoading.value = false
530
+  }
531
+}
532
+
533
+// 监听器设置
534
+watch(() => kqxxReqVO.value.sheng, async (newValue) => {
535
+  kqxxReqVO.value.shi = ''
536
+  kqxxReqVO.value.xian = ''
537
+  if (newValue) {
538
+    shiList.value = await getDivision(newValue)
539
+  } else {
540
+    shiList.value = []
541
+  }
542
+})
543
+
544
+watch(() => kqxxReqVO.value.shi, async (newValue) => {
545
+  kqxxReqVO.value.xian = ''
546
+  if (newValue) {
547
+    xianList.value = await getDivision(newValue)
548
+  } else {
549
+    xianList.value = []
550
+  }
551
+})
552
+
553
+// 生命周期钩子
554
+onMounted(async () => {
555
+  shengList.value = await getDivision()
556
+})
557
+
558
+// 暴露方法
559
+defineExpose({ open })
560
+
561
+// 定义事件
562
+const emit = defineEmits(['success'])
563
+</script>
564
+<style>
565
+
566
+.arco-trigger-popup {
567
+  z-index: 2400 !important;
568
+}
569
+.el-date-editor.el-input, .el-date-editor.el-input__wrapper {
570
+  height: var(--el-input-height, var(--el-component-size));
571
+  width: var(--el-date-editor-width);
572
+  width: 100%;
573
+}
574
+</style>

+ 178 - 0
src/views/DeliveryWarehouse/DeliveryWarehouseList/compontents/Form.vue

@@ -0,0 +1,178 @@
1
+<template>
2
+  <Dialog v-model="dialogVisible" :title="dialogTitle" width="80%">
3
+    <div>
4
+      <el-table
5
+        v-loading="formLoading"
6
+        :border="true" :data="list" :header-cell-style="{
7
+            background: 'rgba(248,248,249,1)', color: 'rgb(79,79,79)', height: '45px'
8
+        }" class="mb-50px" @selection-change="handleSelectionChange">
9
+        <el-table-column :selectable="selectable" align="center" type="selection" width="60"/>
10
+        <el-table-column align="center" label="库区名称" prop="kqmc"/>
11
+        <el-table-column align="center" label="仓廒名称" prop="camc"/>
12
+        <el-table-column align="center" label="仓房类型" prop="cflx">
13
+          <template #default="scope">
14
+            <dict-tag :type="DICT_TYPE.SYSTEM_CFLX" :value="scope.row.cflx"/>
15
+          </template>
16
+        </el-table-column>
17
+        <el-table-column align="center" label="仓房状态" prop="cazt">
18
+          <template #default="scope">
19
+            <dict-tag :type="DICT_TYPE.SYSTEM_CAZT" :value="scope.row.cazt"/>
20
+          </template>
21
+        </el-table-column>
22
+        <el-table-column align="center" label="设计仓容(吨)" prop="sjcr"/>
23
+      </el-table>
24
+      <!--      <Pagination-->
25
+      <!--        style="margin-top: -30px;"-->
26
+      <!--        v-model:limit="queryParams.pageSize"-->
27
+      <!--        v-model:page="queryParams.pageNo"-->
28
+      <!--        :total="total"-->
29
+      <!--        @pagination="handleQuery"-->
30
+      <!--      />-->
31
+    </div>
32
+
33
+    <template #footer>
34
+      <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
35
+      <el-button @click="dialogVisible = false">取 消</el-button>
36
+    </template>
37
+  </Dialog>
38
+</template>
39
+<script lang="ts" setup>
40
+import { ref } from 'vue'
41
+import { useI18n } from 'vue-i18n'
42
+import { useMessage } from '@/hooks/web/useMessage'
43
+import { DeliveryWarehouseSelectApi } from '@/api/DeliveryWarehouse/DeliveryWarehouseSelect'
44
+import { DICT_TYPE } from '@/utils/dict'
45
+
46
+// 接口定义
47
+interface QueryParams {
48
+  pageNo: number
49
+  pageSize: number
50
+}
51
+
52
+interface TableRow {
53
+  id: number | string
54
+  kqmc: string // 库区名称
55
+  camc: string // 仓廒名称
56
+  cflx: string // 仓房类型
57
+  cazt: string // 仓房状态
58
+  sjcr: number // 设计仓容
59
+}
60
+
61
+interface SubmitData {
62
+  ids: (number | string)[]
63
+  yxcf: number
64
+}
65
+
66
+// 组件配置
67
+defineOptions({ name: 'DeliveryWarehouseSelectForm' })
68
+
69
+// 国际化
70
+const { t } = useI18n()
71
+const message = useMessage()
72
+
73
+// 组件状态
74
+const dialogVisible = ref(false)
75
+const dialogTitle = ref('仓房列表')
76
+const formLoading = ref(false)
77
+const formType = ref('')
78
+const list = ref<TableRow[]>([])
79
+// const total = ref(0)
80
+const multipleSelection = ref<TableRow[]>([])
81
+
82
+// 查询参数
83
+const queryParams = ref<QueryParams>({
84
+  pageNo: 1,
85
+  pageSize: 10
86
+})
87
+
88
+/**
89
+ * 打开弹窗
90
+ */
91
+const open = async (type: string, row?: any) => {
92
+  dialogVisible.value = true
93
+  formType.value = type
94
+  resetForm()
95
+
96
+  if (row) {
97
+    formLoading.value = true
98
+    try {
99
+      queryParams.value = row
100
+      await handleQuery()
101
+    } finally {
102
+      formLoading.value = false
103
+    }
104
+  }
105
+}
106
+
107
+/**
108
+ * 查询列表数据
109
+ */
110
+const handleQuery = async () => {
111
+  try {
112
+    list.value = await DeliveryWarehouseSelectApi.getDeliveryWarehouseSelectList(queryParams.value)
113
+  } catch (err) {
114
+    message.error('获取列表失败')
115
+    throw err
116
+  }
117
+}
118
+
119
+/**
120
+ * 重置表单
121
+ */
122
+const resetForm = () => {
123
+  list.value = []
124
+  multipleSelection.value = []
125
+}
126
+
127
+/**
128
+ * 判断行是否可选
129
+ */
130
+const selectable = (row: TableRow) => ![1, 2].includes(Number(row.id))
131
+
132
+/**
133
+ * 处理选择变更
134
+ */
135
+const handleSelectionChange = (val: TableRow[]) => {
136
+  multipleSelection.value = val
137
+}
138
+
139
+/**
140
+ * 提交表单
141
+ */
142
+const submitForm = async () => {
143
+  if (!multipleSelection.value.length) {
144
+    Message.warning('请选择仓房')
145
+    return
146
+  }
147
+
148
+  formLoading.value = true
149
+  try {
150
+    if (formType.value === 'create') {
151
+      const submitData: SubmitData = {
152
+        ids: multipleSelection.value.map(item => item.id),
153
+        yxcf: 1
154
+      }
155
+      await DeliveryWarehouseSelectApi.submitSelectList(submitData)
156
+      Message.success(t('common.createSuccess'))
157
+    } else {
158
+      Message.success(t('common.updateSuccess'))
159
+    }
160
+    dialogVisible.value = false
161
+    emit('success')
162
+  } finally {
163
+    formLoading.value = false
164
+  }
165
+}
166
+
167
+// 暴露方法
168
+defineExpose({ open })
169
+
170
+// 定义事件
171
+const emit = defineEmits(['success'])
172
+</script>
173
+
174
+<style lang="scss" scoped>
175
+.mb-50px {
176
+  margin-bottom: 50px;
177
+}
178
+</style>

+ 106 - 68
src/views/DeliveryWarehouse/DeliveryWarehouseList/index.vue

@@ -1,6 +1,13 @@
1 1
 <script lang="ts" setup>
2
-import { ref, watch, onMounted, onUnmounted } from 'vue'
3
-import { AdministrativeDivisionApi } from '@/api/system/administrativeDivision'
2
+import {onMounted, onUnmounted, ref, watch} from 'vue'
3
+import {AdministrativeDivisionApi} from '@/api/system/administrativeDivision'
4
+import {DeliveryWarehouseListApi} from "@/api/DeliveryWarehouse/DeliveryWarehouseList";
5
+import router from "@/router";
6
+import CreateForm
7
+  from "@/views/DeliveryWarehouse/DeliveryWarehouseList/compontents/CreateForm.vue";
8
+import DeliveryWarehouseSelectFrom
9
+  from "@/views/DeliveryWarehouse/DeliveryWarehouseList/compontents/Form.vue";
10
+import download from "@/utils/download";
4 11
 
5 12
 // 定义查询参数接口
6 13
 interface QueryParams {
@@ -22,14 +29,14 @@ interface QueryParams {
22 29
 
23 30
 // 定义列表项接口
24 31
 interface ListItem {
25
-  province: string // 省份
26
-  urbanArea: string // 市区
27
-  countyDistrict: string // 县区
28
-  enterpriseName: string // 企业名称
29
-  warehouseAreaName: string // 库区名称
30
-  totalWarehouseCapacity: string // 总仓容
31
-  numberOfWarehouseCapacity: string // 仓房数量
32
-  selectedWarehouse: string // 选中仓库
32
+  sheng: string // 省份
33
+  shi: string // 市区
34
+  xian: string // 县区
35
+  dwmc: string // 企业名称
36
+  kqmc: string // 库区名称
37
+  syndzzc: string // 总仓容
38
+  jlr: string // 上一年度净利润
39
+  yxcfnum: string // 上一年度净利润
33 40
 }
34 41
 
35 42
 // 定义行政区划接口
@@ -65,20 +72,9 @@ const loading = ref<boolean>(false)
65 72
 const total = ref<number>(0)
66 73
 const queryFormRef = ref()
67 74
 const refForm = ref()
68
-
75
+const refCreateForm = ref()
69 76
 // 列表数据 ref
70
-const list = ref<ListItem[]>([
71
-  {
72
-    province: '天津市',
73
-    urbanArea: '天津',
74
-    countyDistrict: '宝坻区',
75
-    enterpriseName: '天津利达粮油储运有限公司',
76
-    warehouseAreaName: '天津利达粮油库',
77
-    totalWarehouseCapacity: '4500',
78
-    numberOfWarehouseCapacity: '52',
79
-    selectedWarehouse: '8'
80
-  }
81
-])
77
+const list = ref<ListItem[]>([])
82 78
 
83 79
 // 地区数据 refs
84 80
 const shengList = ref<DivisionItem[]>([])
@@ -92,14 +88,33 @@ const stopWatches: (() => void)[] = []
92 88
  * 查询列表数据
93 89
  * @description 加载数据并更新loading状态
94 90
  */
95
-const handleQuery = () => {
91
+const handleQuery = async () => {
96 92
   loading.value = true
97 93
   // TODO: 实现实际的数据获取逻辑
98
-  setTimeout(() => {
94
+  try {
95
+    const data = await DeliveryWarehouseListApi.getDeliveryWarehouseListPage(queryParams.value);
96
+    list.value = data.list;
97
+    total.value = data.total;
98
+  } catch (err) {
99
+    console.error(err)
100
+  } finally {
99 101
     loading.value = false
100
-  }, 1000)
102
+  }
101 103
 }
102 104
 
105
+
106
+const handleExport = async () => {
107
+  // Loding.start()
108
+  try {
109
+    const excel = await DeliveryWarehouseListApi.exportDeliveryWarehouseList(queryParams.value);
110
+    download.excel(excel, '导出.xls')
111
+    Message.success('导出成功')
112
+  } catch (err) {
113
+    console.error(err)
114
+  } finally {
115
+    // Loding.start()
116
+  }
117
+}
103 118
 /**
104 119
  * 重置查询表单
105 120
  * @description 重置页码、表单字段并重新查询
@@ -115,11 +130,21 @@ const resetQuery = () => {
115 130
  * @description 用于导出功能
116 131
  * @param type - 操作类型
117 132
  */
118
-const openForm = (type: string) => {
119
-  refForm.value.open(type)
120
-  console.log(type)
133
+const openForm = async (row: any, type: number) => {
134
+  try {
135
+    refForm.value.open('create', {...row, yxcf: type})
136
+  } catch (err) {
137
+    console.error('打开表单失败:', err)
138
+  }
121 139
 }
122 140
 
141
+
142
+/**
143
+ * 打开创建表单
144
+ */
145
+const openCreateForm = (type: string) => {
146
+  refCreateForm.value.open(type)
147
+}
123 148
 /**
124 149
  * 获取行政区划数据
125 150
  * @description 根据区域代码获取下级行政区划
@@ -128,7 +153,7 @@ const openForm = (type: string) => {
128 153
  */
129 154
 const getDivision = async (areaCode?: string): Promise<DivisionItem[]> => {
130 155
   try {
131
-    return await AdministrativeDivisionApi.getList({ areaCode })
156
+    return await AdministrativeDivisionApi.getList({areaCode})
132 157
   } catch (err) {
133 158
     throw err
134 159
   }
@@ -161,7 +186,8 @@ stopWatches.push(
161 186
 
162 187
 // 生命周期钩子:组件挂载时获取省份数据
163 188
 onMounted(async () => {
164
-  shengList.value = await getDivision()
189
+  shengList.value = await getDivision();
190
+  await handleQuery();
165 191
 })
166 192
 
167 193
 // 组件卸载时清理
@@ -188,32 +214,35 @@ onUnmounted(() => {
188 214
     >
189 215
       <el-form-item label="所属省份" prop="shengCode">
190 216
         <el-select
191
-                   v-model="queryParams.shengCode"
192
-                   class="!w-240px"
193
-                   clearable
194
-                   placeholder="所属省份">
195
-          <el-option v-for="item in shengList" :key="item.id" :label="item.areaName" :value="item.areaCode"/>
217
+          v-model="queryParams.shengCode"
218
+          class="!w-240px"
219
+          clearable
220
+          placeholder="所属省份">
221
+          <el-option v-for="item in shengList" :key="item.id" :label="item.areaName"
222
+                     :value="item.areaCode"/>
196 223
 
197 224
         </el-select>
198 225
 
199 226
       </el-form-item>
200 227
       <el-form-item label="所属市区" prop="shiuCode">
201 228
         <el-select
202
-                   v-model="queryParams.shiCode"
203
-                   class="!w-240px"
204
-                   clearable
205
-                   placeholder="所属省份">
206
-          <el-option v-for="item in shiList" :key="item.id" :label="item.areaName" :value="item.areaCode"/>
229
+          v-model="queryParams.shiCode"
230
+          class="!w-240px"
231
+          clearable
232
+          placeholder="所属省份">
233
+          <el-option v-for="item in shiList" :key="item.id" :label="item.areaName"
234
+                     :value="item.areaCode"/>
207 235
 
208 236
         </el-select>
209 237
       </el-form-item>
210 238
       <el-form-item label="所属县区" prop="xianCode">
211 239
         <el-select
212
-                   v-model="queryParams.xianCode"
213
-                   class="!w-240px"
214
-                   clearable
215
-                   placeholder="所属省份">
216
-          <el-option v-for="item in xianList" :key="item.id" :label="item.areaName" :value="item.areaCode"/>
240
+          v-model="queryParams.xianCode"
241
+          class="!w-240px"
242
+          clearable
243
+          placeholder="所属省份">
244
+          <el-option v-for="item in xianList" :key="item.id" :label="item.areaName"
245
+                     :value="item.areaCode"/>
217 246
 
218 247
         </el-select>
219 248
       </el-form-item>
@@ -226,17 +255,9 @@ onUnmounted(() => {
226 255
       <el-form-item label="库区名称" prop="kqmc">
227 256
         <el-input
228 257
           v-model="queryParams.kqmc"
229
-          placeholder="所属市区"
230
-          clearable
231
-          class="!w-240px"
232
-        />
233
-      </el-form-item>
234
-      <el-form-item label="仓房仓容" prop="cfcr">
235
-        <el-input
236
-          v-model="queryParams.cfcr"
237 258
           class="!w-240px"
238 259
           clearable
239
-          placeholder="仓房仓容"
260
+          placeholder="所属市区"
240 261
         />
241 262
       </el-form-item>
242 263
       <el-form-item>
@@ -251,11 +272,24 @@ onUnmounted(() => {
251 272
         <el-button
252 273
           plain
253 274
           type="success"
254
-          @click="openForm('create')"
275
+          @click="handleExport"
255 276
         >
256 277
           <Icon class="mr-5px" icon="ep:download"/>
257 278
           导出
258 279
         </el-button>
280
+        <el-button
281
+          v-hasPermi="['coding:dwxx:create']"
282
+          plain
283
+          type="primary"
284
+          @click="openCreateForm('create')"
285
+        >
286
+          <Icon class="mr-5px" icon="ep:plus"/>
287
+          新增库区
288
+        </el-button>
289
+        <el-button @click="router.push('/DeliveryWarehouse/select')">
290
+          <Icon class="mr-5px" icon="ep:refresh"/>
291
+          返回
292
+        </el-button>
259 293
       </el-form-item>
260 294
     </el-form>
261 295
     <el-divider/>
@@ -266,18 +300,20 @@ onUnmounted(() => {
266 300
     >
267 301
       <el-table-column align="center" fixed="left" type="selection" width="60"/>
268 302
       <el-table-column align="center" fixed="left" label="序号" type="index" width="60"/>
269
-      <el-table-column align="center" label="所属省份" prop="province" width="180"/>
270
-      <el-table-column align="center" label="所属市区" prop="urbanArea" width="180"/>
271
-      <el-table-column align="center" label="所属县区" prop="countyDistrict" width="180"/>
272
-      <el-table-column align="center" label="企业名称" prop="enterpriseName" width="280"/>
273
-      <el-table-column align="center" label="库区名称" prop="warehouseAreaName" width="280"/>
274
-      <el-table-column align="center" label="仓房数量(个)" prop="warehouseAreaName" width="280"/>
275
-      <el-table-column align="center" label="总资产(万元)" prop="warehouseAreaName" width="280"/>
276
-      <el-table-column align="center" label="上一年度净利润(万元)" prop="warehouseAreaName" width="280"/>
277
-      <el-table-column align="center" label="库区联系人" prop="warehouseAreaName" width="280"/>
278
-      <el-table-column align="center" label="联系电话" prop="warehouseAreaName" width="280"/>
279
-      <el-table-column align="center" label="核验人员" prop="warehouseAreaName" width="280"/>
280
-      <el-table-column align="center" label="查看状态" prop="warehouseAreaName" width="280"/>
303
+      <el-table-column align="center" label="所属省份" prop="sheng" width="180"/>
304
+      <el-table-column align="center" label="所属市区" prop="shi" width="180"/>
305
+      <el-table-column align="center" label="所属县区" prop="xian" width="180"/>
306
+      <el-table-column align="center" label="企业名称" prop="dwmc" width="280"/>
307
+      <el-table-column align="center" label="库区名称" prop="kqmc" width="280"/>
308
+      <el-table-column align="center" label="总资产(万元)" prop="syndzzc" width="280"/>
309
+      <el-table-column align="center" label="上一年度净利润(万元)" prop="jlr" width="280"/>
310
+      <el-table-column align="center" label="备选交收仓(个)" prop="yxcfnum" width="280">
311
+         <template #default="scope">
312
+           <div @click="openForm(scope.row,2)" > {{scope.yxcfnum}}</div>
313
+         </template>
314
+      </el-table-column>
315
+      <el-table-column align="center" label="库区联系人" prop="name" width="280"/>
316
+      <el-table-column align="center" label="联系电话" prop="phone" width="280"/>
281 317
     </el-table>
282 318
     <Pagination
283 319
       v-model:limit="queryParams.pageSize"
@@ -285,6 +321,8 @@ onUnmounted(() => {
285 321
       :total="total"
286 322
       @pagination="handleQuery"
287 323
     />
324
+    <DeliveryWarehouseSelectFrom ref="refForm" @success="handleQuery"/>
325
+    <CreateForm ref="refCreateForm" @success="handleQuery"/>
288 326
   </ContentWrap>
289 327
 </template>
290 328
 

+ 31 - 8
src/views/DeliveryWarehouse/DeliveryWarehouseSelect/compontents/CreateForm.vue

@@ -31,7 +31,7 @@
31 31
     </template>
32 32
     <ContentWrap>
33 33
       <el-form
34
-        v-if="active === '单位信息'" ref="formRef1" :model="dwxxReqVO" :rules="formRules1"
34
+        v-show="active === '单位信息'" ref="formRef1" :model="dwxxReqVO" :rules="formRules1"
35 35
                label-width="180">
36 36
         <el-row>
37 37
           <el-col :span="8">
@@ -92,7 +92,7 @@
92 92
         </el-row>
93 93
       </el-form>
94 94
       <el-form
95
-        v-if="active === '库区信息'" ref="formRef2" :model="kqxxReqVO" :rules="formRules2"
95
+        v-show="active === '库区信息'" ref="formRef2" :model="kqxxReqVO" :rules="formRules2"
96 96
                label-width="180">
97 97
         <el-row>
98 98
           <el-col :span="8">
@@ -184,7 +184,7 @@
184 184
         </el-row>
185 185
       </el-form>
186 186
       <el-form
187
-        v-if="active === '仓房信息'" ref="formRef3" :model="caxxReqVOList"
187
+        v-show="active === '仓房信息'" ref="formRef3" :model="caxxReqVOList"
188 188
                :rules="formRules3"
189 189
                label-width="180">
190 190
         <a-table :columns="tableColumns" :data="caxxReqVOList">
@@ -230,7 +230,7 @@
230 230
         </a-table>
231 231
       </el-form>
232 232
       <el-form
233
-        v-if="active === '财务信息'" ref="formRef4" :model="cwxxReqVO" :rules="formRules4"
233
+        v-show="active === '财务信息'" ref="formRef4" :model="cwxxReqVO" :rules="formRules4"
234 234
                label-width="180">
235 235
         <el-row>
236 236
           <el-col :span="8">
@@ -437,10 +437,22 @@ const open = async (type: string, id?: number) => {
437 437
  * 重置表单
438 438
  */
439 439
 const resetForm = () => {
440
-  formRef1.value?.resetFields()
441
-  formRef2.value?.resetFields()
442
-  formRef3.value?.resetFields()
443
-  formRef4.value?.resetFields()
440
+  formRef1.value?.resetFields();
441
+  formRef2.value?.resetFields();
442
+  formRef3.value?.resetFields();
443
+  formRef4.value?.resetFields();
444
+  dwxxReqVO.value = {};
445
+  kqxxReqVO.value = {};
446
+  caxxReqVOList.value = [];
447
+  cwxxReqVO.value = {
448
+    cwxxYearList: [
449
+      { cn: '2023', zfz: '', yysr: '', jlr: '' },
450
+      { cn: '2022', zfz: '', yysr: '', jlr: '' },
451
+      { cn: '2021', zfz: '', yysr: '', jlr: '' }
452
+    ],
453
+    sfgykg: 0,
454
+    syndzzc: ''
455
+  }
444 456
 }
445 457
 
446 458
 /**
@@ -478,6 +490,17 @@ const getDivision = async (areaCode?: string): Promise<AreaOption[]> => {
478 490
  * 提交表单
479 491
  */
480 492
 const submitForm = async () => {
493
+  //校验表单
494
+  try {
495
+    await formRef1.value?.validate()
496
+    await formRef2.value?.validate()
497
+    await formRef3.value?.validate()
498
+    await formRef4.value?.validate()
499
+  }catch (err){
500
+    Message.error('请仔细检查表单')
501
+    return
502
+  }
503
+
481 504
   formLoading.value = true
482 505
   try {
483 506
     if (formType.value === 'create') {

+ 1 - 1
src/views/DeliveryWarehouse/DeliveryWarehouseSelect/index.vue

@@ -283,7 +283,7 @@ onUnmounted(() => {
283 283
               重置
284 284
             </el-button>
285 285
             <el-button
286
-              v-hasPermi="['system:user:create']"
286
+              v-hasPermi="['coding:dwxx:create']"
287 287
               plain
288 288
               type="primary"
289 289
               @click="openCreateForm('create')"

+ 1 - 1
tsconfig.json

@@ -39,5 +39,5 @@
39 39
     "src/types/auto-imports.d.ts",
40 40
     "src/types/auto-components.d.ts"
41 41
   ],
42
-  "exclude": ["dist", "target", "node_modules"]
42
+  "exclude": ["dist", "target", "node_modules","dist*"]
43 43
 }