Parcourir la source

后端 - 项目材料

xu il y a 3 semaines
Parent
commit
a81ae877cf

+ 72 - 0
server/api/v1/admin/project.go

@@ -258,6 +258,28 @@ func (pa *ProjectApi) QueryProjectById(c *gin.Context) {
 	response.OkWithData(project, c)
 }
 
+func (pa *ProjectApi) QueryProjectMaterialsList(c *gin.Context) {
+	var info request.SearchProjectMaterials
+	err := c.ShouldBindJSON(&info)
+	if err != nil {
+		response.FailWithMessage("参数错误", c)
+		global.GVA_LOG.Error("参数错误" + err.Error())
+		return
+	}
+	list, total, err := projectService.QueryProjectMaterialsList(info)
+	if err != nil {
+		response.FailWithMessage("查询失败", c)
+		global.GVA_LOG.Error("查询失败" + err.Error())
+		return
+	}
+	response.OkWithDetailed(response.PageResult{
+		List:     list,
+		Total:    total,
+		Page:     info.PageInfo.Page,
+		PageSize: info.PageInfo.PageSize,
+	}, "获取成功", c)
+}
+
 // CreateProject 创建项目
 func (pa *ProjectApi) CreateProject(c *gin.Context) {
 	form, err := c.MultipartForm()
@@ -424,6 +446,23 @@ func (pa *ProjectApi) CreateReimbursement(c *gin.Context) {
 	response.OkWithMessage("新建成功", c)
 }
 
+func (pa *ProjectApi) CreateProjectMaterials(c *gin.Context) {
+	var projectMaterials dao.ProjectMaterials
+	err := c.ShouldBindJSON(&projectMaterials)
+	if err != nil {
+		response.FailWithMessage("参数错误", c)
+		global.GVA_LOG.Error("CreateProjectMaterials ====== " + err.Error())
+		return
+	}
+	err = projectService.CreateProjectMaterials(projectMaterials)
+	if err != nil {
+		response.FailWithMessage("新增失败", c)
+		global.GVA_LOG.Error("CreateProjectMaterials ====== " + err.Error())
+		return
+	}
+	response.OkWithMessage("新增成功", c)
+}
+
 func (pa *ProjectApi) UpdateProject(c *gin.Context) {
 	var project dao.Project
 	err := c.ShouldBindJSON(&project)
@@ -504,6 +543,23 @@ func (pa *ProjectApi) UpdateReimbursement(c *gin.Context) {
 	response.OkWithMessage("修改成功", c)
 }
 
+func (pa *ProjectApi) UpdateProjectMaterials(c *gin.Context) {
+	var projectMaterials dao.ProjectMaterials
+	err := c.ShouldBindJSON(&projectMaterials)
+	if err != nil {
+		response.FailWithMessage("参数错误", c)
+		global.GVA_LOG.Error("UpdateProjectMaterials ====== " + err.Error())
+		return
+	}
+	err = projectService.UpdateProjectMaterials(projectMaterials)
+	if err != nil {
+		response.FailWithMessage("修改失败", c)
+		global.GVA_LOG.Error("UpdateProjectMaterials ====== " + err.Error())
+		return
+	}
+	response.OkWithMessage("修改成功", c)
+}
+
 func (pa *ProjectApi) DeleteProject(c *gin.Context) {
 	code := c.Query("code")
 	if code == "" {
@@ -644,6 +700,22 @@ func (pa *ProjectApi) DeleteReimbursement(c *gin.Context) {
 	response.OkWithMessage("删除成功", c)
 }
 
+func (pa *ProjectApi) DeleteProjectMaterials(c *gin.Context) {
+	id, err := strconv.Atoi(c.Query("id"))
+	if err != nil {
+		response.FailWithMessage("参数错误", c)
+		global.GVA_LOG.Error("DeleteProjectMaterials ====== " + err.Error())
+		return
+	}
+	err = dao.DeleteProjectMaterials(id)
+	if err != nil {
+		response.FailWithMessage("删除失败", c)
+		global.GVA_LOG.Error("DeleteProjectMaterials ====== " + err.Error())
+		return
+	}
+	response.OkWithMessage("删除成功", c)
+}
+
 func (pa *ProjectApi) ProjectFilesDownload(c *gin.Context) {
 	var info request.SearchProjectFileList
 	err := c.ShouldBindJSON(&info)

+ 1 - 1
server/dao/godown/manifest.go

@@ -41,7 +41,7 @@ func QueryManifestList(limit, offset int, genre, title string) (manifests []Mani
 	if err != nil {
 		return
 	}
-	err = db.Order("id desc").Limit(limit).Offset(offset).Preload("Cargos").Preload("Cargos.Goods").Find(&manifests).Error
+	err = db.Order("id desc").Limit(limit).Offset(offset).Preload("Cargos").Preload("Cargos.Goods").Preload("Cargos.Goods.GoodsGenre").Find(&manifests).Error
 	return manifests, total, err
 }
 

+ 1 - 0
server/dao/project.go

@@ -40,6 +40,7 @@ type Project struct {
 	Reimbursement        []Reimbursement       `json:"reimbursement" form:"reimbursement" gorm:"-"`
 	ReimbursementTotal   int64                 `json:"reimbursementTotal" form:"reimbursementTotal" gorm:"-"`
 	ProjectFee           []ProjectFee          `json:"projectFee" form:"project" gorm:"-"`
+	ProjectMaterials     []ProjectMaterials    `json:"projectMaterials" form:"projectMaterials" gorm:"-"`
 	ProjectFeeTotal      int64                 `json:"projectFeeTotal" form:"projectFeeTotal" gorm:"-"`
 	IsApprove            bool                  `json:"isApprove" form:"isApprove" gorm:"comment:是否审批;default:0"`
 }

+ 53 - 0
server/dao/projectMaterials.go

@@ -0,0 +1,53 @@
+package dao
+
+import "server/global"
+
+type ProjectMaterials struct {
+	global.GVA_MODEL
+	Name        string  `json:"name" form:"name" gorm:"comment:名称"`
+	Unit        string  `json:"unit" form:"unit" gorm:"comment:单位"`
+	Number      int     `json:"number" form:"number" gorm:"comment:数量"`
+	Remarks     string  `json:"remarks" form:"remarks" gorm:"comment:备注"`
+	ProjectCode string  `json:"projectCode" form:"projectCode" gorm:"comment:项目编号"`
+	Project     Project `json:"project" form:"project" gorm:"foreignKey:ProjectCode;references:code;"`
+}
+
+func (ProjectMaterials) TableName() string {
+	return "project_materials"
+}
+
+func QueryProjectMaterialsList(limit, offset int, code, name string) (projectMaterials []ProjectMaterials, total int64, err error) {
+	// 创建db
+	db := global.GVA_DB.Model(&ProjectMaterials{})
+	// 如果有条件搜索 下方会自动创建搜索语句
+	if code != "" {
+		db = db.Where("project_code = ?", code)
+	}
+	if name != "" {
+		db = db.Where("name LIKE ?", "%"+name+"%")
+	}
+	err = db.Count(&total).Error
+	if err != nil {
+		return
+	}
+	err = db.Order("id desc").Limit(limit).Offset(offset).Find(&projectMaterials).Error
+
+	return projectMaterials, total, err
+}
+
+func QueryProjectMaterialsByProjectCode(code string) (projectMaterials []ProjectMaterials, err error) {
+	err = global.GVA_DB.Model(&ProjectMaterials{}).Where("project_code=?", code).Find(&projectMaterials).Error
+	return
+}
+
+func (pm ProjectMaterials) CreateProjectMaterials() error {
+	return global.GVA_DB.Create(&pm).Error
+}
+
+func (pm ProjectMaterials) UpdateProjectMaterials() error {
+	return global.GVA_DB.Model(&pm).Where("id = ?", pm.ID).Updates(&pm).Error
+}
+
+func DeleteProjectMaterials(id int) error {
+	return global.GVA_DB.Delete(&ProjectMaterials{}, id).Error
+}

+ 1 - 0
server/initialize/gorm.go

@@ -78,6 +78,7 @@ func RegisterTables() {
 		dao.Description{},
 		dao.ProjectProcess{},
 		dao.ProcessNodes{},
+		dao.ProjectMaterials{},
 
 		godown.Manifest{},
 		godown.Cargo{},

+ 6 - 0
server/model/common/request/common.go

@@ -158,6 +158,12 @@ type SearchGoods struct {
 	Specifications string   `json:"specifications" form:"specifications"`
 }
 
+type SearchProjectMaterials struct {
+	PageInfo PageInfo `json:"pageInfo" form:"pageInfo"`
+	Code     string   `json:"code" form:"code"`
+	Name     string   `json:"name" form:"name"`
+}
+
 type GetInventoryRequest struct {
 	CommodityId   int `form:"commodityId" binding:"required"`
 	WarehouseId   int `form:"warehouseId" binding:"required"`

+ 4 - 0
server/router/admin/project.go

@@ -19,12 +19,14 @@ func (s *ProjectRouter) InitProjectRouter(Router *gin.RouterGroup) {
 		projectRouter.POST("createCollection", projectApi.CreateCollection)
 		projectRouter.POST("createReimbursement", projectApi.CreateReimbursement)
 		projectRouter.POST("createProjectState", projectApi.CreateProjectState)
+		projectRouter.POST("createProjectMaterials", projectApi.CreateProjectMaterials)
 
 		projectRouter.PUT("updateProject", projectApi.UpdateProject)
 		projectRouter.PUT("updateWorkingHours", projectApi.UpdateWorkingHours)
 		projectRouter.PUT("updateCollection", projectApi.UpdateCollection)
 		projectRouter.PUT("updateReimbursement", projectApi.UpdateReimbursement)
 		projectRouter.PUT("updateProjectState", projectApi.UpdateProjectState)
+		projectRouter.PUT("updateProjectMaterials", projectApi.UpdateProjectMaterials)
 
 		projectRouter.DELETE("deleteProject", projectApi.DeleteProject)
 		projectRouter.DELETE("deleteProjectFile", projectApi.DeleteProjectFile)
@@ -33,6 +35,7 @@ func (s *ProjectRouter) InitProjectRouter(Router *gin.RouterGroup) {
 		projectRouter.DELETE("deleteCollection", projectApi.DeleteCollection)
 		projectRouter.DELETE("deleteReimbursement", projectApi.DeleteReimbursement)
 		projectRouter.DELETE("deleteProjectState", projectApi.DeleteProjectState)
+		projectRouter.DELETE("deleteProjectMaterials", projectApi.DeleteProjectMaterials)
 	}
 	{
 		projectRouterWithoutRecord.POST("queryProjectList", projectApi.QueryProjectList)
@@ -51,5 +54,6 @@ func (s *ProjectRouter) InitProjectRouter(Router *gin.RouterGroup) {
 		projectRouterWithoutRecord.GET("queryProjectState", projectApi.QueryProjectState)
 		projectRouterWithoutRecord.GET("queryProjectSum", projectApi.QueryProjectSum)
 		projectRouterWithoutRecord.GET("queryProjectById", projectApi.QueryProjectById)
+		projectRouterWithoutRecord.POST("queryProjectMaterialsList", projectApi.QueryProjectMaterialsList)
 	}
 }

+ 6 - 0
server/service/admin/finance.go

@@ -95,6 +95,11 @@ func (fs *FinanceService) QueryProjectFinance(code string) (dao.Project, error)
 		return dao.Project{}, err
 	}
 
+	materials, err := dao.QueryProjectMaterialsByProjectCode(code)
+	if err != nil {
+		return dao.Project{}, err
+	}
+
 	project.Collection = collection
 	project.Reimbursement = reimbursements
 	project.WorkingHours = workingHours
@@ -103,6 +108,7 @@ func (fs *FinanceService) QueryProjectFinance(code string) (dao.Project, error)
 	project.WorkingHoursTotal = workingHoursTotal
 	project.ProjectFee = fee
 	project.ProjectFeeTotal = feeTotal
+	project.ProjectMaterials = materials
 
 	return project, err
 }

+ 23 - 0
server/service/admin/project.go

@@ -142,6 +142,17 @@ func (ps *ProjectService) QueryProjectById(id int) (dao.Project, error) {
 	return dao.QueryProjectById(id)
 }
 
+func (ps *ProjectService) QueryProjectMaterialsList(info request.SearchProjectMaterials) (projectMaterials interface{}, total int64, err error) {
+	limit := info.PageInfo.PageSize
+	offset := info.PageInfo.PageSize * (info.PageInfo.Page - 1)
+	projectMaterials, total, err = dao.QueryProjectMaterialsList(limit, offset, info.Code, info.Name)
+	if err != nil {
+		return nil, 0, err
+	}
+
+	return projectMaterials, total, err
+}
+
 func (ps *ProjectService) CreateProject(project dao.Project) error {
 	return project.CreateProject()
 }
@@ -166,6 +177,10 @@ func (ps *ProjectService) CreateReimbursement(reimbursement dao.Reimbursement) e
 	return reimbursement.CreateReimbursement()
 }
 
+func (ps *ProjectService) CreateProjectMaterials(projectMaterials dao.ProjectMaterials) error {
+	return projectMaterials.CreateProjectMaterials()
+}
+
 func (ps *ProjectService) UpdateProject(project dao.Project) error {
 	if project.State == 3 {
 		project.CollectionTime = time.Now().Format("2006-01-02 15:04:05")
@@ -191,6 +206,10 @@ func (ps *ProjectService) UpdateReimbursement(reimbursement dao.Reimbursement) e
 	return reimbursement.UpdateReimbursement()
 }
 
+func (ps *ProjectService) UpdateProjectMaterials(projectMaterials dao.ProjectMaterials) error {
+	return projectMaterials.UpdateProjectMaterials()
+}
+
 func (ps *ProjectService) DeleteProject(code string) error {
 	files, _ := dao.QueryFilesByCode(code)
 	if len(files) > 0 {
@@ -230,3 +249,7 @@ func (ps *ProjectService) DeleteCollection(collection dao.Collection) error {
 func (ps *ProjectService) DeleteReimbursement(reimbursement dao.Reimbursement) error {
 	return reimbursement.DeleteReimbursement()
 }
+
+func (ps *ProjectService) DeleteProjectMaterials(id int) error {
+	return dao.DeleteProjectMaterials(id)
+}

+ 263 - 195
web/src/view/storehouse/commodity/commodity.vue

@@ -18,26 +18,31 @@
             </el-form-item>
             <el-form-item label="类型">
               <el-cascader
-                  clearable
-                  @clear="queryGoodsData.genre = 0"
-                  :options="goodsTypeData"
-                  @change="changeQueryGoodsType"
-                  :props="goodsTypeProps"/>
+                clearable
+                :options="goodsTypeData"
+                :props="goodsTypeProps"
+                @clear="queryGoodsData.genre = 0"
+                @change="changeQueryGoodsType"
+              />
             </el-form-item>
             <el-form-item label="特征">
               <el-input
-                  placeholder="请输入特征"
-                  v-model="queryGoodsData.characteristic"
+                v-model="queryGoodsData.characteristic"
+                placeholder="请输入特征"
               />
             </el-form-item>
             <el-form-item label="规格">
               <el-input
-                  placeholder="请输入规格"
-                  v-model="queryGoodsData.specifications"
+                v-model="queryGoodsData.specifications"
+                placeholder="请输入规格"
               />
             </el-form-item>
             <el-form-item>
-              <el-button @click="searchData" type="primary" icon="Search">搜索</el-button>
+              <el-button
+                type="primary"
+                icon="Search"
+                @click="searchData"
+              >搜索</el-button>
             </el-form-item>
           </el-form>
         </el-col>
@@ -47,20 +52,20 @@
       <el-row>
         <el-col :span="12">
           <el-button
-              @click="isOpenGoodsAdd = true"
+            @click="isOpenGoodsAdd = true"
           >货品新增</el-button>
           <el-button
-              @click="isOpenCommodityGenre = true"
+            @click="isOpenCommodityGenre = true"
           >货品类型</el-button>
           <el-button
-              @click="inboundDialog = true"
+            @click="inboundDialog = true"
           >入库</el-button>
           <el-button
-              @click="outboundDialog = true"
+            @click="outboundDialog = true"
           >出库</el-button>
         </el-col>
       </el-row>
-      <div style="height: 20px"></div>
+      <div style="height: 20px" />
       <el-table
         :data="goodsListData"
         style="height: 600px"
@@ -75,6 +80,16 @@
           label="类型"
           align="center"
         />
+        <el-table-column
+          prop="characteristic"
+          label="特性"
+          align="center"
+        />
+        <el-table-column
+          prop="specifications"
+          label="规格"
+          align="center"
+        />
         <el-table-column
           prop="number"
           label="数量"
@@ -126,10 +141,11 @@
             </el-form-item>
             <el-form-item label="货品类型">
               <el-cascader
-                  v-model="goodsEditData.goodsGenreId"
-                  :options="goodsTypeData"
-                  @change="editHandleChange"
-                  :props="goodsTypeProps"/>
+                v-model="goodsEditData.goodsGenreId"
+                :options="goodsTypeData"
+                :props="goodsTypeProps"
+                @change="editHandleChange"
+              />
             </el-form-item>
             <el-form-item label="特征">
               <el-input
@@ -143,7 +159,10 @@
               <el-input v-model="goodsEditData.unit" />
             </el-form-item>
             <el-form-item label="数量">
-              <el-input v-model.number="goodsEditData.number" type="number"/>
+              <el-input
+                v-model.number="goodsEditData.number"
+                type="number"
+              />
             </el-form-item>
             <el-form-item>
               <el-button
@@ -169,14 +188,18 @@
             style="max-width: 400px"
             size="large"
           >
-            <el-form-item label="货品名称" prop="name">
-              <el-input v-model="goodsAddDate.name"/>
+            <el-form-item
+              label="货品名称"
+              prop="name"
+            >
+              <el-input v-model="goodsAddDate.name" />
             </el-form-item>
             <el-form-item label="货品类型">
               <el-cascader
-                  :options="goodsTypeData"
-                  @change="handleChange"
-                  :props="goodsTypeProps"/>
+                :options="goodsTypeData"
+                :props="goodsTypeProps"
+                @change="handleChange"
+              />
             </el-form-item>
             <el-form-item label="特性">
               <el-input
@@ -185,23 +208,26 @@
             </el-form-item>
             <el-form-item label="规格">
               <el-input
-                  v-model="goodsAddDate.specifications"
+                v-model="goodsAddDate.specifications"
               />
             </el-form-item>
             <el-form-item label="单位">
               <el-input v-model="goodsAddDate.unit" />
             </el-form-item>
             <el-form-item label="数量">
-              <el-input v-model.number="goodsAddDate.number" type="number"/>
+              <el-input
+                v-model.number="goodsAddDate.number"
+                type="number"
+              />
             </el-form-item>
             <el-form-item label="位置">
               <el-input v-model="goodsAddDate.position" />
             </el-form-item>
             <el-form-item>
               <el-button
-                  type="primary"
-                  @click="goodsAddSubmit"
-                  size="large"
+                type="primary"
+                size="large"
+                @click="goodsAddSubmit"
               >提交</el-button>
             </el-form-item>
           </el-form>
@@ -220,9 +246,12 @@
             @click="isOpenAddGenre = true"
           >新增货品类型</el-button>
         </el-header>
-<!--        :data="filterTableData"-->
+        <!--        :data="filterTableData"-->
         <el-main>
-          <el-table :data="goodsTypeData"  row-key="ID">
+          <el-table
+            :data="goodsTypeData"
+            row-key="ID"
+          >
             <el-table-column
               label="ID"
               prop="ID"
@@ -263,48 +292,53 @@
             <el-form size="large">
               <el-form-item>
                 <el-alert
-                    show-icon
-                    title="注意:如果没有选择父级类型那么添加的类型就属于一级货品类型,否则属于二级货品类型"
-                    type="info"
+                  show-icon
+                  title="注意:如果没有选择父级类型那么添加的类型就属于一级货品类型,否则属于二级货品类型"
+                  type="info"
                 />
               </el-form-item>
               <el-form-item label="父级类型:">
                 <el-select
-                    placeholder="请选择父级类型"
-                    v-model="createGoodsTypeData.parentId"
-                    clearable
-                    @clear="createGoodsTypeData.parentId = ''"
+                  v-model="createGoodsTypeData.parentId"
+                  placeholder="请选择父级类型"
+                  clearable
+                  @clear="createGoodsTypeData.parentId = ''"
                 >
                   <el-option
-                      v-for="item in goodsTypeData"
-                      :key="item.ID"
-                      :label="item.name"
-                      :value="item.ID"
+                    v-for="item in goodsTypeData"
+                    :key="item.ID"
+                    :label="item.name"
+                    :value="item.ID"
                   />
                 </el-select>
               </el-form-item>
               <el-form-item label="类型名称:">
                 <el-input
-                    placeholder="请输入货物类型名称"
-                    v-model="createGoodsTypeData.name"
-                    clearable
+                  v-model="createGoodsTypeData.name"
+                  placeholder="请输入货物类型名称"
+                  clearable
                 />
               </el-form-item>
               <el-form-item label="类型备注:">
                 <el-input
-                    placeholder="请输入备注"
-                    v-model="createGoodsTypeData.remarks"
-                    clearable
+                  v-model="createGoodsTypeData.remarks"
+                  placeholder="请输入备注"
+                  clearable
                 />
               </el-form-item>
             </el-form>
             <div class="dialog-footer">
               <el-button
-                  @click="isOpenAddGenre = false"
-                  size="large">
+                size="large"
+                @click="isOpenAddGenre = false"
+              >
                 取消
               </el-button>
-              <el-button type="primary" @click="increaseGoodsType" size="large">
+              <el-button
+                type="primary"
+                size="large"
+                @click="increaseGoodsType"
+              >
                 确认
               </el-button>
             </div>
@@ -319,221 +353,257 @@
         >
           <template #footer>
             <el-form size="large">
-              <el-form-item label="父级类型:"  v-show="updateGoodsTypeData.parentId !== ''">
+              <el-form-item
+                v-show="updateGoodsTypeData.parentId !== ''"
+                label="父级类型:"
+              >
                 <el-select
-                    placeholder="请选择父级类型"
-                    v-model="updateGoodsTypeData.parentId"
+                  v-model="updateGoodsTypeData.parentId"
+                  placeholder="请选择父级类型"
                 >
                   <el-option
-                      v-for="item in goodsTypeData"
-                      :key="item.ID"
-                      :label="item.name"
-                      :value="item.ID"
+                    v-for="item in goodsTypeData"
+                    :key="item.ID"
+                    :label="item.name"
+                    :value="item.ID"
                   />
                 </el-select>
               </el-form-item>
               <el-form-item label="类型名称:">
                 <el-input
-                    placeholder="请输入货物类型名称"
-                    v-model="updateGoodsTypeData.name"
-                    clearable
+                  v-model="updateGoodsTypeData.name"
+                  placeholder="请输入货物类型名称"
+                  clearable
                 />
               </el-form-item>
               <el-form-item label="类型备注:">
                 <el-input
-                    placeholder="请输入备注"
-                    v-model="updateGoodsTypeData.remarks"
-                    clearable
+                  v-model="updateGoodsTypeData.remarks"
+                  placeholder="请输入备注"
+                  clearable
                 />
               </el-form-item>
             </el-form>
             <div class="dialog-footer">
               <el-button
-                  @click="isOpenUpdateGenre = false"
-                  size="large">
+                size="large"
+                @click="isOpenUpdateGenre = false"
+              >
                 取消
               </el-button>
-              <el-button type="primary" @click="modifyGoodsType" size="large">
+              <el-button
+                type="primary"
+                size="large"
+                @click="modifyGoodsType"
+              >
                 确认
               </el-button>
             </div>
           </template>
         </el-dialog>
       </el-drawer>
-<!--      入库-->
+      <!--      入库-->
       <el-drawer
-          v-model="inboundDialog"
-          title="新建入库单"
-          direction="rtl"
-          size="50%"
+        v-model="inboundDialog"
+        title="新建入库单"
+        direction="rtl"
+        size="50%"
       >
         <div>
           <el-header
-              class="gva-search-box"
-              style="height: 30px;line-height: 30px;"
+            class="gva-search-box"
+            style="height: 30px;line-height: 30px;"
           >
-            <el-button type="primary" @click="addGoods">添加货品</el-button>
-            <el-button type="danger" @click="reduceGoods">减少货品</el-button>
+            <el-button
+              type="primary"
+              @click="addGoods"
+            >添加货品</el-button>
+            <el-button
+              type="danger"
+              @click="reduceGoods"
+            >减少货品</el-button>
           </el-header>
           <el-main>
             <el-table
-                :data="storeData.cargos"
-                height="500"
-                border
-                style="width: 100%;margin-bottom: 20px"
+              :data="storeData.cargos"
+              height="500"
+              border
+              style="width: 100%;margin-bottom: 20px"
             >
-              <el-table-column label="货品" width="300">
+              <el-table-column
+                label="货品"
+                width="300"
+              >
                 <template #default="{ row }">
                   <el-select
-                      v-model="row.goodsId"
-                      filterable
-                      placeholder="选择货品"
+                    v-model="row.goodsId"
+                    filterable
+                    placeholder="选择货品"
                   >
                     <el-option
-                        v-for="item in goodsListData"
-                        :key="item.ID"
-                        :label="item.name"
-                        :value="item.ID"
+                      v-for="item in goodsListData"
+                      :key="item.ID"
+                      :label="item.name"
+                      :value="item.ID"
                     />
                   </el-select>
                 </template>
               </el-table-column>
               <el-table-column
-                  label="数量"
-                  width="200"
+                label="数量"
+                width="200"
               >
                 <template #default="{ row }">
                   <el-input-number
-                      v-model="row.number"
-                      :min="1"
+                    v-model="row.number"
+                    :min="1"
                   />
                 </template>
               </el-table-column>
               <el-table-column label="购买价格">
                 <template #default="{ row }">
-                  <el-input v-model.number="row.buyingPrice" type="number"/>
+                  <el-input
+                    v-model.number="row.buyingPrice"
+                    type="number"
+                  />
                 </template>
               </el-table-column>
             </el-table>
             <el-form inline>
               <el-form-item
-                  label="标题"
-                  prop="title"
+                label="标题"
+                prop="title"
               >
                 <el-input
-                    v-model="storeData.title"
-                    style="width: 200px;"
+                  v-model="storeData.title"
+                  style="width: 200px;"
                 />
               </el-form-item>
               <el-form-item
-                  label="管理人"
-                  prop="custodian"
+                label="管理人"
+                prop="custodian"
               >
                 <el-input
-                    v-model="storeData.custodian"
-                    style="width: 200px;"
+                  v-model="storeData.custodian"
+                  style="width: 200px;"
                 />
               </el-form-item>
               <el-form-item
-                  label="备注"
-                  prop="custodian"
+                label="备注"
+                prop="custodian"
               >
                 <el-input
-                    v-model="storeData.remarks"
-                    style="width: 200px;"
+                  v-model="storeData.remarks"
+                  style="width: 200px;"
                 />
               </el-form-item>
               <el-form-item>
                 <el-button
-                    type="primary"
-                    @click="submitInboundForm"
+                  type="primary"
+                  @click="submitInboundForm"
                 >提交入库</el-button>
               </el-form-item>
             </el-form>
           </el-main>
         </div>
       </el-drawer>
-<!--      出库-->
-      <el-drawer v-model="outboundDialog" size="50%" title="新建出库单">
+      <!--      出库-->
+      <el-drawer
+        v-model="outboundDialog"
+        size="50%"
+        title="新建出库单"
+      >
         <el-header
-            class="gva-search-box"
-            style="height: 30px;line-height: 30px;"
+          class="gva-search-box"
+          style="height: 30px;line-height: 30px;"
         >
-          <el-button type="primary" @click="outAddGoods">添加货品</el-button>
-          <el-button type="danger" @click="outReduceGoods">减少货品</el-button>
+          <el-button
+            type="primary"
+            @click="outAddGoods"
+          >添加货品</el-button>
+          <el-button
+            type="danger"
+            @click="outReduceGoods"
+          >减少货品</el-button>
         </el-header>
         <el-main>
           <el-table
-              :data="outboundData.cargos"
-              height="500"
-              border
-              style="width: 100%;margin-bottom: 20px"
+            :data="outboundData.cargos"
+            height="500"
+            border
+            style="width: 100%;margin-bottom: 20px"
           >
-            <el-table-column label="货品" width="300">
+            <el-table-column
+              label="货品"
+              width="300"
+            >
               <template #default="{ row }">
                 <el-select
-                    v-model="row.goodsId"
-                    filterable
-                    placeholder="选择货品"
+                  v-model="row.goodsId"
+                  filterable
+                  placeholder="选择货品"
                 >
                   <el-option
-                      v-for="item in goodsListData"
-                      :key="item.ID"
-                      :label="item.name"
-                      :value="item.ID"
+                    v-for="item in goodsListData"
+                    :key="item.ID"
+                    :label="item.name"
+                    :value="item.ID"
                   />
                 </el-select>
               </template>
             </el-table-column>
             <el-table-column
-                label="数量"
-                width="200"
+              label="数量"
+              width="200"
             >
               <template #default="{ row }">
                 <el-input-number
-                    v-model="row.number"
-                    :min="1"
+                  v-model="row.number"
+                  :min="1"
                 />
               </template>
             </el-table-column>
             <el-table-column label="购买价格">
               <template #default="{ row }">
-                <el-input v-model.number="row.buyingPrice" type="number"/>
+                <el-input
+                  v-model.number="row.buyingPrice"
+                  type="number"
+                />
               </template>
             </el-table-column>
           </el-table>
           <el-form inline>
             <el-form-item
-                label="标题"
-                prop="title"
+              label="标题"
+              prop="title"
             >
               <el-input
-                  v-model="outboundData.title"
-                  style="width: 200px;"
+                v-model="outboundData.title"
+                style="width: 200px;"
               />
             </el-form-item>
             <el-form-item
-                label="管理人"
-                prop="custodian"
+              label="管理人"
+              prop="custodian"
             >
               <el-input
-                  v-model="outboundData.custodian"
-                  style="width: 200px;"
+                v-model="outboundData.custodian"
+                style="width: 200px;"
               />
             </el-form-item>
             <el-form-item
-                label="备注"
-                prop="custodian"
+              label="备注"
+              prop="custodian"
             >
               <el-input
-                  v-model="outboundData.remarks"
-                  style="width: 200px;"
+                v-model="outboundData.remarks"
+                style="width: 200px;"
               />
             </el-form-item>
             <el-form-item>
               <el-button
-                  type="primary"
-                  @click="submitOutboundForm"
+                type="primary"
+                @click="submitOutboundForm"
               >提交出库</el-button>
             </el-form-item>
           </el-form>
@@ -546,7 +616,7 @@
 <script setup>
 import { ref, onMounted, reactive } from 'vue'
 import {
-  queryGoodsType,deleteGoodsType,
+  queryGoodsType, deleteGoodsType,
   createGoodsType,
   updateGoodsType,
   createGoods,
@@ -593,7 +663,7 @@ const storeData = reactive({
   ],
   remarks: ''
 })
-const submitInboundForm = async () => {
+const submitInboundForm = async() => {
   if (!validateInboundForm(storeData)) return
   await createInboundManifest(storeData).then(res => {
     if (res.code === 0) {
@@ -604,11 +674,11 @@ const submitInboundForm = async () => {
   })
 }
 
-//出库
+// 出库
 const outboundDialog = ref(false)
 
 const outAddGoods = () => {
-  outboundData.cargos.push({goodsId: null, number: 1, buyingPrice: 0})
+  outboundData.cargos.push({ goodsId: null, number: 1, buyingPrice: 0 })
 }
 
 const outReduceGoods = () => {
@@ -629,7 +699,7 @@ const outboundData = reactive({
   remarks: ''
 })
 
-const submitOutboundForm = async () => {
+const submitOutboundForm = async() => {
   if (!validateInboundForm(outboundData)) return
   await createOutboundManifest(outboundData).then(res => {
     if (res.code === 0) {
@@ -668,7 +738,6 @@ const validateInboundForm = (data) => {
       ElMessage.warning(`第 ${i + 1} 行数量必须大于0`)
       return false
     }
-
   }
 
   return true
@@ -681,16 +750,16 @@ const total = ref(0)
 const goodsTypeData = ref([])
 // 新增货物类型
 const createGoodsTypeData = reactive({
-  name: "",
-  remarks: "",
-  parentId: ""
+  name: '',
+  remarks: '',
+  parentId: ''
 })
 
-const increaseGoodsType = async () => {
-  let data = {}
+const increaseGoodsType = async() => {
+  const data = {}
   data.name = createGoodsTypeData.name
   data.remarks = createGoodsTypeData.remarks
-  if(createGoodsTypeData.parentId !== '') {
+  if (createGoodsTypeData.parentId !== '') {
     data.parentId = createGoodsTypeData.parentId
   }
   await createGoodsType(data).then(res => {
@@ -710,9 +779,9 @@ const increaseGoodsType = async () => {
 // 编辑货品类型
 const updateGoodsTypeData = reactive({
   id: 0,
-  name: "",
-  remarks: "",
-  parentId: ""
+  name: '',
+  remarks: '',
+  parentId: ''
 })
 
 const openUpdateGenre = (val) => {
@@ -723,12 +792,12 @@ const openUpdateGenre = (val) => {
   val.children === null ? updateGoodsTypeData.parentId = val.parentId : updateGoodsTypeData.parentId = ''
 }
 
-const modifyGoodsType = async () => {
-  let data = {}
+const modifyGoodsType = async() => {
+  const data = {}
   data.id = updateGoodsTypeData.id
   data.name = updateGoodsTypeData.name
   data.remarks = updateGoodsTypeData.remarks
-  if(updateGoodsTypeData.parentId !== '') {
+  if (updateGoodsTypeData.parentId !== '') {
     data.parentId = updateGoodsTypeData.parentId
   }
   await updateGoodsType(data).then(res => {
@@ -742,33 +811,33 @@ const modifyGoodsType = async () => {
   })
 }
 
-//删除货物类型
+// 删除货物类型
 const omitGoodsType = (val) => {
   ElMessageBox.confirm(
-      '将永久删除该信息。是否继续?',
-      '删除',
-      {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning',
-      }
+    '将永久删除该信息。是否继续?',
+    '删除',
+    {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning',
+    }
   )
-      .then(async() => {
-        await deleteGoodsType(val.ID).then(res => {
-          if (res.code === 0) {
-            ElMessage.success('删除成功')
-            getData()
-          } else {
-            ElMessage.error('删除失败')
-          }
-        })
+    .then(async() => {
+      await deleteGoodsType(val.ID).then(res => {
+        if (res.code === 0) {
+          ElMessage.success('删除成功')
+          getData()
+        } else {
+          ElMessage.error('删除失败')
+        }
       })
-      .catch(() => {
-        ElMessage({
-          type: 'info',
-          message: '删除已取消',
-        })
+    })
+    .catch(() => {
+      ElMessage({
+        type: 'info',
+        message: '删除已取消',
       })
+    })
 }
 
 // 新增货物类型
@@ -806,13 +875,13 @@ const queryGoodsData = reactive({
     pageSize: 10
   },
   genre: 0,
-  name: "",
-  characteristic: "",
-  specifications: ""
+  name: '',
+  characteristic: '',
+  specifications: ''
 })
 
 const changeQueryGoodsType = (val) => {
-  queryGoodsData.genre= val[1]
+  queryGoodsData.genre = val[1]
 }
 
 // 分页
@@ -826,7 +895,7 @@ const handleCurrentChange = (val) => {
   getData()
 }
 
-const searchData = async () => {
+const searchData = async() => {
   queryGoodsData.pageInfo.page = 1
   queryGoodsData.pageInfo.pageSize = 10
   await queryGoodsList(queryGoodsData).then(res => {
@@ -863,16 +932,15 @@ const isOpenAddGenre = ref(false)
 
 const isOpenUpdateGenre = ref(false)
 
-
 // 编辑货品
 const isOpenGoodsEdit = ref(false)
 const goodsEditData = reactive({
   id: 0,
-  name: "",
+  name: '',
   goodsGenreId: 0,
-  characteristic: "",
-  specifications: "",
-  unit: "",
+  characteristic: '',
+  specifications: '',
+  unit: '',
   number: 0
 })
 const openGoodsEdit = (val) => {

+ 8 - 4
web/src/view/storehouse/manifest/manifest.vue

@@ -98,7 +98,11 @@
             <el-table-column
               prop="goods.name"
               label="商品名称"
-            />
+            >
+              <template #default="scope">
+                <span>{{ scope.row.goods.name }}{{ scope.row.goods.goodsGenre.name }}</span>
+              </template>
+            </el-table-column>
             <el-table-column
               prop="number"
               label="数量"
@@ -108,8 +112,8 @@
               label="位置"
             />
             <el-table-column
-                prop="buyingPrice"
-                label="价格"
+              prop="buyingPrice"
+              label="价格"
             />
           </el-table>
         </div>
@@ -118,7 +122,7 @@
   </el-container>
 </template>
 <script setup>
-import { ref, onMounted, reactive} from 'vue'
+import { ref, onMounted, reactive } from 'vue'
 import { queryManifestList } from '@/api/storehouse'
 import { dayjs } from 'element-plus'