瀏覽代碼

部分修改,但是字典query部分还是有问题存在

Administrator 1 年之前
父節點
當前提交
df1f9132e9
共有 35 個文件被更改,包括 8682 次插入390 次删除
  1. 1 1
      create/api.ts.tmpl
  2. 3 3
      create/back.vue.tmpl
  3. 4 4
      create/dao.go.tmpl
  4. 1 1
      create/domainQuery.go.tmpl
  5. 350 350
      output/dao/Dao.go
  6. 326 0
      output/domain/Query.go
  7. 33 31
      output/vue/BaseApi.ts
  8. 242 0
      output/vue/page/ArticleTagView.vue
  9. 234 0
      output/vue/page/ArticleTopicView.vue
  10. 386 0
      output/vue/page/ArticleView.vue
  11. 288 0
      output/vue/page/BackAuthorityView.vue
  12. 274 0
      output/vue/page/BackMenuView.vue
  13. 214 0
      output/vue/page/BackRoleAuthorityView.vue
  14. 214 0
      output/vue/page/BackRoleMenuView.vue
  15. 204 0
      output/vue/page/BackRoleView.vue
  16. 286 0
      output/vue/page/DictDataView.vue
  17. 238 0
      output/vue/page/DictTypeView.vue
  18. 464 0
      output/vue/page/GenTableColumnView.vue
  19. 260 0
      output/vue/page/GenTableView.vue
  20. 258 0
      output/vue/page/GoodsCommodityAreaView.vue
  21. 238 0
      output/vue/page/GoodsCouponUserView.vue
  22. 406 0
      output/vue/page/GoodsCouponView.vue
  23. 264 0
      output/vue/page/GoodsIntroductionView.vue
  24. 322 0
      output/vue/page/GoodsOrderView.vue
  25. 298 0
      output/vue/page/GoodsSkuCardView.vue
  26. 338 0
      output/vue/page/GoodsSkuView.vue
  27. 234 0
      output/vue/page/GoodsTagView.vue
  28. 244 0
      output/vue/page/GoodsTypeView.vue
  29. 268 0
      output/vue/page/GoodsView.vue
  30. 310 0
      output/vue/page/ManageUserView.vue
  31. 412 0
      output/vue/page/ShopAdviceCarouselView.vue
  32. 218 0
      output/vue/page/ShopTopicSkuView.vue
  33. 274 0
      output/vue/page/ShopTopicView.vue
  34. 338 0
      output/vue/page/UserView.vue
  35. 238 0
      output/vue/page/UserWalletView.vue

+ 1 - 1
create/api.ts.tmpl

@@ -47,7 +47,7 @@ export class {{.table.name}}Query{
     {{smallHump .goField}}End: {{formatSqlToVueType .columnType}}{{else}}{{smallHump .goField}}: {{formatSqlToVueType .columnType}}{{end}}{{end}}
 
 	static Create(){
-        return new {{.table.name}}({{range .tableColumns}}null,{{end}});
+        return new {{.table.name}}Query({{range .tableColumns}}{{if eq .queryType "BETWEEN"}}null,null,{{else}}null,{{end}}{{end}});
     }
 
 	constructor({{range .tableColumns}}{{if eq .queryType "BETWEEN"}}{{smallHump .goField}}Start: {{formatSqlToVueType .columnType}},{{smallHump .goField}}End: {{formatSqlToVueType .columnType}},{{else}}{{smallHump .goField}}: {{formatSqlToVueType .columnType}},{{end}}{{end}}) {

+ 3 - 3
create/back.vue.tmpl

@@ -1,7 +1,7 @@
 <template>
   <div class="back-form-container">
     <div>
-    <el-form ref="dictRef" :model="query" label-width="80px">
+    <el-form :model="query" label-width="80px" :inline="true">
       {{ range .gen.tableColumns }}
         {{ $value := smallHump .columnName }}
         {{ if not (eq (ToLower $value) "id") }}
@@ -108,7 +108,7 @@ let pageSize = ref(10)
 let list = ref<{{ .gen.table.name }}[]>([])
 let ListKey = ref(0)
 //搜索用
-let search = ref<{{ .gen.table.name }}>({{ .gen.table.name }}.Create())
+//let search = ref<{{ .gen.table.name }}>({{ .gen.table.name }}.Create())
 //修改,添加用
 let open = ref(false)
 let dialogType = ref("")//save添加,update修改
@@ -155,7 +155,7 @@ function deleteById(id) {
 
 function getList(pn = 1) {
   pageNum.value = pn
-  GetBase{{ .gen.table.name }}ListBy{{ .gen.table.name }}(search.value, pageNum.value, pageSize.value).then(response => {
+  GetBase{{ .gen.table.name }}ListBy{{ .gen.table.name }}(query.value, pageNum.value, pageSize.value).then(response => {
     let data = response.data
     total.value = data.total
     list.value = response.data.list

+ 4 - 4
create/dao.go.tmpl

@@ -51,16 +51,16 @@ func Get{{.table.name}}List({{.table.routerName}} domain.{{.table.name}}, pageNu
 }
 func Get2{{.table.name}}List(query domain.{{.table.name}}Query, pageNum, pageSize int) (vo.BaseListVo, error) {
 	var arr []domain.{{.table.name}}
-	session := configs.Engine.Table("{{.table.tableName}}").Limit(pageSize, (pageNum-1)*pageSize){{$defData := "0"}}{{range .tableColumns}}{{if eq .goType "int"}}{{$defData = "0"}}{{else if eq .goType "int64"}}{{$defData = "0"}}{{else if eq .goType "float64"}}{{$defData = "0"}}{{else if eq .goType "string"}}{{$defData = "\"0\""}}{{else if eq .goType "time.Time"}}{{$defData = "\"0\""}}{{else}}{{$defData = "\"0\""}}{{end}}
+	session := configs.Engine.Table("{{.table.tableName}}").Limit(pageSize, (pageNum-1)*pageSize){{$defData := "0"}}{{range .tableColumns}}{{if eq .goType "int"}}{{$defData = "0"}}{{else if eq .goType "int64"}}{{$defData = "0"}}{{else if eq .goType "float64"}}{{$defData = "0"}}{{else if eq .goType "string"}}{{$defData = "\"\""}}{{else if eq .goType "time.Time"}}{{$defData = "\"\""}}{{else}}{{$defData = "\"\""}}{{end}}
     {{if eq .queryType "BETWEEN"}}
     if query.{{.goField}}Start != {{$defData}} || query.{{.goField}}End != {{$defData}}{
         session.Where("{{.columnName}} between ? and ?", query.{{.goField}}Start, query.{{.goField}}End)
-    }{{else if eq .queryType "LIKE"}}
+    }{{else if or (eq .queryType "LIKE") (eq .queryType "like")}}
     if query.{{.goField}} != {{$defData}}{
         session.Where("{{.columnName}} like ?", "%"+query.{{.goField}}+"%")
-    }{{else}}{{$v := ""}}{{if eq .queryType "EQ"}} {{$v = "= ?"}}{{else if eq .queryType "NEQ"}}{{$v = "!= ?"}}{{else if eq .queryType "GT"}}{{$v = "> ?"}}{{else if eq .queryType "LT"}}{{$v = "< ?"}}{{else if eq .queryType "GTEQ"}}{{$v = ">= ?"}}{{else if eq .queryType "LTEQ"}}{{$v = "<= ?"}}{{else}}{{$v = "= ?"}}{{end}}
+    }{{else}}{{$v := ""}}{{if eq .queryType ""}} {{$v = "= ?"}}{{else if eq .queryType "EQ"}} {{$v = "= ?"}}{{else if eq .queryType "NEQ"}}{{$v = "!= ?"}}{{else if eq .queryType "GT"}}{{$v = "> ?"}}{{else if eq .queryType "LT"}}{{$v = "< ?"}}{{else if eq .queryType "GTEQ"}}{{$v = ">= ?"}}{{else if eq .queryType "LTEQ"}}{{$v = "<= ?"}}{{else}}{{$v = "= ?"}}{{end}}
     if query.{{.goField}} != {{$defData}}{
-         session.Where("{{.columnName}} != ?", query.{{.goField}})
+         session.Where("{{.columnName}} {{$v}}", query.{{.goField}})
     }{{end}}{{end}}
 	Count, err := session.FindAndCount(&arr, &query)
 	var vo vo.BaseListVo

+ 1 - 1
create/domainQuery.go.tmpl

@@ -1,4 +1,4 @@
-package vo
+package domain
 
 {{range .gens}}
 type {{bigHump .table.tableName}}Query struct {

文件差異過大導致無法顯示
+ 350 - 350
output/dao/Dao.go


+ 326 - 0
output/domain/Query.go

@@ -0,0 +1,326 @@
+package vo
+
+
+type ArticleQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // id
+	ArticleTitle string  `xorm:"article_title"  json:"articleTitle"` // 文章名称
+	ArticleContent string  `xorm:"article_content"  json:"articleContent"` // 文章内容
+	State string  `xorm:"state"  json:"state"` // 状态
+	ArticleTagIds string  `xorm:"article_tag_ids"  json:"articleTagIds"` // 文章标签
+	ArticleTopicId int64  `xorm:"article_topic_id"  json:"articleTopicId"` // 文章主题id
+	Image string  `xorm:"image"  json:"image"` // 图片
+	PublishTime string  `xorm:"publish_time"  json:"publishTime"` // 发表时间
+	EyeFill int64  `xorm:"eye_fill"  json:"eyeFill"` // 浏览量
+	LikeCount int64  `xorm:"like_count"  json:"likeCount"` // 点赞量
+	CreateBy string  `xorm:"create_by"  json:"createBy"` // 创建人
+	CreateTime string  `xorm:"create_time"  json:"createTime"` // 创建时间
+	UpdateBy string  `xorm:"update_by"  json:"updateBy"` // 更新人
+	UpdateTime string  `xorm:"update_time"  json:"updateTime"` // 更新时间
+	ArticleDesc string  `xorm:"article_desc"  json:"articleDesc"` // 文章简介
+}
+
+type ArticleTagQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // 
+	TagName string  `xorm:"tag_name"  json:"tagName"` // 标签名
+	TagDesc string  `xorm:"tag_desc"  json:"tagDesc"` // 标签描述
+	TagTextColor string  `xorm:"tag_text_color"  json:"tagTextColor"` // 标签字体颜色
+	TagBackgroundColor string  `xorm:"tag_background_color"  json:"tagBackgroundColor"` // 标签背景颜色
+}
+
+type ArticleTopicQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // 
+	Image string  `xorm:"image"  json:"image"` // 图片
+	TopicName string  `xorm:"topic_name"  json:"topicName"` // 主题名称
+	TopicDesc string  `xorm:"topic_desc"  json:"topicDesc"` // 主题描述
+}
+
+type BackAuthorityQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // id
+	AuthorityName string  `xorm:"authority_name"  json:"authorityName"` // 接口名
+	AuthorityPath string  `xorm:"authority_path"  json:"authorityPath"` // 接口路径
+	Method string  `xorm:"method"  json:"method"` // 方法
+	State string  `xorm:"state"  json:"state"` // 接口是否启用(0关闭,1启用)
+	AuthorityVerification string  `xorm:"authority_verification"  json:"authorityVerification"` // 权限校验
+	CreateTimeStart string  `xorm:"create_time"  json:"createTime"` // 创建时间
+	CreateTimeEnd string  `xorm:"create_time"  json:createTime"` // 创建时间
+}
+
+type BackMenuQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // id
+	BackMenuName string  `xorm:"back_menu_name"  json:"backMenuName"` // 菜单名称
+	BackMenuPater int64  `xorm:"back_menu_pater"  json:"backMenuPater"` // 父级菜单
+	Sort int64  `xorm:"sort"  json:"sort"` // 排序
+	Icon string  `xorm:"icon"  json:"icon"` // 图标
+	Remark string  `xorm:"remark"  json:"remark"` // 备注
+	BackRouterPath string  `xorm:"back_router_path"  json:"backRouterPath"` // 路由路径
+	State string  `xorm:"state"  json:"state"` // 状态
+}
+
+type BackRoleQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // 
+	RoleName string  `xorm:"role_name"  json:"roleName"` // 
+}
+
+type BackRoleAuthorityQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // 
+	RoleId int64  `xorm:"role_id"  json:"roleId"` // 角色id
+	AuthorityId int64  `xorm:"authority_id"  json:"authorityId"` // 权限id
+}
+
+type BackRoleMenuQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // 
+	RoleId int64  `xorm:"role_id"  json:"roleId"` // 角色id
+	MenuId int64  `xorm:"menu_id"  json:"menuId"` // 枚舉id
+}
+
+type GenTableQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // id
+	TableName string  `xorm:"table_name"  json:"tableName"` // 数据库名
+	TableComment string  `xorm:"table_comment"  json:"tableComment"` // 数据库注释
+	Name string  `xorm:"name"  json:"name"` // 名字
+	RouterName string  `xorm:"router_name"  json:"routerName"` // 路由名
+	Remark string  `xorm:"remark"  json:"remark"` // 备注
+}
+
+type GenTableColumnQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // id
+	TableId int64  `xorm:"table_id"  json:"tableId"` // 表格id
+	Sort int64  `xorm:"sort"  json:"sort"` // 排序
+	ColumnComment string  `xorm:"column_comment"  json:"columnComment"` // 字段注释
+	ColumnType string  `xorm:"column_type"  json:"columnType"` // 字段类型
+	GoType string  `xorm:"go_type"  json:"goType"` // go类型
+	GoField string  `xorm:"go_field"  json:"goField"` // go字段名
+	IsKey string  `xorm:"is_key"  json:"isKey"` // 是否主键
+	IsIncrement string  `xorm:"is_increment"  json:"isIncrement"` // 是否自增
+	IsRequired string  `xorm:"is_required"  json:"isRequired"` // 是否未必填
+	QueryType string  `xorm:"query_type"  json:"queryType"` // 查询方式
+	VueShowType string  `xorm:"vue_show_type"  json:"vueShowType"` // 前端显示类型
+	DictType string  `xorm:"dict_type"  json:"dictType"` // 字典类型
+	ColumnName string  `xorm:"column_name"  json:"columnName"` // 字段名
+}
+
+type GoodsQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // id
+	TypeId int64  `xorm:"type_id"  json:"typeId"` // 分类id
+	GoodsName string  `xorm:"goods_name"  json:"goodsName"` // 商品名字
+	IntroductionId int64  `xorm:"introduction_id"  json:"introductionId"` // 商品介绍id
+	SalesVolumeStart int64  `xorm:"sales_volume"  json:"salesVolume"` // 近30天销量
+	SalesVolumeEnd int64  `xorm:"sales_volume"  json:"salesVolume"` // 近30天销量
+	TagIds string  `xorm:"tag_ids"  json:"tagIds"` // 商品标签
+}
+
+type GoodsCommodityAreaQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // id
+	GoodsId int64  `xorm:"goods_id"  json:"goodsId"` // 商品id
+	CommodityAreaName string  `xorm:"commodity_area_name"  json:"commodityAreaName"` // 商品属地名称
+	DetailImage string  `xorm:"detail_image"  json:"detailImage"` // 详情图片
+	DetailIntroductionId int64  `xorm:"detail_introduction_id"  json:"detailIntroductionId"` // 相关文本详情id
+}
+
+type GoodsCouponQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // id
+	CouponName string  `xorm:"coupon_name"  json:"couponName"` // 优惠券名称
+	CouponDesc string  `xorm:"coupon_desc"  json:"couponDesc"` // 优惠券描述
+	CashBackPoint float64  `xorm:"cash_back_point"  json:"cashBackPoint"` // 满x
+	CashBackPrice float64  `xorm:"cash_back_price"  json:"cashBackPrice"` // 减x
+	ConditionByTopic string  `xorm:"condition_by_topic"  json:"conditionByTopic"` // 主题可用,id
+	ConditionByType string  `xorm:"condition_by_type"  json:"conditionByType"` // 类型可用,id
+	ConditionByGoods string  `xorm:"condition_by_goods"  json:"conditionByGoods"` // 商品可用,id
+	GrantCount string  `xorm:"grant_count"  json:"grantCount"` // 发放数量
+	Count int64  `xorm:"count"  json:"count"` // 优惠券余量
+	ReceiveType string  `xorm:"receive_type"  json:"receiveType"` // 领取条件
+	Validity string  `xorm:"validity"  json:"validity"` // 有效性,领取开始计时(ClaimTiming),固定时间(FixedTime)
+	ValidityPeriod string  `xorm:"validity_period"  json:"validityPeriod"` // 有效期
+}
+
+type GoodsCouponUserQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // id
+	UserId int64  `xorm:"user_id"  json:"userId"` // 用户id
+	CouponId int64  `xorm:"coupon_id"  json:"couponId"` // 优惠券id
+	CollectionTime string  `xorm:"collection_time"  json:"collectionTime"` // 领取时间
+	State string  `xorm:"state"  json:"state"` // 状态,已使用2,未使用1,已过期0
+}
+
+type GoodsIntroductionQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // 文章id
+	GoodsArticleName string  `xorm:"goods_article_name"  json:"goodsArticleName"` // 商品文章名
+	GoodsArticle string  `xorm:"goods_article"  json:"goodsArticle"` // 商品文章
+	CreateBy string  `xorm:"create_by"  json:"createBy"` // 创建人
+	CreateTime string  `xorm:"create_time"  json:"createTime"` // 创建时间
+	UpdateBy string  `xorm:"update_by"  json:"updateBy"` // 更新人
+	UpdateTime string  `xorm:"update_time"  json:"updateTime"` // 更新时间
+}
+
+type GoodsOrderQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // id
+	OrderName string  `xorm:"order_name"  json:"orderName"` // 订单名
+	SkuId int64  `xorm:"sku_id"  json:"skuId"` // skuid
+	Count int64  `xorm:"count"  json:"count"` // 购买数量
+	Price float64  `xorm:"price"  json:"price"` // 单价
+	TotalPrice float64  `xorm:"total_price"  json:"totalPrice"` // 总价
+	ContactInformation string  `xorm:"contact_information"  json:"contactInformation"` // 联系方式
+	CouponUserId int64  `xorm:"coupon_user_id"  json:"couponUserId"` // 使用的优惠券
+	State string  `xorm:"state"  json:"state"` // 支付状态,0待支付,1待发货,2已发货,3订单完成,4订单异常
+	CreateBy int64  `xorm:"create_by"  json:"createBy"` // 用户id
+	CreateTime string  `xorm:"create_time"  json:"createTime"` // 订单创建时间
+	OtherData string  `xorm:"other_data"  json:"otherData"` // 其他数据
+}
+
+type GoodsSkuQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // 
+	SkuImage string  `xorm:"sku_image"  json:"skuImage"` // sku图片
+	SkuName string  `xorm:"sku_name"  json:"skuName"` // 商品sku名字
+	Price float64  `xorm:"price"  json:"price"` // 现在价格
+	HistoricalPrices float64  `xorm:"historical_prices"  json:"historicalPrices"` // 历史价格
+	InventoryNumber int64  `xorm:"inventory_number"  json:"inventoryNumber"` // 库存
+	CommodityAreaId int64  `xorm:"commodity_area_id"  json:"commodityAreaId"` // 属地id
+	GoodsId int64  `xorm:"goods_id"  json:"goodsId"` // 商品id
+	CreateBy string  `xorm:"create_by"  json:"createBy"` // 创建人
+	CreateTime string  `xorm:"create_time"  json:"createTime"` // 创建时间
+}
+
+type GoodsSkuCardQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // id
+	CardName string  `xorm:"card_name"  json:"cardName"` // 卡种名称
+	State string  `xorm:"state"  json:"state"` // 状态,0未使用,1已用,2过期
+	Count int64  `xorm:"count"  json:"count"` // 库存
+	TotalCount string  `xorm:"total_count"  json:"totalCount"` // 总数
+	CardKey string  `xorm:"card_key"  json:"cardKey"` // 卡密
+	Use string  `xorm:"use"  json:"use"` // 是否已用
+	UploadTime string  `xorm:"upload_time"  json:"uploadTime"` // 入库时间
+	SkuId int64  `xorm:"sku_id"  json:"skuId"` // 商品规格绑定
+	Sort string  `xorm:"sort"  json:"sort"` // 排序,出售优先级
+}
+
+type GoodsTagQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // id
+	Name string  `xorm:"name"  json:"name"` // 名字
+	IconUrl string  `xorm:"icon_url"  json:"iconUrl"` // 图标路径
+	Tag string  `xorm:"tag"  json:"tag"` // 标签
+}
+
+type GoodsTypeQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // 
+	Sort int64  `xorm:"sort"  json:"sort"` // 排序
+	TypeImage string  `xorm:"type_image"  json:"typeImage"` // 类型图片
+	TypeName string  `xorm:"type_name"  json:"typeName"` // 商品类别名称
+	CreateTime string  `xorm:"create_time"  json:"createTime"` // 创建时间
+}
+
+type UserQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // 
+	Username string  `xorm:"username"  json:"username"` // 账号
+	Password string  `xorm:"password"  json:"password"` // 密码
+	CreationTime int64  `xorm:"creation_time"  json:"creationTime"` // 账号创建时间
+	LoginTime int64  `xorm:"login_time"  json:"loginTime"` // 登录时间
+	Status string  `xorm:"status"  json:"status"` // 账号状态
+	RoleId int64  `xorm:"role_id"  json:"roleId"` // 角色id
+	Phone string  `xorm:"phone"  json:"phone"` // 手机
+	Email string  `xorm:"email"  json:"email"` // 邮箱
+	Name string  `xorm:"name"  json:"name"` // 用户名
+	Avatar string  `xorm:"avatar"  json:"avatar"` // 头像
+	RecommendCode string  `xorm:"recommend_code"  json:"recommendCode"` // 推荐码
+	InviterBy int64  `xorm:"inviter_by"  json:"inviterBy"` // 邀请人
+}
+
+type UserWalletQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // id
+	UserId int64  `xorm:"user_id"  json:"userId"` // 用户id
+	Balance float64  `xorm:"balance"  json:"balance"` // 余额
+	PromotionAmount float64  `xorm:"promotion_amount"  json:"promotionAmount"` // 推广获取总金额
+	RechargeAmount float64  `xorm:"recharge_amount"  json:"rechargeAmount"` // 充值金额
+}
+
+type DictDataQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // 字典编码
+	Sort int64  `xorm:"sort"  json:"sort"` // 排序
+	DictLabel string  `xorm:"dict_label"  json:"dictLabel"` // 字典标签
+	DictValue string  `xorm:"dict_value"  json:"dictValue"` // 字典键值
+	DictType string  `xorm:"dict_type"  json:"dictType"` // 字典类型
+	Status string  `xorm:"status"  json:"status"` // 状态
+	CssStyle string  `xorm:"css_style"  json:"cssStyle"` // 样式
+	IsDefault string  `xorm:"is_default"  json:"isDefault"` // 是否默认
+	Remark string  `xorm:"remark"  json:"remark"` // 备注
+}
+
+type DictTypeQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // 
+	DictName string  `xorm:"dict_name"  json:"dictName"` // 字典名称
+	DictType string  `xorm:"dict_type"  json:"dictType"` // 字典类型
+	Status string  `xorm:"status"  json:"status"` // 状态(1正常/0停用)
+	Remark string  `xorm:"remark"  json:"remark"` // 备注
+}
+
+type ManageUserQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // 
+	Name string  `xorm:"name"  json:"name"` // 名称
+	Username string  `xorm:"username"  json:"username"` // 账号
+	Password string  `xorm:"password"  json:"password"` // 密码
+	CreationTime int64  `xorm:"creation_time"  json:"creationTime"` // 账号创建时间
+	LoginTime int64  `xorm:"login_time"  json:"loginTime"` // 登录时间
+	Status string  `xorm:"status"  json:"status"` // 账号状态
+	RoleId int64  `xorm:"role_id"  json:"roleId"` // 角色id
+	Phone string  `xorm:"phone"  json:"phone"` // 手机
+	Email string  `xorm:"email"  json:"email"` // 邮箱
+	Avatar string  `xorm:"avatar"  json:"avatar"` // 头像
+}
+
+type ShopTopicQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // 
+	Sort string  `xorm:"sort"  json:"sort"` // 
+	ParentId int64  `xorm:"parent_id"  json:"parentId"` // 父级id
+	TopicPageImage string  `xorm:"topic_page_image"  json:"topicPageImage"` // 主题首页图片
+	TopicName string  `xorm:"topic_name"  json:"topicName"` // 主题名称
+	TopicDesc string  `xorm:"topic_desc"  json:"topicDesc"` // 主题描述
+	TypeIds string  `xorm:"type_ids"  json:"typeIds"` // 商品类型id
+}
+
+type ShopAdviceCarouselQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` // 
+	Name string  `xorm:"name"  json:"name"` // 广告名称
+	ToId int64  `xorm:"to_id"  json:"toId"` // 目标id
+	AdviceType string  `xorm:"advice_type"  json:"adviceType"` // 广告类型,用于跳转到对应的页面
+	Sort string  `xorm:"sort"  json:"sort"` // 排序
+	State string  `xorm:"state"  json:"state"` // 状态
+	ShowType string  `xorm:"show_type"  json:"showType"` // 显示类型,carousel轮播图,package,礼包
+	CreateBy string  `xorm:"create_by"  json:"createBy"` // 创建人
+	CreateTime string  `xorm:"create_time"  json:"createTime"` // 创建时间
+	UpdateBy string  `xorm:"update_by"  json:"updateBy"` // 更新人
+	UpdateTime string  `xorm:"update_time"  json:"updateTime"` // 更新时间
+	ImageUrl string  `xorm:"image_url"  json:"imageUrl"` // 图片
+	ToType string  `xorm:"to_type"  json:"toType"` // 目标类型
+}
+
+type ShopTopicSkuQuery struct {
+    
+	Id int64  `xorm:"id"  json:"id"` //  
+	TopicId int64  `xorm:"topic_id"  json:"topicId"` // 
+	SkuId int64  `xorm:"sku_id"  json:"skuId"` // 
+}

+ 33 - 31
output/vue/BaseApi.ts

@@ -1423,7 +1423,7 @@ export class ArticleQuery{
     articleDesc: string
 
 	static Create(){
-        return new Article(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,);
+        return new ArticleQuery(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,);
     }
 
 	constructor(id: number,articleTitle: string,articleContent: string,state: string,articleTagIds: string,articleTopicId: number,image: string,publishTime: string,eyeFill: number,likeCount: number,createBy: string,createTime: string,updateBy: string,updateTime: string,articleDesc: string,) {
@@ -1455,7 +1455,7 @@ export class ArticleTagQuery{
     tagBackgroundColor: string
 
 	static Create(){
-        return new ArticleTag(null,null,null,null,null,);
+        return new ArticleTagQuery(null,null,null,null,null,);
     }
 
 	constructor(id: number,tagName: string,tagDesc: string,tagTextColor: string,tagBackgroundColor: string,) {
@@ -1476,7 +1476,7 @@ export class ArticleTopicQuery{
     topicDesc: string
 
 	static Create(){
-        return new ArticleTopic(null,null,null,null,);
+        return new ArticleTopicQuery(null,null,null,null,);
     }
 
 	constructor(id: number,image: string,topicName: string,topicDesc: string,) {
@@ -1496,20 +1496,22 @@ export class BackAuthorityQuery{
     method: string
     state: string
     authorityVerification: string
-    createTime: string
+    createTimeStart: string
+    createTimeEnd: string
 
 	static Create(){
-        return new BackAuthority(null,null,null,null,null,null,null,);
+        return new BackAuthorityQuery(null,null,null,null,null,null,null,null,);
     }
 
-	constructor(id: number,authorityName: string,authorityPath: string,method: string,state: string,authorityVerification: string,createTime: string,) {
+	constructor(id: number,authorityName: string,authorityPath: string,method: string,state: string,authorityVerification: string,createTimeStart: string,createTimeEnd: string,) {
 		 this.id = id;
 		 this.authorityName = authorityName;
 		 this.authorityPath = authorityPath;
 		 this.method = method;
 		 this.state = state;
 		 this.authorityVerification = authorityVerification;
-		 this.createTime = createTime;
+		 this.createTimeStart = createTimeStart;
+		 this.createTimeEnd = createTimeEnd;
 		 
 	}
 }
@@ -1526,7 +1528,7 @@ export class BackMenuQuery{
     state: string
 
 	static Create(){
-        return new BackMenu(null,null,null,null,null,null,null,null,);
+        return new BackMenuQuery(null,null,null,null,null,null,null,null,);
     }
 
 	constructor(id: number,backMenuName: string,backMenuPater: number,sort: number,icon: string,remark: string,backRouterPath: string,state: string,) {
@@ -1548,7 +1550,7 @@ export class BackRoleQuery{
     roleName: string
 
 	static Create(){
-        return new BackRole(null,null,);
+        return new BackRoleQuery(null,null,);
     }
 
 	constructor(id: number,roleName: string,) {
@@ -1565,7 +1567,7 @@ export class BackRoleAuthorityQuery{
     authorityId: number
 
 	static Create(){
-        return new BackRoleAuthority(null,null,null,);
+        return new BackRoleAuthorityQuery(null,null,null,);
     }
 
 	constructor(id: number,roleId: number,authorityId: number,) {
@@ -1583,7 +1585,7 @@ export class BackRoleMenuQuery{
     menuId: number
 
 	static Create(){
-        return new BackRoleMenu(null,null,null,);
+        return new BackRoleMenuQuery(null,null,null,);
     }
 
 	constructor(id: number,roleId: number,menuId: number,) {
@@ -1604,7 +1606,7 @@ export class GenTableQuery{
     remark: string
 
 	static Create(){
-        return new GenTable(null,null,null,null,null,null,);
+        return new GenTableQuery(null,null,null,null,null,null,);
     }
 
 	constructor(id: number,tableName: string,tableComment: string,name: string,routerName: string,remark: string,) {
@@ -1636,7 +1638,7 @@ export class GenTableColumnQuery{
     columnName: string
 
 	static Create(){
-        return new GenTableColumn(null,null,null,null,null,null,null,null,null,null,null,null,null,null,);
+        return new GenTableColumnQuery(null,null,null,null,null,null,null,null,null,null,null,null,null,null,);
     }
 
 	constructor(id: number,tableId: number,sort: number,columnComment: string,columnType: string,goType: string,goField: string,isKey: string,isIncrement: string,isRequired: string,queryType: string,vueShowType: string,dictType: string,columnName: string,) {
@@ -1669,7 +1671,7 @@ export class GoodsQuery{
     tagIds: string
 
 	static Create(){
-        return new Goods(null,null,null,null,null,null,);
+        return new GoodsQuery(null,null,null,null,null,null,null,);
     }
 
 	constructor(id: number,typeId: number,goodsName: string,introductionId: number,salesVolumeStart: number,salesVolumeEnd: number,tagIds: string,) {
@@ -1693,7 +1695,7 @@ export class GoodsCommodityAreaQuery{
     detailIntroductionId: number
 
 	static Create(){
-        return new GoodsCommodityArea(null,null,null,null,null,);
+        return new GoodsCommodityAreaQuery(null,null,null,null,null,);
     }
 
 	constructor(id: number,goodsId: number,commodityAreaName: string,detailImage: string,detailIntroductionId: number,) {
@@ -1723,7 +1725,7 @@ export class GoodsCouponQuery{
     validityPeriod: string
 
 	static Create(){
-        return new GoodsCoupon(null,null,null,null,null,null,null,null,null,null,null,null,null,);
+        return new GoodsCouponQuery(null,null,null,null,null,null,null,null,null,null,null,null,null,);
     }
 
 	constructor(id: number,couponName: string,couponDesc: string,cashBackPoint: number,cashBackPrice: number,conditionByTopic: string,conditionByType: string,conditionByGoods: string,grantCount: string,count: number,receiveType: string,validity: string,validityPeriod: string,) {
@@ -1753,7 +1755,7 @@ export class GoodsCouponUserQuery{
     state: string
 
 	static Create(){
-        return new GoodsCouponUser(null,null,null,null,null,);
+        return new GoodsCouponUserQuery(null,null,null,null,null,);
     }
 
 	constructor(id: number,userId: number,couponId: number,collectionTime: string,state: string,) {
@@ -1777,7 +1779,7 @@ export class GoodsIntroductionQuery{
     updateTime: string
 
 	static Create(){
-        return new GoodsIntroduction(null,null,null,null,null,null,null,);
+        return new GoodsIntroductionQuery(null,null,null,null,null,null,null,);
     }
 
 	constructor(id: number,goodsArticleName: string,goodsArticle: string,createBy: string,createTime: string,updateBy: string,updateTime: string,) {
@@ -1808,7 +1810,7 @@ export class GoodsOrderQuery{
     otherData: string
 
 	static Create(){
-        return new GoodsOrder(null,null,null,null,null,null,null,null,null,null,null,null,);
+        return new GoodsOrderQuery(null,null,null,null,null,null,null,null,null,null,null,null,);
     }
 
 	constructor(id: number,orderName: string,skuId: number,count: number,price: number,totalPrice: number,contactInformation: string,couponUserId: number,state: string,createBy: number,createTime: string,otherData: string,) {
@@ -1842,7 +1844,7 @@ export class GoodsSkuQuery{
     createTime: string
 
 	static Create(){
-        return new GoodsSku(null,null,null,null,null,null,null,null,null,null,);
+        return new GoodsSkuQuery(null,null,null,null,null,null,null,null,null,null,);
     }
 
 	constructor(id: number,skuImage: string,skuName: string,price: number,historicalPrices: number,inventoryNumber: number,commodityAreaId: number,goodsId: number,createBy: string,createTime: string,) {
@@ -1874,7 +1876,7 @@ export class GoodsSkuCardQuery{
     sort: string
 
 	static Create(){
-        return new GoodsSkuCard(null,null,null,null,null,null,null,null,null,null,);
+        return new GoodsSkuCardQuery(null,null,null,null,null,null,null,null,null,null,);
     }
 
 	constructor(id: number,cardName: string,state: string,count: number,totalCount: string,cardKey: string,use: string,uploadTime: string,skuId: number,sort: string,) {
@@ -1900,7 +1902,7 @@ export class GoodsTagQuery{
     tag: string
 
 	static Create(){
-        return new GoodsTag(null,null,null,null,);
+        return new GoodsTagQuery(null,null,null,null,);
     }
 
 	constructor(id: number,name: string,iconUrl: string,tag: string,) {
@@ -1921,7 +1923,7 @@ export class GoodsTypeQuery{
     createTime: string
 
 	static Create(){
-        return new GoodsType(null,null,null,null,null,);
+        return new GoodsTypeQuery(null,null,null,null,null,);
     }
 
 	constructor(id: number,sort: number,typeImage: string,typeName: string,createTime: string,) {
@@ -1951,7 +1953,7 @@ export class UserQuery{
     inviterBy: number
 
 	static Create(){
-        return new User(null,null,null,null,null,null,null,null,null,null,null,null,null,);
+        return new UserQuery(null,null,null,null,null,null,null,null,null,null,null,null,null,);
     }
 
 	constructor(id: number,username: string,password: string,creationTime: number,loginTime: number,status: string,roleId: number,phone: string,email: string,name: string,avatar: string,recommendCode: string,inviterBy: number,) {
@@ -1981,7 +1983,7 @@ export class UserWalletQuery{
     rechargeAmount: number
 
 	static Create(){
-        return new UserWallet(null,null,null,null,null,);
+        return new UserWalletQuery(null,null,null,null,null,);
     }
 
 	constructor(id: number,userId: number,balance: number,promotionAmount: number,rechargeAmount: number,) {
@@ -2007,7 +2009,7 @@ export class DictDataQuery{
     remark: string
 
 	static Create(){
-        return new DictData(null,null,null,null,null,null,null,null,null,);
+        return new DictDataQuery(null,null,null,null,null,null,null,null,null,);
     }
 
 	constructor(id: number,sort: number,dictLabel: string,dictValue: string,dictType: string,status: string,cssStyle: string,isDefault: string,remark: string,) {
@@ -2033,7 +2035,7 @@ export class DictTypeQuery{
     remark: string
 
 	static Create(){
-        return new DictType(null,null,null,null,null,);
+        return new DictTypeQuery(null,null,null,null,null,);
     }
 
 	constructor(id: number,dictName: string,dictType: string,status: string,remark: string,) {
@@ -2061,7 +2063,7 @@ export class ManageUserQuery{
     avatar: string
 
 	static Create(){
-        return new ManageUser(null,null,null,null,null,null,null,null,null,null,null,);
+        return new ManageUserQuery(null,null,null,null,null,null,null,null,null,null,null,);
     }
 
 	constructor(id: number,name: string,username: string,password: string,creationTime: number,loginTime: number,status: string,roleId: number,phone: string,email: string,avatar: string,) {
@@ -2091,7 +2093,7 @@ export class ShopTopicQuery{
     typeIds: string
 
 	static Create(){
-        return new ShopTopic(null,null,null,null,null,null,null,);
+        return new ShopTopicQuery(null,null,null,null,null,null,null,);
     }
 
 	constructor(id: number,sort: string,parentId: number,topicPageImage: string,topicName: string,topicDesc: string,typeIds: string,) {
@@ -2123,7 +2125,7 @@ export class ShopAdviceCarouselQuery{
     toType: string
 
 	static Create(){
-        return new ShopAdviceCarousel(null,null,null,null,null,null,null,null,null,null,null,null,null,);
+        return new ShopAdviceCarouselQuery(null,null,null,null,null,null,null,null,null,null,null,null,null,);
     }
 
 	constructor(id: number,name: string,toId: number,adviceType: string,sort: string,state: string,showType: string,createBy: string,createTime: string,updateBy: string,updateTime: string,imageUrl: string,toType: string,) {
@@ -2151,7 +2153,7 @@ export class ShopTopicSkuQuery{
     skuId: number
 
 	static Create(){
-        return new ShopTopicSku(null,null,null,);
+        return new ShopTopicSkuQuery(null,null,null,);
     }
 
 	constructor(id: number,topicId: number,skuId: number,) {

+ 242 - 0
output/vue/page/ArticleTagView.vue

@@ -0,0 +1,242 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="标签名" prop="tagName">
+          <el-input v-model="query.tagName" placeholder="请输入标签名"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="标签描述" prop="tagDesc">
+          <el-input v-model="query.tagDesc" placeholder="请输入标签描述"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="标签字体颜色" prop="tagTextColor">                <el-text class="mx-1">{{query.tagTextColor}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="标签背景颜色" prop="tagBackgroundColor">                <el-text class="mx-1">{{query.tagBackgroundColor}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', ArticleTag.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="标签名" align="center" prop="tagName"/>
+        <el-table-column label="标签描述" align="center" prop="tagDesc"/>
+        <el-table-column label="标签字体颜色" align="center" prop="tagTextColor"/>
+        <el-table-column label="标签背景颜色" align="center" prop="tagBackgroundColor"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="标签名" prop="tagName">
+          <el-input v-model="dialogForm.tagName" placeholder="请输入标签名"/>
+        </el-form-item>
+        <el-form-item label="标签描述" prop="tagDesc">
+          <el-input v-model="dialogForm.tagDesc" placeholder="请输入标签描述"/>
+        </el-form-item>
+        <el-form-item label="标签字体颜色" prop="tagTextColor">                <el-text class="mx-1">{{dialogForm.tagTextColor}}</el-text>
+        </el-form-item>
+        <el-form-item label="标签背景颜色" prop="tagBackgroundColor">                <el-text class="mx-1">{{dialogForm.tagBackgroundColor}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseArticleTagById,
+  GetBaseArticleTagListByArticleTag,
+  SaveBaseArticleTag,
+  UpdateBaseArticleTag,
+  ArticleTag,
+  ArticleTagQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<ArticleTag[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<ArticleTag>(ArticleTag.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<ArticleTag>(null)
+let query = ref<ArticleTagQuery>(ArticleTagQuery.Create())
+let selectItems = ref<ArticleTag[]>([])
+const selected = (arr: ArticleTag[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: ArticleTag) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = ArticleTag.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseArticleTagById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseArticleTagListByArticleTag(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseArticleTag(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseArticleTag(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 234 - 0
output/vue/page/ArticleTopicView.vue

@@ -0,0 +1,234 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="图片" prop="image">              <ImageUpload v-model:ImgUrl="query.image"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="主题名称" prop="topicName">
+          <el-input v-model="query.topicName" placeholder="请输入主题名称"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="主题描述" prop="topicDesc">
+          <el-input v-model="query.topicDesc" placeholder="请输入主题描述" type="textarea"/>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', ArticleTopic.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+      <el-table-column label="图片" align="center" prop="image">
+        <template #default="scope">
+          <el-image  :src="scope.row.image"></el-image>
+        </template>
+      </el-table-column>
+        <el-table-column label="主题名称" align="center" prop="topicName"/>
+        <el-table-column label="主题描述" align="center" prop="topicDesc"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="图片" prop="image">              <ImageUpload v-model:ImgUrl="dialogForm.image"/>
+        </el-form-item>
+        <el-form-item label="主题名称" prop="topicName">
+          <el-input v-model="dialogForm.topicName" placeholder="请输入主题名称"/>
+        </el-form-item>
+        <el-form-item label="主题描述" prop="topicDesc">
+          <el-input v-model="dialogForm.topicDesc" placeholder="请输入主题描述" type="textarea"/>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseArticleTopicById,
+  GetBaseArticleTopicListByArticleTopic,
+  SaveBaseArticleTopic,
+  UpdateBaseArticleTopic,
+  ArticleTopic,
+  ArticleTopicQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<ArticleTopic[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<ArticleTopic>(ArticleTopic.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<ArticleTopic>(null)
+let query = ref<ArticleTopicQuery>(ArticleTopicQuery.Create())
+let selectItems = ref<ArticleTopic[]>([])
+const selected = (arr: ArticleTopic[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: ArticleTopic) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = ArticleTopic.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseArticleTopicById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseArticleTopicListByArticleTopic(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseArticleTopic(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseArticleTopic(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 386 - 0
output/vue/page/ArticleView.vue

@@ -0,0 +1,386 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="文章名称" prop="articleTitle">
+          <el-input v-model="query.articleTitle" placeholder="请输入文章名称"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="文章内容" prop="articleContent">              <EditorComponent v-model:htmlString="query.articleContent"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="状态" prop="state">
+          <el-select v-model="query.state" placeholder="请选择状态">
+            <el-option
+              v-for="item in store.state.dicts.get('sys_state')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="文章标签" prop="articleTagIds">                <el-text class="mx-1">{{query.articleTagIds}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="文章主题id" prop="articleTopicId">                <el-text class="mx-1">{{query.articleTopicId}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="图片" prop="image">              <ImageUpload v-model:ImgUrl="query.image"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="发表时间" prop="publishTime">      <el-date-picker v-model="query.publishTime" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="浏览量" prop="eyeFill">
+          <el-input-number v-model="query.eyeFill" placeholder="请输入浏览量"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="点赞量" prop="likeCount">
+          <el-input-number v-model="query.likeCount" placeholder="请输入点赞量"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="创建人" prop="createBy">                <el-text class="mx-1">{{query.createBy}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="创建时间" prop="createTime">      <el-date-picker v-model="query.createTime" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="更新人" prop="updateBy">                <el-text class="mx-1">{{query.updateBy}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="更新时间" prop="updateTime">      <el-date-picker v-model="query.updateTime" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="文章简介" prop="articleDesc">                <el-text class="mx-1">{{query.articleDesc}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', Article.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="文章名称" align="center" prop="articleTitle"/>
+        <el-table-column label="文章内容" align="center" prop="articleContent"/>
+      <el-table-column label="状态" align="center" prop="state">
+        <template #default="scope">
+          <DictTag :dict-type="'sys_state'" :dict-value="scope.row.state"/>
+        </template>
+      </el-table-column>
+        <el-table-column label="文章标签" align="center" prop="articleTagIds"/>
+        <el-table-column label="文章主题id" align="center" prop="articleTopicId"/>
+      <el-table-column label="图片" align="center" prop="image">
+        <template #default="scope">
+          <el-image  :src="scope.row.image"></el-image>
+        </template>
+      </el-table-column>
+        <el-table-column label="发表时间" align="center" prop="publishTime"/>
+        <el-table-column label="浏览量" align="center" prop="eyeFill"/>
+        <el-table-column label="点赞量" align="center" prop="likeCount"/>
+        <el-table-column label="创建人" align="center" prop="createBy"/>
+        <el-table-column label="创建时间" align="center" prop="createTime"/>
+        <el-table-column label="更新人" align="center" prop="updateBy"/>
+        <el-table-column label="更新时间" align="center" prop="updateTime"/>
+        <el-table-column label="文章简介" align="center" prop="articleDesc"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="文章名称" prop="articleTitle">
+          <el-input v-model="dialogForm.articleTitle" placeholder="请输入文章名称"/>
+        </el-form-item>
+        <el-form-item label="文章内容" prop="articleContent">              <EditorComponent v-model:htmlString="dialogForm.articleContent"/>
+        </el-form-item>
+        <el-form-item label="状态" prop="state">
+          <el-select v-model="dialogForm.state" placeholder="请选择状态">
+            <el-option
+              v-for="item in store.state.dicts.get('sys_state')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="文章标签" prop="articleTagIds">                <el-text class="mx-1">{{dialogForm.articleTagIds}}</el-text>
+        </el-form-item>
+        <el-form-item label="文章主题id" prop="articleTopicId">                <el-text class="mx-1">{{dialogForm.articleTopicId}}</el-text>
+        </el-form-item>
+        <el-form-item label="图片" prop="image">              <ImageUpload v-model:ImgUrl="dialogForm.image"/>
+        </el-form-item>
+        <el-form-item label="发表时间" prop="publishTime">      <el-date-picker v-model="dialogForm.publishTime" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+        <el-form-item label="浏览量" prop="eyeFill">
+          <el-input-number v-model="dialogForm.eyeFill" placeholder="请输入浏览量"/>
+        </el-form-item>
+        <el-form-item label="点赞量" prop="likeCount">
+          <el-input-number v-model="dialogForm.likeCount" placeholder="请输入点赞量"/>
+        </el-form-item>
+        <el-form-item label="创建人" prop="createBy">                <el-text class="mx-1">{{dialogForm.createBy}}</el-text>
+        </el-form-item>
+        <el-form-item label="创建时间" prop="createTime">      <el-date-picker v-model="dialogForm.createTime" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+        <el-form-item label="更新人" prop="updateBy">                <el-text class="mx-1">{{dialogForm.updateBy}}</el-text>
+        </el-form-item>
+        <el-form-item label="更新时间" prop="updateTime">      <el-date-picker v-model="dialogForm.updateTime" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+        <el-form-item label="文章简介" prop="articleDesc">                <el-text class="mx-1">{{dialogForm.articleDesc}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseArticleById,
+  GetBaseArticleListByArticle,
+  SaveBaseArticle,
+  UpdateBaseArticle,
+  Article,
+  ArticleQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<Article[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<Article>(Article.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<Article>(null)
+let query = ref<ArticleQuery>(ArticleQuery.Create())
+let selectItems = ref<Article[]>([])
+const selected = (arr: Article[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: Article) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = Article.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseArticleById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseArticleListByArticle(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseArticle(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseArticle(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 288 - 0
output/vue/page/BackAuthorityView.vue

@@ -0,0 +1,288 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="接口名" prop="authorityName">
+          <el-input v-model="query.authorityName" placeholder="请输入接口名"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="接口路径" prop="authorityPath">
+          <el-input v-model="query.authorityPath" placeholder="请输入接口路径"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="方法" prop="method">
+          <el-input v-model="query.method" placeholder="请输入方法"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="接口是否启用(0关闭,1启用)" prop="state">
+          <el-select v-model="query.state" placeholder="请选择接口是否启用(0关闭,1启用)">
+            <el-option
+              v-for="item in store.state.dicts.get('sys_state')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="权限校验" prop="authorityVerification">
+          <el-input v-model="query.authorityVerification" placeholder="请输入权限校验"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="创建时间" prop="createTime">      <el-date-picker v-model="query.createTime" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', BackAuthority.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="接口名" align="center" prop="authorityName"/>
+        <el-table-column label="接口路径" align="center" prop="authorityPath"/>
+        <el-table-column label="方法" align="center" prop="method"/>
+      <el-table-column label="接口是否启用(0关闭,1启用)" align="center" prop="state">
+        <template #default="scope">
+          <DictTag :dict-type="'sys_state'" :dict-value="scope.row.state"/>
+        </template>
+      </el-table-column>
+        <el-table-column label="权限校验" align="center" prop="authorityVerification"/>
+        <el-table-column label="创建时间" align="center" prop="createTime"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="接口名" prop="authorityName">
+          <el-input v-model="dialogForm.authorityName" placeholder="请输入接口名"/>
+        </el-form-item>
+        <el-form-item label="接口路径" prop="authorityPath">
+          <el-input v-model="dialogForm.authorityPath" placeholder="请输入接口路径"/>
+        </el-form-item>
+        <el-form-item label="方法" prop="method">
+          <el-input v-model="dialogForm.method" placeholder="请输入方法"/>
+        </el-form-item>
+        <el-form-item label="接口是否启用(0关闭,1启用)" prop="state">
+          <el-select v-model="dialogForm.state" placeholder="请选择接口是否启用(0关闭,1启用)">
+            <el-option
+              v-for="item in store.state.dicts.get('sys_state')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="权限校验" prop="authorityVerification">
+          <el-input v-model="dialogForm.authorityVerification" placeholder="请输入权限校验"/>
+        </el-form-item>
+        <el-form-item label="创建时间" prop="createTime">      <el-date-picker v-model="dialogForm.createTime" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseBackAuthorityById,
+  GetBaseBackAuthorityListByBackAuthority,
+  SaveBaseBackAuthority,
+  UpdateBaseBackAuthority,
+  BackAuthority,
+  BackAuthorityQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<BackAuthority[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<BackAuthority>(BackAuthority.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<BackAuthority>(null)
+let query = ref<BackAuthorityQuery>(BackAuthorityQuery.Create())
+let selectItems = ref<BackAuthority[]>([])
+const selected = (arr: BackAuthority[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: BackAuthority) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = BackAuthority.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseBackAuthorityById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseBackAuthorityListByBackAuthority(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseBackAuthority(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseBackAuthority(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 274 - 0
output/vue/page/BackMenuView.vue

@@ -0,0 +1,274 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="菜单名称" prop="backMenuName">                <el-text class="mx-1">{{query.backMenuName}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="父级菜单" prop="backMenuPater">                <el-text class="mx-1">{{query.backMenuPater}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="排序" prop="sort">                <el-text class="mx-1">{{query.sort}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="图标" prop="icon">                <el-text class="mx-1">{{query.icon}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="备注" prop="remark">                <el-text class="mx-1">{{query.remark}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="路由路径" prop="backRouterPath">                <el-text class="mx-1">{{query.backRouterPath}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="状态" prop="state">                <el-text class="mx-1">{{query.state}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', BackMenu.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="菜单名称" align="center" prop="backMenuName"/>
+        <el-table-column label="父级菜单" align="center" prop="backMenuPater"/>
+        <el-table-column label="排序" align="center" prop="sort"/>
+        <el-table-column label="图标" align="center" prop="icon"/>
+        <el-table-column label="备注" align="center" prop="remark"/>
+        <el-table-column label="路由路径" align="center" prop="backRouterPath"/>
+        <el-table-column label="状态" align="center" prop="state"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="菜单名称" prop="backMenuName">                <el-text class="mx-1">{{dialogForm.backMenuName}}</el-text>
+        </el-form-item>
+        <el-form-item label="父级菜单" prop="backMenuPater">                <el-text class="mx-1">{{dialogForm.backMenuPater}}</el-text>
+        </el-form-item>
+        <el-form-item label="排序" prop="sort">                <el-text class="mx-1">{{dialogForm.sort}}</el-text>
+        </el-form-item>
+        <el-form-item label="图标" prop="icon">                <el-text class="mx-1">{{dialogForm.icon}}</el-text>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">                <el-text class="mx-1">{{dialogForm.remark}}</el-text>
+        </el-form-item>
+        <el-form-item label="路由路径" prop="backRouterPath">                <el-text class="mx-1">{{dialogForm.backRouterPath}}</el-text>
+        </el-form-item>
+        <el-form-item label="状态" prop="state">                <el-text class="mx-1">{{dialogForm.state}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseBackMenuById,
+  GetBaseBackMenuListByBackMenu,
+  SaveBaseBackMenu,
+  UpdateBaseBackMenu,
+  BackMenu,
+  BackMenuQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<BackMenu[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<BackMenu>(BackMenu.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<BackMenu>(null)
+let query = ref<BackMenuQuery>(BackMenuQuery.Create())
+let selectItems = ref<BackMenu[]>([])
+const selected = (arr: BackMenu[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: BackMenu) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = BackMenu.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseBackMenuById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseBackMenuListByBackMenu(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseBackMenu(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseBackMenu(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 214 - 0
output/vue/page/BackRoleAuthorityView.vue

@@ -0,0 +1,214 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="角色id" prop="roleId">                <el-text class="mx-1">{{query.roleId}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="权限id" prop="authorityId">                <el-text class="mx-1">{{query.authorityId}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', BackRoleAuthority.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="角色id" align="center" prop="roleId"/>
+        <el-table-column label="权限id" align="center" prop="authorityId"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="角色id" prop="roleId">                <el-text class="mx-1">{{dialogForm.roleId}}</el-text>
+        </el-form-item>
+        <el-form-item label="权限id" prop="authorityId">                <el-text class="mx-1">{{dialogForm.authorityId}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseBackRoleAuthorityById,
+  GetBaseBackRoleAuthorityListByBackRoleAuthority,
+  SaveBaseBackRoleAuthority,
+  UpdateBaseBackRoleAuthority,
+  BackRoleAuthority,
+  BackRoleAuthorityQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<BackRoleAuthority[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<BackRoleAuthority>(BackRoleAuthority.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<BackRoleAuthority>(null)
+let query = ref<BackRoleAuthorityQuery>(BackRoleAuthorityQuery.Create())
+let selectItems = ref<BackRoleAuthority[]>([])
+const selected = (arr: BackRoleAuthority[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: BackRoleAuthority) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = BackRoleAuthority.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseBackRoleAuthorityById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseBackRoleAuthorityListByBackRoleAuthority(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseBackRoleAuthority(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseBackRoleAuthority(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 214 - 0
output/vue/page/BackRoleMenuView.vue

@@ -0,0 +1,214 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="角色id" prop="roleId">                <el-text class="mx-1">{{query.roleId}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="枚舉id" prop="menuId">                <el-text class="mx-1">{{query.menuId}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', BackRoleMenu.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="角色id" align="center" prop="roleId"/>
+        <el-table-column label="枚舉id" align="center" prop="menuId"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="角色id" prop="roleId">                <el-text class="mx-1">{{dialogForm.roleId}}</el-text>
+        </el-form-item>
+        <el-form-item label="枚舉id" prop="menuId">                <el-text class="mx-1">{{dialogForm.menuId}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseBackRoleMenuById,
+  GetBaseBackRoleMenuListByBackRoleMenu,
+  SaveBaseBackRoleMenu,
+  UpdateBaseBackRoleMenu,
+  BackRoleMenu,
+  BackRoleMenuQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<BackRoleMenu[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<BackRoleMenu>(BackRoleMenu.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<BackRoleMenu>(null)
+let query = ref<BackRoleMenuQuery>(BackRoleMenuQuery.Create())
+let selectItems = ref<BackRoleMenu[]>([])
+const selected = (arr: BackRoleMenu[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: BackRoleMenu) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = BackRoleMenu.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseBackRoleMenuById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseBackRoleMenuListByBackRoleMenu(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseBackRoleMenu(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseBackRoleMenu(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 204 - 0
output/vue/page/BackRoleView.vue

@@ -0,0 +1,204 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+              
+            
+            
+        <el-form-item label="roleName" prop="roleName">                <el-text class="mx-1">{{query.roleName}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', BackRole.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="roleName" align="center" prop="roleName"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="roleName" prop="roleName">                <el-text class="mx-1">{{dialogForm.roleName}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseBackRoleById,
+  GetBaseBackRoleListByBackRole,
+  SaveBaseBackRole,
+  UpdateBaseBackRole,
+  BackRole,
+  BackRoleQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<BackRole[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<BackRole>(BackRole.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<BackRole>(null)
+let query = ref<BackRoleQuery>(BackRoleQuery.Create())
+let selectItems = ref<BackRole[]>([])
+const selected = (arr: BackRole[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: BackRole) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = BackRole.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseBackRoleById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseBackRoleListByBackRole(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseBackRole(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseBackRole(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 286 - 0
output/vue/page/DictDataView.vue

@@ -0,0 +1,286 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="排序" prop="sort">                <el-text class="mx-1">{{query.sort}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="字典标签" prop="dictLabel">                <el-text class="mx-1">{{query.dictLabel}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="字典键值" prop="dictValue">                <el-text class="mx-1">{{query.dictValue}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="字典类型" prop="dictType">                <el-text class="mx-1">{{query.dictType}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="状态" prop="status">                <el-text class="mx-1">{{query.status}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="样式" prop="cssStyle">                <el-text class="mx-1">{{query.cssStyle}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="是否默认" prop="isDefault">                <el-text class="mx-1">{{query.isDefault}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="备注" prop="remark">                <el-text class="mx-1">{{query.remark}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', DictData.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="字典编码" align="center" prop="id"/>
+        <el-table-column label="排序" align="center" prop="sort"/>
+        <el-table-column label="字典标签" align="center" prop="dictLabel"/>
+        <el-table-column label="字典键值" align="center" prop="dictValue"/>
+        <el-table-column label="字典类型" align="center" prop="dictType"/>
+        <el-table-column label="状态" align="center" prop="status"/>
+        <el-table-column label="样式" align="center" prop="cssStyle"/>
+        <el-table-column label="是否默认" align="center" prop="isDefault"/>
+        <el-table-column label="备注" align="center" prop="remark"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="排序" prop="sort">                <el-text class="mx-1">{{dialogForm.sort}}</el-text>
+        </el-form-item>
+        <el-form-item label="字典标签" prop="dictLabel">                <el-text class="mx-1">{{dialogForm.dictLabel}}</el-text>
+        </el-form-item>
+        <el-form-item label="字典键值" prop="dictValue">                <el-text class="mx-1">{{dialogForm.dictValue}}</el-text>
+        </el-form-item>
+        <el-form-item label="字典类型" prop="dictType">                <el-text class="mx-1">{{dialogForm.dictType}}</el-text>
+        </el-form-item>
+        <el-form-item label="状态" prop="status">                <el-text class="mx-1">{{dialogForm.status}}</el-text>
+        </el-form-item>
+        <el-form-item label="样式" prop="cssStyle">                <el-text class="mx-1">{{dialogForm.cssStyle}}</el-text>
+        </el-form-item>
+        <el-form-item label="是否默认" prop="isDefault">                <el-text class="mx-1">{{dialogForm.isDefault}}</el-text>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">                <el-text class="mx-1">{{dialogForm.remark}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseDictDataById,
+  GetBaseDictDataListByDictData,
+  SaveBaseDictData,
+  UpdateBaseDictData,
+  DictData,
+  DictDataQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<DictData[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<DictData>(DictData.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<DictData>(null)
+let query = ref<DictDataQuery>(DictDataQuery.Create())
+let selectItems = ref<DictData[]>([])
+const selected = (arr: DictData[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: DictData) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = DictData.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseDictDataById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseDictDataListByDictData(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseDictData(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseDictData(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 238 - 0
output/vue/page/DictTypeView.vue

@@ -0,0 +1,238 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="字典名称" prop="dictName">                <el-text class="mx-1">{{query.dictName}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="字典类型" prop="dictType">                <el-text class="mx-1">{{query.dictType}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="状态(1正常/0停用)" prop="status">                <el-text class="mx-1">{{query.status}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="备注" prop="remark">                <el-text class="mx-1">{{query.remark}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', DictType.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="字典名称" align="center" prop="dictName"/>
+        <el-table-column label="字典类型" align="center" prop="dictType"/>
+        <el-table-column label="状态(1正常/0停用)" align="center" prop="status"/>
+        <el-table-column label="备注" align="center" prop="remark"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="字典名称" prop="dictName">                <el-text class="mx-1">{{dialogForm.dictName}}</el-text>
+        </el-form-item>
+        <el-form-item label="字典类型" prop="dictType">                <el-text class="mx-1">{{dialogForm.dictType}}</el-text>
+        </el-form-item>
+        <el-form-item label="状态(1正常/0停用)" prop="status">                <el-text class="mx-1">{{dialogForm.status}}</el-text>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">                <el-text class="mx-1">{{dialogForm.remark}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseDictTypeById,
+  GetBaseDictTypeListByDictType,
+  SaveBaseDictType,
+  UpdateBaseDictType,
+  DictType,
+  DictTypeQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<DictType[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<DictType>(DictType.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<DictType>(null)
+let query = ref<DictTypeQuery>(DictTypeQuery.Create())
+let selectItems = ref<DictType[]>([])
+const selected = (arr: DictType[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: DictType) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = DictType.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseDictTypeById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseDictTypeListByDictType(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseDictType(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseDictType(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 464 - 0
output/vue/page/GenTableColumnView.vue

@@ -0,0 +1,464 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="表格id" prop="tableId">
+          <el-input v-model="query.tableId" placeholder="请输入表格id"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="排序" prop="sort">
+          <el-input-number v-model="query.sort" placeholder="请输入排序"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="字段注释" prop="columnComment">
+          <el-input v-model="query.columnComment" placeholder="请输入字段注释"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="字段类型" prop="columnType">                <el-text class="mx-1">{{query.columnType}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="go类型" prop="goType">
+          <el-select v-model="query.goType" placeholder="请选择go类型">
+            <el-option
+              v-for="item in store.state.dicts.get('go_type')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="go字段名" prop="goField">
+          <el-input v-model="query.goField" placeholder="请输入go字段名"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="是否主键" prop="isKey">            <el-radio-group v-model="query.isKey">
+              <el-radio
+                  v-for="item in [['0','否'], ['1','是']]"
+                  :key="item[0]"
+                  :label="item[0]">
+                {{ item[1] }}
+              </el-radio>
+            </el-radio-group>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="是否自增" prop="isIncrement">            <el-radio-group v-model="query.isIncrement">
+              <el-radio
+                  v-for="item in [['0','否'], ['1','是']]"
+                  :key="item[0]"
+                  :label="item[0]">
+                {{ item[1] }}
+              </el-radio>
+            </el-radio-group>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="是否未必填" prop="isRequired">            <el-radio-group v-model="query.isRequired">
+              <el-radio
+                  v-for="item in [['0','否'], ['1','是']]"
+                  :key="item[0]"
+                  :label="item[0]">
+                {{ item[1] }}
+              </el-radio>
+            </el-radio-group>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="查询方式" prop="queryType">
+          <el-select v-model="query.queryType" placeholder="请选择查询方式">
+            <el-option
+              v-for="item in store.state.dicts.get('query_type')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="前端显示类型" prop="vueShowType">
+          <el-select v-model="query.vueShowType" placeholder="请选择前端显示类型">
+            <el-option
+              v-for="item in store.state.dicts.get('vue_show_type')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="字典类型" prop="dictType">
+          <el-select v-model="query.dictType" placeholder="请选择字典类型">
+            <el-option
+              v-for="item in store.state.dicts.get('')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="字段名" prop="columnName">                <el-text class="mx-1">{{query.columnName}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', GenTableColumn.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="表格id" align="center" prop="tableId"/>
+        <el-table-column label="排序" align="center" prop="sort"/>
+        <el-table-column label="字段注释" align="center" prop="columnComment"/>
+        <el-table-column label="字段类型" align="center" prop="columnType"/>
+      <el-table-column label="go类型" align="center" prop="goType">
+        <template #default="scope">
+          <DictTag :dict-type="'go_type'" :dict-value="scope.row.goType"/>
+        </template>
+      </el-table-column>
+        <el-table-column label="go字段名" align="center" prop="goField"/>
+        <el-table-column label="是否主键" align="center" prop="isKey"/>
+        <el-table-column label="是否自增" align="center" prop="isIncrement"/>
+        <el-table-column label="是否未必填" align="center" prop="isRequired"/>
+      <el-table-column label="查询方式" align="center" prop="queryType">
+        <template #default="scope">
+          <DictTag :dict-type="'query_type'" :dict-value="scope.row.queryType"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="前端显示类型" align="center" prop="vueShowType">
+        <template #default="scope">
+          <DictTag :dict-type="'vue_show_type'" :dict-value="scope.row.vueShowType"/>
+        </template>
+      </el-table-column>
+        <el-table-column label="字典类型" align="center" prop="dictType"/>
+        <el-table-column label="字段名" align="center" prop="columnName"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="表格id" prop="tableId">
+          <el-input v-model="dialogForm.tableId" placeholder="请输入表格id"/>
+        </el-form-item>
+        <el-form-item label="排序" prop="sort">
+          <el-input-number v-model="dialogForm.sort" placeholder="请输入排序"/>
+        </el-form-item>
+        <el-form-item label="字段注释" prop="columnComment">
+          <el-input v-model="dialogForm.columnComment" placeholder="请输入字段注释"/>
+        </el-form-item>
+        <el-form-item label="字段类型" prop="columnType">                <el-text class="mx-1">{{dialogForm.columnType}}</el-text>
+        </el-form-item>
+        <el-form-item label="go类型" prop="goType">
+          <el-select v-model="dialogForm.goType" placeholder="请选择go类型">
+            <el-option
+              v-for="item in store.state.dicts.get('go_type')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="go字段名" prop="goField">
+          <el-input v-model="dialogForm.goField" placeholder="请输入go字段名"/>
+        </el-form-item>
+        <el-form-item label="是否主键" prop="isKey">            <el-radio-group v-model="dialogForm.isKey">
+              <el-radio
+                  v-for="item in [['0','否'], ['1','是']]"
+                  :key="item[0]"
+                  :label="item[0]">
+                {{ item[1] }}
+              </el-radio>
+            </el-radio-group>
+        </el-form-item>
+        <el-form-item label="是否自增" prop="isIncrement">            <el-radio-group v-model="dialogForm.isIncrement">
+              <el-radio
+                  v-for="item in [['0','否'], ['1','是']]"
+                  :key="item[0]"
+                  :label="item[0]">
+                {{ item[1] }}
+              </el-radio>
+            </el-radio-group>
+        </el-form-item>
+        <el-form-item label="是否未必填" prop="isRequired">            <el-radio-group v-model="dialogForm.isRequired">
+              <el-radio
+                  v-for="item in [['0','否'], ['1','是']]"
+                  :key="item[0]"
+                  :label="item[0]">
+                {{ item[1] }}
+              </el-radio>
+            </el-radio-group>
+        </el-form-item>
+        <el-form-item label="查询方式" prop="queryType">
+          <el-select v-model="dialogForm.queryType" placeholder="请选择查询方式">
+            <el-option
+              v-for="item in store.state.dicts.get('query_type')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="前端显示类型" prop="vueShowType">
+          <el-select v-model="dialogForm.vueShowType" placeholder="请选择前端显示类型">
+            <el-option
+              v-for="item in store.state.dicts.get('vue_show_type')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="字典类型" prop="dictType">
+          <el-select v-model="dialogForm.dictType" placeholder="请选择字典类型">
+            <el-option
+              v-for="item in store.state.dicts.get('')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="字段名" prop="columnName">                <el-text class="mx-1">{{dialogForm.columnName}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseGenTableColumnById,
+  GetBaseGenTableColumnListByGenTableColumn,
+  SaveBaseGenTableColumn,
+  UpdateBaseGenTableColumn,
+  GenTableColumn,
+  GenTableColumnQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<GenTableColumn[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<GenTableColumn>(GenTableColumn.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<GenTableColumn>(null)
+let query = ref<GenTableColumnQuery>(GenTableColumnQuery.Create())
+let selectItems = ref<GenTableColumn[]>([])
+const selected = (arr: GenTableColumn[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: GenTableColumn) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = GenTableColumn.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseGenTableColumnById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseGenTableColumnListByGenTableColumn(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseGenTableColumn(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseGenTableColumn(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 260 - 0
output/vue/page/GenTableView.vue

@@ -0,0 +1,260 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="数据库名" prop="tableName">
+          <el-input v-model="query.tableName" placeholder="请输入数据库名"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="数据库注释" prop="tableComment">
+          <el-input v-model="query.tableComment" placeholder="请输入数据库注释"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="名字" prop="name">
+          <el-input v-model="query.name" placeholder="请输入名字"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="路由名" prop="routerName">
+          <el-input v-model="query.routerName" placeholder="请输入路由名"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="query.remark" placeholder="请输入备注" type="textarea"/>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', GenTable.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="数据库名" align="center" prop="tableName"/>
+        <el-table-column label="数据库注释" align="center" prop="tableComment"/>
+        <el-table-column label="名字" align="center" prop="name"/>
+        <el-table-column label="路由名" align="center" prop="routerName"/>
+        <el-table-column label="备注" align="center" prop="remark"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="数据库名" prop="tableName">
+          <el-input v-model="dialogForm.tableName" placeholder="请输入数据库名"/>
+        </el-form-item>
+        <el-form-item label="数据库注释" prop="tableComment">
+          <el-input v-model="dialogForm.tableComment" placeholder="请输入数据库注释"/>
+        </el-form-item>
+        <el-form-item label="名字" prop="name">
+          <el-input v-model="dialogForm.name" placeholder="请输入名字"/>
+        </el-form-item>
+        <el-form-item label="路由名" prop="routerName">
+          <el-input v-model="dialogForm.routerName" placeholder="请输入路由名"/>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="dialogForm.remark" placeholder="请输入备注" type="textarea"/>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseGenTableById,
+  GetBaseGenTableListByGenTable,
+  SaveBaseGenTable,
+  UpdateBaseGenTable,
+  GenTable,
+  GenTableQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<GenTable[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<GenTable>(GenTable.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<GenTable>(null)
+let query = ref<GenTableQuery>(GenTableQuery.Create())
+let selectItems = ref<GenTable[]>([])
+const selected = (arr: GenTable[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: GenTable) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = GenTable.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseGenTableById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseGenTableListByGenTable(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseGenTable(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseGenTable(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 258 - 0
output/vue/page/GoodsCommodityAreaView.vue

@@ -0,0 +1,258 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="商品id" prop="goodsId">                <el-text class="mx-1">{{query.goodsId}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="商品属地名称" prop="commodityAreaName">
+          <el-input v-model="query.commodityAreaName" placeholder="请输入商品属地名称"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="详情图片" prop="detailImage">              <ImageUpload v-model:ImgUrl="query.detailImage"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="相关文本详情id" prop="detailIntroductionId">
+          <el-select v-model="query.detailIntroductionId" placeholder="请选择相关文本详情id">
+            <el-option
+              v-for="item in store.state.dicts.get('')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', GoodsCommodityArea.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="商品id" align="center" prop="goodsId"/>
+        <el-table-column label="商品属地名称" align="center" prop="commodityAreaName"/>
+      <el-table-column label="详情图片" align="center" prop="detailImage">
+        <template #default="scope">
+          <el-image  :src="scope.row.detailImage"></el-image>
+        </template>
+      </el-table-column>
+        <el-table-column label="相关文本详情id" align="center" prop="detailIntroductionId"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="商品id" prop="goodsId">                <el-text class="mx-1">{{dialogForm.goodsId}}</el-text>
+        </el-form-item>
+        <el-form-item label="商品属地名称" prop="commodityAreaName">
+          <el-input v-model="dialogForm.commodityAreaName" placeholder="请输入商品属地名称"/>
+        </el-form-item>
+        <el-form-item label="详情图片" prop="detailImage">              <ImageUpload v-model:ImgUrl="dialogForm.detailImage"/>
+        </el-form-item>
+        <el-form-item label="相关文本详情id" prop="detailIntroductionId">
+          <el-select v-model="dialogForm.detailIntroductionId" placeholder="请选择相关文本详情id">
+            <el-option
+              v-for="item in store.state.dicts.get('')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseGoodsCommodityAreaById,
+  GetBaseGoodsCommodityAreaListByGoodsCommodityArea,
+  SaveBaseGoodsCommodityArea,
+  UpdateBaseGoodsCommodityArea,
+  GoodsCommodityArea,
+  GoodsCommodityAreaQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<GoodsCommodityArea[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<GoodsCommodityArea>(GoodsCommodityArea.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<GoodsCommodityArea>(null)
+let query = ref<GoodsCommodityAreaQuery>(GoodsCommodityAreaQuery.Create())
+let selectItems = ref<GoodsCommodityArea[]>([])
+const selected = (arr: GoodsCommodityArea[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: GoodsCommodityArea) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = GoodsCommodityArea.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseGoodsCommodityAreaById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseGoodsCommodityAreaListByGoodsCommodityArea(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseGoodsCommodityArea(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseGoodsCommodityArea(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 238 - 0
output/vue/page/GoodsCouponUserView.vue

@@ -0,0 +1,238 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="用户id" prop="userId">                <el-text class="mx-1">{{query.userId}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="优惠券id" prop="couponId">                <el-text class="mx-1">{{query.couponId}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="领取时间" prop="collectionTime">                <el-text class="mx-1">{{query.collectionTime}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="状态,已使用2,未使用1,已过期0" prop="state">                <el-text class="mx-1">{{query.state}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', GoodsCouponUser.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="用户id" align="center" prop="userId"/>
+        <el-table-column label="优惠券id" align="center" prop="couponId"/>
+        <el-table-column label="领取时间" align="center" prop="collectionTime"/>
+        <el-table-column label="状态,已使用2,未使用1,已过期0" align="center" prop="state"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="用户id" prop="userId">                <el-text class="mx-1">{{dialogForm.userId}}</el-text>
+        </el-form-item>
+        <el-form-item label="优惠券id" prop="couponId">                <el-text class="mx-1">{{dialogForm.couponId}}</el-text>
+        </el-form-item>
+        <el-form-item label="领取时间" prop="collectionTime">                <el-text class="mx-1">{{dialogForm.collectionTime}}</el-text>
+        </el-form-item>
+        <el-form-item label="状态,已使用2,未使用1,已过期0" prop="state">                <el-text class="mx-1">{{dialogForm.state}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseGoodsCouponUserById,
+  GetBaseGoodsCouponUserListByGoodsCouponUser,
+  SaveBaseGoodsCouponUser,
+  UpdateBaseGoodsCouponUser,
+  GoodsCouponUser,
+  GoodsCouponUserQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<GoodsCouponUser[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<GoodsCouponUser>(GoodsCouponUser.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<GoodsCouponUser>(null)
+let query = ref<GoodsCouponUserQuery>(GoodsCouponUserQuery.Create())
+let selectItems = ref<GoodsCouponUser[]>([])
+const selected = (arr: GoodsCouponUser[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: GoodsCouponUser) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = GoodsCouponUser.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseGoodsCouponUserById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseGoodsCouponUserListByGoodsCouponUser(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseGoodsCouponUser(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseGoodsCouponUser(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 406 - 0
output/vue/page/GoodsCouponView.vue

@@ -0,0 +1,406 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="优惠券名称" prop="couponName">
+          <el-input v-model="query.couponName" placeholder="请输入优惠券名称"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="优惠券描述" prop="couponDesc">
+          <el-input v-model="query.couponDesc" placeholder="请输入优惠券描述" type="textarea"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="满x" prop="cashBackPoint">
+          <el-input-number v-model="query.cashBackPoint" placeholder="请输入满x"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="减x" prop="cashBackPrice">
+          <el-input-number v-model="query.cashBackPrice" placeholder="请输入减x"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="主题可用,id" prop="conditionByTopic">
+          <el-select v-model="query.conditionByTopic" placeholder="请选择主题可用,id">
+            <el-option
+              v-for="item in store.state.dicts.get('')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="类型可用,id" prop="conditionByType">
+          <el-select v-model="query.conditionByType" placeholder="请选择类型可用,id">
+            <el-option
+              v-for="item in store.state.dicts.get('')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="商品可用,id" prop="conditionByGoods">
+          <el-select v-model="query.conditionByGoods" placeholder="请选择商品可用,id">
+            <el-option
+              v-for="item in store.state.dicts.get('')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="发放数量" prop="grantCount">
+          <el-input-number v-model="query.grantCount" placeholder="请输入发放数量"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="优惠券余量" prop="count">                <el-text class="mx-1">{{query.count}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="领取条件" prop="receiveType">
+          <el-input v-model="query.receiveType" placeholder="请输入领取条件"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="有效性,领取开始计时(ClaimTiming),固定时间(FixedTime)" prop="validity">
+          <el-select v-model="query.validity" placeholder="请选择有效性,领取开始计时(ClaimTiming),固定时间(FixedTime)">
+            <el-option
+              v-for="item in store.state.dicts.get('coupon_validity')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="有效期" prop="validityPeriod">      <el-date-picker v-model="query.validityPeriod" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', GoodsCoupon.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="优惠券名称" align="center" prop="couponName"/>
+        <el-table-column label="优惠券描述" align="center" prop="couponDesc"/>
+        <el-table-column label="满x" align="center" prop="cashBackPoint"/>
+        <el-table-column label="减x" align="center" prop="cashBackPrice"/>
+        <el-table-column label="主题可用,id" align="center" prop="conditionByTopic"/>
+        <el-table-column label="类型可用,id" align="center" prop="conditionByType"/>
+        <el-table-column label="商品可用,id" align="center" prop="conditionByGoods"/>
+        <el-table-column label="发放数量" align="center" prop="grantCount"/>
+        <el-table-column label="优惠券余量" align="center" prop="count"/>
+        <el-table-column label="领取条件" align="center" prop="receiveType"/>
+      <el-table-column label="有效性,领取开始计时(ClaimTiming),固定时间(FixedTime)" align="center" prop="validity">
+        <template #default="scope">
+          <DictTag :dict-type="'coupon_validity'" :dict-value="scope.row.validity"/>
+        </template>
+      </el-table-column>
+        <el-table-column label="有效期" align="center" prop="validityPeriod"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="优惠券名称" prop="couponName">
+          <el-input v-model="dialogForm.couponName" placeholder="请输入优惠券名称"/>
+        </el-form-item>
+        <el-form-item label="优惠券描述" prop="couponDesc">
+          <el-input v-model="dialogForm.couponDesc" placeholder="请输入优惠券描述" type="textarea"/>
+        </el-form-item>
+        <el-form-item label="满x" prop="cashBackPoint">
+          <el-input-number v-model="dialogForm.cashBackPoint" placeholder="请输入满x"/>
+        </el-form-item>
+        <el-form-item label="减x" prop="cashBackPrice">
+          <el-input-number v-model="dialogForm.cashBackPrice" placeholder="请输入减x"/>
+        </el-form-item>
+        <el-form-item label="主题可用,id" prop="conditionByTopic">
+          <el-select v-model="dialogForm.conditionByTopic" placeholder="请选择主题可用,id">
+            <el-option
+              v-for="item in store.state.dicts.get('')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="类型可用,id" prop="conditionByType">
+          <el-select v-model="dialogForm.conditionByType" placeholder="请选择类型可用,id">
+            <el-option
+              v-for="item in store.state.dicts.get('')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="商品可用,id" prop="conditionByGoods">
+          <el-select v-model="dialogForm.conditionByGoods" placeholder="请选择商品可用,id">
+            <el-option
+              v-for="item in store.state.dicts.get('')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="发放数量" prop="grantCount">
+          <el-input-number v-model="dialogForm.grantCount" placeholder="请输入发放数量"/>
+        </el-form-item>
+        <el-form-item label="优惠券余量" prop="count">                <el-text class="mx-1">{{dialogForm.count}}</el-text>
+        </el-form-item>
+        <el-form-item label="领取条件" prop="receiveType">
+          <el-input v-model="dialogForm.receiveType" placeholder="请输入领取条件"/>
+        </el-form-item>
+        <el-form-item label="有效性,领取开始计时(ClaimTiming),固定时间(FixedTime)" prop="validity">
+          <el-select v-model="dialogForm.validity" placeholder="请选择有效性,领取开始计时(ClaimTiming),固定时间(FixedTime)">
+            <el-option
+              v-for="item in store.state.dicts.get('coupon_validity')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="有效期" prop="validityPeriod">      <el-date-picker v-model="dialogForm.validityPeriod" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseGoodsCouponById,
+  GetBaseGoodsCouponListByGoodsCoupon,
+  SaveBaseGoodsCoupon,
+  UpdateBaseGoodsCoupon,
+  GoodsCoupon,
+  GoodsCouponQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<GoodsCoupon[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<GoodsCoupon>(GoodsCoupon.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<GoodsCoupon>(null)
+let query = ref<GoodsCouponQuery>(GoodsCouponQuery.Create())
+let selectItems = ref<GoodsCoupon[]>([])
+const selected = (arr: GoodsCoupon[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: GoodsCoupon) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = GoodsCoupon.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseGoodsCouponById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseGoodsCouponListByGoodsCoupon(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseGoodsCoupon(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseGoodsCoupon(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 264 - 0
output/vue/page/GoodsIntroductionView.vue

@@ -0,0 +1,264 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="商品文章名" prop="goodsArticleName">
+          <el-input v-model="query.goodsArticleName" placeholder="请输入商品文章名"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="商品文章" prop="goodsArticle">              <EditorComponent v-model:htmlString="query.goodsArticle"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="创建人" prop="createBy">                <el-text class="mx-1">{{query.createBy}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="创建时间" prop="createTime">      <el-date-picker v-model="query.createTime" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="更新人" prop="updateBy">                <el-text class="mx-1">{{query.updateBy}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="更新时间" prop="updateTime">      <el-date-picker v-model="query.updateTime" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', GoodsIntroduction.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="文章id" align="center" prop="id"/>
+        <el-table-column label="商品文章名" align="center" prop="goodsArticleName"/>
+        <el-table-column label="商品文章" align="center" prop="goodsArticle"/>
+        <el-table-column label="创建人" align="center" prop="createBy"/>
+        <el-table-column label="创建时间" align="center" prop="createTime"/>
+        <el-table-column label="更新人" align="center" prop="updateBy"/>
+        <el-table-column label="更新时间" align="center" prop="updateTime"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="商品文章名" prop="goodsArticleName">
+          <el-input v-model="dialogForm.goodsArticleName" placeholder="请输入商品文章名"/>
+        </el-form-item>
+        <el-form-item label="商品文章" prop="goodsArticle">              <EditorComponent v-model:htmlString="dialogForm.goodsArticle"/>
+        </el-form-item>
+        <el-form-item label="创建人" prop="createBy">                <el-text class="mx-1">{{dialogForm.createBy}}</el-text>
+        </el-form-item>
+        <el-form-item label="创建时间" prop="createTime">      <el-date-picker v-model="dialogForm.createTime" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+        <el-form-item label="更新人" prop="updateBy">                <el-text class="mx-1">{{dialogForm.updateBy}}</el-text>
+        </el-form-item>
+        <el-form-item label="更新时间" prop="updateTime">      <el-date-picker v-model="dialogForm.updateTime" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseGoodsIntroductionById,
+  GetBaseGoodsIntroductionListByGoodsIntroduction,
+  SaveBaseGoodsIntroduction,
+  UpdateBaseGoodsIntroduction,
+  GoodsIntroduction,
+  GoodsIntroductionQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<GoodsIntroduction[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<GoodsIntroduction>(GoodsIntroduction.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<GoodsIntroduction>(null)
+let query = ref<GoodsIntroductionQuery>(GoodsIntroductionQuery.Create())
+let selectItems = ref<GoodsIntroduction[]>([])
+const selected = (arr: GoodsIntroduction[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: GoodsIntroduction) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = GoodsIntroduction.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseGoodsIntroductionById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseGoodsIntroductionListByGoodsIntroduction(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseGoodsIntroduction(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseGoodsIntroduction(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 322 - 0
output/vue/page/GoodsOrderView.vue

@@ -0,0 +1,322 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="订单名" prop="orderName">                <el-text class="mx-1">{{query.orderName}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="skuid" prop="skuId">                <el-text class="mx-1">{{query.skuId}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="购买数量" prop="count">                <el-text class="mx-1">{{query.count}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="单价" prop="price">                <el-text class="mx-1">{{query.price}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="总价" prop="totalPrice">                <el-text class="mx-1">{{query.totalPrice}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="联系方式" prop="contactInformation">                <el-text class="mx-1">{{query.contactInformation}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="使用的优惠券" prop="couponUserId">                <el-text class="mx-1">{{query.couponUserId}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="支付状态,0待支付,1待发货,2已发货,3订单完成,4订单异常" prop="state">                <el-text class="mx-1">{{query.state}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="用户id" prop="createBy">                <el-text class="mx-1">{{query.createBy}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="订单创建时间" prop="createTime">                <el-text class="mx-1">{{query.createTime}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="其他数据" prop="otherData">                <el-text class="mx-1">{{query.otherData}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', GoodsOrder.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="订单名" align="center" prop="orderName"/>
+        <el-table-column label="skuid" align="center" prop="skuId"/>
+        <el-table-column label="购买数量" align="center" prop="count"/>
+        <el-table-column label="单价" align="center" prop="price"/>
+        <el-table-column label="总价" align="center" prop="totalPrice"/>
+        <el-table-column label="联系方式" align="center" prop="contactInformation"/>
+        <el-table-column label="使用的优惠券" align="center" prop="couponUserId"/>
+        <el-table-column label="支付状态,0待支付,1待发货,2已发货,3订单完成,4订单异常" align="center" prop="state"/>
+        <el-table-column label="用户id" align="center" prop="createBy"/>
+        <el-table-column label="订单创建时间" align="center" prop="createTime"/>
+        <el-table-column label="其他数据" align="center" prop="otherData"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="订单名" prop="orderName">                <el-text class="mx-1">{{dialogForm.orderName}}</el-text>
+        </el-form-item>
+        <el-form-item label="skuid" prop="skuId">                <el-text class="mx-1">{{dialogForm.skuId}}</el-text>
+        </el-form-item>
+        <el-form-item label="购买数量" prop="count">                <el-text class="mx-1">{{dialogForm.count}}</el-text>
+        </el-form-item>
+        <el-form-item label="单价" prop="price">                <el-text class="mx-1">{{dialogForm.price}}</el-text>
+        </el-form-item>
+        <el-form-item label="总价" prop="totalPrice">                <el-text class="mx-1">{{dialogForm.totalPrice}}</el-text>
+        </el-form-item>
+        <el-form-item label="联系方式" prop="contactInformation">                <el-text class="mx-1">{{dialogForm.contactInformation}}</el-text>
+        </el-form-item>
+        <el-form-item label="使用的优惠券" prop="couponUserId">                <el-text class="mx-1">{{dialogForm.couponUserId}}</el-text>
+        </el-form-item>
+        <el-form-item label="支付状态,0待支付,1待发货,2已发货,3订单完成,4订单异常" prop="state">                <el-text class="mx-1">{{dialogForm.state}}</el-text>
+        </el-form-item>
+        <el-form-item label="用户id" prop="createBy">                <el-text class="mx-1">{{dialogForm.createBy}}</el-text>
+        </el-form-item>
+        <el-form-item label="订单创建时间" prop="createTime">                <el-text class="mx-1">{{dialogForm.createTime}}</el-text>
+        </el-form-item>
+        <el-form-item label="其他数据" prop="otherData">                <el-text class="mx-1">{{dialogForm.otherData}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseGoodsOrderById,
+  GetBaseGoodsOrderListByGoodsOrder,
+  SaveBaseGoodsOrder,
+  UpdateBaseGoodsOrder,
+  GoodsOrder,
+  GoodsOrderQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<GoodsOrder[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<GoodsOrder>(GoodsOrder.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<GoodsOrder>(null)
+let query = ref<GoodsOrderQuery>(GoodsOrderQuery.Create())
+let selectItems = ref<GoodsOrder[]>([])
+const selected = (arr: GoodsOrder[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: GoodsOrder) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = GoodsOrder.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseGoodsOrderById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseGoodsOrderListByGoodsOrder(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseGoodsOrder(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseGoodsOrder(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 298 - 0
output/vue/page/GoodsSkuCardView.vue

@@ -0,0 +1,298 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="卡种名称" prop="cardName">                <el-text class="mx-1">{{query.cardName}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="状态,0未使用,1已用,2过期" prop="state">                <el-text class="mx-1">{{query.state}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="库存" prop="count">                <el-text class="mx-1">{{query.count}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="总数" prop="totalCount">                <el-text class="mx-1">{{query.totalCount}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="卡密" prop="cardKey">                <el-text class="mx-1">{{query.cardKey}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="是否已用" prop="use">                <el-text class="mx-1">{{query.use}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="入库时间" prop="uploadTime">                <el-text class="mx-1">{{query.uploadTime}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="商品规格绑定" prop="skuId">                <el-text class="mx-1">{{query.skuId}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="排序,出售优先级" prop="sort">                <el-text class="mx-1">{{query.sort}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', GoodsSkuCard.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="卡种名称" align="center" prop="cardName"/>
+        <el-table-column label="状态,0未使用,1已用,2过期" align="center" prop="state"/>
+        <el-table-column label="库存" align="center" prop="count"/>
+        <el-table-column label="总数" align="center" prop="totalCount"/>
+        <el-table-column label="卡密" align="center" prop="cardKey"/>
+        <el-table-column label="是否已用" align="center" prop="use"/>
+        <el-table-column label="入库时间" align="center" prop="uploadTime"/>
+        <el-table-column label="商品规格绑定" align="center" prop="skuId"/>
+        <el-table-column label="排序,出售优先级" align="center" prop="sort"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="卡种名称" prop="cardName">                <el-text class="mx-1">{{dialogForm.cardName}}</el-text>
+        </el-form-item>
+        <el-form-item label="状态,0未使用,1已用,2过期" prop="state">                <el-text class="mx-1">{{dialogForm.state}}</el-text>
+        </el-form-item>
+        <el-form-item label="库存" prop="count">                <el-text class="mx-1">{{dialogForm.count}}</el-text>
+        </el-form-item>
+        <el-form-item label="总数" prop="totalCount">                <el-text class="mx-1">{{dialogForm.totalCount}}</el-text>
+        </el-form-item>
+        <el-form-item label="卡密" prop="cardKey">                <el-text class="mx-1">{{dialogForm.cardKey}}</el-text>
+        </el-form-item>
+        <el-form-item label="是否已用" prop="use">                <el-text class="mx-1">{{dialogForm.use}}</el-text>
+        </el-form-item>
+        <el-form-item label="入库时间" prop="uploadTime">                <el-text class="mx-1">{{dialogForm.uploadTime}}</el-text>
+        </el-form-item>
+        <el-form-item label="商品规格绑定" prop="skuId">                <el-text class="mx-1">{{dialogForm.skuId}}</el-text>
+        </el-form-item>
+        <el-form-item label="排序,出售优先级" prop="sort">                <el-text class="mx-1">{{dialogForm.sort}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseGoodsSkuCardById,
+  GetBaseGoodsSkuCardListByGoodsSkuCard,
+  SaveBaseGoodsSkuCard,
+  UpdateBaseGoodsSkuCard,
+  GoodsSkuCard,
+  GoodsSkuCardQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<GoodsSkuCard[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<GoodsSkuCard>(GoodsSkuCard.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<GoodsSkuCard>(null)
+let query = ref<GoodsSkuCardQuery>(GoodsSkuCardQuery.Create())
+let selectItems = ref<GoodsSkuCard[]>([])
+const selected = (arr: GoodsSkuCard[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: GoodsSkuCard) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = GoodsSkuCard.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseGoodsSkuCardById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseGoodsSkuCardListByGoodsSkuCard(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseGoodsSkuCard(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseGoodsSkuCard(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 338 - 0
output/vue/page/GoodsSkuView.vue

@@ -0,0 +1,338 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="sku图片" prop="skuImage">              <ImageUpload v-model:ImgUrl="query.skuImage"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="商品sku名字" prop="skuName">
+          <el-input v-model="query.skuName" placeholder="请输入商品sku名字"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="现在价格" prop="price">
+          <el-input v-model="query.price" placeholder="请输入现在价格"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="历史价格" prop="historicalPrices">
+          <el-input v-model="query.historicalPrices" placeholder="请输入历史价格"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="库存" prop="inventoryNumber">
+          <el-input-number v-model="query.inventoryNumber" placeholder="请输入库存"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="属地id" prop="commodityAreaId">
+          <el-select v-model="query.commodityAreaId" placeholder="请选择属地id">
+            <el-option
+              v-for="item in store.state.dicts.get('')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="商品id" prop="goodsId">
+          <el-select v-model="query.goodsId" placeholder="请选择商品id">
+            <el-option
+              v-for="item in store.state.dicts.get('')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="创建人" prop="createBy">                <el-text class="mx-1">{{query.createBy}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="创建时间" prop="createTime">      <el-date-picker v-model="query.createTime" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', GoodsSku.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+      <el-table-column label="sku图片" align="center" prop="skuImage">
+        <template #default="scope">
+          <el-image  :src="scope.row.skuImage"></el-image>
+        </template>
+      </el-table-column>
+        <el-table-column label="商品sku名字" align="center" prop="skuName"/>
+        <el-table-column label="现在价格" align="center" prop="price"/>
+        <el-table-column label="历史价格" align="center" prop="historicalPrices"/>
+        <el-table-column label="库存" align="center" prop="inventoryNumber"/>
+        <el-table-column label="属地id" align="center" prop="commodityAreaId"/>
+        <el-table-column label="商品id" align="center" prop="goodsId"/>
+        <el-table-column label="创建人" align="center" prop="createBy"/>
+        <el-table-column label="创建时间" align="center" prop="createTime"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="sku图片" prop="skuImage">              <ImageUpload v-model:ImgUrl="dialogForm.skuImage"/>
+        </el-form-item>
+        <el-form-item label="商品sku名字" prop="skuName">
+          <el-input v-model="dialogForm.skuName" placeholder="请输入商品sku名字"/>
+        </el-form-item>
+        <el-form-item label="现在价格" prop="price">
+          <el-input v-model="dialogForm.price" placeholder="请输入现在价格"/>
+        </el-form-item>
+        <el-form-item label="历史价格" prop="historicalPrices">
+          <el-input v-model="dialogForm.historicalPrices" placeholder="请输入历史价格"/>
+        </el-form-item>
+        <el-form-item label="库存" prop="inventoryNumber">
+          <el-input-number v-model="dialogForm.inventoryNumber" placeholder="请输入库存"/>
+        </el-form-item>
+        <el-form-item label="属地id" prop="commodityAreaId">
+          <el-select v-model="dialogForm.commodityAreaId" placeholder="请选择属地id">
+            <el-option
+              v-for="item in store.state.dicts.get('')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="商品id" prop="goodsId">
+          <el-select v-model="dialogForm.goodsId" placeholder="请选择商品id">
+            <el-option
+              v-for="item in store.state.dicts.get('')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="创建人" prop="createBy">                <el-text class="mx-1">{{dialogForm.createBy}}</el-text>
+        </el-form-item>
+        <el-form-item label="创建时间" prop="createTime">      <el-date-picker v-model="dialogForm.createTime" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseGoodsSkuById,
+  GetBaseGoodsSkuListByGoodsSku,
+  SaveBaseGoodsSku,
+  UpdateBaseGoodsSku,
+  GoodsSku,
+  GoodsSkuQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<GoodsSku[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<GoodsSku>(GoodsSku.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<GoodsSku>(null)
+let query = ref<GoodsSkuQuery>(GoodsSkuQuery.Create())
+let selectItems = ref<GoodsSku[]>([])
+const selected = (arr: GoodsSku[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: GoodsSku) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = GoodsSku.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseGoodsSkuById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseGoodsSkuListByGoodsSku(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseGoodsSku(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseGoodsSku(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 234 - 0
output/vue/page/GoodsTagView.vue

@@ -0,0 +1,234 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="名字" prop="name">
+          <el-input v-model="query.name" placeholder="请输入名字"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="图标路径" prop="iconUrl">              <ImageUpload v-model:ImgUrl="query.iconUrl"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="标签" prop="tag">
+          <el-input v-model="query.tag" placeholder="请输入标签"/>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', GoodsTag.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="名字" align="center" prop="name"/>
+      <el-table-column label="图标路径" align="center" prop="iconUrl">
+        <template #default="scope">
+          <el-image  :src="scope.row.iconUrl"></el-image>
+        </template>
+      </el-table-column>
+        <el-table-column label="标签" align="center" prop="tag"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="名字" prop="name">
+          <el-input v-model="dialogForm.name" placeholder="请输入名字"/>
+        </el-form-item>
+        <el-form-item label="图标路径" prop="iconUrl">              <ImageUpload v-model:ImgUrl="dialogForm.iconUrl"/>
+        </el-form-item>
+        <el-form-item label="标签" prop="tag">
+          <el-input v-model="dialogForm.tag" placeholder="请输入标签"/>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseGoodsTagById,
+  GetBaseGoodsTagListByGoodsTag,
+  SaveBaseGoodsTag,
+  UpdateBaseGoodsTag,
+  GoodsTag,
+  GoodsTagQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<GoodsTag[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<GoodsTag>(GoodsTag.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<GoodsTag>(null)
+let query = ref<GoodsTagQuery>(GoodsTagQuery.Create())
+let selectItems = ref<GoodsTag[]>([])
+const selected = (arr: GoodsTag[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: GoodsTag) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = GoodsTag.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseGoodsTagById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseGoodsTagListByGoodsTag(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseGoodsTag(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseGoodsTag(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 244 - 0
output/vue/page/GoodsTypeView.vue

@@ -0,0 +1,244 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="排序" prop="sort">                <el-text class="mx-1">{{query.sort}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="类型图片" prop="typeImage">              <ImageUpload v-model:ImgUrl="query.typeImage"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="商品类别名称" prop="typeName">
+          <el-input v-model="query.typeName" placeholder="请输入商品类别名称"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="创建时间" prop="createTime">      <el-date-picker v-model="query.createTime" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', GoodsType.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="排序" align="center" prop="sort"/>
+      <el-table-column label="类型图片" align="center" prop="typeImage">
+        <template #default="scope">
+          <el-image  :src="scope.row.typeImage"></el-image>
+        </template>
+      </el-table-column>
+        <el-table-column label="商品类别名称" align="center" prop="typeName"/>
+        <el-table-column label="创建时间" align="center" prop="createTime"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="排序" prop="sort">                <el-text class="mx-1">{{dialogForm.sort}}</el-text>
+        </el-form-item>
+        <el-form-item label="类型图片" prop="typeImage">              <ImageUpload v-model:ImgUrl="dialogForm.typeImage"/>
+        </el-form-item>
+        <el-form-item label="商品类别名称" prop="typeName">
+          <el-input v-model="dialogForm.typeName" placeholder="请输入商品类别名称"/>
+        </el-form-item>
+        <el-form-item label="创建时间" prop="createTime">      <el-date-picker v-model="dialogForm.createTime" type="datetime" placeholder="请选择时间" value-format="YYYY-MM-DD hh:mm:ss"/>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseGoodsTypeById,
+  GetBaseGoodsTypeListByGoodsType,
+  SaveBaseGoodsType,
+  UpdateBaseGoodsType,
+  GoodsType,
+  GoodsTypeQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<GoodsType[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<GoodsType>(GoodsType.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<GoodsType>(null)
+let query = ref<GoodsTypeQuery>(GoodsTypeQuery.Create())
+let selectItems = ref<GoodsType[]>([])
+const selected = (arr: GoodsType[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: GoodsType) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = GoodsType.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseGoodsTypeById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseGoodsTypeListByGoodsType(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseGoodsType(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseGoodsType(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 268 - 0
output/vue/page/GoodsView.vue

@@ -0,0 +1,268 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="分类id" prop="typeId">
+          <el-select v-model="query.typeId" placeholder="请选择分类id">
+            <el-option
+              v-for="item in store.state.dicts.get('')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="商品名字" prop="goodsName">
+          <el-input v-model="query.goodsName" placeholder="请输入商品名字"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="商品介绍id" prop="introductionId">                <el-text class="mx-1">{{query.introductionId}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="近30天销量" prop="salesVolume">
+          <el-input-number v-model="query.salesVolume" placeholder="请输入近30天销量"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="商品标签" prop="tagIds">                <el-text class="mx-1">{{query.tagIds}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', Goods.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="分类id" align="center" prop="typeId"/>
+        <el-table-column label="商品名字" align="center" prop="goodsName"/>
+        <el-table-column label="商品介绍id" align="center" prop="introductionId"/>
+        <el-table-column label="近30天销量" align="center" prop="salesVolume"/>
+        <el-table-column label="商品标签" align="center" prop="tagIds"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="分类id" prop="typeId">
+          <el-select v-model="dialogForm.typeId" placeholder="请选择分类id">
+            <el-option
+              v-for="item in store.state.dicts.get('')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="商品名字" prop="goodsName">
+          <el-input v-model="dialogForm.goodsName" placeholder="请输入商品名字"/>
+        </el-form-item>
+        <el-form-item label="商品介绍id" prop="introductionId">                <el-text class="mx-1">{{dialogForm.introductionId}}</el-text>
+        </el-form-item>
+        <el-form-item label="近30天销量" prop="salesVolume">
+          <el-input-number v-model="dialogForm.salesVolume" placeholder="请输入近30天销量"/>
+        </el-form-item>
+        <el-form-item label="商品标签" prop="tagIds">                <el-text class="mx-1">{{dialogForm.tagIds}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseGoodsById,
+  GetBaseGoodsListByGoods,
+  SaveBaseGoods,
+  UpdateBaseGoods,
+  Goods,
+  GoodsQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<Goods[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<Goods>(Goods.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<Goods>(null)
+let query = ref<GoodsQuery>(GoodsQuery.Create())
+let selectItems = ref<Goods[]>([])
+const selected = (arr: Goods[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: Goods) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = Goods.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseGoodsById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseGoodsListByGoods(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseGoods(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseGoods(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 310 - 0
output/vue/page/ManageUserView.vue

@@ -0,0 +1,310 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="名称" prop="name">                <el-text class="mx-1">{{query.name}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="账号" prop="username">                <el-text class="mx-1">{{query.username}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="密码" prop="password">                <el-text class="mx-1">{{query.password}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="账号创建时间" prop="creationTime">                <el-text class="mx-1">{{query.creationTime}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="登录时间" prop="loginTime">                <el-text class="mx-1">{{query.loginTime}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="账号状态" prop="status">                <el-text class="mx-1">{{query.status}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="角色id" prop="roleId">                <el-text class="mx-1">{{query.roleId}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="手机" prop="phone">                <el-text class="mx-1">{{query.phone}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="邮箱" prop="email">                <el-text class="mx-1">{{query.email}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="头像" prop="avatar">                <el-text class="mx-1">{{query.avatar}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', ManageUser.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="名称" align="center" prop="name"/>
+        <el-table-column label="账号" align="center" prop="username"/>
+        <el-table-column label="密码" align="center" prop="password"/>
+        <el-table-column label="账号创建时间" align="center" prop="creationTime"/>
+        <el-table-column label="登录时间" align="center" prop="loginTime"/>
+        <el-table-column label="账号状态" align="center" prop="status"/>
+        <el-table-column label="角色id" align="center" prop="roleId"/>
+        <el-table-column label="手机" align="center" prop="phone"/>
+        <el-table-column label="邮箱" align="center" prop="email"/>
+        <el-table-column label="头像" align="center" prop="avatar"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="名称" prop="name">                <el-text class="mx-1">{{dialogForm.name}}</el-text>
+        </el-form-item>
+        <el-form-item label="账号" prop="username">                <el-text class="mx-1">{{dialogForm.username}}</el-text>
+        </el-form-item>
+        <el-form-item label="密码" prop="password">                <el-text class="mx-1">{{dialogForm.password}}</el-text>
+        </el-form-item>
+        <el-form-item label="账号创建时间" prop="creationTime">                <el-text class="mx-1">{{dialogForm.creationTime}}</el-text>
+        </el-form-item>
+        <el-form-item label="登录时间" prop="loginTime">                <el-text class="mx-1">{{dialogForm.loginTime}}</el-text>
+        </el-form-item>
+        <el-form-item label="账号状态" prop="status">                <el-text class="mx-1">{{dialogForm.status}}</el-text>
+        </el-form-item>
+        <el-form-item label="角色id" prop="roleId">                <el-text class="mx-1">{{dialogForm.roleId}}</el-text>
+        </el-form-item>
+        <el-form-item label="手机" prop="phone">                <el-text class="mx-1">{{dialogForm.phone}}</el-text>
+        </el-form-item>
+        <el-form-item label="邮箱" prop="email">                <el-text class="mx-1">{{dialogForm.email}}</el-text>
+        </el-form-item>
+        <el-form-item label="头像" prop="avatar">                <el-text class="mx-1">{{dialogForm.avatar}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseManageUserById,
+  GetBaseManageUserListByManageUser,
+  SaveBaseManageUser,
+  UpdateBaseManageUser,
+  ManageUser,
+  ManageUserQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<ManageUser[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<ManageUser>(ManageUser.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<ManageUser>(null)
+let query = ref<ManageUserQuery>(ManageUserQuery.Create())
+let selectItems = ref<ManageUser[]>([])
+const selected = (arr: ManageUser[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: ManageUser) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = ManageUser.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseManageUserById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseManageUserListByManageUser(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseManageUser(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseManageUser(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 412 - 0
output/vue/page/ShopAdviceCarouselView.vue

@@ -0,0 +1,412 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="广告名称" prop="name">
+          <el-input v-model="query.name" placeholder="请输入广告名称"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="目标id" prop="toId">
+          <el-input v-model="query.toId" placeholder="请输入目标id"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="广告类型,用于跳转到对应的页面" prop="adviceType">
+          <el-select v-model="query.adviceType" placeholder="请选择广告类型,用于跳转到对应的页面">
+            <el-option
+              v-for="item in store.state.dicts.get('advice_type')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="排序" prop="sort">
+          <el-input-number v-model="query.sort" placeholder="请输入排序"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="状态" prop="state">            <el-radio-group v-model="query.state">
+              <el-radio
+                  v-for="item in [['0','否'], ['1','是']]"
+                  :key="item[0]"
+                  :label="item[0]">
+                {{ item[1] }}
+              </el-radio>
+            </el-radio-group>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="显示类型,carousel轮播图,package,礼包" prop="showType">
+          <el-select v-model="query.showType" placeholder="请选择显示类型,carousel轮播图,package,礼包">
+            <el-option
+              v-for="item in store.state.dicts.get('show_type')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="创建人" prop="createBy">                <el-text class="mx-1">{{query.createBy}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="创建时间" prop="createTime">                <el-text class="mx-1">{{query.createTime}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="更新人" prop="updateBy">                <el-text class="mx-1">{{query.updateBy}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="更新时间" prop="updateTime">                <el-text class="mx-1">{{query.updateTime}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="图片" prop="imageUrl">              <ImageUpload v-model:ImgUrl="query.imageUrl"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="目标类型" prop="toType">
+          <el-select v-model="query.toType" placeholder="请选择目标类型">
+            <el-option
+              v-for="item in store.state.dicts.get('to_type')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', ShopAdviceCarousel.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="广告名称" align="center" prop="name"/>
+        <el-table-column label="目标id" align="center" prop="toId"/>
+      <el-table-column label="广告类型,用于跳转到对应的页面" align="center" prop="adviceType">
+        <template #default="scope">
+          <DictTag :dict-type="'advice_type'" :dict-value="scope.row.adviceType"/>
+        </template>
+      </el-table-column>
+        <el-table-column label="排序" align="center" prop="sort"/>
+        <el-table-column label="状态" align="center" prop="state"/>
+      <el-table-column label="显示类型,carousel轮播图,package,礼包" align="center" prop="showType">
+        <template #default="scope">
+          <DictTag :dict-type="'show_type'" :dict-value="scope.row.showType"/>
+        </template>
+      </el-table-column>
+        <el-table-column label="创建人" align="center" prop="createBy"/>
+        <el-table-column label="创建时间" align="center" prop="createTime"/>
+        <el-table-column label="更新人" align="center" prop="updateBy"/>
+        <el-table-column label="更新时间" align="center" prop="updateTime"/>
+      <el-table-column label="图片" align="center" prop="imageUrl">
+        <template #default="scope">
+          <el-image  :src="scope.row.imageUrl"></el-image>
+        </template>
+      </el-table-column>
+      <el-table-column label="目标类型" align="center" prop="toType">
+        <template #default="scope">
+          <DictTag :dict-type="'to_type'" :dict-value="scope.row.toType"/>
+        </template>
+      </el-table-column>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="广告名称" prop="name">
+          <el-input v-model="dialogForm.name" placeholder="请输入广告名称"/>
+        </el-form-item>
+        <el-form-item label="目标id" prop="toId">
+          <el-input v-model="dialogForm.toId" placeholder="请输入目标id"/>
+        </el-form-item>
+        <el-form-item label="广告类型,用于跳转到对应的页面" prop="adviceType">
+          <el-select v-model="dialogForm.adviceType" placeholder="请选择广告类型,用于跳转到对应的页面">
+            <el-option
+              v-for="item in store.state.dicts.get('advice_type')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="排序" prop="sort">
+          <el-input-number v-model="dialogForm.sort" placeholder="请输入排序"/>
+        </el-form-item>
+        <el-form-item label="状态" prop="state">            <el-radio-group v-model="dialogForm.state">
+              <el-radio
+                  v-for="item in [['0','否'], ['1','是']]"
+                  :key="item[0]"
+                  :label="item[0]">
+                {{ item[1] }}
+              </el-radio>
+            </el-radio-group>
+        </el-form-item>
+        <el-form-item label="显示类型,carousel轮播图,package,礼包" prop="showType">
+          <el-select v-model="dialogForm.showType" placeholder="请选择显示类型,carousel轮播图,package,礼包">
+            <el-option
+              v-for="item in store.state.dicts.get('show_type')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="创建人" prop="createBy">                <el-text class="mx-1">{{dialogForm.createBy}}</el-text>
+        </el-form-item>
+        <el-form-item label="创建时间" prop="createTime">                <el-text class="mx-1">{{dialogForm.createTime}}</el-text>
+        </el-form-item>
+        <el-form-item label="更新人" prop="updateBy">                <el-text class="mx-1">{{dialogForm.updateBy}}</el-text>
+        </el-form-item>
+        <el-form-item label="更新时间" prop="updateTime">                <el-text class="mx-1">{{dialogForm.updateTime}}</el-text>
+        </el-form-item>
+        <el-form-item label="图片" prop="imageUrl">              <ImageUpload v-model:ImgUrl="dialogForm.imageUrl"/>
+        </el-form-item>
+        <el-form-item label="目标类型" prop="toType">
+          <el-select v-model="dialogForm.toType" placeholder="请选择目标类型">
+            <el-option
+              v-for="item in store.state.dicts.get('to_type')"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseShopAdviceCarouselById,
+  GetBaseShopAdviceCarouselListByShopAdviceCarousel,
+  SaveBaseShopAdviceCarousel,
+  UpdateBaseShopAdviceCarousel,
+  ShopAdviceCarousel,
+  ShopAdviceCarouselQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<ShopAdviceCarousel[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<ShopAdviceCarousel>(ShopAdviceCarousel.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<ShopAdviceCarousel>(null)
+let query = ref<ShopAdviceCarouselQuery>(ShopAdviceCarouselQuery.Create())
+let selectItems = ref<ShopAdviceCarousel[]>([])
+const selected = (arr: ShopAdviceCarousel[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: ShopAdviceCarousel) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = ShopAdviceCarousel.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseShopAdviceCarouselById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseShopAdviceCarouselListByShopAdviceCarousel(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseShopAdviceCarousel(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseShopAdviceCarousel(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 218 - 0
output/vue/page/ShopTopicSkuView.vue

@@ -0,0 +1,218 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+              
+            
+            
+        <el-form-item label="topicId" prop="topicId">                <el-text class="mx-1">{{query.topicId}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+              
+            
+            
+        <el-form-item label="skuId" prop="skuId">                <el-text class="mx-1">{{query.skuId}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', ShopTopicSku.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label=" " align="center" prop="id"/>
+        <el-table-column label="topicId" align="center" prop="topicId"/>
+        <el-table-column label="skuId" align="center" prop="skuId"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="topicId" prop="topicId">                <el-text class="mx-1">{{dialogForm.topicId}}</el-text>
+        </el-form-item>
+        <el-form-item label="skuId" prop="skuId">                <el-text class="mx-1">{{dialogForm.skuId}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseShopTopicSkuById,
+  GetBaseShopTopicSkuListByShopTopicSku,
+  SaveBaseShopTopicSku,
+  UpdateBaseShopTopicSku,
+  ShopTopicSku,
+  ShopTopicSkuQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<ShopTopicSku[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<ShopTopicSku>(ShopTopicSku.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<ShopTopicSku>(null)
+let query = ref<ShopTopicSkuQuery>(ShopTopicSkuQuery.Create())
+let selectItems = ref<ShopTopicSku[]>([])
+const selected = (arr: ShopTopicSku[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: ShopTopicSku) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = ShopTopicSku.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseShopTopicSkuById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseShopTopicSkuListByShopTopicSku(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseShopTopicSku(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseShopTopicSku(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 274 - 0
output/vue/page/ShopTopicView.vue

@@ -0,0 +1,274 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+              
+            
+            
+        <el-form-item label="sort" prop="sort">
+          <el-input-number v-model="query.sort" placeholder="请输入sort"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="父级id" prop="parentId">                <el-text class="mx-1">{{query.parentId}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="主题首页图片" prop="topicPageImage">              <ImageUpload v-model:ImgUrl="query.topicPageImage"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="主题名称" prop="topicName">
+          <el-input v-model="query.topicName" placeholder="请输入主题名称"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="主题描述" prop="topicDesc">
+          <el-input v-model="query.topicDesc" placeholder="请输入主题描述"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="商品类型id" prop="typeIds">                <el-text class="mx-1">{{query.typeIds}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', ShopTopic.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="sort" align="center" prop="sort"/>
+        <el-table-column label="父级id" align="center" prop="parentId"/>
+      <el-table-column label="主题首页图片" align="center" prop="topicPageImage">
+        <template #default="scope">
+          <el-image  :src="scope.row.topicPageImage"></el-image>
+        </template>
+      </el-table-column>
+        <el-table-column label="主题名称" align="center" prop="topicName"/>
+        <el-table-column label="主题描述" align="center" prop="topicDesc"/>
+        <el-table-column label="商品类型id" align="center" prop="typeIds"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="sort" prop="sort">
+          <el-input-number v-model="dialogForm.sort" placeholder="请输入sort"/>
+        </el-form-item>
+        <el-form-item label="父级id" prop="parentId">                <el-text class="mx-1">{{dialogForm.parentId}}</el-text>
+        </el-form-item>
+        <el-form-item label="主题首页图片" prop="topicPageImage">              <ImageUpload v-model:ImgUrl="dialogForm.topicPageImage"/>
+        </el-form-item>
+        <el-form-item label="主题名称" prop="topicName">
+          <el-input v-model="dialogForm.topicName" placeholder="请输入主题名称"/>
+        </el-form-item>
+        <el-form-item label="主题描述" prop="topicDesc">
+          <el-input v-model="dialogForm.topicDesc" placeholder="请输入主题描述"/>
+        </el-form-item>
+        <el-form-item label="商品类型id" prop="typeIds">                <el-text class="mx-1">{{dialogForm.typeIds}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseShopTopicById,
+  GetBaseShopTopicListByShopTopic,
+  SaveBaseShopTopic,
+  UpdateBaseShopTopic,
+  ShopTopic,
+  ShopTopicQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<ShopTopic[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<ShopTopic>(ShopTopic.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<ShopTopic>(null)
+let query = ref<ShopTopicQuery>(ShopTopicQuery.Create())
+let selectItems = ref<ShopTopic[]>([])
+const selected = (arr: ShopTopic[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: ShopTopic) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = ShopTopic.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseShopTopicById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseShopTopicListByShopTopic(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseShopTopic(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseShopTopic(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 338 - 0
output/vue/page/UserView.vue

@@ -0,0 +1,338 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="账号" prop="username">                <el-text class="mx-1">{{query.username}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="密码" prop="password">                <el-text class="mx-1">{{query.password}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="账号创建时间" prop="creationTime">                <el-text class="mx-1">{{query.creationTime}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="登录时间" prop="loginTime">                <el-text class="mx-1">{{query.loginTime}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="账号状态" prop="status">                <el-text class="mx-1">{{query.status}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="角色id" prop="roleId">                <el-text class="mx-1">{{query.roleId}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="手机" prop="phone">                <el-text class="mx-1">{{query.phone}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="邮箱" prop="email">                <el-text class="mx-1">{{query.email}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="用户名" prop="name">                <el-text class="mx-1">{{query.name}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="头像" prop="avatar">              <ImageUpload v-model:ImgUrl="query.avatar"/>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="推荐码" prop="recommendCode">                <el-text class="mx-1">{{query.recommendCode}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="邀请人" prop="inviterBy">                <el-text class="mx-1">{{query.inviterBy}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', User.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="账号" align="center" prop="username"/>
+        <el-table-column label="密码" align="center" prop="password"/>
+        <el-table-column label="账号创建时间" align="center" prop="creationTime"/>
+        <el-table-column label="登录时间" align="center" prop="loginTime"/>
+        <el-table-column label="账号状态" align="center" prop="status"/>
+        <el-table-column label="角色id" align="center" prop="roleId"/>
+        <el-table-column label="手机" align="center" prop="phone"/>
+        <el-table-column label="邮箱" align="center" prop="email"/>
+        <el-table-column label="用户名" align="center" prop="name"/>
+      <el-table-column label="头像" align="center" prop="avatar">
+        <template #default="scope">
+          <el-image  :src="scope.row.avatar"></el-image>
+        </template>
+      </el-table-column>
+        <el-table-column label="推荐码" align="center" prop="recommendCode"/>
+        <el-table-column label="邀请人" align="center" prop="inviterBy"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="账号" prop="username">                <el-text class="mx-1">{{dialogForm.username}}</el-text>
+        </el-form-item>
+        <el-form-item label="密码" prop="password">                <el-text class="mx-1">{{dialogForm.password}}</el-text>
+        </el-form-item>
+        <el-form-item label="账号创建时间" prop="creationTime">                <el-text class="mx-1">{{dialogForm.creationTime}}</el-text>
+        </el-form-item>
+        <el-form-item label="登录时间" prop="loginTime">                <el-text class="mx-1">{{dialogForm.loginTime}}</el-text>
+        </el-form-item>
+        <el-form-item label="账号状态" prop="status">                <el-text class="mx-1">{{dialogForm.status}}</el-text>
+        </el-form-item>
+        <el-form-item label="角色id" prop="roleId">                <el-text class="mx-1">{{dialogForm.roleId}}</el-text>
+        </el-form-item>
+        <el-form-item label="手机" prop="phone">                <el-text class="mx-1">{{dialogForm.phone}}</el-text>
+        </el-form-item>
+        <el-form-item label="邮箱" prop="email">                <el-text class="mx-1">{{dialogForm.email}}</el-text>
+        </el-form-item>
+        <el-form-item label="用户名" prop="name">                <el-text class="mx-1">{{dialogForm.name}}</el-text>
+        </el-form-item>
+        <el-form-item label="头像" prop="avatar">              <ImageUpload v-model:ImgUrl="dialogForm.avatar"/>
+        </el-form-item>
+        <el-form-item label="推荐码" prop="recommendCode">                <el-text class="mx-1">{{dialogForm.recommendCode}}</el-text>
+        </el-form-item>
+        <el-form-item label="邀请人" prop="inviterBy">                <el-text class="mx-1">{{dialogForm.inviterBy}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseUserById,
+  GetBaseUserListByUser,
+  SaveBaseUser,
+  UpdateBaseUser,
+  User,
+  UserQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<User[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<User>(User.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<User>(null)
+let query = ref<UserQuery>(UserQuery.Create())
+let selectItems = ref<User[]>([])
+const selected = (arr: User[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: User) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = User.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseUserById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseUserListByUser(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseUser(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseUser(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

+ 238 - 0
output/vue/page/UserWalletView.vue

@@ -0,0 +1,238 @@
+<template>
+  <div class="back-form-container">
+    <div>
+    <el-form :model="query" label-width="80px" :inline="true">
+      
+        
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="用户id" prop="userId">                <el-text class="mx-1">{{query.userId}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="余额" prop="balance">                <el-text class="mx-1">{{query.balance}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="推广获取总金额" prop="promotionAmount">                <el-text class="mx-1">{{query.promotionAmount}}</el-text>
+        </el-form-item>
+        
+      
+        
+        
+            
+            
+            
+        <el-form-item label="充值金额" prop="rechargeAmount">                <el-text class="mx-1">{{query.rechargeAmount}}</el-text>
+        </el-form-item>
+        
+      
+    </el-form>
+    </div>
+    <div class="back-table-handler">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="getList(pageNum)">
+            <el-icon>
+              <RefreshLeft/>
+            </el-icon>
+            <span>刷新</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="small" @click="openDialog('save', UserWallet.Create())">
+            <el-icon>
+              <Plus/>
+            </el-icon>
+            <span>新增</span>
+          </el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="danger" plain size="small" @click="deleteByIds()">
+            <el-icon>
+              <Delete/>
+            </el-icon>
+            <span>删除</span>
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="back-table">
+      <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
+        <el-table-column type="selection" width="40" align="center"/>
+        
+        <el-table-column label="id" align="center" prop="id"/>
+        <el-table-column label="用户id" align="center" prop="userId"/>
+        <el-table-column label="余额" align="center" prop="balance"/>
+        <el-table-column label="推广获取总金额" align="center" prop="promotionAmount"/>
+        <el-table-column label="充值金额" align="center" prop="rechargeAmount"/>
+        <el-table-column label="操作" align="center" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
+            <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container">
+        <el-pagination
+            background
+            :current-page="pageNum"
+            @current-change="getList"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 30, 50,100]"
+            :total="total"
+            @size-change="SetPageSized"
+            layout="total, sizes, prev, pager, next"
+        />
+      </div>
+
+        <!-- 添加或修改参数配置对话框 -->
+        <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
+          <el-form ref="dictRef" :model="dialogForm" label-width="80px">
+            
+        <el-form-item label="用户id" prop="userId">                <el-text class="mx-1">{{dialogForm.userId}}</el-text>
+        </el-form-item>
+        <el-form-item label="余额" prop="balance">                <el-text class="mx-1">{{dialogForm.balance}}</el-text>
+        </el-form-item>
+        <el-form-item label="推广获取总金额" prop="promotionAmount">                <el-text class="mx-1">{{dialogForm.promotionAmount}}</el-text>
+        </el-form-item>
+        <el-form-item label="充值金额" prop="rechargeAmount">                <el-text class="mx-1">{{dialogForm.rechargeAmount}}</el-text>
+        </el-form-item>
+          </el-form>
+          <template #footer>
+            <div class="dialog-footer">
+              <el-button type="primary" @click="submitForm()">确 定</el-button>
+              <el-button @click="open=false">取 消</el-button>
+            </div>
+          </template>
+        </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {
+  DeleteBaseUserWalletById,
+  GetBaseUserWalletListByUserWallet,
+  SaveBaseUserWallet,
+  UpdateBaseUserWallet,
+  UserWallet,
+  UserWalletQuery
+} from "../../../api/back/BaseBackApi.ts";
+import {ElMessage} from "element-plus";
+import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
+import router from "../../../router";
+import {store} from "../../../state/TokenState.ts";
+import DictTag from "../../../components/dict/DictTag.vue";
+import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
+import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
+
+let listLoading = ref(true)
+let total = ref(0)
+let pageNum = ref(1)
+let pageSize = ref(10)
+let list = ref<UserWallet[]>([])
+let ListKey = ref(0)
+//搜索用
+//let search = ref<UserWallet>(UserWallet.Create())
+//修改,添加用
+let open = ref(false)
+let dialogType = ref("")//save添加,update修改
+let dialogForm = ref<UserWallet>(null)
+let query = ref<UserWalletQuery>(UserWalletQuery.Create())
+let selectItems = ref<UserWallet[]>([])
+const selected = (arr: UserWallet[]) => {
+  selectItems.value = arr
+}
+
+getList()
+const SetPageSized = (val: number) => {
+  pageSize.value = val
+  getList(pageNum.value)
+}
+
+function openDialog(type: string, row: UserWallet) {
+  open.value = true
+  dialogType.value = type
+  if (type==="save"){
+    dialogForm.value = UserWallet.Create()
+    return
+  }
+  //深拷贝,不会影响数据
+  dialogForm.value = JSON.parse(JSON.stringify(row))
+}
+
+function deleteByIds() {
+  for (let i = 0; i < selectItems.value.length; i++) {
+      deleteById(selectItems[i].id)
+  }
+}
+
+function deleteById(id) {
+  DeleteBaseUserWalletById(id).then(response => {
+    if (response.code == 200) {
+      ElMessage.success("删除成功,id:" + id)
+      getList()
+    } else {
+      ElMessage.error("删除失败,id:" + id)
+    }
+  })
+}
+
+function getList(pn = 1) {
+  pageNum.value = pn
+  GetBaseUserWalletListByUserWallet(query.value, pageNum.value, pageSize.value).then(response => {
+    let data = response.data
+    total.value = data.total
+    list.value = response.data.list
+    ListKey.value++
+    listLoading.value = false
+  })
+}
+
+function submitForm() {
+  switch (dialogType.value) {
+    case "update":
+      UpdateBaseUserWallet(dialogForm.value, dialogForm.value.id).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("修改成功")
+        } else {
+          ElMessage.error("修改失败")
+        }
+      })
+      break
+    case "save":
+      SaveBaseUserWallet(dialogForm.value).then(response => {
+        if (response.code == 200) {
+          open.value = false
+          getList()
+          ElMessage.success("添加成功")
+        } else {
+          ElMessage.error("添加失败")
+        }
+      })
+      break
+    default:
+      break
+  }
+}
+</script>

部分文件因文件數量過多而無法顯示