youzanyun-devtool-worker
Version:
- web - ws - proxy
232 lines (231 loc) • 11.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
const uniq_1 = tslib_1.__importDefault(require("lodash/uniq"));
const path_1 = tslib_1.__importDefault(require("path"));
const spring4js_nodejs_1 = require("spring4js-nodejs");
const BaseController_1 = tslib_1.__importDefault(require("../BaseController"));
let TemplateManageController = class TemplateManageController extends BaseController_1.default {
async getTemplates(ctx) {
const params = ctx.query;
const result = await this.templateManageService.getTemplates(params);
return result;
}
async saveTemplate(ctx) {
const params = ctx.request.body;
const result = await this.templateManageService.saveTemplate(params);
return result;
}
async deleteTemplate(ctx) {
const params = ctx.query;
const result = await this.templateManageService.deleteTemplate(params);
return result;
}
async getLocalTemplate(ctx) {
const params = ctx.query;
const templateDetail = await this.templateManageService.getTemplateDetail({
appId: params.templateId,
appName: params.appName,
});
const appList = await this.projectService.getProjectsByProName({
proName: params.appName
});
const projectRoot = appList[0].proPath;
const result = await this.customCompsService.getCompsByAppName({
appName: params.appName,
pageNo: 1,
pageSize: 1000,
}, true);
const localTemplate = {
appId: params.templateId,
};
if (templateDetail.appItemExtension && templateDetail.appItemExtension.componentData) {
localTemplate.components = JSON.parse(templateDetail.appItemExtension.componentData);
}
if (!localTemplate.components) {
localTemplate.components = [
{ type: "config", title: "微页面标题" },
];
}
if (!localTemplate.jsUrl) {
localTemplate.jsUrl = {
compUrl: "",
editor: {
jsList: [],
cssList: []
}
};
}
const correctCompList = result.compList ? result.compList.filter((item) => item.visible) : null;
if (correctCompList && correctCompList.length > 0) {
const components = correctCompList.map((item) => item.code);
const compJsFile = this.configService.getDpCompJsFile();
await fs_extra_1.default.ensureFile(compJsFile);
const compsJsContent = [];
for (let i = 0; i < components.length; i++) {
const jsContentBuffer = await fs_extra_1.default.readFile(path_1.default.resolve(projectRoot, `showcase-components/dist/${components[i]}.js`));
const jsContent = jsContentBuffer.toString('utf8');
compsJsContent.push(jsContent);
}
const vendorsDllJs = path_1.default.resolve(projectRoot, `showcase-components/dist/vendors.dll.js`);
const isDllExist = await fs_extra_1.default.pathExists(vendorsDllJs);
if (isDllExist) {
const jsContentBuffer = await fs_extra_1.default.readFile(vendorsDllJs);
const jsContent = jsContentBuffer.toString('utf8');
compsJsContent.unshift(jsContent);
}
await fs_extra_1.default.writeFile(compJsFile, compsJsContent.join('\n'));
localTemplate.jsUrl.compUrl = `/_yzydev_/local/file?filePath=${compJsFile}`;
const jsList = correctCompList.map((item) => {
const filePath = path_1.default.resolve(projectRoot, `showcase-editor/dist/${item.code}.js`);
return `/_yzydev_/local/file?filePath=${filePath}`;
});
localTemplate.jsUrl.editor.jsList = localTemplate.jsUrl.editor.jsList.concat(jsList);
}
const groupInfo = await this.dpRequestService.getAllGroupComponent({ appName: params.appName });
let groupFilter = [];
if (Array.isArray(groupInfo) && groupInfo.length) {
groupFilter = groupInfo.filter(item => item.visible);
groupFilter.forEach(item => {
if (Array.isArray(item.children)) {
item.children = item.children.filter((v) => v.visible);
item.children.forEach((v) => v.type = v.code);
}
});
}
localTemplate.extensionGroupInfo = groupFilter;
return localTemplate;
}
async updateTemplate(ctx) {
const { templateId, templateInfo, appName } = ctx.request.body;
const extensionKdtId = ctx.cookies.get('kdt_id');
const appList = await this.projectService.getProjectsByProName({
proName: appName
});
const projectRoot = appList[0].proPath;
const templateDetail = await this.templateManageService.getTemplateDetail({
appId: templateId,
appName,
});
templateDetail.appName = appName;
const templateScript = {
compUrl: '',
editor: {
jsList: [],
cssList: []
}
};
const templateCompTypes = templateInfo.map((item) => item.type).filter((item) => item.startsWith(`extension-${appName}`)) || [];
if (templateCompTypes.length > 0) {
const compTypes = uniq_1.default(templateCompTypes);
const compJsFile = this.configService.getDpCompJsFile();
await fs_extra_1.default.ensureFile(compJsFile);
const compsJsContent = [];
for (let i = 0; i < compTypes.length; i++) {
const jsContentBuffer = await fs_extra_1.default.readFile(path_1.default.resolve(projectRoot, `showcase-components/dist/${compTypes[i]}.js`));
const jsContent = jsContentBuffer.toString('utf8');
compsJsContent.push(jsContent);
}
const vendorsDllJs = path_1.default.resolve(projectRoot, `showcase-components/dist/vendors.dll.js`);
const isDllExist = await fs_extra_1.default.pathExists(vendorsDllJs);
if (isDllExist) {
const jsContentBuffer = await fs_extra_1.default.readFile(vendorsDllJs);
const jsContent = jsContentBuffer.toString('utf8');
compsJsContent.unshift(jsContent);
}
await fs_extra_1.default.writeFile(compJsFile, compsJsContent.join('\n'));
const localJsList = compTypes.map(item => {
return path_1.default.resolve(projectRoot, `showcase-editor/dist/${item}.js`);
});
let compUploadRes = [];
let editorUploadRes = [];
try {
compUploadRes = await this.cdnService.uploadFileToCdn({
projectName: appName,
pageName: 'template-component',
fileList: [compJsFile],
addHash: true,
});
editorUploadRes = await this.cdnService.uploadFileToCdn({
projectName: appName,
pageName: 'template-editor',
fileList: [...localJsList],
addHash: true,
});
}
catch (err) {
ctx.body = {
code: -1,
message: '保存上传失败'
};
return;
}
templateScript.compUrl = compUploadRes[0].url;
const jsList = editorUploadRes.map(item => item.url);
templateScript.editor.jsList = jsList;
}
if (!templateDetail.appItemExtension) {
templateDetail.appItemExtension = {};
}
templateDetail.appItemExtension.componentData = templateInfo;
templateDetail.appItemExtension.templateScript = JSON.stringify(templateScript);
templateDetail.appItemExtension.bAuditViewUrl = `https://www.youzan.com/v4/shop/developer-decorate#/create/${templateId}?status=testing&extensionKdtId=${extensionKdtId}`;
templateDetail.appItemExtension.cAuditViewUrl = `https://h5.youzan.com/wscshop/decorate/extension-preview?templateId=${templateId}&status=testing&cloudType=1&extensionKdtId=${extensionKdtId}`;
templateDetail.appItemExtension.bPreviewUrl = `https://www.youzan.com/v4/shop/developer-decorate#/create/${templateId}?status=official&extensionKdtId=${extensionKdtId}`;
templateDetail.appItemExtension.cPreviewUrl = `https://h5.youzan.com/wscshop/decorate/extension-preview?templateId=${templateId}&status=official&cloudType=1&extensionKdtId=${extensionKdtId}`;
const result = await this.templateManageService.updateTemplate(templateDetail);
return result;
}
async getTestShopList(ctx) {
const { appId } = ctx.query;
const data = await this.shopService.getTestShopList({ appId, env: 0 });
return data;
}
};
tslib_1.__decorate([
spring4js_nodejs_1.Resource()
], TemplateManageController.prototype, "configService", void 0);
tslib_1.__decorate([
spring4js_nodejs_1.Resource()
], TemplateManageController.prototype, "userService", void 0);
tslib_1.__decorate([
spring4js_nodejs_1.Resource()
], TemplateManageController.prototype, "projectService", void 0);
tslib_1.__decorate([
spring4js_nodejs_1.Resource()
], TemplateManageController.prototype, "cdnService", void 0);
tslib_1.__decorate([
spring4js_nodejs_1.Resource()
], TemplateManageController.prototype, "customCompsService", void 0);
tslib_1.__decorate([
spring4js_nodejs_1.Resource()
], TemplateManageController.prototype, "templateManageService", void 0);
tslib_1.__decorate([
spring4js_nodejs_1.Resource()
], TemplateManageController.prototype, "shopService", void 0);
tslib_1.__decorate([
spring4js_nodejs_1.Resource()
], TemplateManageController.prototype, "dpRequestService", void 0);
tslib_1.__decorate([
spring4js_nodejs_1.Path("template/list", spring4js_nodejs_1.HttpMethod.GET)
], TemplateManageController.prototype, "getTemplates", null);
tslib_1.__decorate([
spring4js_nodejs_1.Path("template/save", spring4js_nodejs_1.HttpMethod.POST)
], TemplateManageController.prototype, "saveTemplate", null);
tslib_1.__decorate([
spring4js_nodejs_1.Path("template/delete", spring4js_nodejs_1.HttpMethod.DELETE)
], TemplateManageController.prototype, "deleteTemplate", null);
tslib_1.__decorate([
spring4js_nodejs_1.Path("local/template/detail", spring4js_nodejs_1.HttpMethod.GET)
], TemplateManageController.prototype, "getLocalTemplate", null);
tslib_1.__decorate([
spring4js_nodejs_1.Path("template/update", spring4js_nodejs_1.HttpMethod.POST)
], TemplateManageController.prototype, "updateTemplate", null);
tslib_1.__decorate([
spring4js_nodejs_1.Path("template/test-shop", spring4js_nodejs_1.HttpMethod.GET)
], TemplateManageController.prototype, "getTestShopList", null);
TemplateManageController = tslib_1.__decorate([
spring4js_nodejs_1.Controller("/api/design-platform")
], TemplateManageController);
exports.default = TemplateManageController;