add
This commit is contained in:
@@ -151,6 +151,13 @@ swagger:
|
|||||||
# 请求前缀
|
# 请求前缀
|
||||||
pathMapping: /dev-api
|
pathMapping: /dev-api
|
||||||
|
|
||||||
|
# 博客网站文章同步配置
|
||||||
|
website-sync:
|
||||||
|
base-url: https://www.yidaima.cn/prod-api
|
||||||
|
api-key: 9628e0e5d85e541591a47a0e768fabddbf62c9d0fcc6c21da3a41ea65afd505c
|
||||||
|
connect-timeout: 5000
|
||||||
|
read-timeout: 30000
|
||||||
|
|
||||||
# 防止XSS攻击
|
# 防止XSS攻击
|
||||||
xss:
|
xss:
|
||||||
# 过滤开关
|
# 过滤开关
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.ruoyi.office.controller;
|
package com.ruoyi.office.controller;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
@@ -19,6 +20,8 @@ import com.ruoyi.common.core.domain.AjaxResult;
|
|||||||
import com.ruoyi.common.enums.BusinessType;
|
import com.ruoyi.common.enums.BusinessType;
|
||||||
import com.ruoyi.office.domain.TtCode;
|
import com.ruoyi.office.domain.TtCode;
|
||||||
import com.ruoyi.office.service.ITtCodeService;
|
import com.ruoyi.office.service.ITtCodeService;
|
||||||
|
import com.ruoyi.office.service.IWebsiteArticleSyncService;
|
||||||
|
import com.ruoyi.office.service.TtScreenshotArchiveService;
|
||||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
|
|
||||||
@@ -35,6 +38,12 @@ public class TtCodeController extends BaseController
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ITtCodeService ttCodeService;
|
private ITtCodeService ttCodeService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IWebsiteArticleSyncService websiteArticleSyncService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TtScreenshotArchiveService screenshotArchiveService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询源码管理列表
|
* 查询源码管理列表
|
||||||
*/
|
*/
|
||||||
@@ -60,6 +69,17 @@ public class TtCodeController extends BaseController
|
|||||||
util.exportExcel(response, list, "源码管理数据");
|
util.exportExcel(response, list, "源码管理数据");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下载所选源码项目在文件管理中关联的全部截图。
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('office:code:export')")
|
||||||
|
@Log(title = "下载项目截图", businessType = BusinessType.EXPORT)
|
||||||
|
@GetMapping("/screenshots/{codeId}/download")
|
||||||
|
public void downloadScreenshots(@PathVariable Long codeId, HttpServletResponse response) throws IOException
|
||||||
|
{
|
||||||
|
screenshotArchiveService.download(codeId, response);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取源码管理详细信息
|
* 获取源码管理详细信息
|
||||||
*/
|
*/
|
||||||
@@ -113,4 +133,17 @@ public class TtCodeController extends BaseController
|
|||||||
String msg = ttCodeService.transToArticle1(codeId, templateId);
|
String msg = ttCodeService.transToArticle1(codeId, templateId);
|
||||||
return success(msg);
|
return success(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将“复制网站文案”同步为网站Markdown文章。
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('office:code:edit')")
|
||||||
|
@Log(title = "同步网站", businessType = BusinessType.UPDATE)
|
||||||
|
@PostMapping("/syncWebsite/{codeId}")
|
||||||
|
public AjaxResult syncWebsite(@PathVariable Long codeId) {
|
||||||
|
com.ruoyi.office.domain.WebsiteArticleSyncResult result =
|
||||||
|
websiteArticleSyncService.syncWebsite(codeId);
|
||||||
|
String message = result.isCreated() ? "同步网站成功,已创建文章" : "同步网站成功,已更新文章";
|
||||||
|
return AjaxResult.success(message, result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,6 +75,9 @@ public class TtCodeServiceImpl implements ITtCodeService {
|
|||||||
@Override
|
@Override
|
||||||
public TtCode selectTtCodeByCodeId(Long codeId) {
|
public TtCode selectTtCodeByCodeId(Long codeId) {
|
||||||
TtCode ttCode = ttCodeMapper.selectTtCodeByCodeId(codeId);
|
TtCode ttCode = ttCodeMapper.selectTtCodeByCodeId(codeId);
|
||||||
|
if (ttCode == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
TtFile file = new TtFile();
|
TtFile file = new TtFile();
|
||||||
file.setCodeName(ttCode.getCodeName());
|
file.setCodeName(ttCode.getCodeName());
|
||||||
ttCode.setFileList(fileMapper.selectTtFileList(file));
|
ttCode.setFileList(fileMapper.selectTtFileList(file));
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<select id="selectTtFileByCodeName" parameterType="String" resultMap="TtFileResult">
|
<select id="selectTtFileByCodeName" parameterType="String" resultMap="TtFileResult">
|
||||||
<include refid="selectTtFileVo"/>
|
<include refid="selectTtFileVo"/>
|
||||||
where code_name = #{codeName}
|
where code_name = #{codeName}
|
||||||
|
order by file_id asc
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<insert id="insertTtFile" parameterType="TtFile" useGeneratedKeys="true" keyProperty="fileId">
|
<insert id="insertTtFile" parameterType="TtFile" useGeneratedKeys="true" keyProperty="fileId">
|
||||||
|
|||||||
@@ -52,3 +52,21 @@ export function transToArticle1(codeId, templateId) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 将复制网站文案同步到博客网站
|
||||||
|
export function syncWebsite(codeId) {
|
||||||
|
return request({
|
||||||
|
url: '/office/code/syncWebsite/' + codeId,
|
||||||
|
method: 'post'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 下载项目在文件管理中关联的全部截图
|
||||||
|
export function downloadScreenshots(codeId) {
|
||||||
|
return request({
|
||||||
|
url: '/office/code/screenshots/' + codeId + '/download',
|
||||||
|
method: 'get',
|
||||||
|
responseType: 'blob',
|
||||||
|
timeout: 120000
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -96,6 +96,19 @@
|
|||||||
>导出
|
>导出
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
type="warning"
|
||||||
|
plain
|
||||||
|
icon="el-icon-download"
|
||||||
|
size="mini"
|
||||||
|
:disabled="single || downloadingScreenshots"
|
||||||
|
:loading="downloadingScreenshots"
|
||||||
|
@click="handleDownloadScreenshots"
|
||||||
|
v-hasPermi="['office:code:export']"
|
||||||
|
>下载截图
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
@@ -121,7 +134,17 @@
|
|||||||
icon="el-icon-document-copy"
|
icon="el-icon-document-copy"
|
||||||
@click="showCoverDialog(scope.row)"
|
@click="showCoverDialog(scope.row)"
|
||||||
v-hasPermi="['office:code:edit']"
|
v-hasPermi="['office:code:edit']"
|
||||||
>转文章(南音)
|
>同步小程序
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-upload2"
|
||||||
|
:loading="syncingCodeId === scope.row.codeId"
|
||||||
|
:disabled="syncingCodeId !== null"
|
||||||
|
@click="handleSyncWebsite(scope.row)"
|
||||||
|
v-hasPermi="['office:code:edit']"
|
||||||
|
>同步网站
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
size="mini"
|
size="mini"
|
||||||
@@ -284,10 +307,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {listCode, getCode, delCode, addCode, updateCode, transToArticle1} from "@/api/office/code";
|
import {listCode, getCode, delCode, addCode, updateCode, transToArticle1, syncWebsite, downloadScreenshots} from "@/api/office/code";
|
||||||
import {listEnabledTemplates} from "@/api/office/copyTemplate";
|
import {listEnabledTemplates} from "@/api/office/copyTemplate";
|
||||||
import {html2Text} from "../../../utils";
|
import {html2Text} from "../../../utils";
|
||||||
import {getToken} from "@/utils/auth";
|
import {getToken} from "@/utils/auth";
|
||||||
|
import {blobValidate} from "@/utils/ruoyi";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Code",
|
name: "Code",
|
||||||
@@ -299,6 +323,8 @@
|
|||||||
loading: true,
|
loading: true,
|
||||||
// 选中数组
|
// 选中数组
|
||||||
ids: [],
|
ids: [],
|
||||||
|
// 当前选中的源码项目
|
||||||
|
selectedCode: null,
|
||||||
// 非单个禁用
|
// 非单个禁用
|
||||||
single: true,
|
single: true,
|
||||||
// 非多个禁用
|
// 非多个禁用
|
||||||
@@ -346,7 +372,11 @@
|
|||||||
// 文案模板列表(动态按钮)
|
// 文案模板列表(动态按钮)
|
||||||
copyTemplates: [],
|
copyTemplates: [],
|
||||||
// 转文章时使用的文案模板
|
// 转文章时使用的文案模板
|
||||||
articleTemplateId: null
|
articleTemplateId: null,
|
||||||
|
// 正在同步网站的源码ID,防止重复点击
|
||||||
|
syncingCodeId: null,
|
||||||
|
// 是否正在打包下载项目截图
|
||||||
|
downloadingScreenshots: false
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
@@ -489,9 +519,34 @@
|
|||||||
// 多选框选中数据
|
// 多选框选中数据
|
||||||
handleSelectionChange(selection) {
|
handleSelectionChange(selection) {
|
||||||
this.ids = selection.map(item => item.codeId)
|
this.ids = selection.map(item => item.codeId)
|
||||||
|
this.selectedCode = selection.length === 1 ? selection[0] : null
|
||||||
this.single = selection.length !== 1
|
this.single = selection.length !== 1
|
||||||
this.multiple = !selection.length
|
this.multiple = !selection.length
|
||||||
},
|
},
|
||||||
|
/** 下载所选项目在文件管理中的全部截图 */
|
||||||
|
handleDownloadScreenshots() {
|
||||||
|
if (!this.selectedCode || this.downloadingScreenshots) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const selectedCode = this.selectedCode
|
||||||
|
this.downloadingScreenshots = true
|
||||||
|
downloadScreenshots(selectedCode.codeId).then(async data => {
|
||||||
|
if (!blobValidate(data)) {
|
||||||
|
await this.$download.printErrMsg(data)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const safeProjectName = (selectedCode.codeName || '项目')
|
||||||
|
.replace(/[\\/:*?"<>|\x00-\x1F]/g, '_')
|
||||||
|
.replace(/[. ]+$/g, '') || '项目'
|
||||||
|
const archive = new Blob([data], {type: 'application/zip'})
|
||||||
|
this.$download.saveAs(archive, safeProjectName + '截图.zip')
|
||||||
|
this.$modal.msgSuccess('项目截图已开始下载')
|
||||||
|
}).catch(error => {
|
||||||
|
console.error('下载项目截图失败:', error)
|
||||||
|
}).finally(() => {
|
||||||
|
this.downloadingScreenshots = false
|
||||||
|
})
|
||||||
|
},
|
||||||
/** 新增按钮操作 */
|
/** 新增按钮操作 */
|
||||||
handleAdd() {
|
handleAdd() {
|
||||||
this.reset();
|
this.reset();
|
||||||
@@ -594,6 +649,19 @@
|
|||||||
});
|
});
|
||||||
this.coverDialogVisible = false;
|
this.coverDialogVisible = false;
|
||||||
},
|
},
|
||||||
|
/** 同步网站 */
|
||||||
|
handleSyncWebsite(row) {
|
||||||
|
const codeId = row.codeId;
|
||||||
|
this.$modal.confirm('确认将“' + row.codeName + '”同步并发布到网站?').then(() => {
|
||||||
|
this.syncingCodeId = codeId;
|
||||||
|
return syncWebsite(codeId);
|
||||||
|
}).then(response => {
|
||||||
|
this.$modal.msgSuccess(response.msg);
|
||||||
|
}).catch(() => {
|
||||||
|
}).finally(() => {
|
||||||
|
this.syncingCodeId = null;
|
||||||
|
});
|
||||||
|
},
|
||||||
/** 提交按钮 */
|
/** 提交按钮 */
|
||||||
submitForm() {
|
submitForm() {
|
||||||
this.$refs["form"].validate(valid => {
|
this.$refs["form"].validate(valid => {
|
||||||
|
|||||||
Reference in New Issue
Block a user