Merge branch 'main' of https://dd3skj.picp.vip/JyuHsin/zhgh_jshvc
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 356 KiB |
@@ -327,11 +327,10 @@ function createLoading(text = '加载中...') {
|
||||
})
|
||||
}
|
||||
|
||||
function getBaseSubAppPath() {
|
||||
const pathname = window.location.pathname;
|
||||
function getBaseSubAppPath(pathname = window.location.pathname) {
|
||||
const startIndex = pathname.indexOf('/platform');
|
||||
if (startIndex === -1) {
|
||||
throw new Error('Target path not found in URL');
|
||||
return pathname
|
||||
}
|
||||
return pathname.substring(startIndex);
|
||||
}
|
||||
@@ -341,7 +340,7 @@ function getFullSubAppPath() {
|
||||
const search = window.location.search; // 包含 ?appId=...
|
||||
const startIndex = pathname.indexOf('/platform');
|
||||
if (startIndex === -1) {
|
||||
throw new Error('Target path not found in URL');
|
||||
return pathname
|
||||
}
|
||||
return pathname.substring(startIndex) + search;
|
||||
}
|
||||
|
||||
@@ -434,6 +434,10 @@ module.exports = {
|
||||
let result = []
|
||||
if (response && response.code === 0 && file.status === "success") {
|
||||
fileList.forEach((f) => {
|
||||
if(f.response.data.includes('webvpn')) {
|
||||
const index = f.response.data.indexOf('/platform')
|
||||
f.response.data = f.response.data.substring(index)
|
||||
}
|
||||
result.push(f)
|
||||
})
|
||||
} else {
|
||||
|
||||
@@ -309,6 +309,7 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
},
|
||||
methods: {
|
||||
menuSelect(index, indexPath) {
|
||||
debugger
|
||||
try {
|
||||
const app = JSON.parse(window.sessionStorage.getItem("zhgh_sub_app"))
|
||||
window.sessionStorage.setItem("zhgh_sub_app_left_menu_active_index-" + app.id, index)
|
||||
@@ -318,6 +319,7 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
},
|
||||
// 获取菜单
|
||||
getMenus(appId) {
|
||||
debugger
|
||||
if (!appId) return
|
||||
this.$axios.post("/platform/sys/user/subAppMenus", {appId}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
@@ -332,6 +334,7 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
|
||||
// 设置应用信息
|
||||
setAppInfo(app) {
|
||||
debugger
|
||||
if (app) {
|
||||
// 储存到缓存
|
||||
window.sessionStorage.setItem("zhgh_sub_app", JSON.stringify(app))
|
||||
@@ -347,6 +350,7 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
},
|
||||
// 菜单回显
|
||||
echoMenus() {
|
||||
debugger
|
||||
try {
|
||||
const app = JSON.parse(window.sessionStorage.getItem("zhgh_sub_app"))
|
||||
this.activeMenuIndex = window.sessionStorage.getItem("zhgh_sub_app_left_menu_active_index-" + app.id)
|
||||
@@ -367,6 +371,7 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
|
||||
// 地址选中
|
||||
hrefSelect() {
|
||||
debugger
|
||||
function findMenuPath(menus, targetHref) {
|
||||
function search(items, path) {
|
||||
for (const item of items) {
|
||||
@@ -385,7 +390,7 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
return search(menus, []);
|
||||
}
|
||||
|
||||
const result = findMenuPath(this.menus, getBaseSubAppPath())
|
||||
const result = findMenuPath(this.menus, window.location.pathname)
|
||||
if(result){
|
||||
this.activeMenuIndex = result[result.length-1]['id']
|
||||
this.openedMenus = result.map(v=>v.id)
|
||||
@@ -399,6 +404,7 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
|
||||
// 默认选中
|
||||
defaultSelect() {
|
||||
debugger
|
||||
// 查找第一个有href的子菜单
|
||||
function findFirstChildWithHref(menus) {
|
||||
for (const menu of menus) {
|
||||
@@ -424,22 +430,33 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
}
|
||||
|
||||
const result = findFirstChildWithHref(this.menus)
|
||||
debugger
|
||||
if (result) {
|
||||
this.activeMenuIndex = result.menu.id
|
||||
this.openedMenus = result.parentIds
|
||||
this.$nextTick(() => {
|
||||
this.menuSelect(this.activeMenuIndex, this.openedMenus)
|
||||
// 使用pjax跳转
|
||||
commonUtil.pjaxPush(result.menu.href)
|
||||
commonUtil.pjaxPush(getBaseSubAppPath(result.menu.href))
|
||||
|
||||
/*const tempLink = document.createElement('a')
|
||||
tempLink.href = result.menu.href
|
||||
tempLink.setAttribute('data-pjax', '')
|
||||
tempLink.style.display = 'none'
|
||||
document.body.appendChild(tempLink)
|
||||
tempLink.click()
|
||||
document.body.removeChild(tempLink)*/
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
init() {
|
||||
debugger
|
||||
// 页面加载时获取到正确的菜单
|
||||
const pathname = getFullSubAppPath()
|
||||
const pathname = window.location.pathname
|
||||
if (!pathname.startsWith("/platform/v4/subApp")) {
|
||||
this.$axios.post("/platform/sys/user/rootMenuByPath", {pathname}).then((res) => {
|
||||
const path = getFullSubAppPath()
|
||||
this.$axios.post("/platform/sys/user/rootMenuByPath", {pathname: path}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.setAppInfo(res.data)
|
||||
this.getMenus(res.data?.id)
|
||||
|
||||
@@ -159,7 +159,7 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
align-items: center;
|
||||
padding: 15px;
|
||||
position: relative;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
||||
}
|
||||
|
||||
.app-card:hover {
|
||||
@@ -334,12 +334,13 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
<!-- Left Sidebar -->
|
||||
<div class="apps-sidebar">
|
||||
<div
|
||||
v-for="category in allCategories"
|
||||
:key="category.id"
|
||||
:class="['apps-sidebar-item', activeCategory === category.id ? 'active' : '']"
|
||||
@click="changeCategory(category.id)"
|
||||
v-for="category in allCategories"
|
||||
:key="category.id"
|
||||
:class="['apps-sidebar-item', activeCategory === category.id ? 'active' : '']"
|
||||
@click="changeCategory(category.id)"
|
||||
>
|
||||
<i :class="category.icon || 'fa fa-th-large'"></i>
|
||||
<img v-if="category.picIcon" :src="category.picIcon" :alt="category.name || ''" style="width: 20px"/>
|
||||
<i v-else :class="category.icon || 'fa fa-th-large'"></i>
|
||||
{{ category.name }}
|
||||
</div>
|
||||
</div>
|
||||
@@ -355,29 +356,31 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
</div>
|
||||
|
||||
<!-- 字母过滤 -->
|
||||
<!-- <div class="apps-filter">-->
|
||||
<!-- <div class="apps-filter-title">首字母:</div>-->
|
||||
<!-- <div class="apps-filter-tags alphabet-filter">-->
|
||||
<!-- <div :class="['filter-tag', activeAlphabet === '' ? 'active' : '']" @click="changeAlphabet('')">全部</div>-->
|
||||
<!-- <div-->
|
||||
<!-- v-for="letter in alphabets"-->
|
||||
<!-- :key="letter"-->
|
||||
<!-- :class="['alphabet-item', activeAlphabet === letter ? 'active' : '']"-->
|
||||
<!-- @click="changeAlphabet(letter)"-->
|
||||
<!-- >-->
|
||||
<!-- {{ letter }}-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="apps-filter">-->
|
||||
<!-- <div class="apps-filter-title">首字母:</div>-->
|
||||
<!-- <div class="apps-filter-tags alphabet-filter">-->
|
||||
<!-- <div :class="['filter-tag', activeAlphabet === '' ? 'active' : '']" @click="changeAlphabet('')">全部</div>-->
|
||||
<!-- <div-->
|
||||
<!-- v-for="letter in alphabets"-->
|
||||
<!-- :key="letter"-->
|
||||
<!-- :class="['alphabet-item', activeAlphabet === letter ? 'active' : '']"-->
|
||||
<!-- @click="changeAlphabet(letter)"-->
|
||||
<!-- >-->
|
||||
<!-- {{ letter }}-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
</div>
|
||||
|
||||
<!-- 应用网格 -->
|
||||
<div class="apps-grid" v-if="applications.length > 0">
|
||||
<div v-for="app in applications" :key="app.id" class="app-card" @click.stop="openApp(app)">
|
||||
<div :class="['app-icon', app.iconType]">
|
||||
<!-- <i v-if="app.icon && !app.picIcon" :class="app.icon"></i>-->
|
||||
<!-- <img v-else-if="app.picIcon" :src="app.picIcon" :alt="app.name || ''" />-->
|
||||
<i class="fa fa-skype"></i>
|
||||
<!--<i v-if="app.icon && !app.picIcon" :class="app.icon"></i>
|
||||
<img v-else-if="app.picIcon" :src="app.picIcon" :alt="app.name || ''" />-->
|
||||
<!--<i class="fa fa-skype"></i>-->
|
||||
<img v-if="app.picIcon" :src="app.picIcon" :alt="app.name || ''" />
|
||||
<i v-else class="fa fa-skype"></i>
|
||||
</div>
|
||||
<div class="app-info">
|
||||
<div class="app-title">{{ app.name }}</div>
|
||||
@@ -385,9 +388,9 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
</div>
|
||||
<div class="app-status" v-if="app.status">{{ app.status }}</div>
|
||||
<div
|
||||
:class="['favorite-icon', app.isFavorite ? 'active' : '']"
|
||||
@click.stop="toggleFavorite(app.id)"
|
||||
:title="app.isFavorite ? '取消收藏' : '收藏'"
|
||||
:class="['favorite-icon', app.isFavorite ? 'active' : '']"
|
||||
@click.stop="toggleFavorite(app.id)"
|
||||
:title="app.isFavorite ? '取消收藏' : '收藏'"
|
||||
>
|
||||
<i :class="app.isFavorite ? 'el-icon-star-on' : 'el-icon-star-off'"></i>
|
||||
</div>
|
||||
@@ -505,8 +508,8 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
this.activeCategory === "all"
|
||||
? ""
|
||||
: this.activeCategory === "favorites" || this.activeCategory === "recommended"
|
||||
? this.activeCategory
|
||||
: this.activeCategory,
|
||||
? this.activeCategory
|
||||
: this.activeCategory,
|
||||
letter: this.activeAlphabet,
|
||||
keyword: this.searchKeyword
|
||||
}
|
||||
|
||||
@@ -20,17 +20,13 @@ const entry = {
|
||||
<!-- 应用块区域 -->
|
||||
<div class="apps-container">
|
||||
<div class="app-grid">
|
||||
<div v-if="currentServices && currentServices.length > 0" class="app-item" v-for="(item, index) in currentServices" :key="index"
|
||||
<div class="app-item" v-for="(item, index) in currentServices" :key="index"
|
||||
@click="openService(item)">
|
||||
<div class="app-icon">
|
||||
<img :src="item.picIcon" alt="" />
|
||||
</div>
|
||||
<div class="app-name">{{ item.name }}</div>
|
||||
</div>
|
||||
<div v-if="currentServices.length === 0" class="no-entry-placeholder">
|
||||
<div class="icon">📅</div>
|
||||
<p>暂无数据</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -129,7 +125,6 @@ const entry = {
|
||||
margin-top: 5px;
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
margin-bottom: 20px;
|
||||
border-bottom: 2px solid #e8e8e8;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
@@ -173,12 +168,12 @@ const entry = {
|
||||
justify-items: center; /* 子项内容居中(图标和文字) */
|
||||
justify-content: start; /* 整体网格靠左对齐,避免居中 */
|
||||
|
||||
gap: 12px;
|
||||
padding: 12px;
|
||||
gap: 4px;
|
||||
padding: 12px 4px;
|
||||
background: #fff;
|
||||
overflow-x: hidden;
|
||||
|
||||
height: calc(350px - 74px);
|
||||
max-height: calc(350px - 74px);
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
@@ -187,11 +182,11 @@ const entry = {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding: 12px;
|
||||
border-radius: 8px;
|
||||
background: #fff;
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
padding: 6px;
|
||||
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
||||
}
|
||||
|
||||
@@ -248,32 +243,5 @@ const entry = {
|
||||
gap: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.no-entry-placeholder {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 40px 20px;
|
||||
color: #94a3b8;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.no-entry-placeholder .icon {
|
||||
font-size: 48px;
|
||||
margin-bottom: 12px;
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
.no-entry-placeholder p {
|
||||
margin: 4px 0 0;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.no-entry-placeholder .subtext {
|
||||
font-size: 13px;
|
||||
opacity: 0.8;
|
||||
}
|
||||
`
|
||||
};
|
||||
|
||||
@@ -17,7 +17,7 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
.section-banner .banner-img img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
/*object-fit: cover;*/
|
||||
}
|
||||
|
||||
.section-wrapper {
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
const stats = {
|
||||
template: /*language=HTML*/ `
|
||||
<div class="stats-section">
|
||||
<div class="stats-family">
|
||||
<img src="/assets/platform/img/home/family.png"/>
|
||||
</div>
|
||||
<div class="stats-grid">
|
||||
<!-- 待办 -->
|
||||
<div
|
||||
class="stat-item pending"
|
||||
@click="handleStatClick('todo')"
|
||||
@mouseenter="onMouseEnter"
|
||||
@mouseleave="onMouseLeave"
|
||||
class="stat-item pending"
|
||||
@click="handleStatClick('todo')"
|
||||
@mouseenter="onMouseEnter"
|
||||
@mouseleave="onMouseLeave"
|
||||
>
|
||||
<div class="stat-icon">
|
||||
<i class="fa fa-clock-o"></i>
|
||||
@@ -20,10 +23,10 @@ const stats = {
|
||||
|
||||
<!-- 已办 -->
|
||||
<div
|
||||
class="stat-item completed"
|
||||
@click="handleStatClick('done')"
|
||||
@mouseenter="onMouseEnter"
|
||||
@mouseleave="onMouseLeave"
|
||||
class="stat-item completed"
|
||||
@click="handleStatClick('done')"
|
||||
@mouseenter="onMouseEnter"
|
||||
@mouseleave="onMouseLeave"
|
||||
>
|
||||
<div class="stat-icon">
|
||||
<i class="fa fa-check-circle"></i>
|
||||
@@ -36,10 +39,10 @@ const stats = {
|
||||
|
||||
<!-- 消息 -->
|
||||
<div
|
||||
class="stat-item messages"
|
||||
@click="handleStatClick('notification')"
|
||||
@mouseenter="onMouseEnter"
|
||||
@mouseleave="onMouseLeave"
|
||||
class="stat-item messages"
|
||||
@click="handleStatClick('notification')"
|
||||
@mouseenter="onMouseEnter"
|
||||
@mouseleave="onMouseLeave"
|
||||
>
|
||||
<div class="stat-icon">
|
||||
<i class="fa fa-bell"></i>
|
||||
@@ -52,10 +55,10 @@ const stats = {
|
||||
|
||||
<!-- 发起 -->
|
||||
<div
|
||||
class="stat-item reminders"
|
||||
@click="handleStatClick('started')"
|
||||
@mouseenter="onMouseEnter"
|
||||
@mouseleave="onMouseLeave"
|
||||
class="stat-item reminders"
|
||||
@click="handleStatClick('started')"
|
||||
@mouseenter="onMouseEnter"
|
||||
@mouseleave="onMouseLeave"
|
||||
>
|
||||
<div class="stat-icon">
|
||||
<i class="fa fa-file-text"></i>
|
||||
@@ -110,23 +113,25 @@ const stats = {
|
||||
style: /*language=CSS*/ `
|
||||
/* 右侧统计区域 */
|
||||
.stats-section {
|
||||
position: absolute;
|
||||
bottom: 24px;
|
||||
right: 24px;
|
||||
/*background: white;*/
|
||||
color: #333;
|
||||
padding: 20px;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
|
||||
z-index: 10;
|
||||
width: 680px;
|
||||
width: 80%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin: -130px auto 0;
|
||||
/*border: 1px solid #e8e8e8;*/
|
||||
}
|
||||
|
||||
.stats-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 16px;
|
||||
width: 32%;
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
.stat-item {
|
||||
@@ -140,13 +145,15 @@ const stats = {
|
||||
cursor: pointer;
|
||||
transition: all 0.2s ease;
|
||||
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
|
||||
width: 100%;
|
||||
height: 90px;
|
||||
}
|
||||
|
||||
|
||||
.stat-icon {
|
||||
font-size: 20px;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
font-size: 30px;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
background: #e6f7ff;
|
||||
color: #1890ff;
|
||||
border-radius: 50%;
|
||||
@@ -178,6 +185,7 @@ const stats = {
|
||||
.stat-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.stat-label {
|
||||
@@ -192,5 +200,14 @@ const stats = {
|
||||
font-weight: bold;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
.stats-family {
|
||||
width: 68%;
|
||||
}
|
||||
|
||||
.stats-family img {
|
||||
height: 190px !important;
|
||||
border-radius: 30px;
|
||||
}
|
||||
`
|
||||
};
|
||||
|
||||
@@ -334,7 +334,8 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
:class="['apps-sidebar-item', activeCategory === category.id ? 'active' : '']"
|
||||
@click="changeCategory(category.id)"
|
||||
>
|
||||
<i :class="category.icon || 'fa fa-th-large'"></i>
|
||||
<img v-if="category.picIcon" :src="category.picIcon" :alt="category.name || ''" style="width: 20px"/>
|
||||
<i v-else :class="category.icon || 'fa fa-th-large'"></i>
|
||||
{{ category.name }}
|
||||
</div>
|
||||
</div>
|
||||
@@ -350,29 +351,29 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
</div>
|
||||
|
||||
<!-- 字母过滤 -->
|
||||
<!-- <div class="apps-filter">-->
|
||||
<!-- <div class="apps-filter-title">首字母:</div>-->
|
||||
<!-- <div class="apps-filter-tags alphabet-filter">-->
|
||||
<!-- <div :class="['filter-tag', activeAlphabet === '' ? 'active' : '']" @click="changeAlphabet('')">-->
|
||||
<!-- 全部-->
|
||||
<!-- </div>-->
|
||||
<!-- <div-->
|
||||
<!-- v-for="letter in alphabets"-->
|
||||
<!-- :key="letter"-->
|
||||
<!-- :class="['alphabet-item', activeAlphabet === letter ? 'active' : '']"-->
|
||||
<!-- @click="changeAlphabet(letter)"-->
|
||||
<!-- >-->
|
||||
<!-- {{ letter }}-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="apps-filter">-->
|
||||
<!-- <div class="apps-filter-title">首字母:</div>-->
|
||||
<!-- <div class="apps-filter-tags alphabet-filter">-->
|
||||
<!-- <div :class="['filter-tag', activeAlphabet === '' ? 'active' : '']" @click="changeAlphabet('')">-->
|
||||
<!-- 全部-->
|
||||
<!-- </div>-->
|
||||
<!-- <div-->
|
||||
<!-- v-for="letter in alphabets"-->
|
||||
<!-- :key="letter"-->
|
||||
<!-- :class="['alphabet-item', activeAlphabet === letter ? 'active' : '']"-->
|
||||
<!-- @click="changeAlphabet(letter)"-->
|
||||
<!-- >-->
|
||||
<!-- {{ letter }}-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
</div>
|
||||
|
||||
<!-- 应用网格 -->
|
||||
<div class="apps-grid" v-if="applications.length > 0">
|
||||
<div v-for="app in applications" :key="app.id" class="app-card" @click.stop="openApp(app)">
|
||||
<div :class="['app-icon', app.iconType]">
|
||||
<i v-if="app.icon" :class="app.icon"></i>
|
||||
<img v-if="app.picIcon" :src="app.picIcon" :alt="app.name || ''" />
|
||||
<i v-else class="fa fa-skype"></i>
|
||||
</div>
|
||||
<div class="app-info">
|
||||
|
||||
@@ -43,6 +43,15 @@ layout("/layouts/platform.html"){
|
||||
:rules="{ required: true, message: '请输入类型名称', trigger: 'blur' }">
|
||||
<el-input v-model="formData.name" placeholder="请输入类型名称"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="picIcon" label="图片图标">
|
||||
<file-upload
|
||||
:value.sync="formData.picIcon"
|
||||
:upload_number="1"
|
||||
upload_mode="image"
|
||||
upload_result_category="interval"
|
||||
upload_result_type="url"
|
||||
></file-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<el-input v-model="formData.icon" placeholder="请输入图标"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
@@ -101,6 +101,15 @@ layout("/layouts/platform.html"){
|
||||
<el-form-item label="手机端查看地址" prop="h5InstanceViewUrl">
|
||||
<el-input v-model="formData.h5InstanceViewUrl" placeholder="请输入手机端发起地址"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="picIcon" label="图片图标">
|
||||
<file-upload
|
||||
:value.sync="formData.picIcon"
|
||||
:upload_number="1"
|
||||
upload_mode="image"
|
||||
upload_result_category="interval"
|
||||
upload_result_type="url"
|
||||
></file-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<el-input v-model="formData.icon" placeholder="请输入图标"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
@@ -23,8 +23,10 @@ const apps = {
|
||||
@click="onClickNav(index)"
|
||||
>
|
||||
<div class="nav-icon">
|
||||
<i v-if="category.icon" :class="category.icon"></i>
|
||||
<i v-else class="fa fa-book"></i>
|
||||
<!--<i v-if="category.icon" :class="category.icon"></i>
|
||||
<i v-else class="fa fa-book"></i>-->
|
||||
<img v-if="category.picIcon" :src="category.picIcon" :alt="category.name || ''" style="width: 18px"/>
|
||||
<i v-else :class="category.icon || 'fa fa-th-large'"></i>
|
||||
</div>
|
||||
<div class="nav-text">{{ category.name }}</div>
|
||||
<div class="nav-indicator" v-if="activeTab === index"></div>
|
||||
@@ -46,7 +48,7 @@ const apps = {
|
||||
@touchmove="onTouchMove">
|
||||
<!-- 图标 -->
|
||||
<div class="app-grid-icon">
|
||||
<van-icon v-if="app.picIcon" :name="app.picIcon" size="64" style="border-radius: 12px; width: 64px; height: 64px;"></van-icon>
|
||||
<van-icon v-if="app.picIcon" :name="app.picIcon" size="45"></van-icon>
|
||||
<van-icon v-else-if="app.icon" :name="app.icon" size="28"></van-icon>
|
||||
<van-icon v-else name="apps-o" size="28"></van-icon>
|
||||
</div>
|
||||
@@ -57,7 +59,7 @@ const apps = {
|
||||
</div>
|
||||
<!-- 空状态 -->
|
||||
<van-empty v-else description="暂无应用"></van-empty>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -75,7 +77,8 @@ const apps = {
|
||||
class="grid-item"
|
||||
@click="navigateToMenu(menu)"
|
||||
>
|
||||
<div class="grid-icon">
|
||||
<img v-if="menu.picIcon" :src="menu.picIcon" :alt="menu.name || ''" style="width: 48px" class="grid-img"/>
|
||||
<div v-else class="grid-icon">
|
||||
<van-icon :name="menu.icon || 'apps-o'" size="24"></van-icon>
|
||||
</div>
|
||||
<div class="grid-name">{{ menu.name }}</div>
|
||||
@@ -407,11 +410,11 @@ const apps = {
|
||||
.app-grid {
|
||||
display: grid;
|
||||
/* 改为自适应列数:每格最小 80px,自动换行 */
|
||||
grid-template-columns: repeat(auto-fit, minmax(80px, 1fr));
|
||||
grid-template-columns: repeat(auto-fit, minmax(60px, 1fr));
|
||||
|
||||
justify-items: center; /* 子项内容居中(图标和文字) */
|
||||
justify-content: start; /* 整体网格靠左对齐,避免居中 */
|
||||
|
||||
|
||||
gap: 12px;
|
||||
padding: 12px;
|
||||
background: #fff;
|
||||
@@ -442,25 +445,25 @@ const apps = {
|
||||
}
|
||||
|
||||
.app-grid-icon {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
max-width: 64px;
|
||||
max-height: 64px;
|
||||
border-radius: 12px;
|
||||
background: #f2f3f5;
|
||||
width: 45px;
|
||||
height: 45px;
|
||||
max-width: 45px;
|
||||
max-height: 45px;
|
||||
/*border-radius: 12px;
|
||||
background: #f2f3f5;*/
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-bottom: 6px;
|
||||
overflow: hidden;
|
||||
|
||||
border: 2px solid transparent;
|
||||
/*border: 2px solid transparent;*/
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.app-grid-name {
|
||||
width: 100%;
|
||||
font-size: 12px;
|
||||
font-size: 14px;
|
||||
color: #323233;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
@@ -540,6 +543,17 @@ const apps = {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/deep/ .grid-img {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: 12px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-bottom: 12px;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/deep/ .grid-name {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
@@ -576,6 +590,6 @@ const apps = {
|
||||
font-size: 16px;
|
||||
color: #c8c9cc;
|
||||
}
|
||||
|
||||
|
||||
`
|
||||
}
|
||||
|
||||
@@ -178,7 +178,8 @@ const todo = {
|
||||
// 处理任务
|
||||
onView(task) {
|
||||
const {taskId, taskKey, instanceId, businessNo, formKey} = task;
|
||||
|
||||
this.$toast("暂未开通从当前地址点击查看!");
|
||||
return;
|
||||
if (!formKey) {
|
||||
this.$toast("当前流程没有配置地址");
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user