master
xy 1 year ago
parent 6ef647cc0e
commit 5b7028bdc3

@ -0,0 +1,37 @@
import request from '@/utils/request';
export function index(params,noloading=false) {
return request({
method: "get",
url: "/api/admin/away/index",
params,
noloading
})
}
export function show (params,noloading=false) {
return request({
method: "get",
url: "/api/admin/away/show",
params,
noloading
})
}
export function save (data,noloading=false) {
return request({
method: "post",
url: "/api/admin/away/save",
data,
noloading
})
}
export function destroy(params,noloading=false) {
return request({
method: "get",
url: "/api/admin/away/destroy",
params,
noloading
})
}

@ -0,0 +1,155 @@
<template>
<div style="padding: 0 20px;">
<lx-header
icon="md-document"
style="margin-bottom: 10px; border: 0px; margin-top: 15px"
:text="(id ? '编辑' : '新增') + '出差申请'"
>
</lx-header>
<el-card>
<el-form :model="form" :rules="rules" ref="form" label-width="120px">
<el-form-item label="标题" prop="title">
<el-input clearable placeholder="请输入标题" v-model="form.title" style="max-width: 300px;width: 100%;"></el-input>
</el-form-item>
<el-form-item label="是否用车" prop="use_car">
<el-radio-group v-model="form.use_car">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="开始时间" prop="start_date">
<el-date-picker value-format="yyyy-MM-dd" clearable placeholder="请选择开始时间" style="max-width: 300px;width: 100%;" v-model="form.start_date"></el-date-picker>
</el-form-item>
<el-form-item label="结束时间" prop="end_date">
<el-date-picker value-format="yyyy-MM-dd"
clearable
placeholder="请选择结束时间"
style="max-width: 300px;width: 100%;"
v-model="form.end_date"></el-date-picker>
</el-form-item>
<el-form-item label="是否室内补助" prop="is_subsidize">
<el-radio-group v-model="form.is_subsidize">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item align="center">
<el-button type="warning" plain @click="reset"></el-button>
<el-button :loading="loading" type="primary" @click="submit"></el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</template>
<script>
import { deepCopy } from "@/utils";
import { save, show } from "@/api/away"
export default {
data() {
return {
id: "",
loading: false,
form: {
title: '',
use_car: 0,
start_date: '',
end_date: '',
is_subsidize: 0,
},
copyForm: {
},
rules: {
title: [
{ required: true, message: '请输入标题', trigger: 'blur' },
],
start_date: [
{ required: true, message: '请选择开始时间', trigger: 'blur' },
{
validator: (rule, value, callback) => {
if (this.form.end_date && this.form.start_date) {
if (this.$moment(this.form.end_date).isAfter(this.form.start_date)) {
callback()
} else {
callback(new Error('结束时间不能小于开始时间'))
}
} else {
callback()
}
}
}
],
end_date: [
{ required: true, message: '请选择结束时间', trigger: 'blur' },
{
validator: (rule, value, callback) => {
if (this.form.end_date && this.form.start_date) {
if (this.$moment(this.form.end_date).isAfter(this.form.start_date)) {
callback()
} else {
callback(new Error('结束时间不能小于开始时间'))
}
} else {
callback()
}
}
}
],
}
}
},
methods: {
init () {
this.copyForm = deepCopy(this.form)
},
reset () {
this.form = deepCopy(this.copyForm)
this.$nextTick(() => this.$refs.form.clearValidate())
},
async getDetail () {
const res = await show({ id: this.id },false);
for (let key in this.form) {
this.form[key] = res[key]
}
},
submit () {
this.loading = true
this.$refs.form.validate((valid) => {
if (valid) {
save(this.form,true).then(res => {
this.loading = false
this.$message({
message: '提交成功',
type:'success'
})
setTimeout(() => {
this.$router.push("/contract/away")
},500)
}).catch(err => {
this.loading = false
})
} else {
return false
}
})
}
},
computed: {},
created() {
this.init();
},
beforeRouteEnter(to, from, next) {
next(vm => {
vm.id = to.query.id;
vm.getDetail(vm.id);
})
}
}
</script>
<style scoped lang="scss">
</style>

@ -51,14 +51,11 @@
<div>
<Button
type="primary"
@click="">新增</Button>
@click="$router.push('/contract/away/addAway')">新增</Button>
</div>
<div>
<Button type="primary" @click="getList"></Button>
</div>
<div>
<Button type="primary" @click="">导出</Button>
</div>
</div>
</slot>
</lx-header>
@ -66,9 +63,70 @@
<xy-table
ref="xyTable"
:list="list"
:show-summary="true"
:table-item="table"
@editor=""
>
<template v-slot:btns>
<el-table-column
fixed="right"
header-align="center"
label="操作"
width="220"
>
<template #default="{ row }">
<Poptip
:transfer="true"
confirm
placement="bottom"
title="确认要删除吗"
@on-ok="() => deleteAway(row.id)"
>
<Button
style="margin-left: 4px;"
ghost
size="small"
type="error"
>删除
</Button>
</Poptip>
<Button
style="margin-left: 4px;"
size="small"
type="primary"
@click="$router.push('/contract/away/addAway?id=' + row.id)"
>编辑
</Button>
<template v-if="row.FLOWSTATUS.useCar.isEnabled()">
<Button
style="margin-left: 4px;"
size="small"
type="primary"
@click=""
>用车审核
</Button>
</template>
<template v-if="row.FLOWSTATUS.subsidize.isEnabled()">
<Button
style="margin-left: 4px;"
size="small"
type="primary"
@click=""
>市内补助审核
</Button>
</template>
<template v-if="row.FLOWSTATUS.away.isEnabled()">
<Button
style="margin-left: 4px;"
size="small"
type="primary"
@click=""
>出差审核
</Button>
</template>
</template>
</el-table-column>
</template>
</xy-table>
<div style="display: flex; justify-content: flex-end;padding: 10px 6px;">
@ -92,7 +150,7 @@
</template>
<script>
import {parseTime} from "@/utils";
import { index, destroy } from "@/api/away";
export default {
data() {
@ -108,19 +166,36 @@ export default {
list: [],
table: [
{
label: "标题"
label: "标题",
prop: "title",
width: 200,
align: "left",
fixed: "left"
},
{
label: "开始时间"
label: "开始时间",
prop: "start_date",
width: 120
},
{
label: "结束时间"
label: "结束时间",
prop: "end_date",
width: 120
},
{
label: "是否用车"
label: "是否用车",
prop: "use_car",
formatter: (cell, data, value) => {
return value? "是" : "否";
},
},
{
label: "是否市内补助"
label: "是否市内补助",
prop: "is_subsidize",
formatter: (cell, data, value) => {
return value? "是" : "否";
},
width: 140
},
{
label: "创建日期",
@ -145,10 +220,72 @@ export default {
},
methods: {
async getList () {
class Flow {
status = 0
executable = false
constructor(status=0, executable=false) {
this.status = status
this.executable = executable
}
setStatus (status) {
this.status = status
}
setExecutable (executable) {
if (typeof executable === 'boolean') {
this.executable = executable
}
}
getStatus () {
return this.status
}
isEnabled () {
return this.executable && this.status === 1
}
}
const res = await index(this.select);
this.total = res.total;
this.list = res.data;
this.list.forEach(item => {
let flowStatus = {
"useCar": new Flow(),
"subsidize": new Flow(),
"away": new Flow(),
"financial": new Flow()
}
if (item.use_car) {
flowStatus.useCar.setStatus(item.use_car_status)
if (item.use_car_status === 1) {
flowStatus.useCar.setExecutable(true)
}
}
if (item.is_subsidize) {
flowStatus.subsidize.setStatus(item.subsidize_status)
if (item.subsidize_status === 1) {
flowStatus.subsidize.setExecutable(true)
}
}
flowStatus.away.setStatus(item.away_status)
if (item.away_status === 1) {
flowStatus.away.setExecutable(true)
}
flowStatus.financial.setStatus(item.financial_status)
if (item.away_status === 3) {
flowStatus.financial.setExecutable(true)
}
item.FLOWSTATUS = flowStatus;
});
},
async deleteAway (id) {
await destroy({ id });
await this.getList();
}
},
computed: {},
created() {
this.getList()
}
}
</script>

@ -257,7 +257,8 @@ export default {
//join_status: 3,
invite_status: 3,
outcome_type: 1,
files: []
files: [],
is_purchase: 0
}
this.$refs["dialog"].clearValidate();
},

@ -273,6 +273,21 @@
</el-select>
</el-form-item>
<el-form-item prop="group_type" label="组织形式">
<el-select
clearable
placeholder="请选择组织形式"
v-model="form.group_type"
style="width: 100%"
>
<el-option
v-for="item in groupType"
:label="item.value"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item prop="money_way_id" label="资金渠道">
<el-select
multiple
@ -895,6 +910,7 @@ export default {
is_contract: 1,
purchase_way_id: "",
money_way_id: "",
group_type: "",
plan_price: 0,
name: "",
contract_plan_links: [],
@ -906,13 +922,15 @@ export default {
use_framework_buy: 0,
content: "",
contract_to_contracts: [],
outcome_type: 1
outcome_type: 1,
is_purchase: 1
},
planTypes: [],
departments: [],
purchaseType: [],
moneyWay: [],
purchaseWay: [],
groupType: [],
userList: ["ma_sm", "admin", "yu_l", "wang_yx", "li_f", "chen_y"],
boxheight: 300,
user: null,
@ -1286,6 +1304,16 @@ export default {
})
)?.detail || [];
},
//
async getGroupType() {
this.groupType =
(
await getparameter({
number: "group_type",
})
)?.detail || [];
},
getDepartment() {
listdeptNoAuth().then((res) => {
this.departments = res;
@ -1482,7 +1510,8 @@ export default {
use_framework_buy: 0,
content: "",
contract_to_contracts: [],
outcome_type: 1
outcome_type: 1,
is_purchase: 1
};
this.$refs["form"].clearValidate();
@ -1799,6 +1828,7 @@ export default {
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.getGroupType();
this.getPlanTypes();
this.getDepartment();
this.getBudgets();

@ -1686,6 +1686,14 @@ export default {
},
],
},
{
label: "组织形式",
width: 120,
prop: "group_type_detail.value",
formatter: (cell, data, value) => {
return value ? value : "无";
},
},
{
label: "采购方式",
width: 120,

Loading…
Cancel
Save