Prechádzať zdrojové kódy

Merge branch 'master' into master-pro

# Conflicts:
#	manifest.json
hxl13994548489 1 rok pred
rodič
commit
6e05581da6

+ 22 - 1
common/router/modules/routes.js

@@ -384,12 +384,33 @@ const routes = [{
 		meta: {
 		meta: {
 			title: '经营信息',
 			title: '经营信息',
 		},
 		},
-	},	{
+	},
+		{
+			path: '/pages/store/headPhoto',
+			name: 'headPhoto',
+			meta: {
+				title: '商户形象',
+			},
+		},
+		{
 		path: '/pages/store/businessQua',
 		path: '/pages/store/businessQua',
 		name: 'businessInfor',
 		name: 'businessInfor',
 		meta: {
 		meta: {
 			title: '营业资质',
 			title: '营业资质',
 		},
 		},
+	},
+	{
+		path: '/pages/store/otherSet',
+		name: 'otherSet',
+		meta: {
+			title: '其他',
+		},
+	},{
+		path: '/pages/store/advertising',
+		name: 'advertising',
+		meta: {
+			title: '广告素材',
+		},
 	},	{
 	},	{
 		path: '/pages/store/addHours',
 		path: '/pages/store/addHours',
 		name: 'addHours',
 		name: 'addHours',

+ 124 - 0
components/ba-tree-picker/README.md

@@ -0,0 +1,124 @@
+## 树形层级选择器
+### 简介
+为统一样式而生,树形层级选择器,picker弹窗形式的,样式和比例参照uniapp的picker和uni-data-picker组件
+* 支持单选、多选、父级选择,当然也支持单层选择
+* 支持Object对象属性自定义映射
+* 支持显示全部选中、部分选中、未选中三种状态
+* 支持快速自定义简单样式(分割线、按钮、标题、对齐等),深入样式可复写css
+
+### 使用方法
+在 `script` 中引入组件
+``` javascript
+	import baTreePicker from "@/components/ba-tree-picker/ba-tree-picker.vue"
+	export default {
+		components: {
+			baTreePicker
+		}
+```
+在 `template` 中使用组件
+``` javascript
+	<ba-tree-picker ref="treePicker" :multiple='false' @select-change="selectChange" title="选择城市"
+		:localdata="listData" valueKey="value" textKey="label" childrenKey="children" />
+```
+在 `script` 中定义打开方法,和选择监听
+``` javascript
+		methods: {
+			// 显示选择器
+			showPicker() {
+				this.$refs.treePicker._show();
+			},
+			//监听选择(ids为数组)
+			selectChange(ids, names) {
+				console.log(ids, names)
+			}
+		}
+```
+在 `template` 中调用打开
+``` javascript
+	<view @click="showPicker">调用选择器</view>
+```
+
+### 属性
+|属性名|类型|默认值|说明|
+|:-|:-:|:--:|-:|
+|localdata|Array|[]|源数据,目前支持tree结构,后续会考虑支持扁平化结构|
+|valueKey|String|id|指定 Object 中 key 的值作为节点数据id|
+|textKey|String|name|指定 Object 中 key 的值作为节点显示内容|
+|childrenKey|String|children|指定 Object 中 key 的值作为节点子集|
+|multiple|Boolean|false|是否多选,默认单选|
+|selectParent|Boolean|true|是否可以选父级,默认可以|
+|title|String| |标题|
+|titleColor|String||标题颜色|
+|confirmColor|String|#0055ff|确定按钮颜色|
+|cancelColor|String|#757575|取消按钮颜色|
+|switchColor|String|#666|节点切换图标颜色|
+|border|Boolean|false|是否有分割线,默认无|
+
+
+
+###  数据格式
+
+注意:必须有id、name(id可通过valueKey来配置为其它键值,如value)字段,且唯一
+
+``` json
+[
+    {
+        id: 1,
+        name: '公司1',
+        children: [{
+            id: 11,
+            name: '研发部',
+            children: [{
+                id: 111,
+                name: '张三',
+                
+            },{
+                id: 112,
+                name: '李四',
+                
+            }]
+        },{
+            id: 12,
+            name: '综合部',
+            
+        } ]
+    },
+    {
+        id: 2,
+        name: '公司2',
+        children: [{
+            id: 21,
+            name: '研发部',
+            
+        },{
+            id: 22,
+            name: '综合部',
+            
+        },{
+            id: 23,
+            name: '财务部',
+            
+        }, ]
+    },
+    {
+        id: 3,
+        name: '公司3'
+    },
+    {
+        id: 4,
+        name: '公司4',
+        children: [{
+            id: 41,
+            name: '研发部',
+            
+        }]
+    }
+]
+```
+</details>
+
+### 方法
+|方法名|参数|默认值|说明|
+|:-|:-:|:--:|-:|
+|_show()| | |显示选择器|
+|_hide()| | |隐藏选择器|

+ 619 - 0
components/ba-tree-picker/ba-tree-picker.vue

@@ -0,0 +1,619 @@
+<!-- 树形层级选择器-->
+<!-- 1、支持单选、多选 -->
+<template>
+	<view>
+		<view class="tree-cover" :class="{'show':showDialog}" @tap="_cancel"></view>
+		<view class="tree-dialog" :class="{'show':showDialog}">
+			<view class="tree-bar">
+				<view class="tree-bar-cancel" :style="{'color':cancelColor}" hover-class="hover-c" @tap="_cancel">取消
+				</view>
+				<view class="tree-bar-title" :style="{'color':titleColor}">{{title}}</view>
+				<view class="tree-bar-confirm" :style="{'color':confirmColor}" hover-class="hover-c" @tap="_confirm">
+					{{multiple?'确定':''}}
+				</view>
+			</view>
+			<view class="tree-view">
+				<scroll-view class="tree-list" :scroll-y="true">
+					<block v-for="(item, index) in treeList" :key="index">
+						<view class="tree-item" :style="[{
+							paddingLeft: item.level*30 + 'rpx'
+						}]" :class="{
+							itemBorder: border === true,
+							show: item.isShow
+						}">
+							<view class="item-label">
+								<view class="item-icon uni-inline-item" @tap.stop="_onItemSwitch(item, index)">
+									<view v-if="!item.isLastLevel&&item.isShowChild" class="switch-on"
+										:style="{'border-left-color':switchColor}">
+									</view>
+									<view v-else-if="!item.isLastLevel&&!item.isShowChild" class="switch-off"
+										:style="{'border-top-color':switchColor}">
+									</view>
+									<view v-else class="item-last-dot" :style="{'border-top-color':switchColor}">
+									</view>
+								</view>
+								<view class="uni-flex-item uni-inline-item" @tap.stop="_onItemSelect(item, index)">
+									<view class="item-name"> {{item.name+(item.childCount?"("+item.childCount+")":'')}}
+									</view>
+									<view class="item-check" v-if="selectParent?true:item.isLastLevel">
+										<view class="item-check-yes" v-if="item.checkStatus==1"
+											:class="{'radio':!multiple}" :style="{'border-color':confirmColor}">
+											<view class="item-check-yes-part"
+												:style="{'background-color':confirmColor}">
+											</view>
+										</view>
+										<view class="item-check-yes" v-else-if="item.checkStatus==2"
+											:class="{'radio':!multiple}" :style="{'border-color':confirmColor}">
+											<view class="item-check-yes-all" :style="{'background-color':confirmColor}">
+											</view>
+										</view>
+										<view class="item-check-no" v-else :class="{'radio':!multiple}"
+											:style="{'border-color':confirmColor}"></view>
+									</view>
+								</view>
+							</view>
+
+						</view>
+					</block>
+				</scroll-view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		emits: ['select-change'],
+		name: "ba-tree-picker",
+		props: {
+			valueKey: {
+				type: String,
+				default: 'id'
+			},
+			textKey: {
+				type: String,
+				default: 'name'
+			},
+			childrenKey: {
+				type: String,
+				default: 'children'
+			},
+			localdata: {
+				type: Array,
+				default: function() {
+					return []
+				}
+			},
+			localTreeList: { //在已经格式化好的数据
+				type: Array,
+				default: function() {
+					return []
+				}
+			},
+			selectedData: {
+				type: Array,
+				default: function() {
+					return []
+				}
+			},
+			title: {
+				type: String,
+				default: ''
+			},
+			multiple: { // 是否可以多选
+				type: Boolean,
+				default: true
+			},
+			selectParent: { //是否可以选父级
+				type: Boolean,
+				default: true
+			},
+			confirmColor: { // 确定按钮颜色
+				type: String,
+				default: '' // #0055ff
+			},
+			cancelColor: { // 取消按钮颜色
+				type: String,
+				default: '' // #757575
+			},
+			titleColor: { // 标题颜色
+				type: String,
+				default: '' //
+			},
+			switchColor: { // 节点切换图标颜色
+				type: String,
+				default: '' // #666
+			},
+			border: { // 是否有分割线
+				type: Boolean,
+				default: false
+			},
+		},
+		data() {
+			return {
+				showDialog: false,
+				treeList: []
+			}
+		},
+		computed: {},
+		methods: {
+			_show() {
+				this.showDialog = true
+			},
+			_hide() {
+				this.showDialog = false
+			},
+			_cancel() {
+				this._hide()
+				this.$emit("cancel", '');
+			},
+			_confirm() { //多选
+				let selectedList = []; //如果子集全部选中,只返回父级 id
+				let selectedNames;
+				let currentLevel = -1;
+				this.treeList.forEach((item, index) => {
+					if (currentLevel >= 0 && item.level > currentLevel) {
+
+					} else {
+						if (item.checkStatus === 2) {
+							currentLevel = item.level;
+							selectedList.push(item.id);
+							selectedNames = selectedNames ? selectedNames + ' / ' + item.name : item.name;
+						} else {
+							currentLevel = -1;
+						}
+					}
+				})
+				//console.log('_confirm', selectedList);
+				this._hide()
+				this.$emit("select-change", selectedList, selectedNames);
+			},
+			//格式化原数据(原数据为tree结构)
+			_formatTreeData(list = [], level = 0, parentItem, isShowChild = true) {
+				let nextIndex = 0;
+				let parentId = -1;
+				let initCheckStatus = 0;
+				if (parentItem) {
+					nextIndex = this.treeList.findIndex(item => item.id === parentItem.id) + 1;
+					parentId = parentItem.id;
+					if (!this.multiple) { //单选
+						initCheckStatus = 0;
+					} else
+						initCheckStatus = parentItem.checkStatus == 2 ? 2 : 0;
+				}
+				list.forEach(item => {
+					let isLastLevel = true;
+					if (item && item[this.childrenKey]) {
+						let children = item[this.childrenKey];
+						if (Array.isArray(children) && children.length > 0) {
+							isLastLevel = false;
+						}
+					}
+
+					let itemT = {
+						id: item[this.valueKey],
+						name: item[this.textKey],
+						level,
+						isLastLevel,
+						isShow: isShowChild,
+						isShowChild: false,
+						checkStatus: initCheckStatus,
+						orCheckStatus: 0,
+						parentId,
+						children: item[this.childrenKey],
+						childCount: item[this.childrenKey] ? item[this.childrenKey].length : 0,
+						childCheckCount: 0,
+						childCheckPCount: 0
+					};
+
+					if (this.selectedData.indexOf(itemT.id) >= 0) {
+						itemT.checkStatus = 2;
+						itemT.orCheckStatus = 2;
+						itemT.childCheckCount = itemT.children ? itemT.children.length : 0;
+						this._onItemParentSelect(itemT, nextIndex);
+					}
+
+					this.treeList.splice(nextIndex, 0, itemT);
+					nextIndex++;
+				})
+				//console.log(this.treeList);
+			},
+			// 节点打开、关闭切换
+			_onItemSwitch(item, index) {
+				// console.log(item)
+				//console.log('_itemSwitch')
+				if (item.isLastLevel === true) {
+					return;
+				}
+				item.isShowChild = !item.isShowChild;
+				if (item.children) {
+					this._formatTreeData(item.children, item.level + 1, item);
+					item.children = undefined;
+				} else {
+					this._onItemChildSwitch(item, index);
+				}
+			},
+			_onItemChildSwitch(item, index) {
+				//console.log('_onItemChildSwitch')
+				const firstChildIndex = index + 1;
+				if (firstChildIndex > 0)
+					for (var i = firstChildIndex; i < this.treeList.length; i++) {
+						let itemChild = this.treeList[i];
+						if (itemChild.level > item.level) {
+							if (item.isShowChild) {
+								if (itemChild.parentId === item.id) {
+									itemChild.isShow = item.isShowChild;
+									if (!itemChild.isShow) {
+										itemChild.isShowChild = false;
+									}
+								}
+							} else {
+								itemChild.isShow = item.isShowChild;
+								itemChild.isShowChild = false;
+							}
+						} else {
+							return;
+						}
+					}
+			},
+			// 节点选中、取消选中
+			_onItemSelect(item, index) {
+				//console.log('_onItemSelect')
+				//console.log(item)
+				if (!this.multiple) { //单选
+					item.checkStatus = item.checkStatus == 0 ? 2 : 0;
+
+					this.treeList.forEach((v, i) => {
+						if (i != index) {
+							this.treeList[i].checkStatus = 0
+						} else {
+							this.treeList[i].checkStatus = 2
+						}
+					})
+
+					let selectedList = [];
+					let selectedNames;
+					selectedList.push(item.id);
+					selectedNames = item.name;
+					this._hide()
+					this.$emit("select-change", selectedList, selectedNames);
+					return
+				}
+
+				let oldCheckStatus = item.checkStatus;
+				switch (oldCheckStatus) {
+					case 0:
+						item.checkStatus = 2;
+						item.childCheckCount = item.childCount;
+						item.childCheckPCount = 0;
+						break;
+					case 1:
+					case 2:
+						item.checkStatus = 0;
+						item.childCheckCount = 0;
+						item.childCheckPCount = 0;
+						break;
+					default:
+						break;
+				}
+				//子节点 全部选中
+				this._onItemChildSelect(item, index);
+				//父节点 选中状态变化
+				this._onItemParentSelect(item, index, oldCheckStatus);
+			},
+			_onItemChildSelect(item, index) {
+				//console.log('_onItemChildSelect')
+				let allChildCount = 0;
+				if (item.childCount && item.childCount > 0) {
+					index++;
+					while (index < this.treeList.length && this.treeList[index].level > item.level) {
+						let itemChild = this.treeList[index];
+						itemChild.checkStatus = item.checkStatus;
+						if (itemChild.checkStatus == 2) {
+							itemChild.childCheckCount = itemChild.childCount;
+							itemChild.childCheckPCount = 0;
+						} else if (itemChild.checkStatus == 0) {
+							itemChild.childCheckCount = 0;
+							itemChild.childCheckPCount = 0;
+						}
+						// console.log('>>>>index:', index, 'item:', itemChild.name, '  status:', itemChild
+						// 	.checkStatus)
+						index++;
+					}
+				}
+			},
+			_onItemParentSelect(item, index, oldCheckStatus) {
+				//console.log('_onItemParentSelect')
+				//console.log(item)
+				const parentIndex = this.treeList.findIndex(itemP => itemP.id == item.parentId);
+				//console.log('parentIndex:' + parentIndex)
+				if (parentIndex >= 0) {
+					let itemParent = this.treeList[parentIndex];
+					let count = itemParent.childCheckCount;
+					let oldCheckStatusParent = itemParent.checkStatus;
+
+					if (oldCheckStatus == 1) {
+						itemParent.childCheckPCount -= 1;
+					} else if (oldCheckStatus == 2) {
+						itemParent.childCheckCount -= 1;
+					}
+					if (item.checkStatus == 1) {
+						itemParent.childCheckPCount += 1;
+					} else if (item.checkStatus == 2) {
+						itemParent.childCheckCount += 1;
+					}
+
+					if (itemParent.childCheckCount <= 0 && itemParent.childCheckPCount <= 0) {
+						itemParent.childCheckCount = 0;
+						itemParent.childCheckPCount = 0;
+						itemParent.checkStatus = 0;
+					} else if (itemParent.childCheckCount >= itemParent.childCount) {
+						itemParent.childCheckCount = itemParent.childCount;
+						itemParent.childCheckPCount = 0;
+						itemParent.checkStatus = 2;
+					} else {
+						itemParent.checkStatus = 1;
+					}
+					//console.log('itemParent:', itemParent)
+					this._onItemParentSelect(itemParent, parentIndex, oldCheckStatusParent);
+				}
+			},
+			// 重置数据
+			_reTreeList() {
+				this.treeList.forEach((v, i) => {
+					this.treeList[i].checkStatus = v.orCheckStatus
+				})
+			},
+			_initTree() {
+				this.treeList = [];
+				this._formatTreeData(this.localdata);
+			}
+		},
+		watch: {
+			localdata() {
+				this._initTree();
+			},
+			localTreeList() {
+				this.treeList = this.localTreeList;
+			}
+		},
+		mounted() {
+			this._initTree();
+		}
+	}
+</script>
+
+<style scoped>
+	.tree-cover {
+		position: fixed;
+		top: 0rpx;
+		right: 0rpx;
+		bottom: 0rpx;
+		left: 0rpx;
+		z-index: 100;
+		background-color: rgba(0, 0, 0, .4);
+		opacity: 0;
+		transition: all 0.3s ease;
+		visibility: hidden;
+	}
+
+	.tree-cover.show {
+		visibility: visible;
+		opacity: 1;
+	}
+
+	.tree-dialog {
+		position: fixed;
+		top: 0rpx;
+		right: 0rpx;
+		bottom: 0rpx;
+		left: 0rpx;
+		background-color: #fff;
+		border-top-left-radius: 10px;
+		border-top-right-radius: 10px;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: column;
+		z-index: 102;
+		top: 20%;
+		transition: all 0.3s ease;
+		transform: translateY(100%);
+	}
+
+	.tree-dialog.show {
+		transform: translateY(0);
+	}
+
+	.tree-bar {
+		/* background-color: #fff; */
+		height: 90rpx;
+		padding-left: 25rpx;
+		padding-right: 25rpx;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		box-sizing: border-box;
+		border-bottom-width: 1rpx !important;
+		border-bottom-style: solid;
+		border-bottom-color: #f5f5f5;
+		font-size: 32rpx;
+		color: #757575;
+		line-height: 1;
+	}
+
+	.tree-bar-confirm {
+		color: #0055ff;
+		padding: 15rpx;
+	}
+
+	.tree-bar-title {}
+
+	.tree-bar-cancel {
+		color: #757575;
+		padding: 15rpx;
+	}
+
+	.tree-view {
+		flex: 1;
+		padding: 20rpx;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: column;
+		overflow: hidden;
+		height: 100%;
+	}
+
+	.tree-list {
+		flex: 1;
+		height: 100%;
+		overflow: hidden;
+	}
+
+	.tree-item {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		line-height: 1;
+		height: 0;
+		opacity: 0;
+		transition: 0.2s;
+		overflow: hidden;
+	}
+
+	.tree-item.show {
+		height: 90rpx;
+		opacity: 1;
+	}
+
+	.tree-item.showchild:before {
+		transform: rotate(90deg);
+	}
+
+	.tree-item.last:before {
+		opacity: 0;
+	}
+
+	.switch-on {
+		width: 0;
+		height: 0;
+		border-left: 10rpx solid transparent;
+		border-right: 10rpx solid transparent;
+		border-top: 15rpx solid #666;
+	}
+
+	.switch-off {
+		width: 0;
+		height: 0;
+		border-bottom: 10rpx solid transparent;
+		border-top: 10rpx solid transparent;
+		border-left: 15rpx solid #666;
+	}
+
+	.item-last-dot {
+		position: absolute;
+		width: 10rpx;
+		height: 10rpx;
+		border-radius: 100%;
+		background: #666;
+	}
+
+	.item-icon {
+		width: 26rpx;
+		height: 26rpx;
+		margin-right: 8rpx;
+		padding-right: 20rpx;
+		padding-left: 20rpx;
+	}
+
+	.item-label {
+		flex: 1;
+		display: flex;
+		align-items: center;
+		height: 100%;
+		line-height: 1.2;
+	}
+
+	.item-name {
+		flex: 1;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		width: 450rpx;
+	}
+
+	.item-check {
+		width: 40px;
+		height: 40px;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.item-check-yes,
+	.item-check-no {
+		width: 20px;
+		height: 20px;
+		border-top-left-radius: 20%;
+		border-top-right-radius: 20%;
+		border-bottom-right-radius: 20%;
+		border-bottom-left-radius: 20%;
+		border-top-width: 1rpx;
+		border-left-width: 1rpx;
+		border-bottom-width: 1rpx;
+		border-right-width: 1rpx;
+		border-style: solid;
+		border-color: #0055ff;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		box-sizing: border-box;
+	}
+
+	.item-check-yes-part {
+		width: 12px;
+		height: 12px;
+		border-top-left-radius: 20%;
+		border-top-right-radius: 20%;
+		border-bottom-right-radius: 20%;
+		border-bottom-left-radius: 20%;
+		background-color: #0055ff;
+	}
+
+	.item-check-yes-all {
+		margin-bottom: 5px;
+		border: 2px solid #007aff;
+		border-left: 0;
+		border-top: 0;
+		height: 12px;
+		width: 6px;
+		transform-origin: center;
+		/* #ifndef APP-NVUE */
+		transition: all 0.3s;
+		/* #endif */
+		transform: rotate(45deg);
+	}
+
+	.item-check .radio {
+		border-top-left-radius: 50%;
+		border-top-right-radius: 50%;
+		border-bottom-right-radius: 50%;
+		border-bottom-left-radius: 50%;
+	}
+
+	.item-check .radio .item-check-yes-b {
+		border-top-left-radius: 50%;
+		border-top-right-radius: 50%;
+		border-bottom-right-radius: 50%;
+		border-bottom-left-radius: 50%;
+	}
+
+	.hover-c {
+		opacity: 0.6;
+	}
+
+	.itemBorder {
+		border-bottom: 1px solid #e5e5e5;
+	}
+</style>

+ 93 - 0
components/selectService.vue

@@ -0,0 +1,93 @@
+<template>
+	<view class="div">
+		<view class="content">
+			<view class="type">
+				<view class="type_item" v-for="(item,index) in selectLocality" :key="item.id" @click="transmitType(item)">
+					{{item.name}}
+				</view>
+			</view>
+			<view class="btn" @click="cut">
+				取消
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'selectService',
+		data() {
+			return {
+				selectLocality: [],
+			}
+		},
+		methods:{
+			transmitType(item){
+				this.$emit('transmitType',{id: item.id, name: item.name})
+			},
+			cut(){
+				this.$emit('cutPopup')
+			},
+			getClass(){
+				this.$http.get("/sys/category/childList?pid=" + '1889836358116098050').then(res => {
+							console.log(res)
+				    if (res.data.success) {
+							this.selectLocality = res.data.result
+				    }
+				    else {
+				    }
+				})
+			}
+		},
+		//
+		mounted() {
+			this.getClass()
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.div {
+		width: 100vw;
+		height: 100vh;
+		background: rgba(0, 0, 0, 0.4);
+		position: fixed;
+		top: 0;
+		left: 0;
+		display: flex;
+		align-items: end;
+
+		.content {
+			width: 100%;
+			border-radius: 20rpx 20rpx 0px 0px;
+			overflow-y: hidden;
+
+			.type {
+				width: 100%;
+				height: 455rpx;
+				margin-bottom: 20rpx;
+				background-color: #fff;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				.type_item{
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					flex: 1;
+				}
+			}
+
+			.btn {
+				width: 100%;
+				height: 114rpx;
+				background-color: #fff;
+				font-weight: 500;
+				font-size: 32rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+			}
+		}
+	}
+</style>

+ 99 - 0
components/selectType.vue

@@ -0,0 +1,99 @@
+<template>
+	<view class="div">
+		<view class="content">
+			<view class="type">
+				<view class="type_item" v-for="(item,index) in selectLocality" :key="index" @click="transmitType(item)">
+					{{item.label}}
+				</view>
+			</view>
+			<view class="btn" @click="cut">
+				取消
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'selectType',
+		data() {
+			return {
+				selectLocality: [{
+						value: 1,
+						label: '普通企业'
+					},
+					{
+						value: 2,
+						label: '个体工商户'
+					},
+					{
+						value: 3,
+						label: '有限责任公司'
+					},
+					{
+						value: 4,
+						label: '股份责任公司'
+					},
+					{
+						value: 1,
+						label: '合伙企业'
+					}
+				],
+			}
+		},
+		methods:{
+			transmitType(item){
+				this.$emit('transmitType',{value: item.value, label: item.label})
+			},
+			cut(){
+				this.$emit('cutPopup')
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.div {
+		width: 100vw;
+		height: 100vh;
+		background: rgba(0, 0, 0, 0.4);
+		position: fixed;
+		top: 0;
+		left: 0;
+		display: flex;
+		align-items: end;
+
+		.content {
+			width: 100%;
+			border-radius: 20rpx 20rpx 0px 0px;
+			overflow-y: hidden;
+
+			.type {
+				width: 100%;
+				height: 455rpx;
+				margin-bottom: 20rpx;
+				background-color: #fff;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				.type_item{
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					flex: 1;
+				}
+			}
+
+			.btn {
+				width: 100%;
+				height: 114rpx;
+				background-color: #fff;
+				font-weight: 500;
+				font-size: 32rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+			}
+		}
+	}
+</style>

+ 10 - 13
package.json

@@ -1,22 +1,19 @@
 {
 {
-    "id": "dengrq-datetime-picker",
-    "name": "日期时间选择器组件",
-    "displayName": "日期时间选择器组件",
-    "version": "1.0.6",
-    "description": "适用于 uni-app 的日期时间选择器组件,兼容 H5 和小程序。支持多种日期模式,包括年月日 / 年月日时分秒 / 年月 / 年份 / 时分秒 / 时分,支持配置默认选中日期与最小最大日期范围。",
+    "id": "ba-tree-picker",
+    "displayName": "ba-tree-picker树形层级选择器(支持单选、多选、父级选择、映射)",
+    "version": "1.2",
+    "description": "树形层级选择器,支持单选、多选、父级选择 、Object对象属性自定义映射、自定义样式等,采用弹窗形式,样式和比例参照uniapp官方的picker和uni-data-picker组件",
     "keywords": [
     "keywords": [
-        "日期选择器",
-        "时间选择器",
-        "日期时间选择器",
-        "日期范围选择"
+        "选择器",
+        "树形",
+        "层级",
+        "多选",
+        "ba-tree-picker"
     ],
     ],
     "dcloudext": {
     "dcloudext": {
         "category": [
         "category": [
             "前端组件",
             "前端组件",
             "通用组件"
             "通用组件"
         ]
         ]
-    },
-    "dependencies": {
-        "mescroll-uni": "^1.3.7"
     }
     }
-}
+}

+ 9 - 0
pages.json

@@ -310,9 +310,18 @@
 		},{
 		},{
 			"path": "pages/store/businessInfor",
 			"path": "pages/store/businessInfor",
 			"style": {}
 			"style": {}
+		},{
+			"path": "pages/store/otherSet",
+			"style": {}
 		},{
 		},{
 			"path": "pages/store/businessQua",
 			"path": "pages/store/businessQua",
 			"style": {}
 			"style": {}
+		},{
+			"path": "pages/store/advertising",
+			"style": {}
+		},{
+			"path": "pages/store/headPhoto",
+			"style": {}
 		},{
 		},{
 			"path": "pages/store/addHours",
 			"path": "pages/store/addHours",
 			"style": {}
 			"style": {}

+ 221 - 200
pages/login/settled.vue

@@ -20,68 +20,52 @@
 			</view>
 			</view>
 		</view>
 		</view>
 		<status v-else :status="form.status" :updateTime="form.updateTime" :remark="form.remark"></status>
 		<status v-else :status="form.status" :updateTime="form.updateTime" :remark="form.remark"></status>
-		<view v-if="tab == 1" class="tab-top">
+		<view v-if="tab == 1" :class="title == '申请入驻'?'tab-top':''" >
 			<form>
 			<form>
-				<!-- <view class="borderRadiu">
-                    <view class="flex cu-form-group margin-top1 ">
-                        <view class="content ">
-                            <text class="text-bold" >选择所属供应商</text>
-                            <i class="text-bg " ></i>
-                        </view>
-                    </view>
-                    <view class="cu-form-group ">
-                    <view class="title">供应商</view>
-                    <picker @change="PickerChange" :value="form.purveyorId" range-key="purveyorName"
-                        :range="supplierOption">
-                        <view class="picker" v-if="form.purveyorId">
-                            {{ supplierOption.find(e => e.id == form.purveyorId).purveyorName  }}
-                        </view>
-                        <view class="picker" v-else style="color: #999999;">
-                           请选择
-                        </view>
-                    </picker>
-                </view>
-                </view> -->
 
 
 				<view class="borderRadiu">
 				<view class="borderRadiu">
 					<view class="flex cu-form-group margin-top1 ">
 					<view class="flex cu-form-group margin-top1 ">
 						<view class="content ">
 						<view class="content ">
-							<text class="text-bold">账户信息</text>
+							<text class="text-bold">推荐人邀请码</text>
 							<i class="text-bg "></i>
 							<i class="text-bg "></i>
 						</view>
 						</view>
 					</view>
 					</view>
 					<view class=" cu-form-group ">
 					<view class=" cu-form-group ">
-						<view class="title">姓名</view>
-						<input placeholder="请输入联系人姓名" v-model="form.name" name="input"></input>
+						<view class="title"> <span>*</span> 邀请码</view>
+						<input placeholder="输入邀请码(选填)" v-model="form.referenceCode" name="input"></input>
 					</view>
 					</view>
 				</view>
 				</view>
-			</form>
-		</view>
-		<view v-if="tab == 2" class="tab-top" :style="title == '店铺信息' ? 'margin-top: 120upx' : ''">
-			<form>
-				<view class="borderRadiu">
+
+				<view class="borderRadiu" style="height: 67vh;overflow-y: auto;">
 					<view class="flex cu-form-group margin-top1">
 					<view class="flex cu-form-group margin-top1">
 						<view class="content ">
 						<view class="content ">
 							<text class="text-bold">提交经营主体资料</text>
 							<text class="text-bold">提交经营主体资料</text>
-							<i class="text-bg "></i>
+							<i class="text-bg"></i>
+						</view>
+					</view>
+					<view class="customize">
+						<view class="title" style="text-align: center;">营业执照</view>
+						<view style="border-bottom: 1px solid #EEEEEE;">
+							<view class="business-img flex align-center">
+								<image :src="businessLicenseImg ? businessLicenseImg : '/static/login/yingyezhizhao.png'" mode=""
+									@click="businessChange('businessLicense')">
+								</image>
+							</view>
+						</view>
+						<view class="business-prompt">
+							请上传营业执照照片或复印件,复印件需加盖公司公章,仅支持jpg、png格式;图片需清晰、完整、无反光、无PS、无不相关水印、非拍屏
 						</view>
 						</view>
 					</view>
 					</view>
 					<view class=" cu-form-group">
 					<view class=" cu-form-group">
 						<view class="title">主体类型</view>
 						<view class="title">主体类型</view>
-						<!-- <uni-data-checkbox  v-model="form.type" :localdata="hobby"></uni-data-checkbox> -->
-						<radio-group @change="typeChang($event, 'type')" v-model="form.type">
-							<label class="margin-left-sm">
-								<radio :class="form.type == '1' ? 'checked blue' : ''" :checked="form.type == '1' ? true : false"
-									value="1"></radio>
-								<!-- <checkbox class=' blue' :class="form.type?'checked':''" :checked="form.type?true:false" value="1"></checkbox> -->
-								<text class="margin-left-sm">普通企业</text>
-							</label>
-							<label class="margin-left-sm">
-								<radio :class="form.type == '2' ? 'checked blue' : ''" :checked="form.type == '2' ? true : false"
-									value="2"></radio>
-								<text class="margin-left-sm">个体工商户</text>
-							</label>
-						</radio-group>
+						<view style="display: flex;width: 74%;justify-content: space-between;" @click="showSelectLocality = true">
+							<view style="font-size: 30rpx;">
+								<text v-if="typeLabel"> {{ typeLabel }}</text>
+								<text v-else style="color: grey">请选择主体类型</text>
+							</view>
+							<u-icon name="arrow-right" style="margin-left: 17rpx;color: #C7C6CA"></u-icon>
+						</view>
+						<!-- <u-select v-model="showSelectLocality" :list="selectLocality" @confirm="confirmLocality"></u-select> -->
 					</view>
 					</view>
 					<view class="cu-form-group">
 					<view class="cu-form-group">
 						<view class="title">公司名称</view>
 						<view class="title">公司名称</view>
@@ -92,7 +76,7 @@
 						<input placeholder="请输入统一社会信用代码" v-model="form.creditCode" name="input"></input>
 						<input placeholder="请输入统一社会信用代码" v-model="form.creditCode" name="input"></input>
 					</view>
 					</view>
 					<view class="cu-form-group">
 					<view class="cu-form-group">
-						<view class="title">有效期 </view>
+						<view class="title">证件期限 </view>
 						<!-- <uni-data-checkbox  v-model="form.lifespan" :localdata="lifespanOption"></uni-data-checkbox> -->
 						<!-- <uni-data-checkbox  v-model="form.lifespan" :localdata="lifespanOption"></uni-data-checkbox> -->
 						<radio-group @change="typeChang($event, 'lifespanType')" v-model="form.lifespanType">
 						<radio-group @change="typeChang($event, 'lifespanType')" v-model="form.lifespanType">
 							<label class="margin-left-sm">
 							<label class="margin-left-sm">
@@ -107,53 +91,31 @@
 								<text class="margin-left-sm">固定期限</text>
 								<text class="margin-left-sm">固定期限</text>
 							</label>
 							</label>
 						</radio-group>
 						</radio-group>
-						<!-- <radio-group @change="typeChang($event, 'lifespan')" v-model="form.lifespan">
-                        <label class="margin-left-sm">
-                            <radio class="blue radio" value="1" checked></radio>
-                            <text class="margin-left-sm">长期有效</text>
-                        </label>
-                        <label class="margin-left-sm">
-                            <radio class="blue radio" value="2"></radio>
-                            <text class="margin-left-sm">固定期限</text>
-                        </label>
-                    </radio-group> -->
 					</view>
 					</view>
 					<view class="cu-form-group" v-if="form.lifespanType == 2">
 					<view class="cu-form-group" v-if="form.lifespanType == 2">
 						<view class="title">有效期起</view>
 						<view class="title">有效期起</view>
-						<picker mode="date" :value="form.lifespanBegin" @change="typeChang($event, 'lifespanBegin')">
-							<view class="picker" v-if="form.lifespanBegin">
-								{{ form.lifespanBegin }}
-							</view>
-							<view class="picker" v-else style="color: #999999;">
-								请选择
-							</view>
-						</picker>
-					</view>
-					<view class="cu-form-group" v-if="form.lifespanType == 2">
-						<view class="title">有效期止</view>
-						<picker mode="date" :value="form.lifespanEnd" @change="typeChang($event, 'lifespanEnd')">
-							<view class="picker" v-if="form.lifespanEnd">
-								{{ form.lifespanEnd }}
-							</view>
-							<view class="picker" v-else style="color: #999999;">
-								请选择
-							</view>
-						</picker>
-					</view>
-					<view class="customize">
-						<view class="title">营业执照</view>
-						<view style="border-bottom: 1px solid #EEEEEE;">
-							<view class="business-img flex align-center">
-								<image :src="businessLicenseImg ? businessLicenseImg : '/static/login/yingyezhizhao.png'" mode=""
-									@click="businessChange('businessLicense')">
-								</image>
+						<view style="display: flex;width: 74%;justify-content: space-between;" @click="selectDate">
+							<view style="font-size: 30rpx;">
+								<text v-if="form.lifespanBegin"> {{ form.lifespanBegin }}--{{form.lifespanEnd}}</text>
+								<text v-else style="color: grey">请选择</text>
 							</view>
 							</view>
+							<u-icon name="arrow-right" style="margin-left: 17rpx;color: #C7C6CA"></u-icon>
 						</view>
 						</view>
-						<view class="business-prompt">
-							请上传营业执照照片或复印件,复印件需加盖公司公章,仅支持jpg、png格式;图片需清晰、完整、无反光、无PS、无不相关水印、非拍屏
+						<rangTime ref="rangTime" :mode="mode" @onSubmit="onEndTimeChange" />
+					</view>
+					<view class="cu-form-group" style="display: block;">
+						<view class="title">经营范围</view>
+						<view class="scope" style="width: 100%;height: auto;">
+							<u-input v-model="form.businessScope" type="textarea"
+								style="width: 100%;min-height: 165rpx;max-height: 300rpx; background-color:#F7F8FC;padding: 0 16rpx;margin: 0;overflow-y: auto;" />
 						</view>
 						</view>
 					</view>
 					</view>
 				</view>
 				</view>
+
+			</form>
+		</view>
+		<view v-if="tab == 2" :class="title=='申请入驻'?'tab-top':''" :style="title == '店铺信息' ? 'margin-top: 120upx' : ''">
+			<form>
 				<view class="borderRadiu" style="margin-bottom: 114upx;">
 				<view class="borderRadiu" style="margin-bottom: 114upx;">
 					<view class="flex cu-form-group margin-top1 ">
 					<view class="flex cu-form-group margin-top1 ">
 						<view class="content ">
 						<view class="content ">
@@ -193,9 +155,9 @@
 				</view>
 				</view>
 			</form>
 			</form>
 		</view>
 		</view>
-		<view v-if="tab == 3" class="tab-top" :style="title == '店铺信息' ? 'margin-top: 120upx' : ''">
+		<view v-if="tab == 3" :class="title == '申请入驻'?'tab-top':''" :style="title == '店铺信息' ? 'margin-top: 120upx' : ''">
 			<form>
 			<form>
-				<view class="borderRadiu" style="margin-bottom: 114upx;">
+				<view class="borderRadiu">
 					<view class="flex cu-form-group margin-top1">
 					<view class="flex cu-form-group margin-top1">
 						<view class="content ">
 						<view class="content ">
 							<text class="text-bold">提交门店信息</text>
 							<text class="text-bold">提交门店信息</text>
@@ -216,28 +178,23 @@
 							</view>
 							</view>
 							<u-icon name="arrow-right" style="margin-left: 17rpx;color: #C7C6CA"></u-icon>
 							<u-icon name="arrow-right" style="margin-left: 17rpx;color: #C7C6CA"></u-icon>
 						</view>
 						</view>
-						<!-- <input disabled="true" @mousedown="$refs.picker.show()" placeholder="请选择所在地区" ref="inputRef"
-                            name="input" v-model="form.locality"></input>
-                        <text class='cuIcon-right' style="color: #C7C6CA ;" @click="$refs.picker.show();mapIsHidden='none'"></text> -->
-
 					</view>
 					</view>
 					<view class="cu-form-group">
 					<view class="cu-form-group">
 						<view class="title">门店地址</view>
 						<view class="title">门店地址</view>
 						<input placeholder="请输入门店地址详细地址" v-model="form.address" name="input"></input>
 						<input placeholder="请输入门店地址详细地址" v-model="form.address" name="input"></input>
 					</view>
 					</view>
-					<view class="customize">
+					<!-- <view class="customize">
 						<view class="title">地理位置</view>
 						<view class="title">地理位置</view>
 						<view class=" booder-top" style="padding-bottom: 16upx" :style="{ 'display': mapIsHidden }">
 						<view class=" booder-top" style="padding-bottom: 16upx" :style="{ 'display': mapIsHidden }">
 							<map style="width: 100%; height: 218upx;" :latitude="latitude" scale="14" zIndex="100"
 							<map style="width: 100%; height: 218upx;" :latitude="latitude" scale="14" zIndex="100"
 								:longitude="longitude" :markers="marker" @tap="handleMarkerTap"></map>
 								:longitude="longitude" :markers="marker" @tap="handleMarkerTap"></map>
 						</view>
 						</view>
 
 
-						<!-- <aMap class=" booder-top" style="padding-bottom: 7px;"></aMap> -->
 						<view class="business-prompt">
 						<view class="business-prompt">
 							若位置有误直接影响客户到店,请在地图中仔细核对,可拖拽地图确保位置正确
 							若位置有误直接影响客户到店,请在地图中仔细核对,可拖拽地图确保位置正确
 						</view>
 						</view>
-					</view>
-					<view class="customize">
+					</view> -->
+					<!-- <view class="customize">
 						<view class="title">门头照片</view>
 						<view class="title">门头照片</view>
 						<view class="grid col-3 grid-square flex-sub booder-top">
 						<view class="grid col-3 grid-square flex-sub booder-top">
 							<view class="bg-img" v-for="(item, index) in headPhotoImg" :key="index" @tap="ViewImage"
 							<view class="bg-img" v-for="(item, index) in headPhotoImg" :key="index" @tap="ViewImage"
@@ -254,6 +211,22 @@
 						<view class="business-prompt">
 						<view class="business-prompt">
 							门店照片需包含完整的门店入口和招牌名称,建议现场拍摄门头照;最多可上传5张,支持格式bmp、png、jpeg、jpg,单个图片不超过5MB,建议尺寸在2000*1500px以上
 							门店照片需包含完整的门店入口和招牌名称,建议现场拍摄门头照;最多可上传5张,支持格式bmp、png、jpeg、jpg,单个图片不超过5MB,建议尺寸在2000*1500px以上
 						</view>
 						</view>
+					</view> -->
+				</view>
+				<view class="borderRadiu" style="margin-bottom: 114upx;">
+					<view class="flex cu-form-group margin-top1">
+						<view class="content ">
+							<text class="text-bold">提交门店负责人信息</text>
+							<i class="text-bg "></i>
+						</view>
+					</view>
+					<view class="cu-form-group">
+						<view class="title">姓名</view>
+						<input placeholder="门店负责人姓名" v-model="form.leaderName" name="input"></input>
+					</view>
+					<view class="cu-form-group">
+						<view class="title">手机号</view>
+						<input placeholder="门店负责人手机号" v-model="form.leaderPhone" name="input"></input>
 					</view>
 					</view>
 				</view>
 				</view>
 			</form>
 			</form>
@@ -272,7 +245,7 @@
 		<view v-if="tab == 3" class="padding flex sub-bottom">
 		<view v-if="tab == 3" class="padding flex sub-bottom">
 			<button class="cu-btn round line-blue  shadow" @click="tab = 2">{{ title == '申请入驻' ? '上一步' : '上一页'
 			<button class="cu-btn round line-blue  shadow" @click="tab = 2">{{ title == '申请入驻' ? '上一步' : '上一页'
                 }}</button>
                 }}</button>
-			<button style="margin-left: 12upx;width:77%" class="cu-btn bg-blue round "  @click="sumbit">提交审核</button>
+			<button style="margin-left: 12upx;width:77%" class="cu-btn bg-blue round " @click="sumbit">提交审核</button>
 		</view>
 		</view>
 		<view class="cu-load load-modal" v-if="lodingshow">
 		<view class="cu-load load-modal" v-if="lodingshow">
 			<image src="/static/logo.png" mode="aspectFit"></image>
 			<image src="/static/logo.png" mode="aspectFit"></image>
@@ -280,6 +253,7 @@
 		</view>
 		</view>
 		<w-picker class="picker-style" :visible.sync="visible" ref="picker" mode="region" :value="form.locality"
 		<w-picker class="picker-style" :visible.sync="visible" ref="picker" mode="region" :value="form.locality"
 			@confirm="onConfirm($event, 'region')"></w-picker>
 			@confirm="onConfirm($event, 'region')"></w-picker>
+		<selectType v-if="showSelectLocality" @transmitType="confirmLocality" @cutPopup="showSelectLocality = false"></selectType>
 	</view>
 	</view>
 
 
 </template>
 </template>
@@ -289,15 +263,21 @@
 	} from 'vue'
 	} from 'vue'
 	import configService from '../../common/service/config.service'
 	import configService from '../../common/service/config.service'
 	import regionPicker from "../../components/w-picker/region-picker.vue"
 	import regionPicker from "../../components/w-picker/region-picker.vue"
+	import selectType from "../../components/selectType.vue"
 	// import aMap from "./map.vue"
 	// import aMap from "./map.vue"
 	import status from "../store/components/status.vue"
 	import status from "../store/components/status.vue"
-  import {ACCESS_TOKEN, USER_INFO} from "@/common/util/constants";
-  import * as $p from "@/uni_modules/uni-easyinput/components/uni-easyinput/common";
-
+	import {
+		ACCESS_TOKEN,
+		USER_INFO
+	} from "@/common/util/constants";
+	import * as $p from "@/uni_modules/uni-easyinput/components/uni-easyinput/common";
+	import rangTime from '../../components/dengrq-datetime-picker/dateSelector/index.vue'
 	export default {
 	export default {
 		components: {
 		components: {
 			regionPicker,
 			regionPicker,
-			status
+			status,
+			rangTime,
+			selectType
 			// aMap
 			// aMap
 		},
 		},
 		data() {
 		data() {
@@ -317,8 +297,10 @@
 					corporateName: null,
 					corporateName: null,
 					creditCode: null,
 					creditCode: null,
 					lifespanType: 1,
 					lifespanType: 1,
-					lifespanBegin: this.timestampToTime(),
-					lifespanEnd: '9999-12-31',
+					// lifespanBegin: this.timestampToTime(),
+					// lifespanEnd: '9999-12-31',
+					lifespanBegin: null,
+					lifespanEnd: null,
 					businessLicense: null,
 					businessLicense: null,
 					legalPerson: null,
 					legalPerson: null,
 					legalPersonCode: null,
 					legalPersonCode: null,
@@ -329,21 +311,24 @@
 					headPhoto: '',
 					headPhoto: '',
 					passWord: uni.getStorageSync('password'),
 					passWord: uni.getStorageSync('password'),
 					phone: uni.getStorageSync('phone'),
 					phone: uni.getStorageSync('phone'),
-          ordinaryUserId:null,
+					ordinaryUserId: null,
 				},
 				},
 				formName: {
 				formName: {
-					name: '姓名',
+					// name: '姓名',
 					type: '主体类型',
 					type: '主体类型',
 					corporateName: '公司名称',
 					corporateName: '公司名称',
 					creditCode: '统一代码',
 					creditCode: '统一代码',
 					lifespanType: '有效期',
 					lifespanType: '有效期',
-					headPhoto: '门头照片',
+					// headPhoto: '门头照片',
 					legalPerson: '法人姓名',
 					legalPerson: '法人姓名',
 					legalPersonCode: '法人证件号',
 					legalPersonCode: '法人证件号',
 					storeName: '门店名称',
 					storeName: '门店名称',
 					locality: '所在地区',
 					locality: '所在地区',
 					address: '门店地址',
 					address: '门店地址',
-					businessLicense: '营业执照'
+					businessLicense: '营业执照',
+					businessScope: '经营范围',
+					leaderName: '负责人姓名',
+					leaderPhone: '负责人手机号'
 				},
 				},
 				tab: 1,
 				tab: 1,
 				supplierOption: [],
 				supplierOption: [],
@@ -359,7 +344,10 @@
 				// }]
 				// }]
 				markers: [],
 				markers: [],
 				headPhotoImg: [],
 				headPhotoImg: [],
-        loginType:'',
+				loginType: '',
+				showSelectLocality: false, //选择主体类型弹窗显隐
+				mode: 1,
+				typeLabel:''
 			}
 			}
 		},
 		},
 		watch: {
 		watch: {
@@ -380,38 +368,56 @@
 
 
 		},
 		},
 		async onLoad(data) {
 		async onLoad(data) {
-      if (data.loginType){
-        // data.loginType =2  需要根据merchantId查询商户临时数据
-        // data.loginType =3  不需要回显
-        this.loginType = data.loginType;
-       if(data.loginType === '3') {
-          this.form.ordinaryUserId =data.ordinaryUserId;
-          this.form.name = (data.name==null || data.name =='null') ?"":data.name,
-          this.form.passWord =data.passWord;
-          this.form.phone  =data.phone;
-        }
-      }else{
-        if (data.params) {
-          let obj = JSON.parse(decodeURIComponent(data.params));
-          this.title = '店铺信息'
-          this.tab = 2
-          obj.lifespanType = obj.lifespanType ? obj.lifespanType : '1'
-          this.markers = this.form.longitude && this.form.latitude ? [{
-            longitude: this.form.longitude,
-            latitude: this.form.latitude,
-            iconPath: '../../static/boiaoji.png'
-          }] : []
-          this.businessLicenseImg = configService.apiUrl + '/' + obj.businessLicense
-          this.identityOneImg = configService.apiUrl + '/' + obj.identityOne
-          this.headPhotoImg = obj.headPhoto ? obj.headPhoto.split(',').filter(id => id !== '') : []
-          obj.headPhoto = obj.headPhoto ? obj.headPhoto.split(',').filter(id => id !== '') : []
-          this.identityTwoImg = configService.apiUrl + '/' + obj.identityTwo
-          obj.locality = obj.locality ? obj.locality : ''
-          this.form = obj
-        }
-      }
+			if (data.loginType) {
+				// data.loginType =2  需要根据merchantId查询商户临时数据
+				// data.loginType =3  不需要回显
+				this.loginType = data.loginType;
+				if (data.loginType === '3') {
+					this.form.ordinaryUserId = data.ordinaryUserId;
+					this.form.name = (data.name == null || data.name == 'null') ? "" : data.name,
+						this.form.passWord = data.passWord;
+					this.form.phone = data.phone;
+				}
+			} else {
+				if (data.params) {
+					let obj = JSON.parse(decodeURIComponent(data.params));
+					this.title = '店铺信息'
+					this.tab = 2
+					obj.lifespanType = obj.lifespanType ? obj.lifespanType : '1'
+					this.markers = this.form.longitude && this.form.latitude ? [{
+						longitude: this.form.longitude,
+						latitude: this.form.latitude,
+						iconPath: '../../static/boiaoji.png'
+					}] : []
+					this.businessLicenseImg = configService.apiUrl + '/' + obj.businessLicense
+					this.identityOneImg = configService.apiUrl + '/' + obj.identityOne
+					this.headPhotoImg = obj.headPhoto ? obj.headPhoto.split(',').filter(id => id !== '') : []
+					obj.headPhoto = obj.headPhoto ? obj.headPhoto.split(',').filter(id => id !== '') : []
+					this.identityTwoImg = configService.apiUrl + '/' + obj.identityTwo
+					obj.locality = obj.locality ? obj.locality : ''
+					this.form = obj
+				}
+			}
 		},
 		},
 		methods: {
 		methods: {
+			//选择主题类型
+			confirmLocality(data) {
+				this.form.type = data.value
+				this.typeLabel = data.label
+				this.showSelectLocality =false
+			},
+			//选择证件有效时间
+			onEndTimeChange(val) {
+				console.log(val)
+				this.form.lifespanBegin = val.startDate
+				this.form.lifespanEnd = val.endDate
+				this.$forceUpdate(); // 强制刷新视图
+			},
+			//选择时间显示
+			selectDate() {
+				// this.isSelectDate = true
+				this.$refs.rangTime.open()
+			},
 			getCurrentLocation() {
 			getCurrentLocation() {
 				uni.getStorage({
 				uni.getStorage({
 					key: 'currentAddress',
 					key: 'currentAddress',
@@ -439,7 +445,7 @@
 									display: 'ALWAYS'
 									display: 'ALWAYS'
 								}
 								}
 							}];
 							}];
-this.$forceUpdate();
+							this.$forceUpdate();
 						}
 						}
 
 
 					},
 					},
@@ -465,10 +471,10 @@ this.$forceUpdate();
 							width: 30,
 							width: 30,
 							height: 30
 							height: 30
 						}];
 						}];
-						
+
 					},
 					},
 					fail() {
 					fail() {
-				
+
 					}
 					}
 				});
 				});
 
 
@@ -637,6 +643,7 @@ this.$forceUpdate();
 												obj = {
 												obj = {
 													corporateName: data1.company ? data1.company : '', //公司名称
 													corporateName: data1.company ? data1.company : '', //公司名称
 													creditCode: data1.socialCreditCode ? data1.socialCreditCode : '', //统一社会信用代码
 													creditCode: data1.socialCreditCode ? data1.socialCreditCode : '', //统一社会信用代码
+													businessScope: data1.businessScope ? data1.businessScope : '', //经营范围
 													lifespanBegin: data1.registerDate ? data1.registerDate.substr(0,
 													lifespanBegin: data1.registerDate ? data1.registerDate.substr(0,
 															4) + '-' + data1.registerDate.substr(5, 2) + '-' + data1.registerDate
 															4) + '-' + data1.registerDate.substr(5, 2) + '-' + data1.registerDate
 														.substr(8, 2) : '',
 														.substr(8, 2) : '',
@@ -689,67 +696,71 @@ this.$forceUpdate();
 			},
 			},
 			sumbit() {
 			sumbit() {
 				if (this.title == '申请入驻') {
 				if (this.title == '申请入驻') {
-          if(this.loginType){
-            if(this.loginType === '3'){
-              //普通用户没有商户新增
-              for (let j in this.form) {
-                console.log(j)
-                console.log(this.form[j])
-                console.log(this.formName[j])
-                if (!this.form[j]) {
-                  if (this.form['lifespanType'] == 2 && (this.form['lifespanBegin'] == null || this.form['lifespanEnd'] ==
-                      null)) {
-                    this.$tip.alert('请选择日期!')
-                    return
-                  }
-                  if (this.form['businessLicense'] == null) {
-                    this.$tip.alert('请上传营业执照!')
-                    return
-                  }
-                  if (this.formName[j]) {
-                    this.$tip.alert(`请填写${this.formName[j]}!`)
-                    return
-                  }
-
-
-                }
-              }
-              let data = {
-                ...this.form,
-                source: 2,
-                headPhoto: Array.isArray(this.form.headPhoto) ? this.form.headPhoto.join(',') : this.form.headPhoto,
-                longitude: this.markers.length > 0 ? this.markers[0].longitude : '',
-                latitude: this.markers.length > 0 ? this.markers[0].latitude : ''
-              }
-              this.$http.post('/merchant/app/add', data).then(res => {
-                if (res.data.code==200) {
-                  //放入session
-                  const result = res.data.result
-                  const userInfo = result.userInfo
-                  uni.setStorageSync(ACCESS_TOKEN,result.token);
-                  uni.setStorageSync(USER_INFO,userInfo);
-                  this.$store.commit('SET_TOKEN', result.token)
-                  this.$store.commit('SET_NAME', { username: userInfo.username,realname: userInfo.realname})
-                  this.$store.commit('SET_AVATAR', userInfo.avatar)
-                  // #ifdef APP-PLUS
-                  uni.switchTab({
-                    url: '/pages/index/index'
-                  })
-                  // #endif
-                  // #ifndef APP-PLUS
-                  this.$tip.success('登录成功!')
-                  this.$Router.replaceAll({
-                    name: 'index'
-                  })
-                  // #endif
-                } else {
-                  this.$tip.error(res.data.message);
-                }
-              })
-            }
-          }
+					if (this.loginType) {
+						if (this.loginType === '3') {
+							//普通用户没有商户新增
+							for (let j in this.form) {
+								console.log(j)
+								console.log(this.form[j])
+								console.log(this.formName[j])
+								if (!this.form[j]) {
+									if (this.form['lifespanType'] == 2 && (this.form['lifespanBegin'] == null || this.form[
+												'lifespanEnd'] ==
+											null)) {
+										this.$tip.alert('请选择日期!')
+										return
+									}
+									if (this.form['businessLicense'] == null) {
+										this.$tip.alert('请上传营业执照!')
+										return
+									}
+									if (this.formName[j]) {
+										this.$tip.alert(`请填写${this.formName[j]}!`)
+										return
+									}
+
+
+								}
+							}
+							let data = {
+								...this.form,
+								source: 2,
+								headPhoto: Array.isArray(this.form.headPhoto) ? this.form.headPhoto.join(',') : this.form.headPhoto,
+								longitude: this.markers.length > 0 ? this.markers[0].longitude : '',
+								latitude: this.markers.length > 0 ? this.markers[0].latitude : ''
+							}
+							this.$http.post('/merchant/app/add', data).then(res => {
+								if (res.data.code == 200) {
+									//放入session
+									const result = res.data.result
+									const userInfo = result.userInfo
+									uni.setStorageSync(ACCESS_TOKEN, result.token);
+									uni.setStorageSync(USER_INFO, userInfo);
+									this.$store.commit('SET_TOKEN', result.token)
+									this.$store.commit('SET_NAME', {
+										username: userInfo.username,
+										realname: userInfo.realname
+									})
+									this.$store.commit('SET_AVATAR', userInfo.avatar)
+									// #ifdef APP-PLUS
+									uni.switchTab({
+										url: '/pages/index/index'
+									})
+									// #endif
+									// #ifndef APP-PLUS
+									this.$tip.success('登录成功!')
+									this.$Router.replaceAll({
+										name: 'index'
+									})
+									// #endif
+								} else {
+									this.$tip.error(res.data.message);
+								}
+							})
+						}
+					}
 				} else {
 				} else {
-          console.log("编辑")
+					console.log("编辑")
 					let data = {
 					let data = {
 						...this.form,
 						...this.form,
 						source: 2,
 						source: 2,
@@ -779,7 +790,12 @@ this.$forceUpdate();
 	}
 	}
 
 
 	.cu-form-group .title {
 	.cu-form-group .title {
-		width: 190upx;
+		width: 154rpx;
+		padding: 0;
+
+		span {
+			color: red;
+		}
 	}
 	}
 
 
 	.cu-bg {
 	.cu-bg {
@@ -792,6 +808,7 @@ this.$forceUpdate();
 	}
 	}
 
 
 	.borderRadiu {
 	.borderRadiu {
+		height: auto;
 		border-radius: 8px;
 		border-radius: 8px;
 		padding-bottom: 10px;
 		padding-bottom: 10px;
 		background-color: #ffffff;
 		background-color: #ffffff;
@@ -970,4 +987,8 @@ this.$forceUpdate();
 			z-index: 100000;
 			z-index: 100000;
 		}
 		}
 	}
 	}
+
+	::v-deep .cu-form-group uni-textarea {
+		margin: 0;
+	}
 </style>
 </style>

+ 9 - 2
pages/product/creatProduct.vue

@@ -734,11 +734,13 @@
 
 
 						this.showDate = res.data.result.saleStartDate.slice(0, 10) + '-' + res.data.result.saleEndDate.slice(0,
 						this.showDate = res.data.result.saleStartDate.slice(0, 10) + '-' + res.data.result.saleEndDate.slice(0,
 							10)
 							10)
-						if (res.data.result.availableEndDate) {
+						if (res.data.resultuseType == 2) {
 							this.showSellDate = res.data.result.availableStartDate.slice(0, 10) + '-' + res.data.result
 							this.showSellDate = res.data.result.availableStartDate.slice(0, 10) + '-' + res.data.result
 								.availableEndDate.slice(0, 10)
 								.availableEndDate.slice(0, 10)
-						} else if (res.data.result.expirationDays) {
+						} else if (res.data.result.useType == 1) {
 							this.showSellDate = res.data.result.expirationDays + '天后失效'
 							this.showSellDate = res.data.result.expirationDays + '天后失效'
+						}else if(res.data.result.useType == 3){
+							this.showSellDate = '长期有效'
 						}
 						}
 						res.data.result.preBook == 0 ? this.makeChecked = false : this.makeChecked = true
 						res.data.result.preBook == 0 ? this.makeChecked = false : this.makeChecked = true
 						if (res.data.result.refundLabelName && res.data.result.refundConfirmName) {
 						if (res.data.result.refundLabelName && res.data.result.refundConfirmName) {
@@ -784,13 +786,18 @@
 						this.form.availableStartDate = res.data.availableStartDate
 						this.form.availableStartDate = res.data.availableStartDate
 						this.form.availableEndDate = res.data.availableEndDate
 						this.form.availableEndDate = res.data.availableEndDate
 						this.form.expirationDays = null
 						this.form.expirationDays = null
+						this.form.useType = 2
 					} else if (res.data.expirationDays) {
 					} else if (res.data.expirationDays) {
 						this.form.expirationDays = res.data.expirationDays
 						this.form.expirationDays = res.data.expirationDays
 						this.form.availableEndDate = null
 						this.form.availableEndDate = null
 						this.form.availableStartDate = null
 						this.form.availableStartDate = null
+						this.form.useType = 1
 						this.$nextTick(() => {
 						this.$nextTick(() => {
 							this.showSellDate = res.data.expirationDays + '天后失效'
 							this.showSellDate = res.data.expirationDays + '天后失效'
 						});
 						});
+					}else if(res.data.useType == 3){
+						this.form.useType = 3
+						this.showSellDate = '长期有效'
 					}
 					}
 
 
 				}
 				}

+ 18 - 2
pages/product/usable.vue

@@ -31,6 +31,11 @@
 						</view>
 						</view>
 					</view>
 					</view>
 				</u-radio>
 				</u-radio>
+				<u-radio @change="radioChange" name="long" style="width: 100%;margin-top: 16rpx;">
+					<view class="title now">
+						长期可用
+					</view>
+				</u-radio>
 			</u-radio-group>
 			</u-radio-group>
 		</view>
 		</view>
 		<view class="foot">
 		<view class="foot">
@@ -91,12 +96,14 @@
 				}
 				}
 			},
 			},
 			save() {
 			save() {
+				console.log(this.value)
 				if (this.availableStartDate !== '' && this.availableEndDate !== '') {
 				if (this.availableStartDate !== '' && this.availableEndDate !== '') {
 					uni.setStorage({
 					uni.setStorage({
 						key: 'smdate',
 						key: 'smdate',
 						data: {
 						data: {
 							availableStartDate: this.availableStartDate,
 							availableStartDate: this.availableStartDate,
-							availableEndDate: this.availableEndDate
+							availableEndDate: this.availableEndDate,
+							useType:2
 						}
 						}
 					})
 					})
 						this.back()
 						this.back()
@@ -104,10 +111,19 @@
 					uni.setStorage({
 					uni.setStorage({
 						key: 'smdate',
 						key: 'smdate',
 						data: {
 						data: {
-							expirationDays: this.expirationDays
+							expirationDays: this.expirationDays,
+							useType:1
 						}
 						}
 					})
 					})
 						this.back()
 						this.back()
+				}else if(this.value == 'long'){
+					uni.setStorage({
+						key: 'smdate',
+						data: {
+							useType:3
+						}
+					})
+					this.back()
 				} else {
 				} else {
 					uni.showToast({
 					uni.showToast({
 						title: '选择售卖时间',
 						title: '选择售卖时间',

+ 421 - 0
pages/store/advertising.vue

@@ -0,0 +1,421 @@
+<template>
+	<view>
+		<cu-custom bgColor="bg-fff" :isBack="true">
+			<block slot="content" style="font-size: 36rpx;"> 广告素材</block>
+		</cu-custom>
+		<status v-if="form && form.videoStatus !== null" :status="form.videoStatus" :updateTime="form.videoUpdateTime"
+			:remark="form.videoRemark"></status>
+		<view class="tab-top" :style="form && form.videoStatus == null ? 'margin-top: 14upx;' : 'margin-top: 144upx;'">
+			<view class="borderRadiu">
+
+				<view class="customize">
+					<view class=" cu-form-group justify-between">
+						<view class="content ">
+							<text class="text-bold">宣传视频</text>
+							<i class="text-bg "></i>
+						</view>
+					</view>
+					<view class="booder-top">
+						<view class="business-img ">
+							<view class="uni-uploader__file" v-if="video">
+								<view class="uploader_video">
+									<uni-icons class="icon iconfont icon-cuo" type="trash-filled" size="20"
+										@tap="delectVideo"></uni-icons>
+									<video :src="video" class="video-container"></video>
+								</view>
+							</view>
+							<image v-else src="/static/store/upload2.png" mode="" @tap="chooseVideo()"></image>
+
+						</view>
+					</view>
+					<view class="business-prompt">
+						最多上传1个视频,大小不超过50M,建议宽高比9:16
+					</view>
+				</view>
+				<view class="customize">
+					<view class=" cu-form-group justify-between">
+						<view class="content ">
+							<text class="text-bold">经营相册</text>
+							<i class="text-bg "></i>
+						</view>
+					</view>
+					<view class="grid col-4 grid-square flex-sub booder-top">
+						<view class="bg-img" v-for="(item, index) in form.photo" :key="index" @tap="ViewImage"
+							:data-url="form.photo[index]">
+							<image :src="form.photo[index]" mode="aspectFill"></image>
+							<view class="cu-tag bg-red" @tap.stop="DelImg" :data-index="index">
+								<text class='cuIcon-close'></text>
+							</view>
+							
+						</view>
+						
+						<view class="solids" @tap="ChooseImage" v-if="form.photo.length < 20">
+							<text class='cuIcon-cameraadd'></text>
+						</view>
+						
+					</view>
+					<view class="business-prompt">
+						最多上传20张,每张大小不超过5M,建议宽高比9:16
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="padding flex sub-bottom" style="justify-content: space-around;">
+			<button class="cu-btn round line-gray shadow" @click="$Router.push({ name: 'settings' })"
+				style="width: 205rpx;">取消</button>
+			<button style="width:443rpx;background: linear-gradient( 90deg, #77B6FF 0%, #449AFF 100%);border-radius:53rpx ;"
+				class="cu-btn bg-blue round " @click="sumbit">提交审核</button>
+		</view>
+	</view>
+</template>
+<script>
+	import configService from '../../common/service/config.service'
+	import {
+		USER_INFO
+	} from "@/common/util/constants"
+	import status from "./components/status.vue"
+
+	export default {
+		components: {
+			status
+		},
+		data() {
+			return {
+				video: '',
+				photoList: [],
+				form: {},
+				src: '',
+				cameraList: [{
+						value: 'back',
+						name: '后置摄像头',
+						checked: 'true'
+					},
+					{
+						value: 'front',
+						name: '前置摄像头'
+					},
+				],
+				businessData: []
+			}
+		},
+		async onLoad(data) {
+			if (data.params) {
+				let obj = JSON.parse(decodeURIComponent(data.params));
+				this.video = obj.video ? obj.video : ''
+				obj.photo = obj.photo ? obj.photo.split(',').filter(id => id !== '') : []
+				this.form = obj
+			}
+
+		},
+		async onShow() {
+			let res = await this.$http.get('/merchant/localMerchantTime/list?merchantId=' + uni.getStorageSync(USER_INFO)
+				.merchantId, )
+			if (res.data.success) {
+				this.businessData = res.data.result
+			} else {
+				this.$tip.error(res.data.message);
+			}
+		},
+		methods: {
+			hoursChange(index) {
+				const queryString = encodeURIComponent(JSON.stringify({
+					index,
+					arr: this.businessData
+				}))
+				uni.navigateTo({
+					url: `/pages/store/addHours?params=${queryString}`
+				})
+
+			},
+			delectVideo() {
+				uni.showModal({
+					title: "提示",
+					content: "是否要删除此视频",
+					success: (res) => {
+						if (res.confirm) {
+							this.video = ''
+						}
+					}
+				})
+			},
+			DelImg(e) {
+				uni.showModal({
+					title: '提示',
+					content: '确定要删除?',
+					cancelText: '取消',
+					confirmText: '确定',
+					success: res => {
+						if (res.confirm) {
+							// this.photoList.splice(e.currentTarget.dataset.index, 1)
+							this.form.photo.splice(e.currentTarget.dataset.index, 1)
+
+						}
+					}
+				})
+			},
+			ChooseImage() {
+				uni.chooseImage({
+					// count: 4, //默认9
+					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+					sourceType: ['album'], //从相册选择
+					success: (res) => {
+						if (res) {
+							// this[type + 'Img'] = chooseImageRes.tempFilePaths[0];
+							uni.uploadFile({
+								url: configService.apiUrl + '/sys/common/upload',
+								filePath: res.tempFilePaths[0],
+								name: "file",
+								formData: {
+									'biz': 'temp',
+								},
+								success: (files) => {
+									let data = JSON.parse(files.data);
+									if (data.success) {
+										if (this.form.photo.length != 0) {
+											// this.photoList = this.photoList.concat(res.tempFilePaths)
+											this.form.photo.push(configService.apiUrl + '/' + data.message)
+
+										} else {
+											// this.photoList =res.tempFilePaths
+											this.form.photo = [configService.apiUrl + '/' + data.message]
+										}
+									}
+								}
+							})
+						}
+
+					}
+				});
+			},
+			ViewImage(e) {
+				uni.previewImage({
+					urls: this.form.photo,
+					current: e.currentTarget.dataset.url
+				});
+			},
+			chooseVideo() {
+				// 上传视频
+				console.log('上传视频')
+				uni.chooseVideo({
+					sourceType: ['camera', 'album'],
+					success: (res) => {
+						this.video = res.tempFilePath;
+					}
+				})
+			},
+			sumbit() {
+				let data = {
+					merchantId: uni.getStorageSync(USER_INFO).merchantId,
+					video: this.video,
+					photo: this.form.photo.join(",")
+				}
+				if (this.form.videoStatus == null) {
+					this.$http.post('/merchant/LocalMerchantOperate/add', data).then(res => {
+						if (res.data.success) {
+							this.$tip.success(res.data.result || '成功')
+							uni.navigateBack({
+								delta: 1 // 返回的页面数,默认为1
+							})
+						} else {
+							this.$tip.error(res.data.message);
+						}
+					})
+				} else {
+					this.$http.post('/merchant/LocalMerchantOperate/edit', {
+						...data,
+						id: this.form.videoId
+					}).then(res => {
+						if (res.data.success) {
+							this.$tip.success(res.data.result || '成功')
+							uni.navigateBack({
+								delta: 1 // 返回的页面数,默认为1
+							})
+						} else {
+							this.$tip.error(res.data.message);
+						}
+					})
+				}
+
+			},
+			delClick(val) {
+				this.$http.delete('/merchant/localMerchantTime/delete?id=' + val.id).then(res => {
+					if (res.data.success) {
+						this.$tip.success(res.data.result || '成功')
+						this.$http.get('/merchant/localMerchantTime/list?merchantId=' + uni.getStorageSync(USER_INFO).merchantId)
+							.then(res => {
+								if (res.data.success) {
+									this.businessData = res.data.result
+								} else {
+									this.$tip.error(res.data.message);
+								}
+							})
+
+					} else {
+						this.$tip.error(res.data.message);
+					}
+				})
+			}
+		}
+	}
+</script>
+<style scoped lang="scss">
+	page {
+		background: #F8F8FA;
+	}
+
+	::v-deep .cu-custom {
+		border: none !important;
+	}
+
+	.tab-top {
+		padding: 0 26upx;
+		padding-bottom: 130upx
+	}
+
+	.progress-status {
+		position: fixed;
+		width: 100%;
+		z-index: 9999;
+		background: #FFFFFF;
+		border: none;
+
+		.status {
+			font-size: 38upx;
+			color: #F6863E;
+			font-weight: 500;
+			margin-bottom: 10upx;
+
+			text {
+				margin-left: 5upx
+			}
+
+			image {
+				vertical-align: text-top;
+				width: 42upx;
+				height: 42upx;
+			}
+		}
+	}
+
+	.borderRadiu {
+		border-radius: 8px;
+		.customize {
+			padding: 0 18upx 18upx;
+			margin-bottom: 16rpx;
+			background-color: #ffffff;
+			border-radius: 16rpx;
+			.title {
+				padding: 18upx 0;
+				font-size: 28upx;
+				// padding: 10px;
+			}
+		}
+
+		.business-img {
+			height: 210upx;
+			width: 310upx;
+			background-size: cover;
+
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+		.business-prompt {
+			padding-top: 16upx;
+			font-size: 20upx;
+			color: #999999;
+		}
+	}
+
+	.booder-top {
+		border-bottom: 1px solid rgb(238, 238, 238);
+		padding-bottom: 7px;
+
+		.uploader_video {
+			width: 310upx;
+			height: 210upx;
+		}
+
+		.video-container {
+			max-width: 100%;
+			/* 最大宽度为父容器宽度 */
+			max-height: 100%;
+
+			::v-deep.uni-video-bar {
+				height: 62upx;
+				padding: 0
+			}
+		}
+
+		// ::v-deep video{
+		//     position: relative;
+		//     z-index: 1;
+		//     width: 310upx ;
+		//     height: 210upx;
+		//     .uni-video-bar .uni-video-bar-full{
+
+		//     }
+		// }
+	}
+
+	.sub-bottom {
+		position: fixed;
+		width: 100%;
+		bottom: 0;
+		background: #FFFFFF;
+		border-top: 1px solid #EEEEEE;
+	}
+
+	.uni-uploader__img {
+		width: 200upx;
+		height: 200upx;
+	}
+
+	.uni-uploader__file,
+	.uploader_video {
+		position: relative;
+		z-index: 1;
+		width: 200upx;
+		height: 200upx;
+	}
+
+	.icon-cuo {
+		position: absolute;
+		right: 0;
+		top: 5upx;
+
+		color: #FFFFFF;
+		z-index: 999;
+		border-top-right-radius: 20upx;
+		border-bottom-left-radius: 20upx;
+	}
+
+	.business-hours {
+		padding: 27upx 22upx;
+		background: #F7F8FC;
+		font-size: 28upx;
+		border-radius: 8px 8px 8px 8px;
+		margin-bottom: 18upx;
+	}
+
+	.del-style {
+		// padding: 0 30upx;
+		width: 116upx;
+		background: #FFFFFF;
+		border-radius: 4px 4px 4px 4px;
+		border: 1px solid #EEEEEE;
+		color: #333333;
+		font-size: 26upx;
+		line-height: 50upx;
+		text-align: center;
+		// -radius: 4px 4px 4px 4px;
+	}
+
+	.business-date {
+		text {
+			margin-right: 22upx;
+		}
+	}
+</style>

+ 525 - 419
pages/store/businessInfor.vue

@@ -1,425 +1,531 @@
 <template>
 <template>
-    <view>
-        <cu-custom bgColor="bg-fff" :isBack="true">
-            <block slot="content"> 经营信息</block>
-        </cu-custom>
-        <status v-if="form && form.videoStatus !== null" :status="form.videoStatus" :updateTime="form.videoUpdateTime" :remark="form.videoRemark"></status>
-        <view class="tab-top" :style="form && form.videoStatus == null ? 'margin-top: 14upx;' : 'margin-top: 144upx;'">
-            <view class="borderRadiu">
-                <view class=" cu-form-group margin-top1 justify-between">
-                    <view class="content ">
-                        <text class="text-bold">营业时间</text>
-                        <i class="text-bg "></i>
-                    </view>
-                </view>
-                <view class="customize">
-                    <view class="business-hours" v-for="(val,index) in businessData" :key="val.id" @click="hoursChange(index)">
-                        <view class="flex justify-between">
-                            <text>{{ val.period }}</text>
-                            <view @click.stop="delClick(val)" class="del-style">删除</view>
-                        </view>
-                        <view class="business-date" v-if="val.timeType==1">
-                            <text>24小时营业</text>
-                        </view>
-                        <view class="business-date" v-else>
-                            <text>{{ val.middleTime }}</text>
-                            <text>{{ val.beginTime }}</text>
-                            <text>{{ val.endTime }}</text>
-                        </view>
-                    </view>
-                    <image v-if="businessData.length!==2" style="width: 100%;height:137upx" src="/static/store/yingyeshijian.png" mode=""
-                        @click="hoursChange()"> </image>
-                </view>
-            </view>
-            <view class="borderRadiu">
-                <view class=" cu-form-group margin-top1 justify-between">
-                    <view class="content ">
-                        <text class="text-bold">经营信息</text>
-                        <i class="text-bg "></i>
-                    </view>
-                </view>
-                <view class="customize">
-                    <view class="title">宣传视频</view>
-                    <view class="booder-top">
-                        <view class="business-img ">
-                            <view class="uni-uploader__file" v-if="video">
-                                <view class="uploader_video">
-                                    <uni-icons class="icon iconfont icon-cuo" type="trash-filled" size="20"
-                                        @tap="delectVideo"></uni-icons>
-                                    <video :src="video" class="video-container"></video>
-                                </view>
-                            </view>
-                            <image v-else src="/static/store/upload2.png" mode="" @tap="chooseVideo()"></image>
-
-                        </view>
-                    </view>
-                    <view class="business-prompt">
-                        最多上传1个视频,大小不超过50M,建议宽高比9:16
-                    </view>
-                </view>
-                <view class="customize">
-                    <view class="title">经营相册</view>
-                    <view class="grid col-4 grid-square flex-sub booder-top">
-                        <view class="bg-img" v-for="(item, index) in form.photo" :key="index" @tap="ViewImage"
-                            :data-url="form.photo[index]">
-                            <image :src="form.photo[index]" mode="aspectFill"></image>
-                            <view class="cu-tag bg-red" @tap.stop="DelImg" :data-index="index">
-                                <text class='cuIcon-close'></text>
-                            </view>
-                        </view>
-                        <view class="solids" @tap="ChooseImage" v-if="form.photo.length < 20">
-                            <text class='cuIcon-cameraadd'></text>
-                        </view>
-                    </view>
-                    <view class="business-prompt">
-                        最多上传20张,每张大小不超过5M,建议宽高比9:16
-                    </view>
-                </view>
-            </view>
-        </view>
-        <view class="padding flex sub-bottom">
-            <button class="cu-btn round line-gray  shadow" @click="$Router.push({ name: 'settings' })">取消</button>
-            <button style="margin-left: 12upx;width:77%" class="cu-btn bg-blue round " @click="sumbit">提交审核</button>
-        </view>
-    </view>
+	<view>
+		<cu-custom bgColor="bg-fff" :isBack="true">
+			<block slot="content"> 经营信息</block>
+		</cu-custom>
+		<status v-if="form && form.videoStatus !== null" :status="form.videoStatus" :updateTime="form.videoUpdateTime"
+			:remark="form.videoRemark"></status>
+		<view class="tab-top" :style="form && form.videoStatus == null ? 'margin-top: 14upx;' : 'margin-top: 144upx;'">
+			<view class="borderRadiu">
+				<view class=" cu-form-group margin-top1 justify-between">
+					<view class="content ">
+						<text class="text-bold">营业时间</text>
+						<i class="text-bg "></i>
+					</view>
+				</view>
+				<view class="customize">
+					<view class="business-hours" v-for="(val,index) in businessData" :key="val.id" @click="hoursChange(index)">
+						<view class="flex justify-between">
+							<text>{{ val.period }}</text>
+							<view @click.stop="delClick(val)" class="del-style">删除</view>
+						</view>
+						<view class="business-date" v-if="val.timeType==1">
+							<text>24小时营业</text>
+						</view>
+						<view class="business-date" v-else>
+							<text>{{ val.middleTime }}</text>
+							<text>{{ val.beginTime }}</text>
+							<text>{{ val.endTime }}</text>
+						</view>
+					</view>
+					<image v-if="businessData.length!==2" style="width: 100%;height:137upx" src="/static/store/yingyeshijian.png"
+						mode="" @click="hoursChange()"> </image>
+				</view>
+			</view>
+			<view class="borderRadiu">
+				<view class=" cu-form-group margin-top1 justify-between">
+					<view class="content ">
+						<text class="text-bold">经营信息</text>
+						<i class="text-bg "></i>
+					</view>
+				</view>
+				<view class="data-item">
+					<span>店铺面积</span>
+					<input v-model="form.storeExtent" type="Number"
+						style="width: 100px;height: 49rpx;background-color: #f7f8fc;margin: 0px 8rpx 0px 20rpx;"></input>㎡
+				</view>
+				<view class="data-item">
+					<span>开业时间</span>
+					<view class="" style="flex: 1;display: flex;justify-content: space-between;padding-left: 20rpx;"
+						@click="show = true">
+						<span v-if="date">{{date}}</span>
+						<span v-else style="color: #999999;">去设置</span>
+						<u-icon name="arrow-right"></u-icon>
+					</view>
+				</view>
+				<view class="customize">
+					<view class="title">地理位置</view>
+					<view class=" booder-top" style="padding-bottom: 16upx" :style="{ 'display': mapIsHidden }">
+						<map :key="mapKey" style="width: 100%; height: 218upx;" :latitude="latitude" scale="14" zIndex="100"
+							:longitude="longitude" :markers="marker" @tap="handleMarkerTap"></map>
+					</view>
+
+					<view class="business-prompt">
+						若位置有误直接影响客户到店,请在地图中仔细核对,可拖拽地图确保位置正确
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="padding flex sub-bottom">
+			<button class="cu-btn round line-gray  shadow" @click="$Router.push({ name: 'settings' })">取消</button>
+			<button style="margin-left: 12upx;width:77%" class="cu-btn bg-blue round " @click="sumbit">提交审核</button>
+		</view>
+
+		<u-picker v-model="show" mode="time" @confirm="selectTime"></u-picker>
+	</view>
+
 </template>
 </template>
 <script>
 <script>
-import configService from '../../common/service/config.service'
-import { USER_INFO } from "@/common/util/constants"
-import status from "./components/status.vue"
-
-export default {
-    components:{status},
-    data() {
-        return {
-            video: '',
-            photoList: [],
-            form: {},
-            src: '',
-            cameraList: [{
-                value: 'back',
-                name: '后置摄像头',
-                checked: 'true'
-            },
-            {
-                value: 'front',
-                name: '前置摄像头'
-            },
-            ],
-            businessData: []
-        }
-    },
-    async onLoad(data) {
-        if (data.params) {
-            let obj = JSON.parse(decodeURIComponent(data.params));
-            this.video = obj.video ? obj.video : ''
-            obj.photo = obj.photo ? obj.photo.split(',').filter(id => id !== '') : []
-            this.form = obj
-        }
-
-    },
-    async onShow() {
-        let res = await this.$http.get('/merchant/localMerchantTime/list?merchantId=' + uni.getStorageSync(USER_INFO).merchantId,)
-        if (res.data.success) {
-            this.businessData = res.data.result
-        }
-        else {
-            this.$tip.error(res.data.message);
-        }
-    },
-    methods: {
-        hoursChange(index) {
-            const queryString = encodeURIComponent(JSON.stringify({index,arr:this.businessData}))
-            uni.navigateTo({
-                url: `/pages/store/addHours?params=${queryString}`
-            })
-
-        },
-        delectVideo() {
-            uni.showModal({
-                title: "提示",
-                content: "是否要删除此视频",
-                success: (res) => {
-                    if (res.confirm) {
-                        this.video = ''
-                    }
-                }
-            })
-        },
-        DelImg(e) {
-            uni.showModal({
-                title: '提示',
-                content: '确定要删除?',
-                cancelText: '取消',
-                confirmText: '确定',
-                success: res => {
-                    if (res.confirm) {
-                        // this.photoList.splice(e.currentTarget.dataset.index, 1)
-                        this.form.photo.splice(e.currentTarget.dataset.index, 1)
-
-                    }
-                }
-            })
-        },
-        ChooseImage() {
-            uni.chooseImage({
-                // count: 4, //默认9
-                sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
-                sourceType: ['album'], //从相册选择
-                success: (res) => {
-                    if (res) {
-                        // this[type + 'Img'] = chooseImageRes.tempFilePaths[0];
-                        uni.uploadFile({
-                            url: configService.apiUrl + '/sys/common/upload',
-                            filePath: res.tempFilePaths[0],
-                            name: "file",
-                            formData: {
-                                'biz': 'temp',
-                            },
-                            success: (files) => {
-                                let data = JSON.parse(files.data);
-                                if (data.success) {
-                                    if (this.form.photo.length != 0) {
-                                        // this.photoList = this.photoList.concat(res.tempFilePaths)
-                                        this.form.photo.push(configService.apiUrl + '/' + data.message)
-
-                                    } else {
-                                        // this.photoList =res.tempFilePaths
-                                        this.form.photo = [configService.apiUrl + '/' + data.message]
-                                    }
-                                }
-                            }
-                        })
-                    }
-
-                }
-            });
-        },
-        ViewImage(e) {
-            uni.previewImage({
-                urls: this.form.photo,
-                current: e.currentTarget.dataset.url
-            });
-        },
-        chooseVideo() {
-            // 上传视频
-            console.log('上传视频')
-            uni.chooseVideo({
-                sourceType: ['camera', 'album'],
-                success: (res) => {
-                    this.video = res.tempFilePath;
-                }
-            })
-        },
-        sumbit() {
-            let data = {
-                merchantId: uni.getStorageSync(USER_INFO).merchantId,
-                video: this.video,
-                photo: this.form.photo.join(",")
-            }
-            if (this.form.videoStatus == null) {
-                this.$http.post('/merchant/LocalMerchantOperate/add', data).then(res => {
-                    if (res.data.success) {
-                        this.$tip.success(res.data.result || '成功')
-                        uni.navigateBack({
-                            delta: 1 // 返回的页面数,默认为1
-                        })
-                    }
-                    else {
-                        this.$tip.error(res.data.message);
-                    }
-                })
-            }
-            else {
-                this.$http.post('/merchant/LocalMerchantOperate/edit', { ...data, id: this.form.videoId }).then(res => {
-                    if (res.data.success) {
-                        this.$tip.success(res.data.result || '成功')
-                        uni.navigateBack({
-                            delta: 1 // 返回的页面数,默认为1
-                        })
-                    }
-                    else {
-                        this.$tip.error(res.data.message);
-                    }
-                })
-            }
-
-        },
-        delClick(val){
-            this.$http.delete('/merchant/localMerchantTime/delete?id='+val.id).then(res => {
-                if (res.data.success) {
-                    this.$tip.success(res.data.result || '成功')
-                    this.$http.get('/merchant/localMerchantTime/list?merchantId=' + uni.getStorageSync(USER_INFO).merchantId).then(res=>{
-                    if (res.data.success) {
-                        this.businessData = res.data.result
-                    }
-                    else {
-                        this.$tip.error(res.data.message);
-                    }
-                })
-
-                }
-                else {
-                    this.$tip.error(res.data.message);
-                }
-            })
-        }
-    }
-}
+	import configService from '../../common/service/config.service'
+	import {
+		USER_INFO
+	} from "@/common/util/constants"
+	import status from "./components/status.vue"
+
+	export default {
+		components: {
+			status
+		},
+		data() {
+			return {
+				video: '',
+				photoList: [],
+				form: {},
+				src: '',
+				businessData: [],
+				show: false,
+				date: '',
+				latitude: 37.860372,
+				longitude: 112.588154,
+				marker: [{
+					latitude: '',
+					longitude: '',
+					iconPath: '/static/boiaoji.png',
+					width: 30,
+					height: 30,
+					label: {
+						content: '',
+						color: '#000000', // 文字颜色
+						fontSize: 14, // 文字大小
+						bgColor: '#FFFFFF',
+						borderColor: '#CCCCCC',
+					}
+				}], // 初始为空数组
+				mapIsHidden: true,
+				mapKey: 1
+			}
+		},
+		async onLoad(data) {
+			if (data.params) {
+				let obj = JSON.parse(decodeURIComponent(data.params));
+				this.video = obj.video ? obj.video : ''
+				obj.photo = obj.photo ? obj.photo.split(',').filter(id => id !== '') : []
+				this.form = obj
+				this.date = this.form.openingTime
+			}
+		},
+		onShow() {
+			this.$http.get('/merchant/localMerchantTime/list?merchantId=' + uni.getStorageSync(USER_INFO)
+				.merchantId, ).then(res => {
+				if (res.data.success) {
+					this.businessData = res.data.result
+				} else {
+					this.$tip.error(res.data.message);
+				}
+			})
+			let da = uni.getStorageSync('address')
+			let addname = uni.getStorageSync('currentAddress')
+			const lat = parseFloat(da.latitude) || 37.860372
+			const lng = parseFloat(da.longitude) || 112.588154
+			const labelContent = addname?.name || '未设置地址'
+			// this.marker[0].longitude = da.longitude
+			// this.marker[0].latitude = da.latitude
+			// this.marker[0].label.content = addname.name
+			this.marker = [{
+				latitude: lat, // 默认值避免 undefined
+				longitude:lng, // 默认值避免 undefined
+				iconPath: '/static/boiaoji.png',
+				width: 30,
+				height: 30,
+				label: {
+					content:labelContent, // 避免 addname 为 undefined
+					color: '#000000',
+					fontSize: 14,
+					bgColor: '#FFFFFF',
+					borderColor: '#CCCCCC',
+				}
+			}]
+			 this.latitude = lat
+			    this.longitude = lng
+			this.mapKey += 1
+			console.log(this.marker)
+			// this.getCurrentLocation();
+		},
+		methods: {
+			getCurrentLocation() {
+				uni.getStorage({
+					key: 'currentAddress',
+					success: (res) => {
+						if (res.data && res.data.location) {
+							let temp = res.data.location.split(',');
+							this.latitude = temp[1];
+							this.longitude = temp[0];
+
+							// this.marker = [{
+							// 	id: 0,
+							// 	latitude: temp[1],
+							// 	longitude: temp[0],
+							// 	title: res.data.name || '当前位置',
+							// 	iconPath: '../../static/boiaoji.png',
+							// 	width: 30,
+							// 	height: 30,
+							// 	callout: { // 添加标注说明
+							// 		content: res.data.name || '当前位置',
+							// 		color: '#000',
+							// 		fontSize: 12,
+							// 		borderRadius: 10,
+							// 		bgColor: '#fff',
+							// 		padding: 5,
+							// 		display: 'ALWAYS'
+							// 	}
+							// }];
+							this.$forceUpdate();
+						}
+
+					},
+					fail: () => {
+						// 如果没有存储的位置,可以设置默认位置
+						// this.setDefaultLocation();
+					}
+				});
+			},
+
+
+
+
+			handleMarkerTap() {
+				const queryString = uni.getStorageSync('address') ? encodeURIComponent(JSON.stringify(uni.getStorageSync(
+					'address'))) : ''
+				uni.navigateTo({
+					url: `/pages/login/map?position=${queryString}`
+					// url:'/pages/login/map'
+				})
+
+			},
+			selectTime(e) {
+				console.log(e)
+				this.date = e.year + '-' + e.month + '-' + e.day
+			},
+			hoursChange(index) {
+				const queryString = encodeURIComponent(JSON.stringify({
+					index,
+					arr: this.businessData
+				}))
+				uni.navigateTo({
+					url: `/pages/store/addHours?params=${queryString}`
+				})
+
+			},
+			delectVideo() {
+				uni.showModal({
+					title: "提示",
+					content: "是否要删除此视频",
+					success: (res) => {
+						if (res.confirm) {
+							this.video = ''
+						}
+					}
+				})
+			},
+			DelImg(e) {
+				uni.showModal({
+					title: '提示',
+					content: '确定要删除?',
+					cancelText: '取消',
+					confirmText: '确定',
+					success: res => {
+						if (res.confirm) {
+							// this.photoList.splice(e.currentTarget.dataset.index, 1)
+							this.form.photo.splice(e.currentTarget.dataset.index, 1)
+
+						}
+					}
+				})
+			},
+			ChooseImage() {
+				uni.chooseImage({
+					// count: 4, //默认9
+					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+					sourceType: ['album'], //从相册选择
+					success: (res) => {
+						if (res) {
+							// this[type + 'Img'] = chooseImageRes.tempFilePaths[0];
+							uni.uploadFile({
+								url: configService.apiUrl + '/sys/common/upload',
+								filePath: res.tempFilePaths[0],
+								name: "file",
+								formData: {
+									'biz': 'temp',
+								},
+								success: (files) => {
+									let data = JSON.parse(files.data);
+									if (data.success) {
+										if (this.form.photo.length != 0) {
+											// this.photoList = this.photoList.concat(res.tempFilePaths)
+											this.form.photo.push(configService.apiUrl + '/' + data.message)
+
+										} else {
+											// this.photoList =res.tempFilePaths
+											this.form.photo = [configService.apiUrl + '/' + data.message]
+										}
+									}
+								}
+							})
+						}
+
+					}
+				});
+			},
+			ViewImage(e) {
+				uni.previewImage({
+					urls: this.form.photo,
+					current: e.currentTarget.dataset.url
+				});
+			},
+			chooseVideo() {
+				// 上传视频
+				console.log('上传视频')
+				uni.chooseVideo({
+					sourceType: ['camera', 'album'],
+					success: (res) => {
+						this.video = res.tempFilePath;
+					}
+				})
+			},
+			sumbit() {
+				let data = {
+					id: uni.getStorageSync(USER_INFO).merchantId,
+					storeExtent: this.form.storeExtent,
+					longitude: this.marker[0].longitude,
+					latitude: this.marker[0].latitude,
+					openingTime: this.date
+				}
+				// if (this.form.videoStatus == null) {
+				// 	this.$http.post('/merchant/LocalMerchantOperate/add', data).then(res => {
+				// 		if (res.data.success) {
+				// 			this.$tip.success(res.data.result || '成功')
+				// 			uni.navigateBack({
+				// 				delta: 1 // 返回的页面数,默认为1
+				// 			})
+				// 		} else {
+				// 			this.$tip.error(res.data.message);
+				// 		}
+				// 	})
+				// }else {
+
+				this.$http.post('/merchant/localMerchantInfo/shopEdit', {
+					...data,
+				}).then(res => {
+					if (res.data.success) {
+						this.$tip.success(res.data.result || '成功')
+						uni.navigateBack({
+							delta: 1 // 返回的页面数,默认为1
+						})
+					} else {
+						this.$tip.error(res.data.message);
+					}
+				})
+				// }
+
+			},
+			delClick(val) {
+				this.$http.delete('/merchant/localMerchantTime/delete?id=' + val.id).then(res => {
+					if (res.data.success) {
+						this.$tip.success(res.data.result || '成功')
+						this.$http.get('/merchant/localMerchantTime/list?merchantId=' + uni.getStorageSync(USER_INFO).merchantId)
+							.then(res => {
+								if (res.data.success) {
+									this.businessData = res.data.result
+								} else {
+									this.$tip.error(res.data.message);
+								}
+							})
+
+					} else {
+						this.$tip.error(res.data.message);
+					}
+				})
+			}
+		}
+	}
 </script>
 </script>
 <style scoped lang="scss">
 <style scoped lang="scss">
-page {
-    background: #F8F8FA;
-}
-
-.tab-top {
-    padding: 0 26upx;
-    padding-bottom: 130upx
-}
-
-.progress-status {
-    position: fixed;
-    width: 100%;
-    z-index: 9999;
-    background: #FFFFFF;
-
-    .status {
-        font-size: 38upx;
-        color: #F6863E;
-        font-weight: 500;
-        margin-bottom: 10upx;
-
-        text {
-            margin-left: 5upx
-        }
-
-        image {
-            vertical-align: text-top;
-            width: 42upx;
-            height: 42upx;
-        }
-    }
-}
-
-.borderRadiu {
-    border-radius: 8px;
-    background-color: #ffffff;
-
-    .customize {
-        padding: 0 18upx 18upx;
-
-        .title {
-            padding: 18upx 0;
-            font-size: 28upx;
-            // padding: 10px;
-        }
-    }
-
-    .business-img {
-        height: 210upx;
-        width: 310upx;
-        background-size: cover;
-
-        image {
-            width: 100%;
-            height: 100%;
-        }
-    }
-
-    .business-prompt {
-        padding-top: 16upx;
-        font-size: 20upx;
-        color: #999999;
-    }
-}
-
-.booder-top {
-    border-bottom: 1px solid rgb(238, 238, 238);
-    padding-bottom: 7px;
-
-    .uploader_video {
-        width: 310upx;
-        height: 210upx;
-    }
-
-    .video-container {
-        max-width: 100%;
-        /* 最大宽度为父容器宽度 */
-        max-height: 100%;
-
-        ::v-deep.uni-video-bar {
-            height: 62upx;
-            padding: 0
-        }
-    }
-
-    // ::v-deep video{
-    //     position: relative;
-    //     z-index: 1;
-    //     width: 310upx ;
-    //     height: 210upx;
-    //     .uni-video-bar .uni-video-bar-full{
-
-    //     }
-    // }
-}
-
-.sub-bottom {
-    position: fixed;
-    width: 100%;
-    bottom: 0;
-    background: #FFFFFF;
-    border-top: 1px solid #EEEEEE;
-}
-
-.uni-uploader__img {
-    width: 200upx;
-    height: 200upx;
-}
-
-.uni-uploader__file,
-.uploader_video {
-    position: relative;
-    z-index: 1;
-    width: 200upx;
-    height: 200upx;
-}
-
-.icon-cuo {
-    position: absolute;
-    right: 0;
-    top: 5upx;
-
-    color: #FFFFFF;
-    z-index: 999;
-    border-top-right-radius: 20upx;
-    border-bottom-left-radius: 20upx;
-}
-
-.business-hours {
-    padding: 27upx 22upx;
-    background: #F7F8FC;
-    font-size: 28upx;
-    border-radius: 8px 8px 8px 8px;
-    margin-bottom: 18upx;
-}
-
-.del-style {
-    // padding: 0 30upx;
-    width: 116upx;
-    background: #FFFFFF;
-    border-radius: 4px 4px 4px 4px;
-    border: 1px solid #EEEEEE;
-    color: #333333;
-    font-size: 26upx;
-    line-height: 50upx;
-    text-align: center;
-    // -radius: 4px 4px 4px 4px;
-}
-
-.business-date {
-    text {
-        margin-right: 22upx;
-    }
-}
+	page {
+		background: #F8F8FA;
+	}
+
+	.tab-top {
+		padding: 0 26upx;
+		padding-bottom: 130upx
+	}
+
+	.progress-status {
+		position: fixed;
+		width: 100%;
+		z-index: 9999;
+		background: #FFFFFF;
+
+		.status {
+			font-size: 38upx;
+			color: #F6863E;
+			font-weight: 500;
+			margin-bottom: 10upx;
+
+			text {
+				margin-left: 5upx
+			}
+
+			image {
+				vertical-align: text-top;
+				width: 42upx;
+				height: 42upx;
+			}
+		}
+	}
+
+	.borderRadiu {
+		border-radius: 8px;
+		background-color: #ffffff;
+
+		.customize {
+			padding: 0 18upx 18upx;
+
+			.title {
+				padding: 18upx 0;
+				font-size: 28upx;
+				// padding: 10px;
+			}
+		}
+
+		.business-img {
+			height: 210upx;
+			width: 310upx;
+			background-size: cover;
+
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+		.business-prompt {
+			padding-top: 16upx;
+			font-size: 20upx;
+			color: #999999;
+		}
+
+	}
+
+	.booder-top {
+		border-bottom: 1px solid rgb(238, 238, 238);
+		padding-bottom: 7px;
+
+		.uploader_video {
+			width: 310upx;
+			height: 210upx;
+		}
+
+		.video-container {
+			max-width: 100%;
+			/* 最大宽度为父容器宽度 */
+			max-height: 100%;
+
+			::v-deep.uni-video-bar {
+				height: 62upx;
+				padding: 0
+			}
+		}
+
+		// ::v-deep video{
+		//     position: relative;
+		//     z-index: 1;
+		//     width: 310upx ;
+		//     height: 210upx;
+		//     .uni-video-bar .uni-video-bar-full{
+
+		//     }
+		// }
+	}
+
+	.sub-bottom {
+		position: fixed;
+		width: 100%;
+		bottom: 0;
+		background: #FFFFFF;
+		border-top: 1px solid #EEEEEE;
+	}
+
+	.uni-uploader__img {
+		width: 200upx;
+		height: 200upx;
+	}
+
+	.uni-uploader__file,
+	.uploader_video {
+		position: relative;
+		z-index: 1;
+		width: 200upx;
+		height: 200upx;
+	}
+
+	.icon-cuo {
+		position: absolute;
+		right: 0;
+		top: 5upx;
+
+		color: #FFFFFF;
+		z-index: 999;
+		border-top-right-radius: 20upx;
+		border-bottom-left-radius: 20upx;
+	}
+
+	.business-hours {
+		padding: 27upx 22upx;
+		background: #F7F8FC;
+		font-size: 28upx;
+		border-radius: 8px 8px 8px 8px;
+		margin-bottom: 18upx;
+	}
+
+	.del-style {
+		// padding: 0 30upx;
+		width: 116upx;
+		background: #FFFFFF;
+		border-radius: 4px 4px 4px 4px;
+		border: 1px solid #EEEEEE;
+		color: #333333;
+		font-size: 26upx;
+		line-height: 50upx;
+		text-align: center;
+		// -radius: 4px 4px 4px 4px;
+	}
+
+	.business-date {
+		text {
+			margin-right: 22upx;
+		}
+	}
+
+	.data-item {
+		display: flex;
+		align-items: center;
+		border-bottom: 1px solid #eeeeee;
+		padding-left: 16rpx;
+		height: 80rpx;
+		align-items: center;
+
+		.custom-input {
+			width: 160rpx;
+		}
+	}
 </style>
 </style>

+ 457 - 174
pages/store/businessQua.vue

@@ -1,180 +1,463 @@
 <template>
 <template>
-    <view>
-        <cu-custom bgColor="bg-fff" :isBack="true">
-            <block slot="content"> 经营资质</block>
-        </cu-custom>
-        <status v-if="form && form.specialStatus !== null" :status="form.specialStatus" :updateTime="form.specialUpdateTime" :remark="form.specialRemark"></status>
-       
-        <view class="tab-top" :style="form && form.specialStatus == null ? 'margin-top: 14upx' : 'margin-top: 144upx;'">
-            <form>
-                <view class="borderRadiu">
-                    <view class=" cu-form-group margin-top1 justify-between">
-                        <view class="content ">
-                            <text class="text-bold">特殊行业经营许可证</text>
-                            <i class="text-bg "></i>
-                        </view>
-                    </view>
-                    <view class="customize">
-                        <view class="business-img flex align-center">
-                            <image :src="specialImg ? specialImg : '/static/store/xukezheng.png'"
-                                mode="" @click="businessChange()">
-                            </image>
-                        </view>
-                    </view>
-                </view>
-            </form>
-        </view>
-        <view class="padding flex sub-bottom">
-            <button class="cu-btn round line-gray  shadow" @click="$Router.push({ name: 'settings' })">取消</button>
-            <button style="margin-left: 12upx;width:77%" class="cu-btn bg-blue round " @click="sumbit">提交审核</button>
-        </view>
-    </view>
+	<view class="page">
+		<view class="top" style="90rpx">
+			<cu-custom bgColor="bg-fff" :isBack="true">
+				<block slot="content"> 经营资质</block>
+			</cu-custom>
+		</view>
+		<view class="" style="height:140rpx;margin-bottom: 20rpx;">
+			<status v-if="form && form.specialStatus !== null" :status="form.specialStatus" :updateTime="form.specialUpdateTime"
+				:remark="form.specialRemark"></status>
+		</view>
+		
+
+		<view class="tab-top">
+			<view class="content " style="margin-bottom: 16rpx;">
+				<text class="text-bold">分类选择</text>
+				<i class="text-bg "></i>
+			</view>
+			<view class="picker" @click="showPicker">
+				<span style="width: 104rpx;color: #232832;">分类</span>
+				<view class="right">
+					<span style="color: #333333;" v-if="showText">{{ showText}}</span>
+					<span v-else>请选择</span>
+					<u-icon name="arrow-right"></u-icon>
+				</view>
+
+			</view>
+
+			<!-- <form>
+				<view class="borderRadiu">
+					<view class=" cu-form-group margin-top1 justify-between">
+						<view class="content ">
+							<text class="text-bold">特殊行业经营许可证</text>
+							<i class="text-bg "></i>
+						</view>
+					</view>
+					<view class="customize">
+						<view class="business-img flex align-center">
+							<image :src="specialImg ? specialImg : '/static/store/xukezheng.png'" mode="" @click="businessChange()">
+							</image>
+						</view>
+					</view>
+				</view>
+			</form> -->
+		</view>
+		<view class="center">
+			<view class="fath" v-for="item in qualificationNameMap" :key="item.categoryId" style="margin-top: 10px">
+				<!-- <span style="font-weight: 600"> {{ item.categoryName }} <br /></span> -->
+				<view class="sun_box">
+					<view class="sun" v-for="(row, index) in item.qualificationNameCategoryDTOS" :key="index">
+						<!-- <a-upload v-model:file-list="row.imgList" list-type="picture-card" class="avatar-uploader"
+							:headers="headers" :action="url" :before-upload="beforeUpload" @change="uploadCertificate"
+							@remove="removeImage(4)">
+							<view v-if="row.imgList.length < 1">
+								<upload-outlined />
+								<view style="margin-top: 8px">上传附件</view>
+							</view>
+						</a-upload> -->
+						<view class="borderRadiu">
+							<view class=" cu-form-group margin-top1 justify-between">
+								<view class="content ">
+									<text class="text-bold">{{ row.qualificationName }}</text>
+									<i class="text-bg "></i>
+								</view>
+							</view>
+							<view class="customize">
+								<view class="business-img flex align-center">
+									<image :src="row.special ? row.special : '/static/store/xukezheng.png'" mode=""
+										@click="businessChange(row)">
+									</image>
+								</view>
+							</view>
+						</view>
+
+					</view>
+				</view>
+			</view>
+		</view>
+
+
+		<view class="padding flex " v-if="this.form.specialStatus !== 0">
+			<button class="cu-btn round line-gray  shadow" @click="$Router.push({ name: 'settings' })">取消</button>
+			<button style="margin-left: 12upx;width:77%" class="cu-btn bg-blue round " @click="sumbit">提交审核</button>
+		</view>
+		<ba-tree-picker ref="treePicker" :multiple='true' @select-change="selectChange" title="选择分类" :localdata="treeData"
+			valueKey="key" textKey="title" childrenKey="children" />
+	</view>
 </template>
 </template>
 <script>
 <script>
-import configService from '../../common/service/config.service'
-import { USER_INFO } from "@/common/util/constants"
-import status from "./components/status.vue"
-export default {
-    data() {
-        return {
-            specialImg: '',
-            form: {}
-        }
-    },
-    components:{status},
-    async onLoad(data) {
-        if (data.params) {
-            let obj = JSON.parse(decodeURIComponent(data.params));
-            this.form = obj
-            this.specialImg = obj.special
-        }
-    },
-    methods: {
-        async businessChange() {
-            let [chooseImageErr, chooseImageRes] = await uni.chooseImage({
-                count: 1,
-                sizeType: ['compressed']
-            });
-            let size = chooseImageRes.tempFiles[0].size / 1024 / 1024 < 5;
-            if (!size) {
-                this.$refs.uToast.show({
-                    title: '上传图片大小不能超过 5MB!',
-                    type: 'error',
-                })
-                return false
-            }
-
-            if (chooseImageRes) {
-                // this.specialImg = chooseImageRes.tempFilePaths[0];
-                uni.uploadFile({
-                    url: configService.apiUrl + '/sys/common/upload',
-                    filePath: chooseImageRes.tempFilePaths[0],
-                    name: "file",
-                    formData: {
-                        'biz': 'temp',
-                    },
-                    success: (files) => {
-                        let data = JSON.parse(files.data);
-                        if (data.success) {
-                            this.specialImg = configService.apiUrl + '/' + data.message
-                            
-                        }
-                    }
-                });
-            }
-        },
-        sumbit() {
-            let data = {
-                merchantId: uni.getStorageSync(USER_INFO).merchantId,
-                special: this.specialImg,
-            }
-
-            if (this.form.specialStatus == null) {
-                this.$http.post('/merchant/localMerchantSpecial/add', data).then(res => {
-                    if (res.data.success) {
-                        this.$tip.success(res.data.result || '成功')
-                        uni.navigateBack({
-                            delta: 1 // 返回的页面数,默认为1
-                        })
-                    }
-                    else {
-                        this.$tip.error(res.data.message);
-                    }
-                })
-            }
-            else {
-                this.$http.post('/merchant/localMerchantSpecial/edit', { ...data, id: this.form.specialId }).then(res => {
-                    if (res.data.success) {
-                        this.$tip.success(res.data.result || '成功')
-                        uni.navigateBack({
-                            delta: 1 // 返回的页面数,默认为1
-                        })
-                    }
-                    else {
-                        this.$tip.error(res.data.message);
-                    }
-                })
-            }
-
-        }
-    }
-}
+	import configService from '../../common/service/config.service'
+	import baTreePicker from "@/components/ba-tree-picker/ba-tree-picker.vue"
+	import {
+		USER_INFO
+	} from "@/common/util/constants"
+	import status from "./components/status.vue"
+	export default {
+
+		data() {
+			return {
+				specialImg: '',
+				form: {},
+				treeData: [],
+				isSelectType: false,
+				treeLeft: [], //一级列表
+				showText: '',
+				classifyList: [],
+				qualificationNameMap: []
+			}
+		},
+		components: {
+			status,
+			baTreePicker
+		},
+		async onLoad(data) {
+			if (data.params) {
+				let obj = JSON.parse(decodeURIComponent(data.params));
+				this.form = obj
+				this.qualificationNameMap = this.form.qualificationNameListDTOS;
+				this.qualificationNameMap.forEach((item) => {
+					this.showText += item.categoryName+' / '
+					item.qualificationNameCategoryDTOS?.forEach((row) => {
+						// row.special = '';
+						row.imgList = [];
+						row.imgList.push({
+							url: row.special,
+						});
+					});
+				});
+				// this.specialImg = obj.special
+			}
+		},
+		methods: {
+			getTree() {
+				this.$http.get('/sys/category/loadTreeRoot?pcode=' + 'c09' + '&async=' + false).then(res => {
+					this.treeData = res.data.result
+					console.log(this.treeData)
+				})
+			},
+			showPicker() {
+				this.$refs.treePicker._show();
+			},
+			//监听选择(ids为数组)
+			selectChange(ids, names) {
+				console.log(ids, names)
+				this.classifyList = ids
+				this.showText = names
+				this.selectClassify()
+			},
+			selectClassify() {
+				let categoryIds = this.classifyList.join(',')
+				let merchantId =  uni.getStorageSync(USER_INFO).merchantId
+				let categoryNames = this.showText
+				this.$http.get('/localQualificationClassifica/localQualificationClassifica/getByCategoryId?categoryIds=' +
+					categoryIds+'&merchantId='+merchantId+'&categoryNames='+categoryNames).then(res => {
+					this.qualificationNameMap = res.data.result
+					this.qualificationNameMap.forEach((item) => {
+						item.qualificationNameCategoryDTOS?.forEach((row) => {
+							row.special = row.special?row.special:'';
+							row.imgList = [];
+						});
+					});
+				})
+			},
+
+
+			async businessChange(row) {
+				let [chooseImageErr, chooseImageRes] = await uni.chooseImage({
+					count: 1,
+					sizeType: ['compressed']
+				});
+				let size = chooseImageRes.tempFiles[0].size / 1024 / 1024 < 5;
+				if (!size) {
+					this.$refs.uToast.show({
+						title: '上传图片大小不能超过 5MB!',
+						type: 'error',
+					})
+					return false
+				}
+
+				if (chooseImageRes) {
+					// this.specialImg = chooseImageRes.tempFilePaths[0];
+					uni.uploadFile({
+						url: configService.apiUrl + '/sys/common/upload',
+						filePath: chooseImageRes.tempFilePaths[0],
+						name: "file",
+						formData: {
+							'biz': 'temp',
+						},
+						success: (files) => {
+							let data = JSON.parse(files.data);
+							if (data.success) {
+								// this.specialImg = configService.apiUrl + '/' + data.message
+								row.special = configService.apiUrl + '/' + data.message
+
+							}
+						}
+					});
+				}
+			},
+			sumbit() {
+				let hasEmptyImage = false;
+				this.qualificationNameMap.forEach((item) => {
+					item.qualificationNameCategoryDTOS?.forEach((row) => {
+						console.log(row);
+						// if (row.imgList[0]?.response) {
+						//   row.special = import.meta.env.VITE_GLOB_DOMAIN_URL + '/' + row.imgList[0].response.message;
+						// }
+
+						// 检查图片是否为空
+						if (!row.special) {
+							hasEmptyImage = true;
+						}
+					});
+				});
+				let data = {
+					merchantId: uni.getStorageSync(USER_INFO).merchantId,
+					merchantUserId: this.form.merchantUserId,
+					merchantUserName: this.form.merchantUserName,
+					// special: this.specialImage[0].url,
+					qualificationNameListDTOS: this.qualificationNameMap,
+					source: 1,
+				};
+				console.log(data);
+
+				if (hasEmptyImage) {
+					// message.error('请上传全部图片');
+					uni.showToast({
+						icon:'none',
+						message:'请上传全部图片'
+					})
+				} else {
+					if (this.form.specialStatus == null) {
+						this.$http.post('/merchant/localMerchantSpecial/add', data).then(res => {
+							if (res.data.success) {
+								this.$tip.success(res.data.result || '成功')
+								uni.navigateBack({
+									delta: 1 // 返回的页面数,默认为1
+								})
+							} else {
+								this.$tip.error(res.data.message);
+							}
+						})
+					} else {
+						this.$http.post('/merchant/localMerchantSpecial/edit', {
+							...data,
+							id: this.form.specialId
+						}).then(res => {
+							if (res.data.success) {
+								this.$tip.success(res.data.result || '成功')
+								uni.navigateBack({
+									delta: 1 // 返回的页面数,默认为1
+								})
+							} else {
+								this.$tip.error(res.data.message);
+							}
+						})
+					}
+					// this.$http.post('/merchant/examine/new/special/check', data).then((res) => {
+					// 	// this.getDetail();
+					// });
+				}
+
+				// let data = {
+				// 	merchantId: uni.getStorageSync(USER_INFO).merchantId,
+				// 	special: this.specialImg,
+				// }
+
+			
+
+			}
+		},
+		mounted() {
+			// this.getLeftTree()
+			this.getTree()
+		}
+	}
 </script>
 </script>
 <style scoped lang="scss">
 <style scoped lang="scss">
-page {
-    background: #F8F8FA;
-}
-
-.tab-top {
-    padding: 0 26upx;
-}
-
-
-.borderRadiu {
-    background-color: #fff;
-
-    .customize {
-        padding: 0 18upx 18upx;
-    }
-
-    .title {
-        font-size: 30upx;
-        // padding: 10px;
-    }
-
-    
-.business-img {
-    height: 218upx;
-    width: 360upx;
-    padding: 16upx;
-    // padding-bottom: 16upx;
-    background: url('/static/login/yingye2.png');
-    margin: 16upx auto;
-    background-size: cover;
-
-    image {
-        width: 100%;
-        height: 100%;
-    }
-}
-
-    .business-prompt {
-        padding-top: 16upx;
-        font-size: 20upx;
-        color: #999999;
-    }
-}
-
-.booder-top {
-    border-bottom: 1px solid rgb(238, 238, 238);
-    padding-bottom: 7px;
-}
-
-.sub-bottom {
-    position: fixed;
-    width: 100%;
-    bottom: 0;
-    background: #FFFFFF;
-    border-top: 1px solid #EEEEEE;
-}
+	page {
+		background: #F8F8FA;
+	}
+
+	.page {
+		width: 100vw;
+		height: 100vh;
+		display: flex;
+		flex-direction: column;
+
+	}
+
+	.tab-top {
+		width: 95%;
+		padding: 20rpx 16rpx;
+		background-color: #fff;
+		margin: 0rpx auto;
+	}
+
+
+	.borderRadiu {
+		background-color: #fff;
+		border-radius: 16rpx;
+		.customize {
+			padding: 0 18upx 18upx;
+		}
+
+		.title {
+			font-size: 30upx;
+			// padding: 10px;
+		}
+
+
+		.business-img {
+			height: 218upx;
+			width: 360upx;
+			padding: 16upx;
+			// padding-bottom: 16upx;
+			background: url('/static/login/yingye2.png');
+			margin: 16upx auto;
+			background-size: cover;
+
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+		.business-prompt {
+			padding-top: 16upx;
+			font-size: 20upx;
+			color: #999999;
+		}
+	}
+
+	.booder-top {
+		border-bottom: 1px solid rgb(238, 238, 238);
+		padding-bottom: 7px;
+	}
+
+	.sub-bottom {
+		position: fixed;
+		width: 100%;
+		bottom: 0;
+		background: #FFFFFF;
+		border-top: 1px solid #EEEEEE;
+	}
+
+	.picker {
+		height: 74rpx;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		font-size: 28rpx;
+		color: #999999;
+		border-bottom: 1px solid #EEEEEE;
+
+		.right {
+			flex: 1;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+		}
+	}
+
+	.popup {
+		width: 100vw;
+		height: 100vh;
+		position: fixed;
+		top: 0;
+		left: 0;
+		background: rgba(0, 0, 0, 0.4);
+		display: flex;
+		align-items: flex-end;
+
+		z-index: 99;
+
+		.model {
+			width: 100%;
+			background-color: #fff;
+			border-radius: 20rpx 20rpx 0rpx 0rpx;
+			padding: 0rpx 24rpx;
+			padding-bottom: 20rpx;
+
+			.title {
+				width: 100%;
+				height: 86rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				border-bottom: 1px solid #EEEEEE;
+				position: relative;
+
+				image {
+					width: 40rpx;
+					height: 40rpx;
+					position: absolute;
+					right: 0px;
+				}
+			}
+
+			.tree {
+				display: flex;
+				height: 546rpx;
+
+				.left {
+					overflow-y: auto;
+
+					.item {
+						width: 224rpx;
+						height: 78rpx;
+						padding: 20rpx;
+						font-size: 26rpx;
+					}
+
+					.active {
+						background: rgba(68, 154, 255, 0.1);
+						color: #2983EC;
+					}
+				}
+
+				.border {
+					border-left: 1px solid #eeeeee;
+					border-right: 1px solid #eeeeee;
+				}
+			}
+
+			.sub {
+				display: flex;
+				justify-content: space-between;
+				margin-top: 16rpx;
+				border-top: 1px solid #eeeeee;
+				padding-top: 16rpx;
+
+				.submit {
+					width: 672rpx;
+					height: 76rpx;
+					background: linear-gradient(90deg, #77B6FF 0%, #449AFF 100%);
+					border-radius: 53rpx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					font-size: 28rpx;
+					color: #FFFFFF;
+				}
+			}
+		}
+	}
+
+	.center {
+		flex: 1;
+		overflow-y: auto;
+		padding: 0 24rpx;
+		.fath {
+			width: 100%;
+			// height: 100px;
+		}
+	}
+
+	::v-deep .uni-flex-item {
+		flex: 1;
+		display: flex;
+		align-items: center;
+	}
 </style>
 </style>

+ 5 - 5
pages/store/components/status.vue

@@ -7,9 +7,9 @@
                     <image src="/static/login/status1.png" mode="aspectFit"></image>
                     <image src="/static/login/status1.png" mode="aspectFit"></image>
                     <text style="font-weight: 500;">待审核</text>
                     <text style="font-weight: 500;">待审核</text>
                 </view>
                 </view>
-                <text style="color: #999;">{{updateTime }}</text>
+                <!-- <text style="color: #999;">{{updateTime }}</text> -->
             </view>
             </view>
-            <view  style="color: #666666;"> 提交的店铺信息待审核中</view>
+            <view  style="color: #666666;">{{updateTime }} 提交的店铺信息待审核中</view>
         </view>
         </view>
         <view v-if="status== 1">
         <view v-if="status== 1">
             <view class="flex justify-between">
             <view class="flex justify-between">
@@ -17,7 +17,7 @@
                     <image src="/static/login/status2.png" mode="aspectFit"></image>
                     <image src="/static/login/status2.png" mode="aspectFit"></image>
                     <text style="font-weight: 500;color: #509B45;">审核通过</text>
                     <text style="font-weight: 500;color: #509B45;">审核通过</text>
                 </view>
                 </view>
-                <text style="color: #999;">{{updateTime }}</text>
+                <!-- <text style="color: #999;">{{updateTime }}</text> -->
             </view>
             </view>
             <view style="color: #666666;">{{ updateTime }} 提交的店铺信息审核通过</view>
             <view style="color: #666666;">{{ updateTime }} 提交的店铺信息审核通过</view>
         </view>
         </view>
@@ -27,9 +27,9 @@
                     <image src="/static/login/status3.png" mode="aspectFit"></image>
                     <image src="/static/login/status3.png" mode="aspectFit"></image>
                     <text style="color: #F34F4F;font-weight: 500;">审核驳回</text>
                     <text style="color: #F34F4F;font-weight: 500;">审核驳回</text>
                 </view>
                 </view>
-                <text style="color: #999;">{{updateTime }}</text>
+                <!-- <text style="color: #999;">{{updateTime }}</text> -->
             </view>
             </view>
-            <view>驳回原因:{{ remark }} </view>
+            <view>驳回原因:{{updateTime }}{{ remark }} </view>
         </view>
         </view>
     </view>
     </view>
 </template>
 </template>

+ 374 - 0
pages/store/headPhoto.vue

@@ -0,0 +1,374 @@
+<template>
+	<view>
+		<cu-custom bgColor="bg-fff" :isBack="true">
+			<block slot="content" style="font-size: 36rpx;"> 商户形象</block>
+		</cu-custom>
+		<status v-if="form && form.headPhotoStatus !== null" :status="form.headPhotoStatus" :updateTime="form.headPhotoUpdateTime"
+			:remark="form.headPhotoRemark"></status>
+		<view class="tab-top" :style="form && form.headPhotoStatus == null ? 'margin-top: 14upx;' : 'margin-top: 144upx;'">
+			<view class="borderRadiu">
+				<view class="customize">
+					<view class=" cu-form-group justify-between">
+						<view class="content ">
+							<text class="text-bold">门头照片</text>
+							<i class="text-bg "></i>
+						</view>
+					</view>
+					<view class="grid col-4 grid-square flex-sub booder-top">
+						<view class="bg-img" v-for="(item, index) in form.headPhoto.split(',')" :key="index" @tap="ViewImage"
+							:data-url="form.headPhoto[index]">
+							<image :src="item" mode="aspectFill"></image>
+							<view class="cu-tag bg-red" @tap.stop="DelImg" :data-index="index">
+								<text class='cuIcon-close'></text>
+							</view>
+						</view>
+						<view class="solids" @tap="ChooseImage" v-if="form.headPhoto.split(',').length < 20">
+							<text class='cuIcon-cameraadd'></text>
+						</view>
+					</view>
+					<view class="business-prompt">
+						门店照片需包含完整的门店入口和招牌名称,建议现场拍摄门头照;最多可上传10张,支持格式bmp、png、jpeg、jpg,单个图片不超过5MB,建议宽高比7:5
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="padding flex sub-bottom" style="justify-content: space-around;">
+			<button class="cu-btn round line-gray shadow" @click="$Router.push({ name: 'settings' })"
+				style="width: 205rpx;">取消</button>
+			<button style="width:443rpx;background: linear-gradient( 90deg, #77B6FF 0%, #449AFF 100%);border-radius:53rpx ;"
+				class="cu-btn bg-blue round " @click="sumbit">提交审核</button>
+		</view>
+	</view>
+</template>
+<script>
+	import configService from '../../common/service/config.service'
+	import {
+		USER_INFO
+	} from "@/common/util/constants"
+	import status from "./components/status.vue"
+
+	export default {
+		components: {
+			status
+		},
+		data() {
+			return {
+				photoList: [],
+				form: {},
+				src: '',
+				cameraList: [{
+						value: 'back',
+						name: '后置摄像头',
+						checked: 'true'
+					},
+					{
+						value: 'front',
+						name: '前置摄像头'
+					},
+				],
+				businessData: [],
+			}
+		},
+		async onLoad(data) {
+			if (data.params) {
+				let obj = JSON.parse(decodeURIComponent(data.params));
+				// this.video = obj.video ? obj.video : ''
+				obj.photo = obj.photo ? obj.photo.split(',').filter(id => id !== '') : []
+				this.form = obj
+				
+			}
+
+		},
+		async onShow() {
+			let res = await this.$http.get('/merchant/localMerchantTime/list?merchantId=' + uni.getStorageSync(USER_INFO)
+				.merchantId, )
+			if (res.data.success) {
+				this.businessData = res.data.result
+			} else {
+				this.$tip.error(res.data.message);
+			}
+		},
+		methods: {
+			hoursChange(index) {
+				const queryString = encodeURIComponent(JSON.stringify({
+					index,
+					arr: this.businessData
+				}))
+				uni.navigateTo({
+					url: `/pages/store/addHours?params=${queryString}`
+				})
+
+			},
+			DelImg(e) {
+				uni.showModal({
+					title: '提示',
+					content: '确定要删除?',
+					cancelText: '取消',
+					confirmText: '确定',
+					success: res => {
+						if (res.confirm) {
+							// this.photoList.splice(e.currentTarget.dataset.index, 1)
+							this.form.photo.splice(e.currentTarget.dataset.index, 1)
+
+						}
+					}
+				})
+			},
+			ChooseImage() {
+				uni.chooseImage({
+					// count: 4, //默认9
+					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+					sourceType: ['album'], //从相册选择
+					success: (res) => {
+						if (res) {
+							// this[type + 'Img'] = chooseImageRes.tempFilePaths[0];
+							uni.uploadFile({
+								url: configService.apiUrl + '/sys/common/upload',
+								filePath: res.tempFilePaths[0],
+								name: "file",
+								formData: {
+									'biz': 'temp',
+								},
+								success: (files) => {
+									let data = JSON.parse(files.data);
+									if (data.success) {
+										let temp = this.form.headPhoto.split(',')
+										if (this.form.headPhoto.split(',').length > 0) {
+											console.log('11111')
+											// this.photoList = this.photoList.concat(res.tempFilePaths)
+											// this.form.headPhoto+(configService.apiUrl + '/' + data.message)
+											temp.push(configService.apiUrl + '/' + data.message)
+											 this.form.headPhoto = temp.join(',')
+											console.log(this.form.headPhoto)
+										} else {
+												console.log('22222')
+											// this.photoList =res.tempFilePaths
+											this.form.headPhoto = [configService.apiUrl + '/' + data.message]
+										}
+									}
+								}
+							})
+						}
+
+					}
+				});
+			},
+			ViewImage(e) {
+				uni.previewImage({
+					urls: this.form.headPhoto,
+					current: e.currentTarget.dataset.url
+				});
+			},
+			sumbit() {
+				let data = {
+					merchantId: uni.getStorageSync(USER_INFO).merchantId,
+					headPhoto: this.form.headPhoto,
+					id:this.form.headPhotoId
+				}
+				if (this.form.headPhotoStatus == null) {
+					this.$http.post('merchant/localMerchantHeadPhoto/add', data).then(res => {
+						if (res.data.success) {
+							this.$tip.success(res.data.result || '成功')
+							uni.navigateBack({
+								delta: 1 // 返回的页面数,默认为1
+							})
+						} else {
+							this.$tip.error(res.data.message);
+						}
+					})
+				} else {
+					this.$http.post('merchant/localMerchantHeadPhoto/edit',data).then(res => {
+						if (res.data.success) {
+							this.$tip.success(res.data.result || '成功')
+							uni.navigateBack({
+								delta: 1 // 返回的页面数,默认为1
+							})
+						} else {
+							this.$tip.error(res.data.message);
+						}
+					})
+				}
+
+			},
+			delClick(val) {
+				this.$http.delete('/merchant/localMerchantTime/delete?id=' + val.id).then(res => {
+					if (res.data.success) {
+						this.$tip.success(res.data.result || '成功')
+						this.$http.get('/merchant/localMerchantTime/list?merchantId=' + uni.getStorageSync(USER_INFO).merchantId)
+							.then(res => {
+								if (res.data.success) {
+									this.businessData = res.data.result
+								} else {
+									this.$tip.error(res.data.message);
+								}
+							})
+
+					} else {
+						this.$tip.error(res.data.message);
+					}
+				})
+			}
+		}
+	}
+</script>
+<style scoped lang="scss">
+	page {
+		background: #F8F8FA;
+	}
+
+	::v-deep .cu-custom {
+		border: none !important;
+	}
+
+	.tab-top {
+		padding: 0 26upx;
+		padding-bottom: 130upx
+	}
+
+	.progress-status {
+		position: fixed;
+		width: 100%;
+		z-index: 9999;
+		background: #FFFFFF;
+		border: none;
+
+		.status {
+			font-size: 38upx;
+			color: #F6863E;
+			font-weight: 500;
+			margin-bottom: 10upx;
+
+			text {
+				margin-left: 5upx
+			}
+
+			image {
+				vertical-align: text-top;
+				width: 42upx;
+				height: 42upx;
+			}
+		}
+	}
+
+	.borderRadiu {
+		border-radius: 8px;
+		background-color: #ffffff;
+
+		.customize {
+			padding: 0 18upx 18upx;
+
+			.title {
+				padding: 18upx 0;
+				font-size: 28upx;
+				// padding: 10px;
+			}
+		}
+
+		.business-img {
+			height: 210upx;
+			width: 310upx;
+			background-size: cover;
+
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+		.business-prompt {
+			padding-top: 16upx;
+			font-size: 20rpx;
+			color: #999999;
+		}
+	}
+
+	.booder-top {
+		border-bottom: 1px solid rgb(238, 238, 238);
+		padding-bottom: 7px;
+
+		.uploader_video {
+			width: 310upx;
+			height: 210upx;
+		}
+
+		.video-container {
+			max-width: 100%;
+			/* 最大宽度为父容器宽度 */
+			max-height: 100%;
+
+			::v-deep.uni-video-bar {
+				height: 62upx;
+				padding: 0
+			}
+		}
+
+		// ::v-deep video{
+		//     position: relative;
+		//     z-index: 1;
+		//     width: 310upx ;
+		//     height: 210upx;
+		//     .uni-video-bar .uni-video-bar-full{
+
+		//     }
+		// }
+	}
+
+	.sub-bottom {
+		position: fixed;
+		width: 100%;
+		bottom: 0;
+		background: #FFFFFF;
+		border-top: 1px solid #EEEEEE;
+	}
+
+	.uni-uploader__img {
+		width: 200upx;
+		height: 200upx;
+	}
+
+	.uni-uploader__file,
+	.uploader_video {
+		position: relative;
+		z-index: 1;
+		width: 200upx;
+		height: 200upx;
+	}
+
+	.icon-cuo {
+		position: absolute;
+		right: 0;
+		top: 5upx;
+
+		color: #FFFFFF;
+		z-index: 999;
+		border-top-right-radius: 20upx;
+		border-bottom-left-radius: 20upx;
+	}
+
+	.business-hours {
+		padding: 27upx 22upx;
+		background: #F7F8FC;
+		font-size: 28upx;
+		border-radius: 8px 8px 8px 8px;
+		margin-bottom: 18upx;
+	}
+
+	.del-style {
+		// padding: 0 30upx;
+		width: 116upx;
+		background: #FFFFFF;
+		border-radius: 4px 4px 4px 4px;
+		border: 1px solid #EEEEEE;
+		color: #333333;
+		font-size: 26upx;
+		line-height: 50upx;
+		text-align: center;
+		// -radius: 4px 4px 4px 4px;
+	}
+
+	.business-date {
+		text {
+			margin-right: 22upx;
+		}
+	}
+</style>

+ 239 - 0
pages/store/otherSet.vue

@@ -0,0 +1,239 @@
+<template>
+	<view class="other" style="background: #F7F8FC;">
+		<cu-custom bgColor="bg-fff" :isBack="true">
+			<block slot="content"> 其他</block>
+		</cu-custom>
+		<view class="center">
+			<view class=" cu-form-group" style="margin: 0;">
+				<view class="content ">
+					<text class="text-bold">其他 </text>
+					<i class="text-bg " style="width: 100%;"></i>
+				</view>
+			</view>
+			<view>
+				<view class="" style="display: flex;align-items: center;height: 55rpx;margin-bottom: 16rpx;">
+					<text style="width: 104rpx;font-size: 26rpx;">选择分类</text>
+					<view class="" style="flex: 1; text-align: end;" @click="isShow = true">
+						<span style="color: #333333;font-size: 24rpx;margin-right: 15rpx;" v-if="name">{{name}}</span>
+						<span style="color: #999999;font-size: 24rpx;margin-right: 15rpx;" v-else>去选择</span>
+					</view>
+					<u-icon name="arrow-right" style="margin-left: 17rpx;color: #C7C6CA"></u-icon>
+				</view>
+				
+				<view class="" v-for="(item,index) in tags" :key="item.id" style="display: flex;align-items: center;height: 55rpx;margin-bottom: 20rpx;" 	v-if="tags.length>0">
+					<text style="width: 104rpx;font-size: 26rpx;">{{item.attribute}}</text>
+					<view class="" style="flex: 1; text-align: end;" @click="open(index)">
+						<span v-if="activeTag.length>0">{{showTags}}</span>
+						<span style="color: #999999;font-size: 24rpx;margin-right: 15rpx;" v-if="activeTag.length==0">去选择</span>
+					</view>
+					<u-icon name="arrow-right" style="margin-left: 17rpx;color: #C7C6CA"></u-icon>
+				</view>
+
+			</view>
+		</view>
+		<selectService v-if="isShow" @transmitType="confirmLocality" @cutPopup="isShow = false" />
+		<uni-popup ref="popup" type="bottom">
+			<view class="popup-box">
+				<view class="popup-title">
+					<text>请选择门店支持的用餐场景</text>
+					<image src="/static/store/detele.png" mode="aspectFit" @click=" $refs.popup.close()"></image>
+				</view>
+				<view style="padding-bottom:20upx;border-bottom: 1px solid #EEEEEE;">
+					<!-- <text v-for="(tag, index) in tags" :key="index" class="tag-type"
+						:class="{ 'selected-background': isSelected(tag) }" :style="tag == '空调' ? 'margin-right:0' : ''"
+						@click="toggleSelection(tag)">
+						{{ tag }}
+					</text> -->
+					<view class="" >
+						<view class="item-box" v-if="tags.length>0">
+							<view class="item" :class="row.select?'active':''" v-for="(row,index) in tags[levelIndex].attributeValueList"
+								:key="index" @click="selectItem(row)">
+								{{row.value}}
+								<image src="/static/index/select.png" mode="" v-if="row.select"></image>
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class=" flex sub-bottom justify-between" style="padding:16rpx 24rpx;">
+					<button style="width:100%;background: linear-gradient( 90deg, #77B6FF 0%, #449AFF 100%);"
+						class="cu-btn bg-blue  round shadow" @click="submit">确定</button>
+				</view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	import selectService from '../../components/selectService.vue'
+	export default {
+		components: {
+			selectService
+		},
+		data() {
+			return {
+				isShow: false,
+				form: {},
+				id: '',
+				name: '',
+				selectTags: [],
+				isTag: false,
+				tags: [],
+				selectedIndices: [], // 用于存储被选中的标签索引
+				activeTag: [],
+				showTags: '',
+				levelIndex:0
+			}
+		},
+		methods: {
+			open(index){
+				this.$refs.popup.open(),
+				this.levelIndex = index
+			},
+			//选择类型
+			confirmLocality(data) {
+				this.id = data.id
+				this.name = data.name
+				this.isShow = false
+				let merchantId = uni.getStorageSync('login_user_info').merchantId
+				this.$http.get("/localOther/localProductClassValue/queryByClassId?id=" + this.id + '&merchantId=' + merchantId)
+					.then(res => {
+						console.log(res)
+						if (res.data.success) {
+							this.tags = res.data.result
+						} else {}
+					})
+			},
+			selectItem(row) {
+				row.select = !row.select
+			},
+			submit() {
+			    // 提前获取 merchantId
+			    const merchantId = uni.getStorageSync('login_user_info').merchantId;
+			    
+			    // 处理选中的标签
+			    let selectedTags = this.tags.flatMap(item => {
+			        return item.attributeValueList
+			            .filter(row => row.select)
+			            .map(row => ({
+			                tag: row.value
+			            }));
+			    });
+			
+			    this.activeTag.push(...selectedTags);
+			    this.showTags = this.activeTag.slice(0, 3).map(tag => tag.tag).join(',');
+			    const lastItem = this.tags[this.tags.length - 1];
+					console.log(merchantId)
+			    let data = {
+			        attribute: lastItem?.attribute,
+			        attributeValue: this.activeTag.map(tag => tag.tag).join(','),
+			        classId: lastItem?.classId,
+			        merchantId: merchantId // 确保merchantId包含在数据中
+			    };
+			
+			    this.$http.post('/localOther/localMerchantOther/add', data)
+			        .then(res => {
+			            console.log(res);
+									if(res.data.code == 200){
+										this.$refs.popup.close()
+										// uni.navigateTo({
+										// 	url:'/pages/store/settings'
+										// })
+									}
+			        })
+			        .catch(err => {
+			            console.error(err);
+			        });
+			},
+
+			// 检查一个标签是否被选中
+			isSelected(tag) {
+				return this.selectedIndices.includes(tag);
+			},
+			// 切换标签的选中状态
+			toggleSelection(tag) {
+				const indexIndex = this.selectedIndices.indexOf(tag);
+				if (indexIndex > -1) {
+					// 如果标签已经被选中,则移除它
+					this.selectedIndices.splice(indexIndex, 1);
+				} else {
+					// 如果标签没有被选中,则添加它
+					this.selectedIndices.push(tag);
+				}
+			},
+		},
+		onLoad(options) {
+			// let dat = JSON.parse(options.params)
+			// console.log(dat)
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.other {
+		width: 100vw;
+		height: 100vh;
+	}
+
+	.center {
+		border-top: 1px solid #f0f3f5;
+		padding: 0px 40rpx;
+		background-color: #fff;
+	}
+
+	.popup-box {
+		background: #FFFFFF;
+		padding: 0 27upx;
+		border-radius: 20px 20px 0px 0px;
+
+		.popup-title {
+			padding: 22upx 0;
+			position: relative;
+			text-align: center;
+			font-weight: 500;
+			font-size: 34upx;
+			color: #333333;
+			border-bottom: 1px solid #EEEEEE;
+
+			image {
+				position: absolute;
+				right: 0;
+				width: 42upx;
+				height: 42upx;
+			}
+		}
+	}
+
+	.item-box {
+		display: flex;
+		justify-content: space-between;
+		flex-wrap: wrap;
+		padding-top: 24rpx;
+
+		.item {
+			width: 144rpx;
+			height: 52rpx;
+			border-radius: 4rpx;
+			border: 1px solid #C2C2C2;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			font-size: 24rpx;
+			margin-bottom: 24rpx;
+			position: relative;
+
+			image {
+				width: 20rpx;
+				height: 20rpx;
+				position: absolute;
+				top: 0;
+				right: 0;
+			}
+		}
+
+		.active {
+			background: rgba(68, 154, 255, 0.1);
+			border: 1px solid #449AFF;
+			color: #2983EC;
+		}
+	}
+</style>

+ 361 - 254
pages/store/settings.vue

@@ -1,285 +1,392 @@
 <template>
 <template>
-    <view>
-        <cu-custom bgColor="bg-fff" :isBack="true">
-            <block slot="content">店铺设置</block>
-        </cu-custom>
-        <view class="bg-fff" v-for="ele in ulList" :key="ele.name">
-            <view class=" cu-form-group" :style="ele.name == '基本信息' ? 'margin-top:0' : ''">
-                <view class="content ">
-                    <text class="text-bold">{{ ele.name }}</text>
-                    <i class="text-bg "></i>
-                </view>
-            </view>
-            <view v-for="val in ele.liList" :key="val.label" >
-                <view class="cu-form-group justify-between">
-                <view class="title" v-if="val.status">
-                    <text>{{ val.label }}</text>
-                    <text v-if="indexOption[val.status] == 0" class="bg-orange">待审核</text>
-                    <text v-if="indexOption[val.status] == 1" class="bg-grey">审核通过</text>
-                    <text v-if="indexOption[val.status] == 2" class="bg-pink">审核驳回</text>
-                </view>
-                <view>
-                    <text style="color: #C7C6CA ;" @click="jump(val)">去配置</text>
-                    <text class='cuIcon-right' style="color: #C7C6CA ;"></text>
-                </view>
-            </view>
-                <view v-if="val.label == '服务设施'" style="padding-left: 42upx;">
-                    <text v-for="(tag, index) in selectTags" :key="index" class="tag-type tag-type-po"  >
-                        {{ tag }}
-                    </text>
-                </view>
-            </view>
-        </view>
-        <uni-popup ref="popup" type="bottom" >
-            <view class="popup-box">
-                <view class="popup-title">
-                    <text>选择配套设施</text>
-                    <image src="/static/store/detele.png" mode="aspectFit" @click=" $refs.popup.close()"></image>
-                </view>
-                <view style="padding-bottom:20upx;border-bottom: 1px solid #EEEEEE;">
-                    <text v-for="(tag, index) in tags" :key="index" class="tag-type"
-                        :class="{ 'selected-background': isSelected(tag) }"
-                        :style="tag == '空调' ? 'margin-right:0' : ''" @click="toggleSelection(tag)">
-                        {{ tag }}
-                    </text>
-                </view>
-                <view class=" flex sub-bottom justify-between">
-                    <button class="cu-btn round line-gray  shadow" @click=" $refs.popup.close()">取消</button>
-                    <button style="width:77%" class="cu-btn bg-blue  round shadow" @click="submit">确定</button>
-                </view>
-            </view>
-        </uni-popup>
-    </view>
+	<view>
+		<cu-custom bgColor="bg-fff" :isBack="true">
+			<block slot="content">店铺设置</block>
+		</cu-custom>
+		<view class="bg-fff" v-for="ele in ulList" :key="ele.name">
+			<view class=" cu-form-group" :style="ele.name == '基本信息' ? 'margin-top:0' : ''">
+				<view class="content ">
+					<text class="text-bold">{{ ele.name }}</text>
+					<i class="text-bg "></i>
+				</view>
+			</view>
+			<view v-for="val in ele.liList" :key="val.label">
+				<view class="cu-form-group justify-between">
+					<view class="title" v-if="val.status" style="display: flex;align-items: center;">
+						<text>{{ val.label }}  </text>
+						<text v-if="val.status=='headPhotoStatus'" style="font-size: 20rpx;color: #7e7e7e;margin: 0 10rpx;">门头照</text>
+						<text v-if="indexOption[val.status] == 0" class="bg-orange">待审核</text>
+						<text v-if="indexOption[val.status] == 1" class="bg-grey">审核通过</text>
+						<text v-if="indexOption[val.status] == 2" class="bg-pink">审核驳回</text>
+					</view>
+					<view>
+						<text style="color: #C7C6CA ;" @click="jump(val)"
+							v-if="val.status == 'advertising' || val.status == 'headPhoto'">去上传</text>
+						<text style="color: #C7C6CA ;" @click="jump(val)" v-else>去配置</text>
+						<text class='cuIcon-right' style="color: #C7C6CA ;"></text>
+					</view>
+				</view>
+				<view v-if="val.label == '服务设施'" style="padding-left: 42upx;">
+					<text v-for="(tag, index) in selectTags" :key="index" class="tag-type tag-type-po">
+						{{ tag }}
+					</text>
+				</view>
+				<view v-if="val.label == '其他'" style="padding-left: 42upx;" @click="jumpOther">
+					
+				</view>
+			</view>
+			
+		</view>
+		<view class="other-tag">
+			<view class="title" v-for="(item,index) in otherTags" :key="index">
+				<span>{{item.className}}</span> 
+				<view class="scene" v-for="(row,index) in item.localMerchantOtherVoList" :key="index">
+				 <span>{{row.attribute}}</span>	
+					<view class="item" >
+					 <span v-for="(sun,index) in row.attributeValue.split(',')" :key="index">{{sun}}</span>	
+					</view>
+				</view>
+			</view>
+		</view>
+		<uni-popup ref="popup" type="bottom">
+			<view class="popup-box">
+				<view class="popup-title">
+					<text>选择配套设施</text>
+					<image src="/static/store/detele.png" mode="aspectFit" @click=" $refs.popup.close()"></image>
+				</view>
+				<view style="padding-bottom:20upx;border-bottom: 1px solid #EEEEEE;">
+					<text v-for="(tag, index) in tags" :key="index" class="tag-type"
+						:class="{ 'selected-background': isSelected(tag) }" :style="tag == '空调' ? 'margin-right:0' : ''"
+						@click="toggleSelection(tag)">
+						{{ tag }}
+					</text>
+				</view>
+				<view class=" flex sub-bottom justify-between">
+					<button class="cu-btn round line-gray  shadow" @click=" $refs.popup.close()">取消</button>
+					<button style="width:77%" class="cu-btn bg-blue  round shadow" @click="submit">确定</button>
+				</view>
+			</view>
+		</uni-popup>
+	</view>
 </template>
 </template>
 <script>
 <script>
-import { USER_INFO } from "@/common/util/constants"
+	import {
+		USER_INFO
+	} from "@/common/util/constants"
 
 
-export default {
-    data() {
-        return {
-            selectTags:[],
-            tags: ['停车位', '休息室', 'WIFI', '空调', '茶点', '洗手间'], // 你的标签数组
-            selectedIndices: [], // 用于存储被选中的标签索引
-            ulList: [
-                {
-                    name: '基本信息',
-                    liList: [
-                        {
-                            label: '店铺信息',
-                            status: 'status'
-                        }, {
-                            label: '品牌信息',
-                            status: 'logoStatus'
-                        }, {
-                            label: '经营信息',
-                            status: 'videoStatus'
-                        },
-                    ],
-                },
-                {
-                    name: '其他信息',
-                    liList: [
-                        {
-                            label: '经营资质',
-                            status: 'specialStatus'
-                        }, {
-                            label: '服务设施',
-                            status: ' '
-                        },
-                    ],
-                }
+	export default {
+		data() {
+			return {
+				selectTags: [],
+				tags: ['停车位', '休息室', 'WIFI', '空调', '茶点', '洗手间'], // 你的标签数组
+				selectedIndices: [], // 用于存储被选中的标签索引
+				ulList: [{
+						name: '基本信息',
+						liList: [{
+								label: '店铺信息',
+								status: 'status'
+							}, {
+								label: '品牌信息',
+								status: 'logoStatus'
+							}, {
+								label: '经营信息',
+								status: ' '
+							},
+							{
+								label: '广告素材',
+								// status: 'advertising'
+									status: 'videoStatus'
+							},
+							{
+								label: '商户照片',
+								status: 'headPhotoStatus'
+							},
+						],
+					},
+					{
+						name: '其他信息',
+						liList: [{
+							label: '经营资质',
+							status: 'specialStatus'
+						}, {
+							label: '服务设施',
+							status: ' '
+						},  {
+							label: '其他',
+							status: ' '
+						},],
+					}
 
 
-            ],
+				],
 
 
-            merchantId: '',
-            indexOption: {},
-        }
-    },
-    async onShow() {
+				merchantId: '',
+				indexOption: {},
+				otherTags:[]
+			}
+		},
+		async onShow() {
 
 
-        this.merchantId = uni.getStorageSync(USER_INFO).merchantId;
+			this.merchantId = uni.getStorageSync(USER_INFO).merchantId;
 
 
-        let res = await this.$http.get("/merchant/localMerchantInfo/queryAppInfoById?id=" + this.merchantId)
-        if (res.data.success) {
-            this.selectTags=res.data.result.content? res.data.result.content.split(',').filter(id => id !== ''):[]
-            
-            this.indexOption = res.data.result
-        } else {
-            this.$tip.toast(res.data.message);
-        }
+			let res = await this.$http.get("/merchant/localMerchantInfo/queryAppInfoById?id=" + this.merchantId)
+			if (res.data.success) {
+				this.selectTags = res.data.result.content ? res.data.result.content.split(',').filter(id => id !== '') : []
 
 
-    },
-    methods: {
-        submit() {
-            let code = !!this.indexOption.content ? '/merchant/localMerchantService/edit' : '/merchant/localMerchantService/add'
+				this.indexOption = res.data.result
+				uni.setStorageSync('address', {longitude:res.data.result.longitude,latitude:res.data.result.latitude});
+				uni.setStorageSync('currentAddress', {name:res.data.result.address});
+				
+			} else {
+				this.$tip.toast(res.data.message);
+			}
+			this.getOther()
+		},
+		methods: {
+			getOther(){
+				this.$http.get('/localOther/localMerchantOther/queryById?id='+this.merchantId).then(res => {
+					console.log(res)
+					this.otherTags = res.data.result
+				})
+			},
+			submit() {
+				
+				let code = !!this.indexOption.content ? '/merchant/localMerchantService/edit' :
+					'/merchant/localMerchantService/add'
 
 
-            this.$http.post(code, { merchantId: this.merchantId, content: this.selectedIndices.join(',') }).then(res => {
-                if (res.data.success) {
-                    this.$tip.success(res.data.result || '成功')
-                    uni.redirectTo({
-                        url: '/pages/store/settings'
-                    });
-                }
-                else {
-                    this.$tip.error(res.data.message);
-                }
-            })
-        },
-        // 检查一个标签是否被选中
-        isSelected(tag) {
-            return this.selectedIndices.includes(tag);
-        },
-        // 切换标签的选中状态
-        toggleSelection(tag) {
-            const indexIndex = this.selectedIndices.indexOf(tag);
-            if (indexIndex > -1) {
-                // 如果标签已经被选中,则移除它
-                this.selectedIndices.splice(indexIndex, 1);
-            } else {
-                // 如果标签没有被选中,则添加它
-                this.selectedIndices.push(tag);
-            }
-        },
-        jump(item) {
-            const queryString = encodeURIComponent(JSON.stringify(this.indexOption))
-            if (item.label == '店铺信息') {
-                uni.navigateTo({
-                    url: `/pages/login/settled?params=${queryString}`
-                });
-            }
-            if (item.label == '品牌信息') {
-                uni.navigateTo({
-                    url: `/pages/store/brandMessage?params=${queryString}`
-                });
-            }
-            if (item.label == '经营信息') {
-                uni.navigateTo({
-                    url: `/pages/store/businessInfor?params=${queryString}`
-                });
-            }
-            if (item.label == '经营资质') {
-                uni.navigateTo({
-                    url: `/pages/store/businessQua?params=${queryString}`
-                });
-            }
-            if (item.label == '服务设施') {
-                this.$refs.popup.open()
-                this.selectedIndices=[...this.selectTags]
-            }
+				this.$http.post(code, {
+					merchantId: this.merchantId,
+					content: this.selectedIndices.join(',')
+				}).then(res => {
+					if (res.data.success) {
+						this.$tip.success(res.data.result || '成功')
+						uni.redirectTo({
+							url: '/pages/store/settings'
+						});
+					} else {
+						this.$tip.error(res.data.message);
+					}
+				})
+			},
+			// 检查一个标签是否被选中
+			isSelected(tag) {
+				return this.selectedIndices.includes(tag);
+			},
+			// 切换标签的选中状态
+			toggleSelection(tag) {
+				const indexIndex = this.selectedIndices.indexOf(tag);
+				if (indexIndex > -1) {
+					// 如果标签已经被选中,则移除它
+					this.selectedIndices.splice(indexIndex, 1);
+				} else {
+					// 如果标签没有被选中,则添加它
+					this.selectedIndices.push(tag);
+				}
+			},
+			jump(item) {
+				const queryString = encodeURIComponent(JSON.stringify(this.indexOption))
+				if (item.label == '店铺信息') {
+					uni.navigateTo({
+						url: `/pages/login/settled?params=${queryString}`
+					});
+				}
+				if (item.label == '品牌信息') {
+					uni.navigateTo({
+						url: `/pages/store/brandMessage?params=${queryString}`
+					});
+				}
+				if (item.label == '经营信息') {
+					uni.navigateTo({
+						url: `/pages/store/businessInfor?params=${queryString}`
+					});
+				}
+				if (item.label == '经营资质') {
+					uni.navigateTo({
+						url: `/pages/store/businessQua?params=${queryString}`
+					});
+				}
+				if (item.label == '服务设施') {
+					this.$refs.popup.open()
+					this.selectedIndices = [...this.selectTags]
+				}
+				if (item.label == '广告素材') {
+					uni.navigateTo({
+						url: `/pages/store/advertising?params=${queryString}`
+					});
+				}
+				if (item.label == '商户照片') {
+					uni.navigateTo({
+						url: `/pages/store/headPhoto?params=${queryString}`
+					});
+				}
+				if (item.label == '其他') {
+					uni.navigateTo({
+						url: `/pages/store/otherSet?params=${queryString}`
+					});
+				}
 
 
-
-        }
-    }
-}
+			}
+		}
+	}
 </script>
 </script>
 <style scoped lang="scss">
 <style scoped lang="scss">
-page {
-    background: #F8F8FA;
-}
+	page {
+		background: #F8F8FA;
+	}
 
 
-.cu-form-group {
-    margin: 18upx 42upx;
-}
+	.cu-form-group {
+		margin: 18upx 42upx;
+	}
 
 
-/* .cu-form-group+.cu-form-group{
+	/* .cu-form-group+.cu-form-group{
     border:none;
     border:none;
 	border-top: 1upx solid #eee;
 	border-top: 1upx solid #eee;
 
 
 } */
 } */
-.cu-form-group:not(.bg-fff :has(+ .cu-form-group)) {
-    border: none
-}
+	.cu-form-group:not(.bg-fff :has(+ .cu-form-group)) {
+		border: none
+	}
+
+	.bg-orange {
+		background: #FBF9E4;
+		color: #F6863E;
+		font-size: 24upx;
+		padding: 6upx 10upx;
+		margin-left: 12upx;
+	}
+
+	.bg-grey {
+		background: #F3F3F3;
+		color: #7E7E7E;
+		font-size: 24upx;
+		padding: 6upx 10upx;
+		margin-left: 12upx;
+	}
+
+	.bg-pink {
+		background: #FBE5E4;
+		color: #F34F4F;
+		font-size: 24upx;
+		padding: 6upx 10upx;
+		margin-left: 12upx;
+	}
 
 
-.bg-orange {
-    background: #FBF9E4;
-    color: #F6863E;
-    font-size: 24upx;
-    padding: 6upx 10upx;
-    margin-left: 12upx;
-}
+	.popup-box {
+		background: #FFFFFF;
+		padding: 0 27upx;
+		border-radius: 20px 20px 0px 0px;
 
 
-.bg-grey {
-    background: #F3F3F3;
-    color: #7E7E7E;
-    font-size: 24upx;
-    padding: 6upx 10upx;
-    margin-left: 12upx;
-}
+		.popup-title {
+			padding: 22upx 0;
+			position: relative;
+			text-align: center;
+			font-weight: 500;
+			font-size: 34upx;
+			color: #333333;
+			border-bottom: 1px solid #EEEEEE;
 
 
-.bg-pink {
-    background: #FBE5E4;
-    color: #F34F4F;
-    font-size: 24upx;
-    padding: 6upx 10upx;
-    margin-left: 12upx;
-}
+			image {
+				position: absolute;
+				right: 0;
+				width: 42upx;
+				height: 42upx;
+			}
+		}
+	}
 
 
-.popup-box {
-    background: #FFFFFF;
-    padding: 0 27upx;
-    border-radius: 20px 20px 0px 0px;
+	.tag-type {
+		display: inline-block;
+		font-size: 26upx;
+		width: 150upx;
+		height: 54upx;
+		color: #333333;
+		margin: 18upx 33upx 0 0;
+		border-radius: 4px 4px 4px 4px;
+		border: 1px solid #C2C2C2;
+		text-align: center;
+		line-height: 54upx;
+	}
 
 
-    .popup-title {
-        padding: 22upx 0;
-        position: relative;
-        text-align: center;
-        font-weight: 500;
-        font-size: 34upx;
-        color: #333333;
-        border-bottom: 1px solid #EEEEEE;
+	.tag-type-po {
+		background: rgba(68, 154, 255, 0.1);
+		border: 1px solid #449AFF;
+		color: #2983EC;
+		margin: 0 24upx 18upx 0;
 
 
-        image {
-            position: absolute;
-            right: 0;
-            width: 42upx;
-            height: 42upx;
-        }
-    }
-}
+	}
 
 
-.tag-type {
-    display: inline-block;
-    font-size: 26upx;
-    width: 150upx;
-    height: 54upx;
-    color: #333333;
-    margin: 18upx 33upx 0 0;
-    border-radius: 4px 4px 4px 4px;
-    border: 1px solid #C2C2C2;
-    text-align: center;
-    line-height: 54upx;
-}
-.tag-type-po{
-    background: rgba(68,154,255,0.1);
-    border: 1px solid #449AFF;
-    color: #2983EC;
-    margin: 0 24upx 18upx  0;
+	.selected-background {
+		color: #2983EC;
+		position: relative;
+		background: rgba(68, 154, 255, 0.1);
+		border: 1px solid #449AFF;
+	}
 
 
-}
-.selected-background {
-    color: #2983EC;
-    position: relative;
-    background: rgba(68, 154, 255, 0.1);
-    border: 1px solid #449AFF;
-}
+	.selected-background ::after {
+		content: '';
+		position: absolute;
+		top: -1px;
+		right: -1px;
+		width: 22upx;
+		height: 22upx;
+		background-image: url('/static/store/xuanzhong.png');
+		background-size: cover;
+		background-repeat: no-repeat;
+		border-radius: 0 5px 0 0;
+	}
 
 
-.selected-background ::after {
-    content: '';
-    position: absolute;
-    top: -1px;
-    right: -1px;
-    width: 22upx;
-    height: 22upx;
-    background-image: url('/static/store/xuanzhong.png');
-    background-size: cover;
-    background-repeat: no-repeat;
-    border-radius: 0 5px 0 0;
-}
+	.sub-bottom {
+		width: 100%;
+		background: #FFFFFF;
+		padding: 27upx 0;
 
 
-.sub-bottom {
-    width: 100%;
-    background: #FFFFFF;
-    padding: 27upx 0;
+	}
 
 
-}
+	.title {
+		text {
+			height: 34rpx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+		}
+	}
+	.other-tag{
+		width: 95%;
+		margin: 0 auto;
+		padding: 24rpx 32rpx;
+		background-color: #fff;
+		.title{
+			span{
+				display: inline-block;
+				font-weight: 500;
+				font-size: 26rpx;
+				margin-bottom: 20rpx;
+			}
+		}
+		.scene{
+			span{
+					display: inline-block;
+				font-size: 24rpx;
+				color: #666666;
+					margin-bottom: 0rpx;
+			}
+		}
+		.item{
+			width: 100%;
+			display: flex;
+			align-items: center;
+			span{
+				display: inline-block;
+				width: 120rpx;
+				height: 49rpx;
+				background: rgba(68,154,255,0.1);
+				border-radius: 4rpx ;
+				font-size: 22rpx;
+				color: #2983EC;
+				margin: 10rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+			}
+		}
+	}
 </style>
 </style>

+ 2 - 2
plugin/colorui/main.css

@@ -2356,8 +2356,8 @@ button.cuIcon.lg {
 }
 }
 .text-bg{
 .text-bg{
     display: block;
     display: block;
-    width: 100%;
-    height: 3px;
+    width: 108rpx;
+    height: 5rpx;
     background: linear-gradient( 90deg, #88BFFF 0%, #449AFF 100%);
     background: linear-gradient( 90deg, #88BFFF 0%, #449AFF 100%);
     border-radius: 4px 4px 4px 4px;
     border-radius: 4px 4px 4px 4px;
 }
 }