Commit 74e9e55a authored by Mac's avatar Mac

1

parent 9d30a91a
......@@ -206,6 +206,31 @@ class customerService {
data
})
}
// 保存客户阶段流程
static async setCustomerStageFlowInfo(data: {
Id:number,
FlowName:string,
DeptEmpList:Array<{Id:number,Name:string,Type:number}>,
UseStage:string,
LoseCause:string,
InvalidCause:string,
}): Promise<HttpResponse> {
return Axios('/QYCustomer/SetCustomerStageFlowInfo', {
method: 'post',
responseType: 'json',
data
})
}
// 获取客户阶段流程详情
static async getCustomerStageFlowInfo(data: {
FlowId:number,
}): Promise<HttpResponse> {
return Axios('/QYCustomer/GetCustomerStageFlowInfo', {
method: 'post',
responseType: 'json',
data
})
}
}
export default customerService
......@@ -57,12 +57,12 @@
<q-icon
name="work"
color="primary"
v-if="item.Id.slice(0, 1) == 1"
v-if="item.Id.slice(0, 1) == '1'"
/>
<q-icon
name="person"
color="accent"
v-if="item.Id.slice(0, 1) == 2"
v-if="item.Id.slice(0, 1) == '2'"
/>
<span class="q-ml-sm">{{ item.Name }}</span>
</div>
......@@ -75,7 +75,7 @@
<q-card-actions align="right" class="bg-white text-teal">
<q-btn flat label="取消" v-close-popup />
<q-btn color="primary" v-close-popup label="确定" />
<q-btn color="primary" @click="goback" label="确定" />
</q-card-actions>
</q-card>
</q-dialog>
......@@ -88,7 +88,8 @@ interface parmas {
}
interface SelectParams {
Id: string,
Name: string
Name: string,
Type:number
}
export default {
props: {
......@@ -162,9 +163,11 @@ export default {
if (e.slice(0, 1) == 1) {
const node = tree.value.getNodeByKey(e)
if (node[props.childrenKey] && node[props.childrenKey].length > 0) {
// eslint-disable-next-line vue/no-mutating-props
props.defaultArray.splice(i, 1)
findChild(node[props.childrenKey])
} else {
// eslint-disable-next-line vue/no-mutating-props
props.defaultArray.push(node.DataType + '-' + node.DeptId)
}
}
......@@ -178,10 +181,12 @@ export default {
if (e[props.childrenKey] && e[props.childrenKey].length > 0) {
findChild(e[props.childrenKey])
} else {
// eslint-disable-next-line vue/no-mutating-props
props.defaultArray.push(e.DataType + '-' + e.DeptId)
}
})
}
let showDialog = () => {
initDefault()
getselectArray(props.treeData)
......@@ -191,7 +196,7 @@ export default {
let j = arr[i]
let flag = tree.value.isTicked(j[props.nodeKey])
if (flag == true) {
selectArray.value.push({ Id: j[props.nodeKey], Name: j.DeptName })
selectArray.value.push({ Id: j[props.nodeKey], Name: j.DeptName ,Type: j.DataType})
} else {
if (j[props.childrenKey] && j[props.childrenKey].length > 0) {
getselectArray(j[props.childrenKey])
......@@ -244,6 +249,10 @@ export default {
watch(() => [...selectArray.value], (val) => {
ctx.emit('select', [...val])
}, { deep: true })
let goback =()=>{
ctx.emit('select_t', selectArray.value)
// eslint-disable-next-line vue/no-mutating-props
}
return {
myFilterMethod,
filter,
......@@ -257,7 +266,8 @@ export default {
selectArray,
delItemArray,
delItemitem,
showDialog
showDialog,
goback
}
}
......
......@@ -2,11 +2,28 @@
<div class="customerPhase page-body">
<div style="display: flex;align-items: center;justify-content: space-between;">
<div style="display: flex;align-items: center;">
<q-btn v-if="state.data.length<20" color="accent" style="margin-bottom: 10px;" class="q-mr-md" label="创建阶段流程" @click="jumpPage('/editor/createStageRange')" size="sm"></q-btn>
<span style="margin-left: 20px;color: rgb(133, 133, 152);">已添加:{{state.data.length}}/20</span>
<q-btn
v-if="state.data.length < 20"
color="accent"
style="margin-bottom: 10px;"
class="q-mr-md"
label="创建阶段流程"
@click="jumpPage('/editor/createStageRange')"
size="sm"
></q-btn>
<span
style="margin-left: 20px;color: rgb(133, 133, 152);"
>已添加:{{ state.data.length }}/20</span>
</div>
<q-btn color="white" text-color="black" style="margin-bottom: 10px;" class="q-mr-md" label="阶段管理" size="sm"
@click="jumpPage('/editor/manageStageRange')"></q-btn>
<q-btn
color="white"
text-color="black"
style="margin-bottom: 10px;"
class="q-mr-md"
label="阶段管理"
size="sm"
@click="jumpPage('/editor/manageStageRange')"
></q-btn>
</div>
<table class="payTable">
<thead>
......@@ -19,65 +36,102 @@
<th width="12%">操作</th>
</tr>
</thead>
<tr v-if="state.data.length==0">
<tr v-if="state.data.length == 0">
<td :colspan="6" align="center">暂无数据</td>
</tr>
<tr v-for="(item,index) in state.data" :key="index">
<td><span>{{item.FlowName}}</span></td>
<td>
<div v-if='item.DeptEmpList && item.DeptEmpList.length>0' >
<span v-for="(x,y) in item.DeptEmpList" :key='y'>
<q-chip color="blue-1" text-color="blue" icon="folder" size="sm" v-if="x.Type==1">
{{x.Name}}
</q-chip>
<q-chip color="green-1" text-color="green" icon="person" size="sm" v-if="x.Type==2">
{{x.Name}}
</q-chip>
<span>{{ item.FlowName }}</span>
</td>
<td>
<div v-if="item.DeptEmpList && item.DeptEmpList.length > 0">
<span v-for="(x,y) in item.DeptEmpList" :key="y">
<q-chip
color="blue-1"
text-color="blue"
icon="folder"
size="sm"
v-if="x.Type == 1"
>{{ x.Name }}</q-chip>
<q-chip
color="green-1"
text-color="green"
icon="person"
size="sm"
v-if="x.Type == 2"
>{{ x.Name }}</q-chip>
</span>
</div>
<span v-else>未适配其他规则的阶段</span>
</td>
<td>
<q-toggle v-if="item.IsDefault==1" v-model="item.Enable" :true-value="1" :false-value="2"
icon="lock" disable />
<q-toggle v-else v-model="item.Enable" :true-value="1" :false-value="2"
@update:model-value="setFiledState(item.Id,1)" />
<q-toggle
v-if="item.IsDefault == 1"
v-model="item.Enable"
:true-value="1"
:false-value="2"
icon="lock"
disable
/>
<q-toggle
v-else
v-model="item.Enable"
:true-value="1"
:false-value="2"
@update:model-value="setFiledState(item.Id, 1)"
/>
</td>
<td>
<span v-for="(x,y) in item.StageList" :key='y'>
{{x}}{{item.StageList.length!=y+1?'->':''}}
</span>
<span
v-for="(x,y) in item.StageList"
:key="y"
>{{ x }}{{ item.StageList.length != y + 1 ? '->' : '' }}</span>
</td>
<td>
<div>{{item.UpdateByName}}</div>
<div>{{item.UpdateTime}}</div>
<div>{{ item.UpdateByName }}</div>
<div>{{ item.UpdateTime }}</div>
</td>
<td>
<q-btn v-if='item.IsDefault!=1' flat size="xs" icon="edit" style="font-weight:400;color: #3FC4FF" class="q-mr-xs"
label="编辑" @click="goedit(item)" />
<q-btn v-if='item.IsDefault!=1' flat size="xs" icon="delete" color="negative" class="q-mr-xs"
label="删除" @click="godelete(item.Id)" />
<q-btn
v-if="item.IsDefault != 1"
flat
size="xs"
icon="edit"
style="font-weight:400;color: #3FC4FF"
class="q-mr-xs"
label="编辑"
@click="goedit(item.Id)"
/>
<q-btn
v-if="item.IsDefault != 1"
flat
size="xs"
icon="delete"
color="negative"
class="q-mr-xs"
label="删除"
@click="godelete(item.Id)"
/>
</td>
</tr>
</table>
</div>
</template>
<script lang="ts">
import { defineComponent, onMounted,reactive } from 'vue'
import customerService from '@/api/customer'
import { useQuasar } from 'quasar'
import router from '@/router/index'
import { defineComponent, onMounted, reactive } from 'vue'
import customerService from '@/api/customer'
import { useQuasar } from 'quasar'
import router from '@/router/index'
export default defineComponent({
setup(){
export default defineComponent({
setup() {
const $q = useQuasar()
const state = reactive({
data:[],
data: [],
})
const getList = () =>{
customerService.getCustomerStageFlowList({Enable:0}).then((res) => {
const getList = () => {
customerService.getCustomerStageFlowList({ Enable: 0 }).then((res) => {
if (res.data.Code == 1) {
state.data = res.data.Data
} else {//如果移动失败 重新获取列表
......@@ -85,7 +139,7 @@
}
})
}
const godelete = (Id:number)=>{
const godelete = (Id: number) => {
$q.dialog({
title: "提示信息",
message: '是否删除该阶段流程',
......@@ -98,11 +152,11 @@
flat: true,
}
}).onOk(() => {
setFiledState(Id,2)
setFiledState(Id, 2)
});
}
const setFiledState = (Id:number,Type:number) =>{
console.log(Id,Type)
const setFiledState = (Id: number, Type: number) => {
console.log(Id, Type)
let msg = {
Type: Type,
FlowId: Id,
......@@ -122,54 +176,64 @@
}
})
}
const jumpPage=(url:string)=>{
const jumpPage = (url: string) => {
router.push({
path:url,
query:{
path: url,
query: {
}
})
}
const goedit = (Id: number) => {
router.push({
path: '/editor/createStageRange',
query: {
FlowId:Id
}
})
}
onMounted(() => {
getList()
})
return{
return {
getList,
state,
setFiledState,
godelete,
jumpPage
jumpPage,
goedit
}
}
})
})
</script>
<style>
.customerPhase .payTable {
.customerPhase .payTable {
width: 100%;
border-collapse: collapse;
}
}
.customerPhase .payTable tr th {
.customerPhase .payTable tr th {
background: #fff;
height: 40px;
font-size: 12px;
font-weight: bold;
color: #2D2D2D;
color: #2d2d2d;
background: #f5f5fa;
}
}
.customerPhase .payTable tr {
.customerPhase .payTable tr {
background: #fff;
text-align: center;
height: 40px;
}
}
.customerPhase .payTable tr td {
.customerPhase .payTable tr td {
font-size: 13px;
text-align: center;
color: #2D2D2D;
color: #2d2d2d;
padding: 10px 0;
font-weight: bold;
border-bottom: 1px solid #E5E5E5;
}
border-bottom: 1px solid #e5e5e5;
}
</style>
\ No newline at end of file
......@@ -26,6 +26,27 @@
<div class="bold">阶段适用范围</div>
<q-btn color="accent" label="选择部门/成员" @click="choicemember" />
<div
class="user_lists"
v-if="state.addMsg.DeptEmpList && state.addMsg.DeptEmpList.length > 0"
>
<div v-for="(x,y) in state.addMsg.DeptEmpList" :key="y">
<q-chip
color="primary"
v-if="x.Id.slice(0, 1) == '1'"
text-color="white"
icon="work"
:label="x.Name"
></q-chip>
<q-chip
color="primary"
v-if="x.Id.slice(0, 1) == '2'"
text-color="white"
icon="person"
:label="x.Name"
></q-chip>
</div>
</div>
</div>
<div class="content-block">
<div class="bold">
......@@ -53,7 +74,7 @@
</div>
</div>
<div class="right-arrow">
<i class="el-icon-arrow-right"></i>
<i class="arrow_forward_ios"></i>
</div>
<div class="all-stage" :style="{ height: state.getheight + 'px' }">
<p class="select-item-title">已选阶段</p>
......@@ -132,6 +153,7 @@
childrenKey="ChildList"
strategy="leaf"
:treeData="state.dataTree"
@select_t="getdpt"
/>
</div>
</template>
......@@ -143,6 +165,7 @@ import departmentStaff from '@/components/common/departmentStaff.vue'
import customerService2 from '@/api/customer2'
import { useQuasar } from 'quasar'
import { xorWith } from 'lodash'
export default defineComponent({
......@@ -168,6 +191,7 @@ export default defineComponent({
showDialog: false,
defaultArray: [],
dataTree: [],
FlowId: 0,//编辑上个页面带过来的
})
const jumpBeforePage = () => {
router.push({
......@@ -233,11 +257,65 @@ export default defineComponent({
})
}
const savemove = () => {
let data = JSON.parse(JSON.stringify(state.addMsg))
if (data.FlowName == '') {
$q.notify({
type: 'negative',
message: '请填写名称',
position: 'top'
})
return
}
if (data.DeptEmpList.length == 0) {//判断部门
$q.notify({
type: 'negative',
message: '不能删除',
message: '请选择阶段适用范围',
position: 'top'
})
return
} else {
data.DeptEmpList = [];
if (state.addMsg.DeptEmpList && state.addMsg.DeptEmpList.length > 0) {
state.addMsg.DeptEmpList.forEach(x => {
let obj = {
Id: x.Id.split('-')[1],
Name: x.Name,
Type: x.Type,
}
data.DeptEmpList.push(obj)
})
}
}
if (data.UseStage.length > 0) {
data.UseStage = data.UseStage.join(',')
} else {
data.UseStage = ''
}
if (data.LoseCause.length > 0) {
data.LoseCause = data.LoseCause.join(',')
} else {
data.LoseCause = ''
}
if (data.InvalidCause.length > 0) {
data.InvalidCause = data.InvalidCause.join(',')
} else {
data.InvalidCause = ''
}
customerService.setCustomerStageFlowInfo(data).then(res => {
if (res.data.Code == 1) {
$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: res.data.Message,
position: 'top'
})
jumpBeforePage()
}
})
}
let choicemember = () => {
state.showDialog = true
......@@ -264,9 +342,44 @@ export default defineComponent({
}
})
}
let getdpt = (val) => {
state.addMsg.DeptEmpList = val
state.showDialog = false
}
let getdetails = (Id: number) => {
customerService.getCustomerStageFlowInfo({ FlowId: Id }).then(res => {
if (res.data.Code == 1) {
state.addMsg = res.data.Data
if (state.addMsg.UseStage.length != '') {
state.addMsg.UseStage = state.addMsg.UseStage.split(',').map(Number)
} else {
state.addMsg.UseStage = []
}
if (state.addMsg.LoseCause.length != '') {
state.addMsg.LoseCause = state.addMsg.LoseCause.split(',').map(Number)
} else {
state.addMsg.LoseCause = []
}
if (state.addMsg.InvalidCause.length != '') {
state.addMsg.InvalidCause = state.addMsg.InvalidCause.split(',').map(Number)
} else {
state.addMsg.InvalidCause = []
}
state.defaultArray= []
state.addMsg.DeptEmpList.forEach(x => {
x.Id = x.Id+'-'+x.Type
state.defaultArray.push(x.Id+'-'+x.Type)
})
}
})
}
onMounted(() => {
getList()
getEmployeeData()
if (router.currentRoute.value.query && router.currentRoute.value.query.FlowId) {
state.FlowId = router.currentRoute.value.query.FlowId as string
getdetails(state.FlowId)
}
})
return {
state,
......@@ -278,7 +391,9 @@ export default defineComponent({
savemove,
choicemember,
getEmployeeData,
getChildList
getChildList,
getdpt,
getdetails
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment