dev2 #1

Open
panjunjie wants to merge 174 commits from dev2 into main
13 changed files with 438 additions and 224 deletions
Showing only changes of commit c709db096c - Show all commits

View File

@ -0,0 +1,29 @@
import request from '@/utils/request'
import { URL } from '@/config'
/**
* 个推测试接口
* @author Seven
* @data 2025-1-6
* @param {
*
* "cid": "13128997057", // 终端id
"title": "小发同城", // 标题
"message": "尊敬的商家,你有一条新的订单,请及时处理!", // 推送内容
"clickType":"url", // 点击类型
"clickContent":"https://mall.gpxscs.cn"// 跳转地址
* }
* @returns { }
* @see https://mall.gpxscs.cn/mobile/account/login/push/testcase
*/
export function orderPushTest(params) {
return request({
url: URL.orderPush.orderPushTest,
method: 'post',
headers: {
'Content-Type': 'application/json',
},
data: params,
})
}

View File

@ -29,6 +29,9 @@ let url = {
disableUpdateShopApp:
api_url + '/admin/admin/app-market-update/enable-or-disable',
},
orderPush: {
orderPushTest: api_url + '/mobile/account/login/push/testcase',
},
city: {
user: {
paotuier: {

View File

@ -15,6 +15,7 @@ const state = () => ({
avatar: 'https://i.gtimg.cn/club/item/face/img/2/15922_100.gif',
rid: 0,
site_id: 0,
isAdmin: localStorage.getItem('isAdmin') || 0,
})
const getters = {
token: (state) => state.token,
@ -61,6 +62,9 @@ const mutations = {
setSiteId(state, site_id) {
state.site_id = site_id
},
setIsAdmin(state, isAdmin) {
state.isAdmin = isAdmin
},
}
const actions = {
/**
@ -79,6 +83,13 @@ const actions = {
*/
async login({ commit }, userInfo) {
const { data, msg, status, code } = await login(userInfo)
if (data && data.user_account == 'admin') {
commit('setIsAdmin', 1)
localStorage.setItem('isAdmin', 1)
} else {
commit('setIsAdmin', 0)
localStorage.setItem('isAdmin', 0)
}
if (status != 200) {
Vue.prototype.$baseMessage(msg, 'error', 'vab-hey-message-error')
@ -199,6 +210,7 @@ const actions = {
* @param {*} { dispatch }
*/
async logout({ dispatch }) {
localStorage.setItem('isAdmin', 0)
await logout()
await dispatch('resetAll')
},

View File

@ -4,7 +4,7 @@ import { isExternal } from 'vue-plugin-utils'
import { recordRoute } from '@/config'
import qs from 'qs'
import icon from "../views/403.vue"
import icon from '../views/403.vue'
/**
* @description all模式渲染后端返回路由,支持包含views路径的所有页面
@ -13,267 +13,281 @@ import icon from "../views/403.vue"
*/
export function convertRouter(asyncRoutes) {
return asyncRoutes.map((route) => {
if(route.meta.title == '店铺' && route.name == 'Vab330'){
if (route.meta.title == '店铺' && route.name == 'Vab330') {
const obj = {
path:"/shopAudit",
"component":"@/views/store/shopAudit/shopAudit",
name: "Vab83000",
path: '/shopAudit',
component: '@/views/store/shopAudit/shopAudit',
name: 'Vab83000',
redirect: null,
meta: {
title: "商家入驻审批",
icon: "",
noClosable: 0,
hidden: null
title: '商家入驻审批',
icon: '',
noClosable: 0,
hidden: null,
},
menuHidden: false
menuHidden: false,
}
route.children.splice(0,0,obj)
route.children.splice(0, 0, obj)
}
if(route.meta.title == '设置'){
const obj = {
path: "/receiptMachine",
"component":"@/views/settings/config/receiptMachine",
name: "Vab86001",
if (route.meta.title == '设置') {
const obj = {
path: '/receiptMachine',
component: '@/views/settings/config/receiptMachine',
name: 'Vab86001',
redirect: null,
meta: {
title: "小票机品牌",
icon: "",
noClosable: 0,
hidden: null
title: '小票机品牌',
icon: '',
noClosable: 0,
hidden: null,
},
menuHidden: false
menuHidden: false,
}
route.children.push(obj);
}
route.children.push(obj)
}
if(route.meta.title == "基础"){
if (route.meta.title == '基础') {
const cloudPrintRoute = {
path: "/cloudPrint",
name: "Vab81000",
"component":"@/views/vab/icon",
path: '/cloudPrint',
name: 'Vab81000',
component: '@/views/vab/icon',
redirect: null,
meta: {
"title": "云打印",
"icon": "",
"noClosable": 0,
"hidden": null
title: '云打印',
icon: '',
noClosable: 0,
hidden: null,
},
menuHidden: false,
children: [
{
path: "/plotterManager",
"component":"@/views/store/base/cloudPrint/plotterManager",
name: "Vab81001",
redirect: null,
meta: {
title: "打印机管理",
icon: "",
noClosable: 0,
hidden: null
},
menuHidden: false
{
path: '/plotterManager',
component: '@/views/store/base/cloudPrint/plotterManager',
name: 'Vab81001',
redirect: null,
meta: {
title: '打印机管理',
icon: '',
noClosable: 0,
hidden: null,
},
{
path: "/addCloudPrint",
"component":"@/views/store/base/cloudPrint/editCloudPrint",
name: "Vab81002",
redirect: null,
meta: {
title: "添加打印机",
icon: "",
noClosable: 0,
hidden: true
},
menuHidden: false
menuHidden: false,
},
{
path: '/addCloudPrint',
component: '@/views/store/base/cloudPrint/editCloudPrint',
name: 'Vab81002',
redirect: null,
meta: {
title: '添加打印机',
icon: '',
noClosable: 0,
hidden: true,
},
{
path: "/editCloudPrint",
"component":"@/views/store/base/cloudPrint/editCloudPrint",
name: "Vab81003",
redirect: null,
meta: {
title: "编辑打印机",
icon: "",
noClosable: 0,
hidden: true
},
menuHidden: false
menuHidden: false,
},
{
path: '/editCloudPrint',
component: '@/views/store/base/cloudPrint/editCloudPrint',
name: 'Vab81003',
redirect: null,
meta: {
title: '编辑打印机',
icon: '',
noClosable: 0,
hidden: true,
},
{
path: "/templateManagement",
"component":"@/views/store/base/cloudPrint/templateManagement",
name: "Vab81004",
redirect: null,
meta: {
title: "模板管理",
icon: "",
noClosable: 0,
hidden: null
},
menuHidden: false
menuHidden: false,
},
{
path: '/templateManagement',
component: '@/views/store/base/cloudPrint/templateManagement',
name: 'Vab81004',
redirect: null,
meta: {
title: '模板管理',
icon: '',
noClosable: 0,
hidden: null,
},
{
path: "/templateManagementAdd",
"component":"@/views/store/base/cloudPrint/editTemplateManagement",
name: "Vab81005",
redirect: null,
meta: {
title: "添加模板",
icon: "",
noClosable: 0,
hidden: true
},
menuHidden: false
menuHidden: false,
},
{
path: '/templateManagementAdd',
component: '@/views/store/base/cloudPrint/editTemplateManagement',
name: 'Vab81005',
redirect: null,
meta: {
title: '添加模板',
icon: '',
noClosable: 0,
hidden: true,
},
{
path: "/templateManagementEdit",
"component":"@/views/store/base/cloudPrint/editTemplateManagement",
name: "Vab81006",
redirect: null,
meta: {
title: "编辑模板",
icon: "",
noClosable: 0,
hidden: true
},
menuHidden: false
}
]
menuHidden: false,
},
{
path: '/templateManagementEdit',
component: '@/views/store/base/cloudPrint/editTemplateManagement',
name: 'Vab81006',
redirect: null,
meta: {
title: '编辑模板',
icon: '',
noClosable: 0,
hidden: true,
},
menuHidden: false,
},
],
}
const distributionSetup = {
path: "/distributionSetup",
name: "Vab82000",
"component":"@/views/vab/icon",
path: '/distributionSetup',
name: 'Vab82000',
component: '@/views/vab/icon',
redirect: null,
meta: {
"title": "配送设置",
"icon": "",
"noClosable": 0,
"hidden": null
title: '配送设置',
icon: '',
noClosable: 0,
hidden: null,
},
menuHidden: false,
children: [
{
path: "/distributionMode",
"component":"@/views/store/base/distributionSetup/distributionMode",
name: "Vab82001",
redirect: null,
meta: {
title: "配送方式",
icon: "",
noClosable: 0,
hidden: null
},
menuHidden: false
{
path: '/distributionMode',
component: '@/views/store/base/distributionSetup/distributionMode',
name: 'Vab82001',
redirect: null,
meta: {
title: '配送方式',
icon: '',
noClosable: 0,
hidden: null,
},
{
path: "/logisticsInterface",
"component":"@/views/store/base/distributionSetup/logisticsInterface",
name: "Vab82002",
redirect: null,
meta: {
title: "物流接口",
icon: "",
noClosable: 0,
hidden: null
},
menuHidden: false
menuHidden: false,
},
{
path: '/logisticsInterface',
component:
'@/views/store/base/distributionSetup/logisticsInterface',
name: 'Vab82002',
redirect: null,
meta: {
title: '物流接口',
icon: '',
noClosable: 0,
hidden: null,
},
{
path: "/localDelivery",
"component":"@/views/store/base/distributionSetup/localDelivery",
name: "Vab82003",
redirect: null,
meta: {
title: "同城配送",
icon: "",
noClosable: 0,
hidden: true
},
menuHidden: false
menuHidden: false,
},
{
path: '/localDelivery',
component: '@/views/store/base/distributionSetup/localDelivery',
name: 'Vab82003',
redirect: null,
meta: {
title: '同城配送',
icon: '',
noClosable: 0,
hidden: true,
},
{
path: "/selfPickUpSite",
"component":"@/views/store/base/distributionSetup/selfPickUpSite",
name: "Vab82004",
redirect: null,
meta: {
title: "自提点列表",
icon: "",
noClosable: 0,
hidden: true
},
menuHidden: false
menuHidden: false,
},
{
path: '/selfPickUpSite',
component: '@/views/store/base/distributionSetup/selfPickUpSite',
name: 'Vab82004',
redirect: null,
meta: {
title: '自提点列表',
icon: '',
noClosable: 0,
hidden: true,
},
{
path: "/selfPickUpSiteAdd",
"component":"@/views/store/base/distributionSetup/editSelfPickUpSite",
name: "Vab82005",
redirect: null,
meta: {
title: "编辑自提点",
icon: "",
noClosable: 0,
hidden: true
},
menuHidden: false
menuHidden: false,
},
{
path: '/selfPickUpSiteAdd',
component:
'@/views/store/base/distributionSetup/editSelfPickUpSite',
name: 'Vab82005',
redirect: null,
meta: {
title: '编辑自提点',
icon: '',
noClosable: 0,
hidden: true,
},
{
path: "/selfPickUpSiteEdit",
"component":"@/views/store/base/distributionSetup/editSelfPickUpSite",
name: "Vab82006",
redirect: null,
meta: {
title: "编辑自提点",
icon: "",
noClosable: 0,
hidden: true
},
menuHidden: false
menuHidden: false,
},
{
path: '/selfPickUpSiteEdit',
component:
'@/views/store/base/distributionSetup/editSelfPickUpSite',
name: 'Vab82006',
redirect: null,
meta: {
title: '编辑自提点',
icon: '',
noClosable: 0,
hidden: true,
},
]
menuHidden: false,
},
],
}
route.children.push(...[cloudPrintRoute,distributionSetup]);
route.children = route.children.filter(item=>item.name != 'Vab8083')
route.children.push(...[cloudPrintRoute, distributionSetup])
route.children = route.children.filter((item) => item.name != 'Vab8083')
}
if(route.meta.title == '设置' && route.name == 'Settings'){
if (route.meta.title == '设置' && route.name == 'Settings') {
const obj = {
path: "/appVersion",
"component":"@/views/settings/config/appVersion",
name: "Vab9019",
path: '/appVersion',
component: '@/views/settings/config/appVersion',
name: 'Vab9019',
redirect: null,
meta: {
title: "商家APP设置",
icon: "",
noClosable: 0,
hidden: null
title: '商家APP设置',
icon: '',
noClosable: 0,
hidden: null,
},
menuHidden: false
menuHidden: false,
}
route.children.splice(0,0,obj)
route.children.splice(0, 0, obj)
}
if (route.meta.title == '订单' && route.name == 'Vab350') {
const obj = {
path: '/orderPush',
component: '@/views/order/orderPush/orderPush',
name: 'Vab8088',
redirect: null,
meta: {
title: '个推订单测试',
icon: '',
noClosable: 0,
hidden: null,
},
menuHidden: false,
}
route.children.splice(0, 0, obj)
}
if (route.component) {
if (route.component === 'Layout') {
route.component = (resolve) => require(['@/vab/layouts'], resolve);
route.component = (resolve) => require(['@/vab/layouts'], resolve)
} else {
const index = route.component.indexOf('views')
const path = index > 0 ? route.component.slice(index) : `views/${route.component}`;
const path =
index > 0 ? route.component.slice(index) : `views/${route.component}`
route.component = (resolve) => require([`@/${path}`], resolve)
}
}

View File

@ -313,7 +313,7 @@
&-horizontal {
justify-content: left;
width: $base-left-menu-width-min * 1.3;
height: #{math.div($base-left-menu-width-min, 1.3)};
height: calc(#{math.div($base-left-menu-width-min, 1.3)});
padding-left: #{math.div($base-padding, 2)};
}
}

View File

@ -60,6 +60,15 @@
</el-button>
</template>
</el-table-column>
<el-table-column
v-if="isAdmin"
align="center"
label="店铺名称"
prop="store_name"
show-overflow-tooltip
width="200"
>
</el-table-column>
<el-table-column
align="center"
:label="__('品牌编号')"
@ -195,7 +204,7 @@
import { getTree } from '@/api/base/product/category'
import Edit from './components/brandManagementEdit'
import { translateTitle as __ } from '@/utils/i18n'
import { mapState } from "vuex";
export default {
name: 'BrandManagement',
components: { Edit },
@ -218,6 +227,9 @@
},
}
},
computed:{
...mapState('user',['isAdmin'])
},
created() {
this.fetchData()
this.getTree()

View File

@ -128,6 +128,13 @@
prop="category_order"
width="100"
/>
<el-table-column
v-if="isAdmin"
align="center"
label="店铺名称"
prop="store_name"
width="200"
/>
<el-table-column
align="center"
:label="__('移动专题')"
@ -143,7 +150,7 @@
import { doDelete, doEdit, getList } from '@/api/base/product/category'
import Edit from './components/categoryManagementEdit'
import { translateTitle as __ } from '@/utils/i18n'
import { mapState } from "vuex";
export default {
name: 'CategoryManagement',
// eslint-disable-next-line vue/no-unused-components
@ -154,6 +161,9 @@
listLoading: true,
}
},
computed:{
...mapState('user',['isAdmin'])
},
created() {
this.fetchData()
},

View File

@ -55,6 +55,14 @@
prop="spec_id"
show-overflow-tooltip
/>
<el-table-column
v-if="isAdmin"
align="center"
label="店铺名称"
prop="store_name"
width="200"
show-overflow-tooltip
/>
<el-table-column
align="center"
:label="__('规格类别名称')"
@ -110,7 +118,7 @@
import { doDelete, getList } from '@/api/base/product/spec'
import Edit from './components/specManagementEdit'
import { translateTitle as __ } from '@/utils/i18n'
import { mapState } from "vuex";
export default {
name: 'SpecManagement',
components: { Edit },
@ -131,6 +139,9 @@
},
}
},
computed:{
...mapState('user',['isAdmin'])
},
created() {
this.fetchData()
},
@ -198,8 +209,11 @@
async fetchData() {
this.listLoading = true
const { data } = await getList(this.queryForm)
this.list = data.items
this.total = data.records
if(data && data.items.length > 0){
this.list = data.items
this.total = data.records
}
this.listLoading = false
},
},

View File

@ -51,6 +51,14 @@
prop="type_id"
show-overflow-tooltip
/>
<el-table-column
v-if="isAdmin"
align="center"
label="店铺名称"
prop="store_name"
width="200"
show-overflow-tooltip
/>
<el-table-column
align="center"
:label="__('类型名称')"
@ -90,7 +98,7 @@
import { doDelete, getList } from '@/api/base/product/type'
import Edit from './components/BaseProductTypeEdit'
import { mapState } from "vuex";
export default {
name: 'BaseProductType',
components: { Edit },
@ -111,6 +119,9 @@
},
}
},
computed:{
...mapState('user',['isAdmin'])
},
created() {
this.fetchData()
},

View File

@ -1164,7 +1164,10 @@ export default {
async statisticCount(days) {
this.polylineLoading = true
const { data } = await statisticCount({ days: days })
if (!data) return
if (!data){
this.polylineLoading = false
return;
}
this.polylineOption.xAxis.data = data.map((item) => item.curr_date)
this.polylineOption.series[0].data = data.map(
(item) => item.effective_count

View File

@ -0,0 +1,76 @@
<template>
<div class="orderPush-container">
<div class="cid-content">
<div class="cid-lable">CID:</div>
<el-input style="width: 400px;" v-model="cid" placeholder="请输入内容"></el-input>
</div>
<el-input
type="textarea"
:autosize="{ minRows: 10, maxRows: 10}"
placeholder="请输入内容"
v-model="textarea">
</el-input>
<div class="btn-order-push" >
<el-button type="primary" @click="testOrderPush">测试推送</el-button>
</div>
</div>
</template>
<script>
import { orderPushTest } from '@/api/orderPush/orderPush'
export default {
data(){
return{
textarea:"测试推送到手机",
cid:'e39150691541a18fd86ef4cf08415bc4'
}
},
methods:{
async testOrderPush(){
let pamres = {
cid: this.cid, // id
title: "小发同城", //
message: this.textarea,
"clickType":"url", //
"clickContent":"https://mall.gpxscs.cn"//
}
let res = await orderPushTest(pamres)
if(res && res.second == '推送成功'){
this.$message({
message: '推送成功',
type: 'success'
});
}else{
this.$message({
message: res.msg || res.second,
type: 'error'
});
}
}
}
}
</script>
<style lang="scss">
.orderPush-container{
.cid-content{
display: flex;
align-items: center;
margin: 20px 0;
.cid-lable{
margin-right: 20px;
}
}
.btn-order-push{
margin: 20px auto;
text-align: center;
}
}
</style>

View File

@ -86,7 +86,28 @@
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<div class="grid-content bg-purple">
<el-form-item
label="营业状态"
label-width="150px"
prop="store_district_id"
>
<el-switch
v-model="storeForm.store_biz_state"
active-color="#13ce66"
:active-value="1"
:inactive-value="2"
inactive-color="#ff4949"
active-text="营业中"
@change="handleStoreStatus"
inactive-text="已打烊">
</el-switch>
</el-form-item>
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<div class="grid-content bg-purple">
@ -431,6 +452,7 @@ import tree from '@/components/universalTreeSelect.vue'
import keyword from '@/components/baiduMap/keyword'
import { get, storeSetUp } from '@/api/store/base'
import { getTree } from '@/api/base/market/category'
import { handleMatched } from '@/utils/routes'
export default {
name: 'SetUpShop',
@ -483,6 +505,7 @@ export default {
},
placeholder: '',
readOnly: false,
isRest:false
},
defaultProps: {
label: 'category_name',
@ -570,6 +593,7 @@ export default {
store_qq: form.store_qq,
store_ww: form.store_ww,
company_description: form.company_description,
store_biz_state:form.store_biz_state
}
if (this.queryArea.province.name) {
@ -594,6 +618,9 @@ export default {
return params
},
handleStoreStatus(e){
this.storeForm.store_biz_state = e;
},
getSlideShowForm() {
const form = this.slideShowForm
let params = {
@ -671,6 +698,7 @@ export default {
store_ww: data.info.store_ww,
company_description: data.company.company_description,
wx_qrcode: data.wx_qrcode,
store_biz_state:data.store_biz_state
}
this.srcList.push(data.wx_qrcode)

View File

@ -597,7 +597,7 @@
<el-button
class="btn"
type="danger"
v-if="form.signed_status <= 0 && form.approval_status !=5"
v-if="form.signed_status <= 0"
@click="getMerchApproval(2)"
>
驳回审核
@ -940,7 +940,7 @@ export default {
approvalRemark: this.form.approval_remark,
approvalInvalidCol: this.checkboxList.filter(item => !['businessLicenseOCR', 'legalPersonOCR','personOCR','bankOCR'].includes(item)),
}
let res = await getMerchApproval(parems)
if (res && res.status == 200) {
this.$message({
@ -1010,7 +1010,7 @@ export default {
handlecheckbox(e) {
// <!-- --!>
if(e.includes('legalPersonOCR')){
if(e.includes('legalPersonOCR') && !this.checkboxList.some(item => item === 'legal_person_id_number')){
let arr = [
'legal_person_id_number',
@ -1024,7 +1024,7 @@ export default {
this.checkboxList = [...arr,...this.checkboxList ]
}
// <!-- --!>
if(e.includes('personOCR')){
if(e.includes('personOCR')&& !this.checkboxList.some(item => item === 'individual_id_number')){
let arr = [
'individual_id_number',
@ -1039,7 +1039,7 @@ export default {
this.checkboxList = [...arr,...this.checkboxList]
}
// <!-- , --!>
if(e.includes('bankOCR')){
if(e.includes('bankOCR')&& !this.checkboxList.some(item => item === 'bankcard_item')){
let arr = [
'bankcard_item',
@ -1051,7 +1051,7 @@ export default {
this.checkboxList = [...arr,...this.checkboxList]
}
//
if(e.includes('businessLicenseOCR')){
if(e.includes('businessLicenseOCR')&& !this.checkboxList.some(item => item === 'biz_license_image')){
let arr = [
'biz_license_image',
@ -1065,10 +1065,12 @@ export default {
this.checkboxList = [...arr,...this.checkboxList]
}
if(e.includes("mapAddress")){
if(e.includes("mapAddress") && !this.checkboxList.some(item => item === 'store_address')){
this.checkboxList = ['store_address',...this.checkboxList];
}
console.log(this.checkboxList)
},
handleCheckAllChange(val) {
if (this.form.entity_type == 1) {