提交 eb980288 authored 作者: lidongxu's avatar lidongxu

feat(all): 版本自动发布测试成功

上级 f328809d
......@@ -7,8 +7,8 @@ VITE_APP_PUBLIC_PATH = '/'
# 基地址
VITE_APP_BASE_API = '/dev-api' # 小卤
# VITE_APP_BASE_API = '/ql_local' # 小卤
# VITE_APP_BASE_API = '/bc_local' # 小卤
# VITE_APP_BASE_API = '/ql_local' # 秋林本地
# VITE_APP_BASE_API = '/bc_local' # 本才本地
VITE_APP_PROMOTION = '/dev-promotion-api' # 促销
# 飞书服务回调地址(本地测试已经通过并上线,后台飞书登录接口重定向地址已经不是 localhost 了所以本地开发无需使用飞书登录,线上已经可用)
......
{
"types": [
{"type": "chore", "section":"'🎫 Chores | 其他更新", "hidden": false},
{"type": "revert", "section":"⏪ Reverts | 回退", "hidden": false},
{"type": "feat", "section": "✨ Features | 新功能", "hidden": false},
{"type": "fix", "section": "🐛 Bug Fixes | Bug 修复", "hidden": false},
{"type": "improvement", "section": "Feature Improvements", "hidden": false},
{"type": "docs", "section":"📝 Documentation | 文档", "hidden": false},
{"type": "style", "section":"💄 Styles | 风格", "hidden": false},
{"type": "refactor", "section":"💄 Styles | 重构", "hidden": false},
{"type": "perf", "section":"⚡ Performance Improvements | 性能优化", "hidden": false},
{"type": "test", "section":"✅ Tests | 测试", "hidden": false},
{"type": "build", "section":"👷‍ Build System | 构建", "hidden": false},
{"type": "ci", "section":"🔧 Continuous Integration | CI 配置", "hidden":false}
{"type": "revert", "section":"⏪ Reverts | 版本回退", "hidden": false},
{"type": "feat", "section": "✨ Features | 新功能", "hidden": false},
{"type": "fix", "section": "🐛 Bug Fixes | 问题修复", "hidden": false},
{"type": "improvement", "section": "Feature Improvements | 性能提升", "hidden": false},
{"type": "docs", "section":"📝 Documentation | 文档更新", "hidden": false},
{"type": "style", "section":"💄 Styles | 样式调整", "hidden": false},
{"type": "refactor", "section":"💄 Styles | 结构重构", "hidden": false},
{"type": "perf", "section":"⚡ Performance Improvements | 速度优化", "hidden": false},
{"type": "test", "section":"✅ Tests | 测试相关", "hidden": false},
{"type": "build", "section":"👷‍ Build System | 构建打包", "hidden": false},
{"type": "ci", "section":"🔧 Continuous Integration | 自动化流程", "hidden":false}
]
}
\ No newline at end of file
......@@ -34,7 +34,7 @@
</div>
<el-dialog title="编辑常用菜单"
v-model="visible"
draggable>
draggable overflow>
<el-transfer ref="myTransfer"
v-model="selectList"
:data="menuList"
......
......@@ -36,7 +36,7 @@
title="预览"
width="800px"
append-to-body
draggable
draggable overflow
>
<img
:src="dialogImageUrl"
......
......@@ -54,7 +54,7 @@
<el-dialog :title="title"
v-model="open"
append-to-body
draggable>
draggable overflow>
<el-transfer :titles="['显示', '隐藏']"
v-model="value"
:data="columns"
......
......@@ -3,53 +3,28 @@
<el-dialog v-model="dialogVisible"
:close-on-click-modal="false"
:close-on-press-escape="false"
:show-close="false"
width="40%"
@close="handleClose"
draggable>
draggable
overflow >
<template #header>
<p class="el-dialog__title">版本更新说明</p>
<div class="version-tag">V7.2.86 更新内容</div>
<div class="version-tag">V{{ nowVersion }} 更新内容</div>
</template>
<el-collapse :accordion="false"
class="update-content"
v-model="showVersionList">
<!-- 版本更新说明 -->
<el-collapse-item name="1">
<el-collapse-item v-for="item in versionList"
:name="item.title">
<template #title>
<span class="section-title">LTC功能更新</span>
<span class="section-title">{{ item.title }}</span>
</template>
<ol class="feature-list">
<li>
大客户开发生命周期管理、潜在客户评估、客户从对象变更触发审批、基于工商注册信息验证线索真实性。
</li>
<li>试用管理、商机阶段任务管理、自动作废商机。
</li>
<li>
商品组合和约束(BOM)、可售范围管理、价目表管理、报价单(按价目表报价/差异化特价/非标品报价)。
</li>
<li>
按价目表生成合同、按报价单生成合同、非标品销售合同。
</li>
</ol>
</el-collapse-item>
<!-- 国际化功能更新 -->
<el-collapse-item name="2">
<template #title>
<span class="section-title">国际化功能更新</span>
</template>
<ol class="feature-list">
<li>
大客户开发生命周期管理、潜在客户评估、客户从对象变更触发审批、基于工商注册信息验证线索真实性。
</li>
<li>试用管理、商机阶段任务管理、自动作废商机。
</li>
<li>
商品组合和约束(BOM)、可售范围管理、价目表管理、报价单(按价目表报价/差异化特价/非标品报价)。
</li>
<li>
按价目表生成合同、按报价单生成合同、非标品销售合同。
<li v-for="o in item.content">
{{ o }}
</li>
</ol>
</el-collapse-item>
......@@ -73,15 +48,30 @@ const props = defineProps({
modelValue: {
type: Boolean,
default: false
},
nowVersion: { // 当前最新版本
type: String,
default: ''
},
versionList: { // 版本信息说明数据源
type: Array,
default: () => [{
title: '',
content: ['']
}]
}
})
const emit = defineEmits(['update:modelValue']);
const dialogVisible = ref(props.modelValue);
const showVersionList = ref(props.versionList.map((o) => o.title))
watch(() => props.modelValue, (val) => {
dialogVisible.value = val;
})
watch(() => props.versionList, (val) => {
showVersionList.value = val.map((o) => o.title)
})
const handleClose = () => {
emit('update:modelValue', false);
......@@ -94,75 +84,9 @@ const handleViewDetail = () => {
const handleConfirm = () => {
emit('update:modelValue', false);
emit('confirm') // 确定保存
};
const showVersionList = ref(['1', '2'])
const versionObj = {
"2.0.1": {
"breakingChanges": [],
"changes": [
{
"type": "测试",
"desc": ["测试"]
}
]
},
"2.0.0": {
"breakingChanges": [],
"changes": [
{
"type": "新功能",
"desc": ["ce"]
}
]
},
"1.0.0": {
"breakingChanges": [],
"changes": []
},
"0.2.0": {
"breakingChanges": ["主版本发布测试"],
"changes": [
{
"type": "新功能",
"desc": [
"测试主版本发布",
"主版本测试发布"
]
}
]
},
"0.1.8": {
"breakingChanges": [],
"changes": [
{
"type": "新功能",
"desc": ["新版本文件保存测试"]
},
{
"type": "Bug 修复",
"desc": ["bug 修改测试"]
},
{
"type": "风格",
"desc": ["测试样式变更"]
},
{
"type": "重构",
"desc": ["重构测试"]
}
]
},
"0.1.6": {
"breakingChanges": [],
"changes": [
{
"type": "测试",
"desc": ["测试"]
}
]
}
}
</script>
<style lang="scss"
......
......@@ -15,11 +15,14 @@
<template v-if="appStore.device !== 'mobile'">
<!-- 新版本 -->
<div class="right-menu-item hover-effect new-version"
@click="showVersionNoticeVisible = true">
@click="showVersionFn">
<svg-icon icon-class="new-version" />
</div>
<version-notice v-model="showVersionNoticeVisible" />
<version-notice v-model="showVersionNoticeVisible"
:nowVersion="nowVersion"
:versionList="showVersionList"
@confirm="saveNowVersion" />
<header-search id="header-search"
class="right-menu-item" />
......@@ -94,18 +97,45 @@ const appStore = useAppStore()
const userStore = useUserStore()
const settingsStore = useSettingsStore()
const versionStore = useVersionStore()
const { proxy } = getCurrentInstance()
const version = versionStore.version
const showVersionList = ref([])
const name = userStore.name;
const showQuit = !window.h5sdk; // 判断飞书客户端内,则不显示退出登录
const showVersionNoticeVisible = ref(false) // 判断版本通知是否出现
const nowVersion = ref('') // 当前最新版本
// 判断是否有新版本出现
onMounted(() => {
const list = Object.keys(version)
console.log(list)
const oldVersion = proxy.$cache.local.get('version')
const versionObj = versionStore.version[0]
nowVersion.value = versionObj.version
if (oldVersion !== nowVersion.value) {
handleVersionList()
}
})
// 展示版本通知弹框
const showVersionFn = () => {
handleVersionList()
}
// 处理版本通知数据结构
const handleVersionList = () => {
const versionObj = versionStore.version[0]
showVersionNoticeVisible.value = true
// 组织版本内容数据
showVersionList.value = versionObj.changes.map(o => {
return {
title: o.type,
content: o.desc
}
})
}
// 保存当前版本
const saveNowVersion = () => {
proxy.$cache.local.set('version', nowVersion.value)
}
function toggleSideBar() {
appStore.toggleSideBar()
......
<template>
<div>
</div>
</template>
<script setup>
import { getLogisticsListAPI } from '@/api'
const route = useRoute()
const activities = ref([]) // 物流轨迹信息
const orderId = ref('') // 订单号
const transportName = ref('') // 物流公司名称
const ddNo = ref('') // 合同编号
const sentNo = ref('') // 发货单号
const getLogisticsList = async () => {
// 获取当前 URL 上的参数 sentNo
const { data } = await getLogisticsListAPI({
sentNo: route.query.sentNo
})
orderId.value = data.expressNo
transportName.value = data.transportName
ddNo.value = data.ddNo
sentNo.value = data.bjSentNo
// 判断 data.sentInfo 为空给 activities 空数组怎么写
if (!data.sentInfo) {
activities.value = [{
content: '还未生成物流信息,请稍等',
timestamp: new Date()
}]
return
}
activities.value = data.sentInfo.traceDetails.reverse().map(o => ({
content: o.operateRemark,
timestamp: o.operateTime
}))
}
getLogisticsList()
</script>
<style lang="scss"
scoped></style>
\ No newline at end of file
......@@ -109,32 +109,38 @@ export const constantMobileRoutes = [
{
path: 'menu',
component: () => import('@/mobile/views/menu'),
name:'m_menu',
name: 'm_menu',
},
// 促销计划
{
path: 'promotion_plan', // 列表
component: () => import('@/mobile/views/promotion/plan/index'),
name: 'm_promotion_plan',
name: 'm_promotion_plan',
meta: { keepAlive: true } // 标记该路由需要缓存
},
{
path: 'promotion_plan_detail/:planId', // 详情
component: () => import('@/mobile/views/promotion/plan/detail'),
name: 'm_promotion_detail',
name: 'm_promotion_detail',
},
{
path: 'promotion_plan_editing/:planId?', // 增改
component: () => import('@/mobile/views/promotion/plan/editing'),
name:'m_promotion_editing',
name: 'm_promotion_editing',
},
// 稽查
{
path: 'examine/:examineId',
component: () => import('@/mobile/views/examine'),
name:'m_promotion_examine',
name: 'm_promotion_examine',
}
]
},
// 物流信息页面
{
path: '/logistics',
component: () => import('@/mobile/views/other/logistics'),
name: 'logistics'
}
]
// PC端 动态路由,基于用户权限动态去加载(一级的是靠网页里配置动态请求的,二级路由页面)
......
......@@ -10,13 +10,12 @@ export default defineStore(
// 获取版本信息
getVersion() {
return new Promise((resolve, reject) => {
// getVersionAPI().then(res => {
// this.version = res.data
// console.log(res)
// resolve(res)
// }).catch(error => {
// reject(error)
// })
getVersionAPI().then(res => {
this.version = res.data
resolve(res)
}).catch(error => {
reject(error)
})
})
}
}
......
......@@ -192,7 +192,7 @@
title="订单详情"
width="80%"
footer-class="dialog-footer"
draggable>
draggable overflow>
<el-table :data="detailList"
ref="detailTableRef"
border
......
......@@ -40,7 +40,7 @@
</el-card>
<el-dialog title="编辑常用报表"
v-model="visible"
draggable>
draggable overflow>
<div class="wrap">
<div class="left">
<draggable v-model="reportList"
......
......@@ -47,7 +47,7 @@
<!-- 添加/修改-商品标签 -->
<el-dialog :title="title"
v-model="visible"
draggable>
draggable overflow>
<el-form ref="formRef"
:model="form"
:rules="rules"
......
......@@ -261,7 +261,7 @@
<!-- 上传货需弹框 -->
<el-dialog title="上传货需"
v-model="uploadDemandImportVisible"
draggable>
draggable overflow>
<el-form :model="uploadDemand"
label-width="150px">
<el-form-item label="年份">
......
......@@ -109,7 +109,7 @@
<!-- 添加或修改对话框 -->
<el-dialog :title="title"
v-model="open"
draggable>
draggable overflow>
<el-form ref="formRef"
:model="form"
:rules="rules"
......
......@@ -43,7 +43,7 @@
<!-- 自定义报表分组 -->
<el-dialog title="编辑常用报表"
v-model="visible"
draggable>
draggable overflow>
<div class="wrap">
<!-- 列表 -->
<div class="left">
......
......@@ -188,7 +188,7 @@
v-model="open"
width="820px"
append-to-body
draggable>
draggable overflow>
<el-form ref="jobRef"
:model="form"
:rules="rules"
......
......@@ -134,7 +134,7 @@
<!-- 调度日志详细 -->
<el-dialog title="调度日志详细" v-model="open" width="700px" append-to-body
draggable>
draggable overflow>
<el-form :model="form" label-width="100px">
<el-row>
<el-col :span="12">
......
......@@ -190,7 +190,7 @@
v-model="open"
width="800px"
append-to-body
draggable>
draggable overflow>
<el-form :model="form"
label-width="100px">
<el-row>
......
......@@ -2,22 +2,25 @@
<div class="app">
<div class="container">
<p class="order">
<span>单号:{{ orderId }}</span>
<span>合同编号:{{ ddNo }}</span>
<span>发货单号:{{ sentNo }}</span>
<span>物流公司:{{ transportName }}</span>
<span>物流单号:{{ orderId }}</span>
</p>
<div class="wrap">
<el-timeline>
<el-timeline-item v-for="(activity, index) in activities"
:key="index"
:timestamp="activity.timestamp"
:type="index === 0 && 'primary'"
:type="index === 0 ? 'primary' : ''"
:hollow="true"
:class="{ 'current': index === 0 }">
{{ activity.content }}
</el-timeline-item>
</el-timeline>
<div class="map-container">
<!-- <div id="map-container"
style="width:100%; height:400px;"></div> -->
<div id="map-container"
style="width:100%; height:400px;"></div>
</div>
</div>
</div>
......@@ -28,8 +31,11 @@
import { getLogisticsListAPI } from '@/api'
const route = useRoute()
const activities = ref([])
const orderId = ref('')
const activities = ref([]) // 物流轨迹信息
const orderId = ref('') // 订单号
const transportName = ref('') // 物流公司名称
const ddNo = ref('') // 合同编号
const sentNo = ref('') // 发货单号
const getLogisticsList = async () => {
// 获取当前 URL 上的参数 sentNo
......@@ -37,6 +43,10 @@ const getLogisticsList = async () => {
sentNo: route.query.sentNo
})
orderId.value = data.expressNo
transportName.value = data.transportName
ddNo.value = data.ddNo
sentNo.value = data.bjSentNo
// 判断 data.sentInfo 为空给 activities 空数组怎么写
if (!data.sentInfo) {
activities.value = [{
......@@ -88,9 +98,13 @@ onMounted(() => {
padding: 5px 12px;
border: 1px solid #1890ff;
border-radius: 8px;
&:nth-child(n+1){
margin-left: 15px;
}
}
}
.wrap {
display: flex;
gap: 20px;
......
......@@ -103,7 +103,7 @@
v-model="uploadPlanDialogVisible"
:close-on-click-modal="false"
:close-on-press-escape="false"
draggable>
draggable overflow>
<div>
<!-- 计划表格 -->
<el-table :data="planTableList"
......@@ -136,7 +136,7 @@
:title="(addOrEditPlanForm.id ? '修改' : '新增') + '计划'"
v-model="addOrEditPlanVisible"
width="60%"
draggable>
draggable overflow>
<!-- 表单 -->
<el-form :model="addOrEditPlanForm"
label-width="150px"
......@@ -280,7 +280,7 @@
<el-dialog title="修改计划归属人"
v-model="editPlanEmpVisible"
width="60%"
draggable>
draggable overflow>
<!-- 表单 -->
<el-form :model="editPlanEmpForm"
label-width="150px"
......
......@@ -106,7 +106,7 @@
<el-dialog :title="photoLookInfoObj.storeName"
v-model="photoDialogVisible"
width="60%"
draggable>
draggable overflow>
<p>活动记录 ID :{{ photoLookInfoObj.id }}</p>
<p>活动时间 :{{ photoLookInfoObj.createDate }}</p>
<el-card v-for="obj in photoDialogList"
......
......@@ -125,7 +125,7 @@
<el-dialog :title="title"
v-model="open"
append-to-body
draggable>
draggable overflow>
<el-form class="form"
ref="addForm"
:model="form"
......
......@@ -164,7 +164,7 @@
<el-dialog :title="title"
v-model="open"
append-to-body
draggable>
draggable overflow>
<el-form ref="configRef"
:model="form"
:rules="rules"
......
......@@ -110,7 +110,7 @@
<el-dialog :title="title"
v-model="open"
append-to-body
draggable>
draggable overflow>
<el-form ref="deptRef"
:model="form"
:rules="rules"
......
......@@ -127,7 +127,7 @@
<!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body
draggable>
draggable overflow>
<el-form ref="dataRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="字典类型">
<el-input v-model="form.dictType" :disabled="true" />
......
......@@ -142,7 +142,7 @@
<!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title" v-model="open" append-to-body
draggable>
draggable overflow>
<el-form ref="dictRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="字典名称" prop="dictName">
<el-input v-model="form.dictName" placeholder="请输入字典名称" />
......
......@@ -122,7 +122,7 @@
<el-dialog :title="title"
v-model="open"
append-to-body
draggable>
draggable overflow>
<el-form ref="menuRef"
:model="form"
:rules="rules"
......
......@@ -141,7 +141,7 @@
<el-dialog :title="title"
v-model="open"
append-to-body
draggable>
draggable overflow>
<el-form ref="noticeRef"
:model="form"
:rules="rules"
......
......@@ -139,7 +139,7 @@
<el-dialog :title="title"
v-model="open"
append-to-body
draggable>
draggable overflow>
<el-form ref="postRef"
:model="form"
:rules="rules"
......
......@@ -181,7 +181,7 @@
<el-dialog :title="title"
v-model="open"
append-to-body
draggable>
draggable overflow>
<el-form ref="roleRef"
:model="form"
:rules="rules"
......@@ -252,7 +252,7 @@
<el-dialog :title="title"
v-model="openDataScope"
append-to-body
draggable>
draggable overflow>
<el-form :model="form"
label-width="80px">
<el-form-item label="角色名称">
......
......@@ -4,7 +4,7 @@
v-model="visible"
top="5vh"
append-to-body
draggable>
draggable overflow>
<el-form :model="queryParams"
ref="queryRef"
:inline="true">
......
......@@ -220,7 +220,7 @@
<el-dialog :title="title"
v-model="open"
append-to-body
draggable>
draggable overflow>
<el-form :model="form"
:rules="rules"
ref="userRef"
......@@ -399,7 +399,7 @@
<el-dialog :title="upload.title"
v-model="upload.open"
append-to-body
draggable>
draggable overflow>
<el-upload ref="uploadRef"
:limit="1"
accept=".xlsx, .xls"
......
......@@ -2,7 +2,7 @@
<div class="user-info-head" @click="editCropper()">
<img :src="options.img" title="点击上传头像" class="img-circle img-lg" />
<el-dialog :title="title" v-model="open" width="800px" append-to-body @opened="modalOpened" @close="closeDialog"
draggable>
draggable overflow>
<el-row>
<el-col :xs="24" :md="12" :style="{ height: '350px' }">
<vue-cropper
......
<template>
<el-dialog v-model="open" width="500px" title="选择生成类型" @open="onOpen" @close="onClose"
draggable>
draggable overflow>
<el-form ref="codeTypeForm" :model="formData" :rules="rules" label-width="100px">
<el-form-item label="生成类型" prop="type">
<el-radio-group v-model="formData.type">
......
......@@ -2,7 +2,7 @@
<div class="icon-dialog">
<el-dialog v-model="value" width="980px" :close-on-click-modal="false" :modal-append-to-body="false" @open="onOpen"
@close="onClose"
draggable>
draggable overflow>
<template #header="{ close, titleId, titleClass }">
选择图标
<el-input v-model="key" size="small" :style="{ width: '260px' }" placeholder="请输入图标名称" prefix-icon="Search"
......
......@@ -2,7 +2,7 @@
<div>
<el-dialog title="添加选项" v-model="open" width="800px" :close-on-click-modal="false" :modal-append-to-body="false"
@open="onOpen" @close="onClose"
draggable>
draggable overflow>
<el-form ref="treeNodeForm" :model="formData" :rules="rules" label-width="100px">
<el-col :span="24">
<el-form-item label="选项名" prop="label">
......
<template>
<!-- 创建表 -->
<el-dialog title="创建表" v-model="visible" width="800px" top="5vh" append-to-body
draggable>
draggable overflow>
<span>创建表语句(支持多个建表语句):</span>
<el-input type="textarea" :rows="10" placeholder="请输入文本" v-model="content"></el-input>
<template #footer>
......
<template>
<!-- 导入表 -->
<el-dialog title="导入表" v-model="visible" width="800px" top="5vh" append-to-body
draggable>
draggable overflow>
<el-form :model="queryParams" ref="queryRef" :inline="true">
<el-form-item label="表名称" prop="tableName">
<el-input
......
......@@ -176,7 +176,7 @@
top="5vh"
append-to-body
class="scrollbar"
draggable>
draggable overflow>
<el-tabs v-model="preview.activeName">
<el-tab-pane v-for="(value, key) in preview.data"
:label="key.substring(key.lastIndexOf('/') + 1, key.indexOf('.vm'))"
......
......@@ -93,7 +93,6 @@ function parseChangelog(changelogText) {
const changelog = './CHANGELOG.md'
const changeData = fs.readFileSync(changelog, 'utf-8')
const result = parseChangelog(changeData)
console.log(result)
axios({
url: 'http://192.168.101.103:8180/bi/front/version/core',
method: 'POST',
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论