Compare commits
4 Commits
b6a87197f0
...
a9c5d16926
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a9c5d16926 | ||
|
|
f3b5079fbe | ||
|
|
880eabb761 | ||
|
|
77134be7ff |
@@ -1,13 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
export default {
|
||||
callLogin(data) {
|
||||
return request.post({ url: '/call-api/openapi/V2.0.4/agentLogin', data })
|
||||
},
|
||||
callUserStatus(data) {
|
||||
return request.post({ url: '/call-api/openapi/V2.0.4/getAgentStatus', data })
|
||||
},
|
||||
callNumber(data) {
|
||||
return request.post({ url: '/call-api/openapi/V2.0.4/callNumber', data })
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 查询(精简)列表
|
||||
export const getAfterSaleList = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sign-after-sale/list', params })
|
||||
}
|
||||
|
||||
// 查询(精简)列表
|
||||
export const getAfterSalePage = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sign-after-sale/page', params })
|
||||
}
|
||||
|
||||
// 新增
|
||||
export const createAfterSale = async (data) => {
|
||||
return await request.post({
|
||||
url: '/admin-api/crm/sign-after-sale/create',
|
||||
data,
|
||||
isSubmitForm: true
|
||||
})
|
||||
}
|
||||
|
||||
// 审核
|
||||
export const auditAfterSale = async (data) => {
|
||||
return await request.post({ url: '/admin-api/crm/sign-after-sale/check', data })
|
||||
}
|
||||
|
||||
export const batchAuditAfterSale = async (data) => {
|
||||
return await request.post({ url: '/admin-api/crm/sign-after-sale/batch/check', data })
|
||||
}
|
||||
|
||||
// 撤销
|
||||
export const cancelApplyAfterSale = async (data) => {
|
||||
return await request.post({ url: '/admin-api/crm/sign-after-sale/revoke', params: data })
|
||||
}
|
||||
|
||||
// 查询详情
|
||||
export const getAfterSaleDetail = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sign-after-sale/get', params })
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 查询用户配置
|
||||
export const getClueCache = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/param-user-setting/get-by-user', params })
|
||||
}
|
||||
|
||||
// 保存用户配置
|
||||
export const setClueCache = async (data) => {
|
||||
return await request.post({ url: '/admin-api/crm/param-user-setting/save', data })
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 创建
|
||||
export const createField = (data) => {
|
||||
return request.post({ url: '/admin-api/crm/param/create', data: { ...data, module: 1 } })
|
||||
}
|
||||
|
||||
// 更新
|
||||
export const updateField = (data) => {
|
||||
return request.put({ url: '/admin-api/crm/param/update', data })
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deleteField = (id) => {
|
||||
return request.delete({ url: `/admin-api/crm/param/delete?id=${id}` })
|
||||
}
|
||||
|
||||
// 获得
|
||||
export const getField = (id) => {
|
||||
return request.get({ url: `/admin-api/crm/param/get?id=${id}` })
|
||||
}
|
||||
|
||||
// 获得精简信息列表
|
||||
export const getSimpleFieldList = () => {
|
||||
return request.get({ url: '/admin-api/crm/param/simple-list', params: { module: 1 } })
|
||||
}
|
||||
|
||||
// 获取自定义字段
|
||||
export const getDiyFieldList = () => {
|
||||
return request.get({ url: '/admin-api/crm/param/get-diy-param', params: { module: 1 } })
|
||||
}
|
||||
|
||||
// 状态修改
|
||||
export const updateFieldStatus = (signParamId, status) => {
|
||||
const data = {
|
||||
signParamId,
|
||||
status
|
||||
}
|
||||
return request.put({ url: '/admin-api/crm/param/status/update', data: data })
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 线索获取规则
|
||||
export const getClueGainRuleList = () => {
|
||||
return request.get({ url: '/admin-api/crm/sch-clue-gain-rule/list' })
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deleteClueGainRule = (id) => {
|
||||
return request.delete({ url: `/admin-api/crm/sch-clue-gain-rule/delete?id=${id}` })
|
||||
}
|
||||
|
||||
// 线索获取规则保存
|
||||
export const saveClueGainRule = (data) => {
|
||||
return request.put({ url: '/admin-api/crm/sch-clue-gain-rule/batchUpdate', data })
|
||||
}
|
||||
|
||||
// 线索规则
|
||||
export const getClueDistributeRuleByUser = (params) => {
|
||||
return request.get({ url: '/admin-api/crm/sch-clue-distribution-rule/queryByUserId', params })
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deleteClueDistributeRule = (id) => {
|
||||
return request.delete({ url: `/admin-api/crm/sch-clue-gain-rule/delete?id=${id}` })
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 查询(精简)列表
|
||||
export const getDeliveryList = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sign-send/list', params })
|
||||
}
|
||||
|
||||
// 查询分页列表
|
||||
export const getDeliveryPage = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sign-send/page', params })
|
||||
}
|
||||
|
||||
// 新增
|
||||
export const createDelivery = async (data) => {
|
||||
return await request.post({ url: '/admin-api/crm/sign-send/create', data, isSubmitForm: true })
|
||||
}
|
||||
|
||||
// 查询详情
|
||||
export const getDeliveryDetail = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sign-send/get', params })
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 查询(精简)列表
|
||||
export const getFollowList = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/clue-follow-record/list', params })
|
||||
}
|
||||
|
||||
// 新增
|
||||
export const createFollow = async (data) => {
|
||||
return await request.post({
|
||||
url: '/admin-api/crm/clue-follow-record/create',
|
||||
data: data,
|
||||
isSubmitForm: true
|
||||
})
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deleteFollow = async (id) => {
|
||||
return await request.delete({ url: '/admin-api/crm/clue-follow-record/delete?id=' + id })
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 查询(精简)列表
|
||||
export const getSimpleClueList = async () => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-clue/list-all-simple' })
|
||||
}
|
||||
|
||||
// 查询列表
|
||||
export const getCluePage = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-clue/page', params })
|
||||
}
|
||||
|
||||
// 查询详情
|
||||
export const getClue = async (id) => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-clue/get?id=' + id })
|
||||
}
|
||||
|
||||
// 新增
|
||||
export const createClue = async (data) => {
|
||||
return await request.post({
|
||||
url: '/admin-api/crm/sch-clue/create',
|
||||
data: data,
|
||||
isSubmitForm: true
|
||||
})
|
||||
}
|
||||
|
||||
// 修改
|
||||
export const updateClue = async (params) => {
|
||||
return await request.put({ url: '/admin-api/crm/sch-clue/update', data: params })
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deleteClue = async (id) => {
|
||||
return await request.delete({ url: '/admin-api/crm/sch-clue/delete?id=' + id })
|
||||
}
|
||||
|
||||
// 释放
|
||||
export const releaseClue = async (data) => {
|
||||
return await request.put({ url: '/admin-api/crm/sch-clue/public/save', data })
|
||||
}
|
||||
|
||||
// 通用查询数量
|
||||
export const getClueCount = async () => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-clue/get-clue-num' })
|
||||
}
|
||||
|
||||
// 获取操作记录
|
||||
export const getOpearateRecord = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/clue-operate-record/list', params })
|
||||
}
|
||||
|
||||
// 获取公海线索
|
||||
export const getPublicClue = async (data) => {
|
||||
return await request.put({ url: '/admin-api/crm/sch-clue/public/save', data })
|
||||
}
|
||||
|
||||
// 获得线索跟进用户信息
|
||||
export const getFollowUserList = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-clue/get-follow-user', params })
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 创建
|
||||
export const createField = (data) => {
|
||||
return request.post({ url: '/admin-api/crm/param/create', data: { ...data, module: 2 } })
|
||||
}
|
||||
|
||||
// 更新
|
||||
export const updateField = (data) => {
|
||||
return request.put({ url: '/admin-api/crm/param/update', data })
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deleteField = (id) => {
|
||||
return request.delete({ url: `/admin-api/crm/param/delete?id=${id}` })
|
||||
}
|
||||
|
||||
// 获得
|
||||
export const getField = (id) => {
|
||||
return request.get({ url: `/admin-api/crm/param/get?id=${id}` })
|
||||
}
|
||||
|
||||
// 获得精简信息列表
|
||||
export const getSimpleFieldList = () => {
|
||||
return request.get({ url: '/admin-api/crm/param/simple-list', params: { module: 2 } })
|
||||
}
|
||||
|
||||
// 获取自定义字段
|
||||
export const getDiyFieldList = () => {
|
||||
return request.get({ url: '/admin-api/crm/param/get-diy-param', params: { module: 2 } })
|
||||
}
|
||||
|
||||
// 状态修改
|
||||
export const updateFieldStatus = (signParamId, status) => {
|
||||
const data = {
|
||||
signParamId,
|
||||
status
|
||||
}
|
||||
return request.put({ url: '/admin-api/crm/param/status/update', data: data })
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 查询(精简)列表
|
||||
export const getPaymentList = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sign-pay-record/list', params })
|
||||
}
|
||||
|
||||
// 查询(精简)列表
|
||||
export const getPaymentPage = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sign-pay-record/page', params })
|
||||
}
|
||||
|
||||
// 新增
|
||||
export const createPayment = async (data) => {
|
||||
return await request.post({
|
||||
url: '/admin-api/crm/sign-pay-record/create',
|
||||
data,
|
||||
isSubmitForm: true
|
||||
})
|
||||
}
|
||||
|
||||
// 审核
|
||||
export const auditPayment = async (data) => {
|
||||
return await request.post({ url: '/admin-api/crm/sign-pay-record/check', data })
|
||||
}
|
||||
|
||||
export const batchAuditPayment = async (data) => {
|
||||
return await request.post({ url: '/admin-api/crm/sign-pay-record/batch/check', data })
|
||||
}
|
||||
|
||||
// 撤销
|
||||
export const cancelApplyPayment = async (data) => {
|
||||
return await request.post({ url: '/admin-api/crm/sign-pay-record/revoke', params: data })
|
||||
}
|
||||
|
||||
// 查询详情
|
||||
export const getPaymentDetail = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sign-pay-record/get', params })
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 查询列表
|
||||
export const getSettlePage = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sign-settlement/page', params })
|
||||
}
|
||||
|
||||
// 查询详情
|
||||
export const getSettle = async (id) => {
|
||||
return await request.get({ url: '/admin-api/crm/sign-settlement/get?id=' + id })
|
||||
}
|
||||
|
||||
// 批量结算
|
||||
export const batchSaveSettle = async (data) => {
|
||||
return await request.post({ url: '/admin-api/crm/sign-settlement/batch/save', data })
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 查询列表
|
||||
export const getSignPage = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sign/page', params })
|
||||
}
|
||||
|
||||
// 查询详情
|
||||
export const getSign = async (id) => {
|
||||
return await request.get({ url: '/admin-api/crm/sign/get?id=' + id })
|
||||
}
|
||||
|
||||
// 新增
|
||||
export const createSign = async (data) => {
|
||||
return await request.post({ url: '/admin-api/crm/sign/create', data: data, isSubmitForm: true })
|
||||
}
|
||||
|
||||
// 取消登记
|
||||
export const cancelDeal = async (id) => {
|
||||
return await request.delete({ url: '/admin-api/crm/sign/delete?id=' + id })
|
||||
}
|
||||
|
||||
// 新增支出
|
||||
export const signAddPay = async (data) => {
|
||||
return await request.post({ url: '/admin-api/crm/sign/extra-pay/save', data: data })
|
||||
}
|
||||
|
||||
// 查询支出
|
||||
export const getSignExtraPayList = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sign/extra-pay/get', params })
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 获得列表
|
||||
export const getSkillPage = (params) => {
|
||||
return request.get({ url: '/admin-api/crm/skill/page', params })
|
||||
}
|
||||
|
||||
// 创建
|
||||
export const createSkill = (data) => {
|
||||
return request.post({ url: '/admin-api/crm/skill/create', data, isSubmitForm: true })
|
||||
}
|
||||
|
||||
// 更新
|
||||
export const updateSkill = (data) => {
|
||||
return request.put({ url: '/admin-api/crm/skill/update', data })
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deleteSkill = (id) => {
|
||||
return request.delete({ url: `/admin-api/crm/skill/delete?id=${id}` })
|
||||
}
|
||||
|
||||
// 获得
|
||||
export const getSkill = (id) => {
|
||||
return request.get({ url: `/admin-api/crm/skill/get?id=${id}` })
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 查询(精简)列表
|
||||
export const getSimpleSourceList = async () => {
|
||||
return await request.get({ url: '/admin-api/crm/source/list' })
|
||||
}
|
||||
|
||||
// 查询列表
|
||||
export const getSourcePage = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/source/list', params })
|
||||
}
|
||||
|
||||
// 查询详情
|
||||
export const getSource = async (id) => {
|
||||
return await request.get({ url: '/admin-api/crm/source/get?id=' + id })
|
||||
}
|
||||
|
||||
// 新增
|
||||
export const createSource = async (data) => {
|
||||
return await request.post({ url: '/admin-api/crm/source/create', data: data, isSubmitForm: true })
|
||||
}
|
||||
|
||||
// 修改
|
||||
export const updateSource = async (params) => {
|
||||
return await request.put({ url: '/admin-api/crm/source/update', data: params })
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deleteSource = async (id) => {
|
||||
return await request.delete({ url: '/admin-api/crm/source/delete?id=' + id })
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
/**
|
||||
* 商品品牌
|
||||
*/
|
||||
export interface BrandVO {
|
||||
/**
|
||||
* 品牌编号
|
||||
*/
|
||||
id?: number
|
||||
/**
|
||||
* 品牌名称
|
||||
*/
|
||||
name: string
|
||||
/**
|
||||
* 品牌图片
|
||||
*/
|
||||
picUrl: string
|
||||
/**
|
||||
* 品牌排序
|
||||
*/
|
||||
sort?: number
|
||||
/**
|
||||
* 品牌描述
|
||||
*/
|
||||
description?: string
|
||||
/**
|
||||
* 开启状态
|
||||
*/
|
||||
status: number
|
||||
}
|
||||
|
||||
// 创建商品品牌
|
||||
export const createBrand = (data: BrandVO) => {
|
||||
return request.post({ url: '/admin-api/crm/erp-product-brand/create', data, isSubmitForm: true })
|
||||
}
|
||||
|
||||
// 更新商品品牌
|
||||
export const updateBrand = (data: BrandVO) => {
|
||||
return request.put({ url: '/admin-api/crm/erp-product-brand/update', data })
|
||||
}
|
||||
|
||||
// 删除商品品牌
|
||||
export const deleteBrand = (id: number) => {
|
||||
return request.delete({ url: `/admin-api/crm/erp-product-brand/delete?id=${id}` })
|
||||
}
|
||||
|
||||
// 获得商品品牌
|
||||
export const getBrand = (id: number) => {
|
||||
return request.get({ url: `/admin-api/crm/erp-product-brand/get?id=${id}` })
|
||||
}
|
||||
|
||||
// 获得商品品牌列表
|
||||
export const getBrandParam = (params: PageParam) => {
|
||||
return request.get({ url: '/admin-api/crm/erp-product-brand/page', params })
|
||||
}
|
||||
|
||||
// 获得商品品牌精简信息列表
|
||||
export const getSimpleBrandList = () => {
|
||||
return request.get({ url: '/admin-api/crm/erp-product-brand/simple-list' })
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
/**
|
||||
* 产品分类
|
||||
*/
|
||||
export interface CategoryVO {
|
||||
/**
|
||||
* 分类编号
|
||||
*/
|
||||
id?: number
|
||||
/**
|
||||
* 父分类编号
|
||||
*/
|
||||
parentId?: number
|
||||
/**
|
||||
* 分类名称
|
||||
*/
|
||||
name: string
|
||||
/**
|
||||
* 移动端分类图
|
||||
*/
|
||||
picUrl: string
|
||||
/**
|
||||
* PC 端分类图
|
||||
*/
|
||||
bigPicUrl?: string
|
||||
/**
|
||||
* 分类排序
|
||||
*/
|
||||
sort: number
|
||||
/**
|
||||
* 开启状态
|
||||
*/
|
||||
status: number
|
||||
}
|
||||
|
||||
// 创建商品分类
|
||||
export const createCategory = (data: CategoryVO) => {
|
||||
return request.post({
|
||||
url: '/admin-api/crm/erp-product-category/create',
|
||||
data,
|
||||
isSubmitForm: true
|
||||
})
|
||||
}
|
||||
|
||||
// 更新商品分类
|
||||
export const updateCategory = (data: CategoryVO) => {
|
||||
return request.put({ url: '/admin-api/crm/erp-product-category/update', data })
|
||||
}
|
||||
|
||||
// 删除商品分类
|
||||
export const deleteCategory = (id: number) => {
|
||||
return request.delete({ url: `/admin-api/crm/erp-product-category/delete?id=${id}` })
|
||||
}
|
||||
|
||||
// 获得商品分类
|
||||
export const getCategory = (id: number) => {
|
||||
return request.get({ url: `/admin-api/crm/erp-product-category/get?id=${id}` })
|
||||
}
|
||||
|
||||
// 获得商品分类列表
|
||||
export const getCategoryList = (params: any) => {
|
||||
return request.get({ url: '/admin-api/crm/erp-product-category/list', params })
|
||||
}
|
||||
|
||||
// 获得商品分类列表
|
||||
export const getCategorySimpleList = (params: any) => {
|
||||
return request.get({ url: '/admin-api/crm/erp-product-category/simple-list', params })
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
// 查询列表
|
||||
export const getProductPage = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/erp-product/page', params })
|
||||
}
|
||||
|
||||
// 查询详情
|
||||
export const getProduct = async (id) => {
|
||||
return await request.get({ url: '/admin-api/crm/erp-product/get?id=' + id })
|
||||
}
|
||||
|
||||
// 新增
|
||||
export const createProduct = async (data) => {
|
||||
return await request.post({
|
||||
url: '/admin-api/crm/erp-product/create',
|
||||
data: data,
|
||||
isSubmitForm: true
|
||||
})
|
||||
}
|
||||
|
||||
// 修改
|
||||
export const updateProduct = async (params) => {
|
||||
return await request.put({ url: '/admin-api/crm/erp-product/update', data: params })
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deleteProduct = async (id) => {
|
||||
return await request.delete({ url: '/admin-api/crm/erp-product/delete?id=' + id })
|
||||
}
|
||||
|
||||
export const getSimpleProductList = async () => {
|
||||
return await request.get({ url: '/admin-api/crm/erp-product/simple-list' })
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 创建
|
||||
export const createField = (data) => {
|
||||
return request.post({
|
||||
url: '/admin-api/crm/param/create',
|
||||
data: { ...data, module: 3 },
|
||||
isSubmitForm: true
|
||||
})
|
||||
}
|
||||
|
||||
// 更新
|
||||
export const updateField = (data) => {
|
||||
return request.put({ url: '/admin-api/crm/param/update', data })
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deleteField = (id) => {
|
||||
return request.delete({ url: `/admin-api/crm/param/delete?id=${id}` })
|
||||
}
|
||||
|
||||
// 获得
|
||||
export const getField = (id) => {
|
||||
return request.get({ url: `/admin-api/crm/param/get?id=${id}` })
|
||||
}
|
||||
|
||||
// 获得精简信息列表
|
||||
export const getSimpleFieldList = () => {
|
||||
return request.get({ url: '/admin-api/crm/param/simple-list', params: { module: 3 } })
|
||||
}
|
||||
|
||||
// 获取自定义字段
|
||||
export const getDiyFieldList = () => {
|
||||
return request.get({ url: '/admin-api/crm/param/get-diy-param', params: { module: 3 } })
|
||||
}
|
||||
|
||||
// 状态修改
|
||||
export const updateFieldStatus = (signParamId, status) => {
|
||||
const data = {
|
||||
signParamId,
|
||||
status
|
||||
}
|
||||
return request.put({ url: '/admin-api/crm/param/status/update', data: data })
|
||||
}
|
||||
@@ -1,107 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
/**
|
||||
* 商品属性
|
||||
*/
|
||||
export interface PropertyVO {
|
||||
id?: number
|
||||
/** 名称 */
|
||||
name: string
|
||||
/** 备注 */
|
||||
remark?: string
|
||||
}
|
||||
|
||||
/**
|
||||
* 属性值
|
||||
*/
|
||||
export interface PropertyValueVO {
|
||||
id?: number
|
||||
/** 属性项的编号 */
|
||||
propertyId?: number
|
||||
/** 名称 */
|
||||
name: string
|
||||
/** 备注 */
|
||||
remark?: string
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品属性值的明细
|
||||
*/
|
||||
export interface PropertyValueDetailVO {
|
||||
/** 属性项的编号 */
|
||||
propertyId: number // 属性的编号
|
||||
/** 属性的名称 */
|
||||
propertyName: string
|
||||
/** 属性值的编号 */
|
||||
valueId: number
|
||||
/** 属性值的名称 */
|
||||
valueName: string
|
||||
}
|
||||
|
||||
// ------------------------ 属性项 -------------------
|
||||
|
||||
// 创建属性项
|
||||
export const createProperty = (data: PropertyVO) => {
|
||||
return request.post({
|
||||
url: '/admin-api/crm/erp-product-property/create',
|
||||
data,
|
||||
isSubmitForm: true
|
||||
})
|
||||
}
|
||||
|
||||
// 更新属性项
|
||||
export const updateProperty = (data: PropertyVO) => {
|
||||
return request.put({ url: '/product/property/update', data })
|
||||
}
|
||||
|
||||
// 删除属性项
|
||||
export const deleteProperty = (id: number) => {
|
||||
return request.delete({ url: `/product/property/delete?id=${id}` })
|
||||
}
|
||||
|
||||
// 获得属性项
|
||||
export const getProperty = (id: number): Promise<PropertyVO> => {
|
||||
return request.get({ url: `/product/property/get?id=${id}` })
|
||||
}
|
||||
|
||||
// 获得属性项分页
|
||||
export const getPropertyPage = (params: PageParam) => {
|
||||
return request.get({ url: '/product/property/page', params })
|
||||
}
|
||||
|
||||
// 获得属性项列表
|
||||
export const getPropertyList = (params: any) => {
|
||||
return request.get({ url: '/product/property/list', params })
|
||||
}
|
||||
|
||||
// 获得属性项列表
|
||||
export const getPropertyListAndValue = (data: any) => {
|
||||
return request.post({ url: '/product/property/get-value-list', data })
|
||||
}
|
||||
|
||||
// ------------------------ 属性值 -------------------
|
||||
|
||||
// 获得属性值分页
|
||||
export const getPropertyValuePage = (params: PageParam & any) => {
|
||||
return request.get({ url: '/product/property/value/page', params })
|
||||
}
|
||||
|
||||
// 获得属性值
|
||||
export const getPropertyValue = (id: number): Promise<PropertyValueVO> => {
|
||||
return request.get({ url: `/product/property/value/get?id=${id}` })
|
||||
}
|
||||
|
||||
// 创建属性值
|
||||
export const createPropertyValue = (data: PropertyValueVO) => {
|
||||
return request.post({ url: '/admin-api/crm/erp-product-property-value/create', data })
|
||||
}
|
||||
|
||||
// 更新属性值
|
||||
export const updatePropertyValue = (data: PropertyValueVO) => {
|
||||
return request.put({ url: '/product/property/value/update', data })
|
||||
}
|
||||
|
||||
// 删除属性值
|
||||
export const deletePropertyValue = (id: number) => {
|
||||
return request.delete({ url: `/product/property/value/delete?id=${id}` })
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
// 查询列表
|
||||
export const getPurchasePage = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/erp-purchase/page', params })
|
||||
}
|
||||
|
||||
// 新增
|
||||
export const createPurchase = async (data) => {
|
||||
return await request.post({
|
||||
url: '/admin-api/crm/erp-purchase/create',
|
||||
data: data,
|
||||
isSubmitForm: true
|
||||
})
|
||||
}
|
||||
|
||||
// 修改
|
||||
export const updatePurchase = async (params) => {
|
||||
return await request.put({ url: '/admin-api/crm/erp-purchase/update', data: params })
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deletePurchase = async (id) => {
|
||||
return await request.delete({ url: '/admin-api/crm/erp-purchase/delete?id=' + id })
|
||||
}
|
||||
|
||||
// 审核
|
||||
export const auditPurchase = async (data) => {
|
||||
return await request.post({ url: '/admin-api/crm/erp-purchase/audit', data })
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
export interface DeliveryExpressVO {
|
||||
id: number
|
||||
code: string
|
||||
name: string
|
||||
logo: string
|
||||
sort: number
|
||||
status: number
|
||||
}
|
||||
|
||||
// 查询快递公司列表
|
||||
export const getDeliveryExpressPage = async (params: PageParam) => {
|
||||
return await request.get({ url: '/trade/delivery/express/page', params })
|
||||
}
|
||||
|
||||
// 查询快递公司详情
|
||||
export const getDeliveryExpress = async (id: number) => {
|
||||
return await request.get({ url: '/trade/delivery/express/get?id=' + id })
|
||||
}
|
||||
|
||||
// 新增快递公司
|
||||
export const createDeliveryExpress = async (data: DeliveryExpressVO) => {
|
||||
return await request.post({ url: '/trade/delivery/express/create', data })
|
||||
}
|
||||
|
||||
// 修改快递公司
|
||||
export const updateDeliveryExpress = async (data: DeliveryExpressVO) => {
|
||||
return await request.put({ url: '/trade/delivery/express/update', data })
|
||||
}
|
||||
|
||||
// 删除快递公司
|
||||
export const deleteDeliveryExpress = async (id: number) => {
|
||||
return await request.delete({ url: '/trade/delivery/express/delete?id=' + id })
|
||||
}
|
||||
|
||||
// 导出快递公司 Excel
|
||||
export const exportDeliveryExpressApi = async (params) => {
|
||||
return await request.download({ url: '/trade/delivery/express/export-excel', params })
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
export interface DeliveryExpressTemplateVO {
|
||||
id: number
|
||||
name: string
|
||||
chargeMode: number
|
||||
sort: number
|
||||
templateCharge: ExpressTemplateChargeVO[]
|
||||
templateFree: ExpressTemplateFreeVO[]
|
||||
}
|
||||
|
||||
export declare type ExpressTemplateChargeVO = {
|
||||
areaIds: number[]
|
||||
startCount: number
|
||||
startPrice: number
|
||||
extraCount: number
|
||||
extraPrice: number
|
||||
}
|
||||
|
||||
export declare type ExpressTemplateFreeVO = {
|
||||
areaIds: number[]
|
||||
freeCount: number
|
||||
freePrice: number
|
||||
}
|
||||
|
||||
// 查询快递运费模板列表
|
||||
export const getDeliveryExpressTemplatePage = async (params: PageParam) => {
|
||||
return await request.get({ url: '/trade/delivery/express-template/page', params })
|
||||
}
|
||||
|
||||
// 查询快递运费模板详情
|
||||
export const getDeliveryExpressTemplate = async (id: number) => {
|
||||
return await request.get({ url: '/trade/delivery/express-template/get?id=' + id })
|
||||
}
|
||||
|
||||
// 新增快递运费模板
|
||||
export const createDeliveryExpressTemplate = async (data: DeliveryExpressTemplateVO) => {
|
||||
return await request.post({ url: '/trade/delivery/express-template/create', data })
|
||||
}
|
||||
|
||||
// 修改快递运费模板
|
||||
export const updateDeliveryExpressTemplate = async (data: DeliveryExpressTemplateVO) => {
|
||||
return await request.put({ url: '/trade/delivery/express-template/update', data })
|
||||
}
|
||||
|
||||
// 删除快递运费模板
|
||||
export const deleteDeliveryExpressTemplate = async (id: number) => {
|
||||
return await request.delete({ url: '/trade/delivery/express-template/delete?id=' + id })
|
||||
}
|
||||
|
||||
// 导出快递运费模板 Excel
|
||||
export const exportDeliveryExpressTemplateApi = async (params) => {
|
||||
return await request.download({ url: '/trade/delivery/express-template/export-excel', params })
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
// 查询列表
|
||||
export const getWarehousePage = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/erp-warehouse/page', params })
|
||||
}
|
||||
|
||||
// 新增
|
||||
export const createWarehouse = async (data) => {
|
||||
return await request.post({
|
||||
url: '/admin-api/crm/erp-warehouse/create',
|
||||
data: data,
|
||||
isSubmitForm: true
|
||||
})
|
||||
}
|
||||
|
||||
// 修改
|
||||
export const updateWarehouse = async (params) => {
|
||||
return await request.put({ url: '/admin-api/crm/erp-warehouse/update', data: params })
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deleteWarehouse = async (id) => {
|
||||
return await request.delete({ url: '/admin-api/crm/erp-warehouse/delete?id=' + id })
|
||||
}
|
||||
|
||||
// 获取仓库
|
||||
export const getWarehouse = async (id) => {
|
||||
return await request.get({ url: '/admin-api/crm/erp-warehouse/get?id=' + id })
|
||||
}
|
||||
|
||||
// 获取仓库列表
|
||||
export const getSimpleWarehouseList = async () => {
|
||||
return await request.get({ url: '/admin-api/crm/erp-warehouse/simple-list' })
|
||||
}
|
||||
|
||||
// 获取库存
|
||||
export const getInventoryList = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/erp-inventory/page', params })
|
||||
}
|
||||
|
||||
// 获取库存变动记录
|
||||
export const getInventoryRecord = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/erp-inventory-record/page', params })
|
||||
}
|
||||
|
||||
// 获取剩余库存
|
||||
export const getRemainInventoryList = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/erp-inventory-detail/list', params })
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 查询列表-分页
|
||||
export const getClassTypePage = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-class-type/page', params })
|
||||
}
|
||||
|
||||
export const getClassTypeList = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-class-type/list', params })
|
||||
}
|
||||
|
||||
// 查询详情
|
||||
export const getClassType = async (id) => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-class-type/get?id=' + id })
|
||||
}
|
||||
|
||||
// 新增
|
||||
export const createClassType = async (data) => {
|
||||
return await request.post({
|
||||
url: '/admin-api/crm/sch-class-type/create',
|
||||
data: data,
|
||||
isSubmitForm: true
|
||||
})
|
||||
}
|
||||
|
||||
// 修改
|
||||
export const updateClassType = async (params) => {
|
||||
return await request.put({ url: '/admin-api/crm/sch-class-type/update', data: params })
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deleteClassType = async (id) => {
|
||||
return await request.delete({ url: '/admin-api/crm/sch-class-type/delete?id=' + id })
|
||||
}
|
||||
|
||||
// 修改状态
|
||||
export const updateClassTypeStatus = async (data) => {
|
||||
return request.put({ url: '/admin-api/crm/sch-class-type/status/update', data })
|
||||
}
|
||||
|
||||
// 批量修改状态
|
||||
export const batchUpdateClassTypeStatus = async (data) => {
|
||||
return request.put({ url: '/admin-api/crm/sch-class-type/status/batch-update', data })
|
||||
}
|
||||
|
||||
// 批量删除
|
||||
export const batchDeleteClassType = async (ids) => {
|
||||
return await request.delete({ url: '/admin-api/crm/sch-class-type/batch-delete?ids=' + ids })
|
||||
}
|
||||
|
||||
// 获取提成结算参数
|
||||
export const getCommissionParams = async () => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-class-type/get-percentage-param' })
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 查询列表-分页
|
||||
export const getPlacePage = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-place/page', params })
|
||||
}
|
||||
|
||||
// 查询列表-不分页
|
||||
export const getPlaceList = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-place/list', params })
|
||||
}
|
||||
|
||||
// 查询详情
|
||||
export const getPlace = async (id) => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-place/get?id=' + id })
|
||||
}
|
||||
|
||||
// 新增
|
||||
export const createPlace = async (data) => {
|
||||
return await request.post({
|
||||
url: '/admin-api/crm/sch-place/create',
|
||||
data: data,
|
||||
isSubmitForm: true
|
||||
})
|
||||
}
|
||||
|
||||
// 修改
|
||||
export const updatePlace = async (params) => {
|
||||
return await request.put({ url: '/admin-api/crm/sch-place/update', data: params })
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deletePlace = async (id) => {
|
||||
return await request.delete({ url: '/admin-api/crm/sch-place/delete?id=' + id })
|
||||
}
|
||||
|
||||
export const updatePlaceStatus = async (placeId, status) => {
|
||||
const data = {
|
||||
placeId,
|
||||
status
|
||||
}
|
||||
return request.put({ url: '/admin-api/crm/sch-place/status/update', data: data })
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
// 查询列表
|
||||
export const getSchoolPage = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-school/page', params })
|
||||
}
|
||||
|
||||
// 查询详情
|
||||
export const getSchool = async (id) => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-school/get?id=' + id })
|
||||
}
|
||||
|
||||
// 新增
|
||||
export const createSchool = async (data) => {
|
||||
return await request.post({
|
||||
url: '/admin-api/crm/sch-school/create',
|
||||
data: data,
|
||||
isSubmitForm: true
|
||||
})
|
||||
}
|
||||
|
||||
// 修改
|
||||
export const updateSchool = async (params) => {
|
||||
return await request.put({ url: '/admin-api/crm/sch-school/update', data: params })
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deleteSchool = async (id) => {
|
||||
return await request.delete({ url: '/admin-api/crm/sch-school/delete?id=' + id })
|
||||
}
|
||||
|
||||
export const updateSchoolStatus = async (schoolId, status) => {
|
||||
const data = {
|
||||
schoolId,
|
||||
status
|
||||
}
|
||||
return request.put({ url: '/admin-api/crm/sch-school/status/update', data: data })
|
||||
}
|
||||
@@ -106,27 +106,27 @@ const remainingRouter: AppRouteRecordRaw[] = [
|
||||
}
|
||||
]
|
||||
},
|
||||
// {
|
||||
// path: '/Basic',
|
||||
// component: Layout,
|
||||
// name: 'Basic',
|
||||
// meta: {},
|
||||
// redirect: '/Basic/menu',
|
||||
// children: [
|
||||
// {
|
||||
// path: 'menu',
|
||||
// component: () => import('@/views/Basic/Menu/index.vue'),
|
||||
// name: 'Menu',
|
||||
// meta: {
|
||||
// canTo: true,
|
||||
// hidden: true,
|
||||
// noTagsView: false,
|
||||
// icon: 'ep:user',
|
||||
// title: '菜单管理'
|
||||
// }
|
||||
// }
|
||||
// ]
|
||||
// },
|
||||
{
|
||||
path: '/Basic',
|
||||
component: Layout,
|
||||
name: 'Basic',
|
||||
meta: {},
|
||||
redirect: '/Basic/menu',
|
||||
children: [
|
||||
{
|
||||
path: 'menu',
|
||||
component: () => import('@/views/Basic/Menu/index.vue'),
|
||||
name: 'Menu',
|
||||
meta: {
|
||||
canTo: true,
|
||||
hidden: true,
|
||||
noTagsView: false,
|
||||
icon: 'ep:user',
|
||||
title: '菜单管理'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/login',
|
||||
component: () => import('@/views/Login/Login.vue'),
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<Dialog v-model="dialogVisible" :title="dialogTitle" style="width: 1000px">
|
||||
<el-form
|
||||
:model="comissionForm"
|
||||
:model="formData"
|
||||
ref="formRef"
|
||||
:rules="rules"
|
||||
class="mt-10px"
|
||||
@@ -11,12 +11,12 @@
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" :offset="0">
|
||||
<el-form-item label="方案名称" prop="name">
|
||||
<el-input v-model="comissionForm.name" placeholder="请输入方案名称" clearable />
|
||||
<el-input v-model="formData.name" placeholder="请输入方案名称" clearable />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" :offset="0">
|
||||
<el-form-item label="结算方式">
|
||||
<el-radio-group v-model="comissionForm.percentageType">
|
||||
<el-radio-group v-model="formData.percentageType">
|
||||
<el-radio :label="1">
|
||||
<Tooltip message="可配置多级,命中某档位后,按照档位分级结算" />阶梯结算
|
||||
</el-radio>
|
||||
@@ -35,7 +35,7 @@
|
||||
:span="24"
|
||||
:offset="0"
|
||||
class="flex"
|
||||
v-for="(item, index) in comissionForm.rules"
|
||||
v-for="(item, index) in formData.rules"
|
||||
:key="index"
|
||||
>
|
||||
<el-select v-model="item.ruleParam1" style="width: 100px">
|
||||
@@ -107,6 +107,85 @@
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-divider direction="horizontal" />
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" :offset="0">
|
||||
<el-form-item label="是否扣除其他支出" labelWidth="150px">
|
||||
<el-radio-group v-model="formData.qitazhichu">
|
||||
<el-radio :label="0"> 是 </el-radio>
|
||||
<el-radio :label="1"> 否 </el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" :offset="0">
|
||||
<el-form-item label="是否扣除售后" labelWidth="150px">
|
||||
<el-radio-group v-model="formData.shouhou">
|
||||
<el-radio :label="0"> 是 </el-radio>
|
||||
<el-radio :label="1"> 否 </el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" :offset="0">
|
||||
<el-form-item label="是否关联成交率" labelWidth="150px">
|
||||
<el-radio-group v-model="formData.saleCommissionRelateDealConfig">
|
||||
<el-radio label="true"> 是 </el-radio>
|
||||
<el-radio label="false"> 否 </el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" :offset="0">
|
||||
<el-form-item label="提成计算时间" labelWidth="150px">
|
||||
<el-radio-group v-model="formData.jisuanshijian">
|
||||
<el-radio :label="1">成交后</el-radio>
|
||||
<el-radio :label="2">回款后</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" :offset="0">
|
||||
<el-form-item label="关联规则" v-if="formData.saleCommissionRelateDealConfig == 'true'">
|
||||
<div>
|
||||
<el-button @click="formData.saleCommissionRelateRulesConfig.push({})">
|
||||
新增规则
|
||||
</el-button>
|
||||
<div
|
||||
v-for="(item, index) in formData.saleCommissionRelateRulesConfig"
|
||||
:key="index"
|
||||
class="mt-10px flex justify-center items-center"
|
||||
>
|
||||
<span>成交率达</span>
|
||||
<el-input
|
||||
class="ml-10px"
|
||||
v-model="item.successRate"
|
||||
placeholder="成交率"
|
||||
style="width: 100px"
|
||||
type="number"
|
||||
:min="0"
|
||||
>
|
||||
<template #suffix>%</template>
|
||||
</el-input>
|
||||
<span>,可结算</span>
|
||||
<el-input
|
||||
class="ml-10px"
|
||||
v-model="item.comissionRate"
|
||||
placeholder="提成率"
|
||||
style="width: 100px"
|
||||
type="number"
|
||||
:min="0"
|
||||
>
|
||||
<template #suffix>%</template>
|
||||
</el-input>
|
||||
<span>提成</span>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<template #footer>
|
||||
@@ -118,14 +197,14 @@
|
||||
</Dialog>
|
||||
</template>
|
||||
|
||||
<script setup name="DialogSalarySetting">
|
||||
<script setup name="DialogCommissionPlan">
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('工资条设置')
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
|
||||
const comissionForm = ref({})
|
||||
const formData = ref({})
|
||||
const rules = {
|
||||
name: { required: true, message: '方案名称不可为空', trigger: 'blur' }
|
||||
}
|
||||
@@ -154,7 +233,7 @@ const open = async (type, row) => {
|
||||
if (row?.id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
// comissionForm.value = await UserApi.getUser(id)
|
||||
// formData.value = await UserApi.getUser(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
@@ -164,7 +243,7 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
comissionForm.value = {
|
||||
formData.value = {
|
||||
name: undefined,
|
||||
percentageType: 1,
|
||||
rules: [
|
||||
@@ -176,13 +255,15 @@ const resetForm = () => {
|
||||
ruleParam5: 1,
|
||||
ruleParam6: 10
|
||||
}
|
||||
]
|
||||
],
|
||||
saleCommissionRelateDealConfig: 'false',
|
||||
saleCommissionRelateRulesConfig: []
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
|
||||
function handleAddRules() {
|
||||
comissionForm.value.rules.push({
|
||||
formData.value.rules.push({
|
||||
ruleParam1: 1,
|
||||
ruleParam2: 1,
|
||||
ruleParam3: 0,
|
||||
|
||||
@@ -61,6 +61,10 @@ const searchForm = ref({
|
||||
pageSize: 20
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
handleQuery()
|
||||
})
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
searchForm.value.pageNo = 1
|
||||
|
||||
@@ -46,6 +46,10 @@ const searchForm = ref({
|
||||
pageSize: 20
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
handleQuery()
|
||||
})
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
searchForm.value.pageNo = 1
|
||||
|
||||
53
src/views/Home/Salary/Comp/DialogCreateSalary.vue
Normal file
53
src/views/Home/Salary/Comp/DialogCreateSalary.vue
Normal file
@@ -0,0 +1,53 @@
|
||||
<template>
|
||||
<Dialog v-model="dialogVisible" title="生成工资条" style="width: 800px">
|
||||
<el-form :model="formData" ref="formRef" :rules="rules" label-width="80px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" :offset="0">
|
||||
<el-form-item label="年月" prop="yearmonth">
|
||||
<el-date-picker v-model="formData.yearmonth" type="month" placeholder="选择年月" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" :offset="0">
|
||||
<el-form-item label="导入奖金" size="normal">
|
||||
<UploadFile v-model="formData.files1" :limit="1" :isShowTip="false" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" :offset="0">
|
||||
<el-form-item label="导入考勤" size="normal">
|
||||
<UploadFile v-model="formData.files2" :limit="1" :isShowTip="false" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<span>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" :disabled="formLoading" @click="handleSave">
|
||||
确 认 生 成
|
||||
</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
|
||||
<script setup name="DialogCreateSalary">
|
||||
const dialogVisible = ref(false)
|
||||
|
||||
const formData = ref({})
|
||||
|
||||
const formLoading = ref(false)
|
||||
|
||||
const rules = {}
|
||||
|
||||
function open() {
|
||||
dialogVisible.value = true
|
||||
}
|
||||
|
||||
defineExpose({ open })
|
||||
|
||||
function handleSave() {}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
@@ -1,7 +1,354 @@
|
||||
<template>
|
||||
<div> 工资条 </div>
|
||||
<div>
|
||||
<el-form :model="searchForm" ref="searchFormRef" inline>
|
||||
<el-form-item>
|
||||
<el-input v-model="searchForm.employeeName" placeholder="员工姓名" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-date-picker
|
||||
v-model="searchForm.month"
|
||||
type="month"
|
||||
placeholder="年月"
|
||||
format="YYYY-MM"
|
||||
value-format="YYYY-MM"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleSearch">查询</el-button>
|
||||
<el-button type="primary" plain @click="craeteSalary">生成工资条</el-button>
|
||||
<el-button type="primary" @click="importHistorySalary">导入历史工资条</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="tableList"
|
||||
border
|
||||
stripe
|
||||
:default-expand-all="false"
|
||||
row-key="id"
|
||||
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
|
||||
:span-method="spanMethod"
|
||||
>
|
||||
<el-table-column label="姓名" min-width="90px">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.children && row.children.length">
|
||||
<span>{{ row.yearmonth }}</span>
|
||||
<span class="ml-20px">应发工资人数:30人</span>
|
||||
</span>
|
||||
<span v-else>
|
||||
{{ row.name }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="dept" label="部门" min-width="90px" />
|
||||
<el-table-column prop="job" label="职位" min-width="90px" />
|
||||
<el-table-column label="应发工资" align="center">
|
||||
<el-table-column label="基本工资" min-width="90px">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-if="row.edit"
|
||||
v-model="row.jbgz"
|
||||
:min="0"
|
||||
:controls="false"
|
||||
size="small"
|
||||
style="width: 65px"
|
||||
/>
|
||||
<span v-else> {{ row.jbgz }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="补贴" min-width="90px">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-if="row.edit"
|
||||
v-model="row.jbgz"
|
||||
:min="0"
|
||||
:controls="false"
|
||||
size="small"
|
||||
style="width: 65px"
|
||||
/>
|
||||
<span v-else> {{ row.jbgz }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="提成" min-width="90px">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-if="row.edit"
|
||||
v-model="row.jbgz"
|
||||
:min="0"
|
||||
:controls="false"
|
||||
size="small"
|
||||
style="width: 65px"
|
||||
/>
|
||||
<span v-else> {{ row.jbgz }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="满勤" min-width="90px">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-if="row.edit"
|
||||
v-model="row.jbgz"
|
||||
:min="0"
|
||||
:controls="false"
|
||||
size="small"
|
||||
style="width: 65px"
|
||||
/>
|
||||
<span v-else> {{ row.jbgz }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="绩效" min-width="90px">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-if="row.edit"
|
||||
v-model="row.jbgz"
|
||||
:min="0"
|
||||
:controls="false"
|
||||
size="small"
|
||||
style="width: 65px"
|
||||
/>
|
||||
<span v-else> {{ row.jbgz }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="其他" min-width="90px">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-if="row.edit"
|
||||
v-model="row.jbgz"
|
||||
:min="0"
|
||||
:controls="false"
|
||||
size="small"
|
||||
style="width: 65px"
|
||||
/>
|
||||
<span v-else> {{ row.jbgz }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="小计" min-width="90px" />
|
||||
</el-table-column>
|
||||
<el-table-column label="应发工资" align="center">
|
||||
<el-table-column label="基本工资" min-width="90px">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-if="row.edit"
|
||||
v-model="row.jbgz"
|
||||
:min="0"
|
||||
:controls="false"
|
||||
size="small"
|
||||
style="width: 65px"
|
||||
/>
|
||||
<span v-else> {{ row.jbgz }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="请假" min-width="90px">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-if="row.edit"
|
||||
v-model="row.jbgz"
|
||||
:min="0"
|
||||
:controls="false"
|
||||
size="small"
|
||||
style="width: 65px"
|
||||
/>
|
||||
<span v-else> {{ row.jbgz }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="缺勤" min-width="90px">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-if="row.edit"
|
||||
v-model="row.jbgz"
|
||||
:min="0"
|
||||
:controls="false"
|
||||
size="small"
|
||||
style="width: 65px"
|
||||
/>
|
||||
<span v-else> {{ row.jbgz }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="旷工" min-width="90px">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-if="row.edit"
|
||||
v-model="row.jbgz"
|
||||
:min="0"
|
||||
:controls="false"
|
||||
size="small"
|
||||
style="width: 65px"
|
||||
/>
|
||||
<span v-else> {{ row.jbgz }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="违纪" min-width="90px">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-if="row.edit"
|
||||
v-model="row.jbgz"
|
||||
:min="0"
|
||||
:controls="false"
|
||||
size="small"
|
||||
style="width: 65px"
|
||||
/>
|
||||
<span v-else> {{ row.jbgz }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="公积金" min-width="90px">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-if="row.edit"
|
||||
v-model="row.jbgz"
|
||||
:min="0"
|
||||
:controls="false"
|
||||
size="small"
|
||||
style="width: 65px"
|
||||
/>
|
||||
<span v-else> {{ row.jbgz }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="社保" min-width="90px">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-if="row.edit"
|
||||
v-model="row.jbgz"
|
||||
:min="0"
|
||||
:controls="false"
|
||||
size="small"
|
||||
style="width: 65px"
|
||||
/>
|
||||
<span v-else> {{ row.jbgz }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="所得税" min-width="90px">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-if="row.edit"
|
||||
v-model="row.jbgz"
|
||||
:min="0"
|
||||
:controls="false"
|
||||
size="small"
|
||||
style="width: 65px"
|
||||
/>
|
||||
<span v-else> {{ row.jbgz }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="其他" min-width="90px">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-if="row.edit"
|
||||
v-model="row.jbgz"
|
||||
:min="0"
|
||||
:controls="false"
|
||||
size="small"
|
||||
style="width: 65px"
|
||||
/>
|
||||
<span v-else> {{ row.jbgz }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="小计" min-width="90px" />
|
||||
</el-table-column>
|
||||
<el-table-column label="实发工资" fixed="right" />
|
||||
<el-table-column label="操作" fixed="right" width="200">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
style="padding: 0"
|
||||
v-if="!row.edit && row.yearmonth"
|
||||
text
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
修改
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
v-else-if="row.edit && row.yearmonth"
|
||||
text
|
||||
style="padding: 0"
|
||||
@click="handleSave(row)"
|
||||
>
|
||||
保存
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
v-if="row.yearmonth"
|
||||
style="padding: 0"
|
||||
text
|
||||
@click="handleSave(row)"
|
||||
>
|
||||
封存
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<DialogCreateSalary ref="createSalaryRef" @success="getList" />
|
||||
<DialogImportSalary ref="importSalaryRef" @success="getList" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="SalarySlip"></script>
|
||||
<script setup name="SalarySlip">
|
||||
import DialogCreateSalary from './Comp/DialogCreateSalary.vue'
|
||||
const searchForm = ref({})
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
onMounted(() => {
|
||||
handleSearch()
|
||||
})
|
||||
|
||||
function handleSearch() {
|
||||
searchForm.value.pageNO = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
const loading = ref(false)
|
||||
const tableList = ref([])
|
||||
const total = ref(0)
|
||||
function getList() {
|
||||
tableList.value = [
|
||||
{
|
||||
yearmonth: '2024-06',
|
||||
id: 1,
|
||||
children: [
|
||||
{ id: 11, name: '张三' },
|
||||
{ id: 12, name: '李四' }
|
||||
]
|
||||
}
|
||||
]
|
||||
total.value = 0
|
||||
}
|
||||
|
||||
const createSalaryRef = ref()
|
||||
function craeteSalary() {
|
||||
createSalaryRef.value.open()
|
||||
}
|
||||
|
||||
function importHistorySalary() {}
|
||||
|
||||
function spanMethod({ row, columnIndex }) {
|
||||
if (row.children && row.children.length > 0) {
|
||||
if (columnIndex === 0) {
|
||||
return [1, 21]
|
||||
} else if (columnIndex == 21) {
|
||||
return [1, 1]
|
||||
} else {
|
||||
return [0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function handleEdit(row) {
|
||||
row.edit = true
|
||||
row.children.forEach((it) => (it.edit = true))
|
||||
}
|
||||
|
||||
function handleSave(row) {
|
||||
row.edit = false
|
||||
row.children.forEach((it) => (it.edit = false))
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
:deep(.el-table__indent) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
:deep(.el-table__placeholder) {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
236
src/views/Pers/Employee/Comp/DialogEmployee.vue
Normal file
236
src/views/Pers/Employee/Comp/DialogEmployee.vue
Normal file
@@ -0,0 +1,236 @@
|
||||
<template>
|
||||
<Dialog v-model="dialogVisible" :title="dialogTitle" style="width: 800px">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
v-loading="formLoading"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="80px"
|
||||
>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="员工姓名" prop="nickname">
|
||||
<el-input v-model="formData.nickname" placeholder="请输入员工姓名" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="用户性别">
|
||||
<el-radio-group v-model="formData.sex">
|
||||
<el-radio :label="1"> 男 </el-radio>
|
||||
<el-radio :label="2"> 女 </el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="入职日期" prop="hireDate">
|
||||
<el-date-picker
|
||||
v-model="formData.hireDate"
|
||||
type="date"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
placeholder="选择日期时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="职位" prop="job">
|
||||
<el-input v-model="formData.job" placeholder="请输入职位" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="手机号码" prop="mobile">
|
||||
<el-input v-model="formData.mobile" maxlength="11" placeholder="请输入手机号码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="邮箱" prop="email">
|
||||
<el-input v-model="formData.email" maxlength="50" placeholder="请输入邮箱" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" :offset="0">
|
||||
<el-form-item label="考勤方案" prop="kaoqinfangan">
|
||||
<el-select
|
||||
v-model="formData.kaoqinfangan"
|
||||
placeholder="选择考勤方案"
|
||||
clearable
|
||||
filterable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in kaoqinfanganOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" :offset="0">
|
||||
<el-form-item label="开通系统" prop="kaitongxitong">
|
||||
<el-select
|
||||
v-model="formData.kaitongxitong"
|
||||
placeholder="选择考勤方案"
|
||||
multiple
|
||||
clearable
|
||||
filterable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in kaitongxitongOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item v-if="formData.id === undefined" label="登录账号" prop="username">
|
||||
<el-input v-model="formData.username" placeholder="请输入登录账号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item v-if="formData.id === undefined" label="用户密码" prop="password">
|
||||
<el-input
|
||||
v-model="formData.password"
|
||||
placeholder="请输入用户密码"
|
||||
show-password
|
||||
type="password"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注">
|
||||
<el-input v-model="formData.remark" placeholder="请输入内容" type="textarea" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script name="DialogEmployee" setup>
|
||||
import { CommonStatusEnum } from '@/utils/constants'
|
||||
import { formatDate } from '@/utils/formatTime'
|
||||
|
||||
import * as UserApi from '@/api/system/user'
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
nickname: '',
|
||||
deptId: '',
|
||||
mobile: '',
|
||||
email: '',
|
||||
id: undefined,
|
||||
username: '',
|
||||
password: '',
|
||||
sex: 1,
|
||||
remark: '',
|
||||
status: CommonStatusEnum.ENABLE,
|
||||
hireDate: '',
|
||||
kaoqinfangan: undefined,
|
||||
kaitongxitong: []
|
||||
})
|
||||
const formRules = ref({
|
||||
nickname: [{ required: true, message: '员工姓名不能为空', trigger: 'blur' }],
|
||||
job: { required: true, message: '职位不能为空', trigger: 'blur' },
|
||||
email: [
|
||||
{
|
||||
type: 'email',
|
||||
message: '请输入正确的邮箱地址',
|
||||
trigger: ['blur', 'change']
|
||||
}
|
||||
],
|
||||
mobile: [{ required: true, message: '手机号不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
const kaoqinfanganOptions = ref([])
|
||||
const kaitongxitongOptions = ref([])
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type, id) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await UserApi.getUser(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
getOptions()
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
function getOptions() {
|
||||
kaoqinfanganOptions.value = []
|
||||
kaitongxitongOptions.value = []
|
||||
}
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
if (!formRef.value) return
|
||||
const valid = await formRef.value.validate()
|
||||
if (!valid) return
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value
|
||||
if (formType.value === 'create') {
|
||||
await UserApi.createUser(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await UserApi.updateUser(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
nickname: '',
|
||||
deptId: '',
|
||||
mobile: '',
|
||||
email: '',
|
||||
id: undefined,
|
||||
username: '',
|
||||
password: '',
|
||||
sex: 1,
|
||||
remark: '',
|
||||
status: CommonStatusEnum.ENABLE,
|
||||
hireDate: formatDate(new Date(), 'YYYY-MM-DD'),
|
||||
kaoqinfangan: undefined,
|
||||
kaitongxitong: []
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
@@ -11,18 +11,56 @@
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery">搜索</el-button>
|
||||
<el-button type="primary" plain @click="handleQuery">新增</el-button>
|
||||
<el-button @click="handleQuery" v-hasPermi="['pers:employee:search']">搜索</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['pers:employee:add']"
|
||||
>
|
||||
新增
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-table v-loading="loading" :data="tableList" border stripe>
|
||||
<el-table-column type="index" width="50" />
|
||||
<el-table-column label="用户姓名" prop="nickname" />
|
||||
<el-table-column label="部门" key="deptName" prop="deptName" />
|
||||
<el-table-column label="职位" prop="job" />
|
||||
<el-table-column label="手机号码" prop="mobile" width="120" />
|
||||
<el-table-column label="考勤方案" />
|
||||
<el-table-column label="在职状态" prop="status" width="150" />
|
||||
<el-table-column label="已开通系统" />
|
||||
<el-table-column label="在职状态" key="status" width="150">
|
||||
<template #default="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.status"
|
||||
:active-value="0"
|
||||
:inactive-value="1"
|
||||
v-hasPermi="['pers:employee:update']"
|
||||
@change="handleStatusChange(scope.row)"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="260">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['pers:employee:update']"
|
||||
>
|
||||
修改
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['pers:employee:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<Pagination
|
||||
:total="total"
|
||||
@@ -30,10 +68,12 @@
|
||||
v-model:limit="searchForm.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
<DialogEmployee ref="formRef" @success="getList" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script name="OAEmployee" setup>
|
||||
import DialogEmployee from './Comp/DialogEmployee.vue'
|
||||
const searchForm = ref({
|
||||
name: undefined,
|
||||
status: 0,
|
||||
@@ -41,6 +81,10 @@ const searchForm = ref({
|
||||
pageSize: 20
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
handleQuery()
|
||||
})
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
searchForm.value.pageNo = 1
|
||||
@@ -54,7 +98,7 @@ const total = ref(0)
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
tableList.value = [1, 2]
|
||||
tableList.value = [{ status: 0 }]
|
||||
// const data = await UserApi.getUserPage(queryParams)
|
||||
// tableList.value = data.list
|
||||
// total.value = data.total
|
||||
@@ -62,6 +106,41 @@ const getList = async () => {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type, id = undefined) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 修改用户状态 */
|
||||
const handleStatusChange = async (row) => {
|
||||
try {
|
||||
// 修改状态的二次确认
|
||||
const text = row.status === 0 ? '启用' : '停用'
|
||||
await message.confirm('确认要"' + text + '""' + row.nickname + '"用户吗?')
|
||||
// 发起修改状态
|
||||
await UserApi.updateUserStatus(row.id, row.status)
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {
|
||||
// 取消后,进行恢复按钮
|
||||
row.status = row.status === 0 ? 1 : 0
|
||||
}
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await UserApi.deleteUser(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
|
||||
105
src/views/Pers/Setting/Comp/AttendancePlan.vue
Normal file
105
src/views/Pers/Setting/Comp/AttendancePlan.vue
Normal file
@@ -0,0 +1,105 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-form :model="searchForm" inline>
|
||||
<el-form-item>
|
||||
<el-input v-model="searchForm.name" placeholder="方案名称" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-select v-model="searchForm.status" placeholder="启用状态" clearable filterable>
|
||||
<el-option label="启用" :value="0" />
|
||||
<el-option label="停用" :value="1" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery">搜索</el-button>
|
||||
<el-button type="primary" plain @click="openForm('create')"> 新增 </el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table v-loading="loading" :data="tableList" border stripe>
|
||||
<el-table-column type="index" width="50" />
|
||||
<el-table-column label="方案名称" prop="name" />
|
||||
<el-table-column label="启用状态" prop="status">
|
||||
<template #default="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.status"
|
||||
:active-value="0"
|
||||
:inactive-value="1"
|
||||
@change="handleStatusChange(scope.row)"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="200">
|
||||
<template #default="scope">
|
||||
<el-button type="primary" link @click="openForm('update', scope.row)"> 修改 </el-button>
|
||||
<el-button type="primary" link @click="handleDelete(scope.row.id)"> 删除 </el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="searchForm.pageNo"
|
||||
v-model:limit="searchForm.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<DialogPlan ref="planDialogRef" @success="getList" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script name="PersSetting" setup>
|
||||
import DialogPlan from './DialogPlan.vue'
|
||||
const searchForm = ref({
|
||||
name: undefined,
|
||||
status: undefined,
|
||||
pageNo: 1,
|
||||
pageSize: 20
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
handleQuery()
|
||||
})
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
searchForm.value.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
const loading = ref(false)
|
||||
const tableList = ref([])
|
||||
const total = ref(0)
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
tableList.value = [{ status: 0 }]
|
||||
// const data = await UserApi.getUserPage(queryParams)
|
||||
// tableList.value = data.list
|
||||
// total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const planDialogRef = ref()
|
||||
function openForm(type, row = undefined) {
|
||||
planDialogRef.value.open(type, row)
|
||||
}
|
||||
|
||||
const handleStatusChange = async (row) => {
|
||||
try {
|
||||
// 修改状态的二次确认
|
||||
const text = row.status === 0 ? '启用' : '停用'
|
||||
await message.confirm('确认要"' + text + '""' + row.name + '"方案吗?')
|
||||
// 发起修改状态
|
||||
// await UserApi.updateUserStatus(row.id, row.status)
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {
|
||||
// 取消后,进行恢复按钮
|
||||
row.status = row.status === 0 ? 1 : 0
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
158
src/views/Pers/Setting/Comp/DialogPlan.vue
Normal file
158
src/views/Pers/Setting/Comp/DialogPlan.vue
Normal file
@@ -0,0 +1,158 @@
|
||||
<template>
|
||||
<Dialog v-model="dialogVisible" :title="dialogTitle" style="width: 1200px">
|
||||
<el-form :model="form" ref="formRef" :rules="rules" label-width="80px">
|
||||
<el-form-item label="方案名称" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入方案名称" style="width: 240px" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div class="mt-10px mb-10px">
|
||||
<el-button type="primary" @click="handleAddYearPlan"> 添加年度考勤方案 </el-button>
|
||||
<span class="ml-20px font-bold">请配置每月计薪天数,计薪天数 = 应出勤天数 + 带薪假天数</span>
|
||||
</div>
|
||||
<el-table :data="form.planList" border stripe>
|
||||
<el-table-column label="年份" width="150px">
|
||||
<template #default="{ row }">
|
||||
<el-date-picker
|
||||
v-model="row.year"
|
||||
type="year"
|
||||
placeholder="选择年份"
|
||||
format="YYYY"
|
||||
value-format="YYYY"
|
||||
style="width: 120px"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
v-for="item in 12"
|
||||
:prop="item"
|
||||
:key="item"
|
||||
:label="item + '月'"
|
||||
width="140px"
|
||||
>
|
||||
<el-table-column label="应出勤">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-model="row[item].yingchuqin"
|
||||
size="small"
|
||||
:min="1"
|
||||
:max="31"
|
||||
:controls="false"
|
||||
style="width: 50px"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="带薪假">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-model="row[item].daixinjia"
|
||||
size="small"
|
||||
:min="0"
|
||||
:max="31"
|
||||
:controls="false"
|
||||
style="width: 50px"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" :width="80" fixed="right">
|
||||
<template #default="{ $index }">
|
||||
<Icon icon="ep:remove-filled" class="text-red-500" @click="handleRemove($index)" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<template #footer>
|
||||
<span>
|
||||
<el-button @click="dialogVisible = false">取消</el-button>
|
||||
<el-button :disabled="formLoading" type="primary" @click="submitForm">保存</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
|
||||
<script setup name="DialogAttendancePlan">
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('考勤方案设置')
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
|
||||
const formType = ref('create')
|
||||
/** 打开弹窗 */
|
||||
const open = async (type, row) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = type == 'create' ? `新增方案` : '修改方案'
|
||||
formType.value = type
|
||||
resetForm()
|
||||
|
||||
if (row?.id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
// comissionForm.value = await UserApi.getUser(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
const form = ref({})
|
||||
const rules = {
|
||||
name: { required: true, message: '方案名称不可为空', trigger: 'blur' }
|
||||
}
|
||||
function resetForm() {
|
||||
form.value = {
|
||||
name: undefined,
|
||||
planList: []
|
||||
}
|
||||
}
|
||||
|
||||
function handleAddYearPlan() {
|
||||
form.value.planList.push({
|
||||
year: new Date().getFullYear(),
|
||||
1: { yingchuqin: undefined, daixinjia: undefined },
|
||||
2: { yingchuqin: undefined, daixinjia: undefined },
|
||||
3: { yingchuqin: undefined, daixinjia: undefined },
|
||||
4: { yingchuqin: undefined, daixinjia: undefined },
|
||||
5: { yingchuqin: undefined, daixinjia: undefined },
|
||||
6: { yingchuqin: undefined, daixinjia: undefined },
|
||||
7: { yingchuqin: undefined, daixinjia: undefined },
|
||||
8: { yingchuqin: undefined, daixinjia: undefined },
|
||||
9: { yingchuqin: undefined, daixinjia: undefined },
|
||||
10: { yingchuqin: undefined, daixinjia: undefined },
|
||||
11: { yingchuqin: undefined, daixinjia: undefined },
|
||||
12: { yingchuqin: undefined, daixinjia: undefined }
|
||||
})
|
||||
}
|
||||
|
||||
const emit = defineEmits(['success'])
|
||||
const formRef = ref()
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
if (!formRef.value) return
|
||||
const valid = await formRef.value.validate()
|
||||
if (!valid) return
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
if (formType.value === 'create') {
|
||||
// await ClassApi.createClassType(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
// await ClassApi.updateClassType(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function handleRemove(index) {
|
||||
form.value.planList.splice(index, 1)
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
@@ -1,7 +1,15 @@
|
||||
<template>
|
||||
<div> 人事配置 </div>
|
||||
<el-tabs v-model="tabName">
|
||||
<el-tab-pane label="考勤方案" name="kqfa">
|
||||
<AttendancePlan />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</template>
|
||||
|
||||
<script setup name="PersSetting"></script>
|
||||
<script setup name="PersSetting">
|
||||
import AttendancePlan from './Comp/AttendancePlan.vue'
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
const tabName = ref('kqfa')
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
||||
|
||||
Reference in New Issue
Block a user