app.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. package main
  2. import (
  3. "Vali-Tools/handlers" // 根据实际项目路径调整
  4. "Vali-Tools/utils"
  5. "context"
  6. "fmt"
  7. "github.com/wailsapp/wails/v2/pkg/options"
  8. "github.com/wailsapp/wails/v2/pkg/runtime"
  9. "os"
  10. "strings"
  11. )
  12. // App struct
  13. type App struct {
  14. ctx context.Context
  15. Token string
  16. Env string
  17. directoryHandler *handlers.DirectoryHandler
  18. dialogHandler *handlers.DialogHandler
  19. UrlHost string // 根据实际项目路径调整
  20. HomePage string //首次要打开得页面路径
  21. handlerRequest *handlers.HandlerRequests
  22. }
  23. var wailsContext *context.Context
  24. // NewApp creates a new App application struct
  25. func NewApp() *App {
  26. return &App{}
  27. }
  28. // startup is called when the app starts
  29. func (a *App) startup(ctx context.Context) {
  30. a.ctx = ctx
  31. wailsContext = &ctx
  32. a.directoryHandler = handlers.NewDirectoryHandler(ctx)
  33. a.dialogHandler = handlers.NewDialogHandler(ctx)
  34. fmt.Printf("All startup args: %v\n", os.Args)
  35. args := os.Args
  36. if len(args) > 1 {
  37. Args := args[1]
  38. paramsMap := a.parsArguments(Args)
  39. a.Token = paramsMap["token"]
  40. env := paramsMap["env"]
  41. page := paramsMap["page"]
  42. urlHost := "https://dev2.pubdata.cn"
  43. if env != "dev" && env != "" {
  44. urlHost = "https://dev2.valimart.net"
  45. }
  46. a.UrlHost = urlHost
  47. a.HomePage = page
  48. println("Token:", a.Token)
  49. println("UrlHost", a.UrlHost)
  50. a.handlerRequest = handlers.NewHandlerRequests(ctx, a.Token, a.UrlHost)
  51. fmt.Printf("获取到了Token信息: %s\n", a.Token)
  52. }
  53. }
  54. func (a *App) onSecondInstanceLaunch(secondInstanceData options.SecondInstanceData) {
  55. secondInstanceArgs := secondInstanceData.Args
  56. println("user opened second instance", strings.Join(secondInstanceData.Args, ","))
  57. println("user opened second from", secondInstanceData.WorkingDirectory)
  58. runtime.WindowUnminimise(*wailsContext)
  59. runtime.Show(*wailsContext)
  60. go runtime.EventsEmit(*wailsContext, "launchArgs", secondInstanceArgs)
  61. }
  62. // 解析参数
  63. func (a *App) parsArguments(params string) map[string]string {
  64. result := make(map[string]string)
  65. pairs := strings.Split(params, "&")
  66. for _, pair := range pairs {
  67. kv := strings.Split(pair, "=")
  68. if len(kv) == 2 {
  69. result[kv[0]] = kv[1]
  70. }
  71. }
  72. return result
  73. }
  74. type UserInfo struct {
  75. AccountName string `json:"account_name"`
  76. CompanyName string `json:"brand_company_name"`
  77. RealName string `json:"real_name"`
  78. }
  79. // GetAppArgument 获取APP传递得参数
  80. func (a *App) GetAppArgument() interface{} {
  81. if a.handlerRequest == nil {
  82. fmt.Printf("handlerRequest未初始化\n")
  83. return nil
  84. }
  85. info, err := a.handlerRequest.GetUserInfo()
  86. if err != nil {
  87. fmt.Printf("获取用户信息失败: %v\n", err)
  88. return nil
  89. }
  90. // 将 map 转换为 JSON 再解析为结构体
  91. // 安全地提取用户信息数据
  92. var userInfo interface{}
  93. if infoMap, ok := info.(map[string]interface{}); ok {
  94. if data, exists := infoMap["data"]; exists {
  95. userInfo = data
  96. } else {
  97. userInfo = infoMap
  98. }
  99. } else {
  100. userInfo = info
  101. }
  102. return map[string]interface {
  103. }{
  104. "token": a.Token,
  105. "user_info": userInfo,
  106. "home_page": a.HomePage,
  107. }
  108. }
  109. // SelectDirectory 目录选择方法
  110. func (a *App) SelectDirectory() (string, error) {
  111. return a.dialogHandler.SelectDirectory()
  112. }
  113. // HandlerDirectory 处理目录复制的主要方法
  114. func (a *App) HandlerDirectory(sourceDir, targetDir string) error {
  115. return a.directoryHandler.HandlerDirectory(sourceDir, targetDir)
  116. }
  117. // HandlerOutPutDirectory 处理输出目录
  118. func (a *App) HandlerOutPutDirectory() []handlers.ImageResult {
  119. applicationDirectory, err := a.directoryHandler.GetApplicationDirectory()
  120. if err != nil {
  121. return nil
  122. }
  123. directory, err := a.directoryHandler.HandlerOutPutDirectory(applicationDirectory + "/output")
  124. if err != nil {
  125. return []handlers.ImageResult{}
  126. }
  127. return directory
  128. }
  129. type PostJsonData struct {
  130. ImageUrl string `json:"image_url"`
  131. GoodsArtNo string `json:"goods_art_no"`
  132. Category string `json:"category"`
  133. Description string `json:"description"`
  134. Price string `json:"price"`
  135. }
  136. func (a *App) MakeProducts(imageProduct []handlers.ImageResult) map[string]interface{} {
  137. // 生成产品册
  138. var postData []PostJsonData
  139. for _, product := range imageProduct {
  140. result, err := a.handlerRequest.MakeFileRequest(utils.UploadImages, product.ImagePath, "file")
  141. if err != nil {
  142. fmt.Printf("上传图片失败: %v\n", err)
  143. continue
  144. }
  145. if resultMap, ok := result.(map[string]interface{}); ok {
  146. // 安全获取 data 字段
  147. dataValue, exists := resultMap["data"]
  148. if !exists {
  149. fmt.Println("响应中未找到 data 字段")
  150. continue
  151. }
  152. // 类型断言为 map[string]interface{}
  153. reqData, ok := dataValue.(map[string]interface{})
  154. if !ok {
  155. fmt.Printf("data字段类型不正确,期望map[string]interface{},实际类型: %T\n", dataValue)
  156. continue
  157. }
  158. var imageUrl string
  159. if urlValue, exists := reqData["url"]; exists {
  160. // 安全转换为字符串
  161. switch v := urlValue.(type) {
  162. case string:
  163. imageUrl = v
  164. case fmt.Stringer:
  165. imageUrl = v.String()
  166. default:
  167. imageUrl = fmt.Sprintf("%v", v)
  168. }
  169. }
  170. // 安全获取各个字段并进行类型转换
  171. goodsArtNo := product.GoodsArtNo
  172. category := product.Category
  173. description := product.Description
  174. priceValue := product.Price
  175. // 添加到 postData
  176. postData = append(postData, PostJsonData{
  177. ImageUrl: imageUrl,
  178. GoodsArtNo: goodsArtNo,
  179. Category: category,
  180. Description: description,
  181. Price: priceValue,
  182. })
  183. }
  184. }
  185. HLMData := map[string]interface{}{
  186. "data": postData,
  187. }
  188. result, err := a.handlerRequest.MakePostRequest(utils.CreateProduct, HLMData)
  189. if err != nil {
  190. fmt.Printf("request err:%v\n", err)
  191. return nil
  192. }
  193. if resultMap, ok := result.(map[string]interface{}); ok {
  194. dataValue, exists := resultMap["data"]
  195. if !exists {
  196. return nil
  197. }
  198. reqData, _ := dataValue.(map[string]interface{})
  199. //a.UrlHost
  200. productIndex, _ := reqData["product_index"].(string)
  201. urlShuffix := "/product_catalog/index.html?product_index="
  202. // 检查 URL 是否包含特定域名
  203. HtmlUrl := "https://b2b2.valimart.net"
  204. if strings.Contains(a.UrlHost, "pubdata.cn") {
  205. // 处理 pubdata.cn 域名的逻辑
  206. HtmlUrl = "https://b2b2.pubdata.cn"
  207. }
  208. returnUrl := HtmlUrl + urlShuffix + productIndex
  209. fmt.Println("返回的URL:", returnUrl)
  210. return map[string]interface{}{
  211. "url": returnUrl,
  212. }
  213. }
  214. return nil
  215. }