xy 2 years ago
parent 29e74fb06c
commit e74e448bd3

@ -0,0 +1,35 @@
import request from '@/utils/request'
export function index(params) {
return request({
method: 'get',
url: '/api/oa/config/index',
params
})
}
export function show(params) {
return request({
method: 'get',
url: '/api/oa/config/show',
params
})
}
export function save(data, isLoading = true) {
return request({
method: 'post',
url: '/api/oa/config/save',
data,
isLoading
})
}
export function destroy(params, isLoading = true) {
return request({
method: 'get',
url: '/api/oa/config/destroy',
params,
isLoading
})
}

@ -1 +1 @@
<svg t="1718777251258" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8538" width="200" height="200"><path d="M749.952 528.16l189.344 107.136c11.2 6.272 18.176 18.112 18.208 30.944v214.176a35.616 35.616 0 0 1-18.24 30.944l-189.312 107.04a37.184 37.184 0 0 1-36.448 0l-189.312-107.136a35.616 35.616 0 0 1-18.24-30.944v-214.176c0-12.8 6.88-24.64 18.24-30.944l189.312-107.2a37.184 37.184 0 0 1 36.48 0.064v0.096zM792.736 0.384c50.4 0 91.296 40 91.296 89.44V480a17.856 17.856 0 0 1-9.184 15.424c-5.664 3.2-12.576 3.2-18.24 0l-65.536-36.992a120.704 120.704 0 0 0-118.656 0l-189.12 107.008a115.968 115.968 0 0 0-59.36 100.8v268.16a18.144 18.144 0 0 1-18.24 17.888h-286.72a92.256 92.256 0 0 1-64.64-26.24 88.512 88.512 0 0 1-26.688-63.136V89.824C27.648 40.448 68.544 0.384 118.944 0.384h673.792z m-60.992 716.544a51.968 51.968 0 0 0-52.544 51.424c0 28.48 23.52 51.52 52.544 51.52a51.968 51.968 0 0 0 52.448-51.52 51.968 51.968 0 0 0-52.48-51.424z m-322.88-344.96H204.352a37.184 37.184 0 0 0 0 74.368h204.576a37.184 37.184 0 0 0 0-74.4z m278.976-185.984H204.32a37.184 37.184 0 1 0 0 74.368h483.52a37.184 37.184 0 0 0 0-74.368z" fill="#3171f4" p-id="8539"></path></svg>
<svg t="1718777251258" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8538" width="200" height="200"><path d="M749.952 528.16l189.344 107.136c11.2 6.272 18.176 18.112 18.208 30.944v214.176a35.616 35.616 0 0 1-18.24 30.944l-189.312 107.04a37.184 37.184 0 0 1-36.448 0l-189.312-107.136a35.616 35.616 0 0 1-18.24-30.944v-214.176c0-12.8 6.88-24.64 18.24-30.944l189.312-107.2a37.184 37.184 0 0 1 36.48 0.064v0.096zM792.736 0.384c50.4 0 91.296 40 91.296 89.44V480a17.856 17.856 0 0 1-9.184 15.424c-5.664 3.2-12.576 3.2-18.24 0l-65.536-36.992a120.704 120.704 0 0 0-118.656 0l-189.12 107.008a115.968 115.968 0 0 0-59.36 100.8v268.16a18.144 18.144 0 0 1-18.24 17.888h-286.72a92.256 92.256 0 0 1-64.64-26.24 88.512 88.512 0 0 1-26.688-63.136V89.824C27.648 40.448 68.544 0.384 118.944 0.384h673.792z m-60.992 716.544a51.968 51.968 0 0 0-52.544 51.424c0 28.48 23.52 51.52 52.544 51.52a51.968 51.968 0 0 0 52.448-51.52 51.968 51.968 0 0 0-52.48-51.424z m-322.88-344.96H204.352a37.184 37.184 0 0 0 0 74.368h204.576a37.184 37.184 0 0 0 0-74.4z m278.976-185.984H204.32a37.184 37.184 0 1 0 0 74.368h483.52a37.184 37.184 0 0 0 0-74.368z" fill="currentColor" p-id="8539"></path></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -1 +1 @@
<svg t="1718609821828" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11800" width="200" height="200"><path d="M550.64576 211.34848H478.85824V81.92h71.78752v129.42848zM204.2368 345.1392L112.64 248.07936l52.07552-49.664 91.5968 97.06496z m613.05856 4.87936l-51.42016-50.37056 94.06464-97.06496L911.36 252.9536z m34.93888 519.86944v-263.808c0-189.3888-153.24672-343.46496-341.61152-343.46496s-341.6064 154.08128-341.6064 343.47008V869.888H116.0448V942.08h786.944v-72.192h-50.74432zM485.67808 469.26336a0.19968 0.19968 0 0 0 0 0.0256A137.472 137.472 0 0 0 376.832 576.04608v0.16896c-0.30208 1.42848-0.47104 2.90304-0.72192 4.352-2.01728 8.0128-9.59488 23.88992-38.03136 23.88992-22.2976 0-29.29664-14.74048-31.27808-26.94144a55.69024 55.69024 0 0 1 0.99328-21.70368 209.9712 209.9712 0 0 1 144.44544-152.6272 57.40032 57.40032 0 0 1 13.28128-2.24768c14.336-0.71168 42.37824 1.43872 45.12768 28.7744 0.83968 33.39776-23.56224 39.28064-24.97024 39.552z" fill="#3171f4" p-id="11801"></path></svg>
<svg t="1718609821828" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11800" width="200" height="200"><path d="M550.64576 211.34848H478.85824V81.92h71.78752v129.42848zM204.2368 345.1392L112.64 248.07936l52.07552-49.664 91.5968 97.06496z m613.05856 4.87936l-51.42016-50.37056 94.06464-97.06496L911.36 252.9536z m34.93888 519.86944v-263.808c0-189.3888-153.24672-343.46496-341.61152-343.46496s-341.6064 154.08128-341.6064 343.47008V869.888H116.0448V942.08h786.944v-72.192h-50.74432zM485.67808 469.26336a0.19968 0.19968 0 0 0 0 0.0256A137.472 137.472 0 0 0 376.832 576.04608v0.16896c-0.30208 1.42848-0.47104 2.90304-0.72192 4.352-2.01728 8.0128-9.59488 23.88992-38.03136 23.88992-22.2976 0-29.29664-14.74048-31.27808-26.94144a55.69024 55.69024 0 0 1 0.99328-21.70368 209.9712 209.9712 0 0 1 144.44544-152.6272 57.40032 57.40032 0 0 1 13.28128-2.24768c14.336-0.71168 42.37824 1.43872 45.12768 28.7744 0.83968 33.39776-23.56224 39.28064-24.97024 39.552z" fill="currentColor" p-id="11801"></path></svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -0,0 +1 @@
<svg t="1718779194387" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="24951" width="200" height="200"><path d="M834.258824 620.423529V219.858824c0-18.070588-12.047059-30.117647-30.117648-30.117648h-183.717647v-24.094117c0-18.070588-12.047059-30.117647-30.117647-30.117647h-237.929411L189.741176 298.164706v322.258823H135.529412V783.058824c0 60.235294 48.188235 108.423529 108.423529 108.423529H783.058824c60.235294 0 108.423529-48.188235 108.423529-108.423529v-162.635295h-57.223529z m-349.364706-243.952941c15.058824 0 27.105882 12.047059 27.105882 27.105883s-12.047059 27.105882-27.105882 27.105882h-162.635294c-15.058824 0-27.105882-12.047059-27.105883-27.105882s12.047059-27.105882 27.105883-27.105883h162.635294z m-138.541177-156.611764v72.282352H271.058824l75.294117-72.282352zM298.164706 512c0-15.058824 12.047059-27.105882 27.105882-27.105882h162.635294c15.058824 0 27.105882 12.047059 27.105883 27.105882s-12.047059 27.105882-27.105883 27.105882h-162.635294c-15.058824 0-27.105882-12.047059-27.105882-27.105882z m355.388235 268.047059h-283.105882v-54.211765h283.105882v54.211765z m21.082353-159.62353h-54.211765V243.952941h54.211765v376.470588z m105.411765 0h-54.211765V243.952941h54.211765v376.470588z" p-id="24952" fill="currentColor"></path></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -1,6 +1,6 @@
import Cookies from 'js-cookie'
const TokenKey = 'schj_admin_token'
const TokenKey = 'czhj_admin_token'
export function getToken() {
return Cookies.get(TokenKey)

@ -26,7 +26,7 @@
<el-date-picker v-model="row.date" style="width: 100%;" value-format="yyyy-MM-dd" />
</template>
</vxe-column>
<vxe-column field="user_id" title="值班人员" min-width="160" :edit-render="{}">
<vxe-column field="user.name" title="值班人员" min-width="160" :edit-render="{}">
<template #edit="{ row }">
<el-select
v-model="row.user_id"
@ -36,7 +36,7 @@
</el-select>
</template>
</vxe-column>
<vxe-column field="leader_id" title="带班领导" min-width="160" :edit-render="{}">
<vxe-column field="leader.name" title="带班领导" min-width="160" :edit-render="{}">
<template #edit="{ row }">
<el-select
v-model="row.leader_id"
@ -116,7 +116,8 @@ export default {
loading: false,
select: {
page: 1,
page_size: 20
page_size: 20,
show_relation: ['user', 'leader']
},
total: 0,
allAlign: null,
@ -197,6 +198,10 @@ export default {
async saveRowEvent(row) {
try {
const errMap = await this.$refs['table'].validate()
if (errMap) {
throw new Error(errMap)
}
await this.$confirm('确认保存?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消'

@ -0,0 +1,82 @@
<template>
<div>
<vxe-modal
:value="isShow"
show-footer
title="特殊日期"
show-confirm-button
:width="600"
:height="400"
esc-closable
:fullscreen="$store.getters.device === 'mobile'"
@input="e => $emit('update:isShow',e)"
>
<el-form ref="elForm" :model="form" :rules="rules" label-position="top" label-width="100">
<el-form-item label="名字" prop="name">
<el-input v-model="form.name" />
</el-form-item>
<el-form-item label="标识" prop="key">
<el-input v-model="form.key" />
</el-form-item>
<el-form-item label="值" prop="value">
<el-input v-model="form.value" />
</el-form-item>
<el-form-item label="排序" prop="mysort">
<el-input-number v-model="form.mysort" controls-position="right" :precision="0" />
</el-form-item>
</el-form>
<template #footer>
<el-button type="primary" :loading="loading" @click="submit"></el-button>
</template>
</vxe-modal>
</div>
</template>
<script>
import { save } from '@/api/config'
export default {
props: {
isShow: {
type: Boolean,
default: false,
required: true
}
},
data() {
return {
loading: false,
form: {
name: '',
key: '',
value: '',
mysort: 0
},
rules: {}
}
},
computed: {},
methods: {
submit() {
this.$refs['elForm'].validate(async valid => {
if (valid) {
this.loading = true
try {
await save(this.form)
this.$message.success('新增成功')
this.$emit('refresh')
this.$emit('update:isShow', false)
this.loading = false
this.$refs['elForm'].resetFields()
} catch (err) {
this.loading = false
}
}
})
}
}
}
</script>
<style scoped lang="scss">
</style>

@ -0,0 +1,194 @@
<template>
<div>
<card-container>
<vxe-toolbar>
<template #buttons>
<el-button icon="el-icon-plus" type="primary" size="small" @click="isShowAdd = true">新增</el-button>
<el-button icon="el-icon-search" type="primary" plain size="small" @click="getList"></el-button>
</template>
</vxe-toolbar>
<vxe-table
ref="table"
stripe
style="margin-top: 10px;"
:loading="loading"
keep-source
show-overflow
:column-config="{ resizable: true }"
:edit-rules="validRules"
:edit-config="{ trigger: 'manual', mode: 'row', showStatus: true, isHover: true, autoClear: false }"
:align="allAlign"
:data="tableData"
>
<vxe-column type="seq" width="58" align="center" />
<vxe-column field="name" width="170" title="名字" :edit-render="{ name: 'input', attrs: { type: 'text' } }" />
<vxe-column field="key" width="150" title="标识" :edit-render="{ name: 'input', attrs: { type: 'text' } }" />
<vxe-column field="value" width="150" title="值" :edit-render="{ name: 'input', attrs: { type: 'text' } }" />
<vxe-column field="mysort" width="80" title="排序" align="center" :edit-render="{ name: 'input', attrs: { type: 'number' } }" />
<vxe-column field="operate" title="操作" min-width="220">
<template #default="{ row }">
<template v-if="isActiveStatus(row)">
<el-button size="small" type="primary" @click="saveRowEvent(row)"></el-button>
<el-button size="small" type="primary" plain @click="cancelRowEvent(row)"></el-button>
</template>
<template v-else>
<el-button size="small" type="warning" @click="editRowEvent(row)"></el-button>
<el-button size="small" type="danger" @click="destroyRowEvent(row)"></el-button>
</template>
</template>
</vxe-column>
</vxe-table>
<el-pagination
style="margin-top: 10px;"
:current-page="select.page"
:page-sizes="[20, 30, 40, 50]"
:page-size="select.page_size"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="e => {
select.page_size = e;
select.page = 1;
getList();
}"
@current-change="e => {
select.page = e;
getList();
}"
/>
</card-container>
<add-config ref="AddConfig" :is-show.sync="isShowAdd" @refresh="getList" />
</div>
</template>
<script>
import { deepCopy } from '@/utils'
import { index, save, destroy } from '@/api/config'
import AddConfig from './components/AddConfig.vue'
export default {
components: {
AddConfig
},
data() {
return {
isShowAdd: false,
loading: false,
select: {
page: 1,
page_size: 20
},
total: 0,
allAlign: null,
tableData: [],
validRules: {},
form: {
id: '',
name: '',
key: '',
value: '',
mysort: ''
}
}
},
computed: {
isActiveStatus() {
return function(row) {
if (this.$refs['table']) {
return this.$refs['table'].isEditByRow(row)
}
}
}
},
created() {
this.getList()
},
methods: {
editRowEvent(row) {
if (this.$refs['table']) {
this.$refs['table'].setEditRow(row)
}
},
cancelRowEvent(row) {
if (this.$refs['table']) {
this.$refs['table'].clearEdit().then(() => {
//
this.$refs['table'].revertData(row)
})
}
},
async getList() {
this.loading = true
try {
const res = await index(this.select)
this.tableData = res.data
this.total = res.total
this.loading = false
} catch (err) {
console.error(err)
this.loading = false
}
},
async saveRowEvent(row) {
try {
const errMap = await this.$refs['table'].validate()
if (errMap) {
throw new Error(errMap)
}
await this.$confirm('确认保存?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消'
})
await this.$refs['table'].clearEdit()
const form = deepCopy(this.form)
for (const key in form) {
form[key] = row[key]
}
if (!form.password) {
delete form.password
}
this.loading = true
await save(form)
await this.getList()
this.loading = false
} catch (err) {
this.loading = false
}
},
async destroyRowEvent(row) {
try {
await this.$confirm('确认删除?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消'
})
this.loading = true
if (row.id) {
await destroy({
id: row.id
})
await this.getList()
} else {
console.log(row)
this.tableData.splice(this.tableData.findIndex(i => i._X_ROW_KEY === row._X_ROW_KEY), 1)
}
this.loading = false
} catch (err) {
this.loading = false
}
}
}
}
</script>
<style scoped lang="scss">
.total {
color: #666;
text-align: right;
line-height: 3;
}
::v-deep .el-tag + .el-tag {
margin-left: 4px;
}
</style>

@ -1,7 +1,7 @@
<template>
<el-card id="department-card" class="box-card" shadow="hover">
<div slot="header" class="clearfix">
<SvgIcon style="color: #3171f4;width: 22px;height: 22px;" icon-class="form" />
<SvgIcon style="color: var(--theme-color);width: 22px;height: 22px;" icon-class="form" />
<span
style=" padding-left: 15px"
>科室执行情况</span>

@ -1,7 +1,7 @@
<template>
<el-card class="box-card" shadow="hover">
<div slot="header" class="clearfix">
<SvgIcon style="color: #3171f4;width: 22px;height: 22px;" icon-class="caidan" />
<SvgIcon style="color: var(--theme-color);width: 22px;height: 22px;" icon-class="caidan" />
<span style="padding-left: 15px">快捷菜单</span>
<el-button v-if="/^\/system+/.test($route.path)" style="margin-left: auto;" size="mini" type="primary" @click="isShow = true"></el-button>
</div>

@ -1,7 +1,7 @@
<template>
<el-card id="todo-card" class="box-card" shadow="hover">
<div slot="header" class="clearfix">
<SvgIcon style="color: #3171f4;width: 22px;height: 22px;" icon-class="notice" />
<SvgIcon style="color: var(--theme-color);width: 22px;height: 22px;" icon-class="notice" />
<span
style="padding-left: 15px"
>待办事项</span>
@ -10,22 +10,64 @@
<div style="position: relative;height: 100%;width: 100%;">
<div style="position: absolute;top: 0;left: 0;right: 0;bottom: 0;">
<Table
<el-table
v-loading="loading"
style="width: 100%;"
size="mini"
:header-cell-style="{
'font-weight': '600',
'background': '#f8f8f9',
'color': '#515a6e'
}"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(255, 255, 255, 0.8)"
:show-header="false"
:height="tableHeight"
:loading="loading"
size="small"
:data="/^\/system/.test(this.$route.path) ? example : list"
:columns="table"
/>
>
<el-table-column type="index" width="46" align="center" />
<el-table-column
v-for="(item, index) in table"
:key="index"
:width="item.width"
:label="item.title"
:prop="item.key"
:show-overflow-tooltip="item['show-overflow-tooltip']"
header-align="center"
:align="item.align"
:formatter="item.formatter"
/>
<el-table-column label="操作" header-align="center" min-width="100" fixed="right">
<template #default="{ row }">
<el-button size="mini" style="padding: 5px 10px;" @click="show(row)"></el-button>
<el-button size="mini" type="primary" style="padding: 5px 10px;" @click="handle(row)"></el-button>
</template>
</el-table-column>
</el-table>
</div>
</div>
<vxe-modal
v-model="isShowModal"
transfer
show-zoom
title="办理"
width="86vw"
height="80vh"
esc-closable
>
<iframe :src="modalUrl" style="width: 100%;height: 100%" frameborder="0"/>
</vxe-modal>
</el-card>
</template>
<script>
import SvgIcon from '@/components/SvgIcon/index.vue'
import ElementResize from 'element-resize-detector'
import axios from 'axios'
import { getToken } from '@/utils/auth'
export default {
name: 'Card2',
@ -42,12 +84,8 @@ export default {
},
data() {
return {
window: {
width: 0,
height: 0,
top: 0,
left: 0
},
isShowModal: false,
modalUrl: '/',
example: [
{
type: 1,
@ -71,162 +109,107 @@ export default {
list: [],
total: 0,
table: [
{
type: 'index',
title: ' ',
align: 'center',
width: 46
},
{
title: '收件时间',
key: 'created_at',
width: 160,
width: 156,
align: 'center',
render: (h, { row }) => {
return h('span', { style: { color: '#4d8bdc' }}, this.$moment(row.created_at).format('YYYY-MM-DD HH:mm:ss'))
formatter: (row, column, cellValue) => {
return this.$moment(cellValue).format('YYYY-MM-DD HH:mm:ss')
}
},
{
title: '内容',
key: 'title',
key: 'content',
align: 'left',
ellipsis: true,
tooltip: true,
'show-overflow-tooltip': true,
minWidth: 200
},
{
title: '查看',
key: 'show',
width: 180,
render: (h, { row }) => {
return h('div', [
h(
'Button',
{
props: {
type: 'default',
size: 'small'
},
style: {
background: '#f0f3fa',
color: '#333',
border: '1px solid #dae1f0',
fontSize: '13px'
},
on: {
'click': (_) => {
if (row.from_type === 'contract') {
this.$router.push({
path: '/contract/contract/contractList',
query: {
keyword: /\[(.*?)\]/.exec(row.title) ? /\[(.*?)\]/.exec(row.title)[1] : ''
}
})
} else {
window.open(
`${process.env.VUE_APP_OUT_OLD}/flow/view/${row.id}?auth_token=${this.$store.getters.oa_token}`,
'edit',
`top=${this.window.top},left=${this.window.left},width=${this.window.width},height=${this.window.height},location=0`
)
}
}
}
},
'查看'
),
h(
'Button',
{
props: {
type: 'primary',
size: 'small'
},
style: {
'margin-left': '6px',
fontSize: '13px'
},
on: {
'click': (_) => {
if (row.from_type === 'contract') {
const toUrl = this.$router.resolve({
path: '/contract/contract/contractList',
query: {
keyword: /\[(.*?)\]/.exec(row.title) ? /\[(.*?)\]/.exec(row.title)[1] : ''
}
})
window.open(
toUrl.href,
'edit',
`top=${this.window.top},left=${this.window.left},width=${this.window.width},height=${this.window.height},location=0`
)
} else {
window.open(
`${process.env.VUE_APP_OUT_OLD}/flow/deal/${row.id}?auth_token=${this.$store.getters.oa_token}`,
'edit',
`top=${this.window.top},left=${this.window.left},width=${this.window.width},height=${this.window.height},location=0`
)
}
}
}
},
'办理'
)
])
}
}
// {
// title: "",
// key: "read_count",
// width: 120,
// title: '',
// key: 'show',
// width: 180,
// render: (h, { row }) => {
// return row.read_count
// ? h(
// "el-link",
// {
// props: {
// type: "success",
// underline: false,
// },
// return h('div', [
// h(
// 'Button',
// {
// props: {
// type: 'default',
// size: 'small'
// },
// ""
// )
// : h(
// "Button",
// {
// props: {
// type: "error",
// size: "small",
// ghost: true
// },
// on: {
// ['click']:e => {
// if(/^\/system/.test(this.$route.path)) return
//
// readNotice({
// id: row.id
// }).then(res => {
// this.$message({
// type: 'success',
// message: ''
// })
// this.getNotices()
// style: {
// background: '#f0f3fa',
// color: '#333',
// border: '1px solid #dae1f0',
// fontSize: '13px'
// },
// on: {
// 'click': (_) => {
// if (row.from_type === 'contract') {
// this.$router.push({
// path: '/contract/contract/contractList',
// query: {
// keyword: /\[(.*?)\]/.exec(row.title) ? /\[(.*?)\]/.exec(row.title)[1] : ''
// }
// })
// } else {
// window.open(
// `${process.env.VUE_APP_OUT_OLD}/flow/view/${row.id}?auth_token=${this.$store.getters.oa_token}`,
// 'edit',
// `top=${this.window.top},left=${this.window.left},width=${this.window.width},height=${this.window.height},location=0`
// )
// }
// }
// }
// },
// ''
// ),
// h(
// 'Button',
// {
// props: {
// type: 'primary',
// size: 'small'
// },
// style: {
// 'margin-left': '6px',
// fontSize: '13px'
// },
// ""
// );
// },
// },
// on: {
// 'click': (_) => {
// if (row.from_type === 'contract') {
// const toUrl = this.$router.resolve({
// path: '/contract/contract/contractList',
// query: {
// keyword: /\[(.*?)\]/.exec(row.title) ? /\[(.*?)\]/.exec(row.title)[1] : ''
// }
// })
// window.open(
// toUrl.href,
// 'edit',
// `top=${this.window.top},left=${this.window.left},width=${this.window.width},height=${this.window.height},location=0`
// )
// } else {
// window.open(
// `${process.env.VUE_APP_OUT_OLD}/flow/deal/${row.id}?auth_token=${this.$store.getters.oa_token}`,
// 'edit',
// `top=${this.window.top},left=${this.window.left},width=${this.window.width},height=${this.window.height},location=0`
// )
// }
// }
// }
// },
// ''
// )
// ])
// }
// }
]
}
},
computed: {},
created() {
this.window.width = screen.availWidth * 0.95
this.window.height = screen.availHeight * 0.95
this.window.top = (window.screen.height - 30 - this.window.height) / 2
this.window.left = (window.screen.width - 10 - this.window.width) / 2
this.getNotices()
},
mounted() {
@ -237,10 +220,21 @@ export default {
if (/^\/system/.test(this.$route.path)) return
try {
this.loading = true
this.list = []
this.total = 0
const res = await axios.get(`${process.env.VUE_APP_BASE_API}/api/ht/notice/index`, {
headers: {
'Authorization': `Bearer ${getToken()}`
},
params: this.select
})
if (res.status === 200) {
this.list = res.data.data?.data?.map(i => ({
...i,
module: 'ht'
}))
}
this.loading = false
} catch (e) {
} catch (err) {
console.error(err)
this.loading = false
}
},
@ -257,6 +251,19 @@ export default {
40 -
cardTitleH
})
},
show(row) {
if (row.module === 'ht') {
this.modalUrl = `/${row.module}?auth_token=${window.encodeURIComponent(getToken())}&module_name=${row.module}&to=${window.encodeURIComponent('/contract/contractList?keyword=' + (/\[(.*?)]/.exec(row.title) ? /\[(.*?)]/.exec(row.title)[1] : ''))}`
}
this.isShowModal = true
},
handle(row) {
if (row.module === 'ht') {
this.modalUrl = `/${row.module}?auth_token=${window.encodeURIComponent(getToken())}&module_name=${row.module}&to=${window.encodeURIComponent('/contract/contractList?keyword=' + (/\[(.*?)]/.exec(row.title) ? /\[(.*?)]/.exec(row.title)[1] : ''))}`
}
this.isShowModal = true
}
}
}
@ -267,11 +274,14 @@ export default {
width: 100%;
height: calc(100% - 58px);
}
::v-deep .ivu-table th,::v-deep .ivu-table td {
::v-deep .el-table th,::v-deep .el-table td {
border-bottom-style: dashed;
}
.clearfix {
display: flex;
align-items: center;
}
::v-deep .vxe-modal--content {
padding: 0;
}
</style>

@ -1,7 +1,7 @@
<template>
<el-card class-name="box-card" shadow="hover">
<div slot="header" class="clearfix">
<SvgIcon style="color: #3171f4;width: 22px;height: 22px;" icon-class="calendar-check" />
<SvgIcon style="color: var(--theme-color);width: 22px;height: 22px;" icon-class="calendar-check" />
<span
style="padding-left: 15px"
>预算总体执行情况</span>

@ -1,7 +1,7 @@
<template>
<el-card id="type-card" class="box-card" shadow="hover">
<div slot="header" class="clearfix">
<SvgIcon style="color: #3171f4;width: 22px;height: 22px;" icon-class="wengao" />
<SvgIcon style="color: var(--theme-color);width: 22px;height: 22px;" icon-class="wengao" />
<span
style="padding-left: 15px"
>预算类型执行情况</span>
@ -20,11 +20,16 @@
<div id="type-card-body" style="position: relative;height: 100%;width: 100%;">
<div style="position: absolute;top: 0;left: 0;right: 0;bottom: 0;">
<el-table
v-loading="loading"
style="width: 100%;"
:height="tableHeight"
size="small"
size="mini"
:header-cell-style="{
'font-weight': '600',
'background': '#f8f8f9',
'color': '#515a6e'
}"
:data="types"
v-loading="loading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(255, 255, 255, 0.8)"
@ -39,9 +44,9 @@
:align="item.align"
:formatter="item.formatter"
/>
<el-table-column label="执行情况" min-width="120" fixed="right">
<el-table-column label="执行情况" header-align="center" min-width="120" fixed="right">
<template #default="{ row }">
<el-progress stroke-width="13" :percentage="progressPer(row)" />
<el-progress :stroke-width="13" :percentage="progressPer(row)" :format="per => per.toFixed(2) + '%'" />
</template>
</el-table-column>
</el-table>
@ -118,17 +123,17 @@ export default {
computed: {
progressPer() {
return function(row) {
const m2 = row?.money_total_2 || 0
const m1 = row?.money_total_1 || 0
const m3 = row?.use_money_total || 0
const m2 = Number(row?.money_total_2) || 0
const m1 = Number(row?.money_total_1) || 0
const m3 = Number(row?.use_money_total) || 0
let per = 0
if (m2 !== 0) {
per = ((m3 / m2) * 100).toFixed(2)
per = ((m3 / m2) * 100)
} else if (m1 !== 0) {
per = ((m3 / m1) * 100).toFixed(2)
per = ((m3 / m1) * 100)
}
return per
return Number.isFinite(per) ? per : 0
}
}
},
@ -181,7 +186,7 @@ export default {
width: 100%;
height: calc(100% - 58px);
}
::v-deep .ivu-table th,::v-deep .ivu-table td {
::v-deep .el-table th,::v-deep .el-table td {
border-bottom-style: dashed;
}
::v-deep .el-progress {

@ -1,19 +1,21 @@
<template>
<div>
<vxe-modal :value="isShow"
show-footer
title="角色"
show-confirm-button
:width="600"
:height="400"
esc-closable
@input="e => $emit('update:isShow',e)">
<vxe-modal
:value="isShow"
show-footer
title="角色"
show-confirm-button
:width="600"
:height="400"
esc-closable
@input="e => $emit('update:isShow',e)"
>
<el-form ref="elForm" :model="form" :rules="rules" label-position="top" label-width="100">
<el-form-item label="角色" prop="name" required>
<el-input v-model="form.name" clearable></el-input>
<el-input v-model="form.name" clearable />
</el-form-item>
<el-form-item label="排序" prop="sortnumber">
<el-input-number controls-position="right" :precision="0" v-model="form.sortnumber"></el-input-number>
<el-input-number v-model="form.sortnumber" controls-position="right" :precision="0" />
</el-form-item>
</el-form>
@ -25,7 +27,7 @@
</template>
<script>
import { save } from "@/api/role"
import { save } from '@/api/role'
export default {
props: {
isShow: {
@ -38,36 +40,36 @@ export default {
return {
loading: false,
form: {
name: "",
name: '',
sortnumber: 0
},
rules: {
name: [
{ required: true, message: "请输入角色" }
{ required: true, message: '请输入角色' }
]
}
}
},
computed: {},
methods: {
submit () {
this.$refs["elForm"].validate(async valid => {
submit() {
this.$refs['elForm'].validate(async valid => {
if (valid) {
this.loading = true
try {
await save(this.form)
this.$message.success("新增成功")
this.$message.success('新增成功')
this.$emit('refresh')
this.$emit('update:isShow',false)
this.$emit('update:isShow', false)
this.loading = false
this.$refs["elForm"].resetFields()
this.$refs['elForm'].resetFields()
} catch (err) {
this.loading = false
}
}
})
}
},
computed: {}
}
}
</script>

@ -1,25 +1,33 @@
<template>
<div>
<vxe-modal :value="isShow"
show-footer
title="角色"
show-confirm-button
:width="600"
:height="600"
esc-closable
@input="e => $emit('update:isShow',e)">
<vxe-modal
:value="isShow"
show-footer
title="角色"
show-confirm-button
:width="600"
:height="600"
esc-closable
@input="e => $emit('update:isShow',e)"
>
<el-form ref="elForm" :model="form" :rules="rules" label-position="top" label-width="100">
<el-form-item label="姓名" prop="name" required>
<el-input v-model="form.name" clearable></el-input>
<el-input v-model="form.name" clearable />
</el-form-item>
<el-form-item label="用户名" prop="username" required>
<el-input v-model="form.username" clearable></el-input>
<el-input v-model="form.username" clearable />
</el-form-item>
<el-form-item label="密码" prop="password" required>
<el-input v-model="form.password" type="password" show-password clearable></el-input>
<el-input v-model="form.password" type="password" show-password clearable />
</el-form-item>
<el-form-item label="是否关闭打卡" prop="attendance_closed">
<el-switch v-model="form.attendance_closed" :active-value="1" :inactive-value="0" active-text="" inactive-text="" />
</el-form-item>
<el-form-item label="手机号" prop="mobile">
<el-input v-model="form.mobile" clearable />
</el-form-item>
<el-form-item label="排序" prop="sortnumber">
<el-input-number controls-position="right" :precision="0" v-model="form.sortnumber"></el-input-number>
<el-input-number v-model="form.sortnumber" controls-position="right" :precision="0" />
</el-form-item>
</el-form>
@ -31,7 +39,7 @@
</template>
<script>
import { save } from "@/api/user"
import { save } from '@/api/user'
export default {
props: {
isShow: {
@ -44,54 +52,67 @@ export default {
return {
loading: false,
form: {
name: "",
username: "",
password: "",
name: '',
username: '',
password: '',
attendance_closed: 0,
mobile: '',
sortnumber: 0
},
rules: {
name: [
{ required: true, message: "请输入姓名" }
{ required: true, message: '请输入姓名' }
],
username: [
{ required: true, message: "请输入用户名" }
{ required: true, message: '请输入用户名' }
],
password: [
{ required: true, message: "请输入密码" },
{ required: true, message: '请输入密码' },
{
validator: (rule, value, callback) => {
const reg = new RegExp('(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,20}');
const reg = new RegExp('(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,20}')
if (reg.test(value)) {
callback()
} else {
callback(new Error("您的密码复杂度太低(密码中必须包含字母、数字、特殊字符)!"))
callback(new Error('您的密码复杂度太低(密码中必须包含字母、数字、特殊字符)!'))
}
}
}
],
mobile: [
{
validator: (rule, value, callback) => {
if (/^1[3456789]\d{9}$/.test(value)) {
callback()
} else {
callback(new Error('手机号格式错误!'))
}
}
}
]
}
}
},
computed: {},
methods: {
submit () {
this.$refs["elForm"].validate(async valid => {
submit() {
this.$refs['elForm'].validate(async valid => {
if (valid) {
this.loading = true
try {
await save(this.form)
this.$message.success("新增成功")
this.$message.success('新增成功')
this.$emit('refresh')
this.$emit('update:isShow',false)
this.$emit('update:isShow', false)
this.loading = false
this.$refs["elForm"].resetFields()
this.$refs['elForm'].resetFields()
} catch (err) {
this.loading = false
}
}
})
}
},
computed: {}
}
}
</script>

@ -342,6 +342,10 @@ export default {
async saveMenuRowEvent(row) {
try {
const errMap = await this.$refs['menuTable'].validate()
if (errMap) {
throw new Error(errMap)
}
await this.$confirm('确认保存?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消'
@ -397,12 +401,16 @@ export default {
},
async saveRoleRowEvent(row) {
try {
const errMap = await this.$refs['roleTable'].validate()
if (errMap) {
throw new Error(errMap)
}
await this.$confirm('确认保存?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消'
})
await this.$refs['menuTable'].clearEdit()
const form = deepCopy(this.menuForm)
await this.$refs['roleTable'].clearEdit()
const form = deepCopy(this.roleForm)
for (const key in form) {
form[key] = row[key]
}

@ -153,6 +153,10 @@ export default {
async saveRowEvent(row) {
try {
const errMap = await this.$refs['table'].validate()
if (errMap) {
throw new Error(errMap)
}
await this.$confirm('确认保存?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消'

@ -128,6 +128,10 @@ export default {
async saveRowEvent(row) {
try {
const errMap = await this.$refs['table'].validate()
if (errMap) {
throw new Error(errMap)
}
await this.$confirm('确认保存?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消'

@ -8,9 +8,9 @@
</template>
</vxe-toolbar>
<vxe-table
ref="table"
stripe
style="margin-top: 10px;"
ref="table"
:loading="loading"
keep-source
show-overflow
@ -18,9 +18,10 @@
:edit-rules="validRules"
:edit-config="{ trigger: 'manual', mode: 'row', showStatus: true, isHover: true, autoClear: false }"
:align="allAlign"
:data="tableData">
<vxe-column type="seq" width="58" align="center"></vxe-column>
<vxe-column field="name" width="160" title="角色" :edit-render="{ name: 'input', attrs: { type: 'text'} }"></vxe-column>
:data="tableData"
>
<vxe-column type="seq" width="58" align="center" />
<vxe-column field="name" width="160" title="角色" :edit-render="{ name: 'input', attrs: { type: 'text'} }" />
<vxe-column field="permissions" title="权限菜单" show-overflow="tooltip">
<template #default="{ row }">
<div>
@ -28,7 +29,7 @@
</div>
</template>
</vxe-column>
<vxe-column field="sortnumber" width="80" title="排序" align="center" :edit-render="{ name: 'input', attrs: { type: 'number' } }"></vxe-column>
<vxe-column field="sortnumber" width="80" title="排序" align="center" :edit-render="{ name: 'input', attrs: { type: 'number' } }" />
<vxe-column field="operate" title="操作" min-width="220">
<template #default="{ row }">
<template v-if="isActiveStatus(row)">
@ -47,20 +48,20 @@
<p class="total" type="primary"> {{ total }} 条数据</p>
</card-container>
<add-role ref="AddRole" :is-show.sync="isShowAdd" @refresh="getList"></add-role>
<bind-permissions ref="BindPermissions" :is-show.sync="isShowBind" @refresh="getList"></bind-permissions>
<add-role ref="AddRole" :is-show.sync="isShowAdd" @refresh="getList" />
<bind-permissions ref="BindPermissions" :is-show.sync="isShowBind" @refresh="getList" />
</div>
</template>
<script>
import BindPermissions from './components/BindPermissions.vue'
import AddRole from "./components/AddRole.vue"
import { deepCopy } from "@/utils"
import { index, save, destroy } from "@/api/role"
import AddRole from './components/AddRole.vue'
import { deepCopy } from '@/utils'
import { index, save, destroy } from '@/api/role'
export default {
components: {
AddRole,
BindPermissions,
BindPermissions
},
data() {
return {
@ -73,28 +74,40 @@ export default {
tableData: [],
validRules: {
name: [
{ required: true, message: "请输入角色" }
{ required: true, message: '请输入角色' }
]
},
form: {
id: "",
name: "",
id: '',
name: '',
sortnumber: 0
}
}
},
computed: {
isActiveStatus() {
return function(row) {
if (this.$refs['table']) {
return this.$refs['table'].isEditByRow(row)
}
}
}
},
created() {
this.getList()
},
methods: {
bind (row) {
this.isShowBind = true;
this.$refs['BindPermissions'].setForm(['id','permission_id'],[row.id,row.permissions?.map(i => i.id)||[]])
bind(row) {
this.isShowBind = true
this.$refs['BindPermissions'].setForm(['id', 'permission_id'], [row.id, row.permissions?.map(i => i.id) || []])
},
editRowEvent (row) {
editRowEvent(row) {
if (this.$refs['table']) {
this.$refs['table'].setEditRow(row)
}
},
cancelRowEvent (row) {
cancelRowEvent(row) {
if (this.$refs['table']) {
this.$refs['table'].clearEdit().then(() => {
//
@ -103,74 +116,66 @@ export default {
}
},
async getList () {
this.loading = true;
async getList() {
this.loading = true
try {
const res = await index()
this.tableData = res.rows;
this.total = res.total;
this.loading = false;
this.tableData = res.rows
this.total = res.total
this.loading = false
} catch (err) {
console.error(err)
this.loading = false;
this.loading = false
}
},
async saveRowEvent (row) {
async saveRowEvent(row) {
try {
await this.$confirm("确认保存?","提示",{
confirmButtonText: "确认",
cancelButtonText: "取消"
const errMap = await this.$refs['table'].validate()
if (errMap) {
throw new Error(errMap)
}
await this.$confirm('确认保存?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消'
})
await this.$refs['table'].clearEdit()
let form = deepCopy(this.form)
for (let key in form) {
const form = deepCopy(this.form)
for (const key in form) {
form[key] = row[key]
}
if (!form.password) {
delete form.password
}
this.loading = true;
this.loading = true
await save(form)
await this.getList();
this.loading = false;
await this.getList()
this.loading = false
} catch (err) {
this.loading = false;
this.loading = false
}
},
async destroyRowEvent (row) {
async destroyRowEvent(row) {
try {
await this.$confirm("确认删除?","提示",{
confirmButtonText: "确认",
cancelButtonText: "取消"
await this.$confirm('确认删除?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消'
})
this.loading = true;
this.loading = true
if (row.id) {
await destroy({
id: row.id
})
await this.getList();
await this.getList()
} else {
console.log(row)
this.tableData.splice(this.tableData.findIndex(i => i._X_ROW_KEY === row._X_ROW_KEY),1)
this.tableData.splice(this.tableData.findIndex(i => i._X_ROW_KEY === row._X_ROW_KEY), 1)
}
this.loading = false;
this.loading = false
} catch (err) {
this.loading = false;
}
},
},
computed: {
isActiveStatus () {
return function (row) {
if (this.$refs['table']) {
return this.$refs['table'].isEditByRow(row)
}
this.loading = false
}
}
},
created() {
this.getList()
}
}
</script>

@ -8,9 +8,9 @@
</template>
</vxe-toolbar>
<vxe-table
ref="table"
stripe
style="margin-top: 10px;"
ref="table"
:loading="loading"
keep-source
show-overflow
@ -18,15 +18,18 @@
:edit-rules="validRules"
:edit-config="{ trigger: 'manual', mode: 'row', showStatus: true, isHover: true, autoClear: false }"
:align="allAlign"
:data="tableData">
<vxe-column type="seq" width="58" align="center"></vxe-column>
<vxe-column field="name" width="140" title="姓名" :edit-render="{ name: 'input', attrs: { type: 'text'} }"></vxe-column>
<vxe-column field="username" width="160" title="用户名" :edit-render="{ name: 'input', attrs: { type: 'text'} }"></vxe-column>
:data="tableData"
>
<vxe-column type="seq" width="58" align="center" />
<vxe-column field="name" width="140" title="姓名" :edit-render="{ name: 'input', attrs: { type: 'text'} }" />
<vxe-column field="username" width="160" title="用户名" :edit-render="{ name: 'input', attrs: { type: 'text'} }" />
<vxe-column field="password" width="160" title="密码" :edit-render="{ name: 'input', attrs: { type: 'password'} }">
<template #default="{ row }">
<template #default>
<span>***</span>
</template>
</vxe-column>
<vxe-column field="attendance_closed" width="130" align="center" title="是否关闭打卡" :edit-render="{ name: 'select', options: [{ value: 1, label: '' },{ value: 0, label: '' }] }" />
<vxe-column field="mobile" width="140" align="center" title="手机号" :edit-render="{ name: 'input', attrs: { type: 'text' } }" />
<vxe-column field="roles" title="角色" min-width="200" show-overflow="tooltip">
<template #default="{ row }">
<div>
@ -34,7 +37,7 @@
</div>
</template>
</vxe-column>
<vxe-column field="sortnumber" width="80" title="排序" align="center" :edit-render="{ name: 'input', attrs: { type: 'number' } }"></vxe-column>
<vxe-column field="sortnumber" width="80" title="排序" align="center" :edit-render="{ name: 'input', attrs: { type: 'number' } }" />
<vxe-column field="operate" title="操作" min-width="240">
<template #default="{ row }">
<template v-if="isActiveStatus(row)">
@ -52,6 +55,11 @@
<el-pagination
style="margin-top: 10px;"
:current-page="select.page"
:page-sizes="[20, 30, 40, 50]"
:page-size="select.rows"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="e => {
select.rows = e;
select.page = 1;
@ -61,24 +69,19 @@
select.page = e;
getList();
}"
:current-page="select.page"
:page-sizes="[20, 30, 40, 50]"
:page-size="select.rows"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
/>
</card-container>
<AddUser :is-show.sync="isShowAdd" @refresh="getList"></AddUser>
<BindRoles ref="BindRoles" :is-show.sync="isShowBind" @refresh="getList"></BindRoles>
<AddUser :is-show.sync="isShowAdd" @refresh="getList" />
<BindRoles ref="BindRoles" :is-show.sync="isShowBind" @refresh="getList" />
</div>
</template>
<script>
import BindRoles from './components/BindRoles.vue'
import AddUser from "./components/AddUser.vue"
import { deepCopy } from "@/utils"
import { index, save, destroy } from "@/api/user"
import AddUser from './components/AddUser.vue'
import { deepCopy } from '@/utils'
import { index, save, destroy } from '@/api/user'
export default {
components: {
AddUser,
@ -92,7 +95,7 @@ export default {
select: {
page: 1,
rows: 20,
keyword: ""
keyword: ''
},
loading: false,
total: 0,
@ -100,46 +103,72 @@ export default {
tableData: [],
validRules: {
name: [
{ required: true, message: "请输入姓名" }
{ required: true, message: '请输入姓名' }
],
username: [
{ required: true, message: "请输入用户名" }
{ required: true, message: '请输入用户名' }
],
password: [
{ required: true, message: "请输入密码" },
{
validator: (rule, value, callback) => {
const reg = new RegExp('(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,20}');
if (reg.test(value)) {
callback()
} else {
callback(new Error("您的密码复杂度太低(密码中必须包含字母、数字、特殊字符)!"))
}
validator: ({ cellValue }) => {
return new Promise((resolve, reject) => {
const reg = new RegExp('(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,20}')
if (cellValue === undefined || reg.test(cellValue)) {
resolve()
} else {
reject(new Error('您的密码复杂度太低(密码中必须包含字母、数字、特殊字符)!'))
}
})
}
}
],
mobile: [
{
validator: ({ cellValue }) => {
return new Promise((resolve, reject) => {
if (/^1[3456789]\d{9}$/.test(cellValue)) {
resolve()
} else {
reject(new Error('手机号格式错误!'))
}
})
}
}
]
},
form: {
id: "",
name: "",
username: "",
password: "",
id: '',
name: '',
username: '',
password: '',
sortnumber: 0
}
}
},
computed: {
isActiveStatus() {
return function(row) {
if (this.$refs['table']) {
return this.$refs['table'].isEditByRow(row)
}
}
}
},
created() {
this.getList()
},
methods: {
bind (row) {
bind(row) {
this.isShowBind = true
this.$refs['BindRoles'].setForm(['id', 'role_id'],[row.id,row.roles?.map(i => i.id)||[]])
this.$refs['BindRoles'].setForm(['id', 'role_id'], [row.id, row.roles?.map(i => i.id) || []])
},
editRowEvent (row) {
editRowEvent(row) {
if (this.$refs['table']) {
this.$refs['table'].setEditRow(row)
}
},
cancelRowEvent (row) {
cancelRowEvent(row) {
if (this.$refs['table']) {
this.$refs['table'].clearEdit().then(() => {
//
@ -148,71 +177,63 @@ export default {
}
},
async getList () {
this.loading = true;
async getList() {
this.loading = true
try {
const res = await index(this.select)
this.tableData = res.data;
this.total = res.total;
this.tableData = res.data
this.total = res.total
console.log(res)
this.loading = false;
this.loading = false
} catch (err) {
console.error(err)
this.loading = false;
this.loading = false
}
},
async saveRowEvent (row) {
async saveRowEvent(row) {
try {
await this.$confirm("确认保存?","提示",{
confirmButtonText: "确认",
cancelButtonText: "取消"
const errMap = await this.$refs['table'].validate()
if (errMap) {
throw new Error(errMap)
}
await this.$confirm('确认保存?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消'
})
await this.$refs['table'].clearEdit()
let form = deepCopy(this.form)
for (let key in form) {
const form = deepCopy(this.form)
for (const key in form) {
form[key] = row[key]
}
this.loading = true;
this.loading = true
await save(form)
await this.getList();
this.loading = false;
await this.getList()
this.loading = false
} catch (err) {
this.loading = false;
this.loading = false
}
},
async destroyRowEvent (row) {
async destroyRowEvent(row) {
try {
await this.$confirm("确认删除?","提示",{
confirmButtonText: "确认",
cancelButtonText: "取消"
await this.$confirm('确认删除?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消'
})
this.loading = true;
this.loading = true
if (row.id) {
await destroy({
id: row.id
})
await this.getList();
await this.getList()
} else {
this.tableData.splice(this.tableData.findIndex(i => i._X_ROW_KEY === row._X_ROW_KEY),1)
this.tableData.splice(this.tableData.findIndex(i => i._X_ROW_KEY === row._X_ROW_KEY), 1)
}
this.loading = false;
this.loading = false
} catch (err) {
this.loading = false;
}
},
},
computed: {
isActiveStatus () {
return function (row) {
if (this.$refs['table']) {
return this.$refs['table'].isEditByRow(row)
}
this.loading = false
}
}
},
created() {
this.getList()
}
}
</script>

Loading…
Cancel
Save