aXin-0810 преди 1 година
родител
ревизия
97f8ba24cf
променени са 1 файла, в които са добавени 666 реда и са изтрити 548 реда
  1. 666 548
      src/views/salesPurchasing/commercialMaterial/index.vue

+ 666 - 548
src/views/salesPurchasing/commercialMaterial/index.vue

@@ -1,29 +1,41 @@
 <template>
-	<zj-tab-page ref="tabPage" :defaultActives="[{ key: 'list', label: $route.meta.title + '-列表', essential: true }]">
-		<template slot-scope="{activeKey, data}">
-			<div :style="{
-				width: '100%',
-				height: activeKey == 'list' ? '100%' : '0px',
-				overflow: 'hidden'
-			}">
-				<template-page ref="pageRef" :get-list="getList" :table-attributes="tableAttributes"
-					:table-events="tableEvents" :options-evens-group="optionsEvensGroup" :moreParameters="moreParameters"
-					:column-parsing="columnParsing" :exportList="exportList" :operation="operation()">
-				</template-page>
-			</div>
-			<div v-if="~['add', 'edit'].indexOf(activeKey)" style="box-sizing: border-box;padding: 16px;">
-				<zj-form-container ref="formRef" :form-data="formData" :form-attributes="{ size: 'mini' }">
-					<zj-form-module title="" label-width="100px" :form-data="formData" :form-items="formItems">
-						<div slot="internal-bottom"
-							style="text-align: right;margin-bottom: 20px;box-sizing: border-box;padding-right: 10px;">
-							<el-button size="mini" @click="data.removeTab()">取消</el-button>
-							<el-button size="mini" type="primary" @click="queding(data.removeTab)">确定</el-button>
-						</div>
-					</zj-form-module>
-				</zj-form-container>
-			</div>
-		</template>
-	</zj-tab-page>
+  <zj-tab-page ref="tabPage" :defaultActives="[{ key: 'list', label: $route.meta.title + '-列表', essential: true }]">
+    <template slot-scope="{ activeKey, data }">
+      <div
+        :style="{
+          width: '100%',
+          height: activeKey == 'list' ? '100%' : '0px',
+          overflow: 'hidden'
+        }"
+      >
+        <template-page
+          ref="pageRef"
+          :get-list="getList"
+          :table-attributes="tableAttributes"
+          :table-events="tableEvents"
+          :options-evens-group="optionsEvensGroup"
+          :moreParameters="moreParameters"
+          :column-parsing="columnParsing"
+          :exportList="exportList"
+          :operation="operation()"
+        >
+        </template-page>
+      </div>
+      <div v-if="~['add', 'edit'].indexOf(activeKey)" style="box-sizing: border-box; padding: 16px">
+        <zj-form-container ref="formRef" :form-data="formData" :form-attributes="{ size: 'mini' }">
+          <zj-form-module title="" label-width="100px" :form-data="formData" :form-items="formItems">
+            <div
+              slot="internal-bottom"
+              style="text-align: right; margin-bottom: 20px; box-sizing: border-box; padding-right: 10px"
+            >
+              <el-button size="mini" @click="data.removeTab()">取消</el-button>
+              <el-button size="mini" type="primary" @click="queding(data.removeTab)">确定</el-button>
+            </div>
+          </zj-form-module>
+        </zj-form-container>
+      </div>
+    </template>
+  </zj-tab-page>
 </template>
 
 <script>
@@ -31,537 +43,643 @@ import TemplatePage from '@/components/template/template-page-1.vue'
 import import_mixin from '@/components/template/import_mixin.js'
 import operation_mixin from '@/components/template/operation_mixin.js'
 import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
-import { getBrandList } from "@/api/miniapp";
+import { getBrandList } from '@/api/miniapp'
 import { getClassifyList } from '@/api/goods'
-import { goodsMaterialList, goodsMaterialListExport, goodsMaterialAdd, goodsMaterialUpdate, goodsMaterialBatchUpdateStatus, goodsMaterialItemCount, goodsMaterialDetail } from "@/api/commercialMaterial.js"
+import {
+  goodsMaterialList,
+  goodsMaterialListExport,
+  goodsMaterialAdd,
+  goodsMaterialUpdate,
+  goodsMaterialBatchUpdateStatus,
+  goodsMaterialItemCount,
+  goodsMaterialDetail
+} from '@/api/commercialMaterial.js'
 export default {
-	components: { TemplatePage },
-	mixins: [import_mixin, operation_mixin],
-	data() {
-		return {
-			// 表格属性
-			tableAttributes: {
-				// 启用勾选列
-				selectColumn: true
-			},
-			// 表格事件
-			tableEvents: {
-				'selection-change': this.selectionChange
-			},
-			// 勾选选中行
-			recordSelected: [],
-			formData: {
-				companyWechatId: "",
-				brandId: "",
-				mainId: "",
-				smallId: "",
-				seriesName: "",
-				goodsName: "",
-				specsName: "",
-				state: "",
-				unit: "",
-				isVirtyual: "",
-				remark: "",
-				items: []
-			},
-			isEditIndex: -1,
-			brandList: [],
-			ClassifyList: []
-		}
-	},
-	computed: {
-		// 事件组合
-		optionsEvensGroup() {
-			return [
-				[
-					[
-						this.optionsEvensAuth("add", {
-							click: () => {
-								this.$refs.tabPage.addTab({
-									activeKey: "add",
-									key: "add",
-									label: "新增",
-									triggerEvent: () => {
-										this.openForm()
-									}
-								})
-							}
-						}),
-					],
-					// [
-					// 	this.optionsEvensAuth("pilqy", {
-					// 		click: () => {
+  components: { TemplatePage },
+  mixins: [import_mixin, operation_mixin],
+  data() {
+    return {
+      // 表格属性
+      tableAttributes: {
+        // 启用勾选列
+        selectColumn: true
+      },
+      // 表格事件
+      tableEvents: {
+        'selection-change': this.selectionChange
+      },
+      // 勾选选中行
+      recordSelected: [],
+      formData: {
+        companyWechatId: '',
+        brandId: '',
+        mainId: '',
+        smallId: '',
+        seriesName: '',
+        goodsName: '',
+        specsName: '',
+        state: '',
+        unit: '',
+        isVirtyual: '',
+        remark: '',
+        items: []
+      },
+      isEditIndex: -1,
+      brandList: [],
+      ClassifyList: []
+    }
+  },
+  computed: {
+    // 事件组合
+    optionsEvensGroup() {
+      return [
+        [
+          [
+            this.optionsEvensAuth('add', {
+              click: () => {
+                this.$refs.tabPage.addTab({
+                  activeKey: 'add',
+                  key: 'add',
+                  label: '新增',
+                  triggerEvent: () => {
+                    this.openForm()
+                  }
+                })
+              }
+            })
+          ]
+          // [
+          // 	this.optionsEvensAuth("pilqy", {
+          // 		click: () => {
 
-					// 		}
-					// 	})
-					// ],
-					// [
-					// 	this.optionsEvensAuth("piljy", {
-					// 		click: () => {
+          // 		}
+          // 	})
+          // ],
+          // [
+          // 	this.optionsEvensAuth("piljy", {
+          // 		click: () => {
 
-					// 		}
-					// 	})
-					// ]
-				]
-			]
-		},
-		// 更多参数
-		moreParameters() {
-			return []
-		},
-		formItems() {
-			return [
-				{
-					name: 'slot-component',
-					md: 12,
-					formItemAttributes: {
-						label: '所属商户',
-					},
-					render: (h, { props }) => {
-						return <el-input disabled={true} value={JSON.parse(localStorage.getItem('greemall_user')).companyName} />
-					}
-				},
-				{
-					name: 'el-select',
-					md: 6,
-					options: this.brandList,
-					attributes: {
-						disabled: false,
-						placeholder: '请选择',
-						clearable: true,
-						filterable: true
-					},
-					formItemAttributes: {
-						label: '选择品牌',
-						prop: 'brandId',
-						rules: [...required]
-					},
-					events: {
-						change: (val) => {
-							this.formData.brandName = this.brandList.find(item => item.value === val)?.label || ""
-						}
-					}
-				},
-				{
-					name: 'el-select',
-					md: 6,
-					options: this.ClassifyList.map(item => ({ label: item.name, value: item.categoryId })),
-					attributes: {
-						disabled: false,
-						placeholder: '请选择',
-						clearable: true,
-						filterable: true
-					},
-					formItemAttributes: {
-						label: '选择大类',
-						prop: 'mainId',
-						rules: [...required]
-					},
-					events: {
-						change: (val) => {
-							this.formData.mainName = this.ClassifyList.map(item => ({ label: item.name, value: item.categoryId })).find(item => item.value === val)?.label || ""
-							this.formData.smallId = ""
-						}
-					}
-				},
-				{
-					name: 'el-select',
-					md: 6,
-					options: (this.ClassifyList.find(item => item.categoryId === this.formData.mainId)?.children || [])?.map(item => ({ label: item.name, value: item.categoryId })),
-					attributes: {
-						disabled: false,
-						placeholder: '请选择',
-						clearable: true,
-						filterable: true
-					},
-					formItemAttributes: {
-						label: '选择小类',
-						prop: 'smallId',
-						rules: [...required]
-					},
-					events: {
-						change: (val) => {
-							this.formData.smallName = (this.ClassifyList.find(item => item.categoryId === this.formData.mainId)?.children || [])?.map(item => ({ label: item.name, value: item.categoryId })).find(item => item.value === val)?.label || ""
-						}
-					}
-				},
-				{
-					name: 'el-input',
-					md: 6,
-					attributes: {
-						disabled: false,
-						placeholder: '请输入'
-					},
-					formItemAttributes: {
-						label: '系列名称',
-						prop: 'seriesName'
-					},
-
-				},
-				{
-					name: 'el-input',
-					md: 6,
-					attributes: {
-						disabled: false,
-						placeholder: '请输入'
-					},
-					formItemAttributes: {
-						label: '商品名称',
-						prop: 'goodsName',
-						rules: [...required]
-					},
-
-				},
-				{
-					name: 'el-input',
-					md: 6,
-					attributes: {
-						disabled: false,
-						placeholder: '请输入'
-					},
-					formItemAttributes: {
-						label: '规格型号',
-						prop: 'specsName',
-						rules: [...required]
-					},
-
-				},
-				{
-					md: 6,
-					name: 'el-radio',
-					options: [{ label: "有效", value: "ON" }, { label: "无效", value: "OFF" }],
-					attributes: {},
-					formItemAttributes: {
-						label: '状态',
-						prop: 'state',
-						rules: [...required]
-					},
-				},
-				{
-					md: 6,
-					name: 'el-radio',
-					options: [{ label: "整套", value: "C" }, { label: "单个", value: "I" }],
-					attributes: {},
-					formItemAttributes: {
-						label: '单位',
-						prop: 'unit',
-						rules: [...required]
-					},
-				},
-				{
-					md: 6,
-					name: 'el-radio',
-					options: [{ label: "是", value: "YES" }, { label: "否", value: "NO" }],
-					attributes: {},
-					formItemAttributes: {
-						label: '虚拟商品',
-						prop: 'isVirtyual',
-						rules: [...required]
-					},
-				},
-				...(() => {
-					if (this.formData.isVirtyual === "NO") {
-						this.formData.items = []
-						this.isEditIndex = -1
-						return [{
-							name: 'slot-component',
-							md: 24,
-							formItemAttributes: {
-								label: '子物料',
-								prop: 'items',
-								rules: [...required]
-							},
-							render: (h, { props }) => {
-								return (
-									<div>
-										<el-button size="mini" type="primary" onClick={() => {
-											if (this.isEditIndex > -1) {
-												this.$refs.formRef.validateField(this.getVfyKey(this.isEditIndex), (valid, invalidFields, errLabels) => {
-													if (valid && this.eidtItems()) {
-														this.formData.items.unshift({
-															"name": "",
-															"qty": "",
-															"type": "",
-															"uniqueCode": "",
-															"unit": ""
-														})
-														this.isEditIndex = 0
-													}
-												})
-											} else if (this.eidtItems()) {
-												this.formData.items.unshift({
-													"name": "",
-													"qty": "",
-													"type": "",
-													"uniqueCode": "",
-													"unit": ""
-												})
-												this.isEditIndex = 0
-											}
-										}}>新增</el-button>
-										<zj-table
-											columns={this.productColumns}
-											table-data={this.formData.items}
-										/>
-									</div>
-								)
-							}
-						}]
-					}
-					return []
-				})(),
-				{
-					name: 'el-input',
-					md: 24,
-					attributes: {
-						disabled: false,
-						type: 'textarea',
-						rows: 3,
-						placeholder: '请输入'
-					},
-					formItemAttributes: {
-						label: '备注',
-						prop: 'remark',
-						rules: []
-					}
-				}
-			]
-		},
-		productColumns() {
-			return [
-				{
-					columnAttributes: {
-						label: '物料类型',
-						prop: 'type'
-					},
-					render: (h, { row, column, index }) => {
-						return <div class="redbordererr">
-							<el-form-item label="" label-width="0px" prop={`items.${index}.${column.columnAttributes.prop}`} rules={required}>
-								<el-select
-									disabled={this.isEditIndex !== index}
-									value={row[column.columnAttributes.prop]}
-									onInput={(val) => { row[column.columnAttributes.prop] = val }}
-									placeholder="请选择">
-									{[{ value: "INSIDE", label: "内机" }, { value: "OUT", label: "外机" }, { value: "PARTS", label: "配件" }].map((item, index_) => <el-option key={index_} label={item.label} value={item.value}></el-option>)}
-								</el-select>
-							</el-form-item>
-						</div>
-					}
-				},
-				{
-					columnAttributes: {
-						label: '名称',
-						prop: 'name'
-					},
-					render: (h, { row, column, index }) => {
-						return <div class="redbordererr">
-							<el-form-item label="" label-width="0px" prop={`items.${index}.${column.columnAttributes.prop}`} rules={required}>
-								<el-input
-									disabled={this.isEditIndex !== index}
-									value={row[column.columnAttributes.prop]}
-									onInput={(val) => { row[column.columnAttributes.prop] = val }}
-									placeholder="请输入内容"
-								>
-								</el-input>
-							</el-form-item>
-						</div>
-					}
-				},
-				{
-					columnAttributes: {
-						label: '是否一物一码',
-						prop: 'uniqueCode'
-					},
-					render: (h, { row, column, index }) => {
-						return <div class="redbordererr">
-							<el-form-item label="" label-width="0px" prop={`items.${index}.${column.columnAttributes.prop}`} rules={required}>
-								<el-select
-									disabled={this.isEditIndex !== index}
-									value={row[column.columnAttributes.prop]}
-									onInput={(val) => { row[column.columnAttributes.prop] = val }}
-									placeholder="请选择">
-									{[{ label: "是", value: "YES" }, { label: "否", value: "NO" }].map((item, index_) => <el-option key={index_} label={item.label} value={item.value}></el-option>)}
-								</el-select>
-							</el-form-item>
-						</div>
-					}
-				},
-				{
-					columnAttributes: {
-						label: '数量',
-						prop: 'qty'
-					},
-					render: (h, { row, column, index }) => {
-						return <div class="redbordererr">
-							<el-form-item label="" label-width="0px" prop={`items.${index}.${column.columnAttributes.prop}`} rules={required}>
-								<el-input
-									disabled={this.isEditIndex !== index}
-									value={row[column.columnAttributes.prop]}
-									onInput={(val) => { row[column.columnAttributes.prop] = val }}
-									placeholder="请输入内容"
-								>
-								</el-input>
-							</el-form-item>
-						</div>
-					}
-				},
-				{
-					columnAttributes: {
-						label: '单位',
-						prop: 'unit'
-					},
-					render: (h, { row, column, index }) => {
-						return <div class="redbordererr">
-							<el-form-item label="" label-width="0px" prop={`items.${index}.${column.columnAttributes.prop}`} rules={required}>
-								<el-input
-									disabled={this.isEditIndex !== index}
-									value={row[column.columnAttributes.prop]}
-									onInput={(val) => { row[column.columnAttributes.prop] = val }}
-									placeholder="请输入内容"
-								>
-								</el-input>
-							</el-form-item>
-						</div>
-					}
-				},
-				{
-					columnAttributes: {
-						label: '操作',
-					},
-					render: (h, { row, column, index }) => {
-						return <div style="padding-left:10px">
-							<el-button type="text" onClick={() => {
-								this.delProduct(row, index)
-							}}>删除</el-button>
-							{this.isEditIndex == index && <el-button type="text" onClick={() => {
-								this.$refs.formRef.validateField(this.getVfyKey(this.isEditIndex), (valid, invalidFields, errLabels) => {
-									if (valid && this.eidtItems()) {
-										this.isEditIndex = -1
-									}
-								})
-							}}>确定</el-button>}
-							{this.isEditIndex == -1 && <el-button type="text" onClick={() => {
-								this.isEditIndex = index
-							}}>编辑</el-button>}
-						</div>
-					}
-				},
-			]
-		},
-	},
-	methods: {
-		// 列表请求函数
-		getList: goodsMaterialList,
-		// 列表导出函数
-		exportList: goodsMaterialListExport,
-		// 表格列解析渲染数据更改
-		columnParsing(item, defaultData) {
-			return defaultData
-		},
-		// 监听勾选变化
-		selectionChange(data) {
-			this.recordSelected = data
-		},
-		getVfyKey(index, bool = true) {
-			return [
-				...(() => {
-					if (bool) {
-						return [
-							`items`,
-						]
-					}
-					return []
-				})(),
-				...(() => {
-					if (index > -1) {
-						return [
-							`items.${index}.name`,
-							`items.${index}.type`,
-							`items.${index}.uniqueCode`,
-							`items.${index}.qty`,
-							`items.${index}.unit`,
-						]
-					}
-					return []
-				})()
-			]
-		},
-		eidtItems() {
-			try {
-				this.formData.items.map((item, index) => {
-					this.formData.items.map((item2, index2) => {
-						if (index !== index2 && `${item.type}_${item.name}` == `${item2.type}_${item2.name}`) {
-							throw new Error('');
-						}
-					})
-				})
-			} catch (error) {
-				this.$message.warning('子物料重复')
-				return false
-			}
-			return true
-		},
-		operation() {
-			return this.operationBtn({
-				edit: {
-					click: ({ row, index, column }) => {
-						this.$refs.tabPage.addTab({
-							activeKey: "edit",
-							key: "edit",
-							label: "编辑",
-							triggerEvent: () => {
-								this.openForm()
-								goodsMaterialDetail({ id: row.id }).then(res => {
-									this.formData = res.data
-								})
-							}
-						})
-					}
-				},
-
-			})
-		},
-		openForm() {
-			this.formCancel()
-			getBrandList({
-				status: true
-			}).then(res => {
-				this.brandList = res.data.map(item => ({
-					label: item.brandName,
-					value: item.id
-				}))
-			})
-			getClassifyList({
-				type: 2,
-				status: true
-			}).then(res => {
-				this.ClassifyList = res.data
-			})
-		},
-		formCancel() {
-			this.$refs?.formRef?.resetFields()
-			this.$data.formData = this.$options.data().formData
-		},
-		queding(removeTab) {
-			this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
-				if (valid && this.eidtItems()) {
-					([goodsMaterialAdd, goodsMaterialUpdate])[this.formData.id ? 1 : 0](this.formData).then(res => {
-						this.$message({
-							type: 'success',
-							message: '保存成功'
-						})
-						this.$refs.pageRef.refreshList()
-						removeTab()
-					})
-				}
-			})
-		}
-	}
+          // 		}
+          // 	})
+          // ]
+        ]
+      ]
+    },
+    // 更多参数
+    moreParameters() {
+      return []
+    },
+    formItems() {
+      return [
+        {
+          name: 'slot-component',
+          md: 12,
+          formItemAttributes: {
+            label: '所属商户'
+          },
+          render: (h, { props }) => {
+            return <el-input disabled={true} value={JSON.parse(localStorage.getItem('greemall_user')).companyName} />
+          }
+        },
+        {
+          name: 'el-select',
+          md: 6,
+          options: this.brandList,
+          attributes: {
+            disabled: false,
+            placeholder: '请选择',
+            clearable: true,
+            filterable: true
+          },
+          formItemAttributes: {
+            label: '选择品牌',
+            prop: 'brandId',
+            rules: [...required]
+          },
+          events: {
+            change: val => {
+              this.formData.brandName = this.brandList.find(item => item.value === val)?.label || ''
+            }
+          }
+        },
+        {
+          name: 'el-select',
+          md: 6,
+          options: this.ClassifyList.map(item => ({ label: item.name, value: item.categoryId })),
+          attributes: {
+            disabled: false,
+            placeholder: '请选择',
+            clearable: true,
+            filterable: true
+          },
+          formItemAttributes: {
+            label: '选择大类',
+            prop: 'mainId',
+            rules: [...required]
+          },
+          events: {
+            change: val => {
+              this.formData.mainName =
+                this.ClassifyList.map(item => ({ label: item.name, value: item.categoryId })).find(
+                  item => item.value === val
+                )?.label || ''
+              this.formData.smallId = ''
+            }
+          }
+        },
+        {
+          name: 'el-select',
+          md: 6,
+          options: (this.ClassifyList.find(item => item.categoryId === this.formData.mainId)?.children || [])?.map(
+            item => ({ label: item.name, value: item.categoryId })
+          ),
+          attributes: {
+            disabled: false,
+            placeholder: '请选择',
+            clearable: true,
+            filterable: true
+          },
+          formItemAttributes: {
+            label: '选择小类',
+            prop: 'smallId',
+            rules: [...required]
+          },
+          events: {
+            change: val => {
+              this.formData.smallName =
+                (this.ClassifyList.find(item => item.categoryId === this.formData.mainId)?.children || [])
+                  ?.map(item => ({ label: item.name, value: item.categoryId }))
+                  .find(item => item.value === val)?.label || ''
+            }
+          }
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: {
+            disabled: false,
+            placeholder: '请输入'
+          },
+          formItemAttributes: {
+            label: '系列名称',
+            prop: 'seriesName'
+          }
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: {
+            disabled: false,
+            placeholder: '请输入'
+          },
+          formItemAttributes: {
+            label: '商品名称',
+            prop: 'goodsName',
+            rules: [...required]
+          }
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: {
+            disabled: false,
+            placeholder: '请输入'
+          },
+          formItemAttributes: {
+            label: '规格型号',
+            prop: 'specsName',
+            rules: [...required]
+          }
+        },
+        {
+          md: 6,
+          name: 'el-radio',
+          options: [
+            { label: '有效', value: 'ON' },
+            { label: '无效', value: 'OFF' }
+          ],
+          attributes: {},
+          formItemAttributes: {
+            label: '状态',
+            prop: 'state',
+            rules: [...required]
+          }
+        },
+        {
+          md: 6,
+          name: 'el-radio',
+          options: [
+            { label: '整套', value: 'C' },
+            { label: '单个', value: 'I' }
+          ],
+          attributes: {},
+          formItemAttributes: {
+            label: '单位',
+            prop: 'unit',
+            rules: [...required]
+          }
+        },
+        {
+          md: 6,
+          name: 'el-radio',
+          options: [
+            { label: '是', value: 'YES' },
+            { label: '否', value: 'NO' }
+          ],
+          attributes: {},
+          formItemAttributes: {
+            label: '虚拟商品',
+            prop: 'isVirtyual',
+            rules: [...required]
+          }
+        },
+        ...(() => {
+          if (this.formData.isVirtyual === 'NO') {
+            this.isEditIndex = -1
+            return [
+              {
+                name: 'slot-component',
+                md: 24,
+                formItemAttributes: {
+                  label: '子物料',
+                  prop: 'items',
+                  rules: [...required]
+                },
+                render: (h, { props }) => {
+                  return (
+                    <div>
+                      <el-button
+                        size="mini"
+                        type="primary"
+                        onClick={() => {
+                          if (this.isEditIndex > -1) {
+                            this.$refs.formRef.validateField(
+                              this.getVfyKey(this.isEditIndex),
+                              (valid, invalidFields, errLabels) => {
+                                if (valid && this.eidtItems()) {
+                                  this.formData.items.unshift({
+                                    name: '',
+                                    qty: '',
+                                    type: '',
+                                    uniqueCode: '',
+                                    unit: ''
+                                  })
+                                  this.isEditIndex = 0
+                                }
+                              }
+                            )
+                          } else if (this.eidtItems()) {
+                            this.formData.items.unshift({
+                              name: '',
+                              qty: '',
+                              type: '',
+                              uniqueCode: '',
+                              unit: ''
+                            })
+                            this.isEditIndex = 0
+                          }
+                        }}
+                      >
+                        新增
+                      </el-button>
+                      <zj-table columns={this.productColumns} table-data={this.formData.items} />
+                    </div>
+                  )
+                }
+              }
+            ]
+          }
+          return []
+        })(),
+        {
+          name: 'el-input',
+          md: 24,
+          attributes: {
+            disabled: false,
+            type: 'textarea',
+            rows: 3,
+            placeholder: '请输入'
+          },
+          formItemAttributes: {
+            label: '备注',
+            prop: 'remark',
+            rules: []
+          }
+        }
+      ]
+    },
+    productColumns() {
+      return [
+        {
+          columnAttributes: {
+            label: '物料类型',
+            prop: 'type'
+          },
+          render: (h, { row, column, index }) => {
+            return (
+              <div class="redbordererr">
+                <el-form-item
+                  label=""
+                  label-width="0px"
+                  prop={`items.${index}.${column.columnAttributes.prop}`}
+                  rules={required}
+                >
+                  <el-select
+                    disabled={this.isEditIndex !== index}
+                    value={row[column.columnAttributes.prop]}
+                    onInput={val => {
+                      row[column.columnAttributes.prop] = val
+                    }}
+                    placeholder="请选择"
+                  >
+                    {[
+                      { value: 'INSIDE', label: '内机' },
+                      { value: 'OUT', label: '外机' },
+                      { value: 'PARTS', label: '配件' }
+                    ].map((item, index_) => (
+                      <el-option key={index_} label={item.label} value={item.value}></el-option>
+                    ))}
+                  </el-select>
+                </el-form-item>
+              </div>
+            )
+          }
+        },
+        {
+          columnAttributes: {
+            label: '名称',
+            prop: 'name'
+          },
+          render: (h, { row, column, index }) => {
+            return (
+              <div class="redbordererr">
+                <el-form-item
+                  label=""
+                  label-width="0px"
+                  prop={`items.${index}.${column.columnAttributes.prop}`}
+                  rules={required}
+                >
+                  <el-input
+                    disabled={this.isEditIndex !== index}
+                    value={row[column.columnAttributes.prop]}
+                    onInput={val => {
+                      row[column.columnAttributes.prop] = val
+                    }}
+                    placeholder="请输入内容"
+                  ></el-input>
+                </el-form-item>
+              </div>
+            )
+          }
+        },
+        {
+          columnAttributes: {
+            label: '是否一物一码',
+            prop: 'uniqueCode'
+          },
+          render: (h, { row, column, index }) => {
+            return (
+              <div class="redbordererr">
+                <el-form-item
+                  label=""
+                  label-width="0px"
+                  prop={`items.${index}.${column.columnAttributes.prop}`}
+                  rules={required}
+                >
+                  <el-select
+                    disabled={this.isEditIndex !== index}
+                    value={row[column.columnAttributes.prop]}
+                    onInput={val => {
+                      row[column.columnAttributes.prop] = val
+                    }}
+                    placeholder="请选择"
+                  >
+                    {[
+                      { label: '是', value: 'YES' },
+                      { label: '否', value: 'NO' }
+                    ].map((item, index_) => (
+                      <el-option key={index_} label={item.label} value={item.value}></el-option>
+                    ))}
+                  </el-select>
+                </el-form-item>
+              </div>
+            )
+          }
+        },
+        {
+          columnAttributes: {
+            label: '数量',
+            prop: 'qty'
+          },
+          render: (h, { row, column, index }) => {
+            return (
+              <div class="redbordererr">
+                <el-form-item
+                  label=""
+                  label-width="0px"
+                  prop={`items.${index}.${column.columnAttributes.prop}`}
+                  rules={required}
+                >
+                  <el-input
+                    disabled={this.isEditIndex !== index}
+                    value={row[column.columnAttributes.prop]}
+                    onInput={val => {
+                      row[column.columnAttributes.prop] = val
+                    }}
+                    placeholder="请输入内容"
+                  ></el-input>
+                </el-form-item>
+              </div>
+            )
+          }
+        },
+        {
+          columnAttributes: {
+            label: '单位',
+            prop: 'unit'
+          },
+          render: (h, { row, column, index }) => {
+            return (
+              <div class="redbordererr">
+                <el-form-item
+                  label=""
+                  label-width="0px"
+                  prop={`items.${index}.${column.columnAttributes.prop}`}
+                  rules={required}
+                >
+                  <el-input
+                    disabled={this.isEditIndex !== index}
+                    value={row[column.columnAttributes.prop]}
+                    onInput={val => {
+                      row[column.columnAttributes.prop] = val
+                    }}
+                    placeholder="请输入内容"
+                  ></el-input>
+                </el-form-item>
+              </div>
+            )
+          }
+        },
+        {
+          columnAttributes: {
+            label: '操作'
+          },
+          render: (h, { row, column, index }) => {
+            return (
+              <div style="padding-left:10px">
+                <el-button
+                  type="text"
+                  onClick={() => {
+                    this.delProduct(row, index)
+                  }}
+                >
+                  删除
+                </el-button>
+                {this.isEditIndex == index && (
+                  <el-button
+                    type="text"
+                    onClick={() => {
+                      this.$refs.formRef.validateField(
+                        this.getVfyKey(this.isEditIndex),
+                        (valid, invalidFields, errLabels) => {
+                          if (valid && this.eidtItems()) {
+                            this.isEditIndex = -1
+                          }
+                        }
+                      )
+                    }}
+                  >
+                    确定
+                  </el-button>
+                )}
+                {this.isEditIndex == -1 && (
+                  <el-button
+                    type="text"
+                    onClick={() => {
+                      this.isEditIndex = index
+                    }}
+                  >
+                    编辑
+                  </el-button>
+                )}
+              </div>
+            )
+          }
+        }
+      ]
+    }
+  },
+  methods: {
+    // 列表请求函数
+    getList: goodsMaterialList,
+    // 列表导出函数
+    exportList: goodsMaterialListExport,
+    // 表格列解析渲染数据更改
+    columnParsing(item, defaultData) {
+      return defaultData
+    },
+    // 监听勾选变化
+    selectionChange(data) {
+      this.recordSelected = data
+    },
+    getVfyKey(index, bool = true) {
+      return [
+        ...(() => {
+          if (bool) {
+            return [`items`]
+          }
+          return []
+        })(),
+        ...(() => {
+          if (index > -1) {
+            return [
+              `items.${index}.name`,
+              `items.${index}.type`,
+              `items.${index}.uniqueCode`,
+              `items.${index}.qty`,
+              `items.${index}.unit`
+            ]
+          }
+          return []
+        })()
+      ]
+    },
+    eidtItems() {
+      try {
+        this.formData.items.map((item, index) => {
+          this.formData.items.map((item2, index2) => {
+            if (index !== index2 && `${item.type}_${item.name}` == `${item2.type}_${item2.name}`) {
+              throw new Error('')
+            }
+          })
+        })
+      } catch (error) {
+        this.$message.warning('子物料重复')
+        return false
+      }
+      return true
+    },
+    operation() {
+      return this.operationBtn({
+        edit: {
+          click: ({ row, index, column }) => {
+            this.$refs.tabPage.addTab({
+              activeKey: 'edit',
+              key: 'edit',
+              label: '编辑',
+              triggerEvent: () => {
+                this.openForm()
+                goodsMaterialDetail({ id: row.id }).then(res => {
+                  this.formData = res.data
+                  console.log(this.formData)
+                })
+              }
+            })
+          }
+        }
+      })
+    },
+    openForm() {
+      this.formCancel()
+      getBrandList({
+        status: true
+      }).then(res => {
+        this.brandList = res.data.map(item => ({
+          label: item.brandName,
+          value: item.id
+        }))
+      })
+      getClassifyList({
+        type: 2,
+        status: true
+      }).then(res => {
+        this.ClassifyList = res.data
+      })
+    },
+    formCancel() {
+      this.$refs?.formRef?.resetFields()
+      this.$data.formData = this.$options.data().formData
+    },
+    queding(removeTab) {
+      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
+        if (valid && this.eidtItems()) {
+          ;[goodsMaterialAdd, goodsMaterialUpdate][this.formData.id ? 1 : 0](this.formData).then(res => {
+            this.$message({
+              type: 'success',
+              message: '保存成功'
+            })
+            this.$refs.pageRef.refreshList()
+            removeTab()
+          })
+        }
+      })
+    }
+  }
 }
 </script>
 
 <style lang="scss" scoped>
 .tab {
-	padding: 20px 20px 0 20px;
+  padding: 20px 20px 0 20px;
 }
 </style>