master
xiaoning 1 month ago
parent ae30756850
commit af73845fe9

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

@ -7,6 +7,12 @@ export function listTeacher(query) {
method: 'get',
params: query
})
}export function getUserForTeacher(query) {
return request({
url: '/system/teacher/getUserForTeacher',
method: 'get',
params: query
})
}
// 查询员工信息详细

@ -18,41 +18,6 @@ export function getOmsAftersale(id) {
})
}
// 新增订单售后
export function addOmsAftersale(data) {
return request({
url: '/oms/aftersale',
method: 'post',
data: data
})
}
// 修改订单售后
export function updateOmsAftersale(data) {
return request({
url: '/oms/aftersale',
method: 'put',
data: data
})
}
// 删除订单售后
export function delOmsAftersale(id) {
return request({
url: '/oms/aftersale/' + id,
method: 'delete'
})
}
// 导出订单售后
export function exportOmsAftersale(query) {
return request({
url: '/oms/aftersale/export',
method: 'get',
params: query
})
}
// 售后订单操作
export function dealWithAftersale(data){
return request({

@ -76,7 +76,7 @@ export function deliverProduct(data){
data: data
})
}
// 修改收件人信息
export function updateReceiverAddress(data){
return request({
url: '/oms/order/receiver/update',

@ -2,7 +2,7 @@ import request from '@/utils/request'
export function dashboardData(query) {
return request({
url: '/report/dashboard/data',
url: '/api/report/dashboard/data',
method: 'get',
params: query
})

@ -1,62 +0,0 @@
import request from '@/utils/request'
// 查询列表
export function listSchool(query) {
return request({
url: '/api/sc/school/list/searchList',
method: 'get',
params: query
})
}
// select
export function listSelect(query) {
return request({
url: '/api/sc/school/list/select',
method: 'get',
params: query
})
}
// 查询详细
export function getSchool(schoolId) {
return request({
url: '/api/sc/school/info/detailById/' + schoolId,
method: 'get'
})
}
// 新增
export function addSchool(data) {
return request({
url: '/api/sc/school/add/addScSchool',
method: 'post',
data: data
})
}
// 修改
export function updateSchool(data) {
return request({
url: '/api/sc/school/update/updateScSchool',
method: 'put',
data: data
})
}
// 删除
export function delSchool(schoolId) {
return request({
url: '/api/sc/school/delete/deleteById/' + schoolId,
method: 'delete'
})
}
// 导出
export function exportSchool(query) {
return request({
url: '/api/sc/school/export',
method: 'get',
params: query
})
}

@ -1,21 +1,7 @@
import request from '@/utils/request'
// 查询部门列表
export function listDept(query) {
return request({
url: '/api/system/dept/list/searchList',
method: 'get',
params: query
})
}
// 查询部门详细
export function getDept(deptId) {
return request({
url: '/api/system/dept/info/detailById/' + deptId,
method: 'get'
})
}
// 查询部门下拉树结构
export function treeSelect() {
@ -25,32 +11,6 @@ export function treeSelect() {
})
}
// 新增部门
export function addDept(data) {
return request({
url: '/api/system/dept/add/addDept',
method: 'post',
data: data
})
}
// 修改部门
export function updateDept(data) {
return request({
url: '/api/system/dept/update/updateDept',
method: 'put',
data: data
})
}
// 删除部门
export function delDept(deptId) {
return request({
url: '/api/system/dept/delete/deleteById/' + deptId,
method: 'delete'
})
}
// 校区列表
export function campusList() {
return request({
@ -59,13 +19,7 @@ export function campusList() {
})
}
// 当前用户可选校区列表
export function campusListLimitByUser() {
return request({
url: '/api/system/dept/list/campusListLimitByUser',
method: 'get'
})
}
// 可选校区类型 全部校区/部分校区
export function campusSelect() {
@ -74,11 +28,3 @@ export function campusSelect() {
method: 'get'
})
}
// 当前用户 可选校区类型 全部校区/部分校区
export function campusSelectLimitByUser() {
return request({
url: '/api/system/dept/list/campusSelectLimitByUser',
method: 'get'
})
}

@ -50,14 +50,7 @@ export function delData(dictCode) {
method: 'delete'
})
}
// 删除字典数据
export function listByTypes(dictTypes) {
return request({
url: '/system/dict/data/by_types',
method: 'POST',
data: dictTypes
})
}
// 删除字典数据
export function allByTypes(dictTypes) {

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1602987947451" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7361" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M210.041784 898.610198 139.300626 898.610198 139.300626 105.561198 210.041784 105.561198Z" p-id="7362" fill="#F56C6C"></path><path d="M284.506752 105.561198 284.506752 898.610198 820.653709 898.610198 820.653709 105.561198 742.464929 105.561198 742.464929 503.951697 552.580231 502.08621 552.580231 105.561198Z" p-id="7363" fill="#F56C6C"></path></svg>

After

Width:  |  Height:  |  Size: 729 B

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1603003660672" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12310" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M380.48256 764.586667h549.495467c20.821333 0 37.701973 19.10272 37.701973 42.666666s-16.878933 42.666667-37.700267 42.666667H370.500267c-5.121707 0-10.006187-1.155413-14.45888-3.2512 15.377067-21.307733 24.439467-47.42144 24.439466-75.651413V764.586667z m0-49.493334v-71.68H846.506667V244.053333H291.05152c-26.036907-23.338667-60.4928-37.546667-98.193067-37.546666-5.758293 0-11.43808 0.329387-17.024 0.971093C187.4944 186.53696 209.85344 172.373333 235.52 172.373333h614.4c37.701973 0 68.266667 30.564693 68.266667 68.266667v406.186667c0 37.701973-30.564693 68.266667-68.266667 68.266666H380.48256z m70.97856-179.698346c-6.882987 12.520107-12.65152 14.056107-16.815787 15.348053-0.529067 0.16384-1.05984 0.3072-1.595733 0.433493l-86.40512 20.3264a22.5024 22.5024 0 0 0-17.36192 21.89312v177.621334c0 43.501227-35.7632 78.902613-79.807147 78.902613H137.833813c-2.67264 0-18.23232-1.385813-22.734506-3.5072a17.179307 17.179307 0 0 0-2.077014-0.8192C81.175893 835.26656 58.026667 806.002347 58.026667 771.01568V573.842773c0-43.501227 35.7632-78.912853 79.807146-78.912853h21.497174c14.359893-0.12288 16.843093 0 27.65312 0 4.29568 0 7.49568 0.075093 12.21632 0h50.425173l15.7952 0.264533c3.464533 0.128 6.935893 0.023893 10.386773-0.310613l120.261974-17.36704a22.53312 22.53312 0 0 0 14.953813-8.9088l83.602773-113.984853c11.328853-15.394133 31.957333-19.684693 46.260907-9.361067l6.36416 4.601173c14.301867 10.1632 16.728747 30.952107 5.399893 46.35648l-92.050773 125.392214c-1.28512 1.706667-7.855787 12.076373-9.1392 13.78304zM192.858453 447.146667C139.98592 447.146667 97.28 404.657493 97.28 352.413013 97.28 300.166827 139.987627 257.706667 192.858453 257.706667 245.521067 257.706667 288.426667 300.214613 288.426667 352.45056 288.426667 404.6848 245.72928 447.146667 192.858453 447.146667zM636.586667 563.2h107.52c15.081813 0 27.306667 12.224853 27.306666 27.306667s-12.224853 27.306667-27.306666 27.306666h-107.52c-15.081813 0-27.306667-12.224853-27.306667-27.306666s12.224853-27.306667 27.306667-27.306667z" p-id="12311" fill="#E6A23C"></path></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1602948236893" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3304" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M512 73.142857v292.571429l109.714286-58.514286L731.428571 365.714286V73.142857h73.142858a73.142857 73.142857 0 0 1 73.142857 73.142857v731.428572a73.142857 73.142857 0 0 1-73.142857 73.142857H219.428571a73.142857 73.142857 0 0 1-73.142857-73.142857V146.285714a73.142857 73.142857 0 0 1 73.142857-73.142857h292.571429zM329.142857 658.285714a36.571429 36.571429 0 0 0 0 73.142857h365.714286a36.571429 36.571429 0 0 0 0-73.142857h-365.714286z" p-id="3305" fill="#46a0fc"></path></svg>

After

Width:  |  Height:  |  Size: 858 B

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1603005378631" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="20596" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M300.8 150.4L240 89.6C136 166.4 68.8 288 62.4 425.6h86.4c6.4-113.6 64-212.8 152-275.2z m576 275.2h86.4C955.2 288 888 166.4 784 88l-60.8 60.8c88 64 145.6 163.2 153.6 276.8zM792 448c0-131.2-91.2-241.6-214.4-272V147.2c0-35.2-28.8-64-64-64s-64 28.8-64 64V176c-123.2 28.8-214.4 139.2-214.4 272v236.8l-86.4 86.4v43.2H880v-43.2l-86.4-86.4V448zM512 942.4c6.4 0 11.2 0 17.6-1.6 27.2-4.8 51.2-25.6 62.4-51.2 4.8-9.6 6.4-20.8 6.4-33.6H425.6c0 46.4 38.4 86.4 86.4 86.4z m0 0" p-id="20597" fill="#409EFF"></path></svg>

After

Width:  |  Height:  |  Size: 883 B

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1602987052760" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8207" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M825.7 146H691.3c-6.3-27.5-31.7-48.7-61.4-48.7h-66.6c-8.5-21.2-28.6-34.9-51.8-34.9-23.3 0-43.4 13.8-51.8 34.9H392c-29.6 0-55 21.2-61.4 48.7H196.2c-34.9 0-61.4 28.6-61.4 63.5v683.4c0 34.9 27.5 63.5 61.4 63.5h628.4c34.9 0 64.5-28.6 64.5-63.5V209.5c1.1-34.9-28.5-63.5-63.4-63.5z m-313.2 30.7c28.6 0 50.8 23.3 50.8 50.8 0 28.6-23.3 50.8-50.8 50.8-28.6 0-50.8-23.3-50.8-50.8s22.3-50.8 50.8-50.8z m193.6 525.8c0 12.7-10.6 23.3-23.3 23.3H342.2c-12.7 0-23.3-10.6-23.3-23.3v-21.2c0-12.7 10.6-23.3 23.3-23.3h340.6c12.7 0 23.3 10.6 23.3 23.3v21.2z m0-214.8c0 12.7-10.6 23.3-23.3 23.3H342.2c-12.7 0-23.3-10.6-23.3-23.3v-21.2c0-12.7 10.6-23.3 23.3-23.3h340.6c12.7 0 23.3 10.6 23.3 23.3v21.2z" fill="#F56C6C" p-id="8208"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1603004755390" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="18362" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M979.316364 719.220364c49.058909 44.311273 64.232727 154.158545 6.516363 223.790545-88.994909 107.147636-359.330909 126.510545-593.92-66.653091-188.043636-154.530909-250.600727-379.345455-114.688-542.999273C494.498909 71.68 688.128 266.24 688.128 266.24c105.472 113.570909 2.327273 206.941091 95.604364 332.706909 71.866182 96.814545 109.474909 42.449455 195.584 120.180364zM64.884364 512a63.860364 63.860364 0 1 1 0 127.720727 63.860364 63.860364 0 0 1 0-127.720727z m0-191.581091a63.860364 63.860364 0 1 1 0 127.720727 63.860364 63.860364 0 0 1 0-127.720727z m221.556363-112.826182a78.848 78.848 0 1 1-157.602909 0 78.848 78.848 0 0 1 157.602909 0z m129.768728-14.894545a95.883636 95.883636 0 1 1 0-191.767273 95.883636 95.883636 0 0 1 0 191.767273z" fill="#E6A23C" p-id="18363"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1603004667130" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="17490" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M228.396827 552.427758l136.51621-69.091588c0 0 122.44882 145.778154 141.398404 358.491791l-104.565521 45.064358C401.746944 886.891296 262.036995 725.995839 228.396827 552.427758L228.396827 552.427758zM423.562808 899.748115l89.284489-34.016745-17.004279 76.526931L423.562808 899.748115zM123.855866 82.71998l-3.015683-0.01228c-5.339612 0.638543-10.704806 1.692548-16.138562 3.671623-113.157199 41.001833 55.43045 386.470005 116.76947 447.874517l136.158053-68.719104c0 0-65.850777-261.491573-163.219385-352.453261C163.350368 84.065628 123.855866 82.71998 123.855866 82.71998zM699.286524 266.74318l260.238023 0 0 63.739696L699.286524 330.482877 699.286524 266.74318 699.286524 266.74318zM575.241346 568.763818l382.437156 0 0 61.092403L575.241346 629.856221 575.241346 568.763818 575.241346 568.763818zM572.636009 651.954519M490.14218 880.952027l469.38339 0 0 56.796564L490.14218 937.74859 490.14218 880.952027 490.14218 880.952027z" p-id="17491" fill="#F56C6C"></path></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.0 KiB

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1602987769939" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6457" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M779.7 735.1c14.8-2.3 25-16.3 22.7-31.1l-7.1-45.6c-2-12.5-12.3-21.8-24.4-22.9-1.2-43-2.2-81-2.2-81s-8.3-3.3-32.5-3.3c-15.9 0-31.1 1.4-62.8 6.2-13.1 1.7-25 4.5-35.8 7.4-63.6 15.3-97.1 41.5-97.1 41.5h-56.8s-33.5-26.1-97.1-41.5c-10.8-2.8-22.7-5.7-35.8-7.4-31.5-4.7-46.6-6.2-62.4-6.2-24.1 0-32.4 3.3-32.4 3.3s-1.3 38-2.7 81c-12.2 1.1-22.6 10.3-24.5 22.9l-7.1 45.6c-2.3 14.8 7.9 28.8 22.7 31.1 1.9 0.3 3.8 0.4 5.6 0.3-4.2 85.8-12.1 102.8-12.1 102.8s23.8 0.6 99.3 15.3c2.3 0.6 4 0.6 6.3 1.1 84.1 17 140.3 57.4 140.3 57.4h56.8s14.2-10.2 38.6-22.2c25-12.5 60.2-26.7 101.7-35.2 2.3-0.6 4-0.6 6.3-1.1 75.5-14.8 99.9-15.3 99.9-15.3s-7.9-17-12.5-102.8c1.5 0.1 3.3 0 5.1-0.3z m-99.9 81.8l-0.9 0.2-0.2 0.1h-0.1c-1.3 0.2-3.4 0.5-5.9 1.1-47.4 9.8-86 26.2-110.1 38.2-14.5 7.1-25.7 13.6-33.2 18.3h-34.6c-21.4-13.3-73.6-42.2-143.4-56.5-2.5-0.6-4.6-0.9-5.9-1.1h-0.1l-0.2-0.1-0.9-0.2c-30.2-5.9-46.2-9.6-63.7-12 3.1-26.5 6.5-49.9 8.2-106.7 1-35.6 2.5-80 3.4-109.6 16.6 0.3 29.5 2.2 53.1 5.7l0.4 0.1h0.4c11.4 1.5 22.1 4.1 31.1 6.5l0.4 0.1 0.4 0.1c52.1 12.6 81 33.2 83.1 34.7l9.7 7.8H540.7l12.7 0.4 10.1-8.1c2.1-1.5 30.9-22.1 83.1-34.7l0.4-0.1 0.4-0.1c9-2.4 19.7-5 31.1-6.5h0.6c23.7-3.5 36.7-5.5 53.5-5.7 0.8 29.7 2 74 3.1 109.6v0.2c2 56.7 5.5 80 8.7 106.5-18.1 2.1-34.2 5.9-64.6 11.8z" p-id="6458" fill="#E6A23C"></path><path d="M356.7 514.8c15.5 2.1 29.1 5.3 40.3 8.3 48.9 11.8 82.4 29.4 99.7 40.2h30.6c17.3-10.7 50.8-28.3 99.7-40.2 11.3-3 24.8-6.2 40.3-8.3 17.7-2.6 34-4.5 48.8-5.5-27.7-21.6-58.9-38.9-92.6-50.9 48.4-34.6 79.6-91.1 79.6-155.2C703.1 197.6 617.5 112 512 112s-191.1 85.6-191.1 191.2c0 64 31.2 120.6 79.6 155.2-33.7 12-64.9 29.3-92.6 50.9 14.8 1 31.1 2.8 48.8 5.5z" p-id="6459" fill="#E6A23C"></path></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -256,6 +256,7 @@
</el-dialog>
</template>
<script>
import { selectDictLabel } from '@/utils/commonUtils'
import staffSelect from '@/components/system/staff/staffSelect'
import claTimeSelect from '@/components/sc/claTime/claTimeSelect'
import roomSelect from '@/components/sc/base/roomSelect'
@ -425,7 +426,7 @@ export default {
this.getDictListByDictType('charge_type').then(response => {
this.chargeTypeOptions = response.data
})
this.getDictListByDictType('sex').then(response => {
this.getDictListByDictType('sys_user_sex').then(response => {
this.sexOptions = response.data
})
this.getDictListByDictType('attend_status').then(response => {
@ -487,13 +488,13 @@ export default {
this.msgError('近日无计划排课,无法排课记上课')
},
sexFormatter(row, column) {
return this.selectDictLabel(this.sexOptions, row.sex)
return selectDictLabel(this.sexOptions, row.sex)
},
chargeTypeFormatter(row, column) {
return this.selectDictLabel(this.chargeTypeOptions, row.chargeType)
return selectDictLabel(this.chargeTypeOptions, row.chargeType)
},
studentCourseStatusFormatter(row, column) {
return this.selectDictLabel(this.studentCourseStatusOptions, row.status)
return selectDictLabel(this.studentCourseStatusOptions, row.status)
},
getList() {
searchCourseClaStudent(this.queryParams).then(response => {

@ -171,6 +171,7 @@
</el-dialog>
</template>
<script>
import { selectDictLabel } from '@/utils/commonUtils'
import staffSelect from '@/components/system/staff/staffSelect'
import roomSelect from '@/components/sc/base/roomSelect'
import { allDetailInfoById } from '@/api/school/sc/cla'
@ -276,7 +277,7 @@ export default {
this.getDictListByDictType('charge_type').then(response => {
this.chargeTypeOptions = response.data
})
this.getDictListByDictType('sex').then(response => {
this.getDictListByDictType('sys_user_sex').then(response => {
this.sexOptions = response.data
})
this.getDictListByDictType('attend_status').then(response => {
@ -335,13 +336,13 @@ export default {
this.form.classTheme = claTimeInfo.classTheme
},
sexFormatter(row, column) {
return this.selectDictLabel(this.sexOptions, row.sex)
return selectDictLabel(this.sexOptions, row.sex)
},
chargeTypeFormatter(row, column) {
return this.selectDictLabel(this.chargeTypeOptions, row.chargeType)
return selectDictLabel(this.chargeTypeOptions, row.chargeType)
},
studentCourseStatusFormatter(row, column) {
return this.selectDictLabel(this.studentCourseStatusOptions, row.status)
return selectDictLabel(this.studentCourseStatusOptions, row.status)
},
// ,
loadCourseClaStudentAndAttendDetail() {

@ -98,30 +98,33 @@
</div>
<el-col :span="12">
<el-form-item label="上课时间:" prop="startTime">
<el-time-select
v-model="form.startTime"
size="small"
:picker-options="{
start: '08:00',
step: '00:30',
end: '19:00'
}"
placeholder="选择上课时间"
/>
<el-input v-model="form.startTime" size="small" placeholder="请输入上课时间" />
<!-- <el-time-select-->
<!-- v-model="form.startTime"-->
<!-- size="small"-->
<!-- :picker-options="{-->
<!-- start: '08:00',-->
<!-- step: '00:30',-->
<!-- end: '19:00'-->
<!-- }"-->
<!-- placeholder="选择上课时间"-->
<!-- />-->
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="下课时间:" prop="endTime">
<el-time-select
v-model="form.endTime"
size="small"
:picker-options="{
start: '08:00',
step: '00:30',
end: '20:00'
}"
placeholder="选择下课时间"
/>
<el-input v-model="form.endTime" size="small" placeholder="请输入下课时间" />
<!-- <el-time-select-->
<!-- v-model="form.endTime"-->
<!-- size="small"-->
<!-- :picker-options="{-->
<!-- start: '08:00',-->
<!-- step: '00:30',-->
<!-- end: '20:00'-->
<!-- }"-->
<!-- placeholder="选择下课时间"-->
<!-- />-->
</el-form-item>
</el-col>
<el-col :span="12">
@ -162,6 +165,7 @@
</el-dialog>
</template>
<script>
import { selectDictLabel } from '@/utils/commonUtils'
import claSelect from '@/components/sc/course/cla/claSelect'
import deptSelect from '@/components/system/dept/deptSelect'
import staffSelect from '@/components/system/staff/staffSelect'
@ -246,10 +250,20 @@ export default {
{ required: true, message: '是否过滤节假日', trigger: 'blur' }
],
startTime: [
{ required: true, message: '上课时间不能为空', trigger: 'blur' }
{ required: true, message: '上课时间不能为空', trigger: 'blur' },
{
pattern: /^([01]?[0-9]|2[0-3]):([0-5][0-9])$/,
message: "时间格式应为HH:mm",
trigger: "blur"
}
],
endTime: [
{ required: true, message: '下课时间不能为空', trigger: 'blur' }
{ required: true, message: '下课时间不能为空', trigger: 'blur' },
{
pattern: /^([01]?[0-9]|2[0-3]):([0-5][0-9])$/,
message: "时间格式应为HH:mm",
trigger: "blur"
}
],
teacherId: [
{ required: true, message: '任课教师不能为空', trigger: 'blur' }
@ -316,7 +330,7 @@ export default {
},
//
repeatTypeFormat(row, column) {
return this.selectDictLabel(this.repeatTypeOptions, row.repeatType)
return selectDictLabel(this.repeatTypeOptions, row.repeatType)
},
//
cancel() {

@ -48,6 +48,7 @@
</div>
</template>
<script>
import { selectDictLabel } from '@/utils/commonUtils'
import { listClaTimeAttend } from '@/api/school/sc/cla/claTimeAttend'
export default {
components: {
@ -99,7 +100,7 @@ export default {
})
},
chargeTypeFormatter(row, column) {
return this.selectDictLabel(this.chargeTypeOptions, row.chargeType)
return selectDictLabel(this.chargeTypeOptions, row.chargeType)
}
}
}

@ -35,14 +35,19 @@
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-col :span="12">
<el-form-item label="上课模式:" prop="teachingMode" class="align-left">
<el-radio-group v-model="form.teachingMode">
<el-radio label="1">班课</el-radio>
<el-radio disabled label="2">一对一</el-radio>
<el-radio label="2">一对一</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="教练课时费:" prop="claFee">
<el-input v-model="form.claFee" placeholder="请输入课时费金额(元/节)" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
@ -112,6 +117,7 @@ export default {
//
form: {
courseCampus: undefined,
claFee:0.0,
teachingMode: '1',
partCampus: [],
sale:'1',
@ -300,10 +306,12 @@ export default {
color: rgba(0,0,0,.85);
font-weight: 500;
font-size: 16px;
display: flex;
&.top {
padding-top: 0px;
}
.title-content{
border-left: 3px solid #409EFF;
padding-left: 10px;
}

@ -1,113 +0,0 @@
<template>
<el-select
v-model="staffId"
v-select-load-more="loadStaff"
filterable
:clearable="clearable"
:placeholder="placeholder"
default-first-option
size="small"
@change="handleSelect"
>
<el-option
v-for="item in staffList"
:key="item.staffId"
:label="item.staffName"
:value="item.staffId"
>
<div>
<div class="inline-block item">
<span class="title">姓名:</span>
<span class="option">{{ item.staffName }}</span>
</div>
<div class="inline-block item">
<span class="title">联系电话:</span>
<span class="option">{{ item.phone }}</span>
</div>
</div>
</el-option>
</el-select>
</template>
<script>
import { listSchool } from '@/api/school/sc/school'
export default {
props: {
clearable: {
type: Boolean,
default: false
},
teacher: {
type: String,
default: undefined
},
placeholder: {
type: String,
default: '选择员工'
},
value: {
type: String,
default: undefined
}
},
data() {
return {
staffId: this.value,
staffList: [],
pageNum: 1,
hasMoreData: false
}
},
watch: {
value: {
handler(newValue, oldValue) {
this.staffId = newValue
},
immediate: true
}
},
created() {
this.loadStaff()
},
methods: {
loadStaff: function() {
if (this.pageNum === 1) {
listSchool({
pageNum: this.pageNum,
teacher: this.teacher
}).then(response => {
if (response.respCode === '0000') {
this.staffList = response.data.rows
this.hasMoreData = response.data.rows.length > 0
this.pageNum = this.pageNum + 1
} else {
this.msgError(response.respMsg)
}
})
} else if (this.hasMoreData) {
listSchool({
pageNum: this.pageNum
}).then(response => {
if (response.respCode === '0000') {
this.staffList = this.staffList.concat(response.data.rows)
this.hasMoreData = response.data.rows.length > 0
this.pageNum = this.pageNum + 1
} else {
this.msgError(response.respMsg)
}
})
}
},
handleSelect: function(val) {
this.$emit('input', val)
this.$emit('change', val)
}
}
}
</script>
<style ref="stylesheet/scss" lang="scss" scoped>
.option{
padding-right: 15px;
color: #333;
font-weight: normal;
}
</style>

@ -51,8 +51,8 @@
<el-col v-for="(item, index) in contactArray" :key="index" :span="24" style="text-align: left;">
<el-form-item label="联系电话:">
<el-input v-model="contactArray[index].contactPhone" style="width: 200px;" placeholder="联系电话" />
<el-button v-if="index === 0 && contactArray.length > 0" style="padding: 3px 5px;margin-left: 5px;" type="primary" icon="el-icon-plus" size="mini" @click="handleAddContactInfo()" />
<el-button v-if="index > 0" style="padding: 3px 5px;margin-left: 5px;" type="danger" icon="el-icon-minus" size="mini" @click="handleDeleteContactInfo(index)" />
<!-- <el-button v-if="index === 0 && contactArray.length > 0" style="padding: 3px 5px;margin-left: 5px;" type="primary" icon="el-icon-plus" size="mini" @click="handleAddContactInfo()" />-->
<!-- <el-button v-if="index > 0" style="padding: 3px 5px;margin-left: 5px;" type="danger" icon="el-icon-minus" size="mini" @click="handleDeleteContactInfo(index)" />-->
</el-form-item>
</el-col>
</el-row>
@ -67,7 +67,6 @@
<script>
import { addStudent, getStudent, updateStudent } from '@/api/school/sc/student'
import { listSelect as listSchoolSelect } from '@/api/school/sc/school'
import moment from 'moment'
export default {
@ -79,8 +78,6 @@ export default {
form: {
sex: '2'
},
//
schoolOptions: [],
//
sexOptions: [],
rules: {
@ -100,7 +97,7 @@ export default {
loadingSelect: false,
//
contactArray: [{
contactRelation: 'daddy',
contactRelation: 'self',
contactNick: '',
contactPhone: ''
}],
@ -117,7 +114,6 @@ export default {
this.getDictListByDictType('contact_relation').then(response => {
this.contactRelationOptions = response.data
})
this.schoolSelect('')
},
//
cancel() {
@ -136,7 +132,7 @@ export default {
}
this.resetForm('form')
this.contactArray = [{
contactRelation: 'daddy',
contactRelation: 'self',
contactNick: '',
contactPhone: ''
}]
@ -200,26 +196,6 @@ export default {
}
})
},
schoolSelect(query) {
listSchoolSelect({ search: query.trim(), maxRecord: 1000 }).then(response => {
if (response.respCode === '0000') {
this.schoolOptions = response.data
} else {
this.schoolOptions = []
}
})
},
handleAddContactInfo() {
this.$set(this.contactArray, this.contactArray.length, {
contactRelation: 'daddy',
contactNick: '',
contactPhone: ''
})
},
//
handleDeleteContactInfo(index) {
this.contactArray.splice(index, 1)
}
}
}
</script>

@ -65,6 +65,7 @@
</div>
</template>
<script>
import { selectDictLabel } from '@/utils/commonUtils'
import { searchCourseClaStudent, studentCourseChooseCla } from '@/api/school/sc/student/course'
export default {
props: {
@ -137,13 +138,13 @@ export default {
},
methods: {
sexFormatter(row, column) {
return this.selectDictLabel(this.sexOptions, row.sex)
return selectDictLabel(this.sexOptions, row.sex)
},
chargeTypeFormatter(row, column) {
return this.selectDictLabel(this.chargeTypeOptions, row.chargeType)
return selectDictLabel(this.chargeTypeOptions, row.chargeType)
},
studentCourseStatusFormatter(row, column) {
return this.selectDictLabel(this.studentCourseStatusOptions, row.status)
return selectDictLabel(this.studentCourseStatusOptions, row.status)
},
handleSelectionChange(selection) {
this.chooseStudentCourseIds = selection.map(item => item.studentCourseId)

@ -101,6 +101,7 @@
</div>
</template>
<script>
import { selectDictLabel } from '@/utils/commonUtils'
import { searchCourseClaStudent, stopStudentCourseStatus, atClaStudentCourseStatus, removeStuFromCla } from '@/api/school/sc/student/course'
import courseStudentChooseCla from '@/components/sc/student/courseStudentChooseCla'
import claTimeAttendDetailTable from '@/components/sc/claTime/claTimeAttendDetailTable'
@ -170,24 +171,24 @@ export default {
this.getDictListByDictType('charge_type').then(response => {
this.chargeTypeOptions = response.data
})
this.getDictListByDictType('sex').then(response => {
this.getDictListByDictType('sys_user_sex').then(response => {
this.sexOptions = response.data
})
},
methods: {
sexFormatter(row, column) {
return this.selectDictLabel(this.sexOptions, row.sex)
return selectDictLabel(this.sexOptions, row.sex)
},
chargeTypeFormatter(row, column) {
if (row.chargeType === 'date' && row.effect === false && row.balanceDays > 0) {
// > 0
return '按课时(未生效)'
} else {
return this.selectDictLabel(this.chargeTypeOptions, row.chargeType)
return selectDictLabel(this.chargeTypeOptions, row.chargeType)
}
},
studentCourseStatusFormatter(row, column) {
return this.selectDictLabel(this.studentCourseStatusOptions, row.status)
return selectDictLabel(this.studentCourseStatusOptions, row.status)
},
// /
totalCount(row) {

@ -25,9 +25,9 @@
<el-table v-loading="loading" :data="dataList">
<el-table-column align="center" prop="studentName" label="学生" fixed="left">
<template slot-scope="scope">
<router-link :to="'/edu/student/detail/' + scope.row.studentId" class="link-type">
<!-- <router-link :to="'/edu/student/detail/' + scope.row.studentId" class="link-type">-->
<span>{{ scope.row.studentName }}</span>
</router-link>
<!-- </router-link>-->
</template>
</el-table-column>
<el-table-column align="center" width="120" prop="phone" label="联系电话">
@ -131,6 +131,7 @@
</div>
</template>
<script>
import { selectDictLabel } from '@/utils/commonUtils'
import { searchStuCourseSignUpList, stopStudentCourseStatus, atClaStudentCourseStatus } from '@/api/school/sc/student/course'
import claTimeAttendDetailTable from '@/components/sc/claTime/claTimeAttendDetailTable'
import deptSelect from '@/components/system/dept/deptSelect'
@ -185,11 +186,11 @@ export default {
// > 0
return '按时间(未生效)'
} else {
return this.selectDictLabel(this.chargeTypeOptions, row.chargeType)
return selectDictLabel(this.chargeTypeOptions, row.chargeType)
}
},
studentCourseStatusFormatter(row, column) {
return this.selectDictLabel(this.studentCourseStatusOptions, row.status)
return selectDictLabel(this.studentCourseStatusOptions, row.status)
},
getList() {
this.loading = true
@ -213,7 +214,7 @@ export default {
},
handleStopStudentCourseStatus(studentCourseId) {
const that = this
this.confirm('确定将本学员停课?', function() {
this.$confirm('确定将本学员停课?', '提示',{}).then(()=>{
stopStudentCourseStatus(studentCourseId).then(response => {
if (response.respCode === '0000') {
that.msgSuccess('操作成功')
@ -227,7 +228,8 @@ export default {
//
handleAtClaStudentCourseStatus(studentCourseId) {
const that = this
this.confirm('确定将本学员状态设置为在读?', function() {
// this.confirm('?', function() {
this.$confirm('确定将本学员状态设置为在读?', '提示',{}).then(()=>{
atClaStudentCourseStatus(studentCourseId).then(response => {
if (response.respCode === '0000') {
that.msgSuccess('操作成功')

@ -2,26 +2,7 @@
<template>
<div>
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="80px">
<el-form-item label="所属学校:" prop="schoolId">
<el-select
v-model="queryParams.schoolId"
placeholder="请选择所属学校"
clearable
size="small"
filterable
default-first-option
remote
:remote-method="schoolSelect"
:loading="loadingSelect"
>
<el-option
v-for="item in schoolOptions"
:key="item.schoolId"
:label="item.schoolName"
:value="item.schoolId"
/>
</el-select>
</el-form-item>
<el-form-item label="学生姓名:" prop="studentName">
<el-input
v-model="queryParams.studentName"
@ -102,12 +83,12 @@
<el-table-column type="selection" width="55" align="center" />
<el-table-column prop="studentName" label="学生姓名">
<template slot-scope="scope">
<router-link :to="'/edu/student/detail/' + scope.row.studentId" class="link-type">
<!-- <router-link :to="'/edu/student/detail/' + scope.row.studentId" class="link-type">-->
<span>{{ scope.row.studentName }}</span>
</router-link>
<!-- </router-link>-->
</template>
</el-table-column>
<el-table-column prop="schoolName" label="所属学校" />
<!-- <el-table-column prop="schoolName" label="所属学校" />-->
<el-table-column prop="birthDay" label="生日">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.birthDay, '{y}-{m}-{d}') }}</span>
@ -214,8 +195,8 @@
</template>
<script>
import { selectDictLabel } from '@/utils/commonUtils'
import { listStudent, delStudent } from '@/api/school/sc/student'
import { listSelect as listSchoolSelect } from '@/api/school/sc/school'
import changeStudent from '@/components/sc/student/changeStudent'
import uploadCheckImportExcel from '@/components/tool/impt/uploadCheckImportExcel'
@ -243,8 +224,7 @@ export default {
title: '',
//
open: false,
//
schoolOptions: [],
//
sexOptions: [],
//
@ -261,10 +241,9 @@ export default {
},
created() {
this.getList()
this.getDictListByDictType('sex').then(response => {
this.getDictListByDictType('sys_user_sex').then(response => {
this.sexOptions = response.data
})
this.schoolSelect('')
},
methods: {
/** 查询列表 */
@ -278,7 +257,7 @@ export default {
},
//
sexFormat(row, column) {
return this.selectDictLabel(this.sexOptions, row.sex)
return selectDictLabel(this.sexOptions, row.sex)
},
/** 搜索按钮操作 */
handleQuery() {
@ -322,15 +301,6 @@ export default {
}
}).catch(function() {})
},
schoolSelect(query) {
listSchoolSelect({ search: query.trim(), maxRecord: 1000 }).then(response => {
if (response.respCode === '0000') {
this.schoolOptions = response.data
} else {
this.schoolOptions = []
}
})
},
handleImport() {
this.$refs.uploadCheckImportExcel.openImport()
}

@ -92,7 +92,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户名" prop="username">
<el-form-item label="登录账号" prop="username">
<el-input v-model="form.username" :readonly="form.userId !== undefined" :disabled="form.userId !== undefined" placeholder="请输入用户名" />
</el-form-item>
</el-col>
@ -169,7 +169,7 @@ export default {
checkUsernameUnique(value).then(response => {
const unique = response.data
if (!unique) {
callback(new Error('该用户名已被注册,请更换'))
callback(new Error('该账号已被注册,请更换'))
} else {
callback()
}
@ -267,7 +267,7 @@ export default {
return
}
if (value === undefined || value === '') {
callback(new Error('请输入用户名'))
callback(new Error('请输入账号'))
} else if (!isUsername(value)) {
callback(new Error('4到16位(字母,数字,下划线)'))
} else {
@ -298,7 +298,7 @@ export default {
mounted() {
this.getDeptTreeSelect()
this.getRoleTreeSelect()
this.getDictListByDictType('sex').then(response => {
this.getDictListByDictType('sys_user_sex').then(response => {
this.sexOptions = response.data
})
this.getDictListByDictType('personnel_status').then(response => {

@ -6,7 +6,6 @@ import Element from 'element-ui'
import './assets/styles/element-variables.scss'
import '@/assets/styles/index.scss' // global css
import '@/styles/index.scss' // global css
import '@/assets/styles/ruoyi.scss' // ruoyi css
@ -20,8 +19,10 @@ import plugins from './plugins' // plugins
import { download } from '@/utils/request'
import VCharts from 'v-charts'
import '@/styles/index.scss' // global css
import './assets/icons' // icon
import './permission' // permission control
import '@/permission' // permission control
import { getDicts } from "@/api/system/dict/data";
import { getConfigKey } from "@/api/system/config";
import { parseTime, resetForm, addDateRange, addDateRange2, addDateRange3, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi";

@ -68,7 +68,7 @@ export const constantRoutes = [
children: [
{
path: 'index',
component: () => import('@/views/index'),
component: () => import('@/views/index.vue'),
name: 'Index',
meta: { title: '首页', icon: 'dashboard', affix: true }
},
@ -216,12 +216,6 @@ export const dynamicRoutes = [
name: 'signUp',
meta: { title: '新报' }
},
{
path: 'orderPrint',
component: () => import('@/views/courseOrder/orderPrint'),
name: 'orderPrint',
meta: { title: '新报' }
},
]
}
]

@ -33,9 +33,6 @@ const user = {
SET_PERMISSIONS: (state, permissions) => {
state.permissions = permissions
},
SET_MENU: (state, menuList) => {
Vue.set(state, 'menuList', menuList)
},
},
actions: {
@ -77,9 +74,6 @@ const user = {
}).catch(error => {
reject(error)
})
listMenu().then(response=>{
commit('SET_MENU', response.data)
})
})
},

@ -8,10 +8,12 @@
border-radius: 8px;
background: #fff;
.header{
font-size: 16px;
font-size: 20px;
padding: 20px 0 7px 24px;
.title{
font-weight: 500;
display: flex;
font-weight: 550;
color: #000;
}
}
@ -29,7 +31,8 @@
align-content: center;
.icon{
height: 48px;
width: 28px;
}
.txt{
padding-left: 16px;
@ -57,10 +60,11 @@
margin-bottom: 16px;
.header{
font-size: 16px;
font-size: 20px;
padding: 20px 0 7px 24px;
.title{
font-weight: 500;
display: flex;
font-weight: 550;
color: #000;
}
}
@ -88,11 +92,12 @@
margin-bottom: 16px;
.header{
font-size: 16px;
font-size: 20px;
padding: 20px 0 7px 24px;
overflow: hidden;
.title{
font-weight: 500;
display: flex;
font-weight: 550;
color: #000;
}
}
@ -104,6 +109,7 @@
background: #fff;
.content-container {
padding: 8px 16px;
position: relative;
height: 600px;
@ -117,7 +123,7 @@
}
}
.right-container{
width: 350px;
width: 400px;
.content-item{
padding: 8px 10px 8px 8px;
@ -128,7 +134,8 @@
cursor: pointer;
.icon{
height: 48px;
width: 28px;
}
.txt{
padding-left: 8px;

@ -8,12 +8,14 @@
color: rgba(0, 0, 0, .85);
font-weight: 500;
font-size: 16px;
display: flex;
&.top {
padding-top: 0px;
}
.title-content {
border-left: 3px solid #409EFF;
padding-left: 10px;
}

@ -51,9 +51,9 @@ service.interceptors.request.use(config => {
const s_time = sessionObj.time; // 请求时间
const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
const message = '数据正在处理,请勿重复提交';
console.warn(`[${s_url}]: ` + message)
return Promise.reject(new Error(message))
// const message = '数据正在处理,请勿重复提交';
// console.warn(`[${s_url}]: ` + message)
// return Promise.reject(new Error())
} else {
cache.session.setJSON('sessionObj', requestObj)
}

@ -172,10 +172,10 @@
<!-- 标题表单项后添加 -->
<el-form-item label="门店/校区" prop="deptId">
<el-form-item label="门店" prop="deptId">
<el-select
v-model="form.deptId"
placeholder="请选择门店/校区"
placeholder="请选择门店"
clearable
style="width: 100%"
>
@ -224,9 +224,9 @@
</el-upload>
</el-form-item>
<el-form-item label="阅读量" prop="readNum">
<el-input v-model.number="form.readNum" placeholder="请输入阅读量" />
</el-form-item>
<!-- <el-form-item label="阅读量" prop="readNum">-->
<!-- <el-input v-model.number="form.readNum" placeholder="请输入阅读量" />-->
<!-- </el-form-item>-->
<el-form-item label="内容" prop="content">
<div class="editor-container">
@ -327,6 +327,9 @@ export default {
},
//
rules: {
deptId: [
{ required: true, message: "请选择门店", trigger: "change" }
],
title: [
{ required: true, message: "请输入标题", trigger: "blur" }
],
@ -549,7 +552,7 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = "添加瑜伽传承";
this.title = "添加瑜伽欣赏";
},
/** 修改按钮操作 */
@ -578,7 +581,7 @@ export default {
});
this.open = true;
this.title = "修改瑜伽传承";
this.title = "修改瑜伽欣赏";
}).catch(() => {
this.$message.error('获取数据失败');
});
@ -628,7 +631,7 @@ export default {
return;
}
this.$modal.confirm('是否确认删除瑜伽传承编号为"' + ids + '"的数据项?').then(function() {
this.$modal.confirm('是否确认删除瑜伽欣赏编号为"' + ids + '"的数据项?').then(function() {
return delAppreciate(ids);
}).then(() => {
this.getList();

@ -88,7 +88,7 @@
<!-- 门店/校区名称标签形式 -->
<el-table-column label="门店/校区名称" align="center">
<el-table-column label="门店名称" align="center">
<template #default="scope">
<!-- 调用方法获取名称用span或el-tag展示 -->
<el-tag type="info">{{ getDeptName(scope.row.deptId) }}</el-tag>
@ -166,16 +166,16 @@
@pagination="getList"
/>
<!-- 添加或修改瑜伽传承对话框 -->
<!-- 添加或修改健康饮食对话框 -->
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body @opened="onDialogOpened">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<!-- 标题表单项后添加 -->
<el-form-item label="门店/校区" prop="deptId">
<el-form-item label="门店" prop="deptId">
<el-select
v-model="form.deptId"
placeholder="请选择门店/校区"
placeholder="请选择门店"
clearable
style="width: 100%"
>
@ -224,9 +224,9 @@
</el-upload>
</el-form-item>
<el-form-item label="阅读量" prop="readNum">
<el-input v-model.number="form.readNum" placeholder="请输入阅读量" />
</el-form-item>
<!-- <el-form-item label="阅读量" prop="readNum">-->
<!-- <el-input v-model.number="form.readNum" placeholder="请输入阅读量" />-->
<!-- </el-form-item>-->
<el-form-item label="内容" prop="content">
<div class="editor-container">
@ -290,7 +290,7 @@ export default {
showSearch: true,
//
total: 0,
//
//
inheritList: [],
deptList:[],
//
@ -328,6 +328,9 @@ export default {
},
//
rules: {
deptId: [
{ required: true, message: "请选择门店", trigger: "change" }
],
title: [
{ required: true, message: "请输入标题", trigger: "blur" }
],
@ -439,7 +442,7 @@ export default {
this.deptList=res.data
})
},
/** 查询瑜伽传承列表 */
/** 查询健康饮食列表 */
getList() {
this.loading = true;
listHealthy(this.queryParams).then(response => {
@ -550,7 +553,7 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = "添加瑜伽传承";
this.title = "添加健康饮食";
},
/** 修改按钮操作 */
@ -579,7 +582,7 @@ export default {
});
this.open = true;
this.title = "修改瑜伽传承";
this.title = "修改健康饮食";
}).catch(() => {
this.$message.error('获取数据失败');
});
@ -629,7 +632,7 @@ export default {
return;
}
this.$modal.confirm('是否确认删除瑜伽传承编号为"' + ids + '"的数据项?').then(function() {
this.$modal.confirm('是否确认删除健康饮食编号为"' + ids + '"的数据项?').then(function() {
return delHealthy(ids);
}).then(() => {
this.getList();

@ -169,13 +169,11 @@
<!-- 添加或修改瑜伽传承对话框 -->
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body @opened="onDialogOpened">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<!-- 标题表单项后添加 -->
<el-form-item label="门店/校区" prop="deptId">
<el-form-item label="门店" prop="deptId">
<el-select
v-model="form.deptId"
placeholder="请选择门店/校区"
placeholder="请选择门店"
clearable
style="width: 100%"
>
@ -224,9 +222,9 @@
</el-upload>
</el-form-item>
<el-form-item label="阅读量" prop="readNum">
<el-input v-model.number="form.readNum" placeholder="请输入阅读量" />
</el-form-item>
<!-- <el-form-item label="阅读量" prop="readNum">-->
<!-- <el-input v-model.number="form.readNum" placeholder="请输入阅读量" />-->
<!-- </el-form-item>-->
<el-form-item label="内容" prop="content">
<div class="editor-container">
@ -325,6 +323,9 @@ export default {
},
//
rules: {
deptId: [
{ required: true, message: "请选择门店", trigger: "change" }
],
title: [
{ required: true, message: "请输入标题", trigger: "blur" }
],

@ -166,16 +166,16 @@
@pagination="getList"
/>
<!-- 添加或修改瑜伽传承对话框 -->
<!-- 添加或修改练习瞬间对话框 -->
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body @opened="onDialogOpened">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<!-- 标题表单项后添加 -->
<el-form-item label="门店/校区" prop="deptId">
<el-form-item label="门店" prop="deptId">
<el-select
v-model="form.deptId"
placeholder="请选择门店/校区"
placeholder="请选择门店"
clearable
style="width: 100%"
>
@ -224,9 +224,9 @@
</el-upload>
</el-form-item>
<el-form-item label="阅读量" prop="readNum">
<el-input v-model.number="form.readNum" placeholder="请输入阅读量" />
</el-form-item>
<!-- <el-form-item label="阅读量" prop="readNum">-->
<!-- <el-input v-model.number="form.readNum" placeholder="请输入阅读量" />-->
<!-- </el-form-item>-->
<el-form-item label="内容" prop="content">
<div class="editor-container">
@ -289,7 +289,7 @@ export default {
showSearch: true,
//
total: 0,
//
//
inheritList: [],
deptList:[],
//
@ -327,6 +327,9 @@ export default {
},
//
rules: {
deptId: [
{ required: true, message: "请选择门店", trigger: "change" }
],
title: [
{ required: true, message: "请输入标题", trigger: "blur" }
],
@ -438,7 +441,7 @@ export default {
this.deptList=res.data
})
},
/** 查询瑜伽传承列表 */
/** 查询练习瞬间列表 */
getList() {
this.loading = true;
listMoments(this.queryParams).then(response => {
@ -549,7 +552,7 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = "添加瑜伽传承";
this.title = "添加练习瞬间";
},
/** 修改按钮操作 */
@ -578,7 +581,7 @@ export default {
});
this.open = true;
this.title = "修改瑜伽传承";
this.title = "修改练习瞬间";
}).catch(() => {
this.$message.error('获取数据失败');
});
@ -628,7 +631,7 @@ export default {
return;
}
this.$modal.confirm('是否确认删除瑜伽传承编号为"' + ids + '"的数据项?').then(function() {
this.$modal.confirm('是否确认删除练习瞬间编号为"' + ids + '"的数据项?').then(function() {
return delMoments(ids);
}).then(() => {
this.getList();

@ -166,16 +166,16 @@
@pagination="getList"
/>
<!-- 添加或修改瑜伽传承对话框 -->
<!-- 添加或修改瑜伽常识对话框 -->
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body @opened="onDialogOpened">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<!-- 标题表单项后添加 -->
<el-form-item label="门店/校区" prop="deptId">
<el-form-item label="门店" prop="deptId">
<el-select
v-model="form.deptId"
placeholder="请选择门店/校区"
placeholder="请选择门店"
clearable
style="width: 100%"
>
@ -224,9 +224,9 @@
</el-upload>
</el-form-item>
<el-form-item label="阅读量" prop="readNum">
<el-input v-model.number="form.readNum" placeholder="请输入阅读量" />
</el-form-item>
<!-- <el-form-item label="阅读量" prop="readNum">-->
<!-- <el-input v-model.number="form.readNum" placeholder="请输入阅读量" />-->
<!-- </el-form-item>-->
<el-form-item label="内容" prop="content">
<div class="editor-container">
@ -289,7 +289,7 @@ export default {
showSearch: true,
//
total: 0,
//
//
inheritList: [],
deptList:[],
//
@ -327,6 +327,9 @@ export default {
},
//
rules: {
deptId: [
{ required: true, message: "请选择门店", trigger: "change" }
],
title: [
{ required: true, message: "请输入标题", trigger: "blur" }
],
@ -438,7 +441,7 @@ export default {
this.deptList=res.data
})
},
/** 查询瑜伽传承列表 */
/** 查询瑜伽常识列表 */
getList() {
this.loading = true;
listSense(this.queryParams).then(response => {
@ -549,7 +552,7 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = "添加瑜伽传承";
this.title = "添加瑜伽常识";
},
/** 修改按钮操作 */
@ -578,7 +581,7 @@ export default {
});
this.open = true;
this.title = "修改瑜伽传承";
this.title = "修改瑜伽常识";
}).catch(() => {
this.$message.error('获取数据失败');
});
@ -628,7 +631,7 @@ export default {
return;
}
this.$modal.confirm('是否确认删除瑜伽传承编号为"' + ids + '"的数据项?').then(function() {
this.$modal.confirm('是否确认删除瑜伽常识编号为"' + ids + '"的数据项?').then(function() {
return delSense(ids);
}).then(() => {
this.getList();

@ -127,7 +127,17 @@
>查看内容</el-button>
</template>
</el-table-column>
<el-table-column label="部门ID" align="center" prop="deptName" />
<el-table-column label="所属部门" align="center" prop="deptName" />
<el-table-column label="是否展示" align="center" width="100">
<template slot-scope="scope">
<el-switch
v-model="scope.row.display"
active-value="1"
inactive-value="0"
@change="handleStatusChange(scope.row)"
></el-switch>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
@ -311,6 +321,17 @@ export default {
this.getList();
},
methods: {
//
handleStatusChange(row) {
let text = row.display === "0" ? "不展示" : "展示";
this.$modal.confirm('确认要' + text + '"' + row.storeName + '"门店吗?').then(function() {
return updateStore({deptId:row.deptId, display:row.display});
}).then(() => {
this.$modal.msgSuccess(text + "成功");
}).catch(function() {
row.display = row.display === "0" ? "1" : "0";
});
},
/** 对话框打开后初始化富文本编辑器 */
onDialogOpened() {
if (!this.founderEditor) {

@ -68,6 +68,7 @@
<el-table v-loading="loading" :data="teacherList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="员工id" align="center" prop="userId" width="80" />
<el-table-column label="员工昵称" align="center" prop="nickName" width="80" />
<el-table-column label="老师名称" align="center" prop="teacherName" />
<el-table-column label="头像" align="center" prop="avatarImg" width="100">
<template slot-scope="scope">
@ -154,6 +155,8 @@
clearable
filterable
style="width: 100%"
@change="selectUser"
:disabled="title === '修改教练信息' ?true:false"
>
<el-option
v-for="emp in employeeList"
@ -249,7 +252,7 @@
</template>
<script>
import { listTeacher, getTeacher, delTeacher, addTeacher, updateTeacher } from "@/api/columns/teacher";
import { listTeacher, getTeacher, delTeacher, addTeacher, updateTeacher,getUserForTeacher } from "@/api/columns/teacher";
import { listAll } from "@/api/system/user";
import WangEditor from 'wangeditor';
import { getToken } from '@/utils/auth';
@ -397,7 +400,7 @@ export default {
this.loading = true;
listTeacher(this.queryParams).then(response => {
this.teacherList = response.rows || [];
this.total = response.total || 0;
this.total = response.total? Number(response.total):0;
this.loading = false;
}).catch(() => {
this.loading = false;
@ -408,8 +411,8 @@ export default {
/** 获取员工列表 */
getBase() {
this.loading = true;
listAll().then(res => {
this.employeeList = res.rows || [];
getUserForTeacher().then(res => {
this.employeeList = res.data || [];
this.loading = false;
}).catch(() => {
this.loading = false;

@ -1025,6 +1025,9 @@ export default {
if (item.courseId === undefined) {
this.msgError('第' + (i + 1) + '个报读课程无课程Id')
return
} else if (item.claId === undefined) {
this.msgError('第' + (i + 1) + '个报读课程无班级Id')
return
}else if (item.chargeId === undefined) {
this.msgError('第' + (i + 1) + '个报读课程未选择收费方式')
return

@ -1,283 +1,215 @@
<template>
<div class="home-wrapper">
<el-card style="margin: 20px 20px; font-size: 14px">
<div class="first"><img alt="" :src="avatar" style="width: 50px; height: 50px; float:left; margin-right:10px;border-radius:50%" />
<p style="font-size:16px;margin-bottom:8px">{{name}}{{hello}}</p>
<p style="font-size:12px;color:rgb(185, 181, 189)">今天是{{nowTime}}</p>
<div class="dashboard-container">
<div class="top-container">
<el-row v-loading="loading">
<div class="header" >
<div class="title">总览</div>
</div>
<div class="first">
<div class="content-container">
<router-link to="/eduCla/claTimeRule?activeTab=calendar">
<div class="content-item">
<div class="icon" style="height: 48px;width: 28px;">
<svg-icon icon-class="dashboard-course" style="height: 48px;width: 28px;" />
</div>
<div class="txt">
<div class="value">{{ dashboardData.completeTodayClaTimeCnt }}/{{ dashboardData.todayClaTimeCnt }}</div>
<div class="name">已上课/今日排课</div>
</div>
</div>
</router-link>
<router-link to="/order/handle/index?handleDate=thisMonth">
<div class="content-item">
<div class="icon">
<svg-icon icon-class="dashboard-order" style="height: 48px;width: 28px;" />
</div>
<div class="txt">
<div class="value">{{ dashboardData.todayOrderCnt }}/{{ dashboardData.thisMonthOrderCnt }}</div>
<div class="name">今日报名/本月报名</div>
</div>
</div>
</router-link>
<div class="content-item">
<div class="icon">
<svg-icon icon-class="dashboard-student" style="height: 48px;width: 36px;" />
</div>
<div class="txt" style="padding-left: 8px;">
<div class="value">{{ dashboardData.todayRealAttendCnt }}/{{ dashboardData.todayNeedAttendCnt }}</div>
<div class="name">实到/今日应到人次</div>
</div>
</div>
<div class="content-item">
<div class="icon">
<svg-icon icon-class="dashboard-cla-time" style="height: 48px;width: 32px;" />
</div>
<div class="txt" style="padding-left: 12px;">
<div class="value">{{ dashboardData.todayRealCostHour }}/{{ dashboardData.todayNeedCostHour }}课时</div>
<div class="name">实消/今日应消课时</div>
</div>
</div>
<router-link to="/stu/student">
<div class="content-item">
<div class="icon">
<svg-icon icon-class="dashboard-student-cnt" style="height: 48px;width: 28px;" />
</div>
<div class="txt">
<div class="value">{{ dashboardData.studentCnt }}</div>
<div class="name">总学员人数</div>
</div>
</div>
</router-link>
</div>
</el-card>
<el-row class="pl20 pr20" :gutter="10">
<el-col :span="9">
<el-card shadow="always" style="padding-bottom: 30px">
<div slot="header"><span>售后</span></div>
<ul style="margin-top: 10px">
<li class="li" style="width: 50%">待处理
</li>
<li class="li" style="width: 50%">处理中
</li>
</ul>
<ul>
<li class="da" style="width: 50%">
<router-link :to="{path:'/order/aftersale', query:{status:0}}">{{ orderAndAftersaleStatisticsObj.pendingAftersaleCount }}</router-link>
</li>
<li class="da" style="width: 50%">
<router-link :to="{path:'/order/aftersale', query:{status:1}}">{{ orderAndAftersaleStatisticsObj.processingAftersaleCount }}</router-link>
</li>
</ul>
</el-card>
</el-col>
<el-col :span="15">
<el-card shadow="always" style="padding-bottom: 30px">
<div slot="header"><span>订单</span></div>
<div>
<ul style="margin-top: 10px">
<li class="li">未发订单数
</li>
<li class="li">今日订单数
</li>
<li class="li">今日成交额
</li>
<li class="li">今日发货数
</li>
</ul>
<ul>
<li class="da">
<router-link :to="{path:'/order/order',query:{status:1}}">{{ orderAndAftersaleStatisticsObj.waitDeliveredCount }}</router-link>
</li>
<li class="da">
<router-link :to="{path:'/order/order',query:{today:true}}">{{ orderAndAftersaleStatisticsObj.todayOrderCount }}</router-link>
</li>
<li class="da">
<router-link :to="{path:'/order/order',query:{today:true,status:1}}">{{ orderAndAftersaleStatisticsObj.todayTransactionAmount }}</router-link>
</li>
<li class="da">
<router-link :to="{path:'/order/order',query:{today:true, status: 2}}">{{ orderAndAftersaleStatisticsObj.todayHasDeliveredCount }}</router-link>
</li>
</ul>
</div>
</el-card>
</el-col>
</el-row>
<el-row class="pl20 pr20" :gutter="10">
<el-col :span="24">
<order-line-chart></order-line-chart>
<div class="card transform">
<top-product></top-product>
</div>
</el-col>
<!-- <div class="center-container">-->
<!-- <div class="left-container">-->
<!-- <div class="header">-->
<!-- <div class="title">常用功能</div>-->
<!-- </div>-->
<!-- <div class="content-container">-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="right-container">-->
<!-- <div class="header">-->
<!-- <div class="title">通知提醒</div>-->
<!-- </div>-->
<!-- <div class="content-container">-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<div class="calendar-container">
<div class="left-container">
<div class="header">
<div class="title">课表</div>
</div>
<div class="content-container">
<cla-time-calendar ref="claTimeCalendar" readonly can-cla-time-attend class="calendar" />
</div>
</div>
<div class="right-container">
<el-row v-loading="loading">
<div class="top">
<div class="header">
<div class="title">快捷入口</div>
</div>
<div class="content-container">
<router-link to="/edu/cla">
<div class="content-item">
<div class="icon">
<svg-icon icon-class="dashboard-cla" style="height: 33px;width: 28px;" />
</div>
<div class="txt">
<div class="value">班级</div>
<div class="name">班级数 <span class="cnt">{{ dashboardData.claCnt }}</span></div>
</div>
</div>
</router-link>
<router-link to="/edu/course">
<div class="content-item">
<div class="icon">
<svg-icon icon-class="dashboard-course" style="height: 33px;width: 28px;" />
</div>
<div class="txt">
<div class="value">课程</div>
<div class="name">课程数 <span class="cnt">{{ dashboardData.courseCnt }}</span></div>
</div>
</div>
</router-link>
<router-link to="/order/handle/index">
<div class="content-item">
<div class="icon">
<svg-icon icon-class="dashboard-sign-up" style="height: 33px;width: 28px;" />
</div>
<div class="txt">
<div class="value single">报名</div>
</div>
</div>
</router-link>
<router-link :to="{name: 'ClaTime',params: {activeTab: 'attendClaTime'}}">
<div class="content-item">
<div class="icon">
<svg-icon icon-class="dashboard-record" style="height: 33px;width: 28px;" />
</div>
<div class="txt">
<div class="value single">记上课</div>
</div>
</div>
</router-link>
<router-link to="/stu/student">
<div class="content-item">
<div class="icon">
<svg-icon icon-class="dashboard-student-cnt" style="height: 33px;width: 28px;" />
</div>
<div class="txt">
<div class="value">学员</div>
<div class="name">学员 <span class="cnt">{{ dashboardData.studentCnt }}</span></div>
</div>
</div>
</router-link>
</div>
</div>
<div class="bottom">
<div class="header">
<div class="title">通知提醒</div>
</div>
<div class="content-container">
<div class="content-item">
<div class="icon">
<svg-icon icon-class="dashboard-notice" style="height: 65px;width: 35px;" />
</div>
<div class="txt item-circle" style="line-height: 20px;">
<router-link :to="{name: 'Student',params: {activeTab: 'studentSignUpList', minBalanceDay: 10}}">
<div class="name">10日内即将到期 <span class="cnt">{{ dashboardData.dateWillExpireCnt }}</span></div>
</router-link>
<router-link :to="{name: 'Student',params: {activeTab: 'studentSignUpList', minBalanceHour: 5}}">
<div class="name">剩余课时小于5课时 <span class="cnt">{{ dashboardData.hourWillExpireCnt }}</span></div>
</router-link>
<div class="name">欠费学员 <span class="cnt">{{ dashboardData.arrearsStudentCnt }}</span></div>
</div>
</div>
</div>
</div>
</el-row>
</div>
</div>
</div>
</template>
<script>
import {str2Date} from '@/utils/date';
import PanelGroup from '@/views/components/PanelGroup'
import { mapGetters } from 'vuex'
import OrderLineChart from "@/views/dashboard/OrderLineChart.vue";
import TopProduct from "@/views/components/IndexOrderPanelGroup/TopProduct.vue";
import {orderAndAftersaleStatistics} from "@/api/statistics";
const DATA_FROM_BACKEND = {
columns: ['date', 'orderCount','orderAmount'],
rows: [
{date: '2018-11-01', orderCount: 10, orderAmount: 1093},
{date: '2018-11-02', orderCount: 20, orderAmount: 2230},
{date: '2018-11-03', orderCount: 33, orderAmount: 3623},
{date: '2018-11-04', orderCount: 50, orderAmount: 6423},
{date: '2018-11-05', orderCount: 80, orderAmount: 8492},
{date: '2018-11-06', orderCount: 60, orderAmount: 6293},
{date: '2018-11-07', orderCount: 20, orderAmount: 2293},
{date: '2018-11-08', orderCount: 60, orderAmount: 6293},
{date: '2018-11-09', orderCount: 50, orderAmount: 5293},
{date: '2018-11-10', orderCount: 30, orderAmount: 3293},
{date: '2018-11-11', orderCount: 20, orderAmount: 2293},
{date: '2018-11-12', orderCount: 80, orderAmount: 8293},
{date: '2018-11-13', orderCount: 100, orderAmount: 10293},
{date: '2018-11-14', orderCount: 10, orderAmount: 1293},
{date: '2018-11-15', orderCount: 40, orderAmount: 4293}
]
};
import claTimeCalendar from '@/components/sc/claTime/claTimeCalendar'
import { dashboardData } from '@/api/school/report/dashboard'
export default {
name: 'Dashboard',
components: {
PanelGroup,
OrderLineChart,
TopProduct
claTimeCalendar
},
data() {
return {
pickerOptions: {
shortcuts: [{
text: '最近一周',
onClick(picker) {
const end = new Date();
let start = new Date();
start.setFullYear(2018);
start.setMonth(10);
start.setDate(1);
end.setTime(start.getTime() + 3600 * 1000 * 24 * 7);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近一月',
onClick(picker) {
const end = new Date();
let start = new Date();
start.setFullYear(2018);
start.setMonth(10);
start.setDate(1);
end.setTime(start.getTime() + 3600 * 1000 * 24 * 30);
picker.$emit('pick', [start, end]);
}
}]
},
orderCountDate: '',
chartSettings: {
xAxisType: 'time',
area:true,
axisSite: { right: ['orderAmount']},
labelMap: {'orderCount': '订单数量', 'orderAmount': '订单金额'}},
chartData: {
columns: [],
rows: []
},
loading: false,
dataEmpty: false,
nowTime: '',
hello: '',
orderAndAftersaleStatisticsObj: {
pendingAftersaleCount: 0,
processingAftersaleCount: 0,
waitDeliveredCount: 0,
todayHasDeliveredCount: 0,
todayOrderCount: 0,
todayTransactionAmount: 0
}
dashboardData: {},
loading: false
}
},
computed: {
...mapGetters(['avatar', 'name'])
...mapGetters([
'name'
])
},
created() {
this.showTimes()
this.helloTimes()
this.orderAndAftersaleStat()
this.initOrderCountDate()
this.getData()
},
methods: {
handleDateChange() {
this.getData();
},
initOrderCountDate() {
let start = new Date();
start.setFullYear(2018, 10, 1);
const end = new Date();
end.setTime(start.getTime() + 1000 * 60 * 60 * 24 * 7);
this.orderCountDate = [start, end];
},
getData(){
setTimeout(() => {
this.chartData = {
columns: ['date', 'orderCount','orderAmount'],
rows: []
};
for(let i=0;i<DATA_FROM_BACKEND.rows.length;i++){
let item=DATA_FROM_BACKEND.rows[i];
let currDate=str2Date(item.date);
let start=this.orderCountDate[0];
let end=this.orderCountDate[1];
if(currDate.getTime()>=start.getTime()&&currDate.getTime()<=end.getTime()){
this.chartData.rows.push(item);
}
}
this.dataEmpty = false;
this.$nextTick(() => {
this.$refs.claTimeCalendar.loadData()
})
this.loading = true
dashboardData().then(response => {
this.loading = false
this.dashboardData = response.data
}).catch(() => {
this.loading = false
}, 1000)
},
timeFormate(timeStamp) {
let year = new Date(timeStamp).getFullYear()
let month =
new Date(timeStamp).getMonth() + 1 < 10
? '0' + (new Date(timeStamp).getMonth() + 1)
: new Date(timeStamp).getMonth() + 1
let date =
new Date(timeStamp).getDate() < 10
? '0' + new Date(timeStamp).getDate()
: new Date(timeStamp).getDate()
let hh =
new Date(timeStamp).getHours() < 10
? '0' + new Date(timeStamp).getHours()
: new Date(timeStamp).getHours()
let mm =
new Date(timeStamp).getMinutes() < 10
? '0' + new Date(timeStamp).getMinutes()
: new Date(timeStamp).getMinutes()
let ss =
new Date(timeStamp).getSeconds() < 10
? '0' + new Date(timeStamp).getSeconds()
: new Date(timeStamp).getSeconds()
let week = new Date(timeStamp).getDay()
let weeks = ['日', '一', '二', '三', '四', '五', '六']
let getWeek = '星期' + weeks[week]
this.nowTime =
year +
'年' +
month +
'月' +
date +
'日' +
' ' +
getWeek
},
showTimes() {
this.timeFormate(new Date())
},
helloTimes() {
let hh = new Date().getHours()
if (0 < hh < 12) {
this.hello = '上午好'
} else if (hh < 18) {
this.hello = '下午好'
} else {
this.hello = '晚上好'
}
},
orderAndAftersaleStat(){
orderAndAftersaleStatistics().then((response) => {
this.orderAndAftersaleStatisticsObj = response
})
}
},
methods: {
}
}
</script>
<style scoped lang="stylus">
.home-wrapper
.li {
float: left;
width: 25%;
font-size: 12px;
color: rgb(185, 181, 189);
}
.da {
float: left;
width: 25%;
font-size: 20px;
}
.first {
float: left;
width: 50%;
margin-bottom: 20px;
}
.el-table .warning-row {
background: rgb(39, 138, 230);
}
</style>
<style lang="scss" scoped src="@/styles/dashboard/index.scss"></style>

@ -67,8 +67,8 @@ export default {
dialogVisible:false,
codeUrl: "",
loginForm: {
username: "admin",
password: "123",
username: "",
password: "",
rememberMe: false,
code: "",
uuid: ""

@ -142,13 +142,11 @@
<script>
import {
addOmsAftersale,
dealWithAftersale,
delOmsAftersale,
exportOmsAftersale,
getOmsAftersale,
listOmsAftersale,
updateOmsAftersale,
viewLog
} from "@/api/oms/aftersale";
import dateUtil from '@/utils/DateUtil';
@ -315,47 +313,7 @@ export default {
this.title = "修改订单售后";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateOmsAftersale(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addOmsAftersale(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除订单售后编号为"' + ids + '"的数据项?').then(function() {
return delOmsAftersale(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有订单售后数据项?').then(() => {
this.exportLoading = true;
return exportOmsAftersale(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {});
},
/** 售后详情 */
handleDetail(orderId){
const id = orderId

@ -98,16 +98,16 @@
@click="handleDelete"
>取消班级</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['sc:course:list']"
type="primary"
icon="el-icon-upload"
size="mini"
@click="handleImport"
>批量导入
</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- v-hasPermi="['sc:course:list']"-->
<!-- type="primary"-->
<!-- icon="el-icon-upload"-->
<!-- size="mini"-->
<!-- @click="handleImport"-->
<!-- >批量导入-->
<!-- </el-button>-->
<!-- </el-col>-->
</el-row>
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">

@ -129,26 +129,26 @@
>删除课程
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['sc:course:list']"
type="primary"
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出当前结果
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['sc:course:list']"
type="primary"
icon="el-icon-upload"
size="mini"
@click="handleImport"
>批量导入
</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- v-hasPermi="['sc:course:list']"-->
<!-- type="primary"-->
<!-- icon="el-icon-download"-->
<!-- size="mini"-->
<!-- @click="handleExport"-->
<!-- >导出当前结果-->
<!-- </el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- v-hasPermi="['sc:course:list']"-->
<!-- type="primary"-->
<!-- icon="el-icon-upload"-->
<!-- size="mini"-->
<!-- @click="handleImport"-->
<!-- >批量导入-->
<!-- </el-button>-->
<!-- </el-col>-->
</el-row>
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
@ -175,6 +175,11 @@
{{ chargeNameByCodes(scope.row.chargeNames) }}
</template>
</el-table-column>
<el-table-column prop="claFee" align="center" label="教练课时费/节" >
<template slot-scope="scope">
{{ scope.row.claFee }}
</template>
</el-table-column>
<el-table-column prop="campusIds" align="center" label="开课校区">
<template slot-scope="scope">
<div v-if="scope.row.campusIds">

@ -134,6 +134,7 @@
</template>
<script>
import { selectDictLabel } from '@/utils/commonUtils'
import { listOrder, invalidById } from '@/api/school/sc/order'
import orderDetail from '@/components/sc/order/orderDetail'
import deptSelect from '@/components/system/dept/deptSelect'
@ -196,10 +197,10 @@ export default {
this.handleDateArray = [startDate, endDate]
}
this.getList()
this.getDictListByDictType('order_type').then(response => {
this.getDictListByDictType('course_order_type').then(response => {
this.orderTypeOptions = response.data
})
this.getDictListByDictType('order_status').then(response => {
this.getDictListByDictType('course_order_status').then(response => {
this.orderStatusOptions = response.data
})
},
@ -251,7 +252,7 @@ export default {
})
},
orderTypeFormat(row, column) {
return this.selectDictLabel(this.orderTypeOptions, row.orderType)
return selectDictLabel(this.orderTypeOptions, row.orderType)
},
//
invalidOrder(row) {

@ -790,11 +790,11 @@ export default {
return
}
//
studentAccountBalance(studentId).then(response => {
if (response.respCode === '0000') {
this.studentAccountBalance = response.data
}
})
// studentAccountBalance(studentId).then(response => {
// if (response.respCode === '0000') {
// this.studentAccountBalance = response.data
// }
// })
//
studentCourseInfo(studentId).then(response => {
if (response.respCode === '0000') {

@ -64,6 +64,7 @@
<el-table-column type="selection" width="55" align="center" />
<el-table-column prop="deptName" label="所属校区" />
<el-table-column prop="roomName" label="教室名" />
<el-table-column prop="venueFee" label="场地费/小时(元)" />
<el-table-column prop="memo" label="备注" />
<el-table-column width="150" label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
@ -107,6 +108,11 @@
<dept-select v-model="form.deptId" placeholder="请选择所属校区" />
</el-form-item>
</el-col>
<el-col :span="12 ">
<el-form-item label="场地费:" prop="venueFee" >
<el-input v-model="form.venueFee" placeholder="请输入场地费(元/小时)" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注:" prop="memo">
<el-input v-model="form.memo" type="textarea" placeholder="请输入备注" />
@ -189,6 +195,7 @@ export default {
this.form = {
deptId: undefined,
roomName: undefined,
venueFee: undefined,
memo: undefined
}
this.resetForm('form')

@ -2,7 +2,7 @@
<div>
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="80px">
<el-form-item label="开课校区:" prop="name">
<SchoolSelect v-model="queryParams.schoolId" placeholder="请选择校区"/>
<dept-select v-model="queryParams.deptId" :dept-id="queryParams.deptId" placeholder="请输入所属校区" />
</el-form-item>
<el-form-item label="课程:" prop="name">
<course-select v-model="courseIdArray" :dept-id="queryParams.deptId" clearable multiple mounted-load-all />
@ -43,12 +43,12 @@
import ChangeSalaryBase from "@/views/school/salary/comps/ChangeSalaryBase.vue";
import {delSalaryBase, list} from "@/api/school/salary";
import SchoolSelect from "@/components/sc/school/schoolSelect.vue";
import deptSelect from '@/components/system/dept/deptSelect'
import courseSelect from "@/components/sc/course/courseSelect.vue";
export default {
name: 'CalTime',
components: {courseSelect, SchoolSelect, ChangeSalaryBase},
components: {courseSelect, deptSelect, ChangeSalaryBase},
data(){
return{
loading: true,

@ -1,334 +0,0 @@
<template>
<div class="app-container">
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
<el-form-item label="省份编码" prop="provinceCode">
<el-select v-model="queryParams.provinceCode" placeholder="请选择省份编码" clearable size="small">
<el-option
v-for="item in provinceCodeOptions"
:key="item.id"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item label="区号" prop="cityCode">
<el-select v-model="queryParams.cityCode" placeholder="请选择区号" clearable size="small">
<el-option
v-for="dict in cityCodeOptions"
:key="dict.id"
:label="dict.name"
:value="dict.code"
/>
</el-select>
</el-form-item>
<el-form-item label="学校名称" prop="schoolName">
<el-input
v-model="queryParams.schoolName"
placeholder="请输入"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
v-hasPermi="['sc:school:add']"
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['sc:school:update']"
type="primary"
icon="el-icon-edit-outline"
size="mini"
:disabled="single"
@click="handleUpdate"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['sc:school:delete']"
type="danger"
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column align="center" prop="provinceCode" label="省份编码" :formatter="provinceCodeFormat" />
<el-table-column align="center" prop="cityCode" label="区号" :formatter="cityCodeFormat" />
<el-table-column prop="schoolName" label="学校名称" />
<el-table-column width="150" label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
v-hasPermi="['sc:school:update']"
size="mini"
type="text"
icon="el-icon-edit-outline"
@click="handleUpdate(scope.row)"
>修改</el-button>
<el-button
v-hasPermi="['sc:school:delete']"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="省分">
<el-select
v-model="form.provinceCode"
clearable
filterable
default-first-option
placeholder="请选择省份"
>
<el-option
v-for="dict in provinceCodeOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="地市">
<el-select
v-model="form.cityCode"
clearable
filterable
default-first-option
placeholder="请选择地市"
>
<el-option
v-for="dict in cityCodeOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="学校名称" prop="schoolName">
<el-input v-model="form.schoolName" placeholder="请输入" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listSchool, getSchool, delSchool, addSchool, updateSchool } from '@/api/school/sc/school'
import {listAddress} from "@/api/school/sc/address";
export default {
name: 'School',
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
total: 0,
//
dataList: [],
//
title: '',
//
open: false,
//
provinceCodeOptions: [],
//
cityCodeOptions: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
level:0,
provinceCode: undefined,
cityCode: undefined,
schoolName: undefined
},
//
form: {},
//
rules: {
schoolName: [
{ required: true, message: '不能为空', trigger: 'blur' }
]
}
}
},
watch: {
'form.provinceCode': {
handler(newValue, oldValue) {
if (newValue) {
this.form.cityCode = undefined
this.listAddress({parentCode:newValue}).then(response => {
this.cityCodeOptions = response.data
})
}
}
}
},
created() {
this.getList()
listAddress({level:this.queryParams.level}).then(response => {
this.provinceCodeOptions = response.data
})
},
methods: {
/** 查询部门列表 */
getList() {
this.loading = true
listSchool(this.queryParams).then(response => {
this.dataList = response.data.rows
this.total = response.data.total
this.loading = false
})
},
//
provinceCodeFormat(row, column) {
return this.selectDictLabel(this.provinceCodeOptions, row.provinceCode)
},
//
cityCodeFormat(row, column) {
return this.selectDictLabel(this.cityCodeOptions, row.cityCode)
},
//
cancel() {
this.open = false
this.reset()
},
//
reset() {
this.form = {
provinceCode: undefined,
cityCode: undefined,
schoolName: undefined
}
this.resetForm('form')
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm('queryForm')
this.handleQuery()
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset()
this.open = true
this.title = '添加学校信息'
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.schoolId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
getSchool(row.schoolId || this.ids).then(response => {
this.form = response.data
this.open = true
this.title = '修改学校信息'
})
},
/** 提交按钮 */
submitForm: function() {
this.$refs['form'].validate(valid => {
if (valid) {
if (this.form.schoolId !== undefined) {
updateSchool(this.form).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('修改成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
})
} else {
addSchool(this.form).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('新增成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
})
}
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.schoolId || this.ids
this.$confirm('是否确认删除?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return delSchool(id)
}).then((response) => {
if (response.respCode === '0000') {
this.getList()
this.msgSuccess('删除成功')
} else {
this.msgError(response.respMsg)
}
}).catch(function() {})
}
}
}
</script>

@ -72,6 +72,7 @@
</div>
</template>
<script>
import { selectDictLabel } from '@/utils/commonUtils'
import { atClaStudentCourseStatus, searchStudentCourse, stopStudentCourseStatus } from '@/api/school/sc/student/course'
import claTimeAttendDetailTable from '@/components/sc/claTime/claTimeAttendDetailTable'
export default {
@ -107,11 +108,11 @@ export default {
// > 0
return '按时间(未生效)'
} else {
return this.selectDictLabel(this.chargeTypeOptions, row.chargeType)
return selectDictLabel(this.chargeTypeOptions, row.chargeType)
}
},
studentCourseStatusFormatter(row, column) {
return this.selectDictLabel(this.studentCourseStatusOptions, row.status)
return selectDictLabel(this.studentCourseStatusOptions, row.status)
},
getList() {
this.loading = true

@ -55,6 +55,7 @@
</div>
</template>
<script>
import { selectDictLabel } from '@/utils/commonUtils'
import { listStudentCourseLog } from '@/api/school/sc/log/studentLog'
import deptSelect from '@/components/system/dept/deptSelect'
import claSelect from '@/components/sc/course/cla/claSelect'
@ -135,7 +136,7 @@ export default {
})
},
orderTypeFormat(row, column) {
return this.selectDictLabel(this.logTypeOptions, row.orderType)
return selectDictLabel(this.logTypeOptions, row.orderType)
}
}
}

@ -49,6 +49,7 @@
</div>
</template>
<script>
import { selectDictLabel } from '@/utils/commonUtils'
import { listOrder } from '@/api/school/sc/order'
import orderDetail from '@/components/sc/order/orderDetail'
export default {
@ -83,7 +84,7 @@ export default {
}
},
created() {
this.getDictListByDictType('order_type').then(response => {
this.getDictListByDictType('course_order_type').then(response => {
this.orderTypeOptions = response.data
})
},
@ -99,7 +100,7 @@ export default {
})
},
orderTypeFormat(row, column) {
return this.selectDictLabel(this.orderTypeOptions, row.orderType)
return selectDictLabel(this.orderTypeOptions, row.orderType)
},
//
handleOrderDetail(row) {

@ -1,347 +0,0 @@
<template>
<div class="app-container">
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
<el-form-item label="所属租户" prop="tenantId">
<el-input
v-model="queryParams.tenantId"
placeholder="请输入所属租户"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="标签名称" prop="tagName">
<el-input
v-model="queryParams.tagName"
placeholder="请输入标签名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="标签类型" prop="tagType">
<el-select v-model="queryParams.tagType" placeholder="请选择标签类型" clearable size="small">
<el-option
v-for="dict in tagTypeOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
v-hasPermi="['sys:tag:add']"
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['sys:tag:update']"
type="primary"
icon="el-icon-edit-outline"
size="mini"
:disabled="single"
@click="handleUpdate"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['sys:tag:delete']"
type="danger"
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['::export']"
type="primary"
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column prop="tagName" label="标签名称" />
<el-table-column align="center" prop="tagType" label="标签类型" :formatter="tagTypeFormat" />
<el-table-column width="150" label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
v-hasPermi="['sys:tag:update']"
size="mini"
type="text"
icon="el-icon-edit-outline"
@click="handleUpdate(scope.row)"
>修改</el-button>
<el-button
v-hasPermi="['sys:tag:delete']"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px">
<el-form ref="form" v-loading="loadingChange" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="标签名称" prop="tagName">
<el-input v-model="form.tagName" placeholder="请输入标签名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标签类型">
<el-select v-model="form.tagType" placeholder="请选择标签类型">
<el-option
v-for="dict in tagTypeOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="创建者" prop="createUser">
<el-input v-model="form.createUser" placeholder="请输入创建者" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="form.createTime"
clearable
size="small"
style="width: 200px"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择创建时间"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="更新者" prop="lastUpdateUser">
<el-input v-model="form.lastUpdateUser" placeholder="请输入更新者" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="更新时间" prop="lastUpdateTime">
<el-date-picker
v-model="form.lastUpdateTime"
clearable
size="small"
style="width: 200px"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择更新时间"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="loadingChange" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listTag, getTag, delTag, addTag, updateTag } from '@/api/school/system/tag'
export default {
name: 'Tag',
data() {
return {
//
loading: true,
loadingChange: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
total: 0,
//
dataList: [],
//
title: '',
//
open: false,
//
tagTypeOptions: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
tenantId: undefined,
tagName: undefined,
tagType: undefined
},
//
form: {},
//
rules: {
tagName: [
{ required: true, message: '标签名称不能为空', trigger: 'blur' }
],
tagType: [
{ required: true, message: '标签类型不能为空', trigger: 'blur' }
]
}
}
},
created() {
this.getList()
this.getDictListByDictType('tag_type').then(response => {
this.tagTypeOptions = response.data
})
},
methods: {
getList() {
this.loading = true
listTag(this.queryParams).then(response => {
this.dataList = response.data.rows
this.total = response.data.total
this.loading = false
})
},
//
tagTypeFormat(row, column) {
return this.selectDictLabel(this.tagTypeOptions, row.tagType)
},
//
cancel() {
this.open = false
this.reset()
},
//
reset() {
this.form = {
tagName: undefined,
tagType: undefined,
createUser: undefined,
createTime: undefined,
lastUpdateUser: undefined,
lastUpdateTime: undefined
}
this.resetForm('form')
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm('queryForm')
this.handleQuery()
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset()
this.open = true
this.title = '添加标签'
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.tagId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
getTag(row.tagId || this.ids).then(response => {
this.form = response.data
this.open = true
this.title = '修改标签'
})
},
/** 提交按钮 */
submitForm: function() {
this.$refs['form'].validate(valid => {
if (valid) {
this.loadingChange = true
if (this.form.tagId !== undefined) {
updateTag(this.form).then(response => {
this.loadingChange = false
if (response.respCode === '0000') {
this.msgSuccess('修改成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
}).catch(() => {
this.loadingChange = false
})
} else {
addTag(this.form).then(response => {
this.loadingChange = false
if (response.respCode === '0000') {
this.msgSuccess('新增成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
}).catch(() => {
this.loadingChange = false
})
}
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.tagId || this.ids
this.$confirm('是否确认删除?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return delTag(id)
}).then((response) => {
if (response.respCode === '0000') {
this.getList()
this.msgSuccess('删除成功')
} else {
this.msgError(response.respMsg)
}
}).catch(function() {})
}
}
}
</script>

@ -1,347 +0,0 @@
<template>
<div class="app-container">
<el-form :inline="true">
<el-form-item label="部门名称:">
<el-input
v-model="queryParams.deptName"
placeholder="请输入部门名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态:">
<el-select v-model="queryParams.inUse" placeholder="部门状态" clearable size="small">
<el-option
v-for="dict in inUseOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button
class="filter-item"
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
v-hasPermi="['system:dept:add']"
class="filter-item"
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button>
</el-col>
</el-row>
<el-table
v-loading="loading"
:data="deptList"
row-key="deptId"
default-expand-all
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
>
<el-table-column prop="deptName" label="部门/校区名称" width="200">
<template slot-scope="scope">
<el-tag :type="scope.row.deptType === '1'?'info':'' ">{{ scope.row.deptType === '1'?'部门':'校区' }}</el-tag>
<span>{{ scope.row.deptName }}</span>
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" width="200" />
<el-table-column prop="inUse" label="状态" :formatter="inUseFormat" width="100" />
<el-table-column label="创建时间" align="center" prop="createTime" width="200">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
v-hasPermi="['system:dept:update']"
size="mini"
type="text"
icon="el-icon-edit-outline"
@click="handleUpdate(scope.row)"
>修改</el-button>
<el-button
v-hasPermi="['system:dept:add']"
size="mini"
type="text"
icon="el-icon-plus"
@click="handleAdd(scope.row)"
>新增</el-button>
<el-button
v-if="scope.row.parentId !== -1"
v-hasPermi="['system:dept:delete']"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 添加或修改部门对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px">
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-row>
<el-col v-if="form.parentId !== 0" :span="24">
<el-form-item label="上级部门:" prop="parentId">
<treeselect v-model="form.parentId" :options="deptOptions" placeholder="选择上级部门" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="部门名称:" prop="deptName">
<el-input v-model="form.deptName" placeholder="请输入部门名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="部门类型:">
<el-radio-group v-model="form.deptType">
<el-radio
v-for="dict in deptTypeOptions"
:key="dict.deptType"
:label="dict.deptType"
>{{ dict.deptTypeName }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<!--<el-col :span="12">
<el-form-item label="显示排序" prop="sort">
<el-input-number v-model="form.sort" controls-position="right" :min="0" />
</el-form-item>
</el-col>-->
<el-col :span="12">
<el-form-item label="负责人:" prop="leader">
<el-input v-model="form.leader" placeholder="请输入负责人" maxlength="20" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话:" prop="phone">
<el-input v-model="form.phone" placeholder="请输入联系电话" maxlength="11" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱:" prop="email">
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="部门状态:">
<el-radio-group v-model="form.inUse">
<el-radio
v-for="dict in inUseOptions"
:key="dict.dictValue"
:label="dict.dictValue"
>{{ dict.dictLabel }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listDept, getDept, treeSelect, delDept, addDept, updateDept } from '@/api/school/system/dept'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
export default {
name: 'Dept',
components: { Treeselect },
data() {
return {
//
loading: true,
//
deptList: [],
//
deptOptions: undefined,
//
title: '',
//
open: false,
//
inUseOptions: [],
//
deptTypeOptions: [{
deptType: '1',
deptTypeName: '部门'
}, {
deptType: '2',
deptTypeName: '校区'
}],
//
queryParams: {
deptName: undefined,
inUse: undefined
},
//
form: {
deptType: '1'
},
//
rules: {
parentId: [
{ required: true, message: '上级部门不能为空', trigger: 'blur' }
],
deptName: [
{ required: true, message: '部门名称不能为空', trigger: 'blur' }
],
deptType: [
{ required: true, message: '请选择部门类型', trigger: 'blur' }
],
email: [
{
type: 'email',
message: "'请输入正确的邮箱地址",
trigger: ['blur', 'change']
}
],
phone: [
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: '请输入正确的手机号码',
trigger: 'blur'
}
]
}
}
},
created() {
this.getList()
this.getDictListByDictType('in_use').then(response => {
this.inUseOptions = response.data
})
},
methods: {
/** 查询部门列表 */
getList() {
this.loading = true
listDept(this.queryParams).then(response => {
this.deptList = response.data
this.loading = false
})
},
/** 查询部门下拉树结构 */
getTreeSelect() {
treeSelect().then(response => {
this.deptOptions = []
const dept = { id: -1, label: '根目录', children: [] }
dept.children = response.data
this.deptOptions.push(dept)
})
},
//
inUseFormat(row, column) {
return this.selectDictLabel(this.inUseOptions, row.inUse)
},
//
cancel() {
this.open = false
this.reset()
},
//
reset() {
this.form = {
deptId: undefined,
parentId: undefined,
deptName: undefined,
sort: undefined,
leader: undefined,
phone: undefined,
email: undefined,
deptType: '1',
inUse: '1'
}
this.resetForm('form')
},
/** 搜索按钮操作 */
handleQuery() {
this.getList()
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset()
this.getTreeSelect()
if (row !== undefined) {
this.form.parentId = row.deptId
}
this.open = true
this.title = '添加部门'
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
this.getTreeSelect()
getDept(row.deptId).then(response => {
this.form = response.data
this.open = true
this.title = '修改部门'
})
},
/** 提交按钮 */
submitForm: function() {
this.$refs['form'].validate(valid => {
if (valid) {
if (this.form.deptId !== undefined) {
updateDept(this.form).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('修改成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
})
} else {
addDept(this.form).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('新增成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
})
}
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
this.$confirm('是否确认删除名称为"' + row.deptName + '"的数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return delDept(row.deptId)
}).then((response) => {
if (response.respCode === '0000') {
this.getList()
this.msgSuccess('删除成功')
} else {
this.msgError(response.respMsg)
}
}).catch(function() {})
}
}
}
</script>

@ -1,358 +0,0 @@
<template>
<div class="app-container">
<el-form ref="queryForm" :model="queryParams" :inline="true">
<el-form-item label="字典名称" prop="dictType">
<el-select v-model="queryParams.dictType" size="small">
<el-option
v-for="item in typeOptions"
:key="item.dictTypeId"
:label="item.dictName"
:value="item.dictType"
/>
</el-select>
</el-form-item>
<el-form-item label="字典标签" prop="dictLabel">
<el-input
v-model="queryParams.dictLabel"
placeholder="请输入字典标签"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="inUse">
<el-select v-model="queryParams.inUse" placeholder="数据状态" clearable size="small">
<el-option
v-for="dict in inUseOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
v-hasPermi="['system:dict:add']"
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:dict:edit']"
type="primary"
icon="el-icon-edit-outline"
size="mini"
:disabled="single"
@click="handleUpdate"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:dict:remove']"
type="danger"
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="字典标签" align="center" prop="dictLabel" />
<el-table-column label="字典键值" align="center" prop="dictValue" />
<el-table-column label="字典排序" align="center" prop="dictSort" />
<el-table-column label="状态" align="center" prop="inUse" :formatter="inUseFormat" />
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
v-hasPermi="['system:dict:update']"
size="mini"
type="text"
icon="el-icon-edit-outline"
@click="handleUpdate(scope.row)"
>修改</el-button>
<el-button
v-hasPermi="['system:dict:delete']"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="字典类型">
<el-input v-model="form.dictType" :disabled="true" />
</el-form-item>
<el-form-item label="数据标签" prop="dictLabel">
<el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
</el-form-item>
<el-form-item label="数据键值" prop="dictValue">
<el-input v-model="form.dictValue" placeholder="请输入数据键值" />
</el-form-item>
<el-form-item label="显示排序" prop="dictSort">
<el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
</el-form-item>
<el-form-item label="状态" prop="inUse">
<el-radio-group v-model="form.inUse">
<el-radio
v-for="dict in inUseOptions"
:key="dict.dictValue"
:label="dict.dictValue"
>{{ dict.dictLabel }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listData, getData, delData, addData, updateData, exportData } from '@/api/school/system/dict/data'
import { listType, getType } from '@/api/school/system/dict/type'
export default {
name: 'Data',
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
total: 0,
//
dataList: [],
//
defaultDictType: '',
//
title: '',
//
open: false,
//
inUseOptions: [],
//
typeOptions: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
dictName: undefined,
dictType: undefined,
inUse: undefined
},
//
form: {},
//
rules: {
dictLabel: [
{ required: true, message: '数据标签不能为空', trigger: 'blur' }
],
dictValue: [
{ required: true, message: '数据键值不能为空', trigger: 'blur' }
],
dictSort: [
{ required: true, message: '数据顺序不能为空', trigger: 'blur' }
]
}
}
},
created() {
const dictTypeId = this.$route.params && this.$route.params.dictTypeId
if (dictTypeId !== undefined) {
this.getType(dictTypeId)
} else {
this.getList()
}
this.getTypeList()
this.getDictListByDictType('in_use').then(response => {
this.inUseOptions = response.data
})
},
methods: {
/** 查询字典类型详细 */
getType(dictTypeId) {
getType(dictTypeId).then(response => {
this.queryParams.dictType = response.data.dictType
this.defaultDictType = response.data.dictType
this.getList()
})
},
/** 查询字典类型列表 */
getTypeList() {
const dictTypeId = this.$route.params && this.$route.params.dictTypeId
listType().then(response => {
this.typeOptions = response.data.rows
if (dictTypeId === undefined) {
if (this.typeOptions.length > 0) {
this.queryParams.dictType = this.typeOptions[0].dictType
this.defaultDictType = this.typeOptions[0].dictType
} else {
this.msgInfo('请先设置字典类型,再设置字典数据')
}
}
})
},
/** 查询字典数据列表 */
getList() {
this.loading = true
listData(this.queryParams).then(response => {
this.dataList = response.data.rows
this.total = response.data.total
this.loading = false
})
},
//
inUseFormat(row, column) {
return this.selectDictLabel(this.inUseOptions, row.inUse)
},
//
cancel() {
this.open = false
this.reset()
},
//
reset() {
this.form = {
dictDataId: undefined,
dictLabel: undefined,
dictValue: undefined,
dictSort: 0,
inUse: '1',
remark: undefined
}
this.resetForm('form')
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm('queryForm')
this.queryParams.dictType = this.defaultDictType
this.handleQuery()
},
/** 新增按钮操作 */
handleAdd() {
this.reset()
this.open = true
this.title = '添加字典数据'
this.form.dictType = this.queryParams.dictType
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.dictDataId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
const dictDataId = row.dictDataId || this.ids
getData(dictDataId).then(response => {
this.form = response.data
this.open = true
this.title = '修改字典数据'
})
},
/** 提交按钮 */
submitForm: function() {
this.$refs['form'].validate(valid => {
if (valid) {
if (this.form.dictDataId !== undefined) {
updateData(this.form).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('修改成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
})
} else {
addData(this.form).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('新增成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
})
}
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
const dictDataIds = row.dictDataId || this.ids
this.$confirm('是否确认删除?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return delData(dictDataIds)
}).then(() => {
this.getList()
this.msgSuccess('删除成功')
}).catch(function() {})
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams
this.$confirm('是否确认导出所有数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return exportData(queryParams)
}).then(response => {
this.download(response.respMsg)
}).catch(function() {})
}
}
}
</script>

@ -1,349 +0,0 @@
<template>
<div class="app-container">
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
<el-form-item label="字典名称" prop="dictName">
<el-input
v-model="queryParams.dictName"
placeholder="请输入字典名称"
clearable
size="small"
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="字典类型" prop="dictType">
<el-input
v-model="queryParams.dictType"
placeholder="请输入字典类型"
clearable
size="small"
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="inUse">
<el-select
v-model="queryParams.inUse"
placeholder="字典状态"
clearable
size="small"
style="width: 240px"
>
<el-option
v-for="dict in inUseOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="dateRange"
size="small"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
v-hasPermi="['system:dict:add']"
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:dict:update']"
type="primary"
icon="el-icon-edit-outline"
size="mini"
:disabled="single"
@click="handleUpdate"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:dict:delete']"
type="danger"
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:dict:export']"
type="primary"
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="typeList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="字典名称" align="center" prop="dictName" :show-overflow-tooltip="true" />
<el-table-column label="字典类型" align="center" :show-overflow-tooltip="true">
<template slot-scope="scope">
<router-link :to="'/system/dict/data/' + scope.row.dictTypeId" class="link-type">
<span>{{ scope.row.dictType }}</span>
</router-link>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="inUse" :formatter="inUseFormat" />
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
v-hasPermi="['system:dict:update']"
size="mini"
type="text"
icon="el-icon-edit-outline"
@click="handleUpdate(scope.row)"
>修改</el-button>
<el-button
v-hasPermi="['system:dict:delete']"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="字典名称" prop="dictName">
<el-input v-model="form.dictName" placeholder="请输入字典名称" />
</el-form-item>
<el-form-item label="字典类型" prop="dictType">
<el-input v-model="form.dictType" placeholder="请输入字典类型" />
</el-form-item>
<el-form-item label="状态" prop="inUse">
<el-radio-group v-model="form.inUse">
<el-radio
v-for="dict in inUseOptions"
:key="dict.dictValue"
:label="dict.dictValue"
>{{ dict.dictLabel }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listType, getType, delType, addType, updateType, exportType } from '@/api/school/system/dict/type'
export default {
name: 'Dict',
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
total: 0,
//
typeList: [],
//
title: '',
//
open: false,
//
inUseOptions: [],
//
dateRange: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
dictName: undefined,
dictType: undefined,
inUse: undefined
},
//
form: {},
//
rules: {
dictName: [
{ required: true, message: '字典名称不能为空', trigger: 'blur' }
],
dictType: [
{ required: true, message: '字典类型不能为空', trigger: 'blur' }
]
}
}
},
created() {
this.getList()
this.getDictListByDictType('in_use').then(response => {
this.inUseOptions = response.data
})
},
methods: {
/** 查询字典类型列表 */
getList() {
this.loading = true
listType(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.typeList = response.data.rows
this.total = response.data.total
this.loading = false
}
)
},
//
inUseFormat(row, column) {
return this.selectDictLabel(this.inUseOptions, row.inUse)
},
//
cancel() {
this.open = false
this.reset()
},
//
reset() {
this.form = {
dictTypeId: undefined,
dictName: undefined,
dictType: undefined,
inUse: '1',
remark: undefined
}
this.resetForm('form')
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.dateRange = []
this.resetForm('queryForm')
this.handleQuery()
},
/** 新增按钮操作 */
handleAdd() {
this.reset()
this.open = true
this.title = '添加字典类型'
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.dictTypeId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
const dictTypeId = row.dictTypeId || this.ids
getType(dictTypeId).then(response => {
this.form = response.data
this.open = true
this.title = '修改字典类型'
})
},
/** 提交按钮 */
submitForm: function() {
this.$refs['form'].validate(valid => {
if (valid) {
if (this.form.dictTypeId !== undefined) {
updateType(this.form).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('修改成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
})
} else {
addType(this.form).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('新增成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
})
}
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
const dictTypeIds = row.dictTypeId || this.ids
this.$confirm('是否确认删除?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return delType(dictTypeIds)
}).then(() => {
this.getList()
this.msgSuccess('删除成功')
}).catch(function() {})
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams
this.$confirm('是否确认导出所有类型数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return exportType(queryParams)
}).then(response => {
this.download(response.respMsg)
}).catch(function() {})
}
}
}
</script>

@ -1,359 +0,0 @@
<template>
<div class="app-container">
<el-form :inline="true">
<el-form-item label="菜单名称">
<el-input
v-model="queryParams.menuName"
placeholder="请输入菜单名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态">
<el-select v-model="queryParams.visible" placeholder="菜单状态" clearable size="small">
<el-option
v-for="dict in visibleOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button v-hasPermi="['system:menu:add']" type="primary" icon="el-icon-plus" size="mini" @click="handleAdd">
新增
</el-button>
</el-form-item>
</el-form>
<el-table
v-loading="loading"
:data="menuList"
row-key="menuId"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
>
<el-table-column prop="menuName" label="菜单名称" :show-overflow-tooltip="true" width="130px" />
<el-table-column prop="icon" label="图标" align="center" width="100px">
<template slot-scope="scope">
<svg-icon :icon-class="scope.row.icon" />
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" width="60px" />
<el-table-column prop="permissionMeta" label="权限标识" width="130px" :show-overflow-tooltip="true" />
<el-table-column prop="component" label="组件路径" width="180px" :show-overflow-tooltip="true" />
<el-table-column prop="isShow" label="可见" :formatter="visibleFormat" width="80px" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="180" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
v-hasPermi="['system:menu:update']"
size="mini"
type="text"
icon="el-icon-edit-outline"
@click="handleUpdate(scope.row)"
>修改
</el-button>
<el-button
v-hasPermi="['system:menu:add']"
size="mini"
type="text"
icon="el-icon-plus"
@click="handleAdd(scope.row)"
>新增
</el-button>
<el-button
v-hasPermi="['system:menu:delete']"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 添加或修改菜单对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="24">
<el-form-item label="上级菜单">
<treeselect
v-model="form.parentId"
:options="menuOptions"
:show-count="true"
placeholder="选择上级菜单"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="菜单类型" prop="menuType">
<el-radio-group v-model="form.menuType">
<el-radio label="dir">目录</el-radio>
<el-radio label="menu">菜单</el-radio>
<el-radio label="button">按钮</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item v-if="form.menuType !== 'button'" label="菜单图标">
<el-popover
placement="bottom-start"
width="460"
trigger="click"
@show="$refs['iconSelect'].reset()"
>
<IconSelect ref="iconSelect" @selected="selected" />
<el-input slot="reference" v-model="form.icon" placeholder="点击选择图标" readonly>
<svg-icon
v-if="form.icon"
slot="prefix"
:icon-class="form.icon"
class="el-input__icon"
style="height: 32px;width: 16px;"
/>
<i v-else slot="prefix" class="el-icon-search el-input__icon" />
</el-input>
</el-popover>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="菜单名称" prop="menuName">
<el-input v-model="form.menuName" placeholder="请输入菜单名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="显示排序" prop="sort">
<el-input-number v-model="form.sort" controls-position="right" :min="0" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.menuType !== 'button'" label="是否外链">
<el-radio-group v-model="form.outUrl">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.menuType !== 'button'" label="是否在用">
<el-radio-group v-model="form.enable">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.menuType !== 'button'" label="路由地址" prop="routerPath">
<el-input v-model="form.routerPath" placeholder="路由地址 如 menu" />
</el-form-item>
</el-col>
<el-col v-if="form.menuType === 'menu'" :span="12">
<el-form-item label="组件路径" prop="component">
<el-input v-model="form.component" placeholder="组件路径 如 system/menu/index" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.menuType !== 'dir'" label="权限标识">
<el-input v-model="form.permissionMeta" placeholder="权限标识 如 system:menu:list" maxlength="50" />
</el-form-item>
</el-col>
<el-col v-if="form.menuType !== 'dir'" :span="12">
<el-form-item label="请求路径" prop="requestUrl">
<el-input v-model="form.requestUrl" placeholder="请输入请求路径" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.menuType !== 'F'" label="是否展示">
<el-radio-group v-model="form.isShow">
<el-radio
v-for="dict in visibleOptions"
:key="dict.dictValue"
:label="dict.dictValue"
>{{ dict.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listMenu, getMenu, treeSelect, delMenu, addMenu, updateMenu } from '@/api/school/system/menu'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import IconSelect from '@/components/IconSelect'
export default {
name: 'Menu',
components: { Treeselect, IconSelect },
data() {
return {
//
loading: true,
//
menuList: [],
//
menuOptions: [],
//
title: '',
//
open: false,
//
visibleOptions: [],
//
queryParams: {
menuName: undefined,
visible: undefined
},
//
form: {},
//
rules: {
menuName: [
{ required: true, message: '菜单名称不能为空', trigger: 'blur' }
],
sort: [
{ required: true, message: '菜单顺序不能为空', trigger: 'blur' }
]
}
}
},
created() {
this.getList()
this.getDictListByDictType('is_show').then(response => {
this.visibleOptions = response.data
})
},
methods: {
//
selected(name) {
this.form.icon = name
},
/** 查询菜单列表 */
getList() {
this.loading = true
listMenu(this.queryParams).then(response => {
this.menuList = response.data
this.loading = false
})
},
/** 查询菜单下拉树结构 */
getTreeSelect() {
treeSelect().then(response => {
this.menuOptions = []
const menu = { id: -1, label: '根目录', children: [] }
menu.children = response.data
this.menuOptions.push(menu)
})
},
//
visibleFormat(row, column) {
if (row.menuType === 'button') {
return ''
}
return this.selectDictLabel(this.visibleOptions, row.isShow)
},
//
cancel() {
this.open = false
this.reset()
},
//
reset() {
this.form = {
menuId: undefined,
parentId: 0,
menuName: undefined,
icon: undefined,
menuType: 'menu',
orderNum: undefined,
outUrl: '0',
enable: '1',
isShow: '1'
}
this.resetForm('form')
},
/** 搜索按钮操作 */
handleQuery() {
this.getList()
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset()
this.getTreeSelect()
if (row != null) {
this.form.parentId = row.menuId
}
this.open = true
this.title = '添加菜单'
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
this.getTreeSelect()
getMenu(row.menuId).then(response => {
this.form = response.data
this.open = true
this.title = '修改菜单'
})
},
/** 提交按钮 */
submitForm: function() {
this.$refs['form'].validate(valid => {
if (valid) {
if (this.form.menuId !== undefined) {
updateMenu(this.form).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('修改成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
})
} else {
addMenu(this.form).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('新增成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
})
}
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
this.$confirm('是否确认删除名称为"' + row.menuName + '"的菜单?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return delMenu(row.menuId)
}).then(() => {
this.getList()
this.msgSuccess('删除成功')
}).catch(function() {
})
}
}
}
</script>

@ -1,354 +0,0 @@
<template>
<div class="app-container">
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
<el-form-item label="角色名称" prop="roleName">
<el-input
v-model="queryParams.roleName"
placeholder="请输入角色名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="inUse">
<el-select v-model="queryParams.inUse" placeholder="请选择状态" clearable size="small">
<el-option
v-for="dict in inUseOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
v-hasPermi="['system:role:add']"
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button>
</el-col>
</el-row>
<el-table
v-loading="loading"
:data="role"
row-key="roleId"
default-expand-all
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
>
<el-table-column prop="roleName" label="角色名称" />
<el-table-column prop="roleCode" label="角色编码" />
<el-table-column prop="sort" label="显示顺序" />
<el-table-column align="center" prop="inUse" label="状态" :formatter="inUseFormat" />
<el-table-column label="创建时间" align="center" prop="createTime" width="200">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
v-hasPermi="['system:role:update']"
size="mini"
type="text"
icon="el-icon-edit-outline"
@click="handleUpdate(scope.row)"
>修改</el-button>
<el-button
v-hasPermi="['system:role:add']"
size="mini"
type="text"
icon="el-icon-plus"
@click="handleAdd(scope.row)"
>新增</el-button>
<el-button
v-if="scope.row.parentId !== -1"
v-hasPermi="['system:role:delete']"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 添加或修改对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="24">
<el-form-item label="上级角色" prop="parentId">
<treeselect v-model="form.parentId" :options="parentOptions" placeholder="选择上级角色" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="角色编码" prop="roleCode">
<el-input v-model="form.roleCode" placeholder="请输入角色编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="角色名称" prop="roleName">
<el-input v-model="form.roleName" placeholder="请输入角色名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="显示顺序" prop="sort">
<el-input-number v-model="form.sort" controls-position="right" :min="0" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态">
<el-radio-group v-model="form.inUse">
<el-radio
v-for="dict in inUseOptions"
:key="dict.dictValue"
:label="dict.dictValue"
>{{ dict.dictLabel }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="菜单权限">
<el-tree
ref="menu"
:data="menuOptions"
show-checkbox
node-key="id"
empty-text="加载中,请稍后"
:props="defaultProps"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listRole, getRole, treeSelect, delRole, addRole, updateRole } from '@/api/school/system/role'
import { treeSelectIncludeHide, roleMenuTreeIdList } from '@/api/school/system/menu'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
export default {
name: 'Role',
components: { Treeselect },
data() {
return {
//
loading: true,
//
role: [],
//
parentOptions: undefined,
//
title: '',
//
open: false,
//
inUseOptions: [],
//
queryParams: {
roleName: undefined,
inUse: undefined
},
//
menuOptions: [],
//
form: {},
defaultProps: {
children: 'children',
label: 'label'
},
//
rules: {
parentId: [
{ required: true, message: '上级不能为空', trigger: 'blur' }
],
roleCode: [
{ required: true, message: '请输入角色编码', trigger: 'blur' }
],
roleName: [
{ required: true, message: '请输入角色名称', trigger: 'blur' }
],
sort: [
{ required: true, message: '请输入顺序', trigger: 'blur' }
],
inUse: [
{ required: true, message: '请选择是否在用', trigger: 'blur' }
]
}
}
},
created() {
this.getList()
this.getDictListByDictType('in_use').then(response => {
this.inUseOptions = response.data
})
},
methods: {
/** 查询列表 */
getList() {
this.loading = true
listRole(this.queryParams).then(response => {
this.role = response.data
this.loading = false
})
},
/** 查询下拉树结构 */
getTreeSelect() {
treeSelect().then(response => {
this.parentOptions = []
const role = { id: -1, label: '根目录', children: [] }
role.children = response.data
this.parentOptions.push(role)
})
},
/** 查询菜单树结构 */
getMenuTreeSelect() {
treeSelectIncludeHide().then(response => {
this.menuOptions = response.data
this.$refs.menu.setCheckedKeys([])
})
},
/** 根据角色ID查询菜单树结构 */
getRoleMenuTreeSelect(roleId) {
treeSelectIncludeHide().then(response => {
this.menuOptions = response.data
roleMenuTreeIdList(roleId).then(roleMenuTreeIdResponse => {
this.$refs.menu.setCheckedKeys(roleMenuTreeIdResponse.data)
})
})
},
//
getMenuAllCheckedKeys() {
//
const halfCheckedKeys = this.$refs.menu.getHalfCheckedKeys()
//
const checkedKeys = this.$refs.menu.getCheckedKeys()
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys)
return checkedKeys
},
//
inUseFormat(row, column) {
return this.selectDictLabel(this.inUseOptions, row.inUse)
},
//
cancel() {
this.open = false
this.reset()
},
//
reset() {
this.form = {
roleCode: undefined,
roleName: undefined,
sort: undefined,
inUse: '1',
deleteFlag: undefined,
createUser: undefined,
createTime: undefined,
lastUpdateUser: undefined,
lastUpdateTime: undefined,
parentId: -1
}
this.resetForm('form')
},
/** 搜索按钮操作 */
handleQuery() {
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm('queryForm')
this.handleQuery()
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset()
this.getTreeSelect()
this.getMenuTreeSelect()
if (row !== undefined) {
this.form.parentId = row.roleId
}
this.open = true
this.title = '添加'
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
this.getTreeSelect()
this.$nextTick(() => {
this.getRoleMenuTreeSelect(row.roleId)
})
getRole(row.roleId).then(response => {
this.form = response.data
this.open = true
this.title = '修改'
})
},
/** 提交按钮 */
submitForm: function() {
this.$refs['form'].validate(valid => {
if (valid) {
if (this.form.roleId !== undefined) {
this.form.menuIds = this.getMenuAllCheckedKeys()
updateRole(this.form).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('修改成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
})
} else {
this.form.menuIds = this.getMenuAllCheckedKeys()
addRole(this.form).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('新增成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
})
}
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
this.$confirm('是否确认删除?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return delRole(row.roleId)
}).then((response) => {
if (response.respCode === '0000') {
this.getList()
this.msgSuccess('删除成功')
} else {
this.msgError(response.respMsg)
}
}).catch(function() {})
}
}
}
</script>

@ -1,330 +0,0 @@
<template>
<div class="app-container">
<el-row :gutter="20">
<!--部门数据-->
<el-col :span="4" :xs="24">
<div class="head-container">
<el-input
v-model="deptName"
placeholder="请输入部门名称"
clearable
size="small"
prefix-icon="el-icon-search"
style="margin-bottom: 20px"
/>
</div>
<div class="head-container">
<el-tree
ref="tree"
:data="deptOptions"
:props="defaultProps"
:expand-on-click-node="false"
:filter-node-method="filterNode"
default-expand-all
@node-click="handleNodeClick"
/>
</div>
</el-col>
<!--员工数据-->
<el-col :span="20" :xs="24">
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px" class="align-left">
<el-form-item label="员工姓名" prop="staffName">
<el-input
v-model="queryParams.staffName"
placeholder="请输入员工姓名"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="任课教师" prop="teacher">
<el-select v-model="queryParams.teacher" placeholder="是否为任课教师" clearable size="small">
<el-option label="是" value="1" />
<el-option label="否" value="0" />
</el-select>
</el-form-item>
<el-form-item label="人事状态" prop="personnelStatus">
<el-select v-model="queryParams.personnelStatus" placeholder="人事状态" clearable size="small">
<el-option
v-for="dict in personnelStatusOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item label="性别" prop="sex">
<el-select v-model="queryParams.sex" placeholder="请选择性别" clearable size="small">
<el-option
v-for="dict in sexOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
v-hasPermi="['system:staff:add']"
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:staff:update']"
type="primary"
icon="el-icon-edit-outline"
size="mini"
:disabled="single"
@click="handleUpdate"
>修改
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:staff:delete']"
type="danger"
icon="el-icon-delete"
:disabled="multiple"
size="mini"
@click="handleDelete"
>删除</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column align="center" width="110" prop="staffName" label="员工姓名" fixed="left" />
<el-table-column align="center" prop="phone" label="联系电话" :show-overflow-tooltip="true" />
<el-table-column align="center" prop="sex" label="性别" :formatter="sexFormat" />
<el-table-column align="center" prop="personnelStatusName" label="人事状态" />
<el-table-column label="入职日期" align="center" prop="entryDate" width="110">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.entryDate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column align="center" prop="deptName" label="所属部门" :show-overflow-tooltip="true" />
<el-table-column align="center" prop="teacher" label="任课教师">
<template slot-scope="scope">
<el-tag v-if="scope.row.teacher"></el-tag>
<el-tag v-else type="info"></el-tag>
</template>
</el-table-column>
<el-table-column align="center" prop="locked" label="登录系统">
<template slot-scope="scope">
<el-tag v-if="scope.row.locked === '0'"></el-tag>
<el-tag v-else-if="scope.row.locked === '1'" type="danger">不允许</el-tag>
<el-tag v-else type="info">无账号</el-tag>
</template>
</el-table-column>
<el-table-column align="center" prop="username" label="用户名" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span v-if="scope.row.username">{{ scope.row.username }}</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column width="150" label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
v-hasPermi="['system:staff:update']"
size="mini"
type="text"
icon="el-icon-edit-outline"
@click="handleUpdate(scope.row)"
>修改
</el-button>
<el-button
v-hasPermi="['system:staff:delete']"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</el-col>
</el-row>
<change-staff ref="changeStaff" @ok="getList" />
</div>
</template>
<script>
import { listStaff, getStaff, delStaff } from '@/api/school/system/staff'
import { treeSelect } from '@/api/school/system/dept'
import changeStaff from '@/components/system/staff/changeStaff'
export default {
components: {
changeStaff
},
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
total: 0,
//
dataList: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
teacherName: undefined,
sex: undefined,
deptId: undefined
},
// M F
sexOptions: [],
//
personnelStatusOptions: [],
//
deptName: undefined,
deptOptions: [],
defaultProps: {
children: 'children',
label: 'label'
}
}
},
watch: {
//
deptName(val) {
this.$refs.tree.filter(val)
}
},
created() {
this.getList()
this.getDeptTreeSelect()
this.getDictListByDictType('sex').then(response => {
this.sexOptions = response.data
})
this.getDictListByDictType('personnel_status').then(response => {
this.personnelStatusOptions = response.data
})
},
methods: {
/** 查询部门列表 */
getList() {
this.loading = true
listStaff(this.queryParams).then(response => {
this.dataList = response.data.rows
this.total = response.data.total
this.loading = false
})
},
/** 查询部门下拉树结构 */
getDeptTreeSelect() {
treeSelect().then(response => {
this.deptOptions = response.data
})
},
// M F
sexFormat(row, column) {
return this.selectDictLabel(this.sexOptions, row.sex)
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm('queryForm')
this.queryParams.deptId = undefined
this.handleQuery()
},
/** 新增按钮操作 */
handleAdd(row) {
this.$refs.changeStaff.reset()
this.$refs.changeStaff.title = '添加员工信息'
this.$refs.changeStaff.getRoleTreeSelect()
this.$refs.changeStaff.open = true
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.staffId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 修改按钮操作 */
handleUpdate(row) {
getStaff(row.staffId || this.ids).then(response => {
this.$refs.changeStaff.reset()
const staffInfo = response.data.staffInfo
const checkRoleIds = response.data.roleTreeIdList
const userInfo = response.data.userInfo
if (userInfo !== undefined) {
staffInfo.loginUser = true
staffInfo.username = userInfo.username
staffInfo.locked = userInfo.locked
} else {
staffInfo.loginUser = false
staffInfo.locked = '0'
}
staffInfo.belongCampus = response.data.belongCampus
staffInfo.partCampus = response.data.partCampus
this.$refs.changeStaff.form = staffInfo
this.$refs.changeStaff.checkRoleIds = checkRoleIds
this.$refs.changeStaff.title = '修改员工信息'
this.$refs.changeStaff.getRoleTreeSelect()
this.$refs.changeStaff.open = true
})
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.staffId || this.ids
this.$confirm('是否确认删除?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return delStaff(id)
}).then((response) => {
if (response.respCode === '0000') {
this.getList()
this.msgSuccess('删除成功')
} else {
this.msgError(response.respMsg)
}
}).catch(function() {
})
},
//
filterNode(value, data) {
if (!value) return true
return data.label.indexOf(value) !== -1
},
//
handleNodeClick(data) {
this.queryParams.deptId = data.id
this.getList()
}
}
}
</script>

@ -1,317 +0,0 @@
<template>
<div class="app-container">
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
<el-form-item label="租户名称" prop="tenantName">
<el-input
v-model="queryParams.tenantName"
placeholder="请输入租户名称"
clearable
size="small"
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="联系人" prop="contactName">
<el-input
v-model="queryParams.contactName"
placeholder="请输入联系人"
clearable
size="small"
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="inUse">
<el-select
v-model="queryParams.inUse"
placeholder="租户状态"
clearable
size="small"
style="width: 240px"
>
<el-option
v-for="dict in inUseOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item label="到期日期">
<el-date-picker
v-model="dateRange"
size="small"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="useEndRangeOptions"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
v-hasPermi="['system:tenant:add']"
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>租户入驻</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:tenant:update']"
type="primary"
icon="el-icon-edit-outline"
size="mini"
:disabled="single"
@click="handleUpdate"
>信息变更</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:tenant:delete']"
type="danger"
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:tenant:export']"
type="primary"
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="租户名称" align="center" prop="tenantName" :show-overflow-tooltip="true" />
<el-table-column label="联系人" align="center" prop="contactName" :show-overflow-tooltip="true" />
<el-table-column label="联系电话" align="center" prop="contactPhone" :show-overflow-tooltip="true" />
<el-table-column label="状态" align="center" prop="inUse" :formatter="inUseFormat">
<template slot-scope="scope">
<el-tag v-if="scope.row.endTime < new Date().getTime()" size="medium" type="danger"></el-tag>
<el-tag v-else-if="scope.row.inUse === '1'" size="medium">在用</el-tag>
<el-tag v-else-if="scope.row.inUse === '0'" size="medium" type="warning">停用</el-tag>
</template>
</el-table-column>
<el-table-column label="入驻时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="生效时间" align="center" prop="beginTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.beginTime) }}</span>
</template>
</el-table-column>
<el-table-column label="失效时间" align="center" prop="endTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.endTime) }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="memo" :show-overflow-tooltip="true" />
<el-table-column fixed="right" width="150" label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
v-hasPermi="['system:tenant:update']"
size="mini"
type="text"
icon="el-icon-edit-outline"
@click="handleUpdate(scope.row)"
>信息变更</el-button>
<el-button
v-hasPermi="['system:tenant:delete']"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<change-tenant ref="changeTenant" @ok="getList" />
</div>
</template>
<script>
import { listTenant, getTenant, delTenant, exportTenant } from '@/api/school/system/tenant'
import changeTenant from '@/components/system/tenant/changeTenant'
export default {
components: {
changeTenant
},
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
total: 0,
//
dataList: [],
//
inUseOptions: [],
//
dateRange: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
tenantName: undefined,
contactName: undefined,
inUse: undefined
},
useEndRangeOptions: {
shortcuts: [{
text: '7天',
onClick(picker) {
const start = new Date()
const end = new Date()
end.setTime(start.getTime() + 3600 * 1000 * 24 * 7)
picker.$emit('pick', [start, end])
}
}, {
text: '15天',
onClick(picker) {
const start = new Date()
const end = new Date()
end.setTime(start.getTime() + 3600 * 1000 * 24 * 15)
picker.$emit('pick', [start, end])
}
}, {
text: '1个月',
onClick(picker) {
const start = new Date()
const end = new Date()
end.setTime(start.getTime() + 3600 * 1000 * 24 * 30)
picker.$emit('pick', [start, end])
}
}, {
text: '3个月',
onClick(picker) {
const start = new Date()
const end = new Date()
end.setTime(start.getTime() + 3600 * 1000 * 24 * 90)
picker.$emit('pick', [start, end])
}
}]
}
}
},
created() {
this.getList()
this.getDictListByDictType('in_use').then(response => {
this.inUseOptions = response.data
})
},
methods: {
/** 查询租户类型列表 */
getList() {
this.loading = true
listTenant(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.dataList = response.data.rows
this.total = response.data.total
this.loading = false
})
},
//
inUseFormat(row, column) {
return this.selectDictLabel(this.inUseOptions, row.inUse)
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.dateRange = []
this.resetForm('queryForm')
this.handleQuery()
},
/** 新增按钮操作 */
handleAdd() {
this.$refs.changeTenant.reset()
this.$refs.changeTenant.title = '添加租户信息'
this.$refs.changeTenant.open = true
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.tenantId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 修改按钮操作 */
handleUpdate(row) {
const tenantId = row.tenantId || this.ids
getTenant(tenantId).then(response => {
this.$refs.changeTenant.reset()
this.$refs.changeTenant.form = response.data
this.$refs.changeTenant.title = '修改租户信息'
this.$refs.changeTenant.open = true
})
},
/** 删除按钮操作 */
handleDelete(row) {
const tenantIds = row.tenantId || this.ids
this.$confirm('是否确认删除?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return delTenant(tenantIds)
}).then((response) => {
if (response.respCode === '0000') {
this.getList()
this.msgSuccess('删除成功')
} else {
this.msgError(response.respMsg)
}
}).catch(function() {})
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams
this.$confirm('是否确认导出所有数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return exportTenant(queryParams)
}).then(response => {
this.download(response.respMsg)
}).catch(function() {})
}
}
}
</script>

@ -1,666 +0,0 @@
<template>
<div class="app-container">
<el-row :gutter="20">
<!--部门数据-->
<el-col :span="4" :xs="24">
<div class="head-container">
<el-input
v-model="deptName"
placeholder="请输入部门名称"
clearable
size="small"
prefix-icon="el-icon-search"
style="margin-bottom: 20px"
/>
</div>
<div class="head-container">
<el-tree
ref="tree"
:data="deptOptions"
:props="defaultProps"
:expand-on-click-node="false"
:filter-node-method="filterNode"
default-expand-all
@node-click="handleNodeClick"
/>
</div>
</el-col>
<!--用户数据-->
<el-col :span="20" :xs="24">
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
<el-form-item label="用户名:" prop="username">
<el-input
v-model="queryParams.username"
placeholder="请输入用户名"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="姓名:" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入姓名"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="联系电话" prop="phone">
<el-input
v-model="queryParams.phone"
placeholder="请输入联系电话"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
v-hasPermi="['system:user:add']"
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column prop="username" width="100" label="用户名" show-overflow-tooltip fixed="left" />
<el-table-column prop="tenantNames" width="100" label="所属租户" show-overflow-tooltip />
<el-table-column prop="name" label="姓名" show-overflow-tooltip />
<el-table-column prop="phone" label="联系电话" width="130" :show-overflow-tooltip="true" />
<el-table-column prop="emailAddress" label="邮箱" width="130" :show-overflow-tooltip="true" />
<el-table-column prop="deptName" label="部门" width="130" />
<el-table-column label="状态" align="center">
<template slot-scope="scope">
<el-switch
v-model="scope.row.enable"
active-value="1"
inactive-value="0"
@change="handleEnableChange(scope.row)"
/>
</template>
</el-table-column>
<el-table-column fixed="right" width="150" label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-dropdown trigger="click">
<span style="cursor: pointer;color: #409EFF;outline: none;">
操作<i class="el-icon-arrow-down el-icon--right" style="font-size: 12px;" />
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-if="scope.row.username !== 'superManXluobo'" v-hasPermi="['system:user:update']" icon="el-icon-edit-outline" @click.native="handleUpdate(scope.row)"></el-dropdown-item>
<el-dropdown-item v-hasPermi="['system:user:resetPwd']" icon="el-icon-key" @click.native="handleResetPwd(scope.row)"></el-dropdown-item>
<el-dropdown-item v-hasPermi="['system:user:updateTenant']" icon="el-icon-s-shop" @click.native="handleUpdateTenant(scope.row)"></el-dropdown-item>
<el-dropdown-item v-hasPermi="['system:user:updateRole']" icon="el-icon-paperclip" @click.native="handleUpdateRole(scope.row)"></el-dropdown-item>
<el-dropdown-item v-if="scope.row.username !== 'superManXluobo'" v-hasPermi="['system:user:delete']" icon="el-icon-delete" @click.native="handleDelete(scope.row)"></el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<!-- 添加 -->
<el-dialog :title="title" :visible.sync="open" width="600px">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="用户名" prop="username">
<el-input v-model="form.username" placeholder="请输入用户名" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属部门" prop="deptId">
<treeselect v-model="form.deptId" :options="deptOptions" placeholder="请选择归属部门" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="密码" prop="password">
<el-input v-model="form.password" placeholder="请输入密码" show-password />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="确认密码" prop="checkPass" show-password>
<el-input v-model="form.checkPass" placeholder="请输入密码" show-password />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="姓名" prop="name">
<el-input v-model="form.name" placeholder="请输入姓名" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话" prop="phone">
<el-input v-model="form.phone" placeholder="请输入联系电话" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱" prop="emailAddress">
<el-input v-model="form.emailAddress" placeholder="请输入邮箱" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 修改 -->
<el-dialog :title="title" :visible.sync="openUpdate" width="600px">
<el-form ref="updateForm" :model="updateForm" :rules="updateRules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="用户名" prop="username">
<el-input v-model="updateForm.username" placeholder="请输入用户名" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属部门" prop="deptId">
<treeselect v-model="updateForm.deptId" :options="deptOptions" placeholder="请选择归属部门" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="姓名" prop="name">
<el-input v-model="updateForm.name" placeholder="请输入姓名" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话" prop="phone">
<el-input v-model="updateForm.phone" placeholder="请输入联系电话" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱" prop="emailAddress">
<el-input v-model="updateForm.emailAddress" placeholder="请输入邮箱" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFormForUpdate"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!--变更用户角色-->
<el-dialog title="修改用户角色" :visible.sync="openUpdateRole" width="300px">
<el-form ref="updateRoleForm" :model="updateRoleForm" label-width="40px">
<el-row>
<el-col :span="24">
<el-form-item label="租户" prop="tenantId">
<el-select v-model="updateRoleForm.tenantId" filterable placeholder="请选择租户" @change="tenantChange">
<el-option
v-for="item in tenantOptions"
:key="item.tenantId"
:label="item.tenantName"
:value="item.tenantId"
/>
</el-select>
</el-form-item>
</el-col>
<el-col v-if="updateRoleForm.tenantId !== undefined" :span="24">
<el-form-item label="角色">
<el-tree
ref="role"
:data="roleOptions"
show-checkbox
node-key="id"
empty-text="加载中,请稍后"
:props="defaultProps"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button
:disabled="updateRoleForm.userId === undefined || updateRoleForm.tenantId === undefined"
type="primary"
@click="submitFormForRoleUpdate"
> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!--变更用户租户-->
<el-dialog title="修改用户租户" :visible.sync="openUpdateTenant" width="300px">
<el-form ref="updateTenantForm" :model="updateTenantForm" label-width="40px">
<el-row>
<el-col :span="24">
<el-form-item label="租户" prop="tenantId">
<el-select v-model="updateTenantForm.tenantIds" multiple filterable placeholder="请选择租户">
<el-option
v-for="item in allTenantOptions"
:key="item.tenantId"
:label="item.tenantName"
:value="item.tenantId"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button
:disabled="updateTenantForm.userId === undefined || updateTenantForm.tenantIds === undefined"
type="primary"
@click="submitFormForTenantUpdate"
> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listUser, getUser, delUser, addUser, updateUser, changeUserEnable, resetUserPwd, changeUserRole, changeUserTenant } from '@/api/school/system/user'
import { treeSelect as roleTreeSelect, userRoleIdList } from '@/api/school/system/role/index'
import { userTenantSelectLimitSelf, treeSelect as tenantTreeSelect, userTenantSelect } from '@/api/school/system/tenant/index'
import { treeSelect } from '@/api/school/system/dept'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import { isUsername, isPass, isSerialNumber } from '@/utils/validate'
export default {
name: 'User',
components: { Treeselect },
data() {
const validatePass = (rule, value, callback) => {
if (value === undefined || value === '') {
callback(new Error('请输入密码'))
} else if (!isPass(value)) {
callback(new Error('最少6位,包含大小写字母和特殊字符'))
} else {
if (this.form.checkPass !== '' && this.form.checkPass !== undefined) {
this.$refs.form.validateField('checkPass')
}
callback()
}
}
const validateCheckPass = (rule, value, callback) => {
if (value === undefined || value === '') {
callback(new Error('请再次输入密码'))
} else if (value !== this.form.password) {
callback(new Error('两次输入密码不一致!'))
} else {
callback()
}
}
const validateNumber = (rule, value, callback) => {
if (!isSerialNumber(value)) {
callback(new Error('请输入正确的手机号码'))
} else {
callback()
}
}
const validateUsername = (rule, value, callback) => {
if (!isUsername(value)) {
callback(new Error('4到16位(字母,数字,下划线)'))
} else {
callback()
}
}
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
total: 0,
//
dataList: [],
//
title: '',
//
open: false,
openUpdate: false,
openUpdateRole: false,
openUpdateTenant: false,
//
deptName: undefined,
//
deptOptions: undefined,
roleOptions: undefined,
tenantOptions: undefined,
allTenantOptions: undefined,
defaultProps: {
children: 'children',
label: 'label'
},
//
queryParams: {
pageNum: 1,
pageSize: 10,
username: undefined,
name: undefined,
phone: undefined
},
//
form: {},
updateForm: {},
updateRoleForm: {},
updateTenantForm: {},
//
rules: {
username: [
{ required: true, message: '不能为空', trigger: 'blur' },
{ validator: validateUsername, trigger: 'blur' }
],
password: [
{ validator: validatePass, trigger: 'blur' }
],
checkPass: [
{ validator: validateCheckPass, trigger: 'blur' }
],
name: [
{ required: true, message: '姓名不能为空', trigger: 'blur' }
],
phone: [
{ required: true, message: '联系电话不能为空', trigger: 'blur' },
{ validator: validateNumber, trigger: 'blur' }
],
emailAddress: [
{ required: true, message: '邮箱不能为空', trigger: 'blur' },
{ type: 'email', message: '请输入正确的邮箱', trigger: 'blur' }
]
},
updateRules: {
username: [
{ required: true, message: '不能为空', trigger: 'blur' },
{ validator: validateUsername, trigger: 'blur' }
],
name: [
{ required: true, message: '姓名不能为空', trigger: 'blur' }
],
phone: [
{ required: true, message: '联系电话不能为空', trigger: 'blur' },
{ validator: validateNumber, trigger: 'blur' }
],
emailAddress: [
{ required: true, message: '邮箱不能为空', trigger: 'blur' },
{ type: 'email', message: '请输入正确的邮箱', trigger: 'blur' }
]
}
}
},
watch: {
//
deptName(val) {
this.$refs.tree.filter(val)
}
},
created() {
this.getList()
this.getDeptTreeSelect()
},
methods: {
/** 查询部门列表 */
getList() {
this.loading = true
listUser(this.queryParams).then(response => {
this.dataList = response.data.rows
this.total = response.data.total
this.loading = false
})
},
/** 查询部门下拉树结构 */
getDeptTreeSelect() {
treeSelect().then(response => {
this.deptOptions = response.data
})
},
//
filterNode(value, data) {
if (!value) return true
return data.label.indexOf(value) !== -1
},
//
handleNodeClick(data) {
this.queryParams.deptId = data.id
this.getList()
},
//
handleEnableChange(row) {
const text = row.enable === '1' ? '启用' : '停用'
this.$confirm('确认要"' + text + '""' + row.username + '"用户吗?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return changeUserEnable(row.userId, row.enable)
}).then(() => {
this.msgSuccess(text + '成功')
}).catch(function() {
row.enable = row.enable === '0' ? '1' : '0'
})
},
//
cancel() {
this.open = false
this.openUpdate = false
this.openUpdateRole = false
this.openUpdateTenant = false
this.reset()
},
//
reset() {
this.form = {
username: undefined,
password: undefined,
name: undefined,
phone: undefined,
emailAddress: undefined
}
this.updateForm = {
username: undefined,
name: undefined,
phone: undefined,
emailAddress: undefined
}
this.updateRoleForm = {
tenantId: undefined,
userId: undefined,
roleIds: undefined
}
this.updateTenantForm = {
tenantIds: undefined,
userId: undefined
}
this.resetForm('form')
this.resetForm('updateForm')
this.resetForm('updateRoleForm')
this.resetForm('updateTenantForm')
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm('queryForm')
this.handleQuery()
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset()
this.open = true
this.title = '添加用户'
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.userId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
getUser(row.userId || this.ids).then(response => {
this.updateForm = response.data
this.openUpdate = true
this.title = '修改用户'
})
},
/** 提交按钮 */
submitForm: function() {
this.$refs['form'].validate(valid => {
if (valid) {
addUser(this.form).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('新增成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
})
}
})
},
submitFormForUpdate: function() {
this.$refs['updateForm'].validate(valid => {
if (valid) {
updateUser(this.updateForm).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('修改成功')
this.openUpdate = false
this.getList()
} else {
this.msgError(response.respMsg)
}
})
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.userId || this.ids
this.$confirm('是否确认删除?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return delUser(id)
}).then((response) => {
if (response.respCode === '0000') {
this.getList()
this.msgSuccess('删除成功')
} else {
this.msgError(response.respMsg)
}
}).catch(function() {})
},
handleResetPwd(row) {
this.$prompt('请输入"' + row.username + '"的新密码', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
inputPattern: /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{1,})(?=.*[a-z]{1,})(?=.*[!@#$%^&*?\(\)]).*$/,
inputErrorMessage: '密码最少6位,包含大小写字母和特殊字符'
}).then(({ value }) => {
resetUserPwd(row.userId, value).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('修改成功,新密码是:' + value)
} else {
this.msgError(response.msg)
}
})
}).catch(() => {})
},
/**
* 变更角色
* @param row
*/
handleUpdateRole(row) {
this.reset()
this.updateRoleForm.userId = row.userId
userTenantSelectLimitSelf(row.userId).then(response => {
this.tenantOptions = response.data
this.openUpdateRole = true
this.title = '修改用户角色'
this.$nextTick(() => {
if (this.tenantOptions.length > 0) {
this.updateRoleForm.tenantId = this.tenantOptions[0].tenantId
this.tenantChange(this.updateRoleForm.tenantId)
}
})
})
},
tenantChange(tenant) {
roleTreeSelect().then(response => {
this.roleOptions = response.data
userRoleIdList(this.updateRoleForm.userId, tenant).then(res => {
this.$refs.role.setCheckedKeys(res.data)
})
})
},
//
getRoleAllCheckedKeys() {
//
const halfCheckedKeys = this.$refs.role.getHalfCheckedKeys()
//
const checkedKeys = this.$refs.role.getCheckedKeys()
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys)
return checkedKeys
},
submitFormForRoleUpdate() {
this.updateRoleForm.roleIds = this.getRoleAllCheckedKeys()
changeUserRole(this.updateRoleForm).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('操作成功')
if (this.tenantOptions.length === 1) {
this.openUpdateRole = false
}
} else {
this.msgError(response.msg)
}
})
},
/**
* 变更租户
* @param row
*/
handleUpdateTenant(row) {
this.reset()
this.updateTenantForm.userId = row.userId
tenantTreeSelect().then(response => {
this.allTenantOptions = response.data
this.title = '修改用户角色'
this.openUpdateTenant = true
})
userTenantSelect(row.userId).then(res => {
const userTenant = res.data
const tenantIds = []
for (let i = 0; i < userTenant.length; i++) {
tenantIds.push(userTenant[i].tenantId)
}
this.updateTenantForm.tenantIds = tenantIds
})
},
submitFormForTenantUpdate() {
changeUserTenant(this.updateTenantForm).then(res => {
if (res.respCode === '0000') {
this.msgSuccess('操作成功')
this.openUpdateTenant = false
} else {
this.msgError(res.msg)
}
})
}
}
}
</script>

@ -1,92 +0,0 @@
<template>
<div class="app-container bg-grey">
<el-row :gutter="20">
<el-col :span="7" :xs="24">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>个人信息</span>
</div>
<div>
<div class="text-center">
<userAvatar :user="user" />
</div>
<ul class="list-group list-group-striped">
<li class="list-group-item">
<svg-icon icon-class="user" /> 用户名称
<div class="pull-right">{{ user.username }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="user" /> 姓名
<div class="pull-right">{{ user.name }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="phone" /> 手机号码
<div class="pull-right">{{ user.phone }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="email" /> 邮箱
<div class="pull-right">{{ user.emailAddress }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="tree" /> 所属部门
<div v-if="user.deptName" class="pull-right">{{ user.deptName }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="date" /> 创建日期
<div class="pull-right">{{ parseTime(user.createDate) }}</div>
</li>
</ul>
</div>
</el-card>
</el-col>
<el-col :span="17" :xs="24">
<el-card>
<div slot="header" class="clearfix">
<span>基本资料</span>
</div>
<el-tabs v-model="activeTab">
<el-tab-pane label="基本资料" name="userInfo">
<userInfo :user="user" />
</el-tab-pane>
<el-tab-pane label="修改密码" name="resetPwd">
<resetPwd :user="user" />
</el-tab-pane>
</el-tabs>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import userAvatar from './userAvatar'
import userInfo from './userInfo'
import resetPwd from './resetPwd'
import { getUserProfile } from '@/api/school/system/user'
export default {
name: 'Profile',
components: { userAvatar, userInfo, resetPwd },
data() {
return {
user: {},
activeTab: 'userInfo'
}
},
created() {
this.getUser()
},
methods: {
getUser() {
getUserProfile().then(response => {
this.user = response.data
})
}
}
}
</script>
<style lang="scss" scoped>
.app-container{
padding: 0px;
}
</style>

@ -1,88 +0,0 @@
<template>
<el-form ref="form" :model="user" :rules="rules" label-width="80px">
<el-form-item label="旧密码" prop="oldPassword">
<el-input v-model="user.oldPassword" placeholder="请输入旧密码" type="password" show-password />
</el-form-item>
<el-form-item label="新密码" prop="newPassword">
<el-input v-model="user.newPassword" placeholder="请输入新密码" type="password" show-password />
</el-form-item>
<el-form-item label="确认密码" prop="confirmPassword">
<el-input v-model="user.confirmPassword" placeholder="请确认密码" type="password" show-password />
</el-form-item>
<el-form-item>
<el-button type="primary" size="mini" @click="submit"></el-button>
<el-button type="danger" size="mini" @click="close"></el-button>
</el-form-item>
</el-form>
</template>
<script>
import { updateUserPwd } from '@/api/school/system/user'
export default {
data() {
const validatePass = (rule, value, callback) => {
const pattern = /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{1,})(?=.*[a-z]{1,})(?=.*[!@#$%^&*?\(\)]).*$/
if (value === undefined || value === '') {
callback(new Error('请输入密码'))
} else if (!pattern.test(value)) {
callback(new Error('最少6位,包含大小写字母和特殊字符'))
} else {
if (this.user.confirmPassword !== '' && this.user.confirmPassword !== undefined) {
this.$refs.form.validateField('confirmPassword')
}
callback()
}
}
const validateCheckPass = (rule, value, callback) => {
if (value === undefined || value === '') {
callback(new Error('请再次输入密码'))
} else if (value !== this.user.newPassword) {
callback(new Error('两次输入密码不一致!'))
} else {
callback()
}
}
return {
user: {
oldPassword: undefined,
newPassword: undefined,
confirmPassword: undefined
},
//
rules: {
oldPassword: [
{ required: true, message: '旧密码不能为空', trigger: 'blur' }
],
newPassword: [
{ validator: validatePass, trigger: 'blur' }
],
confirmPassword: [
{ validator: validateCheckPass, trigger: 'blur' }
]
}
}
},
methods: {
submit() {
this.$refs['form'].validate(valid => {
if (valid) {
updateUserPwd(this.user).then(
response => {
if (response.respCode === '0000') {
this.msgSuccess('修改成功,请牢记您的新密码:' + this.user.newPassword)
} else {
this.msgError(response.respMsg)
}
}
)
}
})
},
close() {
this.$store.dispatch('tagsView/delView', this.$route)
this.$router.push({ path: '/' })
}
}
}
</script>

@ -1,144 +0,0 @@
<template>
<div>
<img :src="options.img" title="点击上传头像" class="img-circle img-lg" @click="editCropper()">
<el-dialog :title="title" :visible.sync="open" width="800px">
<el-row>
<el-col :xs="24" :md="12" :style="{height: '350px'}">
<vue-cropper
ref="cropper"
:img="options.img"
:info="true"
:auto-crop="options.autoCrop"
:auto-crop-width="options.autoCropWidth"
:auto-crop-height="options.autoCropHeight"
:fixed-box="options.fixedBox"
@realTime="realTime"
/>
</el-col>
<el-col :xs="24" :md="12" :style="{height: '350px'}">
<div class="avatar-upload-preview">
<img :src="previews.url" :style="previews.img">
</div>
</el-col>
</el-row>
<br>
<el-row>
<el-col :lg="2" :md="2">
<el-upload action="#" :http-request="requestUpload" :show-file-list="false" :before-upload="beforeUpload">
<el-button size="small">
上传
<i class="el-icon-upload el-icon--right" />
</el-button>
</el-upload>
</el-col>
<el-col :lg="{span: 1, offset: 2}" :md="2">
<el-button icon="el-icon-plus" size="small" @click="changeScale(1)" />
</el-col>
<el-col :lg="{span: 1, offset: 1}" :md="2">
<el-button icon="el-icon-minus" size="small" @click="changeScale(-1)" />
</el-col>
<el-col :lg="{span: 1, offset: 1}" :md="2">
<el-button icon="el-icon-refresh-left" size="small" @click="rotateLeft()" />
</el-col>
<el-col :lg="{span: 1, offset: 1}" :md="2">
<el-button icon="el-icon-refresh-right" size="small" @click="rotateRight()" />
</el-col>
<el-col :lg="{span: 2, offset: 6}" :md="2">
<el-button type="primary" size="small" @click="uploadImg()"> </el-button>
</el-col>
</el-row>
</el-dialog>
</div>
</template>
<script>
import store from '@/store'
import { VueCropper } from 'vue-cropper'
import { uploadAvatar } from '@/api/school/system/user'
export default {
components: { VueCropper },
props: {
user: {
type: Object,
default: function() {
return {}
}
}
},
data() {
return {
//
open: false,
//
title: '修改头像',
options: {
img: store.getters.avatar, //
autoCrop: true, //
autoCropWidth: 200, //
autoCropHeight: 200, //
fixedBox: true //
},
previews: {}
}
},
methods: {
//
editCropper() {
// this.msgWarning('')
this.open = true
},
//
requestUpload() {
},
//
rotateLeft() {
this.$refs.cropper.rotateLeft()
},
//
rotateRight() {
this.$refs.cropper.rotateRight()
},
//
changeScale(num) {
num = num || 1
this.$refs.cropper.changeScale(num)
},
//
beforeUpload(file) {
if (file.type.indexOf('image/') === -1) {
this.msgError('文件格式错误,请上传图片类型,如JPGPNG后缀的文件。')
} else {
const reader = new FileReader()
reader.readAsDataURL(file)
reader.onload = () => {
this.options.img = reader.result
}
}
},
//
uploadImg() {
this.$refs.cropper.getCropBlob(data => {
const formData = new FormData()
formData.append('file', data)
formData.append('fileType', 'avatar')
formData.append('fileIndex', '1')
uploadAvatar(formData).then(response => {
if (response.respCode === '0000') {
this.open = false
this.options.img = process.env.VUE_APP_RESOURCE_API + response.data.prePath + response.data.fileName
this.msgSuccess('修改头像成功')
} else {
this.msgError(response.respMsg)
}
this.$refs.cropper.clearCrop()
})
})
},
//
realTime(data) {
this.previews = data
}
}
}
</script>

@ -1,77 +0,0 @@
<template>
<el-form ref="form" :model="user" :rules="rules" label-width="80px">
<el-form-item label="用户昵称" prop="name">
<el-input v-model="user.name" />
</el-form-item>
<el-form-item label="手机号码" prop="phone">
<el-input v-model="user.phone" maxlength="11" />
</el-form-item>
<el-form-item label="邮箱" prop="emailAddress">
<el-input v-model="user.emailAddress" maxlength="50" />
</el-form-item>
<el-form-item>
<el-button type="primary" size="mini" @click="submit"></el-button>
<el-button type="danger" size="mini" @click="close"></el-button>
</el-form-item>
</el-form>
</template>
<script>
import { updateUserProfile } from '@/api/school/system/user'
export default {
props: {
user: {
type: Object,
default: function() {
return {}
}
}
},
data() {
return {
//
rules: {
name: [
{ required: true, message: '名称不能为空', trigger: 'blur' }
],
emailAddress: [
{ required: true, message: '邮箱地址不能为空', trigger: 'blur' },
{
type: 'email',
message: "'请输入正确的邮箱地址",
trigger: ['blur', 'change']
}
],
phone: [
{ required: true, message: '手机号码不能为空', trigger: 'blur' },
{
pattern: /^[1][3,4,5,6,7,8,9][0-9]{9}$/,
message: '请输入正确的手机号码',
trigger: 'blur'
}
]
}
}
},
methods: {
submit() {
this.$refs['form'].validate(valid => {
if (valid) {
updateUserProfile(this.user).then(response => {
if (response.respCode === '0000') {
this.msgSuccess('修改成功')
} else {
this.msgError(response.respMsg)
}
})
}
})
},
close() {
this.$store.dispatch('tagsView/delView', this.$route)
this.$router.push({ path: '/' })
}
}
}
</script>

@ -59,7 +59,7 @@
<el-table-column prop="deptName" label="部门/校区名称" width="260">
<template slot-scope="scope">
<el-tag :type="scope.row.deptType === '1'?'info':'' ">{{ scope.row.deptType === '1'?'部门':'校区' }}</el-tag>
<span>{{ scope.row.deptName }}</span>
<span>{{ scope.row.deptName }}{{scope.row.parentId==0?'(总店)':''}}</span>
</template>
</el-table-column>
<el-table-column prop="orderNum" label="排序" width="200"></el-table-column>
@ -105,7 +105,7 @@
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="24" v-if="form.parentId !== 0">
<el-col :span="24" v-if="form.parentId !== '0'">
<el-form-item label="上级部门" prop="parentId">
<treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="选择上级部门" />
</el-form-item>
@ -117,9 +117,9 @@
<el-input v-model="form.deptName" placeholder="请输入部门名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :span="12" v-if="form.parentId !== '0'">
<el-form-item label="部门类型:">
<el-radio-group v-model="form.deptType">
<el-radio-group v-model="form.deptType" @change="changeDeptType" >
<el-radio
v-for="dict in deptTypeOptions"
:key="dict.deptType"
@ -201,6 +201,7 @@ export default {
components: { Treeselect },
data() {
return {
oldType:'0',
//
loading: true,
//
@ -266,6 +267,15 @@ export default {
this.getList();
},
methods: {
changeDeptType(deptType){
if (deptType==='1' && this.oldType==='2'){
this.$modal.confirm
('须知:将校区改为部门时,"' + this.form.deptName + '"相关门店介绍信息将会被清除!').then(function() {
}).then(() => {
}).catch(() => {});
}
},
/****/
changeLeader(value){
@ -312,12 +322,14 @@ export default {
deptId: undefined,
parentId: undefined,
deptName: undefined,
deptType:'2',
orderNum: undefined,
leader: undefined,
phone: undefined,
email: undefined,
status: "0"
status:'0'
};
this.oldType='0'
this.resetForm("form");
},
/** 搜索按钮操作 */
@ -358,6 +370,7 @@ export default {
this.reset();
getDept(row.deptId).then(response => {
this.form = response.data;
this.oldType=response.data.deptType
this.open = true;
this.title = "修改部门";
});
@ -387,7 +400,7 @@ export default {
},
/** 删除按钮操作 */
handleDelete(row) {
this.$modal.confirm('是否确认删除名称为"' + row.deptName + '"的数据项').then(function() {
this.$modal.confirm('是否确认删除名称为"' + row.deptName + '"的数据项,并且删除相关门店介绍信息').then(function() {
return delDept(row.deptId);
}).then(() => {
this.getList();

@ -111,15 +111,16 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope" >
<template v-if="(userId==1 &&scope.row.roleId !== 1) ||(userId!==1 && scope.row.roleId>108)">
<el-button
<template v-if="scope.row.roleId !== 1">
<el-button v-if="!(scope.row.roleId == 100 && userId !==1) "
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:role:edit']"
>修改</el-button>
<el-button
<el-button v-if="userId==1 ||(userId!==1 && scope.row.roleId>108)"
size="mini"
type="text"
icon="el-icon-delete"
@ -156,7 +157,7 @@
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="角色名称" prop="roleName">
<el-input v-model="form.roleName" placeholder="请输入角色名称" />
<el-input v-model="form.roleName" placeholder="请输入角色名称" :disabled="disabledFlag"/>
</el-form-item>
<el-form-item prop="roleKey">
<span slot="label">
@ -165,13 +166,13 @@
</el-tooltip>
权限字符
</span>
<el-input v-model="form.roleKey" placeholder="请输入权限字符" />
<el-input v-model="form.roleKey" placeholder="请输入权限字符" :disabled="disabledFlag" />
</el-form-item>
<el-form-item label="角色顺序" prop="roleSort">
<el-input-number v-model="form.roleSort" controls-position="right" :min="0" />
<el-input-number v-model="form.roleSort" controls-position="right" :min="0" :disabled="disabledFlag" />
</el-form-item>
<el-form-item label="状态">
<el-radio-group v-model="form.status">
<el-radio-group v-model="form.status" :disabled="disabledFlag">
<el-radio
v-for="dict in dict.type.sys_normal_disable"
:key="dict.value"
@ -195,7 +196,7 @@
></el-tree>
</el-form-item>
<el-form-item label="备注">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" :disabled="disabledFlag"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -258,6 +259,7 @@ export default {
dicts: ['sys_normal_disable'],
data() {
return {
disabledFlag:false,
userId:this.$store.getters.userId,
//
loading: true,
@ -504,6 +506,7 @@ export default {
},
/** 新增按钮操作 */
handleAdd() {
this.disabledFlag=false;
this.reset();
this.getMenuTreeselect();
this.open = true;
@ -514,6 +517,9 @@ export default {
this.reset();
const roleId = row.roleId || this.ids
const roleMenu = this.getRoleMenuTreeselect(roleId);
if (roleId<=108 && this.userId!==1 ){
this.disabledFlag=true;
}
getRole(roleId).then(response => {
this.form = response.data;
this.open = true;

@ -2,10 +2,10 @@
<!-- 授权用户 -->
<el-dialog title="选择用户" :visible.sync="visible" width="800px" top="5vh" append-to-body>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
<el-form-item label="用户名称" prop="userName">
<el-form-item label="登录账号" prop="userName">
<el-input
v-model="queryParams.userName"
placeholder="请输入用户名称"
placeholder="请输入账号"
clearable
@keyup.enter.native="handleQuery"
/>
@ -26,7 +26,7 @@
<el-row>
<el-table @row-click="clickRow" ref="table" :data="userList" @selection-change="handleSelectionChange" height="260px">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" />
<el-table-column label="登录账号" prop="userName" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" prop="nickName" :show-overflow-tooltip="true" />
<el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" />
<el-table-column label="手机" prop="phonenumber" :show-overflow-tooltip="true" />

@ -29,10 +29,10 @@
<!--用户数据-->
<el-col :span="20" :xs="24">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="用户名称" prop="userName">
<el-form-item label="登录账号" prop="userName">
<el-input
v-model="queryParams.userName"
placeholder="请输入用户名称"
placeholder="请输入账号"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
@ -88,11 +88,16 @@
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
<el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="登录账号" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
<el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" />
<el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="状态" align="center" key="status" v-if="columns[5].visible">
<el-table-column prop="teacher" align="center" label="教练角色" v-if="columns[5].visible" width="120">
<template slot-scope="scope">
<span style="text-decoration: underline;cursor: pointer;" >{{ scope.row.teacher==1?'是':'否' }}</span>
</template>
</el-table-column>
<el-table-column label="状态" align="center" key="status" v-if="columns[6].visible">
<template slot-scope="scope">
<el-switch
v-model="scope.row.status"
@ -103,7 +108,7 @@
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[7].visible" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
@ -165,7 +170,12 @@
</el-col>
<el-col :span="12">
<el-form-item label="归属部门" prop="deptId">
<treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
<treeselect
v-model="form.deptId"
:options="deptOptions"
:show-count="true"
@input="handleTreeSelectChange"
placeholder="请选择归属部门" />
</el-form-item>
</el-col>
</el-row>
@ -183,8 +193,8 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
<el-form-item v-if="form.userId == undefined" label="登录账号" prop="userName">
<el-input v-model="form.userName" placeholder="保存后无法修改" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
@ -219,19 +229,19 @@
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="岗位">
<el-select v-model="form.postIds" multiple placeholder="请选择岗位">
<el-option
v-for="item in postOptions"
:key="item.postId"
:label="item.postName"
:value="item.postId"
:disabled="item.status == 1"
></el-option>
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="12">-->
<!-- <el-form-item label="岗位">-->
<!-- <el-select v-model="form.postIds" multiple placeholder="请选择岗位">-->
<!-- <el-option-->
<!-- v-for="item in postOptions"-->
<!-- :key="item.postId"-->
<!-- :label="item.postName"-->
<!-- :value="item.postId"-->
<!-- :disabled="item.status == 1"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="12">
<el-form-item label="角色">
<el-select v-model="form.roleIds" multiple placeholder="请选择角色">
@ -368,18 +378,24 @@ export default {
//
columns: [
{ key: 0, label: `用户编号`, visible: true },
{ key: 1, label: `用户名称`, visible: true },
{ key: 1, label: `登录账号`, visible: true },
{ key: 2, label: `用户昵称`, visible: true },
{ key: 3, label: `部门`, visible: true },
{ key: 4, label: `手机号码`, visible: true },
{ key: 5, label: `状态`, visible: true },
{ key: 6, label: `创建时间`, visible: true }
{ key: 5, label: `教练角色`, visible: true },
{ key: 6, label: `状态`, visible: true },
{ key: 7, label: `创建时间`, visible: true }
],
//
rules: {
userName: [
{ required: true, message: "用户名称不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
{ required: true, message: "登录账号不能为空", trigger: "blur" },
{ min: 5, max: 16, message: '登录账号长度必须介于 5 和 20 之间', trigger: 'blur' },
{
pattern: /\w+/,
message: "仅支持字母、数字、下划线",
trigger: "blur"
}
],
nickName: [
{ required: true, message: "用户昵称不能为空", trigger: "blur" }
@ -396,12 +412,16 @@ export default {
}
],
phonenumber: [
{ required: true, message: "手机号码不能为空", trigger: "blur" },
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
]
],
deptId: [
{ required: true, message: "请归属部门", trigger: "change" }
],
}
};
},
@ -419,6 +439,10 @@ export default {
});
},
methods: {
handleTreeSelectChange() {
// validateField
this.$refs.form.validateField('deptId')
},
/** 查询用户列表 */
getList() {
this.loading = true;
@ -448,7 +472,7 @@ export default {
//
handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用";
this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
this.$modal.confirm('确认要"' + text + '""' + row.userName + '"账号吗?').then(function() {
return changeUserStatus(row.userId, row.status);
}).then(() => {
this.$modal.msgSuccess(text + "成功");
@ -558,6 +582,8 @@ export default {
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.userId != undefined) {
@ -567,11 +593,15 @@ export default {
this.getList();
});
} else {
addUser(this.form).then(response => {
const form = this.form;
this.$modal.confirm('请确认手机号"' + this.form.phonenumber + '"是否正确!').then(function() {
return addUser(form);
}).then(() => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}).catch(() => {});
}
}
});

Loading…
Cancel
Save