Pārlūkot izejas kodu

Merge branch 'feature/消息提示'

# Conflicts:
#	src/views/engineeringMaintenance/applicationWithoutFee/index.vue
pengyh 1 gadu atpakaļ
vecāks
revīzija
d416cede45
27 mainītis faili ar 757 papildinājumiem un 95 dzēšanām
  1. 1 1
      src/App.vue
  2. 18 0
      src/api/readRecords.js
  3. 451 3
      src/layout/components/Navbar.vue
  4. 7 0
      src/views/auxiliaryFittings/salesManagement/attachmentSalesOrder/index.vue
  5. 7 0
      src/views/auxiliaryFittings/salesManagement/auxiliarySalesOrder/index.vue
  6. 5 1
      src/views/auxiliaryFittings/salesManagement/components/attachmentSalesOrderDetail.vue
  7. 5 1
      src/views/auxiliaryFittings/salesManagement/components/auxiliarySalesOrderDetail.vue
  8. 1 1
      src/views/auxiliaryFittings/settleAccountManagement/settleAccountWeixinPay/index.vue
  9. 13 13
      src/views/engineeringMaintenance/applicationWithoutFee/index.vue
  10. 30 16
      src/views/engineeringMaintenance/basicData/detail.vue
  11. 5 4
      src/views/engineeringMaintenance/basicData/index.vue
  12. 0 0
      src/views/mallManagement/configCenter/brand/index.vue
  13. 4 1
      src/views/mallManagement/order/order_detail/index.vue
  14. 10 6
      src/views/mallManagement/order/order_list/index.vue
  15. 13 9
      src/views/mallManagement/order/order_refund/index.vue
  16. 4 1
      src/views/mallManagement/order/order_refund_detail/index.vue
  17. 29 1
      src/views/setting/notification/announcement/index.vue
  18. 76 0
      src/views/setting/notification/readRecords/index.vue
  19. 12 1
      src/views/setting/thirdPartyAddressLogin/index.vue
  20. 26 5
      src/views/userManagement/customerManagement/index.vue
  21. 1 1
      src/views/userManagement/distributorManagement/index.vue
  22. 6 4
      src/views/valueAddedService/extendedWarrantyWork/index.vue
  23. 7 6
      src/views/valueAddedService/orderSettleManag/pages/collect.vue
  24. 7 6
      src/views/valueAddedService/orderSettleManag/pages/offline.vue
  25. 7 5
      src/views/workOrder/appraise/index.vue
  26. 5 4
      src/views/workOrder/orderHome/index.vue
  27. 7 5
      src/views/workOrder/settleAccountsManagement/settleAccountsOrder/index.vue

+ 1 - 1
src/App.vue

@@ -1,6 +1,6 @@
 <template>
   <div id="app">
-    <router-view />
+    <router-view/>
   </div>
 </template>
 

+ 18 - 0
src/api/readRecords.js

@@ -0,0 +1,18 @@
+import request, { postBlob, getBlob, handleImport } from '@/utils/request'
+
+// 获取师傅列表
+export function noticeListPageV2(data) {
+  return request({
+    url: `/notice/read/listRecord?moduleId=${data.moduleId}`,
+    method: 'post',
+    data
+  })
+}
+
+export function noticePageExport(data, name) {
+  return postBlob({
+    url: '/notice/read/listRecord/export',
+    data,
+    name
+  })
+}

+ 451 - 3
src/layout/components/Navbar.vue

@@ -34,6 +34,10 @@
             @select="handleSelect"
           ></el-autocomplete>
         </div> -->
+		<div style="margin-right: 20px;cursor: pointer;" @click="getList();isShow = true">
+			<i class="el-icon-message-solid"></i>
+			<el-badge :is-dot="isDot1 || isDot2"></el-badge>
+		</div>
         <shortcut />
         <template v-if="device !== 'mobile'">
           <!-- 全屏控制 -->
@@ -58,6 +62,136 @@
       </div>
     </div>
     <notice-bar />
+	<el-drawer
+	  title="系统消息"
+	  :visible.sync="isShow"
+	  :append-to-body="true"
+	  :with-header="false"
+	  direction="rtl"
+	  size="25%">
+		<div class="message">
+			<div class="head">
+				<div class="flex_asb">
+					<el-radio-group size="small" v-model="messageType" @change="getList">
+						<el-badge :is-dot="isDot1" class="item">
+							<el-radio-button :label="['WBI','WBK','CRE_ORDER','SEND_MALL','RP_MALL','CR_SALES']">系统消息</el-radio-button>
+						</el-badge>
+						<el-badge :is-dot="isDot2" class="item">
+							<el-radio-button :label="['NOTICE']">平台公告</el-radio-button>
+						</el-badge>
+					</el-radio-group>
+					<el-switch
+					  v-model="isOpen"
+					  @change="updateIsNotice"
+					  inactive-text="消息弹窗"
+					  active-color="#13ce66"
+					  inactive-color="#ff4949">
+					</el-switch>
+				</div>
+				<el-radio-group size="mini" v-model="dateType" @change="getList" style="margin: 10px 0;">
+				  <el-radio-button label="">全部</el-radio-button>
+				  <el-radio-button :label="0">今天</el-radio-button>
+				  <el-radio-button :label="1">昨天</el-radio-button>
+				  <el-radio-button :label="6">近7天</el-radio-button>
+				  <el-radio-button :label="29">近30天</el-radio-button>
+				</el-radio-group>
+				<div class="flex_asb">
+					<el-radio-group size="mini" v-model="readFlag" @change="getList">
+						<el-radio-button label="">全部</el-radio-button>
+						<el-badge :hidden="count>0?false:true" :value="count" class="item" style="margin: 0 10px">
+							<el-radio-button label="NO">未读</el-radio-button>
+						</el-badge>
+						<el-badge :value="count" :hidden="true" class="item" >
+							<el-radio-button label="YES">已读</el-radio-button>
+						</el-badge>
+					</el-radio-group>
+					<div style="color: #409EFF;cursor: pointer;" @click="confirmRead">
+						<i class="el-icon-message-solid"></i>
+						<span style="font-size: 14px;">全部已读</span>
+					</div>
+				</div>
+			</div>
+			<el-card class="box-card" v-for="(item,index) in messageData" style="margin-top: 10px;">
+				<div @click="isShow = false;toDetail(item.adminNoticeType,item.paidType,(item.adminNoticeType=='NOTICE'?item.noticeId:item.orderId),item.id)">
+					<div v-if="item.adminNoticeType == 'NOTICE'">
+						<div class="flex_asb item">
+							<div>
+								<span>公告类型:</span>
+								<span>{{statusFilter(item.adminNoticeType)}}</span>
+							</div>
+							<div class="read1" v-if="item.readFlag == 'NO'">未读</div>
+							<div class="read2" v-if="item.readFlag == 'YES'">已读</div>
+						</div>
+						<div class="item">
+							<div>
+								<span>文件标题:</span>
+								<span style="color: #409Eff">{{item.title}}</span>
+							</div>
+						</div>
+						<div class="item">
+							<div>
+								<span>发布人:</span>
+								<span>{{item.issueNickName | ''}}</span>
+							</div>
+						</div>
+						<div class="item">
+							<div>
+								<span>发布时间:</span>
+								<span>{{item.issueTime}}</span>
+							</div>
+						</div>
+						<div v-if="item.readFlag == 'YES'" class="item">
+							<span>阅读人:</span>
+							<span>{{item.adminNickName }} {{item.readTime}}</span>
+						</div>
+					</div>
+					<div v-else>
+						<div class="flex_asb item">
+							<div>
+								<span>消息类型:</span>
+								<span>{{statusFilter(item.adminNoticeType)}}</span>
+							</div>
+							<div class="read1" v-if="item.readFlag == 'NO'">未读</div>
+							<div class="read2" v-if="item.readFlag == 'YES'">已读</div>
+						</div>
+						<div class="item">
+							<div>
+								<span>订单编号:</span>
+								<span style="color: #409Eff">{{item.orderId}}</span>
+							</div>
+						</div>
+						<div class="item">
+							<div>
+								<span>消息内容:</span>
+								<span>{{item.content}}</span>
+							</div>
+						</div>
+						<div class="item">
+							<div>
+								<span>创建时间:</span>
+								<span>{{item.createTime}}</span>
+							</div>
+						</div>
+						<div v-if="item.readFlag == 'YES'" class="item">
+							<span>阅读人:</span>
+							<span>{{item.adminNickName }} {{item.readTime}}</span>
+						</div>
+					</div>
+				</div>
+			</el-card>
+			<el-empty v-if="messageData.length == 0" description="暂无数据"></el-empty>
+			<div class="flex_ac bottom">
+				<el-pagination
+					@current-change="handleCurrentChange"
+					:current-page="currentPage"
+					:page-size="pageSize"
+					layout="prev, pager, next"
+					background
+					:total="listTotal"
+				></el-pagination>
+			</div>
+		</div>
+	</el-drawer>
   </div>
 </template>
 
@@ -70,6 +204,7 @@ import NavMenu from '@/components/NavMenu'
 import vScrollView from 'v-scroll-view'
 import NoticeBar from '@/components/NoticeBar'
 import { pages } from '@/settings'
+import request from '@/utils/request'
 function getc(obj) {
   if (!obj.children || !obj.children.length) {
     return obj
@@ -91,7 +226,21 @@ export default {
       pathurl: '',
       visible: false,
       noticeCount: 0,
-      path: `/${this.$route.path.split('/')[1] || ''}`
+      path: `/${this.$route.path.split('/')[1] || ''}`,
+	  isShow: false,
+	  isOpen: true,
+	  checked: false,
+	  messageType: ['WBI','WBK','CRE_ORDER','SEND_MALL','RP_MALL','CR_SALES'],
+	  messageData: [],
+	  dateType: '',
+	  readFlag: '',
+	  timer: null,
+	  listTotal: 0,
+	  currentPage: 1, // 当前页码
+	  pageSize: 10, // 每页数量
+		count: 0,
+		isDot1: false,
+		isDot2: false
     }
   },
   computed: {
@@ -101,7 +250,61 @@ export default {
     noticeVisible() {
       return this.noticeCount > 0
     },
-    ...mapGetters(['sidebar', 'avatar', 'device', 'name', 'isNotice'])
+	...mapGetters([
+	  'userid'
+	]),
+    ...mapGetters(['sidebar', 'avatar', 'device', 'name', 'isNotice']),
+	filterTime(){
+		if(this.dateType === ''){
+			return ['','']
+		}else{
+			var date = new Date();
+			var base = Date.parse(date); // 转换为时间戳
+			var year = date.getFullYear(); //获取当前年份
+			var mon = date.getMonth() + 1; //获取当前月份
+			var day = date.getDate(); //获取当前日
+			var oneDay = 24 * 3600 *1000
+			
+			var daytimeArr = []
+			var now = new Date((base - oneDay*this.dateType));
+			var myear = now.getFullYear();
+			var month = now.getMonth() + 1;
+			var mday = now.getDate()
+			if(this.dateType == 1){
+				return [`${myear}-${month>9?month:'0'+month}-${mday>9?mday:'0'+mday} 00:00:00`,`${myear}-${month>9?month:'0'+month}-${mday>9?mday:'0'+mday} 23:59:59`]
+			}else{
+				return [`${myear}-${month>9?month:'0'+month}-${mday>9?mday:'0'+mday} 00:00:00`,`${year}-${mon>9?mon:'0'+mon}-${day>9?day:'0'+day} 23:59:59`]
+			}
+		}
+	},
+	statusFilter() {
+		return function(val){
+			const MAP = {
+				NOTICE: '平台公告',
+				WBI: '维保消息费用申请',
+				WBK: '维保费用申请审批',
+				CRE_ORDER: '创建工单',
+				SEND_MALL: '商城订单发货',
+				RP_MALL: '商城订单维权',
+				CR_SALES: '订单支付成功'
+			}
+			return MAP[val]
+		}
+	},
+	typeFilter() {
+		return function(val,paidType){
+			const MAP = {
+				NOTICE: 'systemMessage',
+				WBI: 'applicationWithoutFee',
+				WBK: 'applicationWithoutFee',
+				CRE_ORDER: 'workOrderPool',
+				SEND_MALL: 'order_detail',
+				RP_MALL: 'order_pr',
+				CR_SALES: (paidType=='M'?'auxiliarySalesOrder':paidType=='P'?'attachmentSalesOrder':paidType=='YB'?'orderSettleManag':paidType=='MALL'?'order_list':'')
+			}
+			return MAP[val]
+		}
+	}
   },
   watch: {
     $route() {
@@ -122,6 +325,11 @@ export default {
       }
     }
   },
+  created(){
+	  clearInterval(this.timer)
+	  this.getUserInfo()
+	  this.redDot()
+  },
   mounted() {
     this.$store.commit('app/SET_L1_PATH', this.path)
   },
@@ -160,7 +368,206 @@ export default {
     },
     toggleSideBar() {
       this.$store.dispatch('app/toggleSideBar')
-    }
+    },
+	//获取最新消息并弹窗
+	getMessageTips(){
+		console.log(111)
+		const that = this
+		this.timer = setInterval(()=>{
+			request({
+			  url: `/notice/list/out`,
+			  method: 'get',
+			  params: {
+				  num: 30,
+			  }
+			}).then(res=>{
+				res.data.forEach(item=>{
+					this.$notify({
+						title: '新消息',
+						position: 'bottom-right',
+						duration: 30000,
+						message: that.$createElement(
+							"div",
+							{
+								style: 'cursor: pointer;',
+								on: {
+									click: that.toDetail.bind(that,item.adminNoticeType,item.paidType,(item.adminNoticeType=='NOTICE'?item.noticeId:item.orderId),item.id)
+								},
+							},[
+								that.$createElement(
+									"span",
+									null,
+									that.statusFilter(item.adminNoticeType) + ' '
+								),
+								that.$createElement(
+									"span",
+									{
+										style: 'color: #409EFF;',
+									},
+									' ' + item.adminNoticeType=='NOTICE'?item.title:item.orderId
+								),
+								that.$createElement(
+									"span",
+									null,
+									item.adminNoticeType=='NOTICE'?'':item.content
+								),
+							// that.$createElement(
+							// 	"el-checkbox",
+							// 	{
+							// 		on: {
+							// 			change: that.updateIsNotice.bind(that)
+							// 		},
+							// 	}, '不再弹窗新消息'
+							// )
+						])
+					});
+				})
+			})
+		},30000)
+		
+	},
+	getCount(){
+		request({
+		  url: `/notice/list/count`,
+		  method: 'get',
+		  params: {
+			  noticeType: this.messageType.join(','),
+			  readFlag: 'NO'
+		  }
+		}).then(res=>{
+			this.count = res.data
+		})
+	},
+	redDot(){
+		request({
+		  url: `/notice/list/count`,
+		  method: 'get',
+		  params: {
+			  noticeType: ['WBI','WBK','CRE_ORDER','SEND_MALL','RP_MALL','CR_SALES'].join(','),
+			  readFlag: 'NO'
+		  }
+		}).then(res=>{
+			this.isDot1 = res.data > 0?true:false
+		})
+		request({
+		  url: `/notice/list/count`,
+		  method: 'get',
+		  params: {
+			  noticeType: ['NOTICE'].join(','),
+			  readFlag: 'NO'
+		  }
+		}).then(res=>{
+			this.isDot2 = res.data > 0?true:false
+		})
+	},
+	getUserInfo(){
+		const that = this
+		request({
+		  url: `/admin/user/detail`,
+		  method: 'get',
+		  params: {
+			  adminUserId: this.userid
+		  }
+		}).then(res=>{
+			this.isOpen = res.data.isNotice=='YES'?true:false
+			if(res.data.isNotice=='NO'){
+				clearInterval(this.timer)
+			}else{
+				clearInterval(this.timer)
+				this.getMessageTips()
+			}
+		})
+	},
+	//全部已读
+	confirmRead(){
+		this.$confirm('是否全部设为已读, 是否继续?', '提示', {
+			confirmButtonText: '确定',
+			cancelButtonText: '取消',
+			type: 'warning'
+		}).then(() => {
+			request({
+			  url: `/notice/mark/read/all`,
+			  method: 'post',
+			  data: {}
+			}).then(res=>{
+				if(res.code == 200){
+					this.getList()
+					this.$message.success('全部已读成功!');
+				}
+			})
+		}).catch(() => {
+			this.$message({
+				type: 'info',
+				message: '已取消'
+			});
+		});
+	},
+	//点击不再弹窗新消息
+	updateIsNotice(e){
+		request({
+		  url: `/notice/updateIsNotice`,
+		  method: 'post',
+		  params: {
+			  isNotice: e?'YES':'NO',
+		  }
+		}).then(res=>{
+			if(res.code == 200){
+				this.getUserInfo()
+				this.$message.success(e?'已开启弹窗消息提醒':'已关闭弹窗消息提醒');
+				if(!e){
+					clearInterval(this.timer)
+				}
+			}
+		})
+	},
+	getList(){
+		request({
+		  url: `/notice/list`,
+		  method: 'post',
+		  data: {
+			  pageNum: this.currentPage,
+			  pageSize: this.pageSize,
+			  params: [{param: "nr.read_flag", compare: "=", value: this.readFlag},{param: 'nr.admin_notice_type', compare: "=", value: this.messageType},{param: 'nr.issue_time', compare: ">=", value: this.filterTime[0]},{param: 'nr.issue_time', compare: "<=", value: this.filterTime[1]}]
+		  }
+		}).then(res=>{
+			this.getCount()
+			this.redDot()
+			this.listTotal = res.data.total
+			this.messageData = res.data.records
+		})
+	},
+	// 更改当前页
+	handleCurrentChange(val) {
+		this.currentPage = val;
+		this.getList();
+	},
+	toDetail(type,paidType,orderId,id){
+		console.log(this.typeFilter(type,paidType))
+		this.read(id)
+		this.$router.push({
+			name: this.typeFilter(type,paidType),
+			params: {
+				pageName: orderId,
+				pageType: 'detail',
+				pageCode: orderId,
+			},
+			query: {
+				id: orderId,
+				orderId: orderId
+			}
+		})
+	},
+	read(id){
+		request({
+		  url: `/notice/mark/read`,
+		  method: 'post',
+		  params: {
+			  noticeIds: id,
+		  }
+		}).then(res=>{
+			
+		})
+	}
   }
 }
 </script>
@@ -180,6 +587,44 @@ export default {
 ::v-deep .slidingBlockClassName {
   background: rgba(0, 0, 0, 0.05) !important;
 }
+.flex_asb{
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.flex_ac{
+	display: flex;
+	justify-content: center;
+}
+.message{
+	padding: 20px;position: relative;min-height: 100%;padding-bottom:60px;padding-top: 150px;box-sizing: border-box;
+	.head{
+		width:25%;position: fixed;top: 0;right:0;background: #ffffff;padding: 20px;
+	}
+	.bottom{
+		width:25%;position: fixed;bottom: 0;right:0;background: #ffffff;padding: 10px 0;
+	}
+}
+.box-card{
+	.item{
+		cursor: pointer;
+		margin-bottom: 6px;
+	}
+	.read1{
+		color: #f5680e;
+		background: #fff2da;
+		padding: 2px 4px;
+		border-radius: 4px;
+		font-size: 14px;
+	}
+	.read2{
+		color: #42b983;
+		background: #d7fdde;
+		padding: 2px 4px;
+		border-radius: 4px;
+		font-size: 14px;
+	}
+}
 .navbar {
   width: 100%;
   height: 50px;
@@ -305,4 +750,7 @@ export default {
     }
   }
 }
+::v-deep .el-badge__content.is-fixed{
+	z-index: 99;
+}
 </style>

+ 7 - 0
src/views/auxiliaryFittings/salesManagement/attachmentSalesOrder/index.vue

@@ -93,6 +93,13 @@ export default {
 			}
 		}
 	},
+	created(){
+		if(this.$route.query.id){
+			this.id = this.$route.query.id
+			this.formDialogType = 2
+			this.openForm()
+		}
+	},
 	methods: {
 		// 切换状态
 		changeType(val) {

+ 7 - 0
src/views/auxiliaryFittings/salesManagement/auxiliarySalesOrder/index.vue

@@ -93,6 +93,13 @@ export default {
 			}
 		}
 	},
+	created(){
+		if(this.$route.query.id){
+			this.id = this.$route.query.id
+			this.formDialogType = 2
+			this.openForm()
+		}
+	},
 	methods: {
 		// 切换状态
 		changeType(val) {

+ 5 - 1
src/views/auxiliaryFittings/salesManagement/components/attachmentSalesOrderDetail.vue

@@ -177,7 +177,7 @@
 					<el-table-column label="操作" align="right" width="140">
 						<template slot-scope="scope" v-if="formType != 2">
 							<el-button size="mini" type="primary" v-if="scope.$index != isEdit" @click="isEdit = scope.$index">编辑</el-button>
-							<el-button size="mini" type="danger" @click="dataList.splice(scope.$index,1)">删除</el-button>
+							<el-button size="mini" type="danger" @click="del(scope.$index)">删除</el-button>
 						</template>
 					</el-table-column>
 				</el-table>
@@ -375,6 +375,10 @@
 				})
 				this.getGoods()
 			},
+			del(index){
+				if(this.dataList.length == 1){this.isEdit == 0}else{this.isEdit -= 1}
+				this.dataList.splice(index,1)
+			},
 			submit(){
 				this.$confirm(`请确定是否提交订单, 是否继续?`, '提示', {
 					confirmButtonText: '确定',

+ 5 - 1
src/views/auxiliaryFittings/salesManagement/components/auxiliarySalesOrderDetail.vue

@@ -202,7 +202,7 @@
 					<el-table-column label="操作" align="right" width="140">
 						<template slot-scope="scope" v-if="formType != 2">
 							<el-button size="mini" type="primary" v-if="scope.$index != isEdit" @click="isEdit = scope.$index">编辑</el-button>
-							<el-button size="mini" type="danger" @click="dataList.splice(scope.$index,1)">删除</el-button>
+							<el-button size="mini" type="danger" @click="del(scope.$index)">删除</el-button>
 						</template>
 					</el-table-column>
 				</el-table>
@@ -450,6 +450,10 @@
 					goodsType: 'M'
 				})
 			},
+			del(index){
+				if(this.dataList.length == 1){this.isEdit == 0}else{this.isEdit -= 1}
+				this.dataList.splice(index,1)
+			},
 			submit(){
 				this.$confirm(`请确定是否提交订单, 是否继续?`, '提示', {
 					confirmButtonText: '确定',

+ 1 - 1
src/views/auxiliaryFittings/settleAccountManagement/settleAccountWeixinPay/index.vue

@@ -327,7 +327,7 @@ export default {
 					btnType: 'text',
 					prompt: '确认是否退款?',
 					conditions: ({ row, index, column }) => {
-						return row.totalAmount > 0 && this.tabIndex == 2
+						return row.totalAmount > 0 && row.refundStatus == 'NO' && this.tabIndex == 2
 					},
 					click: ({ row, index, column }) => {
 						refund({ id: row.settlementOrderId }).then(res => {

+ 13 - 13
src/views/engineeringMaintenance/applicationWithoutFee/index.vue

@@ -126,19 +126,19 @@ export default {
     selectionChange(data) {
       this.recordSelected = data
     },
-
-    getDetail(id) {
-      enginMaterialDetail({
-        id
-      }).then(res => {
-        this.openType = 0
-        this.formData = { ...res.data, examineStatus_cp: res.data.examineStatus }
-        this.$nextTick(() => {
-          this.formBool = true
-        })
-      })
-    },
-
+		
+	getDetail(id){
+		enginMaterialDetail({
+		  id
+		}).then(res => {
+		  this.openType = 0
+		  this.formData = res.data
+		  this.$nextTick(() => {
+		    this.formBool = true
+		  })
+		})
+	},
+		
     operation() {
       return this.operationBtn({
         detail: {

+ 30 - 16
src/views/engineeringMaintenance/basicData/detail.vue

@@ -32,7 +32,7 @@
 							</el-col>
 							<el-col :span="12">
 								<el-form-item label="联系电话" prop="mobile">
-									<el-input type="number" v-model="formData.mobile" :disabled="formType==2" placeholder="请输入"></el-input>
+									<el-input type="number" v-model="formData.mobile" oninput="if(value.length > 11) value=value.slice(0, 11)" :disabled="formType==2" placeholder="请输入"></el-input>
 								</el-form-item>
 							</el-col>
 							<el-col :span="12">
@@ -151,17 +151,21 @@
 										<el-select v-model="scope.row.main" value-key="categoryId" @change="(e)=>{
 											scope.row.mainId = e.categoryId
 											scope.row.mainName = e.name
-											if(e.categoryId == 0){
-												scope.row.small = {categoryId: '0', name: '不限'}
-												scope.row.smallName = '不限'
-												scope.row.smallId = '0'
-											}else{
-												scope.row.small = null
-												scope.row.smallName = ''
-												scope.row.smallId = ''
-											}
+											//if(e.categoryId == 0){
+											//	scope.row.small = {categoryId: '0', name: '不限'}
+											//	scope.row.smallName = '不限'
+											//	scope.row.smallId = '0'
+											//}else{
+											//	scope.row.small = null
+											//	scope.row.smallName = ''
+											//	scope.row.smallId = ''
+											//}
+											//scope.row.smallList = e.children?[...[{categoryId: '0', name: '不限'}],...e.children]:[]
+											scope.row.small = null
+											scope.row.smallName = ''
+											scope.row.smallId = ''
 											
-											scope.row.smallList = e.children?[...[{categoryId: '0', name: '不限'}],...e.children]:[]
+											scope.row.smallList = e.children?e.children:[]
 										}" :disabled="isEdit1 != scope.$index || formType == 2" placeholder="请选择" style="width: 100%;">
 										    <el-option
 										      v-for="(item,ind) in mainList"
@@ -250,7 +254,7 @@
 								<template slot-scope="scope">
 									<el-form-item :prop="'byList.' + scope.$index + '.mobile'"
 										:rules="[{ required: true, message: `请输入联系电话`, trigger: 'blur' },{ pattern:/^((1[3456789]\d{9}))$/, message: '电话号码格式不正确', trigger: 'blur' }]">
-										<el-input type="number" v-model="scope.row.mobile" :disabled="isEdit2 != scope.$index || formType == 2" placeholder="请输入"></el-input>
+										<el-input type="number" oninput="if(value.length > 11) value=value.slice(0, 11)" v-model="scope.row.mobile" :disabled="isEdit2 != scope.$index || formType == 2" placeholder="请输入"></el-input>
 									</el-form-item>
 								</template>
 							</el-table-column>
@@ -309,7 +313,7 @@
 							<el-table-column align="center" label="移动电话" >
 								<template slot-scope="scope">
 									<el-form-item>
-										<el-input type="number" v-model="scope.row.mobile" disabled placeholder="请输入"></el-input>
+										<el-input type="text" v-model="scope.row.mobile" disabled placeholder="请输入"></el-input>
 									</el-form-item>
 								</template>
 							</el-table-column>
@@ -460,7 +464,8 @@
 					let data = []
 					this.mainList.forEach(item=>{
 						if(item.categoryId == id){
-							data = item.children?[...[{categoryId: '0', name: '不限'}],...item.children]:[]
+							// data = item.children?[...[{categoryId: '0', name: '不限'}],...item.children]:[]
+							data = item.children?item.children:[]
 						}
 					})
 					return data
@@ -531,12 +536,14 @@
 			},
 			getBrandList(){
 				getBrand().then(res => {
-					this.brandList = [...[{id: '0',brandName: '不限'}],...res.data]
+					// this.brandList = [...[{id: '0',brandName: '不限'}],...res.data]
+					this.brandList = res.data
 				})
 			},
 			getMainList(){
 				getMainList({type: 2}).then(res => {
-					this.mainList = [...[{categoryId: '0',name: '不限',children: [{categoryId: '0',name: '不限'}]}],...res.data]
+					// this.mainList = [...[{categoryId: '0',name: '不限',children: [{categoryId: '0',name: '不限'}]}],...res.data]
+					this.mainList = res.data
 				})
 			},
 			getinitlbslist() {
@@ -791,4 +798,11 @@
 			margin-top: 10px;
 		}
 	}
+	::v-deep .numrule input::-webkit-outer-spin-button,
+	::v-deep .numrule input::-webkit-inner-spin-button {
+	    -webkit-appearance: none!important;
+	}
+	::v-deep .numrule input[type="number"]{
+	    -moz-appearance: textfield;
+	}
 </style>

+ 5 - 4
src/views/engineeringMaintenance/basicData/index.vue

@@ -148,10 +148,11 @@ export default {
 				btnType: 'text',
 				click: ({ row, index, column }) => {
 					this.$router.push({
-						name: "workOrderPool",
-						query: {
-							rpProjectRepairId:row.id
-						}
+						name: 'workOrderPool',
+						params: {
+							pageType: 'rpProjectRepairId',
+							pageCode: row.id,
+						},
 					})
 				}
 			}

+ 0 - 0
src/views/mallManagement/brand/index.vue → src/views/mallManagement/configCenter/brand/index.vue


+ 4 - 1
src/views/mallManagement/order/order_detail/index.vue

@@ -580,7 +580,10 @@ export default {
       })
     },
     goBack() {
-      this.$router.go(-1);
+      // this.$router.go(-1);
+		this.$router.push({
+			name:"order_list"
+		})
     },
     isNumber(val) {
       const regPos = /^\d+(\.\d+)?$/

+ 10 - 6
src/views/mallManagement/order/order_list/index.vue

@@ -514,15 +514,19 @@ export default {
     this.getStorageList();
     this.getCompanyList();
     this.getWebsiteList();
+	if(this.$route.query.id){
+		this.queryDetail(this.$route.query.id)
+	}
   },
   methods: {
     queryWorkOrder(id) {
-      this.$router.push({
-        name: "workOrderPool",
-        query: {
-          saleOrderId: id,
-        }
-      })
+		this.$router.push({
+	  		name: 'workOrderPool',
+	  		params: {
+	  			pageType: 'saleOrderId',
+	  			pageCode: id,
+	  		},
+	  	})
     },
     changeTabs(tab, event) {
       // this.$refs.screenForm.resetFields();

+ 13 - 9
src/views/mallManagement/order/order_refund/index.vue

@@ -116,7 +116,7 @@
             </el-col>
             <el-col :xs="24" :sm="24" :lg="4" style="text-align: right;">
               <el-link type="primary" v-if="$restrict('orderNote')" :underline="false" @click="showRemark(order.orderRefundId, order.remark)">订单备注</el-link>
-              <el-link type="primary" v-if="$restrict('detail')" :underline="false" @click="showDetail(index)">查看详情</el-link>
+              <el-link type="primary" v-if="$restrict('detail')" :underline="false" @click="showDetail(order.orderRefundId)">查看详情</el-link>
               <!-- <el-link type="primary" :underline="false" @click="queryWorkOrder(order.orderId)">订单工单</el-link> -->
             </el-col>
           </el-row>
@@ -310,15 +310,19 @@ export default {
   created() {
     this.getList();
     this.getWebsiteList();
+	if(this.$route.query.id){
+		this.showDetail(this.$route.query.id)
+	}
   },
   methods: {
     queryWorkOrder(id) {
-      this.$router.push({
-        name: "workOrderPool",
-        query: {
-          saleOrderId: id,
-        }
-      })
+		this.$router.push({
+			name: 'workOrderPool',
+			params: {
+				pageType: 'saleOrderId',
+				pageCode: id,
+			},
+		})
     },
     changeTabs(tab, event) {
       // this.$refs.screenForm.resetFields();
@@ -436,8 +440,8 @@ export default {
       })
     },
     // 查看详情
-    showDetail(index) {
-      const orderRefundId = this.dataList[index].orderRefundId
+    showDetail(orderRefundId) {
+      // const orderRefundId = this.dataList[index].orderRefundId
       // let {href} = this.$router.resolve({path: `/order/order_refund_detail?orderRefundId=${orderRefundId}`});
       // window.open(href, '_blank');
       this.$router.push({

+ 4 - 1
src/views/mallManagement/order/order_refund_detail/index.vue

@@ -209,7 +209,10 @@ export default {
       })
     },
     goBack() {
-      this.$router.go(-1);
+      // this.$router.go(-1);
+		this.$router.push({
+			name:"order_list"
+		})
     },
     showRemark() {
       this.remarkVisible = true

+ 29 - 1
src/views/setting/notification/announcement/index.vue

@@ -296,6 +296,11 @@ export default {
 			}]
 		}
 	},
+	created(){
+		if(this.$route.query.id){
+			this.getNoticeDetail(this.$route.query.id,2,'formDialog2')
+		}
+	},
 	methods: {
 		// 切换状态
 		changeType(val) {
@@ -323,6 +328,21 @@ export default {
 		selectionChange(data) {
 			this.recordSelected = data
 		},
+		getNoticeDetail(noticeId,type,name){
+			getNoticeDetail({
+				noticeId
+			}).then(res => {
+				Object.assign(this.formData, res.data, {
+					files: res.data.files ? res.data.files.map(item => ({
+						...item,
+						size: item.fileSize,
+						type: item.fileType,
+					})) : []
+				})
+				this.formDialogType = type
+				this.openForm(name)
+			})
+		},
 		// 表格操作列
 		operation(h, { row, index, column }) {
 			return (<div class='operation-btns'>
@@ -394,8 +414,16 @@ export default {
 						})
 					}}
 				>
-					<el-button type="text" slot="reference">删除</el-button>
+					<el-button type="text" style="color: #ff0000" slot="reference">删除</el-button>
 				</el-popconfirm> : null}
+				{row.status == "YES" ? <el-button style="color: #f5680e" type="text" onClick={() => {
+					this.$router.push({
+						name: 'readRecords',
+						query: {
+							id: row.noticeId
+						}
+					})
+				}}>已读记录</el-button> : null}
 			</div>)
 		},
 		addData() {

+ 76 - 0
src/views/setting/notification/readRecords/index.vue

@@ -0,0 +1,76 @@
+<template>
+	<template-page ref="pageRef" :get-list="getList" :table-attributes="tableAttributes" :table-events="tableEvents"
+		:operationColumnWidth="120" :options-evens-group="optionsEvensGroup" :moreParameters="moreParameters"
+		:column-parsing="columnParsing" :operation="operation" :exportList="exportList">
+	</template-page>
+</template>
+
+<script>
+import TemplatePage from '@/components/template/template-page-1.vue'
+import import_mixin from '@/components/template/import_mixin.js'
+import ImageUpload from '@/components/file-upload'
+import { required, mobileRequired, mobile } from '@/components/template/rules_verify.js'
+import { noticeListPageV2, noticePageExport } from "@/api/readRecords";
+import { getList as getListaa } from "@/api/merchant";
+export default {
+	components: { TemplatePage, ImageUpload },
+	mixins: [import_mixin],
+	data() {
+		return {
+			// 事件组合
+			optionsEvensGroup: [],
+			// 表格属性
+			tableAttributes: {
+				// 启用勾选列
+				selectColumn: false
+			},
+			tableEvents: {},
+			noticeId: ''
+		}
+	},
+	computed: {
+		// 更多参数
+		moreParameters() {
+			return []
+		},
+		formItems() {
+			
+		}
+	},
+	created(){
+		if(this.$route.query.id){
+			this.noticeId = this.$route.query.id
+		}
+	},
+	methods: {
+		// 切换状态
+		changeType(val) {
+			this.$refs.pageRef.refreshList()
+		},
+		// 列表请求函数
+		getList(p) {
+			try {
+				var pam = JSON.parse(JSON.stringify(p))
+				if (this.noticeId) {
+					pam.params.push({ "param": "nr.notice_id", "compare": "=", "value": this.noticeId })
+				}
+				return noticeListPageV2(pam)
+			} catch (error) {
+				console.log(error)
+			}
+		},
+		// 列表导出函数
+		exportList: noticePageExport,
+		// 表格列解析渲染数据更改
+		columnParsing(item, defaultData) {
+			return defaultData
+		},
+		// 表格操作列
+		operation(h, { row, index, column }) {
+			return ''
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 12 - 1
src/views/setting/thirdPartyAddressLogin/index.vue

@@ -124,7 +124,18 @@ export default {
   },
   methods: {
     // 列表请求函数
-    getList: listPageV2,
+		getList(p, cb) {
+			try {
+				var pam = JSON.parse(JSON.stringify(p))
+				if(JSON.parse(localStorage.getItem('greemall_user')).userName != 'admin'){
+					pam.params.push({ 'param': 'a.status', "compare": "=", "value": 'ON' })
+				}
+				cb && cb(pam)
+				return listPageV2(pam)
+			} catch (error) {
+				console.log(error)
+			}
+		},
     // 列表导出函数
     exportList: pageExport,
     // 表格列解析渲染数据更改

+ 26 - 5
src/views/userManagement/customerManagement/index.vue

@@ -32,6 +32,16 @@
 							  </el-select>
 						</el-form-item>
 					</el-col>
+					<el-col :span="24">
+						<el-form-item label="身份证号码" :required="true">
+							<el-input v-model="workerForm.idCard" placeholder="请输入"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="24">
+						<el-form-item label="身份证正面照" :required="true">
+							<ImageUpload :fileList="fileList" :limit="1" :isEdit="true" />
+						</el-form-item>
+					</el-col>
 				</el-row>
 			</el-form>
 			<div slot="footer" class="dialog-footer">
@@ -49,12 +59,13 @@
 <script>
 import TemplatePage from '@/components/template/template-page-1.vue'
 import import_mixin from '@/components/template/import_mixin.js'
+import ImageUpload from '@/components/file-upload'
 import { required, mobileRequired, mobile } from '@/components/template/rules_verify.js'
 import { memberListPageV2,memberPageExport, memberAudit, memberInner, getWebsit } from "@/api/customerManagement";
 import MemberDetail from "@/components/Mall/Member/member-detail";
 import operation_mixin from '@/components/template/operation_mixin.js'
 export default {
-  components: { TemplatePage, MemberDetail },
+  components: { TemplatePage, MemberDetail, ImageUpload },
   mixins: [import_mixin,operation_mixin],
   data() {
     return {
@@ -83,10 +94,12 @@ export default {
 	  	},
 	  websitList: [],
 	  workerForm: {
-	  			websitId: '',
-	  			userId: '',
+	  		websitId: '',
+	  		userId: '',
+			idCard: ''
 	  },
 	  queryUser: {}, // 查询
+	  fileList: []
     }
   },
   computed: {
@@ -171,12 +184,20 @@ export default {
     },
 	memberInner(){
 		if(!this.workerForm.websitId){
-			return this.$message({ type: 'danger', message: '请选择入驻网点!' })
+			return this.$message({ type: 'error', message: '请选择入驻网点!'})
+		}else if(!this.workerForm.idCard){
+			return this.$message({ type: 'error', message: '请输入身份证号码!' })
+		}else if(!/^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}[\dXx]$/g.test(this.workerForm.idCard)){
+			return this.$message({ type: 'error', message: '请输入正确的身份证号码!' })
+		}else if(this.fileList.length == 0){
+			return this.$message({ type: 'error', message: '请上传身份证正面照!' })
 		}
 		memberInner({
 			type: 'WORKER',
 			userIds: this.workerForm.userId,
-			websitId: this.workerForm.websitId
+			websitId: this.workerForm.websitId,
+			idCard: this.workerForm.idCard,
+			idCardImg: this.fileList.map(item => item.url).join(",")
 		}).then(res => {
 			this.dialogVisible = false
 			this.$message({ type: 'success', message: '设置工程师成功!' })

+ 1 - 1
src/views/userManagement/distributorManagement/index.vue

@@ -326,7 +326,7 @@ export default {
 	},
 	memberInner(){
 		if(!this.workerForm.websitId){
-			return this.$message({ type: 'danger', message: '请选择入驻网点!' })
+			return this.$message({ type: 'error', message: '请选择入驻网点!' })
 		}
 		memberInner({
 			type: 'WORKER',

+ 6 - 4
src/views/valueAddedService/extendedWarrantyWork/index.vue

@@ -113,10 +113,12 @@ export default {
 				btnType: 'text',
 				click: ({ row, index, column }) => {
 					this.$router.push({
-					  name: "workOrderPool",
-					  query: {
-					    id: row.id,
-					  }
+						name: 'workOrderPool',
+						params: {
+							pageName: row.id,
+							pageType: 'detail',
+							pageCode: row.id,
+						},
 					})
 				}
 			}

+ 7 - 6
src/views/valueAddedService/orderSettleManag/pages/collect.vue

@@ -177,12 +177,13 @@ export default {
             return ["PAID", "REFUND"].includes(row.payStatus)
           },
           click: ({ row, index, column }) => {
-            this.$router.push({
-              name: "workOrderPool",
-              query: {
-                pgIncreItemId: row.id,
-              }
-            })
+			this.$router.push({
+				name: 'workOrderPool',
+				params: {
+					pageType: 'pgIncreItemId',
+					pageCode: row.id,
+				},
+			})
           }
         },
         refund: {

+ 7 - 6
src/views/valueAddedService/orderSettleManag/pages/offline.vue

@@ -301,12 +301,13 @@ export default {
             return ["PAID", "REFUND"].includes(row.payStatus)
           },
           click: ({ row, index, column }) => {
-            this.$router.push({
-              name: "workOrderPool",
-              query: {
-                pgIncreItemId: row.id,
-              }
-            })
+				this.$router.push({
+					name: 'workOrderPool',
+					params: {
+						pageType: 'pgIncreItemId',
+						pageCode: row.id,
+					},
+				})
           }
         },
         examine: {

+ 7 - 5
src/views/workOrder/appraise/index.vue

@@ -76,11 +76,13 @@ export default {
 						<div style="padding:0 6px;cursor: pointer;" class={{ 'text-view': true, 'text-view-copy': column.isCopy }}>
 							<span style="color:#008dd4;" onClick={() => {
 								this.$router.push({
-									name: "workOrderPool",
-									query: {
-										id: row.id,
-										activeName: "Evaluation",
-									}
+									name: 'workOrderPool',
+									params: {
+										pageName: row.id,
+										pageType: 'detail',
+										pageCode: row.id,
+										pagePam: "Evaluation"
+									},
 								})
 							}}>{row.id}</span>
 							{column.isCopy ? (

+ 5 - 4
src/views/workOrder/orderHome/index.vue

@@ -116,10 +116,11 @@
 					})
 				}else{
 					this.$router.push({
-						name: "workOrderPool",
-						query: {
-							orderStatus: type
-						}
+						name: 'workOrderPool',
+						params: {
+							pageType: 'orderStatus',
+							pageCode: type,
+						},
 					})
 				}
 				

+ 7 - 5
src/views/workOrder/settleAccountsManagement/settleAccountsOrder/index.vue

@@ -182,11 +182,13 @@ export default {
 							})
 						} else {
 							this.$router.push({
-								name: "workOrderPool",
-								query: {
-									id: row.orderBaseId,
-									activeName: "SettleAccounts",
-								}
+								name: 'workOrderPool',
+								params: {
+									pageName: row.orderBaseId,
+									pageType: 'detail',
+									pageCode: row.orderBaseId,
+									pagePam: 'SettleAccounts'
+								},
 							})
 						}
 					}