From 172933f098017bc4c4f57dcda0d490ea12bb13bb Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期二, 24 六月 2025 14:16:51 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev
---
manager/src/api/tag-type.js | 48 ++
manager/src/api/order.js | 4
manager/src/api/tag.js | 47 ++
manager/src/views/tag/tag/index.vue | 403 +++++++++++++++++++++++
manager/src/views/tag/tag-type/index.vue | 311 ++++++++++++++++++
manager/src/views/order/order/orderDetail.vue | 175 ++++++++++
6 files changed, 987 insertions(+), 1 deletions(-)
diff --git a/manager/src/api/order.js b/manager/src/api/order.js
index 4981a96..b46c866 100644
--- a/manager/src/api/order.js
+++ b/manager/src/api/order.js
@@ -130,6 +130,10 @@
export const getLogisticsChecked = () => {
return getRequest(`/other/logistics/getChecked`)
}
+//鏌ヨ鍖呰9鍒楄〃
+export const getPackage = (orderSn) => {
+ return getRequest(`/order/order/getPackage/${orderSn}`);
+}
//鏌ヨ鐗╂祦
export const getTraces = (sn, params) => {
diff --git a/manager/src/api/tag-type.js b/manager/src/api/tag-type.js
new file mode 100644
index 0000000..7776630
--- /dev/null
+++ b/manager/src/api/tag-type.js
@@ -0,0 +1,48 @@
+import service from "@/libs/axios";
+
+// 鑾峰彇鏍囩鍒嗙被鍒楄〃
+export const getTagTypeList = (params) => {
+ return service({
+ url: "/lmk/tag-type/list",
+ method: "GET",
+ params: params
+ })
+}
+
+export const getTagKeyTypeList = () => {
+ return service({
+ url: "/lmk/tag-type/key/list",
+ method: "GET"
+ })
+}
+
+
+
+// 閫氳繃id鍒犻櫎鏍囩鍒嗙被
+export const deleteTagTypeById = (params) => {
+ return service({
+ url: "/lmk/tag-type/" + params,
+ method: "DELETE"
+ })
+}
+
+
+// 淇敼鏍囩鍒嗙被
+export const updateTagType = (params) => {
+ return service({
+ url: "/lmk/tag-type/",
+ method: "PUT",
+ data: params
+ })
+}
+
+// 娣诲姞鏍囩鍒嗙被
+export const saveTagType = (params) => {
+ return service({
+ url: "/lmk/tag-type/",
+ method: "POST",
+ data: params
+ })
+}
+
+
diff --git a/manager/src/api/tag.js b/manager/src/api/tag.js
new file mode 100644
index 0000000..a97d17a
--- /dev/null
+++ b/manager/src/api/tag.js
@@ -0,0 +1,47 @@
+import service from "@/libs/axios";
+
+// 鑾峰彇鏍囩鍒嗛〉
+export const getTags = (data) => {
+ return service({
+ url: "/lmk/tag/page",
+ method: "GET",
+ params: data
+ })
+}
+
+// 鑾峰彇鏍囩鍒楄〃
+export const getTagList = () => {
+ return service({
+ url: "/lmk/tag/list",
+ method: "GET"
+ })
+}
+
+
+// 閫氳繃id鍒犻櫎鏍囩
+export const deleteTagById = (params) => {
+ return service({
+ url: "/lmk/tag/" + params,
+ method: "DELETE"
+ })
+}
+
+
+// 淇敼鏍囩
+export const editTag = (params) => {
+ return service({
+ url: "/lmk/tag/",
+ method: "PUT",
+ data: params
+ })
+}
+
+// 娣诲姞鏍囩
+export const addTag = (params) => {
+ return service({
+ url: "/lmk/tag/",
+ method: "POST",
+ data: params
+ })
+}
+
diff --git a/manager/src/views/order/order/orderDetail.vue b/manager/src/views/order/order/orderDetail.vue
index dbf46b1..0007005 100644
--- a/manager/src/views/order/order/orderDetail.vue
+++ b/manager/src/views/order/order/orderDetail.vue
@@ -7,6 +7,7 @@
<Button v-if="allowOperation.editConsignee" @click="editAddress" type="primary" ghost>淇敼鏀惰揣鍦板潃</Button>
<Button v-if="allowOperation.cancel" @click="orderCancel" type="warning" ghost>璁㈠崟鍙栨秷</Button>
<Button v-if="orderInfo.order.orderStatus === 'UNPAID'" @click="confirmPrice" type="primary">鏀舵</Button>
+ <Button v-if="allowOperation.showLogistics || orderPackage.length > 0" @click="checkLogistics" type="primary">鏌ョ湅鐗╂祦</Button>
<Button @click="orderLog" type="info" ghost>璁㈠崟鏃ュ織</Button>
<Button @click="printOrder" type="primary" ghost style="float:right;"
v-if="$route.query.orderType != 'VIRTUAL'">鎵撳嵃鍙戣揣鍗�</Button>
@@ -310,6 +311,74 @@
<Button type="primary" @click="modifyPriceSubmit">璋冩暣</Button>
</div>
</Modal>
+ <!-- 鏌ヨ鐗╂祦 -->
+ <Modal v-model="logisticsModal" width="40">
+ <p slot="header">
+ <span>鏌ヨ鐗╂祦</span>
+ </p>
+ <div class="layui-layer-wrap">
+ <dl>
+ <dt>璁㈠崟鍙凤細</dt>
+ <dd>
+ <div class="text-box">{{ sn }}</div>
+ </dd>
+ </dl>
+ </div>
+ <div v-if="packageTraceList.length > 0" v-for="(packageItem, packageIndex) in packageTraceList" :key="packageIndex">
+ <div class="layui-layer-wrap">
+ <dl>
+ <dt>鐗╂祦鍏徃锛�</dt>
+ <dd><div class="text-box">{{ packageItem.logisticsName }}</div></dd>
+ </dl>
+ <dl>
+ <dt>蹇�掑崟鍙凤細</dt>
+ <dd><div nctype="ordersSn" class="text-box">{{ packageItem.logisticsNo }}</div></dd>
+ </dl>
+ <div class="div-express-log">
+ <ul class="express-log express-log-name">
+ <li v-for="(item, index) in packageItem.orderPackageItemList" :key="index">
+ <span class="time" style="width: 50%;"><span>鍟嗗搧鍚嶇О锛�</span><span>{{ item.goodsName }}</span></span>
+ <span class="time" style="width: 30%;"><span>鍙戣揣鏃堕棿锛�</span><span>{{ item.logisticsTime }}</span></span>
+ <span class="time" style="width: 20%;"><span>鍙戣揣鏁伴噺锛�</span><span>{{ item.deliverNumber }}</span></span>
+ </li>
+ </ul>
+ </div>
+ <div class="div-express-log">
+ <ul class="express-log" v-if="packageItem.traces && packageItem.traces.traces">
+ <li v-for="(item, index) in packageItem.traces.traces" :key="index">
+ <span class="time">{{ item.AcceptTime || item.acceptTime }}</span>
+ <span class="detail">{{ item.AcceptStation || item.remark }}</span>
+ </li>
+ </ul>
+ <ul class="express-log" v-else><li>鏆傛棤鐗╂祦淇℃伅</li></ul>
+ </div>
+ </div>
+ </div>
+ <div v-if = "packageTraceList.length == 0 && logisticsInfo">
+ <div class="layui-layer-wrap">
+ <dl>
+ <dt>鐗╂祦鍏徃锛�</dt>
+ <dd><div class="text-box">{{ logisticsInfo.shipper }}</div></dd>
+ </dl>
+ <dl>
+ <dt>蹇�掑崟鍙凤細</dt>
+ <dd><div nctype="ordersSn" class="text-box">{{ logisticsInfo.logisticCode }}</div></dd>
+ </dl>
+ <div class="div-express-log">
+ <ul class="express-log" v-if="logisticsInfo && logisticsInfo.traces">
+ <li v-for="(item, index) in logisticsInfo.traces" :key="index">
+ <span class="time">{{ item.AcceptTime }}</span>
+ <span class="detail">{{ item.AcceptStation }}</span>
+ </li>
+ </ul>
+ <ul class="express-log" v-else><li>鏆傛棤鐗╂祦淇℃伅</li></ul>
+ </div>
+ </div>
+ </div>
+ <div slot="footer" style="text-align: right">
+ <Button @click="logisticsModal = false">鍙栨秷</Button>
+ </div>
+ </Modal>
<!-- 璁㈠崟鍙栨秷妯℃�佹 -->
<Modal v-model="orderCancelModal" width="530">
<p slot="header">
@@ -468,6 +537,12 @@
orderLogModal: false, //寮瑰嚭璋冩暣浠锋牸妗�
checkedLogistics: [], //閫変腑鐨勭墿娴佸叕鍙搁泦鍚�
allowOperation: {}, //璁㈠崟鍙墠鍋氶�夐」
+ logisticsModal: false, //寮瑰嚭鏌ヨ鐗╂祦妗�
+ packageTraceList: [],
+ orderPackage: [],
+ logisticsInfo: {
+ shipper: "",
+ }, //鐗╂祦淇℃伅
sn: "", //璁㈠崟缂栧彿
orderInfo: {
order: {
@@ -645,7 +720,39 @@
gotoHomes () {
return false
},
-
+ getOrderPackage() {
+ API_Order.getPackage(this.sn).then(res => {
+ if (res.success) {
+ this.orderPackage = res.result;
+ console.log('this.orderPackage',this.orderPackage);
+ }
+ })
+ },
+ //鏌ヨ鐗╂祦
+ checkLogistics () {
+ this.logisticsModal = true;
+ if (this.orderPackage.length > 0) {
+ this.logisticsList();
+ } else {
+ this.logistics();
+ }
+ },
+ logisticsList () {
+ this.logisticsModal = true;
+ API_Order.getPackage(this.sn).then((res) => {
+ if (res.success && res.result != null) {
+ this.packageTraceList = res.result;
+ }
+ });
+ },
+ logistics () {
+ this.logisticsModal = true;
+ API_Order.getTraces(this.sn).then((res) => {
+ if (res.success && res.result != null) {
+ this.logisticsInfo = res.result;
+ }
+ });
+ },
//纭鏀舵
confirmPrice () {
this.$Modal.confirm({
@@ -805,6 +912,7 @@
mounted () {
this.sn = this.$route.query.sn;
this.getDataList();
+ this.getOrderPackage();
},
};
</script>
@@ -910,7 +1018,72 @@
}
}
}
+.div-express-log {
+ max-height: 300px;
+ border: solid 1px #e7e7e7;
+ background: #fafafa;
+ overflow-y: auto;
+ overflow-x: auto;
+}
+.layui-layer-wrap {
+ dl {
+ border-top: solid 1px #f5f5f5;
+ margin-top: -1px;
+ overflow: hidden;
+ dt {
+ font-size: 14px;
+ line-height: 28px;
+ display: inline-block;
+ padding: 8px 1% 8px 0;
+ color: #999;
+ }
+
+ dd {
+ font-size: 14px;
+ line-height: 28px;
+ display: inline-block;
+ padding: 8px 0 8px 8px;
+ border-left: solid 1px #f5f5f5;
+
+ .text-box {
+ line-height: 40px;
+ color: #333;
+ word-break: break-all;
+ }
+ }
+ }
+}
+.express-log {
+ /*margin: 5px -10px 5px 5px;*/
+ padding: 10px;
+ list-style-type: none;
+
+ .time {
+ width: 30%;
+ display: inline-block;
+ float: left;
+ }
+
+ .detail {
+ width: 60%;
+ margin-left: 30px;
+ display: inline-block;
+ }
+
+ li {
+ line-height: 30px;
+ }
+}
+
+.express-log-name {
+ li {
+ display: flex;
+ span {
+ display: flex;
+ }
+ }
+}
.f14 {
font-size: 14px;
color: #333;
diff --git a/manager/src/views/tag/tag-type/index.vue b/manager/src/views/tag/tag-type/index.vue
new file mode 100644
index 0000000..a97eba3
--- /dev/null
+++ b/manager/src/views/tag/tag-type/index.vue
@@ -0,0 +1,311 @@
+<template>
+ <div>
+ <Card>
+ <div class="operation mb_10">
+ <Button @click="addParent" type="primary" icon="md-add">娣诲姞涓�绾у垎绫�</Button>
+ </div>
+ <tree-table ref="treeTable" size="default" :loading="loading" :data="tableData" :columns="columns"
+ :border="true" :show-index="false" :is-fold="true" :expand-type="false" primary-key="id">
+ <template slot="action" slot-scope="scope">
+ <Button type="info" @click="edit(scope.row)" size="small" style="margin-right: 5px">缂栬緫
+ </Button>
+
+ <Button type="error" @click="remove(scope.row)" size="small" style="margin-right: 5px">鍒犻櫎
+ </Button>
+ <Button v-show="scope.row.level != 1" type="success" @click="addChildren(scope.row)" size="small"
+ style="margin-right: 5px">娣诲姞瀛愬垎绫�
+ </Button>
+ </template>
+ </tree-table>
+ </Card>
+ <Modal :title="modalTitle" v-model="modalVisible" :mask-closable="false" :width="500">
+ <Form ref="formAdd" :model="formAdd" :label-width="100" :rules="formValidate">
+ <div v-if="showParent">
+ <FormItem label="涓婄骇鍒嗙被" prop="parentId">
+ {{ parentTitle }}
+ <Input v-model="formAdd.parentId" clearable style="width: 100%; display: none" />
+ </FormItem>
+ </div>
+ <FormItem label="鍒嗙被鍚嶇О" prop="tagTypeName">
+ <Input v-model="formAdd.tagTypeName" clearable style="width: 100%" />
+ </FormItem>
+ <FormItem label="鍒嗙被鏍囪瘑" prop="typeKey">
+
+ <Select v-model="formAdd.typeKey" :disabled="formAdd.parentId!==0" placeholder="璇烽�夋嫨鍒嗙被鏍囪瘑" filterable :popper-append-to-body="false"
+ popper-class="spec-values-popper" style="width: 100%; text-align: left; margin-right: 10px">
+ <Option v-for="item in typeKeyList" :value="item.value" :label="item.value" :key="item.value">
+ </Option>
+ </Select>
+ </FormItem>
+ <FormItem label="鎺掑簭鍊�" prop="sortNum">
+ <InputNumber v-model="formAdd.sortNum"></InputNumber>
+ </FormItem>
+ </Form>
+ <div slot="footer">
+ <Button type="text" @click="modalVisible = false">鍙栨秷</Button>
+ <Button type="primary" :loading="submitLoading" @click="Submit">鎻愪氦</Button>
+ </div>
+ </Modal>
+ </div>
+</template>
+<script>
+import {
+ saveTagType,
+ getTagTypeList ,
+ deleteTagTypeById,
+ updateTagType,getTagKeyTypeList
+} from "@/api/tag-type";
+import TreeTable from "@/components/tree-table/Table/Table";
+import uploadPicInput from "@/components/lili/upload-pic-input";
+import { regular } from "@/utils";
+export default {
+ name: "lili-components",
+ components: {
+ TreeTable,
+ uploadPicInput,
+ },
+ data() {
+ return {
+ submitLoading: false,
+ loading: false, // 鍔犺浇鐘舵��
+ expandLevel: 1, // 灞曞紑鐨勫眰绾�
+ modalType: 0, // 娣诲姞鎴栫紪杈戞爣璇�
+ modalVisible: false, // 娣诲姞鎴栫紪杈戞樉绀�
+ modalTitle: "", // 娣诲姞鎴栫紪杈戞爣棰�
+ showParent: false, // 鏄惁灞曠ず涓婄骇鑿滃崟
+ parentTitle: "", // 鐖剁骇鑿滃崟鍚嶇О
+ formAdd: {
+ // 娣诲姞鎴栫紪杈戣〃鍗曞璞″垵濮嬪寲鏁版嵁
+ parentId: "",
+ sortNum: 1,
+ level: 0,
+ tagTypeName: "",
+ typeKey:''
+ },
+ // 琛ㄥ崟楠岃瘉瑙勫垯
+ formValidate: {
+ tagTypeName: [regular.REQUIRED],
+ typeKey: [regular.REQUIRED],
+ sortNum: [regular.REQUIRED, regular.INTEGER],
+ },
+ columns: [
+ {
+ title: "鍒嗙被鍚嶇О",
+ key: "tagTypeName",
+ witt: "100px",
+ },
+ {
+ title: "鍒嗙被鏍囪瘑",
+ key: "typeKey",
+ witt: "100px",
+ },
+ {
+ title: "鎺掑簭",
+ key: "sortNum",
+ width: "100px",
+ },
+ {
+ title: "鎿嶄綔",
+ key: "action",
+ align: "center",
+ headerAlign: "center",
+ width: "400px",
+ type: "template",
+ template: "action",
+ },
+ ],
+ typeKeyList: [],
+ tableData: [], // 琛ㄦ牸鏁版嵁
+ };
+ },
+ methods: {
+ // 鍒濆鍖栨暟鎹�
+ init() {
+ this.getAllList();
+ this.getKeyTypeList();
+ },
+ getKeyTypeList() {
+ getTagKeyTypeList().then((res) => {
+ this.typeKeyList = res.data
+ })
+ },
+ // 娣诲姞瀛愬垎绫�
+ addChildren(v) {
+ this.modalType = 0;
+ this.modalTitle = "娣诲姞瀛愬垎绫�";
+ this.formAdd.tagTypeName = "";
+ this.parentTitle = v.tagTypeName;
+ this.formAdd.typeKey = v.typeKey;
+ this.typeKeyEdit = false
+ this.formAdd.level = eval(v.level + "+1");
+ this.showParent = true;
+ delete this.formAdd.id;
+ this.formAdd.parentId = v.id;
+ this.modalVisible = true;
+ },
+ // 缂栬緫鍒嗙被
+ edit(v) {
+ this.modalType = 1;
+ this.modalTitle = "缂栬緫";
+ this.formAdd.id = v.id;
+ this.formAdd.tagTypeName = v.tagTypeName;
+ this.formAdd.level = v.level;
+ this.formAdd.parentId = v.parentId;
+ this.formAdd.sortNum = v.sortNum;
+ this.showParent = false;
+ this.modalVisible = true;
+ },
+ // 娣诲姞涓�绾у垎绫�
+ addParent() {
+ this.modalType = 0;
+ this.modalTitle = "娣诲姞涓�绾у垎绫�";
+ this.parentTitle = "椤剁骇鍒嗙被";
+ this.showParent = true;
+ this.$refs.formAdd.resetFields();
+ delete this.formAdd.id;
+ this.formAdd.parentId = 0;
+ this.modalVisible = true;
+ },
+ // 鎻愪氦
+ Submit() {
+ this.$refs.formAdd.validate((valid) => {
+ if (valid) {
+ this.submitLoading = true;
+ if (this.modalType === 0) {
+ // 娣诲姞 閬垮厤缂栬緫鍚庝紶鍏d绛夋暟鎹� 璁板緱鍒犻櫎
+ delete this.formAdd.id;
+ saveTagType(this.formAdd).then((res) => {
+ this.submitLoading = false;
+ if (res.success) {
+ this.$Message.success("娣诲姞鎴愬姛");
+
+ this.formAdd = {
+ // 娣诲姞鎴栫紪杈戣〃鍗曞璞″垵濮嬪寲鏁版嵁
+ parentId: "",
+ sortNum: 1,
+ level: 0,
+ tagTypeName: "",
+ };
+ } else {
+ // this.$Message.error(res.message);
+ }
+ this.getAllList();
+ this.modalVisible = false;
+ });
+ } else {
+ // 缂栬緫
+ updateTagType(this.formAdd, this.formAdd.id).then((res) => {
+ this.submitLoading = false;
+ if (res.success) {
+ this.$Message.success("淇敼鎴愬姛");
+ } else {
+ // this.$Message.error(res.message);
+ }
+ this.getAllList();
+ this.modalVisible = false;
+ this.$refs.formAdd.resetFields();
+ });
+ }
+ }
+ });
+ },
+ // 鍒犻櫎鍒嗙被
+ remove(v) {
+ this.$Modal.confirm({
+ title: "纭鍒犻櫎",
+ content: "鎮ㄧ‘璁よ鍒犻櫎 " + v.tagTypeName + " ?",
+ loading: true,
+ onOk: () => {
+ // 鍒犻櫎
+ deleteTagTypeById(v.id).then((res) => {
+ this.$Modal.remove();
+ if (res.code===200) {
+ this.$Message.success("鎿嶄綔鎴愬姛");
+ this.getAllList();
+ }
+ });
+ },
+ });
+ },
+ // 鑾峰彇鍒嗙被鏁版嵁
+ getAllList(newval) {
+ this.loading = true;
+ getTagTypeList().then((res) => {
+ this.loading = false;
+ if (res.code===200) {
+ // 浠呭睍寮�鎸囧畾绾ф暟 榛樿鍚庡彴宸插睍寮�鎵�鏈�
+ let expandLevel = this.expandLevel;
+ res.data.forEach(function (e) {
+ if (expandLevel == 1) {
+ if (e.level == 0) {
+ e.expand = false;
+ }
+ if (e.children && e.children.length > 0) {
+ e.children.forEach(function (c) {
+ if (c.level == 1) {
+ c.expand = false;
+ }
+ if (c.children && c.children.length > 0) {
+ c.children.forEach(function (b) {
+ if (b.level == 2) {
+ b.expand = false;
+ }
+ });
+ }
+ });
+ }
+ } else if (expandLevel == 2) {
+ if (e.level == 0) {
+ e.expand = true;
+ }
+ if (e.children && e.children.length > 0) {
+ e.children.forEach(function (c) {
+ if (c.level == 1) {
+ c.expand = false;
+ }
+ if (c.children && c.children.length > 0) {
+ c.children.forEach(function (b) {
+ if (b.level == 2) {
+ b.expand = false;
+ }
+ });
+ }
+ });
+ }
+ } else if (expandLevel == 3) {
+ if (e.level == 0) {
+ e.expand = true;
+ }
+ if (e.children && e.children.length > 0) {
+ e.children.forEach(function (c) {
+ if (c.level == 1) {
+ c.expand = true;
+ }
+ if (c.children && c.children.length > 0) {
+ c.children.forEach(function (b) {
+ if (b.level == 2) {
+ b.expand = false;
+ }
+ });
+ }
+ });
+ }
+ }
+ });
+ this.tableData = res.data;
+ }
+ });
+ },
+ },
+ mounted() {
+ this.init();
+ },
+};
+</script>
+<style lang="scss" scoped>
+.article {
+ font-size: 16px;
+ font-weight: 400;
+ margin: 12px 0;
+}
+</style>
diff --git a/manager/src/views/tag/tag/index.vue b/manager/src/views/tag/tag/index.vue
new file mode 100644
index 0000000..51c9c9d
--- /dev/null
+++ b/manager/src/views/tag/tag/index.vue
@@ -0,0 +1,403 @@
+<template>
+ <div class="wrapper">
+ <Row>
+ <Col span="4">
+ <Card style="height: 100%;" class="article-category mr_10">
+ <Tree :data="treeData" @on-select-change="handleCateChange"></Tree>
+ </Card>
+ </Col>
+ <Col span="20">
+ <Card class="article-detail">
+ <Row @keydown.enter.native="handleSearch">
+ <Form ref="searchForm" :model="searchForm" inline :label-width="70" style="width: 100%" class="search-form">
+ <Form-item label="鏍囩鍚嶇О" prop="tagName">
+ <Input type="text" v-model="searchForm.tagName" placeholder="璇疯緭鍏ユ爣绛惧悕绉�" clearable style="width: 200px" />
+ </Form-item>
+ <Button @click="handleSearch" type="primary" icon="ios-search" class="search-btn">鎼滅储</Button>
+ </Form>
+ </Row>
+ <Row class="operation padding-row">
+ <Button @click="add" v-if="!selected" type="primary">娣诲姞</Button>
+ </Row>
+ <Table :loading="loading" border :columns="columns" :data="data" style="height: calc(100vh - 328px);"
+ ref="table">
+ <!-- 椤甸潰灞曠ず -->
+ <template slot="openStatusSlot" slot-scope="scope">
+ <div></div>
+ <i-switch size="large" v-model="scope.row.openStatus" @on-change="changeSwitch(scope.row)">
+ <span slot="open">灞曠ず</span>
+ <span slot="close">闅愯棌</span>
+ </i-switch>
+ </template>
+ </Table>
+ <Row type="flex" justify="end" class="mt_10">
+ <Page :current="searchForm.pageNumber" :total="total" :page-size="searchForm.pageSize" @on-change="changePage"
+ @on-page-size-change="changePageSize" :page-size-opts="[10, 20, 50]" size="small" show-total show-elevator>
+ </Page>
+ </Row>
+ </Card>
+ </Col>
+ </Row>
+ <template v-if="!selected">
+ <Modal :tagName="modalTitle" v-model="modalVisible" :mask-closable="false" :width="1100">
+ <Form ref="form" :model="form" :label-width="100">
+ <FormItem label="鏍囩鍚嶇О" prop="tagName">
+ <Input v-model="form.tagName" clearable style="width: 40%" />
+ </FormItem>
+ <FormItem label="鏍囩鍒嗙被" prop="tagTypeId">
+ <Select v-model="treeValue" placeholder="璇烽�夋嫨" clearable style="width: 180px">
+ <Option v-if="treeValue" :value="treeValue" style="display: none">{{ treeValue }}
+ </Option>
+ <Tree :data="treeDataDefault" @on-select-change="handleCheckChange"></Tree>
+ </Select>
+ </FormItem>
+ <FormItem label="鎺掑簭" prop="sortNum">
+ <Input type="number" v-model="form.sortNum" clearable style="width: 10%" />
+ </FormItem>
+ </Form>
+ <div slot="footer">
+ <Button type="text" @click="modalVisible = false">鍙栨秷</Button>
+ <Button type="primary" :loading="submitLoading" @click="handleSubmit">鎻愪氦</Button>
+ </div>
+ </Modal>
+ </template>
+ </div>
+</template>
+
+<script>
+import { getTagTypeList } from "@/api/tag-type";
+import { getTags, deleteTagById, editTag, addTag } from "@/api/tag";
+import tinymec from "@/components/editor/index.vue";
+export default {
+ components: {
+ tinymec: tinymec,
+ },
+ props: {
+ selected: {
+ type: Boolean,
+ default: false,
+ },
+ },
+ data() {
+ return {
+ selectedIndex: 99999, // 宸查�変笅鏍�
+ loading: true, // 琛ㄥ崟鍔犺浇鐘舵��
+ modalType: 0, // 娣诲姞鎴栫紪杈戞爣璇�
+ modalVisible: false, // 娣诲姞鎴栫紪杈戞樉绀�
+ modalTitle: "", // 娣诲姞鎴栫紪杈戞爣棰�
+ treeDataDefault: [],
+ searchForm: {
+ // 鎼滅储妗嗗垵濮嬪寲瀵硅薄
+ pageNumber: 1, // 褰撳墠椤垫暟
+ pageSize: 10, // 椤甸潰澶у皬
+ sortNum: "createTime", // 榛樿鎺掑簭瀛楁
+ order: "desc", // 榛樿鎺掑簭鏂瑰紡
+ tagTypeId: "",
+ },
+ searchTreeValue: "", // 鍒囨崲
+ form: {
+ // 娣诲姞鎴栫紪杈戣〃鍗曞璞″垵濮嬪寲鏁版嵁
+ tagName: "",
+ tagTypeId: "",
+ sortNum: 1,
+ id: "",
+ },
+ list: [], // 鍒楄〃
+ treeValue: "", // 閫夋嫨鐨勫垎绫�
+ //鏍戠粨鏋�
+ treeData: [],
+ submitLoading: false, // 娣诲姞鎴栫紪杈戞彁浜ょ姸鎬�
+ columns: [
+ // 琛ㄥご
+ {
+ title: "鍒嗙被鍚嶇О",
+ key: "tagTypeName",
+ width: 150,
+ },
+ {
+ title: "鏍囩鍚嶇О",
+ key: "tagName",
+ minWidth: 200,
+ tooltip: true,
+ },
+ {
+ title: "鎺掑簭",
+ key: "sortNum",
+ width: 100,
+ },
+ {
+ title: "鎿嶄綔",
+ key: "action",
+ align: "center",
+
+ width: 230,
+ render: (h, params) => {
+ return h("div", [
+ h(
+ "Button",
+ {
+ props: {
+ size: "small",
+ type:
+ this.selectedIndex == params.index
+ ? "primary"
+ : "default",
+ },
+ style: {
+ marginRight: "5px",
+ display: this.selected ? "" : "none",
+ },
+ on: {
+ click: () => {
+ this.selectedIndex = params.index;
+ this.$emit("callbacked", params.row);
+ },
+ },
+ },
+ this.selectedIndex == params.index ? "宸查��" : "閫夋嫨"
+ ),
+ h(
+ "Button",
+ {
+ props: {
+ size: "small",
+ type: "info",
+ },
+ style: {
+ marginRight: "5px",
+ },
+ on: {
+ click: () => {
+ this.edit(params.row);
+ },
+ },
+ },
+ "缂栬緫"
+ ),
+ h(
+ "Button",
+ {
+ props: {
+ type: "error",
+ size: "small",
+ },
+ on: {
+ click: () => {
+ this.remove(params.row);
+ },
+ },
+ },
+ "鍒犻櫎"
+ ),
+ ]);
+ },
+ },
+ ],
+ data: [], // 琛ㄥ崟鏁版嵁
+ total: 0, // 琛ㄥ崟鏁版嵁鎬绘暟
+ };
+ },
+ watch: {
+ "searchForm.tagTypeId": {
+ handler() {
+ this.handleSearch();
+ },
+ deep: true,
+ },
+ "searchForm.tagName": {
+ handler() {
+ this.handleSearch();
+ },
+ deep: true,
+ },
+ },
+ methods: {
+ // 鍒濆鍖栨暟鎹�
+ init() {
+ this.getDataList();
+ this.getAllList(0);
+ },
+ // 閫夋嫨鍒嗙被鍥炶皟
+ handleCateChange(data) {
+ let { value, title } = data[0];
+ this.list.push({
+ value,
+ title,
+ });
+ this.searchForm.tagTypeId = value;
+ this.searchTreeValue = title;
+ this.getDataList()
+ },
+ // 鏍囩鍒嗙被鐨勯�夋嫨浜嬩欢
+ handleCheckChange(data) {
+ let value = "";
+ let title = "";
+ this.list = [];
+ data.forEach((item, index) => {
+ value += `${item.value},`;
+ title += `${item.title},`;
+ });
+ value = value.substring(0, value.length - 1);
+ title = title.substring(0, title.length - 1);
+ this.list.push({
+ value,
+ title,
+ });
+ this.form.tagTypeId = value;
+ this.treeValue = title;
+ },
+ // 鏀瑰彉椤垫暟
+ changePage(v) {
+ this.searchForm.pageNumber = v;
+ this.getDataList();
+ },
+ // 鏀瑰彉椤电爜
+ changePageSize(v) {
+ this.selected.pageNumber = 1;
+ this.searchForm.pageSize = v;
+ this.getDataList();
+ },
+ // 鎼滅储鍒楄〃
+ handleSearch() {
+ this.searchForm.pageNumber = 1;
+ this.searchForm.pageSize = 10;
+ this.getDataList();
+ },
+ // 鑾峰彇鍏ㄩ儴鏍囩鍒嗙被
+ getAllList(parent_id) {
+ this.loading = true;
+ getTagTypeList(parent_id).then((res) => {
+ this.loading = false;
+ if (res.code == 200) {
+ this.treeData = this.getTree(res.data);
+ this.treeDataDefault = this.getTree(res.data);
+ this.treeData.unshift({
+ title: "鍏ㄩ儴",
+ level: 0,
+ children: [],
+ id: "0",
+ tagTypeId: 0,
+ });
+ }
+ });
+ },
+ // 鏍囩鍒嗙被鏍煎紡鍖栨柟娉�
+ getTree(tree = []) {
+ let arr = [];
+ if (!!tree && tree.length !== 0) {
+ tree.forEach((item) => {
+ let obj = {};
+ obj.title = item.tagTypeName;
+ obj.value = item.id;
+ obj.attr = item.tagTypeName; // 鍏朵粬浣犳兂瑕佹坊鍔犵殑灞炴��
+ obj.expand = false;
+ obj.selected = false;
+ obj.children = this.getTree(item.children); // 閫掑綊璋冪敤
+ arr.push(obj);
+ });
+ }
+ return arr;
+ },
+ // 鑾峰彇鏍囩鍒楄〃
+ getDataList(val) {
+ if (val) this.form = {};
+ this.loading = true;
+ getTags(this.searchForm).then((res) => {
+ this.loading = false;
+ if (res.code === 200) {
+ this.total = res.total;
+ //涓轰簡鍦ㄦ槸鍚﹀睍绀轰竴鍒楀睍绀哄紑鍏� 闇�瑕佹敼涓�涓嬫暟鎹被鍨嬶紝鏈�缁堟彁浜ゅ啀娆℃洿鏀�
+ this.data = [];
+ if (res.data.length > 0) {
+ this.data = res.data;
+ }
+ }
+ });
+ this.total = this.data?.length;
+ this.loading = false;
+ },
+ // 娣诲姞鏍囩
+ handleSubmit() {
+ this.$refs.form.validate((valid) => {
+ if (valid) {
+ this.submitLoading = true;
+ if (this.modalType === 0) {
+ // 娣诲姞 閬垮厤缂栬緫鍚庝紶鍏d绛夋暟鎹� 璁板緱鍒犻櫎
+ delete this.form.id;
+ addTag(this.form).then((res) => {
+ this.submitLoading = false;
+ if (res.code === 200) {
+ this.$Message.success("鎿嶄綔鎴愬姛");
+ this.getDataList();
+ this.modalVisible = false;
+ }
+ });
+ } else {
+ // 缂栬緫
+ editTag(this.form).then((res) => {
+ this.submitLoading = false;
+ if (res.code === 200) {
+ this.$Message.success("鎿嶄綔鎴愬姛");
+ this.getDataList();
+ this.modalVisible = false;
+ }
+ });
+ }
+ }
+ });
+ },
+ // 娣诲姞鏍囩modal
+ add() {
+ this.modalType = 0;
+ this.modalTitle = "娣诲姞鏍囩";
+ this.treeValue = "";
+
+ this.form = {
+ sortNum: 1,
+ tagName: "",
+ };
+ this.$refs.form.resetFields();
+ delete this.form.id;
+ this.modalVisible = true;
+ },
+ // 缂栬緫鏍囩modal
+ edit(data) {
+ this.modalType = 1;
+ this.modalTitle = "缂栬緫鏍囩";
+ this.treeValue = "";
+ this.form = {
+ tagName: "",
+ };
+ this.$refs.form.resetFields();
+
+ this.modalVisible = true;
+ this.form.tagTypeId = data.tagTypeId;
+ this.treeValue = data.tagTypeName;
+ this.form.id = data.id;
+ this.form.tagName = data.tagName;
+ this.form.sortNum = data.sortNum;
+ },
+ // 鍒犻櫎鏍囩
+ remove(v) {
+ this.$Modal.confirm({
+ tagName: "纭鍒犻櫎",
+ content: "鎮ㄧ‘璁よ鍒犻櫎涔�?",
+ loading: true,
+ onOk: () => {
+ // 鍒犻櫎
+ deleteTagById(v.id).then((res) => {
+ this.$Modal.remove();
+ if (res.code === 200) {
+ this.$Message.success("鎿嶄綔鎴愬姛");
+ this.getDataList();
+ }
+ });
+ },
+ });
+ },
+ },
+ mounted() {
+ this.init();
+ },
+};
+</script>
--
Gitblit v1.8.0