diff --git a/.env.development b/.env.development index 25cced7..0e57671 100644 --- a/.env.development +++ b/.env.development @@ -1,10 +1,10 @@ # 页面标题 -VUE_APP_TITLE = 若依管理系统 +VUE_APP_TITLE = 莳松管理系统 # 开发环境配置 ENV = 'development' -# 对嘛管理系统/开发环境 +# 莳松管理系统/开发环境 VUE_APP_BASE_API = '/dev-api' # 路由懒加载 diff --git a/.env.production b/.env.production index 0934cda..7607d56 100644 --- a/.env.production +++ b/.env.production @@ -1,8 +1,8 @@ # 页面标题 -VUE_APP_TITLE = 对嘛管理系统 +VUE_APP_TITLE = 莳松管理系统 # 生产环境配置 ENV = 'production' -# 对嘛管理系统/生产环境 +# 莳松管理系统/生产环境 VUE_APP_BASE_API = '/duima' diff --git a/.env.staging b/.env.staging index dac84fa..061ba5c 100644 --- a/.env.staging +++ b/.env.staging @@ -1,10 +1,10 @@ # 页面标题 -VUE_APP_TITLE = 对嘛管理系统 +VUE_APP_TITLE = 莳松管理系统 NODE_ENV = production # 测试环境配置 ENV = 'staging' -# 对嘛管理系统/测试环境 +# 莳松管理系统/测试环境 VUE_APP_BASE_API = '/stage-api' diff --git a/package.json b/package.json index ba1e881..a25b260 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "river", "version": "1.0.0", - "description": "若依管理系统", - "author": "对嘛", + "description": "莳松管理系统", + "author": "莳松", "license": "MIT", "scripts": { "dev": "vue-cli-service serve", diff --git a/public/favicon.ico b/public/favicon.ico index e263760..40ce6f9 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/public/favicon1.ico b/public/favicon1.ico new file mode 100644 index 0000000..e263760 Binary files /dev/null and b/public/favicon1.ico differ diff --git a/public/index.html b/public/index.html index c1b5d7d..4bbefa0 100644 --- a/public/index.html +++ b/public/index.html @@ -27,13 +27,13 @@ padding: 0.2em 0; } .logo { - position: absolute; + /* position: absolute; */ display: block; - left: 50%; - top: 50%; + /* left: 50%; + top: 50%; */ width: 100px; /* height: 162px; */ - transform: translate3d(-50%, -80px, 0); + /* transform: translate3d(-50%, -80px, 0); */ animation: twinkling 1.2s infinite ease-in-out; } /* .animated { @@ -54,21 +54,22 @@ } } .loading { - position: absolute; + /* position: absolute; */ + margin-top: 40px; display: block; - left: 50%; - top: 50%; - transform: translate3d(-50%, 80px, 0); + /* left: 50%; */ + /* top: 50%; */ + /* transform: translate3d(-50%, 80px, 0); */ color: #fefeff; font-size: 14px; } - canvas { + /* canvas { display: block; left: 50%; position: absolute; top: 50%; transform: translate3d(-50%, 100px, 0); - } + } */ #loader-wrapper { position: relative; @@ -76,6 +77,10 @@ height: 100%; background: #1a1a34; z-index: 1000; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; } diff --git a/src/api/finance/expense/accountExpense.js b/src/api/finance/expense/accountExpense.js new file mode 100644 index 0000000..0e8bcfe --- /dev/null +++ b/src/api/finance/expense/accountExpense.js @@ -0,0 +1,54 @@ +import request from '@/utils/request'; + +// 查询报销列表 +export function listExpense(query) { + return request({ + url: '/finance/expense/account/list', + method: 'get', + params: query + }); +} + +// 新增报销 +export function addExpense(data) { + return request({ + url: '/finance/expense/account', + method: 'post', + data: data + }); +} + +// 修改报销 +export function updateExpense(data) { + return request({ + url: '/finance/expense/account', + method: 'put', + data: data + }); +} + +// 删除报销 +export function removeExpense(data) { + return request({ + url: '/finance/expense/account/' + data, + method: 'delete' + }); +} + +// 导出报销 +export function exportExpense(query) { + return request({ + url: '/finance/expense/account/export', + method: 'get', + params: query + }); +} + +// 审核报销 +export function checkExpense(data) { + return request({ + url: '/finance/expense/account/check', + method: 'put', + data: data + }); +} diff --git a/src/api/finance/expense/meituanExpense.js b/src/api/finance/expense/meituanExpense.js new file mode 100644 index 0000000..3c53179 --- /dev/null +++ b/src/api/finance/expense/meituanExpense.js @@ -0,0 +1,54 @@ +import request from '@/utils/request'; + +// 查询报销列表 +export function listExpense(query) { + return request({ + url: '/finance/expense/meituan/list', + method: 'get', + params: query + }); +} + +// 新增报销 +export function addExpense(data) { + return request({ + url: '/finance/expense/meituan', + method: 'post', + data: data + }); +} + +// 修改报销 +export function updateExpense(data) { + return request({ + url: '/finance/expense/meituan', + method: 'put', + data: data + }); +} + +// 删除报销 +export function removeExpense(data) { + return request({ + url: '/finance/expense/meituan/' + data, + method: 'delete' + }); +} + +// 导出报销 +export function exportExpense(query) { + return request({ + url: '/finance/expense/meituan/export', + method: 'get', + params: query + }); +} + +// 审核报销 +export function checkExpense(data) { + return request({ + url: '/finance/expense/meituan/check', + method: 'put', + data: data + }); +} diff --git a/src/api/finance/expense/officeExpense.js b/src/api/finance/expense/officeExpense.js new file mode 100644 index 0000000..744e746 --- /dev/null +++ b/src/api/finance/expense/officeExpense.js @@ -0,0 +1,54 @@ +import request from '@/utils/request'; + +// 查询报销列表 +export function listExpense(query) { + return request({ + url: '/finance/expense/office/list', + method: 'get', + params: query + }); +} + +// 新增报销 +export function addExpense(data) { + return request({ + url: '/finance/expense/office', + method: 'post', + data: data + }); +} + +// 修改报销 +export function updateExpense(data) { + return request({ + url: '/finance/expense/office', + method: 'put', + data: data + }); +} + +// 删除报销 +export function removeExpense(data) { + return request({ + url: '/finance/expense/office/remove/' + data, + method: 'delete' + }); +} + +// 导出报销 +export function exportExpense(query) { + return request({ + url: '/finance/expense/office/export', + method: 'get', + params: query + }); +} + +// 审核报销 +export function checkExpense(data) { + return request({ + url: '/finance/expense/office/check', + method: 'put', + data: data + }); +} diff --git a/src/api/finance/expense/placeSignExpense.js b/src/api/finance/expense/placeSignExpense.js new file mode 100644 index 0000000..40c6674 --- /dev/null +++ b/src/api/finance/expense/placeSignExpense.js @@ -0,0 +1,54 @@ +import request from '@/utils/request'; + +// 查询报销列表 +export function listExpense(query) { + return request({ + url: '/finance/expense/placeSign/list', + method: 'get', + params: query + }); +} + +// 新增报销 +export function addExpense(data) { + return request({ + url: '/finance/expense/placeSign', + method: 'post', + data: data + }); +} + +// 修改报销 +export function updateExpense(data) { + return request({ + url: '/finance/expense/placeSign', + method: 'put', + data: data + }); +} + +// 删除报销 +export function removeExpense(data) { + return request({ + url: '/finance/expense/placeSign/' + data, + method: 'delete' + }); +} + +// 导出报销 +export function exportExpense(query) { + return request({ + url: '/finance/expense/placeSign/export', + method: 'get', + params: query + }); +} + +// 审核报销 +export function checkExpense(data) { + return request({ + url: '/finance/expense/placeSign/check', + method: 'put', + data: data + }); +} diff --git a/src/api/finance/expense/signExpense.js b/src/api/finance/expense/signExpense.js new file mode 100644 index 0000000..371d2aa --- /dev/null +++ b/src/api/finance/expense/signExpense.js @@ -0,0 +1,54 @@ +import request from '@/utils/request'; + +// 查询报销列表 +export function listExpense(query) { + return request({ + url: '/finance/expense/sign/list', + method: 'get', + params: query + }); +} + +// 新增报销 +export function addExpense(data) { + return request({ + url: '/finance/expense/sign', + method: 'post', + data: data + }); +} + +// 修改报销 +export function updateExpense(data) { + return request({ + url: '/finance/expense/sign', + method: 'put', + data: data + }); +} + +// 删除报销 +export function removeExpense(data) { + return request({ + url: '/finance/expense/sign/remove/' + data, + method: 'delete' + }); +} + +// 导出报销 +export function exportExpense(query) { + return request({ + url: '/finance/expense/sign/export', + method: 'get', + params: query + }); +} + +// 审核报销 +export function checkExpense(data) { + return request({ + url: '/finance/expense/sign/check', + method: 'put', + data: data + }); +} diff --git a/src/api/home.js b/src/api/home.js new file mode 100644 index 0000000..93166d9 --- /dev/null +++ b/src/api/home.js @@ -0,0 +1,56 @@ +import request from '@/utils/request' + +// 获取首页统计信息 +export function getCount() { + return request({ + url: '/system/home/count', + method: 'get' + }) +} + +export function getTodayPeopleRange() { + return request({ + url: '/system/home/range/today', + method: 'get' + }) +} + +export function getMonthPeopleRange() { + return request({ + url: '/system/home/range/month', + method: 'get' + }) +} + +//查询成交率 +export function dealRate() { + return request({ + url: '/system/home/rate/total', + method: 'get' + }) +} + + + +//查询本月成交率 +export function getMonthDealRateRange() { + return request({ + url: '/system/home/rate/month', + method: 'get' + }) +} +//查询上月成交率 +export function getLastDealRateRange() { + return request({ + url: '/system/home/rate/last', + method: 'get' + }) +} + +//查询考勤异常信息 +export function getCheckin() { + return request({ + url: '/system/home/checkin', + method: 'get' + }) +} diff --git a/src/api/login.js b/src/api/login.js index dfb52e0..7c248ad 100644 --- a/src/api/login.js +++ b/src/api/login.js @@ -68,3 +68,12 @@ export function getCodeImg() { timeout: 20000 }); } + + +export function getMsgCode(data) { + return request({ + url: '/msgcode', + method: 'get', + params: data + }) +} diff --git a/src/api/sch/school.js b/src/api/sch/school.js index 0bce887..31aff3a 100644 --- a/src/api/sch/school.js +++ b/src/api/sch/school.js @@ -7,6 +7,13 @@ export default { params: data }); }, + allList(data = {}) { + return request({ + url: '/sch/school/all', + method: 'get', + params: data + }); + }, getById(id) { return request({ url: `/sch/school/${id}`, diff --git a/src/api/statistic/areaStudent.js b/src/api/statistic/areaStudent.js new file mode 100644 index 0000000..d623b32 --- /dev/null +++ b/src/api/statistic/areaStudent.js @@ -0,0 +1,10 @@ +import request from '@/utils/request'; + +// 查询场地学员统计 +export function listReport(query) { + return request({ + url: '/statistic/area/student/list', + method: 'get', + params: query + }); +} diff --git a/src/api/statistic/placeStudent.js b/src/api/statistic/placeStudent.js new file mode 100644 index 0000000..dbb9a0e --- /dev/null +++ b/src/api/statistic/placeStudent.js @@ -0,0 +1,10 @@ +import request from '@/utils/request'; + +// 查询场地学员统计 +export function listReport(query) { + return request({ + url: '/statistic/place/student/list', + method: 'get', + params: query + }); +} diff --git a/src/api/system/employee.js b/src/api/system/employee.js index fcf2a5a..62c2718 100644 --- a/src/api/system/employee.js +++ b/src/api/system/employee.js @@ -40,9 +40,9 @@ export default { }); }, - getOffice(userId) { + getSignPlace(userId) { return request({ - url: '/system/employee/office/' + userId, + url: '/system/employee/signPlace/' + userId, method: 'get' }); } diff --git a/src/api/zs/clue.js b/src/api/zs/clue.js index 3427994..44837ff 100644 --- a/src/api/zs/clue.js +++ b/src/api/zs/clue.js @@ -117,17 +117,16 @@ export function getDistributeRecord(param) { // 查询跟踪记录 export function getFollowRecord(param) { return request({ - url: '/zs/clue/followrecord', + url: '/zs/followrecord/list', method: 'get', params: param }); } -// - +//查询咨询记录 export function getConsultRecord(param) { return request({ - url: '/zs/clue/consultrecord', + url: '/zs/consultrecord/list', method: 'get', params: param }); @@ -192,3 +191,22 @@ export function updateAccept(data) { data: data }); } + + +//查询线索分发信息 +export function getCluePlaceList(data) { + return request({ + url: `/zs/clue/place/info`, + method: 'get', + params: data + }); +} + +//保存线索分发信息 +export function saveCluePlace(data) { + return request({ + url: `/zs/clue/place`, + method: 'post', + data: data + }); +} diff --git a/src/api/zs/officeSign.js b/src/api/zs/placeSign.js similarity index 70% rename from src/api/zs/officeSign.js rename to src/api/zs/placeSign.js index ca2d01b..354f2cc 100644 --- a/src/api/zs/officeSign.js +++ b/src/api/zs/placeSign.js @@ -3,16 +3,16 @@ import request from '@/utils/request' // 查询报名点成交登记列表 export function listSign(query) { return request({ - url: '/zs/officesign/list', + url: '/zs/placeSign/list', method: 'get', params: query }) } // 查询报名点成交登记详细 -export function getSign(officesignId) { +export function getSign(placeSignId) { return request({ - url: '/zs/officesign/' + officesignId, + url: '/zs/placeSign/' + placeSignId, method: 'get' }) } @@ -20,7 +20,7 @@ export function getSign(officesignId) { // 新增报名点成交登记 export function addSign(data) { return request({ - url: '/zs/officesign', + url: '/zs/placeSign', method: 'post', data: data }) @@ -29,16 +29,16 @@ export function addSign(data) { // 修改报名点成交登记 export function updateSign(data) { return request({ - url: '/zs/officesign', + url: '/zs/placeSign', method: 'put', data: data }) } // 删除报名点成交登记 -export function delSign(officesignId) { +export function delSign(placeSignId) { return request({ - url: '/zs/officesign/' + officesignId, + url: '/zs/placeSign/' + placeSignId, method: 'delete' }) } @@ -46,7 +46,7 @@ export function delSign(officesignId) { //审核登记 export function checkSign(data) { return request({ - url: '/zs/officesign/check', + url: '/zs/placeSign/check', method: 'put', data: data }) diff --git a/src/assets/logo/logo.png b/src/assets/logo/logo.png index e263760..40ce6f9 100644 Binary files a/src/assets/logo/logo.png and b/src/assets/logo/logo.png differ diff --git a/src/assets/logo/logo1.png b/src/assets/logo/logo1.png new file mode 100644 index 0000000..e263760 Binary files /dev/null and b/src/assets/logo/logo1.png differ diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue index 3045f6d..9fc5e96 100644 --- a/src/layout/components/Navbar.vue +++ b/src/layout/components/Navbar.vue @@ -2,8 +2,9 @@ @@ -59,6 +59,11 @@ + + + + + @@ -81,7 +86,7 @@ - + @@ -92,7 +97,7 @@ - + @@ -148,10 +153,13 @@ export default { admin: localStorage.getItem('admin'), userId: localStorage.getItem('userId'), clueId: undefined, - clueForm: {}, + clueForm: { + followTime: undefined + }, rules: { name: { required: true, message: '姓名不为空', trigger: 'blur' }, - phone: { required: true, message: '联系方式不为空', trigger: 'blur' }, + phone: [{ required: true, message: '联系方式不为空', trigger: 'blur' }, + { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: '请输入正确的手机号码', trigger: 'blur' }], createTime: { required: true, message: '创建时间不为空', trigger: 'blur,change' }, consultTime: { required: true, message: '咨询时间不为空', trigger: 'blur,change' }, source: { required: true, message: '线索来源不为空', trigger: 'blur,change' }, @@ -173,6 +181,8 @@ export default { //获取clueId this.clueId = Number(this.$route.params.clueId) this.getAllPlaces() + this.getEmployee(); + this.getClueInfo(this.clueId); // 线索来源 this.getDicts('dm_source').then((response) => { @@ -182,7 +192,6 @@ export default { this.getDicts('dm_intention_state').then((response) => { this.intentionOptions = response.data; }); - this.getEmployee(); }, methods: { @@ -194,9 +203,9 @@ export default { this.saveNext = false const resp = await getClueInfo(clueId); if (resp.code == 200) { - this.clueForm = resp.data + this.clueForm = { ...resp.data } this.handleMapCenter(this.clueForm); - this.getConsultRecord(this.clueForm.clueId); + this.getConsultRecord(this.clueForm.phone); } }, resetForm() { @@ -211,19 +220,26 @@ export default { intentionState: undefined, followInfo: undefined, followTime: undefined, - followUser: undefined, + followUser: [], signupInfo: undefined, requirement: undefined, licenseType: undefined, lng: undefined, lat: undefined } + + if (this.admin == 'false') { + this.clueForm.followUser.push(Number(this.userId)) + } }, // 查询咨询记录 - getConsultRecord(clueId) { - getConsultRecord({ clueId }).then((resp) => { + getConsultRecord(phone) { + getConsultRecord({ phone }).then((resp) => { if (resp && resp.code === 200 && resp.data) { this.consultRecord = resp.data + if (this.consultRecord && this.consultRecord.length > 0) { + this.clueForm.consultCount = this.consultRecord.length + } } }) }, @@ -267,9 +283,9 @@ export default { }, // 查询场地信息 async getAllPlaces() { - const resp = await getAllPlaces(); + const resp = await getAllPlaces({ status: '0' }); if (resp.code == 200) { - this.placeList = resp.data.filter((item) => item.showInMap); + this.placeList = resp.data.filter((item) => item.schoolShow && item.showInMap); this.$nextTick(() => { this.$refs.placeMap.handleMarkers(this.placeList); }); @@ -293,8 +309,17 @@ export default { resp = await addClue(this.clueForm) this.canSubmit = false if (resp.code === 200) { - this.$message.success('新增成功') + if (resp.data && resp.data == 1) { + this.$message({ + message: resp.msg, + type: 'warning' + }); + } else { + this.$message.success('新增成功') + + } if (this.saveNext) { + this.canSubmit = true this.resetForm() } else { this.toBackClue(); diff --git a/src/views/zs/clue/columns.js b/src/views/zs/clue/columns.js index 13ce076..b2131e4 100644 --- a/src/views/zs/clue/columns.js +++ b/src/views/zs/clue/columns.js @@ -32,6 +32,14 @@ export const defaultColumns = [{ }, { key: 4, + prop: 'weChat', + label: '微信号', + width: 140, + visible: true, + overflow: false + }, + { + key: 5, prop: 'address', label: '位置', width: 140, @@ -39,14 +47,14 @@ export const defaultColumns = [{ overflow: false }, { - key: 5, + key: 6, prop: 'requirement', label: '学员诉求', visible: true, overflow: false }, { - key: 6, + key: 7, prop: 'licenseType', label: '咨询车型', width: 140, @@ -54,7 +62,7 @@ export const defaultColumns = [{ overflow: false }, { - key: 7, + key: 8, prop: 'followTime', label: '下次跟进时间', width: 120, @@ -62,7 +70,7 @@ export const defaultColumns = [{ overflow: false }, { - key: 8, + key: 9, prop: 'firstFollowUserName', label: '首次跟进人员', width: 120, @@ -70,7 +78,7 @@ export const defaultColumns = [{ overflow: false }, { - key: 9, + key: 10, prop: 'followUserName', label: '跟进人员', width: 140, @@ -78,7 +86,7 @@ export const defaultColumns = [{ overflow: false }, { - key: 10, + key: 11, prop: 'recentLook', label: '是否近期看场地', width: 140, @@ -86,7 +94,7 @@ export const defaultColumns = [{ overflow: false }, { - key: 11, + key: 12, prop: 'offlineReceiverName', label: '线下接待人员', width: 140, @@ -94,7 +102,7 @@ export const defaultColumns = [{ overflow: false }, { - key: 12, + key: 13, prop: 'clueMemo', label: '备注', width: 140, diff --git a/src/views/zs/clue/components/DistributeFormDialog.vue b/src/views/zs/clue/components/DistributeFormDialog.vue new file mode 100644 index 0000000..c29c688 --- /dev/null +++ b/src/views/zs/clue/components/DistributeFormDialog.vue @@ -0,0 +1,116 @@ + + + + \ No newline at end of file diff --git a/src/views/zs/clue/components/MemoFormDialog.vue b/src/views/zs/clue/components/MemoFormDialog.vue new file mode 100644 index 0000000..dedea27 --- /dev/null +++ b/src/views/zs/clue/components/MemoFormDialog.vue @@ -0,0 +1,83 @@ + + + + \ No newline at end of file diff --git a/src/views/zs/clue/components/PublicDialog.vue b/src/views/zs/clue/components/PublicDialog.vue index 53648e5..2951c5d 100644 --- a/src/views/zs/clue/components/PublicDialog.vue +++ b/src/views/zs/clue/components/PublicDialog.vue @@ -1,18 +1,18 @@