@@ -27,7 +27,8 @@ | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/issues">{{.i18n.Tr "issues"}}</a> | |||
<a style="border: none;color: #000; white-space: nowrap;" class=" item" href="{{AppSubUrl}}/pulls">{{.i18n.Tr "pull_requests"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/milestones">{{.i18n.Tr "milestones"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/cloudbrains">{{.i18n.Tr "repo.cloudbrain.task"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/cloudbrains">{{.i18n.Tr "repo.cloudbrain.task"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/reward/point">算力积分</a> | |||
</div> | |||
</div> | |||
</div> | |||
@@ -58,7 +59,8 @@ | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/user/login">{{.i18n.Tr "issues"}}</a> | |||
<a style="border: none;color: #000; white-space: nowrap;" class=" item" href="{{AppSubUrl}}/user/login">{{.i18n.Tr "pull_requests"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/user/login">{{.i18n.Tr "milestones"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/cloudbrains">{{.i18n.Tr "repo.cloudbrain.task"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/cloudbrains">{{.i18n.Tr "repo.cloudbrain.task"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/reward/point">算力积分</a> | |||
</div> | |||
</div> | |||
</div> | |||
@@ -28,6 +28,7 @@ | |||
<a style="border: none;color: #000; white-space: nowrap;" class=" item" href="{{AppSubUrl}}/pulls">{{.i18n.Tr "pull_requests"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/milestones">{{.i18n.Tr "milestones"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/cloudbrains">{{.i18n.Tr "repo.cloudbrain.task"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/reward/point">算力积分</a> | |||
</div> | |||
</div> | |||
</div> | |||
@@ -58,6 +59,7 @@ | |||
<a style="border: none;color: #000; white-space: nowrap;" class=" item" href="{{AppSubUrl}}/user/login">{{.i18n.Tr "pull_requests"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/user/login">{{.i18n.Tr "milestones"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/cloudbrains">{{.i18n.Tr "repo.cloudbrain.task"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/reward/point">算力积分</a> | |||
</div> | |||
</div> | |||
</div> | |||
@@ -19,7 +19,8 @@ | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/issues">{{.i18n.Tr "issues"}}</a> | |||
<a style="border: none;color: #000; white-space: nowrap;" class=" item" href="{{AppSubUrl}}/pulls">{{.i18n.Tr "pull_requests"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/milestones">{{.i18n.Tr "milestones"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/cloudbrains">{{.i18n.Tr "repo.cloudbrain.task"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/cloudbrains">{{.i18n.Tr "repo.cloudbrain.task"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/reward/point">算力积分</a> | |||
</div> | |||
</div> | |||
</div> | |||
@@ -49,7 +50,8 @@ | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/user/login">{{.i18n.Tr "issues"}}</a> | |||
<a style="border: none;color: #000; white-space: nowrap;" class=" item" href="{{AppSubUrl}}/user/login">{{.i18n.Tr "pull_requests"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/user/login">{{.i18n.Tr "milestones"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/cloudbrains">{{.i18n.Tr "repo.cloudbrain.task"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/cloudbrains">{{.i18n.Tr "repo.cloudbrain.task"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/reward/point">算力积分</a> | |||
</div> | |||
</div> | |||
</div> | |||
@@ -28,7 +28,8 @@ | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/issues">{{.i18n.Tr "issues"}}</a> | |||
<a style="border: none;color: #000;white-space: nowrap;" class=" item" href="{{AppSubUrl}}/pulls">{{.i18n.Tr "pull_requests"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/milestones">{{.i18n.Tr "milestones"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/cloudbrains">{{.i18n.Tr "repo.cloudbrain.task"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/cloudbrains">{{.i18n.Tr "repo.cloudbrain.task"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/reward/point">算力积分</a> | |||
</div> | |||
</div> | |||
</div> | |||
@@ -59,7 +60,8 @@ | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/user/login">{{.i18n.Tr "issues"}}</a> | |||
<a style="border: none;color: #000;white-space: nowrap;" class=" item" href="{{AppSubUrl}}/user/login">{{.i18n.Tr "pull_requests"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/user/login">{{.i18n.Tr "milestones"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/cloudbrains">{{.i18n.Tr "repo.cloudbrain.task"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/cloudbrains">{{.i18n.Tr "repo.cloudbrain.task"}}</a> | |||
<a style="border: none;color: #000;" class=" item" href="{{AppSubUrl}}/reward/point">算力积分</a> | |||
</div> | |||
</div> | |||
</div> | |||
@@ -0,0 +1,6 @@ | |||
{{template "base/head" .}} | |||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/css/vp-point.css?v={{MD5 AppVer}}" /> | |||
<div id="__vue-root"> | |||
</div> | |||
<script src="{{StaticUrlPrefix}}/js/vp-point.js?v={{MD5 AppVer}}"></script> | |||
{{template "base/footer" .}} |
@@ -47,7 +47,66 @@ export function initNotificationCount() { | |||
}); | |||
source.addEventListener('reward-operation', async (e) => { | |||
try { | |||
console.log(e.data); | |||
const data = JSON.parse(e.data); | |||
const notice = $(` | |||
<div class="__notice-wrap" style="display:none;"> | |||
<style> | |||
.__notice-container { | |||
position: fixed; | |||
width:400px; | |||
height:36px; | |||
right: 20px; | |||
top: 70px; | |||
animation:__notice 2s; | |||
-webkit-animation:__notice 2s; | |||
text-align:right; | |||
display: flex; | |||
justify-content: flex-end; | |||
} | |||
.__notice-content { | |||
background: rgb(252, 202, 0); | |||
padding: 4px 16px; | |||
box-shadow: rgb(135 56 0 / 20%) 0px 2px 6px 0px; | |||
border-radius: 4px; | |||
font-size: 14px; | |||
display: flex; | |||
color: #101010; | |||
align-items: center; | |||
} | |||
@keyframes __notice { | |||
0%, 20%, 53%, 80%, 100% { | |||
animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); | |||
transform: translate3d(0px, 0px, 0px); | |||
} | |||
40%, 43% { | |||
animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); | |||
transform: translate3d(0px, -30px, 0px); | |||
} | |||
70% { | |||
animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); | |||
transform: translate3d(0px, -15px, 0px); | |||
} | |||
90% { | |||
transform: translate3d(0px, -4px, 0px); | |||
} | |||
} | |||
</style> | |||
<div class="__notice-container"> | |||
<div class="__notice-content"> | |||
<i class="ri-copper-diamond-line" style="padding-right:8px;color:white;font-size:18px;"></i> | |||
<span class="__notice-text">${data.OperateType === 'INCREASE' ? ('奖励积分 + ' + data.Amount) : ('扣减积分 - ' + data.Amount) }</span> | |||
</div> | |||
</div> | |||
</div> | |||
`); | |||
$('body').append(notice); | |||
notice.fadeIn(); | |||
setTimeout(() => { | |||
notice.fadeOut(); | |||
}, 3000); | |||
setTimeout(() => { | |||
notice.remove(); | |||
}, 5000); | |||
} catch (error) { | |||
console.error(error); | |||
} | |||
@@ -0,0 +1,41 @@ | |||
import service from '../service'; | |||
// 算力积分概要 | |||
export const getPointAccount = () => { | |||
return service({ | |||
url: '/reward/point/account', | |||
method: 'get', | |||
params: {}, | |||
}); | |||
} | |||
// 算力积分获取、消耗明细 | |||
// operate-INCREASE 表示获取明细 DECREASE表示消耗明细, page-当前页, pageSize-每页条数 | |||
export const getPointList = (params) => { | |||
return service({ | |||
url: '/reward/point/record/list', | |||
method: 'get', | |||
params, | |||
}); | |||
} | |||
// 管理员充值、扣减用户积分 | |||
// TargetUserId, OperateType-INCREASE,DECREASE, Amount, Remark, RewardType-POINT | |||
export const setPointOperate = (data) => { | |||
return service({ | |||
url: '/operation/reward/point/operate', | |||
method: 'post', | |||
data, | |||
params: {} | |||
}); | |||
} | |||
// 算力积分页面 | |||
export const getPoint = () => { | |||
return service({ | |||
url: '/reward/point', | |||
method: 'get', | |||
params: {}, | |||
data: {}, | |||
}); | |||
} |
@@ -0,0 +1,26 @@ | |||
import axios from 'axios'; | |||
const service = axios.create({ | |||
baseURL: '/', | |||
timeout: 20000, | |||
}); | |||
service.interceptors.request.use((config) => { | |||
config.data && Object.assign(config.data, { | |||
_csrf: window.config ? window.config.csrf : '', | |||
}); | |||
config.params && Object.assign(config.params, { | |||
_csrf: window.config ? window.config.csrf : '', | |||
}); | |||
return config; | |||
}, (error) => { | |||
return Promise.reject(error); | |||
}); | |||
service.interceptors.response.use((response) => { | |||
return response; | |||
}, (error) => { | |||
return Promise.reject(error); | |||
}); | |||
export default service; |
@@ -0,0 +1,6 @@ | |||
export const SOURCE_TYPE = [{ k: 'ACCOMPLISH_TASK', v: '积分任务' }, { k: 'ADMIN_OPERATE', v: '管理员操作' }, { k: 'RUN_CLOUDBRAIN_TASK', v: '运行云脑任务' }]; | |||
export const CONSUME_STATUS = [{ k: 'OPERATING', v: '进行中' }, { k: 'SUCCEEDED', v: '已完成' }]; | |||
export const POINT_ACTIONS = [ | |||
{ k: 1, v: '创建公开项目' }, { k: 6, v: '每日提出任务' }, { k: 7, v: '每日提出PR' }, { k: 10, v: '发表评论' }, { k: 24, v: '上传数据集文件' }, { k: 30, v: '导入新模型' }, { k: 32, v: '完成微信扫码验证' }, | |||
{ k: 33, v: '每日运行云脑任务' }, { k: 34, v: '数据集被平台推荐' }, { k: 35, v: '提交新公开镜像' }, { k: 36, v: '镜像被平台推荐' }, { k: 37, v: '首次更换头像' }, { k: 38, v: '每日commit' }, { k: 39, v: '每日首次Fork项目' }, | |||
]; |
@@ -0,0 +1,12 @@ | |||
import Vue from 'vue'; | |||
import ElementUI from 'element-ui'; | |||
import 'element-ui/lib/theme-chalk/index.css'; | |||
Vue.use(ElementUI); | |||
import App from './vp-point.vue'; | |||
// import App from '../manage/vp-point-manage.vue'; | |||
new Vue({ | |||
el: '#__vue-root', | |||
render: (h) => h(App), | |||
}); |
@@ -0,0 +1,293 @@ | |||
<template> | |||
<div class="__reward-pointer-c"> | |||
<div class="ui container" style="width:80%"> | |||
<div class="__r_p_header"> | |||
<div> | |||
<p class="__title">算力积分明细</p> | |||
</div> | |||
<div style="padding: 0 5px; font-size: 14px"> | |||
<el-button @click="operatePoint(1)">+</el-button> | |||
<el-button @click="operatePoint(0)">-</el-button> | |||
<span> | |||
<i class="question circle icon link" style="color: rgba(3, 102, 214, 1)" data-position="right center" | |||
data-variation="mini"></i> | |||
<a href="" target="_blank" style="color: rgba(3, 102, 214, 1)">积分获取说明</a> | |||
</span> | |||
</div> | |||
</div> | |||
<div class="__r_p_summary"> | |||
<div class="__r_p_summary_item-c __flex-1"> | |||
<div class="__val">{{ summaryInfo.available }}</div> | |||
<div class="__exp">当前可用算力积分(分)</div> | |||
</div> | |||
<div class="__r_p_summary_line"></div> | |||
<div class="__r_p_summary_item-c __flex-1"> | |||
<div class="__val">{{ summaryInfo.gain }}</div> | |||
<div class="__exp">总获取算力积分(分)</div> | |||
</div> | |||
<div class="__r_p_summary_item-c __flex-1"> | |||
<div class="__val">{{ summaryInfo.used }}</div> | |||
<div class="__exp">总消耗算力积分(分)</div> | |||
</div> | |||
</div> | |||
<div class="__r_p_tab"> | |||
<div class="__r_p_tab-item" :class="tabIndex === 0 ? '__focus' : ''" style="border-radius: 5px 0px 0px 5px" | |||
@click="tabChange(0)"> | |||
总获取明细 | |||
</div> | |||
<div class="__r_p_tab-item" :class="tabIndex === 1 ? '__focus' : ''" style="border-radius: 0px 5px 5px 0px" | |||
@click="tabChange(1)"> | |||
总消耗明细 | |||
</div> | |||
</div> | |||
<div class="__r_p_table"> | |||
<div> | |||
<el-table :data="tableData" style="width: 100%" v-loading="loading" stripe> | |||
<el-table-column prop="sn" label="流水号" align="center" header-align="center" width="180"></el-table-column> | |||
<el-table-column prop="date" label="时间" align="center" header-align="center" width="180"></el-table-column> | |||
<el-table-column v-if="tabIndex === 1" prop="status" label="状态" align="center" header-align="center" | |||
width="120"> | |||
<template slot-scope="scope"> | |||
<span :style="{ color: scope.row.statusColor }">{{ scope.row.status }}</span> | |||
</template> | |||
</el-table-column> | |||
<el-table-column prop="sourceType" label="场景" align="center" header-align="center" width="180"> | |||
</el-table-column> | |||
<el-table-column v-if="tabIndex === 1" prop="duration" label="运行时长" align="center" header-align="center" | |||
width="150"> | |||
</el-table-column> | |||
<el-table-column v-if="tabIndex === 0" prop="action" label="积分行为" align="center" header-align="center" | |||
width="200"> | |||
</el-table-column> | |||
<el-table-column prop="remark" label="说明" align="left" header-align="center"> | |||
</el-table-column> | |||
<el-table-column v-if="tabIndex === 1" prop="taskName" label="任务名称" align="center" header-align="center"> | |||
</el-table-column> | |||
<el-table-column prop="amount" label="积分" align="center" header-align="center" width="120"> | |||
</el-table-column> | |||
<template slot="empty"> | |||
<span>{{ loading ? "加载加..." : "暂无数据" }}</span> | |||
</template> | |||
</el-table> | |||
</div> | |||
<div class="__r_p_pagination"> | |||
<div style="margin-top: 2rem"> | |||
<div class="center"> | |||
<el-pagination background @current-change="currentChange" :current-page="pageInfo.curpage" | |||
:page-sizes="pageInfo.pageSizes" :page-size="pageInfo.pageSize" | |||
layout="total, sizes, prev, pager, next, jumper" :total="pageInfo.total"> | |||
</el-pagination> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</template> | |||
<script> | |||
import { formatDate } from 'element-ui/lib/utils/date-util'; | |||
import { getPoint, getPointAccount, getPointList, setPointOperate } from "../../../apis/modules/point"; | |||
import { SOURCE_TYPE, CONSUME_STATUS, POINT_ACTIONS } from './const'; | |||
export default { | |||
data() { | |||
return { | |||
loading: false, | |||
summaryInfo: { | |||
available: 0, | |||
gain: 0, | |||
used: 0, | |||
}, | |||
tabIndex: 0, | |||
tableData: [], | |||
pageInfo: { | |||
curpage: 1, | |||
pageSize: 10, | |||
pageSizes: [10], | |||
total: 100, | |||
}, | |||
}; | |||
}, | |||
components: {}, | |||
methods: { | |||
getSourceType: function (key) { | |||
const find = SOURCE_TYPE.filter(item => item.k === key); | |||
return find.length ? find[0].v : key; | |||
}, | |||
getConsumeStatus: function (key) { | |||
const find = CONSUME_STATUS.filter(item => item.k === key); | |||
return find.length ? find[0].v : key; | |||
}, | |||
getPointAction: function (key) { | |||
const find = POINT_ACTIONS.filter(item => item.k === key); | |||
return find.length ? find[0].v : key; | |||
}, | |||
currentChange: function (val) { | |||
this.pageInfo.curpage = val; | |||
this.getTableData(); | |||
}, | |||
tabChange: function (index) { | |||
if (this.tabIndex === index) return; | |||
this.tabIndex = index; | |||
this.pageInfo.curpage = 1; | |||
this.pageInfo.total = 0; | |||
this.getTableData(); | |||
}, | |||
getTableData: function () { | |||
this.loading = true; | |||
getPointList({ | |||
operate: this.tabIndex === 0 ? 'INCREASE' : 'DECREASE', | |||
pageSize: this.pageInfo.pageSize, | |||
page: this.pageInfo.curpage, | |||
}) | |||
.then((res) => { | |||
this.loading = false; | |||
const tableData = []; | |||
if (res.data && res.data.Code === 0) { | |||
const data = res.data.Data; | |||
const records = data.Records; | |||
for (let i = 0, iLen = records.length; i < iLen; i++) { | |||
const record = records[i]; | |||
tableData.push({ | |||
sn: record.SerialNo, | |||
date: formatDate(new Date(record.LastOperateDate * 1000), 'yyyy-MM-DD HH:mm:ss'), | |||
_status: record.Status, | |||
status: this.getConsumeStatus(record.Status) || '--', | |||
statusColor: record.Status === 'OPERATING' ? 'rgb(33, 186, 69)' : '', | |||
_sourceType: record.SourceType, | |||
sourceType: this.getSourceType(record.SourceType), | |||
duration: record?.Cloudbrain?.Duration || '--', | |||
taskName: record?.Cloudbrain?.DisplayJobName || '--', | |||
taskId: record?.Cloudbrain?.ID, | |||
action: record?.Action?.OpType ? this.getPointAction(record.Action.OpType) : '--', | |||
remark: record.Remark, | |||
amount: record.Amount, | |||
}); | |||
} | |||
this.tableData.splice(0, Infinity, ...tableData); | |||
this.pageInfo.total = data.Total; | |||
} | |||
}) | |||
.catch((err) => { | |||
console.log(err); | |||
this.loading = false; | |||
this.tableData.splice(0, Infinity); | |||
}); | |||
}, | |||
operatePoint: function (type) { | |||
setPointOperate({ | |||
TargetUserId: 369, | |||
OperateType: type === 1 ? 'INCREASE' : 'DECREASE', | |||
Amount: 1, | |||
Remark: 'Remark: ' + (type === 1 ? 'INCREASE' : 'DECREASE') + ' 1.', | |||
RewardType: 'POINT', | |||
}).then(res => { | |||
console.log(res); | |||
}).catch(err => { | |||
console.log(err); | |||
}) | |||
} | |||
}, | |||
mounted: function () { | |||
getPointAccount().then(res => { | |||
if (res.data && res.data.Code === 0) { | |||
const data = res.data.Data; | |||
this.summaryInfo.available = data.Balance; | |||
this.summaryInfo.gain = data.TotalEarned; | |||
this.summaryInfo.used = data.TotalConsumed; | |||
} | |||
}).catch(err => { | |||
console.log(err); | |||
}) | |||
this.getTableData(); | |||
}, | |||
computed: {}, | |||
}; | |||
</script> | |||
<style scoped lang="less"> | |||
.__flex-1 { | |||
flex: 1; | |||
} | |||
.__reward-pointer-c { | |||
.__r_p_header { | |||
height: 30px; | |||
margin: 10px 0; | |||
display: flex; | |||
align-items: center; | |||
justify-content: space-between; | |||
.__title { | |||
font-weight: 400; | |||
font-size: 18px; | |||
color: rgb(16, 16, 16); | |||
line-height: 26px; | |||
} | |||
} | |||
.__r_p_summary { | |||
display: flex; | |||
align-items: center; | |||
height: 100px; | |||
background-color: rgb(245, 245, 246); | |||
.__r_p_summary_item-c { | |||
.__val { | |||
text-align: center; | |||
margin: 12px 0; | |||
font-weight: 400; | |||
font-size: 28px; | |||
color: rgb(16, 16, 16); | |||
} | |||
.__exp { | |||
text-align: center; | |||
font-weight: 400; | |||
font-size: 14px; | |||
color: rgba(54, 56, 64, 1); | |||
} | |||
} | |||
} | |||
} | |||
.__r_p_summary_line { | |||
width: 1px; | |||
height: 80%; | |||
background-color: rgb(212, 212, 213); | |||
} | |||
.__r_p_tab { | |||
display: flex; | |||
margin: 18px 0; | |||
.__r_p_tab-item { | |||
width: 115px; | |||
height: 38px; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
border: 1px solid rgb(225, 227, 230); | |||
color: #101010; | |||
box-sizing: border-box; | |||
cursor: pointer; | |||
&.__focus { | |||
border-color: rgb(50, 145, 248); | |||
color: rgb(50, 145, 248); | |||
cursor: default; | |||
} | |||
} | |||
} | |||
.__r_p_table { | |||
/deep/ .el-table__header { | |||
th { | |||
background: rgb(245, 245, 246); | |||
color: rgb(96, 98, 102); | |||
font-weight: 400; | |||
font-size: 14px; | |||
} | |||
} | |||
} | |||
</style> |
@@ -20,6 +20,11 @@ for (const path of glob('web_src/less/themes/*.less')) { | |||
themes[parse(path).name] = [path]; | |||
} | |||
const vuePages = {}; | |||
for (const path of glob('web_src/vuepages/**/vp-*.js')) { | |||
vuePages[parse(path).name] = [path]; | |||
} | |||
const isProduction = process.env.NODE_ENV !== 'development'; | |||
module.exports = { | |||
@@ -37,6 +42,7 @@ module.exports = { | |||
], | |||
icons: glob('node_modules/@primer/octicons/build/svg/**/*.svg'), | |||
...themes, | |||
...vuePages, | |||
}, | |||
devtool: false, | |||
output: { | |||