This commit is contained in:
2026-09-09 16:16:22 +08:00
parent ebffbab428
commit ba3a985c40
3749 changed files with 29 additions and 608551 deletions
@@ -1,193 +0,0 @@
<!--#
layout("/mobile/platform.html"){
#-->
<style>
.van-card {
background: #ffffff;
margin-top: 10px;
}
.welfare_card {
position: relative;
}
.welfare_card .receive_img {
position: absolute;
right: 10px;
top: 0px;
}
.van-card__thumb {
display: flex;
align-items: center;
justify-content: center;
height: 110px;
width: 110px;
}
input[type="button"], input[type="submit"], input[type="reset"] {
-webkit-appearance: none;
}
textarea {
-webkit-appearance: none;
}
a:visited {
color: rgb(24, 103, 176)
}
a:active {
color: red;
}
.qrCodeImg {
width: 100%;
height: 100%;
background-color: #fff;
}
</style>
<div id="app" v-cloak>
<m-page-loading v-if="mLoading"></m-page-loading>
<van-nav-bar
title="商超及购物网站"
left-arrow
placeholder
fixed
@click-left="window.history.back()">
</van-nav-bar>
<van-sticky>
<van-tabs v-model="pageForm.tabName" @change="tabChange">
<van-tab title="商超" name="商超"></van-tab>
<van-tab title="购物网站" name="购物网站"></van-tab>
</van-tabs>
</van-sticky>
<van-list :finished="finished" :finished-text="tableData.length>0?'没有更多了':''"
v-if="tableData && tableData.length>0"
v-model="loading"
@load="pageData">
<template v-for="o in tableData">
<div class="welfare_card">
<van-card>
<template #thumb>
<img :src="FILE_STREAM_PREVIEW_ADDRESS+'?id='+o.iconId" alt="" class="van-image__img"
v-if="o.iconId">
<image v-else src="/assets/mobile/svg/welfare/welfareHome.svg"></image>
</template>
<template #title>
<div class="van-ellipsis" style="font-size: 15px;font-weight: bold;flex: 3">{{o.shoppingName}}
</div>
<div class="van-ellipsis" style="float: right" v-if="o.qrCodeId">
<van-button round type="info" size="mini" @click.stop="openQrCode(o.qrCodeId)"
v-if="o.isEnable">查看二维码
</van-button>
</div>
</template>
<template #desc>
<div class="van-ellipsis" style="flex: 1">联系人:{{o.userName}}</div>
<div class="van-ellipsis" style="flex: 1">联系方式:{{o.mobile}}</div>
<div class="van-ellipsis" style="flex: 1">类型:{{o.typeName}}</div>
<div class="van-ellipsis" style="flex: 1">网址:
<template v-if="o.isEnable">
<a v-if="o.link" :href="o.link">{{o.link}}</a>
<template v-else>暂无</template>
</template>
<template v-else>
{{o.link}}
</template>
</div>
<div class="van-ellipsis" style="flex: 1">启用状态:{{o.isEnable?'已启用':'未启用'}}</div>
</template>
</van-card>
<div class="receive_img">
</div>
</div>
</template>
</van-list>
<van-empty v-else description="暂无数据"></van-empty>
<van-dialog v-model="qrCodeDialog" confirm-button-color="#1989fa">
<img class="qrCodeImg" :src="FILE_STREAM_PREVIEW_ADDRESS+'?id='+qrCodeId">
</van-dialog>
</div>
<script>
var vue = new Vue({
el: '#app',
mixins: [mobileMixins],
data() {
return {
qrCodeId: null,
qrCodeDialog: false,
tabName: "商超"
}
},
methods: {
openQrCode(id) {
this.qrCodeId = id
this.qrCodeDialog = true
},
async pageData() {
this.mLoading = true
this.pageForm.typeName = JSON.stringify([this.tabName])
const resp = await $.post('/platform/shoppingType/apply/pageData', this.pageForm)
if (resp.code === 0) {
if (resp.data.list.length === 0) {
this.tableData = []
this.loading = false
this.finished = true
} else {
resp.data.list.forEach(v => {
if (v.qrCode) v.qrCodeId = JSON.parse(v.qrCode)[0].id
if (v.icon) v.iconId = JSON.parse(v.icon)[0].id
})
this.tableData = this.tableData.concat(resp.data.list)
}
if (this.tableData.length === resp.data.totalCount) {
this.finished = true
} else {
this.pageForm.pageNumber++
}
}
this.loading = false;
this.mLoading = false
},
tabChange(val) {
this.tabName = val
this.pageData()
}
},
async created() {
this.startLoading()
this.pageData()
this.closeLoading()
}
})
</script>
<!--#
}
#-->
@@ -1,428 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div class="platform" id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
@change="doSearch"
placeholder="选择年"
style="width: 100%"
type="year" v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">名称:</div>
<div class="search-item-option">
<el-input placeholder="请输入名称" v-model="pageForm.shoppingName" clearable
@keyup.enter.native="doSearch()">
</el-input>
</div>
</div>
<div class="search-item">
<div class="search-item-label">类型:</div>
<div class="search-item-option">
<el-checkbox-group v-model="pageForm.typeName" max="1">
<el-checkbox-button label="商超" key="商超">&emsp;&emsp;
</el-checkbox-button>
<el-checkbox-button label="购物网站" key="购物网站">购物网站
</el-checkbox-button>
</el-checkbox-group>
</div>
</div>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索
</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="商超和购物网站">
<template #func>
<el-button @click="openAdd" type="primary">新建
</el-button>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize"
@sort-change="pageOrder"
class="vi-table" row-key="id" style="width: 100%;margin-bottom: 20px"
v-loading="tableLoading">
<el-table-column :index="indexMethod" align="center" header-align="center"
label="序号" type="index"
width="80px"></el-table-column>
<el-table-column
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
show-overflow-tooltip
v-for="column in tableColumns">
<template scope="{row}" v-if="column.prop=='link'">
<el-link @click="openLink(row.link)" type="primary">{{row.link}}
</el-link>
</template>
<template scope="{row}" v-else-if="column.prop=='qrCode'">
<el-image
:src="APP_DOMAIN+'/file_server/fileStreamPreview?id='+row.qrCodeId"
:preview-src-list="[APP_DOMAIN+'/file_server/fileStreamPreview?id='+row.qrCodeId]"
v-if="row.qrCodeId">
</el-image>
<template v-else>暂无</template>
</template>
<template scope="{row}" v-else-if="column.prop=='isEnable'">
<el-switch v-model="row.isEnable"
@change="isEnableChange(row.isEnable,row.id)"
active-color="#13ce66"
inactive-color="#ff4949">
</el-switch>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作"
prop="userOnline" width="300px">
<template scope="{row}">
<el-button size="mini" type="primary" plain @click="openView(row)">
查看
</el-button>
<el-button size="mini" type="primary" @click="openEdit(row)">
编辑
</el-button>
<el-button size="mini" type="danger" @click="doDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #view>
<el-form :model="formData" label-position="right" label-suffix=""
label-width="130px" :rules="rules">
<el-row :gutter="60">
<el-col :span="12">
<el-form-item label="年度">
{{viewData.year}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="名称">
{{viewData.shoppingName}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人">
{{viewData.userName?viewData.userName:'暂无'}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系方式">
{{viewData.mobile?viewData.mobile:'暂无'}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="类型">
{{viewData.typeName?viewData.typeName:'暂无'}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="网址">
<el-link @click="openLink(viewData.link)" type="primary"
v-if="viewData.link">
{{viewData.link}}
</el-link>
<template v-else></template>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="简介">
{{viewData.简介?viewData.简介:'暂无'}}
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="图标">
<file-upload :files.sync="viewData.icon" view></file-upload>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="二维码">
<file-upload :files.sync="viewData.qrCode" view></file-upload>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<template #edit>
<el-form :model="formData" label-position="right" label-suffix=""
label-width="130px" :rules="rules" ref="addForm">
<el-row :gutter="60">
<el-col :span="12">
<el-form-item label="年度" prop="year">
<el-input v-model="formData.year" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="名称" prop="shoppingName">
<el-input placeholder="请输入名称"
v-model="formData.shoppingName"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人" prop="userName">
<el-input placeholder="请输入名称" v-model="formData.userName"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系方式" prop="mobile">
<el-input placeholder="请输入联系方式" v-model="formData.mobile"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="类型" prop="typeName">
<el-select v-model="formData.typeName" style="width: 100%"
placeholder="请选择类型">
<el-option label="商超" value="商超"></el-option>
<el-option label="购物网站" value="购物网站"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="网址" prop="link">
<el-input placeholder="请输入网址" v-model="formData.link"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="简介" prop="brief">
<el-input type="textarea" placeholder="请输入简介"
v-model="formData.brief"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="图标" prop="icon">
<file-upload card :files.sync="formData.icon" :max="1"
:type="['jpg', 'jpeg', 'png']">
<template #el-upload__tip>
<span style="color: red">
只能上传jpg,jpeg,png格式的一张图片
</span>
</template>
</file-upload>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="二维码" prop="qrCode">
<file-upload card :files.sync="formData.qrCode" :max="1"
:type="['jpg', 'jpeg', 'png','webp']">
<template #el-upload__tip>
<span style="color: red">
只能上传jpg,jpeg,png,webp格式的一张图片
</span>
</template>
</file-upload>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button type="primary" @click="submit()">确 定</el-button>
</div>
</template>
</guava>
</div>
<script>
var vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
viewData: {},
pageForm: {
typeName: [],
year: new Date().getFullYear() + ''
},
formData: {
year: new Date().getFullYear() + '',
shoppingName: null,
userName: null,
mobile: null,
typeName: null,
link: null,
brief: null,
},
tableColumns: [
{prop: 'year', label: '年度', sortable: true},
{prop: 'shoppingName', label: '名称', sortable: true},
{prop: 'userName', label: '联系人', sortable: true},
{prop: 'mobile', label: '联系方式'},
{prop: 'typeName', label: '类型', sortable: true},
{prop: 'qrCode', label: '二维码',},
{prop: 'link', label: '网址',},
{prop: 'isEnable', label: '启用状态', sortable: true},
],
rules: {
year: [{required: true, message: '必填', trigger: ['change', 'blur']}],
shoppingName: [{required: true, message: '必填', trigger: ['change', 'blur']}],
typeName: [{required: true, message: '必填', trigger: ['change', 'blur']}],
}
}
},
methods: {
openView(row) {
this.viewData = row
this.$refs.guava.view()
},
doDelete(id) {
this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const resp = await $.post(loc() + "/doDelete", {id: id})
if (resp.code === 0) {
this.notifySuccess(resp.msg)
}
this.doSearch()
})
},
openLink(url) {
window.open(url)
},
async isEnableChange(val, id) {
const resp = await $.post(loc() + "/isEnableChange", {isEnable: val, id: id})
if (resp.code === 0) {
this.notifySuccess(resp.msg)
}
this.doSearch()
},
openAdd() {
this.formData = {
year: new Date().getFullYear() + '',
shoppingName: null,
userName: null,
mobile: null,
typeName: null,
link: null,
brief: null,
}
this.$refs.guava.edit()
if (this.$refs['addForm']) {
this.$refs['addForm'].resetFields();
}
},
openEdit(row) {
this.formData = {}
this.formData = row
this.$refs.guava.edit()
},
async submit() {
this.$refs["addForm"].validate(async (valid) => {
if (valid) {
const resp = await $.post(loc() + "/submit", {shoppingType: JSON.stringify(this.formData)})
if (resp.code === 0) {
this.notifySuccess(resp.msg)
}
this.doSearch()
this.$refs.guava.index()
}
})
},
pageData() {
sublime.showLoadingbar();
this.tableLoading = true
const pageForm = clone(this.pageForm)
pageForm.typeName = JSON.stringify(pageForm.typeName)
$.post(loc() + "/pageData", pageForm, (data) => {
sublime.closeLoadingbar();
this.tableLoading = false
if (data.code == 0) {
data.data.list.forEach(v => {
if (v.qrCode) v.qrCodeId = JSON.parse(v.qrCode)[0].id
if (v.qrCode) v.qrCode = JSON.parse(v.qrCode)
if (v.icon) v.icon = JSON.parse(v.icon)
})
this.tableData = data.data.list;
this.pageForm.totalCount = data.data.totalCount;
} else {
this.$message.error(data.msg);
}
}, "json");
},
},
async created() {
this.pageData()
}
})
</script>
<!--#
}
#-->