Commit c352d425 by 李宁

1

1 parent f9320e1d
......@@ -35,7 +35,7 @@ export function deleteRole(data) {
*/
export function addAndUpdateRole(data) {
return request({
url: '/compass/api/system/account/create' + (data.id?'/update':''),
url: '/compass/api/system/account' + (data.id?'/update':'/create'),
data,
})
}
\ No newline at end of file
......@@ -13,8 +13,13 @@ export function queryAllPerson(data) {
* 添加人员
*/
export function addNewPerson(data) {
let url = '/compass/api/personnel/create'
if(data.id){
url = '/compass/api/personnel/update'
}
return request({
url: '/compass/api/personnel/create',
url: url,
data,
})
}
......
......@@ -30,7 +30,6 @@
type="text"
size="small"
@click="editAccount(scope.row)"
disabled
>
编辑
</el-button>
......@@ -80,7 +79,7 @@
<el-form-item label="密码" prop="password">
<el-input
v-model="accountForm.password"
placeholder="请输入密码"
:placeholder="editingAccount?'******':'请输入密码'"
></el-input>
</el-form-item>
</el-col>
......@@ -213,7 +212,6 @@ export default {
accountName: '',
roleCode: '',
status: '',
grid: '',
contactPhone: '',
email: '',
......@@ -235,7 +233,7 @@ export default {
{ required: true, message: '请输入用户名', trigger: 'blur' }
],
password: [
{ required: true, message: '请输入密码', trigger: 'blur' }
{validator: this.validatePassword,message: '请输入密码', trigger: 'blur' }
],
accountName: [
{ required: true, message: '请输入姓名', trigger: 'blur' }
......@@ -266,6 +264,13 @@ export default {
this.queryRole()
},
methods: {
validatePassword(rule, value, callback) {
if (!this.editingAccount && !value) {
callback(new Error('请输入密码'))
} else {
callback()
}
},
ifRoleCho(key){
let gd = this.getData
......@@ -390,17 +395,14 @@ export default {
},
addAccount(){
let ad = this.accountForm
this.editingAccount = null
ad = {
account: '',
password: '',
accountName: '',
roleCode: '',
status: '',
contactPhone: '',
email: ''
}
ad.account = ''
ad.accountName = ''
ad.roleCode = ''
ad.status = ''
ad.contactPhone = ''
ad.email = ''
ad.password = ''
if(!this.getData.city){
ad.city = ''
ad.county = ''
......@@ -416,12 +418,36 @@ export default {
}
this.isAddDialogOpen = true
this.$refs.accountForm.clearValidate()
},
editAccount(account) {
debugger
this.editingAccount = account
this.accountForm = { ...account }
editAccount(row) {
this.editingAccount = row
let ad = this.accountForm
ad.account = row.account
ad.accountName = row.accountName
ad.roleCode = row.roleCode
ad.status = row.status+''
ad.contactPhone = row.contactPhone
ad.email = row.email
ad.password = row.password
if(row.cityCode){
ad.city = row.cityCode
this.cityChange(ad.city)
if(row.countyCode){
ad.county = row.countyCode
this.countyChange(ad.county)
if(row.gridCode){
ad.grid =row.gridCode
}
}
}
this.isAddDialogOpen = true
this.$refs.accountForm.clearValidate()
},
deleteAccount(id) {
this.$confirm('确定要删除该账号吗?此操作不可撤销。', '确认删除', {
......@@ -476,7 +502,7 @@ export default {
}).then(res=>{
if(res.code == '200'){
let __this = this
this.$alert('添加成功', '温馨提示', {
this.$alert(this.editingAccount?'编辑成功':'添加成功', '温馨提示', {
confirmButtonText: '确定',
callback: () => {
__this.handleFilter()
......
......@@ -96,7 +96,7 @@
<el-table-column prop="phone" label="手机号" width="150"></el-table-column>
<el-table-column prop="personnelTypeName" label="人员类型" width="120"></el-table-column>
<el-table-column prop="areaName" label="所属区域" width="150"></el-table-column>
<el-table-column prop="gridName" label="网格" width="220"></el-table-column>
<el-table-column prop="gridList" :formatter="gridRender" label="网格" width="220"></el-table-column>
<el-table-column prop="relatedMarketingCode" label="关联支撑人员" width="120" ></el-table-column>
<el-table-column label="状态" width="80">
<template slot-scope="scope">
......@@ -111,7 +111,6 @@
<el-button
type="text"
size="small"
disabled
@click="updatePerson(scope.row)"
>
编辑
......@@ -174,38 +173,13 @@
</el-col>
<el-col :span="12">
<el-form-item label="人员类型" prop="personnelType">
<el-select v-model="updatePersonStore.personnelType" @change="personnelTypeChange" style="width: 100%;">
<el-select v-model="updatePersonStore.personnelType" :disabled="!!updatePersonStore.row.id" @change="personnelTypeChange" style="width: 100%;">
<el-option label="装维师傅" value="1"></el-option>
<el-option label="支撑人员" value="2"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<!-- 当选择装维师傅时显示关联支撑人员字段 -->
<el-col :span="12">
<el-form-item label="状态" prop="status">
<el-select v-model="updatePersonStore.status" style="width: 100%;">
<el-option label="启用" value="1"></el-option>
<el-option label="关闭" value="0"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" v-if="updatePersonStore.personnelType == '1'">
<el-form-item label="关联支撑人" prop="relatedMarketingCode">
<el-select v-model="updatePersonStore.relatedMarketingCode" placeholder="请选择支撑人员" style="width: 100%;">
<el-option
v-for="item in yxPersonList"
:key="item.personnelCode"
:label="item.personnelName"
:value="item.personnelCode"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="30">
......@@ -247,6 +221,8 @@
v-model="updatePersonStore.grid"
placeholder="选择网格"
:disabled="getData.grid!=''"
:multiple="gridIsMultiple"
@change="gridChange"
clearable>
<el-option
v-for="item in updatePersonStore.gridArr"
......@@ -259,6 +235,31 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<!-- 当选择装维师傅时显示关联支撑人员字段 -->
<el-col :span="12">
<el-form-item label="状态" prop="status">
<el-select v-model="updatePersonStore.status" style="width: 100%;">
<el-option label="启用" value="1"></el-option>
<el-option label="关闭" value="0"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" v-if="updatePersonStore.personnelType=='1' && updatePersonStore.grid">
<el-form-item label="关联支撑人" prop="relatedMarketingCode">
<el-select v-model="updatePersonStore.relatedMarketingCode" placeholder="请选择支撑人员" style="width: 100%;">
<el-option
v-for="item in yxPersonList"
:key="item.personnelCode"
:label="item.personnelName"
:value="item.personnelCode"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
......@@ -347,12 +348,13 @@ export default {
cityArr: [],
county: '',
countyArr: [],
grid: '',
grid: [],
gridArr: [],
},
yxPersonList:[],
formData:{
personnelCode: '',
phone: '',
personnelTypes: []
},
tableData: [],
......@@ -400,6 +402,7 @@ export default {
isImportDialogOpen: false,
selectedFile: null,
gridIsMultiple: false
}
},
created(){
......@@ -410,9 +413,38 @@ export default {
this.queryArea()
this.handleFilter()
this.queryYxPerson()
},
methods: {
personnelTypeChange(value){
// 重置关联支撑人员
this.updatePersonStore.relatedMarketingCode = ''
// 重置网格选择
if (value === '1') {
// 装维师傅 - 单选
this.updatePersonStore.grid = ''
} else {
// 支撑人员 - 多选
this.updatePersonStore.grid = []
}
setTimeout(()=>{
// 设置网格选择模式
this.gridIsMultiple = value === '2'
},100)
// 如果当前有选中的网格且是装维师傅,查询支撑人员
if (value === '1' && this.updatePersonStore.grid) {
this.queryYxPerson()
}
},
gridRender(row,column){
let arr = row.gridList
if(arr && arr.length>0){
return arr.map(item=>{return item.gridName}).join(',')
}
return ""
},
queryArea(){
this.apiReq.queryLevelAllArea({
areaLevel: 2,
......@@ -426,13 +458,11 @@ export default {
}
})
},
personnelTypeChange(){
this.updatePersonStore.relatedMarketingCode = ''
},
queryYxPerson(){
this.apiReq.queryAllPerson({
pageSize: 20,
pageNum: 1,
gridCode: this.updatePersonStore.grid,
personnelTypes: [2]
}).then(res=>{
if(res.code == 200){
......@@ -447,13 +477,40 @@ export default {
ud.row =row
ud.personnelName = row.personnelName
ud.personnelCode = row.personnelCode
ud.personnelType = row.personnelType + ''
// 设置网格选择模式
this.gridIsMultiple = ud.personnelType === '2'
if(row.personnelType == '1'){
ud.relatedMarketingCode = row.relatedMarketingCode+''
}
if(row.cityCode){
ud.city = row.cityCode
this.cityChange(ud.city,'person')
if(row.countyCode){
ud.county = row.countyCode
this.countyChange(ud.county,'person')
if(row.gridList){
let arr = row.gridList.map(item=>{return item.gridCode})
ud.grid = row.personnelType=='1'?arr.join(''):arr
if(row.personnelType == '1'){
this.queryYxPerson()
}
}
}
}
ud.phone = row.phone
ud.status = row.status
ud.relatedMarketingCode = row.relatedMarketingCode
ud.status = row.status+''
}else{
ud.row = {}
ud.personnelName = ''
ud.personnelCode = ''
ud.personnelType = ''
ud.phone = ''
ud.status = ''
ud.relatedMarketingCode = ''
......@@ -546,6 +603,7 @@ export default {
let ad = type=='person'?this.updatePersonStore:this.addressStore
ad.county = value
ad.grid = ''
ad.gridArr = []
this.apiReq.queryGridList({
areaCode:value
......@@ -559,6 +617,11 @@ export default {
}
})
},
gridChange(value){
if(this.updatePersonStore.personnelType==1 && value){
this.queryYxPerson()
}
},
deletePersonnel(id) {
this.$confirm('确定要删除该人员吗?此操作不可撤销。', '确认删除', {
confirmButtonText: '确定',
......@@ -582,6 +645,7 @@ export default {
if (valid) {
let ud = this.updatePersonStore
this.apiReq.addNewPerson({
id: ud.row?ud.row.id:'',
personnelName: ud.personnelName,
personnelCode: ud.personnelCode,
phone: ud.phone,
......@@ -589,11 +653,11 @@ export default {
status: ud.status,
relatedMarketingCode: ud.relatedMarketingCode,
areaCode: ud.county,
gridCode: ud.grid
gridCodeList: ud.personnelType==1?[ud.grid]:ud.grid
}).then(res=>{
if(res.code == '200'){
let __this = this
this.$alert('添加成功', '温馨提示', {
this.$alert(ud.row?'编辑成功':'添加成功', '温馨提示', {
confirmButtonText: '确定',
callback: () => {
__this.handleFilter()
......
......@@ -68,7 +68,7 @@
alt="中国移动 Logo"
class="login-logo"
>
<h1 class="login-app-title">上门随销商机管理平台</h1>
<h1 class="login-app-title">南通铁通商机管理平台</h1>
</div>
<!-- 登录方式切换 -->
......
......@@ -77,7 +77,7 @@
</div>
</el-card>
<el-card class="detail-card">
<el-card class="detail-card" v-if="opportunity.opportunityType == 1">
<div class="card-header">
<h3>支撑人员信息</h3>
</div>
......@@ -192,6 +192,7 @@
icon="el-icon-edit"
class="action-btn"
@click="assignBusi"
v-if="opportunity.opportunityType==1"
:disabled="opportunity.status!=1 && opportunity.status!=2"
>
分配商机
......@@ -201,7 +202,7 @@
icon="el-icon-s-promotion"
class="action-btn"
@click="dealBusi"
:disabled="opportunity.status!=1 && opportunity.status!=2"
:disabled="(opportunity.status!=1 && opportunity.status!=2) || ifCanOperate"
>
标记成单
</el-button>
......@@ -210,7 +211,7 @@
icon="el-icon-s-check"
class="action-btn"
@click="audioBusi"
:disabled="opportunity.status!=3"
:disabled="(opportunity.status!=3) || ifCanOperate"
>
商机审核
</el-button>
......@@ -219,7 +220,7 @@
icon="el-icon-circle-close"
class="action-btn"
@click="shutBusi"
:disabled="opportunity.status==5 || opportunity.status==4"
:disabled="(opportunity.status==5 || opportunity.status==4) || ifCanOperate"
>
关闭商机
</el-button>
......@@ -262,7 +263,7 @@
type="text"
icon="el-icon-edit-outline"
class="action-btn"
:disabled="opportunity.status==5 || opportunity.status==4"
:disabled="(opportunity.status==5 || opportunity.status==4) || ifCanOperate"
@click="memoStore.isEdit = true"
>
编辑
......@@ -299,12 +300,14 @@
width="500px">
<el-form :model="closeBusiStore" label-width="100px">
<el-form-item label="关闭原因">
<el-input
v-model="closeBusiStore.reason"
type="textarea"
:rows="4"
placeholder="请输入关闭商机原因"
></el-input>
<el-select v-model="closeBusiStore.reason" placeholder="请选择关闭理由">
<el-option
v-for="item in closeBusiStore.reasonsList"
:key="item.closeReason"
:label="item.closeReason"
:value="item.closeReason"
></el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
......@@ -354,7 +357,7 @@
</el-radio-group>
</el-form-item>
<el-form-item v-if="audioBusiStore.result == '0'" label="不通过理由" required>
<el-form-item label="理由" required>
<el-input
v-model="audioBusiStore.reason"
type="textarea"
......@@ -429,7 +432,8 @@ export default {
closeBusiStore:{
isShow: false,
reason: ''
reason: '',
reasonsList: [],
},
yxPersonList: [],
audioBusiStore:{
......@@ -461,9 +465,24 @@ export default {
created() {
this.queryDetail()
this.queryFollow()
this.queryYxPerson()
this.queryCloseList()
},
methods: {
ifCanOperate(){
let ui = JSON.parse(localStorage.getItem('accountInfo'))
return this.opportunity.opportunityType==2&&ui.gridCode
},
queryCloseList(){
this.apiReq.queryBusiCloseReansonList({
pageNum: 1,
pageSize: 1000
}).then(res=>{
if(res.code == 200){
this.closeBusiStore.reasonsList = res.data.records
}
})
},
getAddressShow(value){
if(!value){
return '--'
......@@ -471,11 +490,19 @@ export default {
return value.split(":")[1]
},
queryYxPerson(){
this.apiReq.queryAllPerson({
let param = {
pageSize: 20,
pageNum: 1,
personnelTypes: [2]
}).then(res=>{
}
if(this.opportunity.opportunityType == 1){
param.gridCode = this.opportunity.gridCode
}else{
param.areaCode = this.opportunity.areaCode
}
this.apiReq.queryAllPerson(param).then(res=>{
if(res.code == 200){
this.yxPersonList = res.data.records
}
......@@ -564,6 +591,7 @@ export default {
this.memoStore.value = res.data.adminRemark
this.handleAudio()
this.queryYxPerson()
}else{
this.$alert(res.$message, '温馨提示', {
confirmButtonText: '确定',
......@@ -609,7 +637,7 @@ export default {
audioBusiSubmit(){
let ad = this.audioBusiStore
if(ad.result==0 && !ad.reason){
if(!ad.reason){
this.$message.error('请输入不通过理由')
return
}
......
......@@ -11,7 +11,7 @@ module.exports = {
proxy: {
'/compass': {
target: 'https://testznzl.lgyzpt.com/',
//target: 'https://hall.51xinpai.cn',
//target: 'http://39.107.104.220:8877',
changeOrigin: true,
pathRewrite: {
'^/compass': 'compass'
......
......@@ -199,7 +199,7 @@
<div class="imgList">
<div class="addImg" v-if="gjStore.imgArr.length<3">
<img class="add" src="images/add.png" alt="">
<input type="file" @change="fileChange" accept="image/*" :disabled="gjStore.isLoading">
<input type="file" @change="fileChange" accept="image/*" multiple :disabled="gjStore.isLoading">
</div>
<div class="imgShow" v-for="(item,index) in gjStore.imgArr">
<img class="show" :src="item.url" alt="">
......@@ -249,12 +249,25 @@
<div class="botTs">关闭后将无法再进行任何编辑操作</div>
</div>
</div>
<!-- <div class="outAlertBg">
<div class="imgAlertCon">
<div class="imgDiv">
<img src="https://pic1.arkoo.com/56D0B40F99F841DF8A2425762AE2565D/picture/o_1i4qop009177v1tgf14db15he1iaj1is.jpg" alt="">
</div>
<div class="choButt">
<div class="prev">prev</div>
<div class="next">next</div>
</div>
</div>
</div> -->
</div>
<!-- 引入Vue.js -->
<script src="js/vue.min.js"></script>
<script src="js/axios.min.js"></script>
<script src="js/util.js"></script>
<script src="js/busiDetail.js?123"></script>
<script src="js/busiDetail.js?000"></script>
</body>
</html>
\ No newline at end of file
......@@ -182,6 +182,32 @@ body {
}
/* .imgAlertCon .imgDiv{
width: 6.5rem;
height: 9rem;
margin-bottom: .3rem;
display: flex;
align-items: center;
justify-content: center;
}
.imgAlertCon .imgDiv img{
max-width: 100%;
max-height: 100%;
}
.imgAlertCon .choButt{
width: 100%;
display: flex;
color: #fff;
font-size: .4rem;
justify-content: space-around;
}
.imgAlertCon .choButt div{
background: #0068EE;
padding: .1rem .3rem;
border-radius: .08rem;
} */
/* 通用卡片样式 */
.business-info-section,
.business-detail-section,
......
......@@ -337,17 +337,20 @@ new Vue({
return
}
let file = e.target.files[0]
console.log(file)
if(file.type.includes('image/') <= 0){
util.toast('请上传图片')
return
let files = e.currentTarget.files
if (files.length > 3) {
utils.toast(`最多只能选择3张图片`);
e.value = '';
return false;
}
this.gjStore.imgArr.push({
file: file,
url: URL.createObjectURL(file)
})
for(let key in files){
this.gjStore.imgArr.push({
file: files[key],
url: URL.createObjectURL(files[key])
})
}
},
/**
......
......@@ -8,7 +8,7 @@ new Vue({
loginForm: {
employeeId: '',
phoneNumber: '',
verifyCode: ''
verifyCode: '123456'
},
countdown: 0,
countdownTimer: null,
......@@ -19,16 +19,16 @@ new Vue({
this.platform = type
localStorage.setItem('platform',type)
// if(type == 'gw'){
// this.loginForm.employeeId = '54321'
// this.loginForm.phoneNumber = '15611154004'
// }else if(type == 'yx'){
// this.loginForm.employeeId = '12345'
// this.loginForm.phoneNumber = '13718590607'
// }else{
// this.loginForm.employeeId = '54321'
// this.loginForm.phoneNumber = '13212789513'
// }
if(type == 'gw'){
this.loginForm.employeeId = '54321'
this.loginForm.phoneNumber = '15611154004'
}else if(type == 'yx'){
this.loginForm.employeeId = '12345'
this.loginForm.phoneNumber = '13718590607'
}else{
this.loginForm.employeeId = '54321'
this.loginForm.phoneNumber = '13212789513'
}
},
getVerifyCode() {
let pa = this.loginForm
......
......@@ -48,7 +48,7 @@
<input
class="search-input"
type="text"
placeholder="输入用户账号"
placeholder="输入用户联系方式"
v-model="searchKeyword"
data-node-id="355:510"
>
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!