master
xy 1 year ago
parent 80dc7f55db
commit f655894f94

@ -1,6 +1,10 @@
<script>
export default {
props:{
fullscreen: {
type: Boolean,
default: false
},
zIndex:Number,
type:{
type:String,
@ -129,6 +133,7 @@ export default {
const {okText,okClick,footerRender,width,type,$scopedSlots,rules,form,showChange,isShow,title} = this
return (
<Modal
fullscreen={this.fullscreen}
z-index={this.zIndex}
ok-text={okText}
class-name={'vertical-center-modal'}

@ -146,7 +146,8 @@ export class CreateDialog {
: "编辑",
visible: that.dialogVisible,
width: this.options?.width ? this.options.width : "800px",
"append-to-body": true
"append-to-body": true,
fullscreen: this.options.fullscreen
},
on: {
"update:visible": (val) => {

@ -43,7 +43,8 @@
import * as XLSX from "xlsx";
import { saveAs } from "file-saver";
import { getToken } from "@/utils/auth";
import { imports } from "@/api/system/baseForm";
import {imports, index} from "@/api/system/baseForm";
import {show} from "@/api/system/customFormField";
export default {
props: {
formInfo: {
@ -54,7 +55,7 @@ export default {
},
data() {
return {
action: `${process.env.VUE_APP_BASE_API}/api/admin/base-form/excel-show`,
action: `${process.env.VUE_APP_BASE_API}api/admin/base-form/excel-show`,
dialogVisible: false,
headers: [],
@ -104,9 +105,20 @@ export default {
},
imports() {
let importData = this.tableList.map(i => {
i.equipment_id = this.equipmentList.find(j => j.name === i.equipment_id)?.id;
i.leibie = this.abilities.find(j => j.key === i.leibie)?.value;
i.diaolingleixing = this.diaolingleixing.find(j => j.key === i.diaolingleixing)?.value;
for (let key in i) {
if (typeof i[key] === 'object') {
i[key] = this.$moment(i[key].date).format('YYYY-MM-DD HH:mm:ss')
}
}
return i;
})
imports({
table_name: this.tableName,
data: this.tableList
data: importData
}).then(res => {
console.log(res)
this.$message({
@ -116,7 +128,48 @@ export default {
})
this.hidden();
this.$emit('refresh')
}
},
async getEquipments () {
this.equipmentList = (await index({
table_name: 'equipments',
page: 1,
page_size: 9999
},false))?.data || []
},
async getAbility() {
const obj = (await show({ id: 31 }, false))?.select_item;
if (obj && typeof obj === "object") {
let keys = Object.keys(obj);
if (keys.length > 0) {
this.abilities = keys.map((key) => {
return {
key,
value: /^\d*$/.test(obj[key]) ? Number(obj[key]) : obj[key],
};
});
}
}
},
async getDiaolingleixing() {
const obj = {
"逻辑调令": "4",
"防汛调令": "2",
"水环境调令": "1",
"船只过闸调令": "3"
};
if (obj && typeof obj === "object") {
let keys = Object.keys(obj);
if (keys.length > 0) {
this.diaolingleixing = keys.map((key) => {
return {
key,
value: /^\d*$/.test(obj[key]) ? Number(obj[key]) : obj[key],
};
});
}
}
},
},
computed: {},
watch: {
@ -126,11 +179,17 @@ export default {
return {
key: i.field,
title: i.name,
width: 200
};
});
}
},
},
created() {
this.getEquipments();
this.getDiaolingleixing();
this.getAbility();
}
};
</script>

@ -1,6 +1,7 @@
<template>
<div>
<xy-dialog
:fullscreen="fullscreen"
ref="dialog"
:is-show.sync="isShow"
type="form"
@ -10,7 +11,7 @@
@submit="submit"
>
<template #extraFormTop>
<el-descriptions title="调令信息" :column="2" label-class-name="xy-table-item-label">
<el-descriptions title="调令信息" :column="fullscreen ? 1 : 2" label-class-name="xy-table-item-label">
<el-descriptions-item label="点位">{{ detail.equipment_id_equipments_id_relation ? detail.equipment_id_equipments_id_relation.name : "" }}</el-descriptions-item>
<el-descriptions-item label="闸门总数">{{ detail.equipment_id_equipments_id_relation ? detail.equipment_id_equipments_id_relation.bengzhashuliang : "" }}</el-descriptions-item>
<el-descriptions-item label="水泵总数">{{ detail.equipment_id_equipments_id_relation ? detail.equipment_id_equipments_id_relation.shuibengtaishu : "" }}</el-descriptions-item>
@ -114,7 +115,11 @@ import { show, save } from "@/api/system/baseForm";
export default {
props: {
areas: Array,
abilities: Array
abilities: Array,
fullscreen: {
type: Boolean,
default: false
}
},
data() {
return {

@ -0,0 +1,276 @@
<script>
import { save, show, index, destroy } from "@/api/system/baseForm";
import { CreateDialog } from "@/utils/createDialog"
import { deepCopy } from "@/utils";
import { resolveFormInfo } from '@/utils/createTable';
import { sendSms } from "@/api/other"
export default {
props: {
tableName: String,
},
render(h) {
let dialog = new CreateDialog(this,[
{
key: "telephone_group",
label: "通知号码组",
render: row => {
return (
<el-select style="width: 100%;"
vModel={this.groupId}
value-key="id"
clearable={true}
on={{
['change']:e => {
this.smsForm.mobile = e.id_telephone_group_relations_group_id_relation?.map(i => i.name)}
}}>
{
this.telephoneGroups.map(i =>
(
<el-option value={i} label={i.name}>
<span style="float: left">{i.name}</span>
<span style="text-align: right;float: right;width: 50%;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">
{
i.id_telephone_group_relations_group_id_relation?.map((j, ji) => (j.name + ( ji === i.id_telephone_group_relations_group_id_relation.length - 1 ? '' : ',' )))
}
</span>
</el-option>
)
)
}
</el-select>
)
}
}
],{
fullscreen: true
})
return dialog.render()
},
data() {
return {
columns: 1,
row: {},
formInfo: [],
id: "",
transfer_id: '',
type: "add",
dialogVisible: false,
form: {},
originalForm: {},
rules: {},
file: {},
telephoneGroups: [],
groupId: '',
smsForm: {
mobile: [],
content: ""
}
};
},
methods: {
setRow (row) {
this.row = row
},
init() {
for (let key in this.form) {
if (this.form[key] instanceof Array) {
this.form[key] = [];
} else {
this.form[key] = "";
}
}
this.$refs["elForm"].clearValidate();
},
show() {
this.dialogVisible = true;
},
hidden() {
this.dialogVisible = false;
},
setType(type = "add") {
let types = ["add", "editor", "show"];
if (types.includes(type)) {
this.type = type;
} else {
console.warn("Unknown type: " + type);
}
},
setId(id) {
if (typeof id == "number") {
this.transfer_id = id;
} else {
console.error("error typeof id: " + typeof id);
}
},
async getDetail() {
const res = await show({ id: this.id, table_name: 'feedbacks' });
this.$integrateData(this.form, res);
this.formInfo.forEach((i) => {
if (i && (i.edit_input === "file" || i.edit_input === "files")) {
res[i._relations.link_with_name]
? (this.file[i.field] =
res[i._relations.link_with_name] instanceof Array
? res[i._relations.link_with_name].map((i) => {
return {
name: i?.name,
url: i?.url,
response: i,
};
})
: [
{
name: res[i._relations.link_with_name]?.name,
url: res[i._relations.link_with_name]?.url,
response: res[i._relations.link_with_name],
},
])
: (this.file[i.field] = []);
}
this.form = Object.assign({}, this.form);
this.originalForm = deepCopy(res);
});
},
submit() {
this.smsForm.content = `调令平台反馈:${ this.$moment().format('YYYY-MM-DD HH:mm') }${ this.row.equipment_id_equipments_id_relation.name },关于${ this.form.content }指令有误,申请${ this.$refs['elEdit_type']?.selectedLabel || '' }`
if (this.type === "add") {
this.form.transfer_id = this.transfer_id;
if (this.form.hasOwnProperty("id")) {
delete this.form.id;
}
}
if (this.type === "editor") {
Object.defineProperty(this.form, "id", {
value: this.id,
enumerable: true,
configurable: true,
writable: true,
});
}
this.form.status = 1;
save(Object.assign(this.form, { table_name: 'feedbacks' })).then(res => {
this.$Message.success({
content: `${this.type === "add" ? "新增" : "编辑"}成功`,
});
this.$emit("refresh");
this.hidden();
if (this.smsForm.mobile && this.smsForm.mobile.length > 0 && this.smsForm.content) {
sendSms(this.smsForm)
}
})
},
async getTelephoneGroups () {
this.telephoneGroups = (await index({
table_name: "groups",
page: 1,
page_size: 999
})).data
}
},
computed: {
title () {
if (this.type === 'add') return '新增'
if (this.type === 'editor') return '编辑'
if (this.type === 'show') return '查看'
}
},
watch: {
formInfo: {
handler: function (newVal) {
this.form = {};
this.rules = {};
this.file = {};
newVal.forEach((i) => {
if (i.field) {
this.form[i.field] = "";
if (
i.validation instanceof Array &&
i.validation.length > 0 &&
!!i.validation.find((i) => i === "required")
) {
this.rules[i.field] = [
{ required: true, message: `请填写${i.name}` },
];
}
if (i.edit_input === "files") {
this.form[i.field] = [];
}
if (i.edit_input === "files" || i.edit_input === "file") {
this.file[i.field] = [];
}
if (i.edit_input === "checkbox") {
this.form[i.field] = [];
}
if (i._relations) {
this.form[i._relations?.link_with_name] = [];
}
}
});
this.columns = newVal.length > 11 ? '2' : '1'
},
//immediate: true,
},
dialogVisible(val) {
if (val) {
document.documentElement.style.setProperty(
"--column-num",
this.columns
);
if (this.type === "editor" || this.type === "show") {
this.$nextTick(() => this.getDetail());
}
} else {
this.id = "";
this.type = "";
this.init();
this.$refs["elForm"].clearValidate();
delete this.form.id;
for (let key in this.file) {
this.file[key] = [];
}
}
},
},
created() {
this.getTelephoneGroups()
resolveFormInfo(5,'form').then(res => this.formInfo = res)
}
};
</script>
<style>
:root {
--column-num: 2;
}
</style>
<style scoped lang="scss">
.uploaded-a {
color: red;
text-decoration: none;
transition: all 0.2s;
}
.uploaded-a:hover {
color: red;
text-decoration: underline;
}
.form-body {
display: grid;
grid-gap: 10px;
grid-template-columns: repeat(var(--column-num), 1fr);
}
::v-deep .el-dialog__footer {
display: flex;
align-items: center;
justify-content: center;
}
</style>

@ -171,7 +171,12 @@
<!-- :form-info="form"-->
<!-- ref="drawer"-->
<!-- ></drawer>-->
<imports
:table-name="customForm.tableName"
:form-info="form"
ref="imports"
@refresh="$refs['xyTable'].getTableData()"
></imports>
<callback ref="callback"></callback>
<adjust :areas="areas" :abilities="abilities" ref="adjust" @refresh="$refs['xyTable'].getTableData()"></adjust>
</div>

@ -1,5 +1,5 @@
<template>
<div style="padding-bottom: 45px;">
<div style="padding-bottom: 45px;" id="mobile-create-dispatch">
<Steps :current="step" size="small" class="steps">
<Step title="点位选择"></Step>
<Step title="调令创建"></Step>
@ -102,18 +102,23 @@
v-show="item._isShow"
:model="item"
label-position="top">
<el-form-item label="闸门数量">
<el-form-item :label="'闸门数量:总'+(item._bengzhashuliang?item._bengzhashuliang:0)+'台'">
<el-input-number v-model="item.kaiqishuliang" :precision="0" :max="Number(item._bengzhashuliang)" :min="0"></el-input-number>
</el-form-item>
<el-form-item label="水泵数量">
<el-form-item :label="'水泵数量:总'+(item._shuibengtaishu?item._shuibengtaishu:0)+'台'">
<el-input-number v-model="item.kaiqishuliang1" :precision="0" :max="Number(item._shuibengtaishu)" :min="0"></el-input-number>
</el-form-item>
<el-form-item label="类别">
<el-radio-group v-model="item.leibie">
<el-radio :label="i.value" v-for="i in abilities">{{ i.key }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="调令类型">
<el-radio-group v-model="item.diaolingleixing">
<el-radio :label="i.value" v-for="i in diaolingleixing">{{ i.key }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="开启时间">
<el-form-item label="开启时间" prop="start_time" required>
<el-time-select v-model="item.start_time"
:picker-options="{ start: '00:00', step: '00:05', end: '23:59' }"
@change="startTimePick(item)"></el-time-select>
@ -125,14 +130,14 @@
:step="0.5"
@change="lastTimePick(item)"></el-input-number>
</el-form-item>
<el-form-item label="结束时间">
<el-form-item label="结束时间" prop="end_time">
<el-time-select v-model="item.end_time"
:picker-options="{ start: '00:00', step: '00:05', end: '23:59', minTime: item.start_time }"></el-time-select>
</el-form-item>
<el-form-item label="调令内容">
<el-input v-model="item.content" type="textarea" :autosize="{ minRows: 2 }"></el-input>
</el-form-item>
<el-form-item label="调令等级">
<el-form-item label="调令等级" prop="level" required>
<el-radio-group v-model="item.level">
<el-radio :label="i.value" v-for="i in [{ label: '一般', value: 1 },{ label: '紧急', value: 2 }]">{{ i.label }}</el-radio>
</el-radio-group>
@ -142,9 +147,17 @@
</div>
</Card>
<el-result v-show="step === 2" icon="success" title="成功提示" :subTitle="subTitle">
<template slot="extra">
<el-button type="primary" size="medium" @click="pickedEquipments = [],step = 0">返回</el-button>
<el-button type="primary" size="medium" @click="$router.push('/mobile/list')"></el-button>
</template>
</el-result>
<div class="btns">
<Button v-show="step === 1" ghost size="default" type="primary" @click="forwardStep"></Button>
<Button size="default" type="primary" @click="nextStep"></Button>
<Button v-show="step === 0" size="default" type="primary" @click="nextStep"></Button>
<Button v-show="step === 1" size="default" type="primary" @click="submit"></Button>
</div>
<transition name="fade">
@ -155,6 +168,7 @@
is-expanded
:model-config="config"
:rows="2"
@input="isShowDatePicker = false"
v-model="date"></DatePicker>
</div>
</transition>
@ -176,6 +190,7 @@ export default {
},
data() {
return {
subTitle: "请根据提示进行操作",
config: {
type: 'string',
mask: 'YYYY-MM-DD'
@ -211,6 +226,7 @@ export default {
}
]
},
abilities: [],
diaolingleixing: [],
loading: false,
@ -349,6 +365,20 @@ export default {
}
},
async getAbility() {
const obj = (await show({ id: 31 }, false))?.select_item;
if (obj && typeof obj === "object") {
let keys = Object.keys(obj);
if (keys.length > 0) {
this.abilities = keys.map((key) => {
return {
key,
value: /^\d*$/.test(obj[key]) ? Number(obj[key]) : obj[key],
};
});
}
}
},
async getArea() {
const obj = (await show({ id: 4 }, false))?.select_item;
if (obj && typeof obj === "object") {
@ -449,6 +479,24 @@ export default {
const submitData = this.form.filter(
(i) => i.start_time || i.end_time || i.content
);
let verify = submitData.length > 0;
submitData.forEach((item) => {
if (!item.start_time || !item.end_time || !item.level) {
verify = false;
}
if (this.diaolingleixing.find(i => i.value === item.diaolingleixing)?.key === "船只过闸调令") {
if (item.start_time) {
verify = true
}
}
});
if (!verify) {
await this.$confirm("请填写完整信息","提示",{
type: "warning",
showCancelButton: false
});
return;
}
let isNeed = 0;
try {
@ -512,10 +560,8 @@ export default {
Promise.all(promiseAll)
.then((res) => {
loadingInstance.close();
this.$message({
type: "success",
message: `成功创建${res.length}条调令`,
});
this.subTitle = `成功创建${res.length}条调令`;
this.step++;
})
.catch((_) => {
loadingInstance.close();
@ -532,6 +578,7 @@ export default {
}
},
created() {
this.getAbility();
this.getArea();
this.getType();
this.getEquipments();
@ -629,3 +676,10 @@ h3 {
}
}
</style>
<style lang="scss">
html:has(#mobile-create-dispatch) {
.el-message-box {
width: 90vw;
}
}
</style>

@ -0,0 +1,558 @@
<template>
<div id="mobile-dispatch-list">
<div class="select">
<div style="display:flex;align-items: center;">
<span style="margin-right: 10px;">是否显示所有调令</span>
<el-switch v-model="temp" @change="isShowAlreadyDistribute"></el-switch>
</div>
<el-date-picker
size="small"
:clearable="false"
v-model="date"
value-format="yyyy-MM-dd"
placeholder="日期选择"
format="yyyy-MM-dd"
></el-date-picker>
<Select clearable v-model="select.filter[2].value" placeholder="请选择类别">
<Option v-for="item in abilities" :value="item.value">{{ item.key }}</Option>
</Select>
<Select clearable v-model="select.filter[1].value" placeholder="请选择范围">
<Option v-for="item in areas" :value="item.value">{{ item.key }}</Option>
</Select>
<Select clearable v-model="select.filter[3].value" placeholder="请选择点位">
<Option v-for="item in equipmentsFormat" :value="item.id">{{ item.name }}</Option>
</Select>
<Input clearable v-model="select.filter[0].value" placeholder="搜索内容"/>
<div>
<Button type="primary" @click="getDispatches"></Button>
<Button type="primary" @click="pickNoDistribute"></Button>
<Button type="primary" @click="distributeTransfers"></Button>
</div>
</div>
<Table
size="small"
ref="listTable"
style="margin-top: 16px;"
border
:loading="loading"
:data="data"
:columns="columns"
stripe
></Table>
<div class="page">
<Page :total="total"
:page-size="select.page_size"
@on-change="e => {
select.page = e;
getDispatches();
}"/>
</div>
<mobileCallback ref="mobileCallback"></mobileCallback>
<adjust :abilities="abilities" :areas="areas" :fullscreen="true" ref="adjust" @refresh="getDispatches"></adjust>
</div>
</template>
<script>
import {destroy, index, save} from "@/api/system/baseForm";
import {getOaToken} from "@/api/other";
import {show} from "@/api/system/customFormField";
import {deepCopy} from "@/utils";
import mobileCallback from "@/views/order/component/mobileCallback.vue";
import adjust from "@/views/order/component/adjust.vue";
export default {
components: {
mobileCallback,
adjust
},
data() {
return {
temp: false,
typeMap: new Map([
[0,'取消'],
[1, "待下发"],
[2, "已下发"],
[3, "确认接收"],
[4, "已通知开启"],
[5, "确认开启"],
[6, "已通知关机"],
[7, "确认关机"]
]),
abilities: [],
areas: [],
equipmentList: [],
total: 0,
data: [],
loading: false,
columns: [
{
type: "expand",
width: 50,
align: "center",
render: (h,{ row, index }) => {
return h('el-descriptions',{
props: {
column: 2,
size: 'mini',
border: true,
direction: "vertical"
}
},[
h('el-descriptions-item',{
props: {
label: "范围",
span: 2
}
},this.areas.find(i => i.value === (row.equipment_id_equipments_id_relation ? row.equipment_id_equipments_id_relation.area : ""))?.key),
h('el-descriptions-item',{
props: {
label: "序号",
span: 2
}
},row.xuhao),
h('el-descriptions-item',{
props: {
label: "状态"
}
},this.typeMap.get(row.status)),
h('el-descriptions-item',{
props: {
label: "类别"
}
},(this.abilities.find(i => i.value === row.leibie))?.key),
h('el-descriptions-item',{
props: {
label: "开启闸门数量"
}
},row.kaiqishuliang ?? 0),
h('el-descriptions-item',{
props: {
label: "开启水泵数量"
}
},row.kaiqishuliang1 ?? 0),
h('el-descriptions-item',{
props: {
label: "持续时间"
}
},(row.start_time && row.end_time) ? (this.$moment(row.end_time).diff(this.$moment(row.start_time),'hours',true).toFixed(2) + '小时') : "-"),
h('el-descriptions-item',{
props: {
label: "开启时间"
}
},this.$moment(row.start_time).format('YYYY-MM-DD HH:mm')),
h('el-descriptions-item',{
props: {
label: "结束时间"
}
}, row.end_time ? this.$moment(row.end_time).format('HH:mm') : "-"),
h('el-descriptions-item',{
props: {
label: "调令等级"
}
},(() => {
let type = new Map([
[1,'一般'],
[2,'紧急']
])
return type.get(row.level);
})()),
h('el-descriptions-item',{
props: {
label: "调令内容",
span: 2
}
},row.content),
h('el-descriptions-item',{
props: {
label: "操作",
span: 2
}
},(() => {
const btnMap = new Map([
['adjust',h(
"Button",
{
style: {
'margin-left': "6px"
},
props: {
type: "primary",
},
on: {
'click': () => {
this.$refs['adjust'].setId(row.id);
this.$refs['adjust'].setType('editor');
this.$refs['adjust'].show();
}
}
},
"调整"
)],
['callback',h(
"Button",
{
style: {
'margin-left': "6px"
},
props: {
type: "primary",
},
on: {
'click': () => {
this.$refs['mobileCallback'].setId(row.id);
this.$refs['mobileCallback'].setRow(row);
this.$refs['mobileCallback'].show();
}
}
},
"反馈"
)],
['delete',h(
"Poptip",
{
props: {
title: "确认要删除吗?",
confirm: true,
transfer: true,
},
on: {
["on-ok"]: (e) => {
destroy({
table_name: 'transfers',
id: row.id
}).then(res => {
this.$message({
type: 'success',
message: '删除成功'
})
this.getDispatches();
})
},
},
},
[
h(
"Button",
{
style: {
'margin-left': "6px"
},
props: {
type: "error",
},
},
"删除"
),
]
)],
['oa',h(
"Button",
{
props: {
type: "primary",
},
on: {
'click': async () => {
if (!this.oaToken) {
this.oaToken = (await getOaToken()).oatoken
}
let jsonInfo = {
'title': row.equipment_id_equipments_id_relation?.name,
'65aa1a59e408c': row.start_time,
'65aa1a7e4109d': row.level,
'65aa1a442705f': row.content
}
let url =
`${process.env.VUE_APP_OA_URL}/admin/flow/create/34?diaoling_oatoken=${this.oaToken}&out_diaoling_id=${row.id}&default_json=${JSON.stringify(jsonInfo)}`
window.open(url, 'diaoling')
}
}
},
"发起流程"
)],
['distribute',h(
"Button",
{
props: {
type: "primary",
},
on: {
'click': () => {
this.$confirm('确认下发?','提示').then(_ => {
this.setTransferStatus(2,row)
})
}
}
},
"下发"
)],
['cancel',h(
"Button",
{
props: {
type: "primary",
ghost: true,
},
on: {
'click': () => {
this.$confirm('确认下发?','提示').then(_ => {
this.setTransferStatus(0,row)
})
}
}
},
"取消"
)]
])
const auths = ['adjust','distribute','cancel','oa','delete','callback'].filter(item => {
if (row.status === 0) {
if (item === 'oa') {
return false
}
}
if ([2,3,4,5,6,7].find(i => i === row.status)) {
if (item === 'delete' || item === 'oa' || item === 'distribute') {
return false
}
}
if ([3,4,5,6,7].find(i => i === row.status)) {
if (item === 'edit') {
return false
}
}
if ([0,1,7].find(i => i === row.status)) {
if (item === 'adjust') {
return false
}
}
if (row.liuchengzhuangtai === 2 || row.liuchengzhuangtai === 3) {
if (item === 'delete' || item === 'edit') {
return false
}
}
if (row.status !== 2) {
if (item === 'cancel') {
return false
}
}
return true
})
return [h('div',{
style: {
'display': 'flex'
}
},auths.map(i => (btnMap.get(i))))]
})())
])
}
},
{
width: 53,
type: "selection"
},
{
title: "点位",
minWidth: 120,
key: "equipment_id",
align: "center",
render: (h, { row, index }) => {
let text = "";
text += row.is_adjust === -1 ? '' : '[调整]'
text += row.equipment_id_equipments_id_relation ? row.equipment_id_equipments_id_relation.name : "";
return h('span',text);
},
},
{
title: "开始时间",
width: 90,
align: 'center',
render: (h,{ row }) => h('span', this.$moment(row.start_time).format('HH:mm'))
},
],
date: this.$moment().format("YYYY-MM-DD"),
select: {
table_name: 'transfers',
page: 1,
page_size: 20,
sort_name: 'equipment_id',
filter: [
{
key: "content",
op: "like",
value: ""
},
{
key: "area",
op: "eq",
value: ""
},
{
key: "leibie",
op: "eq",
value: ""
},
{
key: "equipment_id",
op: "eq",
value: ""
},
{
key: "status",
op: "eq",
value: 1
}
]
},
}
},
methods: {
async getEquipments () {
this.equipmentList = (await index({
table_name: 'equipments',
page: 1,
page_size: 9999
},false))?.data || []
},
async getAbility() {
const obj = (await show({ id: 31 }, false))?.select_item;
if (obj && typeof obj === "object") {
let keys = Object.keys(obj);
if (keys.length > 0) {
this.abilities = keys.map((key) => {
return {
key,
value: /^\d*$/.test(obj[key]) ? Number(obj[key]) : obj[key],
};
});
}
}
},
async getArea() {
const obj = (await show({ id: 4 }, false))?.select_item;
if (obj && typeof obj === "object") {
let keys = Object.keys(obj);
if (keys.length > 0) {
this.areas = keys.map((key) => {
return {
key,
value: /^\d*$/.test(obj[key]) ? Number(obj[key]) : obj[key],
};
});
}
}
},
async distributeTransfers () {
let promiseAll = this.$refs['listTable']?.getSelection().map(i => {
for (let key in i) {
if (/_relation/g.test(key)) {
delete i[key]
}
}
i.status = 2;
return save({
table_name: 'transfers',
...i
})
})
const res = await Promise.all(promiseAll)
await this.getDispatches();
},
async getDispatches () {
try {
this.loading = true;
if (this.select.filter.find(i => i.key === 'start_time')) {
this.select.filter.pop();
}
this.select.filter.push({
key: "start_time",
op: "like",
value: this.date
})
const res = await index(this.select);
this.data = res.data;
this.total = res.total;
this.loading = false;
} catch (e) {
this.loading = false;
}
},
setTransferStatus (status,row) {
let copyRow = deepCopy(row);
copyRow.status = status;
for (let key in copyRow) {
if (/_relation/g.test(key)) {
delete copyRow[key]
}
}
save({
table_name: 'transfers',
...copyRow
}).then(_ => this.getDispatches())
},
pickNoDistribute () {
this.data = this.data.map(i => {
i._checked = i.status === 1
return i
})
},
isShowAlreadyDistribute (e) {
if (e) {
this.select.filter.find(item => item.key === 'status').value = ""
} else {
this.select.filter.find(item => item.key === 'status').value = "1"
}
}
},
computed: {
equipmentsFormat () {
let area = this.select.filter[1].value;
return area ? this.equipmentList.filter(i => i.area === area) : this.equipmentList;
}
},
created() {
this.getEquipments();
this.getArea();
this.getAbility();
this.getDispatches();
}
}
</script>
<style scoped lang="scss">
.select {
& > * {
width: 100%;
margin-top: 6px;
}
}
.page {
display: flex;
justify-content: center;
margin-top: 10px;
}
::v-deep td.ivu-table-expanded-cell {
padding: 20px;
}
</style>
<style lang="scss">
html:has(#mobile-dispatch-list) {
.el-message-box {
width: 90vw;
}
.ivu-modal-body {
max-height: inherit !important;
}
}
</style>
Loading…
Cancel
Save