feat: refactor midjourney image creating page
@@ -80,6 +80,7 @@ func (h *MidJourneyHandler) Image(c *gin.Context) {
 | 
				
			|||||||
	var data struct {
 | 
						var data struct {
 | 
				
			||||||
		SessionId string  `json:"session_id"`
 | 
							SessionId string  `json:"session_id"`
 | 
				
			||||||
		Prompt    string  `json:"prompt"`
 | 
							Prompt    string  `json:"prompt"`
 | 
				
			||||||
 | 
							NegPrompt string  `json:"neg_prompt"`
 | 
				
			||||||
		Rate      string  `json:"rate"`
 | 
							Rate      string  `json:"rate"`
 | 
				
			||||||
		Model     string  `json:"model"`
 | 
							Model     string  `json:"model"`
 | 
				
			||||||
		Chaos     int     `json:"chaos"`
 | 
							Chaos     int     `json:"chaos"`
 | 
				
			||||||
@@ -87,6 +88,8 @@ func (h *MidJourneyHandler) Image(c *gin.Context) {
 | 
				
			|||||||
		Seed      int64   `json:"seed"`
 | 
							Seed      int64   `json:"seed"`
 | 
				
			||||||
		Stylize   int     `json:"stylize"`
 | 
							Stylize   int     `json:"stylize"`
 | 
				
			||||||
		Img       string  `json:"img"`
 | 
							Img       string  `json:"img"`
 | 
				
			||||||
 | 
							Tile      bool    `json:"tile"`
 | 
				
			||||||
 | 
							Quality   float32 `json:"quality"`
 | 
				
			||||||
		Weight    float32 `json:"weight"`
 | 
							Weight    float32 `json:"weight"`
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err := c.ShouldBindJSON(&data); err != nil {
 | 
						if err := c.ShouldBindJSON(&data); err != nil {
 | 
				
			||||||
@@ -119,6 +122,15 @@ func (h *MidJourneyHandler) Image(c *gin.Context) {
 | 
				
			|||||||
	if data.Raw {
 | 
						if data.Raw {
 | 
				
			||||||
		prompt += " --style raw"
 | 
							prompt += " --style raw"
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if data.Quality > 0 {
 | 
				
			||||||
 | 
							prompt += fmt.Sprintf(" --q %.2f", data.Quality)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if data.NegPrompt != "" {
 | 
				
			||||||
 | 
							prompt += fmt.Sprintf(" --no %s", data.NegPrompt)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if data.Tile {
 | 
				
			||||||
 | 
							prompt += " --tile "
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if data.Model != "" && !strings.Contains(prompt, "--v") && !strings.Contains(prompt, "--niji") {
 | 
						if data.Model != "" && !strings.Contains(prompt, "--v") && !strings.Contains(prompt, "--niji") {
 | 
				
			||||||
		prompt += fmt.Sprintf(" %s", data.Model)
 | 
							prompt += fmt.Sprintf(" %s", data.Model)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
| 
		 Before Width: | Height: | Size: 476 KiB After Width: | Height: | Size: 476 KiB  | 
| 
		 Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB  | 
| 
		 Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB  | 
| 
		 Before Width: | Height: | Size: 526 KiB After Width: | Height: | Size: 526 KiB  | 
| 
		 Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB  | 
| 
		 Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB  | 
| 
		 Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB  | 
| 
		 Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB  | 
| 
		 Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB  | 
| 
		 Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB  | 
| 
		 Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB  | 
@@ -35,7 +35,6 @@
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
.page-mj .inner .mj-box .mj-params .param-line .el-icon {
 | 
					.page-mj .inner .mj-box .mj-params .param-line .el-icon {
 | 
				
			||||||
  position: relative;
 | 
					  position: relative;
 | 
				
			||||||
  top: 3px;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.page-mj .inner .mj-box .mj-params .param-line .grid-content {
 | 
					.page-mj .inner .mj-box .mj-params .param-line .grid-content {
 | 
				
			||||||
  background-color: #383838;
 | 
					  background-color: #383838;
 | 
				
			||||||
@@ -43,26 +42,62 @@
 | 
				
			|||||||
  padding: 8px 14px;
 | 
					  padding: 8px 14px;
 | 
				
			||||||
  display: flex;
 | 
					  display: flex;
 | 
				
			||||||
  cursor: pointer;
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					  margin-bottom: 10px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.page-mj .inner .mj-box .mj-params .param-line .grid-content:hover {
 | 
					.page-mj .inner .mj-box .mj-params .param-line .grid-content:hover {
 | 
				
			||||||
  background-color: #585858;
 | 
					  background-color: #585858;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .mj-box .mj-params .param-line .grid-content .icon {
 | 
				
			||||||
 | 
					  width: 20px;
 | 
				
			||||||
 | 
					  height: 20px;
 | 
				
			||||||
 | 
					  margin-bottom: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
.page-mj .inner .mj-box .mj-params .param-line .grid-content .shape {
 | 
					.page-mj .inner .mj-box .mj-params .param-line .grid-content .shape {
 | 
				
			||||||
  width: 16px;
 | 
					  width: 16px;
 | 
				
			||||||
  height: 16px;
 | 
					  height: 16px;
 | 
				
			||||||
  margin-right: 5px;
 | 
					  margin-bottom: 5px;
 | 
				
			||||||
  border: 1px solid #c4c4c4;
 | 
					  border: 1px solid #c4c4c4;
 | 
				
			||||||
  border-radius: 3px;
 | 
					  border-radius: 3px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.page-mj .inner .mj-box .mj-params .param-line .grid-content .shape.vertical {
 | 
					.page-mj .inner .mj-box .mj-params .param-line .grid-content .shape.size9-16 {
 | 
				
			||||||
  width: 12px;
 | 
					  width: 9px;
 | 
				
			||||||
  height: 20px;
 | 
					  height: 16px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.page-mj .inner .mj-box .mj-params .param-line .grid-content .shape.horizontal {
 | 
					.page-mj .inner .mj-box .mj-params .param-line .grid-content .shape.size16-9 {
 | 
				
			||||||
  height: 12px;
 | 
					  height: 9px;
 | 
				
			||||||
  width: 20px;
 | 
					  width: 16px;
 | 
				
			||||||
  position: relative;
 | 
					  position: relative;
 | 
				
			||||||
  top: 3px;
 | 
					  margin: 4px 0 7px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .mj-box .mj-params .param-line .grid-content .shape.size3-4 {
 | 
				
			||||||
 | 
					  width: 12px;
 | 
				
			||||||
 | 
					  height: 16px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .mj-box .mj-params .param-line .grid-content .shape.size4-3 {
 | 
				
			||||||
 | 
					  height: 12px;
 | 
				
			||||||
 | 
					  width: 16px;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  margin: 4px 0 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .mj-box .mj-params .param-line .grid-content .shape.size2-3 {
 | 
				
			||||||
 | 
					  width: 11px;
 | 
				
			||||||
 | 
					  height: 16px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .mj-box .mj-params .param-line .grid-content .shape.size3-2 {
 | 
				
			||||||
 | 
					  height: 11px;
 | 
				
			||||||
 | 
					  width: 16px;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  margin: 4px 0 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .mj-box .mj-params .param-line .grid-content .shape.size1-2 {
 | 
				
			||||||
 | 
					  width: 8px;
 | 
				
			||||||
 | 
					  height: 16px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .mj-box .mj-params .param-line .grid-content .shape.size2-1 {
 | 
				
			||||||
 | 
					  height: 8px;
 | 
				
			||||||
 | 
					  width: 16px;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  margin: 4px 0 8px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.page-mj .inner .mj-box .mj-params .param-line .grid-content.active {
 | 
					.page-mj .inner .mj-box .mj-params .param-line .grid-content.active {
 | 
				
			||||||
  color: #47fff1;
 | 
					  color: #47fff1;
 | 
				
			||||||
@@ -76,6 +111,7 @@
 | 
				
			|||||||
  border: 1px solid #454545;
 | 
					  border: 1px solid #454545;
 | 
				
			||||||
  border-radius: 5px;
 | 
					  border-radius: 5px;
 | 
				
			||||||
  padding: 10px;
 | 
					  padding: 10px;
 | 
				
			||||||
 | 
					  margin-bottom: 10px;
 | 
				
			||||||
  display: flex;
 | 
					  display: flex;
 | 
				
			||||||
  flex-flow: column;
 | 
					  flex-flow: column;
 | 
				
			||||||
  align-items: center;
 | 
					  align-items: center;
 | 
				
			||||||
@@ -98,10 +134,20 @@
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
.page-mj .inner .mj-box .mj-params .param-line .form-item-inner {
 | 
					.page-mj .inner .mj-box .mj-params .param-line .form-item-inner {
 | 
				
			||||||
  display: flex;
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .mj-box .mj-params .param-line .form-item-inner .el-select {
 | 
				
			||||||
 | 
					  --el-select-input-focus-border-color: #47fff1;
 | 
				
			||||||
 | 
					  --el-input-focus-border-color: #47fff1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .mj-box .mj-params .param-line .form-item-inner .el-input__wrapper {
 | 
				
			||||||
 | 
					  background: #383838;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .mj-box .mj-params .param-line .form-item-inner .el-input__inner {
 | 
				
			||||||
 | 
					  color: #fff;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.page-mj .inner .mj-box .mj-params .param-line .form-item-inner .el-icon {
 | 
					.page-mj .inner .mj-box .mj-params .param-line .form-item-inner .el-icon {
 | 
				
			||||||
  margin-left: 10px;
 | 
					  margin-left: 10px;
 | 
				
			||||||
  margin-top: 2px;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.page-mj .inner .mj-box .mj-params .param-line .img-uploader .el-upload {
 | 
					.page-mj .inner .mj-box .mj-params .param-line .img-uploader .el-upload {
 | 
				
			||||||
  border: 1px dashed var(--el-border-color);
 | 
					  border: 1px dashed var(--el-border-color);
 | 
				
			||||||
@@ -123,19 +169,11 @@
 | 
				
			|||||||
  text-align: center;
 | 
					  text-align: center;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.page-mj .inner .mj-box .mj-params .param-line.pt {
 | 
					.page-mj .inner .mj-box .mj-params .param-line.pt {
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
  padding-top: 5px;
 | 
					  padding-top: 5px;
 | 
				
			||||||
  padding-bottom: 5px;
 | 
					  padding-bottom: 5px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.page-mj .inner .mj-box .submit-btn {
 | 
					 | 
				
			||||||
  padding: 10px 15px 0 15px;
 | 
					 | 
				
			||||||
  text-align: center;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
.page-mj .inner .mj-box .submit-btn .el-button {
 | 
					 | 
				
			||||||
  width: 100%;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
.page-mj .inner .mj-box .submit-btn .el-button span {
 | 
					 | 
				
			||||||
  color: #2d3a4b;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
.page-mj .inner .el-form .el-form-item__label {
 | 
					.page-mj .inner .el-form .el-form-item__label {
 | 
				
			||||||
  color: #fff;
 | 
					  color: #fff;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -149,6 +187,86 @@
 | 
				
			|||||||
  color: #fff;
 | 
					  color: #fff;
 | 
				
			||||||
  overflow-x: hidden;
 | 
					  overflow-x: hidden;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .el-tabs {
 | 
				
			||||||
 | 
					  --el-tabs-header-height: 55px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .el-tabs__item {
 | 
				
			||||||
 | 
					  color: #fff;
 | 
				
			||||||
 | 
					  font-size: 18px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .title-tabs .el-tabs__item.is-active {
 | 
				
			||||||
 | 
					  color: #47fff1;
 | 
				
			||||||
 | 
					  font-size: 18px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .title-tabs .el-tabs__active-bar {
 | 
				
			||||||
 | 
					  background-color: #47fff1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .title-tabs .el-tabs__content {
 | 
				
			||||||
 | 
					  padding: 10px 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .el-textarea {
 | 
				
			||||||
 | 
					  --el-input-focus-border-color: #47fff1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .el-textarea__inner {
 | 
				
			||||||
 | 
					  background: transparent;
 | 
				
			||||||
 | 
					  color: #fff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .el-input__wrapper {
 | 
				
			||||||
 | 
					  background: transparent;
 | 
				
			||||||
 | 
					  padding: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .text {
 | 
				
			||||||
 | 
					  margin-bottom: 10px;
 | 
				
			||||||
 | 
					  color: #6b778c;
 | 
				
			||||||
 | 
					  font-size: 15px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .param-line.pt {
 | 
				
			||||||
 | 
					  padding-top: 5px;
 | 
				
			||||||
 | 
					  padding-bottom: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .form-item-inner {
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .form-item-inner .el-icon {
 | 
				
			||||||
 | 
					  margin-left: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .el-form-item__label {
 | 
				
			||||||
 | 
					  color: #fff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .img-uploader .el-upload {
 | 
				
			||||||
 | 
					  border: 1px dashed var(--el-border-color);
 | 
				
			||||||
 | 
					  border-radius: 6px;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  overflow: hidden;
 | 
				
			||||||
 | 
					  width: 300px;
 | 
				
			||||||
 | 
					  transition: var(--el-transition-duration-fast);
 | 
				
			||||||
 | 
					  margin-bottom: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .img-uploader .el-upload:hover {
 | 
				
			||||||
 | 
					  border-color: var(--el-color-primary);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .img-uploader .el-upload .el-icon.uploader-icon {
 | 
				
			||||||
 | 
					  font-size: 28px;
 | 
				
			||||||
 | 
					  color: #8c939d;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  height: 120px;
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .submit-btn {
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  margin: 20px 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .submit-btn .el-button {
 | 
				
			||||||
 | 
					  width: 200px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-mj .inner .task-list-box .task-list-inner .submit-btn .text-info {
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  justify-content: right;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
.page-mj .inner .task-list-box .running-job-list .job-item {
 | 
					.page-mj .inner .task-list-box .running-job-list .job-item {
 | 
				
			||||||
  width: 100%;
 | 
					  width: 100%;
 | 
				
			||||||
  padding: 2px;
 | 
					  padding: 2px;
 | 
				
			||||||
@@ -253,5 +371,4 @@
 | 
				
			|||||||
  margin-left: 10px;
 | 
					  margin-left: 10px;
 | 
				
			||||||
  cursor: pointer;
 | 
					  cursor: pointer;
 | 
				
			||||||
  position: relative;
 | 
					  position: relative;
 | 
				
			||||||
  top: 2px;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,7 +54,7 @@
 | 
				
			|||||||
              background-color #585858
 | 
					              background-color #585858
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            .icon{
 | 
					            .icon {
 | 
				
			||||||
              width 20px
 | 
					              width 20px
 | 
				
			||||||
              height 20px
 | 
					              height 20px
 | 
				
			||||||
              margin-bottom 5px
 | 
					              margin-bottom 5px
 | 
				
			||||||
@@ -167,12 +167,15 @@
 | 
				
			|||||||
              --el-select-input-focus-border-color: #47FFF1;
 | 
					              --el-select-input-focus-border-color: #47FFF1;
 | 
				
			||||||
              --el-input-focus-border-color: #47FFF1;
 | 
					              --el-input-focus-border-color: #47FFF1;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            .el-input__wrapper {
 | 
					            .el-input__wrapper {
 | 
				
			||||||
              background: #383838;
 | 
					              background: #383838;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            .el-input__inner {
 | 
					            .el-input__inner {
 | 
				
			||||||
              color: #fff
 | 
					              color: #fff
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            .el-icon {
 | 
					            .el-icon {
 | 
				
			||||||
              margin-left 10px
 | 
					              margin-left 10px
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -211,19 +214,6 @@
 | 
				
			|||||||
          padding-bottom 5px
 | 
					          padding-bottom 5px
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					 | 
				
			||||||
      .submit-btn {
 | 
					 | 
				
			||||||
        padding 10px 15px 0 15px
 | 
					 | 
				
			||||||
        text-align center
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        .el-button {
 | 
					 | 
				
			||||||
          width 100%
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          span {
 | 
					 | 
				
			||||||
            color #2D3A4B
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .el-form {
 | 
					    .el-form {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -72,6 +72,86 @@
 | 
				
			|||||||
  color: #fff;
 | 
					  color: #fff;
 | 
				
			||||||
  overflow-x: hidden;
 | 
					  overflow-x: hidden;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .el-tabs {
 | 
				
			||||||
 | 
					  --el-tabs-header-height: 55px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .el-tabs__item {
 | 
				
			||||||
 | 
					  color: #fff;
 | 
				
			||||||
 | 
					  font-size: 18px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .title-tabs .el-tabs__item.is-active {
 | 
				
			||||||
 | 
					  color: #47fff1;
 | 
				
			||||||
 | 
					  font-size: 18px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .title-tabs .el-tabs__active-bar {
 | 
				
			||||||
 | 
					  background-color: #47fff1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .title-tabs .el-tabs__content {
 | 
				
			||||||
 | 
					  padding: 10px 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .el-textarea {
 | 
				
			||||||
 | 
					  --el-input-focus-border-color: #47fff1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .el-textarea__inner {
 | 
				
			||||||
 | 
					  background: transparent;
 | 
				
			||||||
 | 
					  color: #fff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .el-input__wrapper {
 | 
				
			||||||
 | 
					  background: transparent;
 | 
				
			||||||
 | 
					  padding: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .text {
 | 
				
			||||||
 | 
					  margin-bottom: 10px;
 | 
				
			||||||
 | 
					  color: #6b778c;
 | 
				
			||||||
 | 
					  font-size: 15px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .param-line.pt {
 | 
				
			||||||
 | 
					  padding-top: 5px;
 | 
				
			||||||
 | 
					  padding-bottom: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .form-item-inner {
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .form-item-inner .el-icon {
 | 
				
			||||||
 | 
					  margin-left: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .el-form-item__label {
 | 
				
			||||||
 | 
					  color: #fff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .img-uploader .el-upload {
 | 
				
			||||||
 | 
					  border: 1px dashed var(--el-border-color);
 | 
				
			||||||
 | 
					  border-radius: 6px;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  overflow: hidden;
 | 
				
			||||||
 | 
					  width: 300px;
 | 
				
			||||||
 | 
					  transition: var(--el-transition-duration-fast);
 | 
				
			||||||
 | 
					  margin-bottom: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .img-uploader .el-upload:hover {
 | 
				
			||||||
 | 
					  border-color: var(--el-color-primary);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .img-uploader .el-upload .el-icon.uploader-icon {
 | 
				
			||||||
 | 
					  font-size: 28px;
 | 
				
			||||||
 | 
					  color: #8c939d;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  height: 120px;
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .submit-btn {
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  margin: 20px 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .submit-btn .el-button {
 | 
				
			||||||
 | 
					  width: 200px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.page-sd .inner .task-list-box .task-list-inner .submit-btn .text-info {
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  justify-content: right;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
.page-sd .inner .task-list-box .running-job-list .job-item {
 | 
					.page-sd .inner .task-list-box .running-job-list .job-item {
 | 
				
			||||||
  width: 100%;
 | 
					  width: 100%;
 | 
				
			||||||
  padding: 2px;
 | 
					  padding: 2px;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,17 +8,21 @@
 | 
				
			|||||||
    .el-tabs {
 | 
					    .el-tabs {
 | 
				
			||||||
      --el-tabs-header-height: 55px;
 | 
					      --el-tabs-header-height: 55px;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .el-tabs__item {
 | 
					    .el-tabs__item {
 | 
				
			||||||
      color: #fff;
 | 
					      color: #fff;
 | 
				
			||||||
      font-size: 18px;
 | 
					      font-size: 18px;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .title-tabs .el-tabs__item.is-active {
 | 
					    .title-tabs .el-tabs__item.is-active {
 | 
				
			||||||
      color: #47FFF1;
 | 
					      color: #47FFF1;
 | 
				
			||||||
      font-size: 18px;
 | 
					      font-size: 18px;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .title-tabs .el-tabs__active-bar {
 | 
					    .title-tabs .el-tabs__active-bar {
 | 
				
			||||||
      background-color: #47FFF1;
 | 
					      background-color: #47FFF1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .title-tabs .el-tabs__content {
 | 
					    .title-tabs .el-tabs__content {
 | 
				
			||||||
      padding: 10px 0;
 | 
					      padding: 10px 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -26,6 +30,7 @@
 | 
				
			|||||||
    .el-textarea {
 | 
					    .el-textarea {
 | 
				
			||||||
      --el-input-focus-border-color: #47FFF1;
 | 
					      --el-input-focus-border-color: #47FFF1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .el-textarea__inner {
 | 
					    .el-textarea__inner {
 | 
				
			||||||
      background: transparent;
 | 
					      background: transparent;
 | 
				
			||||||
      color: #fff;
 | 
					      color: #fff;
 | 
				
			||||||
@@ -36,7 +41,7 @@
 | 
				
			|||||||
      padding 5px
 | 
					      padding 5px
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .text{
 | 
					    .text {
 | 
				
			||||||
      margin-bottom: 10px;
 | 
					      margin-bottom: 10px;
 | 
				
			||||||
      color: #6b778c;
 | 
					      color: #6b778c;
 | 
				
			||||||
      font-size: 15px
 | 
					      font-size: 15px
 | 
				
			||||||
@@ -85,15 +90,19 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .submit-btn{
 | 
					    .submit-btn {
 | 
				
			||||||
 | 
					      display flex
 | 
				
			||||||
      margin: 20px 0
 | 
					      margin: 20px 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        .el-icon.submit-icon {
 | 
					      .el-button {
 | 
				
			||||||
          font-size: 28px
 | 
					        width 200px
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      .text-info {
 | 
				
			||||||
        width 100%
 | 
					        width 100%
 | 
				
			||||||
          height: 100px
 | 
					        display flex
 | 
				
			||||||
          text-align: center
 | 
					        justify-content right
 | 
				
			||||||
          margin-right: 10px
 | 
					        align-items center
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,18 +3,19 @@
 | 
				
			|||||||
    <div class="navigator">
 | 
					    <div class="navigator">
 | 
				
			||||||
      <div class="logo">
 | 
					      <div class="logo">
 | 
				
			||||||
        <el-link href="/">
 | 
					        <el-link href="/">
 | 
				
			||||||
					<el-image :src="logo" />
 | 
					          <el-image :src="logo"/>
 | 
				
			||||||
        </el-link>
 | 
					        </el-link>
 | 
				
			||||||
        <div class="divider"></div>
 | 
					        <div class="divider"></div>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <ul class="nav-items">
 | 
					      <ul class="nav-items">
 | 
				
			||||||
        <li v-for="item in navs" :key="item.path">
 | 
					        <li v-for="item in navs" :key="item.path">
 | 
				
			||||||
					<el-tooltip effect="light" :content="item.title" placement="right">
 | 
					          <!--          <el-tooltip effect="light" :content="item.title" placement="right">-->
 | 
				
			||||||
 | 
					          <!--            -->
 | 
				
			||||||
 | 
					          <!--          </el-tooltip>-->
 | 
				
			||||||
          <a @click="changeNav(item)" :class="item.path === curPath ? 'active' : ''">
 | 
					          <a @click="changeNav(item)" :class="item.path === curPath ? 'active' : ''">
 | 
				
			||||||
							<el-image :src="item.icon_path" :width="20" v-if="item.icon_path" />
 | 
					            <el-image :src="item.icon_path" :width="20" v-if="item.icon_path"/>
 | 
				
			||||||
            <i :class="'iconfont icon-' + item.icon" v-else></i>
 | 
					            <i :class="'iconfont icon-' + item.icon" v-else></i>
 | 
				
			||||||
          </a>
 | 
					          </a>
 | 
				
			||||||
					</el-tooltip>
 | 
					 | 
				
			||||||
          <div :class="item.path === curPath ? 'title active' : 'title'">{{ item.title }}</div>
 | 
					          <div :class="item.path === curPath ? 'title active' : 'title'">{{ item.title }}</div>
 | 
				
			||||||
        </li>
 | 
					        </li>
 | 
				
			||||||
      </ul>
 | 
					      </ul>
 | 
				
			||||||
@@ -31,20 +32,20 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
<script setup>
 | 
					<script setup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { useRouter } from "vue-router";
 | 
					import {useRouter} from "vue-router";
 | 
				
			||||||
import { checkSession } from "@/action/session";
 | 
					import {checkSession} from "@/action/session";
 | 
				
			||||||
import { isMobile } from "@/utils/libs";
 | 
					import {isMobile} from "@/utils/libs";
 | 
				
			||||||
import { ref } from "vue";
 | 
					import {ref} from "vue";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const router = useRouter();
 | 
					const router = useRouter();
 | 
				
			||||||
const logo = '/images/icon-logo.png';
 | 
					const logo = '/images/logo.png';
 | 
				
			||||||
const navs = ref([
 | 
					const navs = ref([
 | 
				
			||||||
  {path: "/chat", icon_path: "/images/chat.png", title: "对话聊天"},
 | 
					  {path: "/chat", icon_path: "/images/chat.png", title: "对话聊天"},
 | 
				
			||||||
  {path: "/mj", icon_path: "/images/mj.png", title: "MJ 绘画"},
 | 
					  {path: "/mj", icon_path: "/images/mj.png", title: "MJ 绘画"},
 | 
				
			||||||
  {path: "/sd", icon_path: "/images/sd.png", title: "SD 绘画"},
 | 
					  {path: "/sd", icon_path: "/images/sd.png", title: "SD 绘画"},
 | 
				
			||||||
  {path: "/apps", icon: "menu", title: "应用中心"},
 | 
					  {path: "/apps", icon: "menu", title: "应用中心"},
 | 
				
			||||||
  {path: "/images-wall", icon: "image-list", title: "作品展示"},
 | 
					  {path: "/images-wall", icon: "image-list", title: "作品展示"},
 | 
				
			||||||
  {path: "/knowledge", icon: "book", title: "我的知识库"},
 | 
					  {path: "/knowledge", icon: "book", title: "知识库"},
 | 
				
			||||||
  {path: "/member", icon: "vip-user", title: "会员计划"},
 | 
					  {path: "/member", icon: "vip-user", title: "会员计划"},
 | 
				
			||||||
  {path: "/invite", icon: "share", title: "推广计划"},
 | 
					  {path: "/invite", icon: "share", title: "推广计划"},
 | 
				
			||||||
])
 | 
					])
 | 
				
			||||||
@@ -116,12 +117,13 @@ const changeNav = (item) => {
 | 
				
			|||||||
          color #47fff1
 | 
					          color #47fff1
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		.title{
 | 
					        .title {
 | 
				
			||||||
          font-size: 12px
 | 
					          font-size: 12px
 | 
				
			||||||
          padding-top: 5px
 | 
					          padding-top: 5px
 | 
				
			||||||
          color: #e5e7eb;
 | 
					          color: #e5e7eb;
 | 
				
			||||||
          text-align: center;
 | 
					          text-align: center;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        .active {
 | 
					        .active {
 | 
				
			||||||
          color #47fff1
 | 
					          color #47fff1
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@
 | 
				
			|||||||
              <span>图片比例:</span>
 | 
					              <span>图片比例:</span>
 | 
				
			||||||
              <el-tooltip effect="light" content="生成图片的尺寸比例" placement="right">
 | 
					              <el-tooltip effect="light" content="生成图片的尺寸比例" placement="right">
 | 
				
			||||||
                <el-icon>
 | 
					                <el-icon>
 | 
				
			||||||
									<InfoFilled />
 | 
					                  <InfoFilled/>
 | 
				
			||||||
                </el-icon>
 | 
					                </el-icon>
 | 
				
			||||||
              </el-tooltip>
 | 
					              </el-tooltip>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
@@ -21,8 +21,8 @@
 | 
				
			|||||||
                  <div class="flex-col items-center"
 | 
					                  <div class="flex-col items-center"
 | 
				
			||||||
                       :class="item.value === params.rate ? 'grid-content active' : 'grid-content'"
 | 
					                       :class="item.value === params.rate ? 'grid-content active' : 'grid-content'"
 | 
				
			||||||
                       @click="changeRate(item)">
 | 
					                       @click="changeRate(item)">
 | 
				
			||||||
										<div :class="'shape ' + item.css"></div>
 | 
					                    <!--                    <div :class="'shape ' + item.css"></div>-->
 | 
				
			||||||
										<!-- <el-image class="icon" :src="item.img" fit="cover"></el-image> -->
 | 
					                    <el-image class="icon" :src="item.img" fit="cover"></el-image>
 | 
				
			||||||
                    <div class="text">{{ item.text }}</div>
 | 
					                    <div class="text">{{ item.text }}</div>
 | 
				
			||||||
                  </div>
 | 
					                  </div>
 | 
				
			||||||
                </el-col>
 | 
					                </el-col>
 | 
				
			||||||
@@ -42,7 +42,7 @@
 | 
				
			|||||||
                    </el-select>
 | 
					                    </el-select>
 | 
				
			||||||
                    <el-tooltip effect="light" content="生成的图片质量,质量越好出图越慢" placement="right">
 | 
					                    <el-tooltip effect="light" content="生成的图片质量,质量越好出图越慢" placement="right">
 | 
				
			||||||
                      <el-icon>
 | 
					                      <el-icon>
 | 
				
			||||||
												<InfoFilled />
 | 
					                        <InfoFilled/>
 | 
				
			||||||
                      </el-icon>
 | 
					                      </el-icon>
 | 
				
			||||||
                    </el-tooltip>
 | 
					                    </el-tooltip>
 | 
				
			||||||
                  </div>
 | 
					                  </div>
 | 
				
			||||||
@@ -55,7 +55,7 @@
 | 
				
			|||||||
              <el-tooltip effect="light" content="MJ: 偏真实通用模型 <br/>NIJI: 偏动漫风格、适用于二次元模型" raw-content
 | 
					              <el-tooltip effect="light" content="MJ: 偏真实通用模型 <br/>NIJI: 偏动漫风格、适用于二次元模型" raw-content
 | 
				
			||||||
                          placement="right">
 | 
					                          placement="right">
 | 
				
			||||||
                <el-icon>
 | 
					                <el-icon>
 | 
				
			||||||
									<InfoFilled />
 | 
					                  <InfoFilled/>
 | 
				
			||||||
                </el-icon>
 | 
					                </el-icon>
 | 
				
			||||||
              </el-tooltip>
 | 
					              </el-tooltip>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
@@ -80,7 +80,7 @@
 | 
				
			|||||||
                                content="重复:--tile,参数释义:生成可用作重复平铺的图像,以创建无缝图案。" raw-content
 | 
					                                content="重复:--tile,参数释义:生成可用作重复平铺的图像,以创建无缝图案。" raw-content
 | 
				
			||||||
                                placement="right">
 | 
					                                placement="right">
 | 
				
			||||||
                      <el-icon>
 | 
					                      <el-icon>
 | 
				
			||||||
												<InfoFilled />
 | 
					                        <InfoFilled/>
 | 
				
			||||||
                      </el-icon>
 | 
					                      </el-icon>
 | 
				
			||||||
                    </el-tooltip>
 | 
					                    </el-tooltip>
 | 
				
			||||||
                  </div>
 | 
					                  </div>
 | 
				
			||||||
@@ -95,10 +95,11 @@
 | 
				
			|||||||
                  <div class="form-item-inner">
 | 
					                  <div class="form-item-inner">
 | 
				
			||||||
                    <el-switch v-model="params.raw" inactive-color="#464649" active-color="#47fff1"/>
 | 
					                    <el-switch v-model="params.raw" inactive-color="#464649" active-color="#47fff1"/>
 | 
				
			||||||
                    <el-tooltip effect="light"
 | 
					                    <el-tooltip effect="light"
 | 
				
			||||||
											content="启用新的RAW模式,呈现的人物写实感更加逼真,人物细节、光源、流畅度也更加接近原始作品。<br/> 同时也意味着您需要添加更长的提示。" raw-content
 | 
					                                content="启用新的RAW模式,呈现的人物写实感更加逼真,人物细节、光源、流畅度也更加接近原始作品。<br/> 同时也意味着您需要添加更长的提示。"
 | 
				
			||||||
 | 
					                                raw-content
 | 
				
			||||||
                                placement="right">
 | 
					                                placement="right">
 | 
				
			||||||
                      <el-icon>
 | 
					                      <el-icon>
 | 
				
			||||||
												<InfoFilled />
 | 
					                        <InfoFilled/>
 | 
				
			||||||
                      </el-icon>
 | 
					                      </el-icon>
 | 
				
			||||||
                    </el-tooltip>
 | 
					                    </el-tooltip>
 | 
				
			||||||
                  </div>
 | 
					                  </div>
 | 
				
			||||||
@@ -110,14 +111,13 @@
 | 
				
			|||||||
              <el-form-item label="创意度">
 | 
					              <el-form-item label="创意度">
 | 
				
			||||||
                <template #default>
 | 
					                <template #default>
 | 
				
			||||||
                  <div class="form-item-inner">
 | 
					                  <div class="form-item-inner">
 | 
				
			||||||
										<!-- <el-input v-model.number="params.chaos" size="small" /> -->
 | 
					 | 
				
			||||||
                    <el-slider v-model.number="params.chaos" :max="100" :step="1"
 | 
					                    <el-slider v-model.number="params.chaos" :max="100" :step="1"
 | 
				
			||||||
											style="width: 180px;--el-slider-main-bg-color:#47fff1" />
 | 
					                               style="width: 180px;--el-slider-main-bg-color:#47fff1"/>
 | 
				
			||||||
                    <el-tooltip effect="light"
 | 
					                    <el-tooltip effect="light"
 | 
				
			||||||
                                content="参数用法:--chaos 或--c,取值范围: 0-100 <br/> 取值越高结果越发散,反之则稳定收敛<br /> 默认值0最为精准稳定"
 | 
					                                content="参数用法:--chaos 或--c,取值范围: 0-100 <br/> 取值越高结果越发散,反之则稳定收敛<br /> 默认值0最为精准稳定"
 | 
				
			||||||
                                raw-content placement="right">
 | 
					                                raw-content placement="right">
 | 
				
			||||||
                      <el-icon>
 | 
					                      <el-icon>
 | 
				
			||||||
												<InfoFilled />
 | 
					                        <InfoFilled/>
 | 
				
			||||||
                      </el-icon>
 | 
					                      </el-icon>
 | 
				
			||||||
                    </el-tooltip>
 | 
					                    </el-tooltip>
 | 
				
			||||||
                  </div>
 | 
					                  </div>
 | 
				
			||||||
@@ -129,14 +129,13 @@
 | 
				
			|||||||
              <el-form-item label="风格化">
 | 
					              <el-form-item label="风格化">
 | 
				
			||||||
                <template #default>
 | 
					                <template #default>
 | 
				
			||||||
                  <div class="form-item-inner">
 | 
					                  <div class="form-item-inner">
 | 
				
			||||||
										<!-- <el-input v-model.number="params.stylize" size="small" /> -->
 | 
					 | 
				
			||||||
                    <el-slider v-model.number="params.stylize" :min="0" :max="1000" :step="1"
 | 
					                    <el-slider v-model.number="params.stylize" :min="0" :max="1000" :step="1"
 | 
				
			||||||
											style="width: 180px;--el-slider-main-bg-color:#47fff1" />
 | 
					                               style="width: 180px;--el-slider-main-bg-color:#47fff1"/>
 | 
				
			||||||
                    <el-tooltip effect="light"
 | 
					                    <el-tooltip effect="light"
 | 
				
			||||||
                                content="风格化:--stylize 或 --s,范围 1-1000,默认值100 <br/>高取值会产生非常艺术化但与提示关联性较低的图像"
 | 
					                                content="风格化:--stylize 或 --s,范围 1-1000,默认值100 <br/>高取值会产生非常艺术化但与提示关联性较低的图像"
 | 
				
			||||||
                                raw-content placement="right">
 | 
					                                raw-content placement="right">
 | 
				
			||||||
                      <el-icon>
 | 
					                      <el-icon>
 | 
				
			||||||
												<InfoFilled />
 | 
					                        <InfoFilled/>
 | 
				
			||||||
                      </el-icon>
 | 
					                      </el-icon>
 | 
				
			||||||
                    </el-tooltip>
 | 
					                    </el-tooltip>
 | 
				
			||||||
                  </div>
 | 
					                  </div>
 | 
				
			||||||
@@ -144,107 +143,48 @@
 | 
				
			|||||||
              </el-form-item>
 | 
					              </el-form-item>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						<!-- <div class="param-line" style="padding-top: 10px">
 | 
					 | 
				
			||||||
							<el-form-item label="图像权重">
 | 
					 | 
				
			||||||
								<template #default>
 | 
					 | 
				
			||||||
									<div class="form-item-inner">
 | 
					 | 
				
			||||||
										<el-slider v-model.number="params.weight" :max="1" :step="0.01"
 | 
					 | 
				
			||||||
											style="width: 180px;--el-slider-main-bg-color:#47fff1" />
 | 
					 | 
				
			||||||
										<el-tooltip effect="light"
 | 
					 | 
				
			||||||
											content="使用图像权重参数--iw来调整图像 URL 与文本的重要性 <br/>权重较高时意味着图像提示将对完成的作业产生更大的影响"
 | 
					 | 
				
			||||||
											raw-content placement="right">
 | 
					 | 
				
			||||||
											<el-icon style="margin-top: 6px">
 | 
					 | 
				
			||||||
												<InfoFilled />
 | 
					 | 
				
			||||||
											</el-icon>
 | 
					 | 
				
			||||||
										</el-tooltip>
 | 
					 | 
				
			||||||
									</div>
 | 
					 | 
				
			||||||
								</template>
 | 
					 | 
				
			||||||
							</el-form-item>
 | 
					 | 
				
			||||||
						</div> -->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <div class="param-line">
 | 
					            <div class="param-line">
 | 
				
			||||||
              <el-form-item label="随机种子">
 | 
					              <el-form-item label="随机种子">
 | 
				
			||||||
                <template #default>
 | 
					                <template #default>
 | 
				
			||||||
                  <div class="form-item-inner">
 | 
					                  <div class="form-item-inner">
 | 
				
			||||||
										<el-input v-model.number="params.seed" size="small" />
 | 
					                    <el-input v-model.number="params.seed" style="--el-input-focus-border-color:#47fff1"/>
 | 
				
			||||||
										<!-- <el-slider v-model.number="params.seed" :min="0" :max="4294967295" :step="1"
 | 
					 | 
				
			||||||
											style="width: 180px;--el-slider-main-bg-color:#47fff1" /> -->
 | 
					 | 
				
			||||||
                    <el-tooltip effect="light"
 | 
					                    <el-tooltip effect="light"
 | 
				
			||||||
											content="随机种子:--seed,默认值0表示随机产生 <br/>使用相同的种子参数和描述将产生相似的图像" raw-content
 | 
					                                content="随机种子:--seed,默认值0表示随机产生 <br/>使用相同的种子参数和描述将产生相似的图像"
 | 
				
			||||||
 | 
					                                raw-content
 | 
				
			||||||
                                placement="right">
 | 
					                                placement="right">
 | 
				
			||||||
                      <el-icon>
 | 
					                      <el-icon>
 | 
				
			||||||
												<InfoFilled />
 | 
					                        <InfoFilled/>
 | 
				
			||||||
                      </el-icon>
 | 
					                      </el-icon>
 | 
				
			||||||
                    </el-tooltip>
 | 
					                    </el-tooltip>
 | 
				
			||||||
                  </div>
 | 
					                  </div>
 | 
				
			||||||
                </template>
 | 
					                </template>
 | 
				
			||||||
              </el-form-item>
 | 
					              </el-form-item>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					 | 
				
			||||||
						
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						<!-- <div class="param-line">
 | 
					 | 
				
			||||||
							<el-form-item label="图生图">
 | 
					 | 
				
			||||||
								<template #default>
 | 
					 | 
				
			||||||
									<div class="form-item-inner">
 | 
					 | 
				
			||||||
										<el-input v-model="params.img" size="small" placeholder="请输入图片地址或者上传图片"
 | 
					 | 
				
			||||||
											style="width: 160px" />
 | 
					 | 
				
			||||||
										<el-icon @click="params.img = ''" title="清空图片">
 | 
					 | 
				
			||||||
											<DeleteFilled />
 | 
					 | 
				
			||||||
										</el-icon>
 | 
					 | 
				
			||||||
										<el-tooltip effect="light" content="垫图:以某张图片为底稿参考来创作绘画 <br/> 支持 PNG 和 JPG 格式图片"
 | 
					 | 
				
			||||||
											raw-content placement="right">
 | 
					 | 
				
			||||||
											<el-icon>
 | 
					 | 
				
			||||||
												<InfoFilled />
 | 
					 | 
				
			||||||
											</el-icon>
 | 
					 | 
				
			||||||
										</el-tooltip>
 | 
					 | 
				
			||||||
									</div>
 | 
					 | 
				
			||||||
								</template>
 | 
					 | 
				
			||||||
							</el-form-item>
 | 
					 | 
				
			||||||
						</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						<div class="param-line">
 | 
					 | 
				
			||||||
							<el-upload class="img-uploader" :auto-upload="true" :show-file-list="false"
 | 
					 | 
				
			||||||
								:http-request="afterRead" style="--el-color-primary:#47fff1">
 | 
					 | 
				
			||||||
								<el-image v-if="params.img !== ''" :src="params.img" fit="cover" />
 | 
					 | 
				
			||||||
								<el-icon v-else class="uploader-icon">
 | 
					 | 
				
			||||||
									<Plus />
 | 
					 | 
				
			||||||
								</el-icon>
 | 
					 | 
				
			||||||
							</el-upload>
 | 
					 | 
				
			||||||
						</div> -->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						<div class="param-line pt">
 | 
					 | 
				
			||||||
							<el-form-item label="剩余次数">
 | 
					 | 
				
			||||||
								<template #default>
 | 
					 | 
				
			||||||
									<el-tag type="info">{{ imgCalls }}</el-tag>
 | 
					 | 
				
			||||||
								</template>
 | 
					 | 
				
			||||||
							</el-form-item>
 | 
					 | 
				
			||||||
						</div>
 | 
					 | 
				
			||||||
          </el-form>
 | 
					          </el-form>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
				<!-- <div class="submit-btn">
 | 
					 | 
				
			||||||
					<el-button color="#47fff1" :dark="false" round @click="generate">立即生成</el-button>
 | 
					 | 
				
			||||||
				</div> -->
 | 
					 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <div class="task-list-box">
 | 
					      <div class="task-list-box">
 | 
				
			||||||
        <div class="task-list-inner" :style="{ height: listBoxHeight + 'px' }">
 | 
					        <div class="task-list-inner" :style="{ height: listBoxHeight + 'px' }">
 | 
				
			||||||
          <h2>AI绘画</h2>
 | 
					          <h2>AI绘画</h2>
 | 
				
			||||||
					<el-tabs v-model="activeName" class="title-tabs" @tab-click="handleClick">
 | 
					          <el-form>
 | 
				
			||||||
 | 
					            <el-tabs v-model="activeName" class="title-tabs">
 | 
				
			||||||
              <el-tab-pane label="图生图(可选)" name="图生图">
 | 
					              <el-tab-pane label="图生图(可选)" name="图生图">
 | 
				
			||||||
							<div class="text">图生图:以某张图片为底稿参考来创作绘画,生成类似风格或类型图像,支持 PNG 和 JPG 格式图片;</div>
 | 
					                <div class="text">图生图:以某张图片为底稿参考来创作绘画,生成类似风格或类型图像,支持 PNG 和 JPG 格式图片;
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
                <div class="param-line pt">
 | 
					                <div class="param-line pt">
 | 
				
			||||||
                  <el-form-item label="">
 | 
					                  <el-form-item label="">
 | 
				
			||||||
                    <template #default>
 | 
					                    <template #default>
 | 
				
			||||||
                      <div class="form-item-inner flex-row items-center">
 | 
					                      <div class="form-item-inner flex-row items-center">
 | 
				
			||||||
                        <el-input v-model="params.img" size="small" placeholder="请输入图片地址或者上传图片"
 | 
					                        <el-input v-model="params.img" size="small" placeholder="请输入图片地址或者上传图片"
 | 
				
			||||||
												style="width: 300px;" />
 | 
					                                  style="width: 300px;"/>
 | 
				
			||||||
                        <el-icon @click="params.img = ''" title="清空图片">
 | 
					                        <el-icon @click="params.img = ''" title="清空图片">
 | 
				
			||||||
												<DeleteFilled />
 | 
					                          <DeleteFilled/>
 | 
				
			||||||
                        </el-icon>
 | 
					                        </el-icon>
 | 
				
			||||||
											<el-tooltip effect="light" content="垫图:以某张图片为底稿参考来创作绘画 <br/> 支持 PNG 和 JPG 格式图片"
 | 
					                        <el-tooltip effect="light"
 | 
				
			||||||
 | 
					                                    content="垫图:以某张图片为底稿参考来创作绘画 <br/> 支持 PNG 和 JPG 格式图片"
 | 
				
			||||||
                                    raw-content placement="right">
 | 
					                                    raw-content placement="right">
 | 
				
			||||||
                          <el-icon>
 | 
					                          <el-icon>
 | 
				
			||||||
													<InfoFilled />
 | 
					                            <InfoFilled/>
 | 
				
			||||||
                          </el-icon>
 | 
					                          </el-icon>
 | 
				
			||||||
                        </el-tooltip>
 | 
					                        </el-tooltip>
 | 
				
			||||||
                      </div>
 | 
					                      </div>
 | 
				
			||||||
@@ -255,9 +195,9 @@
 | 
				
			|||||||
                <div class="param-line">
 | 
					                <div class="param-line">
 | 
				
			||||||
                  <el-upload class="img-uploader" :auto-upload="true" :show-file-list="false"
 | 
					                  <el-upload class="img-uploader" :auto-upload="true" :show-file-list="false"
 | 
				
			||||||
                             :http-request="afterRead" style="--el-color-primary:#47fff1">
 | 
					                             :http-request="afterRead" style="--el-color-primary:#47fff1">
 | 
				
			||||||
									<el-image v-if="params.img !== ''" :src="params.img" fit="cover" />
 | 
					                    <el-image v-if="params.img !== ''" :src="params.img" fit="cover"/>
 | 
				
			||||||
                    <el-icon v-else class="uploader-icon">
 | 
					                    <el-icon v-else class="uploader-icon">
 | 
				
			||||||
										<Plus />
 | 
					                      <Plus/>
 | 
				
			||||||
                    </el-icon>
 | 
					                    </el-icon>
 | 
				
			||||||
                  </el-upload>
 | 
					                  </el-upload>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
@@ -267,12 +207,12 @@
 | 
				
			|||||||
                    <template #default>
 | 
					                    <template #default>
 | 
				
			||||||
                      <div class="form-item-inner">
 | 
					                      <div class="form-item-inner">
 | 
				
			||||||
                        <el-slider v-model.number="params.weight" :max="1" :step="0.01"
 | 
					                        <el-slider v-model.number="params.weight" :max="1" :step="0.01"
 | 
				
			||||||
											style="width: 180px;--el-slider-main-bg-color:#47fff1" />
 | 
					                                   style="width: 180px;--el-slider-main-bg-color:#47fff1"/>
 | 
				
			||||||
                        <el-tooltip effect="light"
 | 
					                        <el-tooltip effect="light"
 | 
				
			||||||
                                    content="使用图像权重参数--iw来调整图像 URL 与文本的重要性 <br/>权重较高时意味着图像提示将对完成的作业产生更大的影响"
 | 
					                                    content="使用图像权重参数--iw来调整图像 URL 与文本的重要性 <br/>权重较高时意味着图像提示将对完成的作业产生更大的影响"
 | 
				
			||||||
                                    raw-content placement="right">
 | 
					                                    raw-content placement="right">
 | 
				
			||||||
                          <el-icon style="margin-top: 9px">
 | 
					                          <el-icon style="margin-top: 9px">
 | 
				
			||||||
												<InfoFilled />
 | 
					                            <InfoFilled/>
 | 
				
			||||||
                          </el-icon>
 | 
					                          </el-icon>
 | 
				
			||||||
                        </el-tooltip>
 | 
					                        </el-tooltip>
 | 
				
			||||||
                      </div>
 | 
					                      </div>
 | 
				
			||||||
@@ -282,33 +222,32 @@
 | 
				
			|||||||
              </el-tab-pane>
 | 
					              </el-tab-pane>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              <el-tab-pane label="图生文(可选)" name="图生文">
 | 
					              <el-tab-pane label="图生文(可选)" name="图生文">
 | 
				
			||||||
							<div class="text">图生文:上传一张图片生成对应的提示词;</div>
 | 
					                <div class="text">图生文功能正在紧锣密鼓开发中,敬请期待...</div>
 | 
				
			||||||
							<div class="param-line pt">
 | 
					                <!--              <div class="param-line pt">-->
 | 
				
			||||||
								<el-empty image-size="100px" description="功能建设中" />
 | 
					                <!--                <el-empty image-size="100px" description="功能建设中"/>-->
 | 
				
			||||||
							</div>
 | 
					                <!--              </div>-->
 | 
				
			||||||
              </el-tab-pane>
 | 
					              </el-tab-pane>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              <el-tab-pane label="融图(可选)" name="融图">
 | 
					              <el-tab-pane label="融图(可选)" name="融图">
 | 
				
			||||||
							<div class="text">融图:融合图片风格;</div>
 | 
					                <div class="text">融图功能正在紧锣密鼓开发中,敬请期待...</div>
 | 
				
			||||||
							<div class="param-line pt">
 | 
					 | 
				
			||||||
								<el-empty image-size="100px" description="功能建设中" />
 | 
					 | 
				
			||||||
							</div>
 | 
					 | 
				
			||||||
              </el-tab-pane>
 | 
					              </el-tab-pane>
 | 
				
			||||||
            </el-tabs>
 | 
					            </el-tabs>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
            <div class="param-line pt">
 | 
					            <div class="param-line pt">
 | 
				
			||||||
              <div class="flex-row justify-between items-center">
 | 
					              <div class="flex-row justify-between items-center">
 | 
				
			||||||
                <div class="flex-row justify-start items-center">
 | 
					                <div class="flex-row justify-start items-center">
 | 
				
			||||||
                  <span>提示词:</span>
 | 
					                  <span>提示词:</span>
 | 
				
			||||||
                  <el-tooltip effect="light" content="输入你想要的内容,用逗号分割" placement="right">
 | 
					                  <el-tooltip effect="light" content="输入你想要的内容,用逗号分割" placement="right">
 | 
				
			||||||
                    <el-icon>
 | 
					                    <el-icon>
 | 
				
			||||||
										<InfoFilled />
 | 
					                      <InfoFilled/>
 | 
				
			||||||
                    </el-icon>
 | 
					                    </el-icon>
 | 
				
			||||||
                  </el-tooltip>
 | 
					                  </el-tooltip>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <el-button type="success">
 | 
					                <el-button type="success">
 | 
				
			||||||
								<el-icon style="margin-right: 6px;font-size: 18px;"><Refresh /></el-icon>翻译
 | 
					                  <el-icon style="margin-right: 6px;font-size: 18px;">
 | 
				
			||||||
 | 
					                    <Refresh/>
 | 
				
			||||||
 | 
					                  </el-icon>
 | 
				
			||||||
 | 
					                  翻译
 | 
				
			||||||
                </el-button>
 | 
					                </el-button>
 | 
				
			||||||
              </div>
 | 
					              </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
@@ -316,7 +255,7 @@
 | 
				
			|||||||
            <div class="param-line pt">
 | 
					            <div class="param-line pt">
 | 
				
			||||||
              <el-input v-model="params.prompt" :autosize="{ minRows: 4, maxRows: 6 }" type="textarea"
 | 
					              <el-input v-model="params.prompt" :autosize="{ minRows: 4, maxRows: 6 }" type="textarea"
 | 
				
			||||||
                        ref="promptRef"
 | 
					                        ref="promptRef"
 | 
				
			||||||
							placeholder="这里输入你的英文咒语,例如:A chinese girl walking in the middle of a cobblestone street" />
 | 
					                        placeholder="这里输入你的英文咒语,例如:A chinese girl walking in the middle of a cobblestone street"/>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <div class="param-line pt">
 | 
					            <div class="param-line pt">
 | 
				
			||||||
@@ -325,29 +264,32 @@
 | 
				
			|||||||
                  <span>不希望出现的内容:(可选)</span>
 | 
					                  <span>不希望出现的内容:(可选)</span>
 | 
				
			||||||
                  <el-tooltip effect="light" content="不想出现在图片上的元素(例如:树,建筑)" placement="right">
 | 
					                  <el-tooltip effect="light" content="不想出现在图片上的元素(例如:树,建筑)" placement="right">
 | 
				
			||||||
                    <el-icon>
 | 
					                    <el-icon>
 | 
				
			||||||
									<InfoFilled />
 | 
					                      <InfoFilled/>
 | 
				
			||||||
                    </el-icon>
 | 
					                    </el-icon>
 | 
				
			||||||
                  </el-tooltip>
 | 
					                  </el-tooltip>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <el-button type="success">
 | 
					                <el-button type="success">
 | 
				
			||||||
								<el-icon style="margin-right: 6px;font-size: 18px;"><Refresh /></el-icon>翻译
 | 
					                  <el-icon style="margin-right: 6px;font-size: 18px;">
 | 
				
			||||||
 | 
					                    <Refresh/>
 | 
				
			||||||
 | 
					                  </el-icon>
 | 
				
			||||||
 | 
					                  翻译
 | 
				
			||||||
                </el-button>
 | 
					                </el-button>
 | 
				
			||||||
              </div>
 | 
					              </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <div class="param-line pt">
 | 
					            <div class="param-line pt">
 | 
				
			||||||
						<el-input v-model="params.no" :autosize="{ minRows: 4, maxRows: 6 }" type="textarea"
 | 
					              <el-input v-model="params.neg_prompt" :autosize="{ minRows: 4, maxRows: 6 }" type="textarea"
 | 
				
			||||||
                        ref="promptRef"
 | 
					                        ref="promptRef"
 | 
				
			||||||
							placeholder="这里输入你不希望出现在图片上的内容,元素" />
 | 
					                        placeholder="这里输入你不希望出现在图片上的内容,元素"/>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <div class="submit-btn">
 | 
					            <div class="submit-btn">
 | 
				
			||||||
						<el-button color="#47fff1" :dark="false" size="medium" @click="generate">
 | 
					              <el-button color="#47fff1" :dark="false" @click="generate" round>立即生成</el-button>
 | 
				
			||||||
							<el-icon class="submit-icon">
 | 
					              <div class="text-info">
 | 
				
			||||||
								<Notification />
 | 
					                <el-tag type="success">可用额度:{{ imgCalls }}</el-tag>
 | 
				
			||||||
							</el-icon>立即生成
 | 
					 | 
				
			||||||
						</el-button>
 | 
					 | 
				
			||||||
              </div>
 | 
					              </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </el-form>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          <h2>任务列表</h2>
 | 
					          <h2>任务列表</h2>
 | 
				
			||||||
          <div class="running-job-list">
 | 
					          <div class="running-job-list">
 | 
				
			||||||
@@ -367,7 +309,7 @@
 | 
				
			|||||||
                      <template #error>
 | 
					                      <template #error>
 | 
				
			||||||
                        <div class="image-slot">
 | 
					                        <div class="image-slot">
 | 
				
			||||||
                          <el-icon>
 | 
					                          <el-icon>
 | 
				
			||||||
														<Picture />
 | 
					                            <Picture/>
 | 
				
			||||||
                          </el-icon>
 | 
					                          </el-icon>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                      </template>
 | 
					                      </template>
 | 
				
			||||||
@@ -375,7 +317,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    <div class="progress">
 | 
					                    <div class="progress">
 | 
				
			||||||
                      <el-progress type="circle" :percentage="scope.item.progress" :width="100"
 | 
					                      <el-progress type="circle" :percentage="scope.item.progress" :width="100"
 | 
				
			||||||
												color="#47fff1" />
 | 
					                                   color="#47fff1"/>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                  </div>
 | 
					                  </div>
 | 
				
			||||||
                  <el-image fit="cover" v-else>
 | 
					                  <el-image fit="cover" v-else>
 | 
				
			||||||
@@ -389,7 +331,7 @@
 | 
				
			|||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
              </template>
 | 
					              </template>
 | 
				
			||||||
            </ItemList>
 | 
					            </ItemList>
 | 
				
			||||||
						<el-empty :image-size="100" v-else />
 | 
					            <el-empty :image-size="100" v-else/>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          <h2>创作记录</h2>
 | 
					          <h2>创作记录</h2>
 | 
				
			||||||
@@ -411,7 +353,7 @@
 | 
				
			|||||||
                    <template #error>
 | 
					                    <template #error>
 | 
				
			||||||
                      <div class="image-slot">
 | 
					                      <div class="image-slot">
 | 
				
			||||||
                        <el-icon>
 | 
					                        <el-icon>
 | 
				
			||||||
													<Picture />
 | 
					                          <Picture/>
 | 
				
			||||||
                        </el-icon>
 | 
					                        </el-icon>
 | 
				
			||||||
                      </div>
 | 
					                      </div>
 | 
				
			||||||
                    </template>
 | 
					                    </template>
 | 
				
			||||||
@@ -429,7 +371,7 @@
 | 
				
			|||||||
                          <el-popover placement="left" title="提示词" :width="240" trigger="hover">
 | 
					                          <el-popover placement="left" title="提示词" :width="240" trigger="hover">
 | 
				
			||||||
                            <template #reference>
 | 
					                            <template #reference>
 | 
				
			||||||
                              <el-icon>
 | 
					                              <el-icon>
 | 
				
			||||||
																<ChromeFilled />
 | 
					                                <ChromeFilled/>
 | 
				
			||||||
                              </el-icon>
 | 
					                              </el-icon>
 | 
				
			||||||
                            </template>
 | 
					                            </template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -438,7 +380,7 @@
 | 
				
			|||||||
                                <span>{{ scope.item.prompt }}</span>
 | 
					                                <span>{{ scope.item.prompt }}</span>
 | 
				
			||||||
                                <el-icon class="copy-prompt"
 | 
					                                <el-icon class="copy-prompt"
 | 
				
			||||||
                                         :data-clipboard-text="scope.item.prompt">
 | 
					                                         :data-clipboard-text="scope.item.prompt">
 | 
				
			||||||
																	<DocumentCopy />
 | 
					                                  <DocumentCopy/>
 | 
				
			||||||
                                </el-icon>
 | 
					                                </el-icon>
 | 
				
			||||||
                              </div>
 | 
					                              </div>
 | 
				
			||||||
                            </template>
 | 
					                            </template>
 | 
				
			||||||
@@ -460,7 +402,7 @@
 | 
				
			|||||||
              </template>
 | 
					              </template>
 | 
				
			||||||
            </ItemList>
 | 
					            </ItemList>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						<el-empty :image-size="100" v-else />
 | 
					            <el-empty :image-size="100" v-else/>
 | 
				
			||||||
          </div> <!-- end finish job list-->
 | 
					          </div> <!-- end finish job list-->
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -471,18 +413,25 @@
 | 
				
			|||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script setup>
 | 
					<script setup>
 | 
				
			||||||
import { onMounted, ref } from "vue"
 | 
					import {onMounted, ref} from "vue"
 | 
				
			||||||
import { ChromeFilled, DeleteFilled, DocumentCopy, InfoFilled, Notification, Picture, Plus, Refresh } from "@element-plus/icons-vue";
 | 
					import {
 | 
				
			||||||
 | 
					  ChromeFilled,
 | 
				
			||||||
 | 
					  DeleteFilled,
 | 
				
			||||||
 | 
					  DocumentCopy,
 | 
				
			||||||
 | 
					  InfoFilled,
 | 
				
			||||||
 | 
					  Picture,
 | 
				
			||||||
 | 
					  Plus,
 | 
				
			||||||
 | 
					  Refresh
 | 
				
			||||||
 | 
					} from "@element-plus/icons-vue";
 | 
				
			||||||
import Compressor from "compressorjs";
 | 
					import Compressor from "compressorjs";
 | 
				
			||||||
import { httpGet, httpPost } from "@/utils/http";
 | 
					import {httpGet, httpPost} from "@/utils/http";
 | 
				
			||||||
import { ElMessage, ElNotification } from "element-plus";
 | 
					import {ElMessage, ElNotification} from "element-plus";
 | 
				
			||||||
import ItemList from "@/components/ItemList.vue";
 | 
					import ItemList from "@/components/ItemList.vue";
 | 
				
			||||||
import Clipboard from "clipboard";
 | 
					import Clipboard from "clipboard";
 | 
				
			||||||
import { checkSession } from "@/action/session";
 | 
					import {checkSession} from "@/action/session";
 | 
				
			||||||
import { useRouter } from "vue-router";
 | 
					import {useRouter} from "vue-router";
 | 
				
			||||||
import { getSessionId, getUserToken } from "@/store/session";
 | 
					import {getSessionId, getUserToken} from "@/store/session";
 | 
				
			||||||
import { removeArrayItem } from "@/utils/libs";
 | 
					import {removeArrayItem} from "@/utils/libs";
 | 
				
			||||||
import axios from "axios";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
const listBoxHeight = ref(window.innerHeight - 40)
 | 
					const listBoxHeight = ref(window.innerHeight - 40)
 | 
				
			||||||
const mjBoxHeight = ref(window.innerHeight - 150)
 | 
					const mjBoxHeight = ref(window.innerHeight - 150)
 | 
				
			||||||
@@ -491,26 +440,26 @@ window.onresize = () => {
 | 
				
			|||||||
  mjBoxHeight.value = window.innerHeight - 150
 | 
					  mjBoxHeight.value = window.innerHeight - 150
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
const rates = [
 | 
					const rates = [
 | 
				
			||||||
	{ css: "square", value: "1:1", text: "1:1",img: "/images/1_1.png" },
 | 
					  {css: "square", value: "1:1", text: "1:1", img: "/images/mj/rate_1_1.png"},
 | 
				
			||||||
	{ css: "size1-2", value: "1:2", text: "1:2",img: "/images/1_2.png" },
 | 
					  {css: "size1-2", value: "1:2", text: "1:2", img: "/images/mj/rate_1_2.png"},
 | 
				
			||||||
	{ css: "size2-1", value: "2:1", text: "2:1",img: "/images/2_1.png" },
 | 
					  {css: "size2-1", value: "2:1", text: "2:1", img: "/images/mj/rate_2_1.png"},
 | 
				
			||||||
	{ css: "size2-3", value: "2:3", text: "2:3",img: "/images/3_4.png" },
 | 
					  {css: "size2-3", value: "2:3", text: "2:3", img: "/images/mj/rate_3_4.png"},
 | 
				
			||||||
	{ css: "size3-2", value: "3:2", text: "3:2",img: "/images/4_3.png" },
 | 
					  {css: "size3-2", value: "3:2", text: "3:2", img: "/images/mj/rate_4_3.png"},
 | 
				
			||||||
	{ css: "size3-4", value: "3:4", text: "3:4",img: "/images/3_4.png" },
 | 
					  {css: "size3-4", value: "3:4", text: "3:4", img: "/images/mj/rate_3_4.png"},
 | 
				
			||||||
	{ css: "size4-3", value: "4:3", text: "4:3",img: "/images/4_3.png" },
 | 
					  {css: "size4-3", value: "4:3", text: "4:3", img: "/images/mj/rate_4_3.png"},
 | 
				
			||||||
	{ css: "size16-9", value: "16:9", text: "16:9",img: "/images/16_9.png" },
 | 
					  {css: "size16-9", value: "16:9", text: "16:9", img: "/images/mj/rate_16_9.png"},
 | 
				
			||||||
	{ css: "size9-16", value: "9:16", text: "9:16",img: "/images/9_16.png" },
 | 
					  {css: "size9-16", value: "9:16", text: "9:16", img: "/images/mj/rate_9_16.png"},
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
const models = [
 | 
					const models = [
 | 
				
			||||||
	{ text: "最新模式MJ-5.2", value: " --v 5.2", img: "/images/mj-normal.png" },
 | 
					  {text: "最新模式MJ-5.2", value: " --v 5.2", img: "/images/mj/mj-v5.2.png"},
 | 
				
			||||||
	{ text: "优质模式MJ-5.1", value: " --v 5.1", img: "/images/mj1.jpg" },
 | 
					  {text: "优质模式MJ-5.1", value: " --v 5.1", img: "/images/mj/mj-v5.1.jpg"},
 | 
				
			||||||
	{ text: "虚幻模式MJ-5", value: " --v 5", img: "/images/mj2.jpg" },
 | 
					  {text: "虚幻模式MJ-5", value: " --v 5", img: "/images/mj/mj-v5.jpg"},
 | 
				
			||||||
	{ text: "真实模式MJ-4", value: " --v 4", img: "/images/mj3.jpg" },
 | 
					  {text: "真实模式MJ-4", value: " --v 4", img: "/images/mj/mj-v4.jpg"},
 | 
				
			||||||
	{ text: "动漫风niji5 原始", value: " --niji 5", img: "/images/mj-niji.png" },
 | 
					  {text: "动漫风niji5 原始", value: " --niji 5", img: "/images/mj/mj-niji.png"},
 | 
				
			||||||
	{ text: "动漫风niji5 可爱", value: " --niji 5 --style cute", img: "/images/nj1.jpg" },
 | 
					  {text: "动漫风niji5 可爱", value: " --niji 5 --style cute", img: "/images/mj/nj1.jpg"},
 | 
				
			||||||
	{ text: "动漫风niji5 风景", value: " --niji 5 --style scenic", img: "/images/nj2.jpg" },
 | 
					  {text: "动漫风niji5 风景", value: " --niji 5 --style scenic", img: "/images/mj/nj2.jpg"},
 | 
				
			||||||
	{ text: "动漫风niji5 表现力", value: " --niji 5 --style expressive", img: "/images/nj3.jpg" },
 | 
					  {text: "动漫风niji5 表现力", value: " --niji 5 --style expressive", img: "/images/mj/nj3.jpg"},
 | 
				
			||||||
	{ text: "动漫风niji4", value: " --niji 4", img: "/images/nj4.jpg" },
 | 
					  {text: "动漫风niji4", value: " --niji 4", img: "/images/mj/nj4.jpg"},
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const options = [
 | 
					const options = [
 | 
				
			||||||
@@ -538,9 +487,9 @@ const params = ref({
 | 
				
			|||||||
  img: "",
 | 
					  img: "",
 | 
				
			||||||
  weight: 0.25,
 | 
					  weight: 0.25,
 | 
				
			||||||
  prompt: "",
 | 
					  prompt: "",
 | 
				
			||||||
	no:"",
 | 
					  neg_prompt: "",
 | 
				
			||||||
	tile:false,
 | 
					  tile: false,
 | 
				
			||||||
	quality: 1
 | 
					  quality: 0.5
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const activeName = ref('图生图')
 | 
					const activeName = ref('图生图')
 | 
				
			||||||
@@ -614,6 +563,7 @@ const connect = () => {
 | 
				
			|||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _socket.addEventListener('close', () => {
 | 
					  _socket.addEventListener('close', () => {
 | 
				
			||||||
 | 
					    ElMessage.error("Websocket 已经断开,正在重新连接服务器")
 | 
				
			||||||
    connect()
 | 
					    connect()
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,7 +57,10 @@
 | 
				
			|||||||
      <el-form :model="item" label-width="120px" ref="formRef" :rules="rules">
 | 
					      <el-form :model="item" label-width="120px" ref="formRef" :rules="rules">
 | 
				
			||||||
        <el-form-item label="所属平台:" prop="platform">
 | 
					        <el-form-item label="所属平台:" prop="platform">
 | 
				
			||||||
          <el-select v-model="item.platform" placeholder="请选择平台">
 | 
					          <el-select v-model="item.platform" placeholder="请选择平台">
 | 
				
			||||||
            <el-option v-for="item in platforms" :value="item.value" :key="item.value">{{ item.name }}</el-option>
 | 
					            <el-option v-for="item in platforms" :value="item.value" :label="item.name" :key="item.value">{{
 | 
				
			||||||
 | 
					                item.name
 | 
				
			||||||
 | 
					              }}
 | 
				
			||||||
 | 
					            </el-option>
 | 
				
			||||||
          </el-select>
 | 
					          </el-select>
 | 
				
			||||||
        </el-form-item>
 | 
					        </el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -66,7 +69,10 @@
 | 
				
			|||||||
        </el-form-item>
 | 
					        </el-form-item>
 | 
				
			||||||
        <el-form-item label="用途:" prop="type">
 | 
					        <el-form-item label="用途:" prop="type">
 | 
				
			||||||
          <el-select v-model="item.type" placeholder="请选择用途">
 | 
					          <el-select v-model="item.type" placeholder="请选择用途">
 | 
				
			||||||
            <el-option v-for="item in types" :value="item.value" :key="item.value">{{ item.name }}</el-option>
 | 
					            <el-option v-for="item in types" :value="item.value" :label="item.name" :key="item.value">{{
 | 
				
			||||||
 | 
					                item.name
 | 
				
			||||||
 | 
					              }}
 | 
				
			||||||
 | 
					            </el-option>
 | 
				
			||||||
          </el-select>
 | 
					          </el-select>
 | 
				
			||||||
        </el-form-item>
 | 
					        </el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,7 +53,10 @@
 | 
				
			|||||||
      <el-form :model="item" label-width="120px" ref="formRef" :rules="rules">
 | 
					      <el-form :model="item" label-width="120px" ref="formRef" :rules="rules">
 | 
				
			||||||
        <el-form-item label="所属平台:" prop="platform">
 | 
					        <el-form-item label="所属平台:" prop="platform">
 | 
				
			||||||
          <el-select v-model="item.platform" placeholder="请选择平台">
 | 
					          <el-select v-model="item.platform" placeholder="请选择平台">
 | 
				
			||||||
            <el-option v-for="item in platforms" :value="item.value" :key="item.value">{{ item.name }}</el-option>
 | 
					            <el-option v-for="item in platforms" :value="item.value" :label="item.name" :key="item.value">{{
 | 
				
			||||||
 | 
					                item.name
 | 
				
			||||||
 | 
					              }}
 | 
				
			||||||
 | 
					            </el-option>
 | 
				
			||||||
          </el-select>
 | 
					          </el-select>
 | 
				
			||||||
        </el-form-item>
 | 
					        </el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||