pull/2/head
qsh 3 months ago
parent 1be86c7699
commit db22a8ae8a
  1. 18
      src/api/clue/sign.js
  2. 6
      src/components/SSTable/index.vue
  3. 221
      src/views/Clue/Order/Comp/MallOrderList.vue
  4. 63
      src/views/Clue/Order/Comp/MallSettle.vue
  5. 56
      src/views/Clue/Order/Comp/SchoolSettle.vue
  6. 40
      src/views/Clue/Pool/Comp/DialogSuccess.vue
  7. 2
      src/views/Clue/Pool/index.vue
  8. 5
      src/views/SchoolManagement/Class/Comp/DialogClass.vue
  9. 11
      src/views/SchoolManagement/Class/index.vue

@ -29,3 +29,21 @@ export const signAddPay = async (data) => {
export const getSignExtraPayList = async (params) => { export const getSignExtraPayList = async (params) => {
return await request.get({ url: '/admin-api/crm/sign/extra-pay/get', params }) return await request.get({ url: '/admin-api/crm/sign/extra-pay/get', params })
} }
// 安装状态修改
export const updateInstallStatus = (signIdList, installStatus) => {
const data = {
signIdList,
installStatus
}
return request.post({ url: '/admin-api/crm/sign/install-status/batchSave', data: data })
}
// 修改生产状态
export const updateProduceStatus = (data) => {
return request.put({ url: '/admin-api/crm/sign-prodcut/update', data: data })
}
export const updateProduceSort = (data) => {
return request.post({ url: '/admin-api/crm/sign-prodcut/adjust/sort', data: data })
}

@ -3,6 +3,8 @@
<div class="flex"> <div class="flex">
<el-table <el-table
:data="tableObject.tableList" :data="tableObject.tableList"
:row-key="rowkey"
:expand-row-keys="expandRowKeys"
border border
style="flex: 1" style="flex: 1"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
@ -58,7 +60,9 @@ import { useRoute } from 'vue-router'
const props = defineProps({ const props = defineProps({
tableObject: { type: Object, default: () => ({ tableList: [] }) }, tableObject: { type: Object, default: () => ({ tableList: [] }) },
tableColumns: { type: Array, default: () => [] } tableColumns: { type: Array, default: () => [] },
rowkey: { type: String, default: 'id' },
expandRowKeys: { type: Array, default: () => [] }
}) })
const emit = defineEmits(['update:tableObject', 'getList', 'getCheckedColumns', 'selection-change']) const emit = defineEmits(['update:tableObject', 'getList', 'getCheckedColumns', 'selection-change'])

@ -52,6 +52,13 @@
<template #actionMore> <template #actionMore>
<el-button @click="getTableList" v-hasPermi="['clue:order:search']"> 搜索 </el-button> <el-button @click="getTableList" v-hasPermi="['clue:order:search']"> 搜索 </el-button>
<el-button @click="resetQuery" v-hasPermi="['clue:order:reset']"> 重置 </el-button> <el-button @click="resetQuery" v-hasPermi="['clue:order:reset']"> 重置 </el-button>
<el-button
type="primary"
@click="handleBatchUpdateInstall"
v-hasPermi="['clue:order:reset']"
>
批量修改安装状态
</el-button>
</template> </template>
</Search> </Search>
</div> </div>
@ -61,58 +68,88 @@
class="mt-10px" class="mt-10px"
v-model:tableObject="tableObject" v-model:tableObject="tableObject"
:tableColumns="allSchemas.tableColumns" :tableColumns="allSchemas.tableColumns"
rowkey="signId"
:expandRowKeys="expendRows"
@get-list="getTableList" @get-list="getTableList"
@get-checked-columns="getCheckedColumns" @get-checked-columns="getCheckedColumns"
@selection-change="handleSelectionChange"
> >
<el-table-column type="selection" width="60" />
<el-table-column type="expand"> <el-table-column type="expand">
<template #default="{ row }"> <template #default="{ row }">
<div class="p-10px flex justify-center"> <div class="p-10px flex justify-center">
<el-table :data="row.signProducts" stripe style="width: 900px"> <VueDraggable
<el-table-column prop="productName" label="成交产品" /> target="tbody"
<el-table-column prop="specsName" label="产品规格" width="100px" /> v-model="row.signProducts"
<el-table-column prop="signNum" label="成交数量" width="90px" /> :animation="150"
<el-table-column prop="remark" label="成交备注" /> @end="onDragEnd"
<el-table-column label="发货状态" prop="sendState" width="90px"> style="width: 100%"
<template #default="scope"> >
<el-tag <el-table
:type="scope.row.sendState == '待发货' ? 'danger' : 'success'" :data="row.signProducts"
size="small" row-key="id"
> stripe
{{ scope.row.sendState }} style="width: 80%; margin: 0 auto"
</el-tag> >
</template> <el-table-column prop="productName" label="成交产品" />
</el-table-column> <el-table-column prop="specsName" label="产品规格" />
<el-table-column label="发货备注" width="100px"> <el-table-column prop="signNum" label="成交数量" width="90px" />
<template #default="scope"> <el-table-column prop="remark" label="成交备注" width="100px" />
<el-popover <el-table-column label="生产状态" width="160px">
placement="top" <template #default="scope">
width="500px" <el-switch
trigger="click" v-model="scope.row.isProduced"
v-if="scope.row.warehouseName && scope.row.sendRemark" :active-value="true"
> :inactive-value="false"
<template #reference> active-text="已生产"
<el-button type="primary" style="padding: 0" text>点击查看</el-button> inactive-text="待生产"
</template> size="small"
<div v-dompurify-html="scope.row.sendRemark"></div> @change="handleChangeProdoce(scope.row)"
</el-popover> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="100px"> <el-table-column label="发货状态" prop="sendState" width="90px">
<template #default="scope"> <template #default="scope">
<el-button <el-tag
type="primary" :type="scope.row.sendState == '待发货' ? 'danger' : 'success'"
class="mr-10px" size="small"
link >
:disabled="scope.row.sendState == '已发货'" {{ scope.row.sendState }}
style="padding: 0; margin-left: 0" </el-tag>
v-hasPermi="['clue:order:send']" </template>
@click="handleDelivery(scope.row)" </el-table-column>
> <el-table-column label="发货备注" width="100px">
发货 <template #default="scope">
</el-button> <el-popover
</template> placement="top"
</el-table-column> width="500px"
</el-table> trigger="click"
v-if="scope.row.warehouseName && scope.row.sendRemark"
>
<template #reference>
<el-button type="primary" style="padding: 0" text>点击查看</el-button>
</template>
<div v-dompurify-html="scope.row.sendRemark"></div>
</el-popover>
</template>
</el-table-column>
<el-table-column label="操作" width="100px">
<template #default="scope">
<el-button
type="primary"
class="mr-10px"
link
:disabled="scope.row.sendState == '已发货'"
style="padding: 0; margin-left: 0"
v-hasPermi="['clue:order:send']"
@click="handleDelivery(scope.row)"
>
发货
</el-button>
</template>
</el-table-column>
</el-table>
</VueDraggable>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@ -217,6 +254,8 @@ import DialogDelivery from './DialogDelivery.vue'
import { removeNullField } from '@/utils' import { removeNullField } from '@/utils'
import { formatDate } from '@/utils/formatTime' import { formatDate } from '@/utils/formatTime'
import { ElMessageBox, ElOption, ElSelect } from 'element-plus'
import { VueDraggable } from 'vue-draggable-plus'
const userOptions = ref([]) const userOptions = ref([])
const allUserOptions = ref([]) const allUserOptions = ref([])
@ -362,6 +401,96 @@ const deliveryDialog = ref()
function handleDelivery(row) { function handleDelivery(row) {
deliveryDialog.value.open(row) deliveryDialog.value.open(row)
} }
const batchIds = ref([])
function handleSelectionChange(val) {
batchIds.value = val.map((it) => it.signId)
}
const selectedValue = ref(undefined)
const installOptions = [
{ label: '待安装', value: 1 },
{ label: '已安装', value: 2 },
{ label: '无需安装', value: 3 }
]
const select = () =>
h(
ElSelect,
{
modelValue: selectedValue.value,
placeholder: '新状态',
'onUpdate:modelValue': (val) => {
selectedValue.value = val
}
},
() =>
installOptions.map((item) => {
return h(ElOption, { label: item.label, value: item.value })
})
)
function handleBatchUpdateInstall() {
if (batchIds.value.length) {
ElMessageBox({
title: '是否确认修改安装状态?',
message: select,
showCancelButton: true,
confirmButtonText: '确定',
cancelButtonText: '取消'
}).then(async (action) => {
//
if (action == 'confirm') {
try {
//
await SignApi.updateInstallStatus(batchIds.value, selectedValue.value)
message.success('修改成功')
//
await getTableList()
} catch (err) {
//
console.log(err)
}
}
})
} else {
message.info('请选择表格行')
}
}
async function handleChangeProdoce(row) {
try {
//
await message.confirm('确认要修改生产状态吗?')
//
await SignApi.updateProduceStatus({
signId: row.signId,
id: row.id,
isProduced: row.isProduced
})
message.success('修改成功')
//
getTableList()
} catch {
//
row.isProduced = !row.isProduced
}
}
const expendRows = ref([])
async function onDragEnd(ev) {
try {
expendRows.value = [ev.data.signId]
const list = tableObject.value.tableList.find((it) => it.signId == ev.data.signId).signProducts
await SignApi.updateProduceSort(list.map((it) => it.id))
message.success('修改成功')
//
getTableList()
} catch (error) {
console.log(error)
getTableList()
}
}
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>

@ -2,22 +2,44 @@
<div> <div>
<el-form :model="searchForm" label-width="0" inline> <el-form :model="searchForm" label-width="0" inline>
<el-form-item> <el-form-item>
<el-input v-model="searchForm.signId" placeholder="成交单号" clearable /> <el-input
v-model="searchForm.signId"
placeholder="成交单号"
clearable
style="width: 120px"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-input v-model="searchForm.name" placeholder="线索名称" clearable /> <el-input v-model="searchForm.name" placeholder="线索名称" clearable style="width: 120px" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-input v-model="searchForm.phone" placeholder="联系方式" clearable /> <el-input
v-model="searchForm.phone"
placeholder="联系方式"
clearable
style="width: 120px"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-select v-model="searchForm.settlementType" placeholder="结算类型" clearable filterable> <el-select
v-model="searchForm.settlementType"
placeholder="结算类型"
clearable
filterable
style="width: 120px"
>
<el-option label="货款" value="货款" /> <el-option label="货款" value="货款" />
<el-option label="其他支出" value="其他支出" /> <el-option label="其他支出" value="其他支出" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-select v-model="searchForm.signUser" placeholder="登记人" clearable filterable> <el-select
v-model="searchForm.signUser"
placeholder="登记人"
clearable
filterable
style="width: 120px"
>
<el-option <el-option
v-for="item in userOptions" v-for="item in userOptions"
:key="item.id" :key="item.id"
@ -35,6 +57,19 @@
range-separator="-" range-separator="-"
start-placeholder="成交日期" start-placeholder="成交日期"
end-placeholder="成交日期" end-placeholder="成交日期"
style="width: 240px"
/>
</el-form-item>
<el-form-item>
<el-date-picker
v-model="searchForm.createDate"
type="daterange"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
range-separator="-"
start-placeholder="支出日期"
end-placeholder="支出日期"
style="width: 240px"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -44,6 +79,7 @@
filterable filterable
clearable clearable
@change="searchForm.signSpecs = undefined" @change="searchForm.signSpecs = undefined"
style="width: 150px"
> >
<el-option <el-option
v-for="item in prodOptions" v-for="item in prodOptions"
@ -60,6 +96,7 @@
filterable filterable
clearable clearable
:disabled="!searchForm.signProduct" :disabled="!searchForm.signProduct"
style="width: 120px"
> >
<el-option <el-option
v-for="item in specsOptions(searchForm.signProduct)" v-for="item in specsOptions(searchForm.signProduct)"
@ -70,7 +107,13 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-select v-model="searchForm.supplier" placeholder="选择供应商" filterable clearable> <el-select
v-model="searchForm.supplier"
placeholder="选择供应商"
filterable
clearable
style="width: 120px"
>
<el-option <el-option
v-for="item in supplierOptions" v-for="item in supplierOptions"
:key="item.value" :key="item.value"
@ -114,6 +157,12 @@
<el-table-column prop="phone" label="联系方式" width="120px" /> <el-table-column prop="phone" label="联系方式" width="120px" />
<el-table-column prop="signUserName" label="登记人" min-width="90" /> <el-table-column prop="signUserName" label="登记人" min-width="90" />
<el-table-column prop="dealDate" label="成交日期" width="120px" :formatter="dateFormatter" /> <el-table-column prop="dealDate" label="成交日期" width="120px" :formatter="dateFormatter" />
<el-table-column
prop="createTime"
label="支出日期"
width="120px"
:formatter="dateFormatter"
/>
<el-table-column prop="signProduct" label="成交产品" min-width="150px" /> <el-table-column prop="signProduct" label="成交产品" min-width="150px" />
<el-table-column prop="signSpecs" label="成交规格" min-width="150px" /> <el-table-column prop="signSpecs" label="成交规格" min-width="150px" />
<el-table-column prop="supplier" label="供应商" min-width="150px" /> <el-table-column prop="supplier" label="供应商" min-width="150px" />
@ -199,6 +248,7 @@ const searchForm = ref({
phone: undefined, phone: undefined,
signUser: undefined, signUser: undefined,
dealDate: [], dealDate: [],
createDate: [],
signProduct: undefined, signProduct: undefined,
signSpecs: undefined, signSpecs: undefined,
signId: undefined, signId: undefined,
@ -215,6 +265,7 @@ function handleReset() {
phone: undefined, phone: undefined,
signUser: undefined, signUser: undefined,
dealDate: [], dealDate: [],
createDate: [],
signProduct: undefined, signProduct: undefined,
signSpecs: undefined, signSpecs: undefined,
signId: undefined, signId: undefined,

@ -2,22 +2,44 @@
<div> <div>
<el-form :model="searchForm" label-width="0" inline> <el-form :model="searchForm" label-width="0" inline>
<el-form-item> <el-form-item>
<el-input v-model="searchForm.signId" placeholder="成交单号" clearable /> <el-input
v-model="searchForm.signId"
placeholder="成交单号"
clearable
style="width: 120px"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-input v-model="searchForm.name" placeholder="线索名称" clearable /> <el-input v-model="searchForm.name" placeholder="线索名称" clearable style="width: 120px" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-input v-model="searchForm.phone" placeholder="联系方式" clearable /> <el-input
v-model="searchForm.phone"
placeholder="联系方式"
clearable
style="width: 120px"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-select v-model="searchForm.settlementType" placeholder="结算类型" clearable filterable> <el-select
v-model="searchForm.settlementType"
placeholder="结算类型"
clearable
filterable
style="width: 120px"
>
<el-option label="报名费" value="报名费" /> <el-option label="报名费" value="报名费" />
<el-option label="其他支出" value="其他支出" /> <el-option label="其他支出" value="其他支出" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-select v-model="searchForm.signUser" placeholder="登记人" clearable filterable> <el-select
v-model="searchForm.signUser"
placeholder="登记人"
clearable
filterable
style="width: 120px"
>
<el-option <el-option
v-for="item in userOptions" v-for="item in userOptions"
:key="item.id" :key="item.id"
@ -35,6 +57,19 @@
range-separator="-" range-separator="-"
start-placeholder="成交日期" start-placeholder="成交日期"
end-placeholder="成交日期" end-placeholder="成交日期"
style="width: 240px"
/>
</el-form-item>
<el-form-item>
<el-date-picker
v-model="searchForm.createDate"
type="daterange"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
range-separator="-"
start-placeholder="支出日期"
end-placeholder="支出日期"
style="width: 240px"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -44,6 +79,7 @@
filterable filterable
clearable clearable
@change="changeSchool" @change="changeSchool"
style="width: 120px"
> >
<el-option <el-option
v-for="item in schoolOptions" v-for="item in schoolOptions"
@ -61,6 +97,7 @@
clearable clearable
:disabled="!searchForm.signSchool" :disabled="!searchForm.signSchool"
@change="changePlace" @change="changePlace"
style="width: 120px"
> >
<el-option <el-option
v-for="item in placeOptions" v-for="item in placeOptions"
@ -77,6 +114,7 @@
placeholder="选择班型" placeholder="选择班型"
filterable filterable
clearable clearable
style="width: 120px"
> >
<el-option <el-option
v-for="item in classOptions" v-for="item in classOptions"
@ -120,6 +158,12 @@
<el-table-column prop="phone" label="联系方式" width="120px" /> <el-table-column prop="phone" label="联系方式" width="120px" />
<el-table-column prop="signUserName" label="登记人" min-width="90" /> <el-table-column prop="signUserName" label="登记人" min-width="90" />
<el-table-column prop="dealDate" label="成交日期" width="120px" :formatter="dateFormatter" /> <el-table-column prop="dealDate" label="成交日期" width="120px" :formatter="dateFormatter" />
<el-table-column
prop="createTime"
label="支出日期"
width="120px"
:formatter="dateFormatter"
/>
<el-table-column prop="signSchool" label="成交驾校" min-width="150px" /> <el-table-column prop="signSchool" label="成交驾校" min-width="150px" />
<el-table-column prop="signPlace" label="成交场地" min-width="150px" /> <el-table-column prop="signPlace" label="成交场地" min-width="150px" />
<el-table-column prop="signClass" label="成交班型" min-width="150px" /> <el-table-column prop="signClass" label="成交班型" min-width="150px" />
@ -206,6 +250,7 @@ const searchForm = ref({
phone: undefined, phone: undefined,
signUser: undefined, signUser: undefined,
dealDate: [], dealDate: [],
createDate: [],
signSchool: undefined, signSchool: undefined,
signPlace: undefined, signPlace: undefined,
signClass: undefined, signClass: undefined,
@ -222,6 +267,7 @@ function handleReset() {
phone: undefined, phone: undefined,
signUser: undefined, signUser: undefined,
dealDate: [], dealDate: [],
createDate: [],
signSchool: undefined, signSchool: undefined,
signPlace: undefined, signPlace: undefined,
signClass: undefined, signClass: undefined,

@ -118,18 +118,31 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8" :offset="0" v-if="appStore.getAppInfo?.instanceType == 1"> <template v-if="appStore.getAppInfo?.instanceType == 1">
<el-form-item label="接待人" prop="receiver"> <el-col :span="8" :offset="0">
<el-select v-model="form.receiver" placeholder="选择接待人" clearable filterable> <el-form-item label="接待人" prop="receiver">
<el-option <el-select v-model="form.receiver" placeholder="选择接待人" clearable filterable>
v-for="item in allUserOptions" <el-option
:key="item.id" v-for="item in allUserOptions"
:label="item.nickname" :key="item.id"
:value="item.id" :label="item.nickname"
/> :value="item.id"
</el-select> />
</el-form-item> </el-select>
</el-col> </el-form-item>
</el-col>
</template>
<template v-else>
<el-col :span="8" :offset="0">
<el-form-item label="安装状态" prop="installStatus">
<el-select v-model="form.installStatus">
<el-option label="待安装" :value="1" />
<el-option label="已安装" :value="2" />
<el-option label="无需安装" :value="3" />
</el-select>
</el-form-item>
</el-col>
</template>
<el-col <el-col
:span="fieldItem.component == 'Editor' ? 24 : 8" :span="fieldItem.component == 'Editor' ? 24 : 8"
:offset="0" :offset="0"
@ -462,7 +475,8 @@ async function resetForm(id) {
isCompanyReceipts: data.configValue == 'true', isCompanyReceipts: data.configValue == 'true',
receiver: undefined, receiver: undefined,
extraPay: [], extraPay: [],
signProducts: [] signProducts: [],
installStatus: 3
} }
} }

@ -14,7 +14,7 @@
</el-tab-pane> </el-tab-pane>
<el-tab-pane name="2"> <el-tab-pane name="2">
<template #label> <template #label>
<Tooltip message="下次跟进时间在今日之前的未成交线索" /> <Tooltip message="下次跟进时间在今日之前的未成交线索" />
<el-badge v-if="clueCount.followNum" :value="clueCount.followNum" :max="9999"> <el-badge v-if="clueCount.followNum" :value="clueCount.followNum" :max="9999">
<span class="ml-3px">待跟进</span> <span class="ml-3px">待跟进</span>
</el-badge> </el-badge>

@ -474,12 +474,15 @@ const opts = ref({
}) })
/** 打开弹窗 */ /** 打开弹窗 */
const open = async (type, id) => { const open = async (type, id, sp) => {
dialogVisible.value = true dialogVisible.value = true
dialogTitle.value = type == 'create' ? '新增班型' : '修改班型' dialogTitle.value = type == 'create' ? '新增班型' : '修改班型'
formType.value = type formType.value = type
currentTab.value = 'base' currentTab.value = 'base'
resetForm() resetForm()
if (type == 'create' && sp && sp.length) {
formData.value.schPlace = sp
}
if (!opts.value.length) { if (!opts.value.length) {
const arr = await ClassApi.getCommissionParams() const arr = await ClassApi.getCommissionParams()
arr.map((item) => { arr.map((item) => {

@ -47,20 +47,23 @@
plain plain
@click="handleOpenDialog('create', null)" @click="handleOpenDialog('create', null)"
v-hasPermi="['school:class:add']" v-hasPermi="['school:class:add']"
>新增</el-button
> >
新增
</el-button>
<el-button <el-button
type="danger" type="danger"
@click="handleBatchDelete([])" @click="handleBatchDelete([])"
v-hasPermi="['school:class:batch-delete']" v-hasPermi="['school:class:batch-delete']"
>批量删除</el-button
> >
批量删除
</el-button>
<el-button <el-button
type="warning" type="warning"
@click="handleBatchStatus" @click="handleBatchStatus"
v-hasPermi="['school:class:batch-status']" v-hasPermi="['school:class:batch-status']"
>批量启/停用</el-button
> >
批量启/停用
</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -235,7 +238,7 @@ async function getList() {
const ClassDialog = ref() const ClassDialog = ref()
function handleOpenDialog(type, id = null) { function handleOpenDialog(type, id = null) {
ClassDialog.value.open(type, id) ClassDialog.value.open(type, id, searchForm.value.schPlace)
} }
function handleReset() { function handleReset() {

Loading…
Cancel
Save