|
@@ -4,10 +4,12 @@
|
|
|
<section class="list-part-container">
|
|
|
<!-- 搜索区域 -->
|
|
|
<el-form class="list-search-container" :model="queryParams" ref="queryRef" :inline="true">
|
|
|
- <el-form-item class="section-title" label="载具类别" />
|
|
|
+ <el-form-item class="section-title" label="载具类别"/>
|
|
|
<el-form-item>
|
|
|
<!-- <el-button type="success" icon="Refresh" @click="handleQueryCategory">刷新</el-button> -->
|
|
|
- <el-button type="primary" icon="Plus" @click="handleShowCategoryDialog(null)" v-hasPermi="['business:carrier:add']">新增</el-button>
|
|
|
+ <el-button type="primary" icon="Plus" @click="handleShowCategoryDialog(null)"
|
|
|
+ v-hasPermi="['business:carrier:add']">新增
|
|
|
+ </el-button>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
<!-- 列表区 -->
|
|
@@ -27,7 +29,10 @@
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table> -->
|
|
|
- <el-tree ref="categoryTable" v-loading="categoryLoading" :data="carrierCategoryList" :props="{ label: 'name', children: 'children' }" :expand-on-click-node="false" :filter-node-method="filterNode" default-expand-all node-key="id" highlight-current @node-click="handleCurrentCategoryChange">
|
|
|
+ <el-tree ref="categoryTable" v-loading="categoryLoading" :data="carrierCategoryList"
|
|
|
+ :props="{ label: 'name', children: 'children' }" :expand-on-click-node="false"
|
|
|
+ :filter-node-method="filterNode" default-expand-all node-key="id" highlight-current
|
|
|
+ @node-click="handleCurrentCategoryChange">
|
|
|
<template #default="{ node, data }">
|
|
|
<div style="
|
|
|
display: flex;
|
|
@@ -35,13 +40,17 @@
|
|
|
justify-content: space-between;
|
|
|
">
|
|
|
<span>
|
|
|
- <span v-if="data.parentId == 0" style="display: inline-block; width: 20px;">{{ getNodeIndex(data) }}. </span>
|
|
|
+ <span v-if="data.parentId == 0" style="display: inline-block; width: 20px;">{{
|
|
|
+ getNodeIndex(data)
|
|
|
+ }}. </span>
|
|
|
<span>{{ node.label }}</span>
|
|
|
</span>
|
|
|
<span>
|
|
|
- <el-button link type="warning" icon="Edit" @click="handleShowCategoryDialog(data)" v-hasPermi="['business:carrier:edit']">编辑
|
|
|
+ <el-button link type="warning" icon="Edit" @click="handleShowCategoryDialog(data)"
|
|
|
+ v-hasPermi="['business:carrier:edit']">编辑
|
|
|
</el-button>
|
|
|
- <el-button link type="danger" icon="Delete" @click="handleDeleteCategory(data)" v-hasPermi="['business:carrier:remove']">删除
|
|
|
+ <el-button link type="danger" icon="Delete" @click="handleDeleteCategory(data)"
|
|
|
+ v-hasPermi="['business:carrier:remove']">删除
|
|
|
</el-button>
|
|
|
</span>
|
|
|
</div>
|
|
@@ -54,43 +63,49 @@
|
|
|
<!-- 右侧区域 -->
|
|
|
<section class="list-part-container" style="flex: 2">
|
|
|
<el-form class="list-search-container" :model="carrierParams" ref="queryRef" :inline="true">
|
|
|
- <el-form-item class="section-title" label="载具管理" />
|
|
|
+ <el-form-item class="section-title" label="载具管理"/>
|
|
|
<el-form-item label="载具编号:">
|
|
|
- <el-input placeholder="请输入载具编号" :disabled="!carrierFlag" clearable style="width: 180px" v-model.trim="carrierParams.code" @keydown.enter.prevent />
|
|
|
+ <el-input placeholder="请输入载具编号" :disabled="!carrierFlag" clearable style="width: 180px"
|
|
|
+ v-model.trim="carrierParams.code" @keydown.enter.prevent/>
|
|
|
</el-form-item>
|
|
|
<el-form-item>
|
|
|
- <el-button type="info" icon="Search" :disabled="carrierCategoryList.length == 0" @click="handleQueryCarrier">搜索</el-button>
|
|
|
+ <el-button type="info" icon="Search" :disabled="carrierCategoryList.length == 0" @click="handleQueryCarrier">
|
|
|
+ 搜索
|
|
|
+ </el-button>
|
|
|
<!-- <el-button type="success" icon="Refresh" @click="handleRefreshCarrier">刷新</el-button> -->
|
|
|
<!-- <el-button type="primary" icon="Plus" @click="handleShowCarrierDialog(null)" v-hasPermi="['business:carrier:add']">新增</el-button> -->
|
|
|
- <el-button :disabled="selections.length == 0" type="warning" icon="Download" @click="handleBatchDownloadQrCode">批量下载二维码</el-button>
|
|
|
+ <el-button :disabled="selections.length == 0" type="warning" icon="Download"
|
|
|
+ @click="handleBatchDownloadQrCode">批量下载二维码
|
|
|
+ </el-button>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
|
|
|
<!-- 列表区 -->
|
|
|
<div class="el-table-container">
|
|
|
<div class="el-table-inner-container">
|
|
|
- <el-table v-loading="carrierLoading" row-key="id" @selection-change="handleSelectionChange" :data="carrierList" height="100%">
|
|
|
- <el-table-column type="selection" width="40" align="center" :reserve-selection="true" />
|
|
|
- <el-table-column type="index" label="行号" width="50" align="center" />
|
|
|
- <el-table-column prop="code" label="载具编号" width="80" align="center" />
|
|
|
+ <el-table v-loading="carrierLoading" row-key="id" @selection-change="handleSelectionChange"
|
|
|
+ :data="carrierList" height="100%">
|
|
|
+ <el-table-column type="selection" width="40" align="center" :reserve-selection="true"/>
|
|
|
+ <el-table-column type="index" label="行号" width="50" align="center"/>
|
|
|
+ <el-table-column prop="code" label="载具编号" width="80" align="center"/>
|
|
|
<el-table-column label="状态" width="80" prop="isAbandoned" align="center">
|
|
|
<template #default="scope">
|
|
|
{{ scope.row.status }}
|
|
|
- <dict-tag :options="carrier_status" :value="scope.row.isAbandoned" />
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="是否多批" width="80" prop="isAllowMore" align="center">
|
|
|
- <template #default="scope">
|
|
|
- {{ scope.row.status }}
|
|
|
- <dict-tag :options="is_allow_more" :value="scope.row.isAllowMore" />
|
|
|
+ <dict-tag :options="carrier_status" :value="scope.row.isAbandoned"/>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
+ <!-- <el-table-column label="是否多批" width="80" prop="isAllowMore" align="center">-->
|
|
|
+ <!-- <template #default="scope">-->
|
|
|
+ <!-- {{ scope.row.status }}-->
|
|
|
+ <!-- <dict-tag :options="is_allow_more" :value="scope.row.isAllowMore" />-->
|
|
|
+ <!-- </template>-->
|
|
|
+ <!-- </el-table-column>-->
|
|
|
<el-table-column prop="createTime" label="添加日期" width="130" align="center">
|
|
|
<template #default="scope">
|
|
|
{{ proxy.moment(scope.row.createTime).format("YYYY-MM-DD") }}
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="remark" label="备注" align="center" />
|
|
|
+ <el-table-column prop="remark" label="备注" align="center"/>
|
|
|
<!-- <el-table-column prop="abandonmentDate" label="废弃日期" width="120" align="center">
|
|
|
<template #default="scope">
|
|
|
{{
|
|
@@ -107,11 +122,17 @@
|
|
|
</el-table-column> -->
|
|
|
<el-table-column label="操作" width="180" align="center">
|
|
|
<template #default="scope">
|
|
|
- <el-button link type="warning" icon="Edit" @click="handleShowCarrierDialog(scope.row.id)" v-hasPermi="['business:carrier:edit']">
|
|
|
+ <el-button link type="warning" icon="Edit" @click="handleShowCarrierDialog(scope.row.id)"
|
|
|
+ v-hasPermi="['business:carrier:edit']">
|
|
|
编辑
|
|
|
</el-button>
|
|
|
- <el-button v-if="scope.row.isAbandoned === 0" link type="danger" icon="Delete" @click="handleShowAbandonDialog(scope.row.id)" v-hasPermi="['business:carrier:abandonment']">废弃</el-button>
|
|
|
- <el-button v-else link type="success" icon="CircleCheck" @click="handleUnAbandoned(scope.row)" v-hasPermi="['business:carrier:unAbandonment']">取消废弃</el-button>
|
|
|
+ <el-button v-if="scope.row.isAbandoned === 0" link type="danger" icon="Delete"
|
|
|
+ @click="handleShowAbandonDialog(scope.row.id)" v-hasPermi="['business:carrier:abandonment']">
|
|
|
+ 废弃
|
|
|
+ </el-button>
|
|
|
+ <el-button v-else link type="success" icon="CircleCheck" @click="handleUnAbandoned(scope.row)"
|
|
|
+ v-hasPermi="['business:carrier:unAbandonment']">取消废弃
|
|
|
+ </el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
@@ -119,31 +140,33 @@
|
|
|
</div>
|
|
|
|
|
|
<!-- 分页 -->
|
|
|
- <pagination v-show="carrierTotal > 0" :total="carrierTotal" v-model:page="carrierParams.pageNum" v-model:limit="carrierParams.pageSize" @pagination="getCarriers" />
|
|
|
+ <pagination v-show="carrierTotal > 0" :total="carrierTotal" v-model:page="carrierParams.pageNum"
|
|
|
+ v-model:limit="carrierParams.pageSize" @pagination="getCarriers"/>
|
|
|
</section>
|
|
|
|
|
|
<!-- 载具类别表单 -->
|
|
|
- <carrier-category-form ref="carrierCategoryRef" @handleSaveSuccess="handleQueryCategory" />
|
|
|
+ <carrier-category-form ref="carrierCategoryRef" @handleSaveSuccess="handleQueryCategory"/>
|
|
|
|
|
|
<!-- 载具表单 -->
|
|
|
- <carrier-form ref="carrierRef" @handleSaveSuccess="handleRefreshCarrier" />
|
|
|
+ <carrier-form ref="carrierRef" @handleSaveSuccess="handleRefreshCarrier"/>
|
|
|
|
|
|
<!-- 废弃弹窗 -->
|
|
|
- <carrier-abandonment-form ref="carrierAbandonmentRef" @handleSaveSuccess="handleRefreshCarrier" />
|
|
|
+ <carrier-abandonment-form ref="carrierAbandonmentRef" @handleSaveSuccess="handleRefreshCarrier"/>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup name="Process">
|
|
|
-import { listCategory, delCategory, listCarrier, saveCarrierReject, download } from '@/api/business/carrier'
|
|
|
+import {listCategory, delCategory, listCarrier, saveCarrierReject, download} from '@/api/business/carrier'
|
|
|
import carrierForm from './form'
|
|
|
import carrierCategoryForm from './formCategory'
|
|
|
import carrierAbandonmentForm from './formAbandonment'
|
|
|
-import { nextTick } from 'vue'
|
|
|
+import {nextTick} from 'vue'
|
|
|
import JSZip from 'jszip';
|
|
|
-import { saveAs } from 'file-saver';
|
|
|
-const { proxy } = getCurrentInstance()
|
|
|
-const { carrier_status } = proxy.useDict('carrier_status')
|
|
|
-const { is_allow_more } = proxy.useDict('is_allow_more')
|
|
|
+import {saveAs} from 'file-saver';
|
|
|
+
|
|
|
+const {proxy} = getCurrentInstance()
|
|
|
+const {carrier_status} = proxy.useDict('carrier_status')
|
|
|
+const {is_allow_more} = proxy.useDict('is_allow_more')
|
|
|
const webHost = import.meta.env.VITE_APP_PRODUCTION_API
|
|
|
const categoryTable = ref(null)
|
|
|
const carrierCategoryList = ref([])
|
|
@@ -168,7 +191,7 @@ const data = reactive({
|
|
|
}
|
|
|
})
|
|
|
|
|
|
-const { queryParams, carrierParams } = toRefs(data)
|
|
|
+const {queryParams, carrierParams} = toRefs(data)
|
|
|
/** 查询对象 */
|
|
|
|
|
|
/**************************** 载具类别相关事件 ****************************/
|
|
@@ -212,10 +235,12 @@ const handleCurrentCategoryChange = (row) => {
|
|
|
carrierTotal.value = 0
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
function getNodeIndex(data) {
|
|
|
const index = carrierCategoryList.value.findIndex((item) => item.id === data.id)
|
|
|
return index + 1
|
|
|
}
|
|
|
+
|
|
|
function handleShowCategoryDialog(data) {
|
|
|
if (data) {
|
|
|
proxy.$refs.carrierCategoryRef.open(data.id)
|
|
@@ -226,40 +251,41 @@ function handleShowCategoryDialog(data) {
|
|
|
|
|
|
/** 删除按钮操作 */
|
|
|
const handleDeleteCategory = (data) => {
|
|
|
- // 禁用按钮点击
|
|
|
- disableButtons();
|
|
|
- var showErrorMessage = false
|
|
|
+ // 禁用按钮点击
|
|
|
+ disableButtons();
|
|
|
+ var showErrorMessage = false
|
|
|
proxy.$modal
|
|
|
- .confirm('确定删除选中项?')
|
|
|
- .then(() => {
|
|
|
- categoryLoading.value = true
|
|
|
- carrierLoading.value = true
|
|
|
- if (data.children) {
|
|
|
- showErrorMessage = true;
|
|
|
- return Promise.reject(new Error("HasChildrenError"));
|
|
|
- }
|
|
|
- return delCategory(data.id)
|
|
|
- })
|
|
|
- .then(() => {
|
|
|
- if (!showErrorMessage) {
|
|
|
- proxy.$modal.msgSuccess('操作成功!');
|
|
|
- getCategories();
|
|
|
- }
|
|
|
- })
|
|
|
- .catch(() => {
|
|
|
- categoryLoading.value = false
|
|
|
- carrierLoading.value = false
|
|
|
- })
|
|
|
- .finally(() => {
|
|
|
- if (showErrorMessage) {
|
|
|
- proxy.$modal.msgError("该载具类别下有子类别,不能删除");
|
|
|
- }
|
|
|
- categoryLoading.value = false
|
|
|
- carrierLoading.value = false
|
|
|
- // 启用按钮点击
|
|
|
- enableButtons();
|
|
|
- })
|
|
|
+ .confirm('确定删除选中项?')
|
|
|
+ .then(() => {
|
|
|
+ categoryLoading.value = true
|
|
|
+ carrierLoading.value = true
|
|
|
+ if (data.children) {
|
|
|
+ showErrorMessage = true;
|
|
|
+ return Promise.reject(new Error("HasChildrenError"));
|
|
|
+ }
|
|
|
+ return delCategory(data.id)
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ if (!showErrorMessage) {
|
|
|
+ proxy.$modal.msgSuccess('操作成功!');
|
|
|
+ getCategories();
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ categoryLoading.value = false
|
|
|
+ carrierLoading.value = false
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ if (showErrorMessage) {
|
|
|
+ proxy.$modal.msgError("该载具类别下有子类别,不能删除");
|
|
|
+ }
|
|
|
+ categoryLoading.value = false
|
|
|
+ carrierLoading.value = false
|
|
|
+ // 启用按钮点击
|
|
|
+ enableButtons();
|
|
|
+ })
|
|
|
}
|
|
|
+
|
|
|
function disableButtons() {
|
|
|
//禁用按钮同时,禁用载具编号的输入框
|
|
|
carrierFlag.value = false
|
|
@@ -286,7 +312,7 @@ const handleQueryCategory = () => {
|
|
|
|
|
|
const getCarriers = () => {
|
|
|
disableButtons();
|
|
|
- categoryLoading.value = true
|
|
|
+ categoryLoading.value = true
|
|
|
carrierLoading.value = true
|
|
|
carrierParams.value.categoryId = currentCategory.value.id
|
|
|
listCarrier(carrierParams.value).then((res) => {
|
|
@@ -297,6 +323,7 @@ const getCarriers = () => {
|
|
|
carrierTotal.value = res.total
|
|
|
})
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* 列表checkbox列选择 事件
|
|
|
*/
|
|
@@ -304,6 +331,7 @@ function handleSelectionChange(selection) {
|
|
|
selections.value = selection
|
|
|
console.log(selections.value)
|
|
|
}
|
|
|
+
|
|
|
const handleRefreshCarrier = () => {
|
|
|
getCarriers()
|
|
|
}
|
|
@@ -315,28 +343,29 @@ const handleQueryCarrier = () => {
|
|
|
|
|
|
/** 修改按钮操作 */
|
|
|
const handleShowCarrierDialog = (id) => {
|
|
|
- proxy.$refs.carrierRef.open({ categoryId: currentCategory.value.id, id: id })
|
|
|
+ proxy.$refs.carrierRef.open({categoryId: currentCategory.value.id, id: id})
|
|
|
}
|
|
|
|
|
|
const handleShowAbandonDialog = (id) => {
|
|
|
- proxy.$refs.carrierAbandonmentRef.open({ id: id })
|
|
|
+ proxy.$refs.carrierAbandonmentRef.open({id: id})
|
|
|
}
|
|
|
|
|
|
const handleUnAbandoned = (row) => {
|
|
|
proxy.$modal
|
|
|
- .confirm('确定取消废弃选中项?')
|
|
|
- .then(() => {
|
|
|
- var carrierReject = {}
|
|
|
- carrierReject.carrierId = row.id
|
|
|
- carrierReject.isAbandoned = 0
|
|
|
- carrierReject.operaionDate = proxy.moment().format('YYYY-MM-DD')
|
|
|
- return saveCarrierReject(carrierReject)
|
|
|
- })
|
|
|
- .then(() => {
|
|
|
- proxy.$modal.msgSuccess('操作成功!')
|
|
|
- handleRefreshCarrier()
|
|
|
- })
|
|
|
- .catch(() => {})
|
|
|
+ .confirm('确定取消废弃选中项?')
|
|
|
+ .then(() => {
|
|
|
+ var carrierReject = {}
|
|
|
+ carrierReject.carrierId = row.id
|
|
|
+ carrierReject.isAbandoned = 0
|
|
|
+ carrierReject.operaionDate = proxy.moment().format('YYYY-MM-DD')
|
|
|
+ return saveCarrierReject(carrierReject)
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ proxy.$modal.msgSuccess('操作成功!')
|
|
|
+ handleRefreshCarrier()
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
// /** 批量下载二维码 */
|
|
@@ -359,7 +388,7 @@ const handleUnAbandoned = (row) => {
|
|
|
// }
|
|
|
async function handleBatchDownloadQrCode() {
|
|
|
console.log(selections.value);
|
|
|
-
|
|
|
+
|
|
|
const zip = new JSZip();
|
|
|
const zipFilename = '二维码.zip';
|
|
|
|
|
@@ -373,13 +402,14 @@ async function handleBatchDownloadQrCode() {
|
|
|
// 将二维码图片添加到 ZIP 文件中
|
|
|
zip.file(selections.value[i].code + '.png', qrCodeBlob);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 生成 ZIP 文件并提供下载
|
|
|
- zip.generateAsync({ type: 'blob' }).then((content) => {
|
|
|
+ zip.generateAsync({type: 'blob'}).then((content) => {
|
|
|
// 使用 FileSaver.js 将 ZIP 文件保存到本地
|
|
|
saveAs(content, zipFilename);
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
onMounted(() => {
|
|
|
getCategories()
|
|
|
})
|
|
@@ -390,6 +420,7 @@ onMounted(() => {
|
|
|
display: inline-block;
|
|
|
width: 100%;
|
|
|
}
|
|
|
+
|
|
|
:deep(.el-tree-node__content) {
|
|
|
height: 40px;
|
|
|
border-bottom: 1px solid #ebeef5;
|