pengyh 1 год назад
Родитель
Сommit
972b0d02ce

+ 366 - 0
src/views/auxiliaryFittings/projectAttachmentManage/detail.vue

@@ -0,0 +1,366 @@
+<template>
+	<div class="s-page">
+		<el-page-header @back="goBack" :content="title"></el-page-header>
+		<el-divider></el-divider>
+		<el-card class="box-card">
+			<div slot="header" class="clearfix">
+				<span>项目信息</span>
+			</div>
+			<div class="mymain-container">
+				<el-form ref="formData" :rules="rules" :model="formData" label-width="110px" size="small" label-position="left">
+					<el-row :gutter="20" justify="start">
+						<el-col :span="12">
+							<el-form-item label="所属商户" :required="true" >
+								<el-input type="text" :value="companyName" disabled></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="工程名称" prop="source" :required="true">
+								<el-select v-model="formData.source" :disabled="formType==2" placeholder="请选择" style="width: 100%;">
+								    <el-option
+									  v-for="item in [{name: '在线订单',id: 'ONLINE'},{name: '自建订单',id: 'SELF'}]"
+								      :key="item.id"
+								      :label="item.name"
+								      :value="item.id">
+								    </el-option>
+								  </el-select>
+							</el-form-item>
+						</el-col>
+						<el-col :span="6">
+							<el-form-item label="工程编号" prop="projectNo" :required="true">
+								<el-input type="text" :disabled="formType==2" v-model="formData.projectNo" placeholder="请输入"></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="6">
+							<el-form-item label="负责人" prop="projectNo" :required="true">
+								<el-input type="text" :disabled="formType==2" v-model="formData.projectNo" placeholder="请输入"></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="6">
+							<el-form-item label="联系电话" prop="projectNo" :required="true">
+								<el-input type="text" :disabled="formType==2" v-model="formData.projectNo" placeholder="请输入"></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="6">
+							<el-form-item label="项目时间" prop="projectNo" :required="true">
+								<el-date-picker
+									style="width: 100%"
+								    v-model="formData.projectDate"
+									:disabled="formData.flag != 'SAVE' && formType!=0"
+								    type="daterange"
+								    align="right"
+								    unlink-panels
+								    range-separator="至"
+								    start-placeholder="开始日期"
+								    end-placeholder="结束日期"
+								    :picker-options="pickerOptions">
+								</el-date-picker>
+							</el-form-item>
+						</el-col>
+						<el-col :span="24">
+							<el-form-item label="项目地址" prop="province" :required="true">
+								<el-row>
+									<el-col :span="5" style="margin-right: 12px;">
+										<el-input type="text" v-model="formData.province" disabled placeholder="请选择省"></el-input>
+									</el-col>
+									<el-col :span="5" style="margin-right: 12px;">
+										<el-input type="text" v-model="formData.city" disabled placeholder="请选择市"></el-input>
+									</el-col>
+									<el-col :span="5" style="margin-right: 12px;">
+										<el-input type="text" v-model="formData.area" disabled placeholder="请选择区"></el-input>
+									</el-col>
+									<el-col :span="8">
+										<el-input type="text" v-model="formData.street" disabled placeholder="请选择街道"></el-input>
+									</el-col>
+								</el-row>
+							</el-form-item>
+						</el-col>
+						<el-col :span="24">
+							<el-form-item label="" prop="address">
+								<el-row :gutter="20">
+									<el-col :span="24">
+										<el-input type="text" v-model="formData.address" :disabled="formType==2" placeholder="详细地址"></el-input>
+									</el-col>
+									<!-- <el-col :span="2">
+										<geographicalPosi :disabled="formType==2" :formData="this.formData" @selectPosi="selectAddress"/>
+									</el-col> -->
+								</el-row>
+							</el-form-item>
+						</el-col>
+						<el-col :span="24">
+							<el-form-item label="项目说明">
+								<el-input type="textarea" :rows="4" :disabled="formType==2" v-model="formData.remark" placeholder="请输入"></el-input>
+							</el-form-item>
+						</el-col>
+					</el-row>
+				</el-form>
+			</div>
+		</el-card>
+		<el-card class="box-card">
+			<div slot="header" class="clearfix">
+				<span>收款信息</span>
+			</div>
+			<div class="mymain-container">
+				<el-form ref="formData1" :rules="rules1" :model="formData1" label-width="110px" size="small" label-position="left">
+					<el-row :gutter="20" justify="start">
+						<el-col :span="24">
+							<el-form-item label="收款金额">
+								<el-input type="text" v-model="formData1.amount" placeholder="请输入"></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="24">
+							<el-form-item label="收款凭证">
+								<ImageUpload :fileList="formData1.fileUrl" :limit="1" />
+							</el-form-item>
+						</el-col>
+						<el-col :span="24">
+							<el-form-item label="备注">
+								<el-input type="textarea" :rows="4" v-model="formData1.remark" placeholder="请输入"></el-input>
+							</el-form-item>
+						</el-col>
+					</el-row>
+				</el-form>
+			</div>
+		</el-card>
+		<el-card class="box-card">
+			<div slot="header" class="clearfix">
+				<span>收款记录</span>
+			</div>
+			<div class="table">
+				<el-table :data="collectionList" element-loading-text="Loading" border fit highlight-current-row stripe>
+					<el-table-column prop="" label="收款结果" align="center"></el-table-column>
+					<el-table-column prop="" label="收款金额" align="center"></el-table-column>
+					<el-table-column prop="" align="center" label="收款凭证" >
+						<template slot-scope="scope">
+							<el-image src=""></el-image>
+						</template>
+					</el-table-column>
+					<el-table-column prop="" label="备注" align="center"></el-table-column>
+					<el-table-column prop="" align="center" label="收款人" ></el-table-column>
+					<el-table-column prop="" align="center" label="收款时间" ></el-table-column>
+				</el-table>
+			</div>
+		</el-card>
+		<div class="page-footer">
+			<div class="footer">
+				<el-button v-if="true" size="small" type="primary"  @click="confirm()">确定</el-button>
+				<el-button size="small" type="info" @click="goBack">返回</el-button>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+	import ImageUpload from '@/components/file-upload'
+	import { lbsAmapRegion } from '@/api/common.js'
+	import geographicalPosi from '@/components/geographicalPosi/index.vue'
+	import { getDetail, confirm } from "@/api/auxiliaryFittings/auxiliarySalesOrder";
+	export default {
+		components: {geographicalPosi,ImageUpload},
+		props: ['id','title','formType'],
+		data() {
+			return {
+				dataList: [],
+				provinceList: [],
+				cityList: [],
+				areaList: [],
+				streetList: [],
+				collectionList: [],
+				formData: {},
+				formData1: {
+					amount: '',
+					remark: '',
+					fileUrl: []
+				},
+				companyName: JSON.parse(localStorage.getItem('greemall_user')).companyName,
+				rules: {
+					websitId: [
+						{ required: true, message: '请选择网点', trigger: 'change' }
+					],
+					workerName: [
+						{ required: true, message: '请输入客户姓名', trigger: 'blur' }
+					],
+				},
+				rules1: {},
+				pickerOptions: {
+					shortcuts: [{
+						text: '最近一周',
+						onClick(picker) {
+						const end = new Date();
+						const start = new Date();
+						start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+						picker.$emit('pick', [start, end]);
+						}
+					}, {
+						text: '最近一个月',
+						onClick(picker) {
+						const end = new Date();
+						const start = new Date();
+						start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+						picker.$emit('pick', [start, end]);
+						}
+					}, {
+						text: '最近三个月',
+						onClick(picker) {
+						const end = new Date();
+						const start = new Date();
+						start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+						picker.$emit('pick', [start, end]);
+						}
+					}]
+				},
+			};
+		},
+		computed: {},
+		created() {
+			if(this.id){
+				this.getDetail()
+			}
+			this.getinitlbslist()
+		},
+		methods: {
+			// 返回
+			goBack() {
+				this.$emit('back');
+			},
+			async getDetail(){
+				const that = this
+				getDetail({salesId: this.id}).then( async res => {
+					Object.assign(this.formData, res.data)
+				})
+			},
+			getinitlbslist() {
+			  // 初始化请求省市区街道下拉选项数据
+			  lbsAmapRegion({ pid: 0 }).then(res => {
+			    this.provinceList = res.data
+			    // 创建工单时获取ip地址定位赋值
+			    if (!this.id && this.$IpAdd.province) {
+			      var item = this.provinceList.find(item => item.name === this.$IpAdd.province)
+			      if (item) {
+			        this.formData.provinceId = item.id
+			        this.formData.province = item.name
+			      }
+			    }
+			    if (this.formData.provinceId) {
+			      lbsAmapRegion({ pid: this.formData.provinceId }).then(res => {
+			        this.cityList = res.data
+			        // 创建工单时获取ip地址定位赋值
+			        if (!this.id && this.$IpAdd.city) {
+			          var item2 = this.cityList.find(item => item.name === this.$IpAdd.city)
+			          if (item2) {
+			            this.formData.cityId = item2.id
+			            this.formData.city = item2.name
+			          }
+			        }
+			        if (this.formData.cityId) {
+			          lbsAmapRegion({ pid: this.formData.cityId }).then(res => {
+			            this.areaList = res.data
+			          })
+			        }
+			        if (this.formData.areaId) {
+			          lbsAmapRegion({ pid: this.formData.areaId }).then(res => {
+			            this.streetList = res.data
+			          })
+			        }
+			      })
+			    }
+			  })
+			},
+			selectAddress(data){
+				this.formData.lng = data.center[0]
+				this.formData.lat = data.center[1]
+				// 获取定位的省市区街道
+				var { province, city, district, township } = data.data.addressComponent
+				// 获取选中省名称id
+				var { id, name } = this.provinceList.find(item => item.name === province)
+				this.formData.provinceId = id
+				this.formData.province = name
+				// 请求市选项
+				lbsAmapRegion({ pid: this.formData.provinceId }).then(res => {
+				  // 赋值市选项
+				  this.cityList = res.data
+				  // 获取选中市名称id
+				  var { id, name } = res.data.find(item => item.name === city)
+				  this.formData.cityId = id
+				  this.formData.city = name
+				  // 请求区选项
+				  lbsAmapRegion({ pid: this.formData.cityId }).then(res => {
+				    // 赋值区选项
+				    this.areaList = res.data
+				    // 获取选中区名称id
+				    var { id, name } = res.data.find(item => item.name === district)
+				    this.formData.areaId = id
+				    this.formData.area = name
+				    // 请求街道选项
+				    lbsAmapRegion({ pid: this.formData.areaId }).then(res => {
+				      // 赋值街道选项
+				      this.streetList = res.data
+				      // 获取选中街道名称id
+				      var { id, name } = res.data.find(item => item.name === township)
+				      this.formData.streetId = id
+				      this.formData.street = name
+				      // 赋值GPS详细地址
+				      this.formData.address = data.name
+				    })
+				  })
+				})
+			},
+			confirm(){
+				this.$confirm(`请确定是否确认提货, 是否继续?`, '提示', {
+					confirmButtonText: '确定',
+					cancelButtonText: '取消',
+					type: 'warning'
+				}).then(() => {
+					confirm({
+						salesId: this.formData.salesId
+					}).then(res => {
+						if(res.code == 200){
+							this.$message.success('审核成功!')
+							this.goBack()
+						}
+					})
+				});
+			},
+		}
+	};
+</script>
+
+<style scoped="scoped" lang="scss">
+	.s-page {
+		padding: 20px;
+		background-color: #ffffff;
+	}
+	.page-footer {
+		height: 70px;
+	}
+	
+	.footer {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		z-index: 1;
+		width: 100%;
+		background: #fff;
+		padding: 15px 40px;
+		box-sizing: border-box;
+		transition: all 0.28s;
+		text-align: right;
+		box-shadow: 0 2px 5px 0 rgb(0 0 0 / 50%), 0 2px 5px 0 rgb(0 0 0 / 10%);
+	
+		&.hideSidebar {
+			margin-left: 54px;
+			width: calc(100vw - 54px);
+		}
+	
+		&.openSidebar {
+			margin-left: 210px;
+			width: calc(100vw - 210px);
+		}
+	
+		.tips {
+			font-size: 12px;
+			color: red;
+			margin-top: 10px;
+		}
+	}
+</style>

+ 153 - 0
src/views/auxiliaryFittings/projectAttachmentManage/index.vue

@@ -0,0 +1,153 @@
+<template>
+	<div class="page">
+		<template-page v-if="isShowTab && !formDialog" ref="pageRef" :get-list="getList" :table-attributes="tableAttributes"
+			:table-events="tableEvents" :operationColumnWidth="170" :options-evens-group="optionsEvensGroup"
+			:moreParameters="moreParameters" :column-parsing="columnParsing" :operation="operation()" :exportList="exportList">
+			<div slot="moreSearch">
+				<el-radio-group v-model="flag" size="mini" @change="changeType">
+					<el-radio-button label="">全部</el-radio-button>
+					<el-radio-button label="SAVE">未付款</el-radio-button>
+					<el-radio-button label="SUBMIT">部分付款</el-radio-button>
+					<el-radio-button label="PAY_NOT_TAKE">已完成</el-radio-button>
+				</el-radio-group>
+				<br><br>
+			</div>
+		</template-page>
+		<div class="detail" v-if="formDialog">
+			<detail :id="id" @back="backList" :formType="formDialogType" title="工程配件收款详情"></detail>
+		</div>
+	</div>
+</template>
+
+<script>
+import TemplatePage from '@/components/template/template-page-1.vue'
+import detail from './detail.vue'
+import import_mixin from '@/components/template/import_mixin.js'
+import ImageUpload from '@/components/file-upload'
+import { downloadFiles } from '@/utils/util'
+import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
+import { listPageV2, pageExport, getDetail, add, edit, submit } from "@/api/auxiliaryFittings/auxiliarySalesOrder";
+import operation_mixin from '@/components/template/operation_mixin.js'
+export default {
+	components: { TemplatePage, ImageUpload, detail },
+	mixins: [import_mixin, operation_mixin],
+	data() {
+		return {
+			// 表格属性
+			tableAttributes: {
+				// 启用勾选列
+				selectColumn: true
+			},
+			// 表格事件
+			tableEvents: {
+				'selection-change': this.selectionChange
+			},
+			// 勾选选中行
+			recordSelected: [],
+			/** 表单变量 */
+			formDialogType: 0,
+			formDialogTitles: ["新增", "编辑", "详情"],
+			formDialog: false,
+			id: '',
+			flag: 'SAVE',
+			isShowTab: true
+		}
+	},
+	computed: {
+		// 事件组合
+		optionsEvensGroup() {
+			return [
+				// [
+				// 	[
+				// 		this.optionsEvensAuth("add", {
+				// 			click: this.addData
+				// 		}),
+				// 	]
+				// ]
+			]
+		},
+		// 更多参数
+		moreParameters() {
+			return []
+		},
+		formItems() { }
+	},
+	created(){},
+	watch: {
+		flag(){
+			this.isShowTab = false
+			this.$nextTick(()=>{
+				this.isShowTab = true
+			})
+		}
+	},
+	methods: {
+		// 切换状态
+		changeType(val) {
+			this.$refs?.pageRef?.refreshList()
+		},
+		backList() {
+			this.id = ''
+			this.formDialog = false;
+			this.$refs?.pageRef?.refreshList()
+		},
+		// 列表请求函数
+		getList(p, cb) {
+			try {
+				var pam = JSON.parse(JSON.stringify(p))
+				pam.params.push({ "param": "a.goods_type", "compare": "=", "value": 'M' }, { 'param': 'a.flag', "compare": "=", "value": this.flag })
+				cb && cb(pam)
+				return listPageV2(pam)
+			} catch (error) {
+				console.log(error)
+			}
+		},
+		// 列表导出函数
+		exportList: pageExport,
+		// 表格列解析渲染数据更改
+		columnParsing(item, defaultData) {
+			return defaultData
+		},
+		// 监听勾选变化
+		selectionChange(data) {
+			this.recordSelected = data
+		},
+
+		operation() {
+			return this.operationBtn({
+				detail: {
+					click: ({ row, index, column }) => {
+						this.id = row.salesId
+						this.formDialogType = 2
+						this.openForm()
+					}
+				},
+				sellOrderDetail: {
+					click: ({ row, index, column }) => {
+						
+					}
+				},
+				returnGoodsDetail: {
+					click: ({ row, index, column }) => {
+						
+					}
+				},
+			})
+		},
+
+		openForm() {
+			this.formDialog = true;
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.page {
+	height: 100%;
+}
+
+.tab {
+	padding: 20px 20px 0 20px;
+}
+</style>

+ 366 - 0
src/views/auxiliaryFittings/projectAuxiliaryManage/detail.vue

@@ -0,0 +1,366 @@
+<template>
+	<div class="s-page">
+		<el-page-header @back="goBack" :content="title"></el-page-header>
+		<el-divider></el-divider>
+		<el-card class="box-card">
+			<div slot="header" class="clearfix">
+				<span>项目信息</span>
+			</div>
+			<div class="mymain-container">
+				<el-form ref="formData" :rules="rules" :model="formData" label-width="110px" size="small" label-position="left">
+					<el-row :gutter="20" justify="start">
+						<el-col :span="12">
+							<el-form-item label="所属商户" :required="true" >
+								<el-input type="text" :value="companyName" disabled></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="工程名称" prop="source" :required="true">
+								<el-select v-model="formData.source" :disabled="formType==2" placeholder="请选择" style="width: 100%;">
+								    <el-option
+									  v-for="item in [{name: '在线订单',id: 'ONLINE'},{name: '自建订单',id: 'SELF'}]"
+								      :key="item.id"
+								      :label="item.name"
+								      :value="item.id">
+								    </el-option>
+								  </el-select>
+							</el-form-item>
+						</el-col>
+						<el-col :span="6">
+							<el-form-item label="工程编号" prop="projectNo" :required="true">
+								<el-input type="text" :disabled="formType==2" v-model="formData.projectNo" placeholder="请输入"></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="6">
+							<el-form-item label="负责人" prop="projectNo" :required="true">
+								<el-input type="text" :disabled="formType==2" v-model="formData.projectNo" placeholder="请输入"></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="6">
+							<el-form-item label="联系电话" prop="projectNo" :required="true">
+								<el-input type="text" :disabled="formType==2" v-model="formData.projectNo" placeholder="请输入"></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="6">
+							<el-form-item label="项目时间" prop="projectNo" :required="true">
+								<el-date-picker
+									style="width: 100%"
+								    v-model="formData.projectDate"
+									:disabled="formData.flag != 'SAVE' && formType!=0"
+								    type="daterange"
+								    align="right"
+								    unlink-panels
+								    range-separator="至"
+								    start-placeholder="开始日期"
+								    end-placeholder="结束日期"
+								    :picker-options="pickerOptions">
+								</el-date-picker>
+							</el-form-item>
+						</el-col>
+						<el-col :span="24">
+							<el-form-item label="项目地址" prop="province" :required="true">
+								<el-row>
+									<el-col :span="5" style="margin-right: 12px;">
+										<el-input type="text" v-model="formData.province" disabled placeholder="请选择省"></el-input>
+									</el-col>
+									<el-col :span="5" style="margin-right: 12px;">
+										<el-input type="text" v-model="formData.city" disabled placeholder="请选择市"></el-input>
+									</el-col>
+									<el-col :span="5" style="margin-right: 12px;">
+										<el-input type="text" v-model="formData.area" disabled placeholder="请选择区"></el-input>
+									</el-col>
+									<el-col :span="8">
+										<el-input type="text" v-model="formData.street" disabled placeholder="请选择街道"></el-input>
+									</el-col>
+								</el-row>
+							</el-form-item>
+						</el-col>
+						<el-col :span="24">
+							<el-form-item label="" prop="address">
+								<el-row :gutter="20">
+									<el-col :span="24">
+										<el-input type="text" v-model="formData.address" :disabled="formType==2" placeholder="详细地址"></el-input>
+									</el-col>
+									<!-- <el-col :span="2">
+										<geographicalPosi :disabled="formType==2" :formData="this.formData" @selectPosi="selectAddress"/>
+									</el-col> -->
+								</el-row>
+							</el-form-item>
+						</el-col>
+						<el-col :span="24">
+							<el-form-item label="项目说明">
+								<el-input type="textarea" :rows="4" :disabled="formType==2" v-model="formData.remark" placeholder="请输入"></el-input>
+							</el-form-item>
+						</el-col>
+					</el-row>
+				</el-form>
+			</div>
+		</el-card>
+		<el-card class="box-card">
+			<div slot="header" class="clearfix">
+				<span>收款信息</span>
+			</div>
+			<div class="mymain-container">
+				<el-form ref="formData1" :rules="rules1" :model="formData1" label-width="110px" size="small" label-position="left">
+					<el-row :gutter="20" justify="start">
+						<el-col :span="24">
+							<el-form-item label="收款金额">
+								<el-input type="text" v-model="formData1.amount" placeholder="请输入"></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="24">
+							<el-form-item label="收款凭证">
+								<ImageUpload :fileList="formData1.fileUrl" :limit="1" />
+							</el-form-item>
+						</el-col>
+						<el-col :span="24">
+							<el-form-item label="备注">
+								<el-input type="textarea" :rows="4" v-model="formData1.remark" placeholder="请输入"></el-input>
+							</el-form-item>
+						</el-col>
+					</el-row>
+				</el-form>
+			</div>
+		</el-card>
+		<el-card class="box-card">
+			<div slot="header" class="clearfix">
+				<span>收款记录</span>
+			</div>
+			<div class="table">
+				<el-table :data="collectionList" element-loading-text="Loading" border fit highlight-current-row stripe>
+					<el-table-column prop="" label="收款结果" align="center"></el-table-column>
+					<el-table-column prop="" label="收款金额" align="center"></el-table-column>
+					<el-table-column prop="" align="center" label="收款凭证" >
+						<template slot-scope="scope">
+							<el-image src=""></el-image>
+						</template>
+					</el-table-column>
+					<el-table-column prop="" label="备注" align="center"></el-table-column>
+					<el-table-column prop="" align="center" label="收款人" ></el-table-column>
+					<el-table-column prop="" align="center" label="收款时间" ></el-table-column>
+				</el-table>
+			</div>
+		</el-card>
+		<div class="page-footer">
+			<div class="footer">
+				<el-button v-if="true" size="small" type="primary"  @click="confirm()">确定</el-button>
+				<el-button size="small" type="info" @click="goBack">返回</el-button>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+	import ImageUpload from '@/components/file-upload'
+	import { lbsAmapRegion } from '@/api/common.js'
+	import geographicalPosi from '@/components/geographicalPosi/index.vue'
+	import { getDetail, confirm } from "@/api/auxiliaryFittings/auxiliarySalesOrder";
+	export default {
+		components: {geographicalPosi,ImageUpload},
+		props: ['id','title','formType'],
+		data() {
+			return {
+				dataList: [],
+				provinceList: [],
+				cityList: [],
+				areaList: [],
+				streetList: [],
+				collectionList: [],
+				formData: {},
+				formData1: {
+					amount: '',
+					remark: '',
+					fileUrl: []
+				},
+				companyName: JSON.parse(localStorage.getItem('greemall_user')).companyName,
+				rules: {
+					websitId: [
+						{ required: true, message: '请选择网点', trigger: 'change' }
+					],
+					workerName: [
+						{ required: true, message: '请输入客户姓名', trigger: 'blur' }
+					],
+				},
+				rules1: {},
+				pickerOptions: {
+					shortcuts: [{
+						text: '最近一周',
+						onClick(picker) {
+						const end = new Date();
+						const start = new Date();
+						start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+						picker.$emit('pick', [start, end]);
+						}
+					}, {
+						text: '最近一个月',
+						onClick(picker) {
+						const end = new Date();
+						const start = new Date();
+						start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+						picker.$emit('pick', [start, end]);
+						}
+					}, {
+						text: '最近三个月',
+						onClick(picker) {
+						const end = new Date();
+						const start = new Date();
+						start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+						picker.$emit('pick', [start, end]);
+						}
+					}]
+				},
+			};
+		},
+		computed: {},
+		created() {
+			if(this.id){
+				this.getDetail()
+			}
+			this.getinitlbslist()
+		},
+		methods: {
+			// 返回
+			goBack() {
+				this.$emit('back');
+			},
+			async getDetail(){
+				const that = this
+				getDetail({salesId: this.id}).then( async res => {
+					Object.assign(this.formData, res.data)
+				})
+			},
+			getinitlbslist() {
+			  // 初始化请求省市区街道下拉选项数据
+			  lbsAmapRegion({ pid: 0 }).then(res => {
+			    this.provinceList = res.data
+			    // 创建工单时获取ip地址定位赋值
+			    if (!this.id && this.$IpAdd.province) {
+			      var item = this.provinceList.find(item => item.name === this.$IpAdd.province)
+			      if (item) {
+			        this.formData.provinceId = item.id
+			        this.formData.province = item.name
+			      }
+			    }
+			    if (this.formData.provinceId) {
+			      lbsAmapRegion({ pid: this.formData.provinceId }).then(res => {
+			        this.cityList = res.data
+			        // 创建工单时获取ip地址定位赋值
+			        if (!this.id && this.$IpAdd.city) {
+			          var item2 = this.cityList.find(item => item.name === this.$IpAdd.city)
+			          if (item2) {
+			            this.formData.cityId = item2.id
+			            this.formData.city = item2.name
+			          }
+			        }
+			        if (this.formData.cityId) {
+			          lbsAmapRegion({ pid: this.formData.cityId }).then(res => {
+			            this.areaList = res.data
+			          })
+			        }
+			        if (this.formData.areaId) {
+			          lbsAmapRegion({ pid: this.formData.areaId }).then(res => {
+			            this.streetList = res.data
+			          })
+			        }
+			      })
+			    }
+			  })
+			},
+			selectAddress(data){
+				this.formData.lng = data.center[0]
+				this.formData.lat = data.center[1]
+				// 获取定位的省市区街道
+				var { province, city, district, township } = data.data.addressComponent
+				// 获取选中省名称id
+				var { id, name } = this.provinceList.find(item => item.name === province)
+				this.formData.provinceId = id
+				this.formData.province = name
+				// 请求市选项
+				lbsAmapRegion({ pid: this.formData.provinceId }).then(res => {
+				  // 赋值市选项
+				  this.cityList = res.data
+				  // 获取选中市名称id
+				  var { id, name } = res.data.find(item => item.name === city)
+				  this.formData.cityId = id
+				  this.formData.city = name
+				  // 请求区选项
+				  lbsAmapRegion({ pid: this.formData.cityId }).then(res => {
+				    // 赋值区选项
+				    this.areaList = res.data
+				    // 获取选中区名称id
+				    var { id, name } = res.data.find(item => item.name === district)
+				    this.formData.areaId = id
+				    this.formData.area = name
+				    // 请求街道选项
+				    lbsAmapRegion({ pid: this.formData.areaId }).then(res => {
+				      // 赋值街道选项
+				      this.streetList = res.data
+				      // 获取选中街道名称id
+				      var { id, name } = res.data.find(item => item.name === township)
+				      this.formData.streetId = id
+				      this.formData.street = name
+				      // 赋值GPS详细地址
+				      this.formData.address = data.name
+				    })
+				  })
+				})
+			},
+			confirm(){
+				this.$confirm(`请确定是否确认提货, 是否继续?`, '提示', {
+					confirmButtonText: '确定',
+					cancelButtonText: '取消',
+					type: 'warning'
+				}).then(() => {
+					confirm({
+						salesId: this.formData.salesId
+					}).then(res => {
+						if(res.code == 200){
+							this.$message.success('审核成功!')
+							this.goBack()
+						}
+					})
+				});
+			},
+		}
+	};
+</script>
+
+<style scoped="scoped" lang="scss">
+	.s-page {
+		padding: 20px;
+		background-color: #ffffff;
+	}
+	.page-footer {
+		height: 70px;
+	}
+	
+	.footer {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		z-index: 1;
+		width: 100%;
+		background: #fff;
+		padding: 15px 40px;
+		box-sizing: border-box;
+		transition: all 0.28s;
+		text-align: right;
+		box-shadow: 0 2px 5px 0 rgb(0 0 0 / 50%), 0 2px 5px 0 rgb(0 0 0 / 10%);
+	
+		&.hideSidebar {
+			margin-left: 54px;
+			width: calc(100vw - 54px);
+		}
+	
+		&.openSidebar {
+			margin-left: 210px;
+			width: calc(100vw - 210px);
+		}
+	
+		.tips {
+			font-size: 12px;
+			color: red;
+			margin-top: 10px;
+		}
+	}
+</style>

+ 153 - 0
src/views/auxiliaryFittings/projectAuxiliaryManage/index.vue

@@ -0,0 +1,153 @@
+<template>
+	<div class="page">
+		<template-page v-if="isShowTab && !formDialog" ref="pageRef" :get-list="getList" :table-attributes="tableAttributes"
+			:table-events="tableEvents" :operationColumnWidth="170" :options-evens-group="optionsEvensGroup"
+			:moreParameters="moreParameters" :column-parsing="columnParsing" :operation="operation()" :exportList="exportList">
+			<div slot="moreSearch">
+				<el-radio-group v-model="flag" size="mini" @change="changeType">
+					<el-radio-button label="">全部</el-radio-button>
+					<el-radio-button label="SAVE">未付款</el-radio-button>
+					<el-radio-button label="SUBMIT">部分付款</el-radio-button>
+					<el-radio-button label="PAY_NOT_TAKE">已完成</el-radio-button>
+				</el-radio-group>
+				<br><br>
+			</div>
+		</template-page>
+		<div class="detail" v-if="formDialog">
+			<detail :id="id" @back="backList" :formType="formDialogType" title="工程辅材收款详情"></detail>
+		</div>
+	</div>
+</template>
+
+<script>
+import TemplatePage from '@/components/template/template-page-1.vue'
+import detail from './detail.vue'
+import import_mixin from '@/components/template/import_mixin.js'
+import ImageUpload from '@/components/file-upload'
+import { downloadFiles } from '@/utils/util'
+import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
+import { listPageV2, pageExport, getDetail, add, edit, submit } from "@/api/auxiliaryFittings/auxiliarySalesOrder";
+import operation_mixin from '@/components/template/operation_mixin.js'
+export default {
+	components: { TemplatePage, ImageUpload, detail },
+	mixins: [import_mixin, operation_mixin],
+	data() {
+		return {
+			// 表格属性
+			tableAttributes: {
+				// 启用勾选列
+				selectColumn: true
+			},
+			// 表格事件
+			tableEvents: {
+				'selection-change': this.selectionChange
+			},
+			// 勾选选中行
+			recordSelected: [],
+			/** 表单变量 */
+			formDialogType: 0,
+			formDialogTitles: ["新增", "编辑", "详情"],
+			formDialog: false,
+			id: '',
+			flag: 'SAVE',
+			isShowTab: true
+		}
+	},
+	computed: {
+		// 事件组合
+		optionsEvensGroup() {
+			return [
+				// [
+				// 	[
+				// 		this.optionsEvensAuth("add", {
+				// 			click: this.addData
+				// 		}),
+				// 	]
+				// ]
+			]
+		},
+		// 更多参数
+		moreParameters() {
+			return []
+		},
+		formItems() { }
+	},
+	created(){},
+	watch: {
+		flag(){
+			this.isShowTab = false
+			this.$nextTick(()=>{
+				this.isShowTab = true
+			})
+		}
+	},
+	methods: {
+		// 切换状态
+		changeType(val) {
+			this.$refs?.pageRef?.refreshList()
+		},
+		backList() {
+			this.id = ''
+			this.formDialog = false;
+			this.$refs?.pageRef?.refreshList()
+		},
+		// 列表请求函数
+		getList(p, cb) {
+			try {
+				var pam = JSON.parse(JSON.stringify(p))
+				pam.params.push({ "param": "a.goods_type", "compare": "=", "value": 'M' }, { 'param': 'a.flag', "compare": "=", "value": this.flag })
+				cb && cb(pam)
+				return listPageV2(pam)
+			} catch (error) {
+				console.log(error)
+			}
+		},
+		// 列表导出函数
+		exportList: pageExport,
+		// 表格列解析渲染数据更改
+		columnParsing(item, defaultData) {
+			return defaultData
+		},
+		// 监听勾选变化
+		selectionChange(data) {
+			this.recordSelected = data
+		},
+
+		operation() {
+			return this.operationBtn({
+				detail: {
+					click: ({ row, index, column }) => {
+						this.id = row.salesId
+						this.formDialogType = 2
+						this.openForm()
+					}
+				},
+				sellOrderDetail: {
+					click: ({ row, index, column }) => {
+						
+					}
+				},
+				returnGoodsDetail: {
+					click: ({ row, index, column }) => {
+						
+					}
+				},
+			})
+		},
+
+		openForm() {
+			this.formDialog = true;
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.page {
+	height: 100%;
+}
+
+.tab {
+	padding: 20px 20px 0 20px;
+}
+</style>

+ 296 - 31
src/views/auxiliaryFittings/salesManagement/components/auxiliarySalesOrderDetail.vue

@@ -25,7 +25,7 @@
 							</el-form-item>
 						</el-col>
 						<el-col :span="8">
-							<el-form-item label="网点名称" prop="websitId" :required="true">
+							<el-form-item label="网点名称" prop="websitId">
 								<el-select v-model="formData.websit" :disabled="formData.flag != 'SAVE' && formType!=0" value-key="websitId" @change="changeWebsit" placeholder="请选择" style="width: 100%;">
 								    <el-option
 								      v-for="item in websitList"
@@ -46,19 +46,19 @@
 						</el-col>
 						<template v-if="formData.buyPeople == 'CUSTOMER'">
 							<el-col :span="8">
-								<el-form-item label="客户姓名" prop="workerName" :required="true">
+								<el-form-item label="客户姓名" prop="workerName">
 									<el-input type="text" :disabled="formData.flag != 'SAVE' && formType!=0" v-model="formData.workerName" placeholder="请输入"></el-input>
 								</el-form-item>
 							</el-col>
 							<el-col :span="8">
-								<el-form-item label="客户联系电话" prop="workerMobile" :required="true">
+								<el-form-item label="客户联系电话" prop="workerMobile">
 									<el-input type="text" :disabled="formData.flag != 'SAVE' && formType!=0" v-model="formData.workerMobile" placeholder="请输入"></el-input>
 								</el-form-item>
 							</el-col>
 						</template>
 						<template v-else>
 							<el-col :span="8">
-								<el-form-item label="师傅姓名" prop="worker" :required="true">
+								<el-form-item label="师傅姓名" prop="worker">
 									<el-select v-model="formData.worker" :disabled="formData.flag != 'SAVE' && formType!=0" value-key="nickName" @focus="()=>{
 										if(!this.formData.websitId){return this.$message.warning('请先选择网点名称!');}
 									}" filterable @change="changeWorker" @blur="workerBlur" placeholder="请选择" style="width: 100%;">
@@ -77,37 +77,25 @@
 								</el-form-item>
 							</el-col> -->
 							<el-col :span="8">
-								<el-form-item label="师傅联系电话" prop="workerMobile" :required="true">
+								<el-form-item label="师傅联系电话" prop="workerMobile">
 									<el-input type="text" :disabled="formData.flag != 'SAVE' && formType!=0" v-model="formData.workerMobile" placeholder="请输入"></el-input>
 								</el-form-item>
 							</el-col>
+							<el-col :span="8">
+								<el-form-item label="销售类型" :required="true" style="padding-bottom: 1px;">
+									<el-radio-group v-model="formData.saleType" @change="changeSale">
+									    <el-radio :disabled="formData.flag != 'SAVE' && formType!=0" label="1">零售</el-radio>
+									    <el-radio :disabled="formData.flag != 'SAVE' && formType!=0" label="2">工程</el-radio>
+									</el-radio-group>
+								</el-form-item>
+							</el-col>
 						</template>
 						<el-col :span="8" v-if="id">
 							<el-form-item label="单据金额">
 								<el-input type="text" :value="formData.totalAmount" disabled></el-input>
 							</el-form-item>
 						</el-col>
-						<el-col :span="6" v-if="id">
-							<el-form-item label="制单人">
-								<el-input type="text" :value="formData.createBy" disabled></el-input>
-							</el-form-item>
-						</el-col>
-						<el-col :span="6" v-if="id">
-							<el-form-item label="制单时间">
-								<el-input type="text" :value="formData.createTime" disabled></el-input>
-							</el-form-item>
-						</el-col>
-						<el-col :span="6" v-if="id">
-							<el-form-item label="审核人">
-								<el-input type="text" :value="formData.confirmBy" disabled></el-input>
-							</el-form-item>
-						</el-col>
-						<el-col :span="6" v-if="id">
-							<el-form-item label="审核时间">
-								<el-input type="text" :value="formData.confirmTime" disabled></el-input>
-							</el-form-item>
-						</el-col>
-						<el-col :span="12">
+						<el-col :span="8">
 							<el-form-item label="订单来源" prop="source" :required="true">
 								<el-select v-model="formData.source" :disabled="true" placeholder="请选择" style="width: 100%;">
 								    <el-option
@@ -119,17 +107,116 @@
 								  </el-select>
 							</el-form-item>
 						</el-col>
-						<el-col :span="9">
+						<el-col :span="6">
 							<el-form-item label="支付方式" prop="payType" :required="true">
 								<el-radio-group v-model="formData.payType">
 								    <el-radio :disabled="formData.flag != 'SAVE' && formType!=0" label="CASH">现金</el-radio>
 								    <el-radio :disabled="formData.flag != 'SAVE' && formType!=0" label="WECHAT">微信</el-radio>
+									<el-radio v-if="formData.saleType == 2" :disabled="formData.flag != 'SAVE' && formType!=0" label="project">工程支付</el-radio>
 								</el-radio-group>
 							</el-form-item>
 						</el-col>
-						<el-col :span="3" v-if="formData.flag == 'SUBMIT' && formData.payType == 'WECHAT'">
+						<el-col :span="2" v-if="formData.flag == 'SUBMIT' && formData.payType == 'WECHAT'">
 							<div style="height: 32px;display: flex;align-items: center;cursor: pointer;" @click="wxPay()">微信支付<i class="el-icon-full-screen"></i></div>
 						</el-col>
+						<el-col :span="2" v-else>
+							<div style="opacity: 0;">隐藏</div>
+						</el-col>
+						<template v-if="formData.saleType == 2">
+							<el-col :span="8">
+								<el-form-item label="工程名称" prop="source" :required="true">
+									<el-select v-model="formData.source" :disabled="true" placeholder="请选择" style="width: 100%;">
+									    <el-option
+										  v-for="item in [{name: '在线订单',id: 'ONLINE'},{name: '自建订单',id: 'SELF'}]"
+									      :key="item.id"
+									      :label="item.name"
+									      :value="item.id">
+									    </el-option>
+									  </el-select>
+								</el-form-item>
+							</el-col>
+							<el-col :span="6">
+								<el-form-item label="工程编号" prop="projectNo" :required="true">
+									<el-input type="text" :disabled="formData.flag != 'SAVE' && formType!=0" v-model="formData.projectNo" placeholder="请输入"></el-input>
+								</el-form-item>
+							</el-col>
+							<el-col :span="6">
+								<el-form-item label="负责人" prop="projectNo" :required="true">
+									<el-input type="text" :disabled="formData.flag != 'SAVE' && formType!=0" v-model="formData.projectNo" placeholder="请输入"></el-input>
+								</el-form-item>
+							</el-col>
+							<el-col :span="6">
+								<el-form-item label="联系电话" prop="projectNo" :required="true">
+									<el-input type="text" :disabled="formData.flag != 'SAVE' && formType!=0" v-model="formData.projectNo" placeholder="请输入"></el-input>
+								</el-form-item>
+							</el-col>
+							<el-col :span="6">
+								<el-form-item label="项目时间" prop="projectNo" :required="true">
+									<el-date-picker
+										style="width: 100%"
+									    v-model="formData.projectDate"
+										:disabled="formData.flag != 'SAVE' && formType!=0"
+									    type="daterange"
+									    align="right"
+									    unlink-panels
+									    range-separator="至"
+									    start-placeholder="开始日期"
+									    end-placeholder="结束日期"
+									    :picker-options="pickerOptions">
+									</el-date-picker>
+								</el-form-item>
+							</el-col>
+							<el-col :span="24">
+								<el-form-item label="项目地址" prop="province" :required="true">
+									<el-row>
+										<el-col :span="5" style="margin-right: 12px;">
+											<el-input type="text" v-model="formData.province" disabled placeholder="请选择省"></el-input>
+										</el-col>
+										<el-col :span="5" style="margin-right: 12px;">
+											<el-input type="text" v-model="formData.city" disabled placeholder="请选择市"></el-input>
+										</el-col>
+										<el-col :span="5" style="margin-right: 12px;">
+											<el-input type="text" v-model="formData.area" disabled placeholder="请选择区"></el-input>
+										</el-col>
+										<el-col :span="8">
+											<el-input type="text" v-model="formData.street" disabled placeholder="请选择街道"></el-input>
+										</el-col>
+									</el-row>
+								</el-form-item>
+							</el-col>
+							<el-col :span="24">
+								<el-form-item label="" prop="address">
+									<el-row :gutter="20">
+										<el-col :span="22">
+											<el-input type="text" v-model="formData.address" :disabled="formType==2" placeholder="详细地址"></el-input>
+										</el-col>
+										<el-col :span="2">
+											<geographicalPosi :disabled="formType==2" :formData="this.formData" @selectPosi="selectAddress"/>
+										</el-col>
+									</el-row>
+								</el-form-item>
+							</el-col>
+						</template>
+						<el-col :span="6" v-if="id">
+							<el-form-item label="制单人">
+								<el-input type="text" :value="formData.createBy" disabled></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="6" v-if="id">
+							<el-form-item label="制单时间">
+								<el-input type="text" :value="formData.createTime" disabled></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="6" v-if="id">
+							<el-form-item label="审核人">
+								<el-input type="text" :value="formData.confirmBy" disabled></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="6" v-if="id">
+							<el-form-item label="审核时间">
+								<el-input type="text" :value="formData.confirmTime" disabled></el-input>
+							</el-form-item>
+						</el-col>
 						<el-col :span="24">
 							<el-form-item label="备注">
 								<el-input type="textarea" :rows="4" :disabled="formData.flag != 'SAVE' && formType!=0" v-model="formData.remark" placeholder="请输入"></el-input>
@@ -208,6 +295,51 @@
 				</el-table>
 			</div>
 		</el-card>
+		<el-card class="box-card" v-if="formData.saleType == 2">
+			<div slot="header" class="clearfix">
+				<span>收款信息</span>
+			</div>
+			<div class="mymain-container">
+				<el-form ref="formData1" :rules="rules1" :model="formData1" label-width="110px" size="small" label-position="left">
+					<el-row :gutter="20" justify="start">
+						<el-col :span="24">
+							<el-form-item label="收款金额">
+								<el-input type="text" v-model="formData1.amount" placeholder="请输入"></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="24">
+							<el-form-item label="收款凭证">
+								<ImageUpload :fileList="formData1.fileUrl" :limit="1" :isEdit="formType !== 2" />
+							</el-form-item>
+						</el-col>
+						<el-col :span="24">
+							<el-form-item label="备注">
+								<el-input type="textarea" :rows="4" v-model="formData1.remark" placeholder="请输入"></el-input>
+							</el-form-item>
+						</el-col>
+					</el-row>
+				</el-form>
+			</div>
+		</el-card>
+		<el-card class="box-card" v-if="formData.saleType == 2">
+			<div slot="header" class="clearfix">
+				<span>收款记录</span>
+			</div>
+			<div class="table">
+				<el-table :data="collectionList" element-loading-text="Loading" border fit highlight-current-row stripe>
+					<el-table-column prop="" label="收款结果" align="center"></el-table-column>
+					<el-table-column prop="" label="收款金额" align="center"></el-table-column>
+					<el-table-column prop="" align="center" label="收款凭证" >
+						<template slot-scope="scope">
+							<el-image src=""></el-image>
+						</template>
+					</el-table-column>
+					<el-table-column prop="" label="备注" align="center"></el-table-column>
+					<el-table-column prop="" align="center" label="收款人" ></el-table-column>
+					<el-table-column prop="" align="center" label="收款时间" ></el-table-column>
+				</el-table>
+			</div>
+		</el-card>
 		<div class="page-footer">
 			<div class="footer">
 				<el-button v-if="formType == 0 || (formType == 1 && formData.flag == 'SAVE')" size="small" type="primary" @click="save()">保存</el-button>
@@ -236,8 +368,12 @@
 <script>
 	import { getWebsit } from "@/api/customerManagement";
 	import QRCode from "qrcodejs2";
+	import { lbsAmapRegion } from '@/api/common.js'
+	import geographicalPosi from '@/components/geographicalPosi/index.vue'
+	import ImageUpload from '@/components/file-upload'
 	import { getWorker, getCategory, getGoods, getDetail, add, edit, confirm, submit, getCode } from "@/api/auxiliaryFittings/auxiliarySalesOrder";
 	export default {
+		components: {geographicalPosi,ImageUpload},
 		props: ['id','title','formType'],
 		data() {
 			return {
@@ -267,8 +403,29 @@
 					payType: '',
 					remark: '',
 					totalAmount: '',
-					buyPeople: 'WORKER'
+					buyPeople: 'WORKER',
+					saleType: '1',
+					province: '',
+					provinceId: '',
+					city: '',
+					cityId: '',
+					area: '',
+					areaId: '',
+					street: '',
+					streetId: '',
+					address: '',
+					lat: '',
+					lng: '',
+				},
+				formData1: {
+					amount: '',
+					remark: '',
+					fileUrl: []
 				},
+				provinceList: [],
+				cityList: [],
+				areaList: [],
+				streetList: [],
 				isEdit: 0,
 				is_submit: true,
 				timer: '',
@@ -298,7 +455,35 @@
 					workerName: [
 						{ required: true, message: '请输入客户姓名', trigger: 'blur' }
 					],
-				}
+				},
+				rules1: {},
+				pickerOptions: {
+					shortcuts: [{
+						text: '最近一周',
+						onClick(picker) {
+						const end = new Date();
+						const start = new Date();
+						start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+						picker.$emit('pick', [start, end]);
+						}
+					}, {
+						text: '最近一个月',
+						onClick(picker) {
+						const end = new Date();
+						const start = new Date();
+						start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+						picker.$emit('pick', [start, end]);
+						}
+					}, {
+						text: '最近三个月',
+						onClick(picker) {
+						const end = new Date();
+						const start = new Date();
+						start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+						picker.$emit('pick', [start, end]);
+						}
+					}]
+				},
 			};
 		},
 		computed: {},
@@ -306,6 +491,7 @@
 			if(this.id){
 				this.getDetail()
 			}
+			this.getinitlbslist()
 			this.getWebsit()
 		},
 		methods: {
@@ -583,7 +769,86 @@
 						}
 					}
 				})
-			}
+			},
+			changeSale(){
+				
+			},
+			getinitlbslist() {
+			  // 初始化请求省市区街道下拉选项数据
+			  lbsAmapRegion({ pid: 0 }).then(res => {
+			    this.provinceList = res.data
+			    // 创建工单时获取ip地址定位赋值
+			    if (!this.id && this.$IpAdd.province) {
+			      var item = this.provinceList.find(item => item.name === this.$IpAdd.province)
+			      if (item) {
+			        this.formData.provinceId = item.id
+			        this.formData.province = item.name
+			      }
+			    }
+			    if (this.formData.provinceId) {
+			      lbsAmapRegion({ pid: this.formData.provinceId }).then(res => {
+			        this.cityList = res.data
+			        // 创建工单时获取ip地址定位赋值
+			        if (!this.id && this.$IpAdd.city) {
+			          var item2 = this.cityList.find(item => item.name === this.$IpAdd.city)
+			          if (item2) {
+			            this.formData.cityId = item2.id
+			            this.formData.city = item2.name
+			          }
+			        }
+			        if (this.formData.cityId) {
+			          lbsAmapRegion({ pid: this.formData.cityId }).then(res => {
+			            this.areaList = res.data
+			          })
+			        }
+			        if (this.formData.areaId) {
+			          lbsAmapRegion({ pid: this.formData.areaId }).then(res => {
+			            this.streetList = res.data
+			          })
+			        }
+			      })
+			    }
+			  })
+			},
+			selectAddress(data){
+				this.formData.lng = data.center[0]
+				this.formData.lat = data.center[1]
+				// 获取定位的省市区街道
+				var { province, city, district, township } = data.data.addressComponent
+				// 获取选中省名称id
+				var { id, name } = this.provinceList.find(item => item.name === province)
+				this.formData.provinceId = id
+				this.formData.province = name
+				// 请求市选项
+				lbsAmapRegion({ pid: this.formData.provinceId }).then(res => {
+				  // 赋值市选项
+				  this.cityList = res.data
+				  // 获取选中市名称id
+				  var { id, name } = res.data.find(item => item.name === city)
+				  this.formData.cityId = id
+				  this.formData.city = name
+				  // 请求区选项
+				  lbsAmapRegion({ pid: this.formData.cityId }).then(res => {
+				    // 赋值区选项
+				    this.areaList = res.data
+				    // 获取选中区名称id
+				    var { id, name } = res.data.find(item => item.name === district)
+				    this.formData.areaId = id
+				    this.formData.area = name
+				    // 请求街道选项
+				    lbsAmapRegion({ pid: this.formData.areaId }).then(res => {
+				      // 赋值街道选项
+				      this.streetList = res.data
+				      // 获取选中街道名称id
+				      var { id, name } = res.data.find(item => item.name === township)
+				      this.formData.streetId = id
+				      this.formData.street = name
+				      // 赋值GPS详细地址
+				      this.formData.address = data.name
+				    })
+				  })
+				})
+			},
 		}
 	};
 </script>

+ 133 - 86
src/views/userManagement/distributorManagement/index.vue

@@ -1,74 +1,82 @@
 <template>
-  <template-page ref="pageRef" :get-list="getList" :table-attributes="tableAttributes" :table-events="tableEvents" :operationColumnWidth="280"
-    :options-evens-group="optionsEvensGroup" :moreParameters="moreParameters" :column-parsing="columnParsing"
-    :operation="operation()">
-	<!-- :exportList="exportList" -->
-	<div slot="moreSearch">
-	  <el-radio-group v-model="examineStatus" size="mini" @change="changeType">
-	  	<el-radio-button label="">全部</el-radio-button>
-	  	<el-radio-button label="WAIT">待审核</el-radio-button>
-	  	<el-radio-button label="OK">审核通过</el-radio-button>
-	  	<el-radio-button label="FAIL">驳回</el-radio-button>
-	  </el-radio-group>
-	  <br><br>
-	</div>
-    <el-dialog title="" width="800px" custom-class="diy-dialog" append-to-body :modal="true" :visible.sync="formDialog"
-      :show-close="true" :close-on-click-modal="false" :modal-append-to-body="false" :before-close="formCancel">
-      <zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
-        <zj-form-module :title="formDialogTitles[formDialogType]" label-width="100px" :showPackUp="false"
-          :form-data="formData" :form-items="formItems">
-        </zj-form-module>
-      </zj-form-container>
-      <div slot="footer" class="dialog-footer">
-		<el-button v-if="formData.examineStatus == 'WAIT'" size="mini" type="primary" @click="audit('OK')">审核通过</el-button>
-		<el-button v-if="formData.examineStatus == 'WAIT'" size="mini" type="danger" @click="audit('FAIL')">审核驳回</el-button>
-		<el-button size="mini" @click="formCancel">取 消</el-button>
-      </div>
-    </el-dialog>
-	<!-- 入驻网点 -->
-	<el-dialog title="设为工程师" :visible.sync="dialogVisible" @close="websitList = []" width="50%" :close-on-click-modal="false" :modal-append-to-body="false">
-		<el-form ref="workerForm" :model="workerForm" label-width="110px" size="small" label-position="left">
-			<el-row :gutter="20">
-				<el-col :span="24">
-					<el-form-item label="入驻网点" :required="true">
-						<el-select v-model="workerForm.websitId" placeholder="请选择" style="width: 100%;">
-						    <el-option
-						      v-for="item in websitList"
-						      :key="item.websitId"
-						      :label="item.name"
-						      :value="item.websitId">
-						    </el-option>
-						  </el-select>
-					</el-form-item>
-				</el-col>
-				<el-col :span="24">
-					<el-form-item label="姓名" :required="true">
-						<el-input v-model="workerForm.name" placeholder="请输入"></el-input>
-					</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-col :span="24" v-for="(item,index) in imgList" :key="index">
-					<el-form-item :label="item.dictValue" :required="true">
-						<ImageUpload :fileList="item.imgs" :limit="1" :isEdit="true" />
-					</el-form-item>
-				</el-col>
-			</el-row>
-		</el-form>
-		<div slot="footer" class="dialog-footer">
-			<el-button @click="dialogVisible = false">取 消</el-button>
-			<el-button type="primary" @click="memberInner()">确定</el-button>
-		</div>
-	</el-dialog>
-  </template-page>
+	<zj-tab-page ref="tabPage" :defaultActives="[{ key: 'list', label: $route.meta.title + '-列表', essential: true }]">
+	  <template slot-scope="{activeKey, data}">
+			<div :style="{
+				width: '100%',
+				height: activeKey == 'list' ? '100%' : '0px',
+				overflow: 'hidden'
+			}">
+				<template-page ref="pageRef" :get-list="getList" :table-attributes="tableAttributes" :table-events="tableEvents" :operationColumnWidth="280"
+				  :options-evens-group="optionsEvensGroup" :moreParameters="moreParameters" :column-parsing="columnParsing"
+				  :operation="operation()">
+					<!-- :exportList="exportList" -->
+					<div slot="moreSearch">
+					  <el-radio-group v-model="examineStatus" size="mini" @change="changeType">
+					  	<el-radio-button label="">全部</el-radio-button>
+					  	<el-radio-button label="WAIT">待审核</el-radio-button>
+					  	<el-radio-button label="OK">审核通过</el-radio-button>
+					  	<el-radio-button label="FAIL">驳回</el-radio-button>
+					  </el-radio-group>
+					  <br><br>
+					</div>
+				</template-page>
+			</div>
+		  <div v-if="~['examine','detail'].indexOf(activeKey)" style="box-sizing: border-box;padding: 16px;">
+		  	<zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
+		  	<zj-form-module :title="formDialogTitles[formDialogType]" label-width="100px" :showPackUp="false"
+		  		:form-data="formData" :form-items="formItems">
+		  	</zj-form-module>
+		  	</zj-form-container>
+		  	<div slot="footer" class="dialog-footer">
+		  		<el-button v-if="formData.examineStatus == 'WAIT'" size="mini" type="primary" @click="audit('OK', data.removeTab)">审核通过</el-button>
+		  		<el-button v-if="formData.examineStatus == 'WAIT'" size="mini" type="danger" @click="audit('FAIL', data.removeTab)">审核驳回</el-button>
+		  		<el-button size="mini" @click="data.removeTab()">取 消</el-button>
+		  	</div>
+		  </div>
+		  <div v-if="~['worker'].indexOf(activeKey)" style="box-sizing: border-box;padding: 16px;">
+		  	<el-form ref="workerForm" :model="workerForm" label-width="110px" size="small" label-position="left">
+		  		<el-row :gutter="20">
+		  			<el-col :span="8">
+		  				<el-form-item label="入驻网点" :required="true">
+		  					<el-select v-model="workerForm.websitId" placeholder="请选择" style="width: 100%;">
+		  					    <el-option
+		  					      v-for="item in websitList"
+		  					      :key="item.websitId"
+		  					      :label="item.name"
+		  					      :value="item.websitId">
+		  					    </el-option>
+		  					  </el-select>
+		  				</el-form-item>
+		  			</el-col>
+		  			<el-col :span="8">
+		  				<el-form-item label="姓名" :required="true">
+		  					<el-input v-model="workerForm.name" placeholder="请输入"></el-input>
+		  				</el-form-item>
+		  			</el-col>
+		  			<el-col :span="8">
+		  				<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-col :span="24" v-for="(item,index) in imgList" :key="index">
+		  				<el-form-item :label="item.dictValue" :required="true">
+		  					<ImageUpload :fileList="item.imgs" :limit="1" :isEdit="true" />
+		  				</el-form-item>
+		  			</el-col>
+		  		</el-row>
+		  	</el-form>
+		  	<div slot="footer" class="dialog-footer">
+		  		<el-button @click="data.removeTab()">取 消</el-button>
+		  		<el-button type="primary" @click="memberInner(data.removeTab)">确定</el-button>
+		  	</div>
+		  </div>
+	  </template>
+	</zj-tab-page>
 </template>
 
 <script>
@@ -259,17 +267,31 @@ export default {
     selectionChange(data) {
       this.recordSelected = data
     },
+	guanbi() {
+	  this.$refs?.formRef?.$refs?.inlineForm?.clearValidate()
+	  this.$data.formData = this.$options.data().formData
+	},
 	// 表格操作列
 	operation() {
 		return this.operationBtn({
 			detail: {
 				btnType: 'text',
 				click: ({ row, index, column }) => {
-					getMemberDetail({ userId: row.userId }).then(res => {
-					  Object.assign(this.formData, res.data)
-					  this.formDialogType = 1
-					  this.openForm()
+					this.$refs.tabPage.addTab({
+					    activeKey: "detail",
+					    key: "detail",
+					    label: "详情",
+					    triggerEvent: () => {
+					        this.guanbi()
+					        this.$nextTick(() => {
+								getMemberDetail({ userId: row.userId }).then(res => {
+								  Object.assign(this.formData, res.data)
+								  this.formDialogType = 1
+								})
+							})
+						},
 					})
+					
 				}
 			},
 			examine: {
@@ -278,25 +300,48 @@ export default {
 					return row.examineStatus == 'WAIT'
 				},
 				click: ({ row, index, column }) => {
-          this.workerForm.userId = row.userId
-					getMemberDetail({ userId: row.userId }).then(res => {
-					  Object.assign(this.formData, res.data)
-					  this.formDialogType = 0
-					  this.openForm()
+					this.$refs.tabPage.addTab({
+					  activeKey: "examine",
+					  key: "examine",
+					  label: "审核",
+					  triggerEvent: () => {
+					    this.guanbi()
+					    this.$nextTick(() => {
+							this.workerForm.userId = row.userId
+							getMemberDetail({ userId: row.userId }).then(res => {
+								Object.assign(this.formData, res.data)
+								this.formDialogType = 0
+							})
+					    })
+					  },
+					  closeEvent: () => {
+					  }
 					})
 				}
 			},
 			setWorker: {
 				btnType: 'text',
-				prompt: '请确认是否设为工程师?',
+				// prompt: '请确认是否设为工程师?',
 				conditions: ({ row, index, column }) => {
 					return row.examineStatus != 'WAIT'
 				},
 				click: ({ row, index, column }) => {
-					this.workerForm.userId = row.userId
-					getWebsit({type: 'C'}).then(res => {
-						this.websitList = res.data
-						this.dialogVisible = true
+					this.$refs.tabPage.addTab({
+					  activeKey: "worker",
+					  key: "worker",
+					  label: "设为工程师",
+					  triggerEvent: () => {
+					    this.guanbi()
+					    this.$nextTick(() => {
+							this.workerForm.userId = row.userId
+							getWebsit({type: 'C'}).then(res => {
+								this.websitList = res.data
+								this.dialogVisible = true
+							})
+					    })
+					  },
+					  closeEvent: () => {
+					  }
 					})
 				}
 			},
@@ -353,7 +398,7 @@ export default {
       this.$data.formData = this.$options.data().formData
       this.formDialog = false
     },
-	audit(examineStatusEnum){
+	audit(examineStatusEnum, removeTab){
 		memberAudit({ 
 			examineStatusEnum,
 			examineRemark: this.formData.examineRemark,
@@ -362,10 +407,11 @@ export default {
 		}).then(res => {
 			this.$message({ type: 'success', message: '审核成功!' })
 			this.formCancel()
+			removeTab('list')
 			this.$refs.pageRef.refreshList()
 		})
 	},
-	memberInner(){
+	memberInner(removeTab){
 		let workerImgs = []
 		for(var i = 0;i < this.imgList.length;i++){
 			if(this.imgList[i].imgs.length == 0){
@@ -398,6 +444,7 @@ export default {
 			idCardImg: this.fileList.map(item => item.url).join(","),
 			workerImgs
 		}).then(res => {
+			removeTab('list')
 			this.dialogVisible = false
 			this.$message({ type: 'success', message: '设置工程师成功!' })
 			this.$refs.pageRef.refreshList()