3
0
Fork 0

feat(feedback): 移除意见反馈, 产品发布及编辑添加仓储编号字段

This commit is contained in:
woody 2025-06-08 17:00:16 +08:00
parent 7b833d0dae
commit 29a6915771
6 changed files with 719 additions and 1303 deletions

View File

@ -457,32 +457,7 @@ export function noticeSaveAdmin(data) {
data data
}) })
} }
// 意见反馈列表
export function feedbackList(data) {
return request({
url: '/system/manage/feedback/list?pageNum=' + data.pageNum + '&pageSize=' + data.pageSize,
method: 'post',
data
})
}
// 意见反馈查看详情
export function delFeedShow(params) {
return request({
url: '/system/manage/feedback/show',
method: 'get',
params
})
}
// 意见反馈删除
export function delFeed(params) {
return request({
url: '/system/manage/feedback/delete',
method: 'get',
params
})
}
// 公告删除 // 公告删除
export function noticeDelete(params) { export function noticeDelete(params) {
return request({ return request({
@ -593,14 +568,6 @@ export function getNoticeBusinessType(params) {
}) })
} }
// 意见反馈
export function saveFeedback(data) {
return request({
url: '/system/manage/feedback/save',
method: 'post',
data
})
}
// 公告上移 // 公告上移
export function upMove(params) { export function upMove(params) {
return request({ return request({

View File

@ -1224,12 +1224,6 @@ export const constantRoutes = [
meta: { title: '后台公告' }, meta: { title: '后台公告' },
hidden: true hidden: true
}, },
{
path: 'feedback',
name: 'Feedback',
component: () => import('@/views/announcement/feedback/index'),
meta: { title: '意见反馈' }
},
{ {
path: 'noticeList/details', path: 'noticeList/details',
name: 'NoticeDetails', name: 'NoticeDetails',
@ -1245,13 +1239,6 @@ export const constantRoutes = [
hidden: true hidden: true
}, },
{
path: 'feedback/detail',
name: 'feedbackDetail',
component: () => import('@/views/announcement/feedback/detail'),
meta: { title: '意见反馈' },
hidden: true
},
// { // {
// path: 'releaseAnnouncement', // path: 'releaseAnnouncement',
// name: 'ReleaseAnnouncement', // name: 'ReleaseAnnouncement',

View File

@ -1,163 +0,0 @@
<!--
* @Descripttion:
* @version:
* @Author: kBank
* @Date: 2023-02-23 15:59:57
-->
<template>
<div class="page">
<div class="main">
<el-form
:model="ruleForm"
:rules="rules"
ref="ruleForm"
label-width="100px"
class="demo-ruleForm"
>
<el-row>
<el-col :span="6">
<el-form-item :label="'类型'" prop="name">
<el-input v-model="ruleForm.typeVal" :disabled="true"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="22">
<el-form-item :label="'内容'">
<editor
ref="sptwEditor"
:readOnly="true"
v-model="ruleForm.idea"
:min-height="196"
:uploadUrl="uploadImgUrl"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
v-for="(item, index) in ruleForm.feedbackReplyList"
:key="index"
>
<el-col :span="22">
<el-form-item :label="'回复意见'">
<editor
:readOnly="true"
v-model="item.replyContent"
:min-height="196"
:uploadUrl="uploadImgUrl"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="22">
<el-form-item :label="'回复意见'">
<editor
v-model="replyContent"
:min-height="196"
:uploadUrl="uploadImgUrl"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="footer">
<el-button size="small" @click="goBack" class="thebtn2"> {{ '取消' }}</el-button>
<el-button size="small" @click="saveData" class="thebtn1" v-has-buttons="['feedbackConfirm']"> {{ '确认' }}</el-button>
</div>
</div>
</template>
<script>
import Editor from "@/components/Editor";
import * as api from "@/api/notice.js";
export default {
components: {
Editor,
},
data() {
return {
uploadImgUrl: process.env.VUE_APP_BASE_API + "/system/upload",
ruleForm: {},
rules: {},
typeList: [],
iffind: "",
replyContent: "",
};
},
mounted() {
this.pkId = this.$route.query.pkId || "";
this.iffind = this.$route.query.index || "";
this.getData();
},
methods: {
getData() {
api.delFeedShow({ pkId: this.pkId }).then((res) => {
this.ruleForm = res.data;
});
},
goBack() {
this.$router.go(-1);
},
saveData() {
if (this.iffind == 2) {
//
api
.saveFeedback({
pkFeedbackId: this.pkId,
replyContent: this.replyContent,
})
.then((res) => {
if (res.code == 200) {
this.$message({
type: "success",
message: res.msg,
});
this.$router.go(-1);
}
});
} else {
this.$router.go(-1);
}
},
},
};
</script>
<style lang="scss" scoped>
.page {
padding: 20px;
background: #f9f9f9;
font-size: 14px;
.main {
background: #ffffff;
border-radius: 8px;
box-shadow: 0px 2px 20px 0px rgba(238, 238, 238, 0.5);
padding: 20px 10px;
}
::v-deep .el-select {
width: 100%;
}
}
.footer {
height: 68px;
background: #ffffff;
box-shadow: 0px -3px 20px 0px rgba(204, 204, 204, 0.5);
// margin: 0 20px;
display: flex;
justify-content: center;
align-items: center;
.thebtn1 {
background: #3181e5;
color: #ffffff;
padding: 9px 45px;
}
.thebtn2 {
background: #cccccc;
color: #ffffff;
padding: 9px 45px;
}
}
</style>

View File

@ -1,496 +0,0 @@
<template>
<div class="page">
<topBar
v-if="topList.length > 0"
:topList="topList"
:moren="moren"
></topBar>
<div class="thetopbox">
<el-form ref="select" :model="select" label-width="80px">
<el-row>
<el-col :span="4">
<el-form-item :label="'会员编号'">
<el-input clearable v-model="select.memberCode"></el-input>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item :label="'会员姓名'">
<el-input clearable v-model="select.memberName"></el-input>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item :label="'类型'">
<el-select
clearable
:placeholder="'请选择'"
v-model="select.type"
>
<el-option
v-for="item in webList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item :label="'隶属体系'">
<el-select v-model="queryParams.pkVertex" clearable placeholder="">
<el-option
v-for="item in vertexList"
:key="item.value"
:label="item.vertexName"
:value="item.pkId"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="'填写日期'">
<el-date-picker
v-model="creationTime"
type="daterange"
@change="changeTime"
:range-separator="'至'"
:start-placeholder="'开始日期'"
:end-placeholder="'结束日期'"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item :label="'隶属团队'">
<el-select v-model="queryParams.pkTeamCode" clearable placeholder="">
<el-option
v-for="item in memberteamList"
:key="item.value"
:label="item.teamName"
:value="item.pkId"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4" style="margin-left: 20px;">
<el-button class="searchbtn" @click="getDataList">
{{ '搜索' }}</el-button
>
<el-button @click="reset"> {{ '重置' }}</el-button>
</el-col>
</el-row>
</el-form>
</div>
<div class="maintop">
<div class="mainbtn">
<el-button
size="small"
class="thebtn2"
@click="handleExport"
v-has-buttons="['feedbackExport']"
>
{{ '导出' }}</el-button
>
</div>
</div>
<div class="main">
<div class="maintable">
<el-table
:data="tableData"
v-loading="loading"
style="width: 100%"
height="680px"
:header-cell-style="{ background: '#EEEEEE' }"
:row-class-name="tableRowClassName"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55"> </el-table-column>
<el-table-column align="center" type="index" :label="'序号'">
</el-table-column>
<el-table-column
align="center"
prop="memberCode"
:label="'会员编号'"
>
</el-table-column>
<el-table-column
align="center"
prop="memberName"
:label="'会员姓名'"
>
</el-table-column>
<el-table-column
align="center"
prop="teamName"
:label="'隶属团队'"
>
</el-table-column>
<el-table-column
align="center"
prop="vertexName"
:label="'隶属体系'"
>
</el-table-column>
<el-table-column align="center" prop="typeVal" :label="'类型'">
</el-table-column>
<el-table-column align="center" prop="idea" :label="'个人意见'">
</el-table-column>
<el-table-column
align="center"
prop="statusVal"
:label="'反馈状态'"
>
</el-table-column>
<el-table-column
align="center"
prop="creationTime"
:label="'填写日期'"
>
</el-table-column>
<el-table-column
align="center"
prop="time"
:label="'操作'"
fixed="right"
>
<template slot-scope="scope">
<el-button
@click="toFixed(scope.row.pkId, 2)"
type="text"
size="small"
style="color: #009b58"
v-has-buttons="['feebf']"
>
{{ '反馈' }}
</el-button>
<el-button
@click="toFixed(scope.row.pkId, 1)"
type="text"
size="small"
v-has-buttons="['feebSee']"
style="color: #4391fd"
>
{{ '查看' }}
</el-button>
<!-- <el-button @click="handleDelete(scope.row.pkId)"
type="text"
size="small"
style="color: #c73030">
删除
</el-button> -->
</template>
</el-table-column>
</el-table>
</div>
</div>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getDataList"
/>
</div>
</template>
<script>
import topBar from "@/components/topBar";
import * as api from "@/api/notice.js";
import { getvertexValue, getmemberTeamList } from "@/api/member";
export default {
name: "Bzpz",
components: {
topBar,
},
filters: {
isAgree(val) {
if (!val) {
return '允许';
} else {
return '禁止';
}
},
},
data() {
return {
moren: "/announcement/feedback",
topList: [
{
name: '意见反馈',
path: "/announcement/feedback",
},
],
typeList: [
{
value: 0,
label: '前台',
},
{
value: 1,
label: '后台',
},
],
digList: [
{
value: 0,
label: '允许',
},
{
value: 1,
label: '禁止',
},
],
creationTime: [],
select: {},
//
queryParams: {
pageNum: 1,
pageSize: 50,
},
addOrEdit: "",
total: 0,
dialogVisible: false,
loading:false,
tableData: [],
form: {
name: "",
},
rules: {
name: [
{ required: true, message: '请输入规格类型', trigger: "blur" },
],
},
webList: [],
localList: [],
popList: [],
gradeList: [],
stateList: [],
vertexList: [], //
memberteamList: [], //
};
},
mounted() {
//
this.getData();
//
this.getDataList();
},
methods: {
reset() {
this.select = {};
this.creationTime = [];
this.getDataList();
},
getData() {
api.noticeWebsite().then((res) => {
this.webList = res.data;
});
api.noticeLocation().then((res) => {
this.localList = res.data;
});
api.noticePopup().then((res) => {
this.popList = res.data;
});
api.noticeGrade().then((res) => {
this.gradeList = res.data;
});
api.noticeState().then((res) => {
this.stateList = res.data;
});
getmemberTeamList().then((res) => {
this.memberteamList = res.rows;
});
getvertexValue().then((res) => {
this.vertexList = res.data;
});
},
changeTime(val) {
this.select.startDate = val[0];
this.select.endDate = val[1];
},
// 1/2
toFixed(id, index) {
this.addOrEdit = false;
this.dialogVisible = true;
this.$router.push({
path: "feedback/detail",
query: {
pkId: id,
index: index,
},
});
},
//
handleDelete(id) {
this.$confirm('确认删除?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: "warning",
}).then(() => {
api.delFeed(id).then((res) => {
this.getDataList();
});
});
},
openDig() {
this.$router.push({
path: "noticeList/details",
});
},
getDataList() {
this.loading = true
api
.feedbackList(Object.assign({}, this.queryParams, this.select))
.then((res) => {
this.loading = false
this.tableData = res.rows;
this.total = res.total;
});
},
handleSelectionChange(val) {},
/** 导出按钮操作 */
handleExport() {
this.$confirm('是否确认导出所有数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: "warning",
}).then((_) => {
this.download(
"/system/manage/feedback/export",
Object.assign({}, this.queryParams, this.select),
`意见反馈-${new Date().getTime()}.xlsx`
);
});
},
tableRowClassName({ row, rowIndex }) {
if (rowIndex % 2 == 1) {
return "warning-row";
} else if (rowIndex % 2 == 0) {
return "success-row";
}
return "";
},
},
};
</script>
<style scoped lang="scss">
::v-deep .el-table .warning-row {
background: #f9f9f9;
}
::v-deep .el-table .success-row {
background: #ffffff;
}
::v-deep .el-table thead {
color: #000000;
}
::v-deep .el-select {
width: 100%;
}
.uploadIcon ::v-deep .el-upload--picture-card {
display: none !important; /* 上传按钮隐藏 */
}
.searchbtn {
background: #c8161d;
color: #ffffff;
}
.page {
padding: 10px 20px;
background: #f9f9f9;
font-size: 14px;
.thetopbox {
padding: 10px 0;
background: #ffffff;
border-radius: 8px;
.searchbox {
display: flex;
align-items: center;
.searchtitle {
margin-right: 10px;
}
.searchbtn {
width: 68px;
background: #c8161d;
color: #ffffff;
}
}
}
.maintop {
display: flex;
// padding: 10px 0;
justify-content: space-between;
align-items: center;
.mainbtn {
display: flex;
justify-content: space-between;
align-content: center;
width: 100%;
.thebtn2 {
color: #ffffff;
background: #ffad41;
}
}
}
.main {
background: #ffffff;
border-radius: 8px;
box-shadow: 0px 2px 20px 0px rgba(238, 238, 238, 0.5);
// padding: 20px;
.maintop {
display: flex;
// padding: 10px 20px;
justify-content: space-between;
align-items: center;
.mainbtn {
.thebtn1 {
background: #3181e5;
color: #ffffff;
}
.thebtn2 {
background: #ffad41;
color: #ffffff;
}
}
.maintitle {
font-size: 10px;
font-family: MicrosoftYaHei;
color: #999999;
}
}
}
.tem {
display: flex;
align-items: center;
justify-content: center;
img {
width: 28px;
height: 20px;
margin-right: 3px;
}
}
.isRed {
color: #ed1d25;
}
.isGreen {
color: #1ab62b;
}
.bgImg {
width: 48px;
height: 48px;
}
}
.openClose {
text-align: right;
margin-right: 10px;
color: #3181e5;
}
::v-deep .el-date-editor.el-input,
.el-date-editor.el-input__inner {
width: auto;
}
</style>

View File

@ -8,10 +8,10 @@
<div class="page"> <div class="page">
<div class="topbox"> <div class="topbox">
<div <div
class="levelList_i"
:class="tabActive == item.id ? 'act' : ''"
v-for="(item, index) in topList" v-for="(item, index) in topList"
:key="index" :key="index"
class="levelList_i"
:class="tabActive == item.id ? 'act' : ''"
@click.prevent="handleLink(item.id)" @click.prevent="handleLink(item.id)"
> >
{{ item.name }} {{ item.name }}
@ -25,49 +25,49 @@
<el-col class="el-col-40"> <el-col class="el-col-40">
<el-form-item :label="'产品名称'" prop="productName"> <el-form-item :label="'产品名称'" prop="productName">
<el-input <el-input
clearable
v-model="form.productName" v-model="form.productName"
clearable
:placeholder="'请输入'" :placeholder="'请输入'"
></el-input> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'产品编码'" prop="productCode"> <el-form-item :label="'产品编码'" prop="productCode">
<el-input <el-input
clearable
v-model="form.productCode" v-model="form.productCode"
clearable
:placeholder="'请输入'" :placeholder="'请输入'"
></el-input> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'划线价'" prop="retailPrice"> <el-form-item :label="'划线价'" prop="retailPrice">
<el-input <el-input
v-model="form.retailPrice"
clearable clearable
oninput="value=value.replace(/[^\d.]/g,'')" oninput="value=value.replace(/[^\d.]/g,'')"
v-model="form.retailPrice"
:placeholder="'请输入'" :placeholder="'请输入'"
></el-input> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'发货类型'" prop="shippingChannel"> <el-form-item :label="'发货类型'" prop="shippingChannel">
<el-select clearable v-model="form.shippingChannel"> <el-select v-model="form.shippingChannel" clearable>
<el-option <el-option
v-for="item in fhTypeList" v-for="item in fhTypeList"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'保质期'" prop="shelfLife"> <el-form-item :label="'保质期'" prop="shelfLife">
<el-input <el-input
v-model="form.shelfLife"
clearable clearable
oninput="value=value.replace(/[^\d]/g,'')" oninput="value=value.replace(/[^\d]/g,'')"
v-model="form.shelfLife"
:placeholder="'请输入'" :placeholder="'请输入'"
> >
<i slot="suffix" class="neibu">{{ '天' }} </i> <i slot="suffix" class="neibu">{{ '天' }} </i>
@ -76,22 +76,22 @@
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'单位'" prop="unit"> <el-form-item :label="'单位'" prop="unit">
<el-select clearable v-model="form.unit"> <el-select v-model="form.unit" clearable>
<el-option <el-option
v-for="item in dwList" v-for="item in dwList"
:key="item.pkId" :key="item.pkId"
:label="item.name" :label="item.name"
:value="item.pkId" :value="item.pkId"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'重量'" prop="weight"> <el-form-item :label="'重量'" prop="weight">
<el-input <el-input
v-model="form.weight"
clearable clearable
oninput="value=value.replace(/[^\d.]/g,'')" oninput="value=value.replace(/[^\d.]/g,'')"
v-model="form.weight"
:placeholder="'请输入'" :placeholder="'请输入'"
> >
<i slot="suffix" class="neibu">KG </i> <i slot="suffix" class="neibu">KG </i>
@ -101,9 +101,9 @@
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'邮费重量'" prop="postageWeight"> <el-form-item :label="'邮费重量'" prop="postageWeight">
<el-input <el-input
v-model="form.postageWeight"
clearable clearable
oninput="value=value.replace(/[^\d.]/g,'')" oninput="value=value.replace(/[^\d.]/g,'')"
v-model="form.postageWeight"
:placeholder="'请输入'" :placeholder="'请输入'"
> >
<i slot="suffix" class="neibu">KG </i> <i slot="suffix" class="neibu">KG </i>
@ -112,45 +112,44 @@
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'产品属性'" prop="productAttr"> <el-form-item :label="'产品属性'" prop="productAttr">
<el-select clearable v-model="form.productAttr"> <el-select v-model="form.productAttr" clearable>
<el-option <el-option
v-for="item in productTypeList" v-for="item in productTypeList"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'所属分类'" prop="pkClassify"> <el-form-item :label="'所属分类'" prop="pkClassify">
<el-select clearable v-model="form.pkClassify"> <el-select v-model="form.pkClassify" clearable>
<el-option <el-option
v-for="item in classifyList" v-for="item in classifyList"
:key="item.pkId" :key="item.pkId"
:label="item.name" :label="item.name"
:value="item.pkId" :value="item.pkId"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'排列序号'" prop="sort"> <el-form-item :label="'排列序号'" prop="sort">
<el-input <el-input
v-model="form.sort"
clearable clearable
oninput="value = value.replace(/[^\d]/g,'')" oninput="value = value.replace(/[^\d]/g,'')"
v-model="form.sort"
:placeholder="'请输入'" :placeholder="'请输入'"
> />
</el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'长'" prop="length"> <el-form-item :label="'长'" prop="length">
<el-input <el-input
v-model="form.length"
clearable clearable
oninput="value=value.replace(/[^\d.]/g,'')" oninput="value=value.replace(/[^\d.]/g,'')"
v-model="form.length"
:placeholder="'请输入'" :placeholder="'请输入'"
> >
<i slot="suffix" class="neibu">CM </i> <i slot="suffix" class="neibu">CM </i>
@ -160,9 +159,9 @@
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'宽'" prop="width"> <el-form-item :label="'宽'" prop="width">
<el-input <el-input
v-model="form.width"
clearable clearable
oninput="value=value.replace(/[^\d.]/g,'')" oninput="value=value.replace(/[^\d.]/g,'')"
v-model="form.width"
:placeholder="'请输入'" :placeholder="'请输入'"
> >
<i slot="suffix" class="neibu">CM </i> <i slot="suffix" class="neibu">CM </i>
@ -172,9 +171,9 @@
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'高'" prop="height"> <el-form-item :label="'高'" prop="height">
<el-input <el-input
v-model="form.height"
clearable clearable
oninput="value=value.replace(/[^\d.]/g,'')" oninput="value=value.replace(/[^\d.]/g,'')"
v-model="form.height"
:placeholder="'请输入'" :placeholder="'请输入'"
> >
<i slot="suffix" class="neibu">CM </i> <i slot="suffix" class="neibu">CM </i>
@ -183,64 +182,46 @@
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'复购类型'"> <el-form-item :label="'复购类型'">
<el-select clearable v-model="form.repurchaseType"> <el-select v-model="form.repurchaseType" clearable>
<el-option <el-option
v-for="item in repurchaseTypeList" v-for="item in repurchaseTypeList"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'上架状态'" prop="isPutOn"> <el-form-item :label="'上架状态'" prop="isPutOn">
<el-select clearable v-model="form.isPutOn"> <el-select v-model="form.isPutOn" clearable>
<el-option <el-option
v-for="item in agreeList" v-for="item in agreeList"
:key="item.val" :key="item.val"
:label="item.text" :label="item.text"
:value="item.val" :value="item.val"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="el-col-20">
<el-form-item label="产品基本信息" prop="productBasName">
<el-input
clearable
v-model="form.productBasName"
@focus="opProduct"
></el-input>
</el-form-item>
<!-- <el-form-item label="产品基本信息" prop="pkProductBas">
<el-select clearable v-model="form.pkProductBas" filterable>
<el-option
v-for="item in productList"
:key="item.pkId"
:label="item.productName"
:value="item.pkId"
></el-option>
</el-select>
</el-form-item> -->
</el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item label="供应商" prop="pkCubasdoc"> <el-form-item label="供应商" prop="pkCubasdoc">
<el-select <el-select
v-model="form.pkCubasdoc"
clearable clearable
:placeholder="'请选择'" :placeholder="'请选择'"
v-model="form.pkCubasdoc"
> >
<el-option <el-option
v-for="item in supplierList" v-for="item in supplierList"
:key="item.pkId" :key="item.pkId"
:label="item.custName" :label="item.custName"
:value="item.pkId" :value="item.pkId"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="el-col-40"> <el-col class="el-col-20">
<el-form-item :label="'产品主图'" prop="cover"> <el-form-item :label="'产品主图'" prop="cover">
<!-- <el-upload :headers="headers" <!-- <el-upload :headers="headers"
:class="{ uploadIconOne: showImg, uploadIcon: noneUploadImg }" :class="{ uploadIconOne: showImg, uploadIcon: noneUploadImg }"
@ -256,16 +237,21 @@
<div class="jy">{{ '建议尺寸452×452大小为200K' }}</div> <div class="jy">{{ '建议尺寸452×452大小为200K' }}</div>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col key="wmsCode" class="el-col-20">
<el-form-item label="仓储编号" prop="wmsCode">
<el-input v-model="form.wmsCode" :disabled="methods" />
</el-form-item>
</el-col>
</el-row> </el-row>
</div> </div>
<div v-show="tabActive == 1"> <div v-show="tabActive == 1">
<el-form-item :label="'规格'" prop="pkSpecsType"> <el-form-item :label="'规格'" prop="pkSpecsType">
<el-tag <el-tag
:key="item.pkId"
v-for="(item, index) in ggList" v-for="(item, index) in ggList"
v-show="item.checked"
:key="item.pkId"
closable closable
class="elTag" class="elTag"
v-show="item.checked"
:disable-transitions="false" :disable-transitions="false"
@close="handleClose(item.pkId)" @close="handleClose(item.pkId)"
> >
@ -275,81 +261,80 @@
class="button-new-tag" class="button-new-tag"
size="small" size="small"
@click="openDiag = true" @click="openDiag = true"
>{{ '添加' }}</el-button >{{ '添加' }}</el-button>
>
</el-form-item> </el-form-item>
</div> </div>
<div v-show="tabActive == 2"> <div v-show="tabActive == 2">
<el-row> <el-row>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'抽奖礼品'" prop="isPrize"> <el-form-item :label="'抽奖礼品'" prop="isPrize">
<el-select clearable v-model="form.isPrize"> <el-select v-model="form.isPrize" clearable>
<el-option <el-option
v-for="item in agreeList" v-for="item in agreeList"
:key="item.val" :key="item.val"
:label="item.text" :label="item.text"
:value="item.val" :value="item.val"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'特惠礼品'" prop="isGift"> <el-form-item :label="'特惠礼品'" prop="isGift">
<el-select clearable v-model="form.isGift"> <el-select v-model="form.isGift" clearable>
<el-option <el-option
v-for="item in agreeList" v-for="item in agreeList"
:key="item.val" :key="item.val"
:label="item.text" :label="item.text"
:value="item.val" :value="item.val"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'提货商品'" prop="isPickUp"> <el-form-item :label="'提货商品'" prop="isPickUp">
<el-select clearable v-model="form.isPickUp"> <el-select v-model="form.isPickUp" clearable>
<el-option <el-option
v-for="item in agreeList" v-for="item in agreeList"
:key="item.val" :key="item.val"
:label="item.text" :label="item.text"
:value="item.val" :value="item.val"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'合并发货'" prop="isMerge"> <el-form-item :label="'合并发货'" prop="isMerge">
<el-select clearable v-model="form.isMerge"> <el-select v-model="form.isMerge" clearable>
<el-option <el-option
v-for="item in agreeList" v-for="item in agreeList"
:key="item.val" :key="item.val"
:label="item.text" :label="item.text"
:value="item.val" :value="item.val"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'冷链运输'" prop="isFresh"> <el-form-item :label="'冷链运输'" prop="isFresh">
<el-select clearable v-model="form.isFresh"> <el-select v-model="form.isFresh" clearable>
<el-option <el-option
v-for="item in agreeList" v-for="item in agreeList"
:key="item.val" :key="item.val"
:label="item.text" :label="item.text"
:value="item.val" :value="item.val"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="el-col-20"> <el-col class="el-col-20">
<el-form-item :label="'追溯编号'" prop="isBarCode"> <el-form-item :label="'追溯编号'" prop="isBarCode">
<el-select clearable v-model="form.isBarCode"> <el-select v-model="form.isBarCode" clearable>
<el-option <el-option
v-for="item in agreeList" v-for="item in agreeList"
:key="item.val" :key="item.val"
:label="item.text" :label="item.text"
:value="item.val" :value="item.val"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -360,8 +345,7 @@
v-for="(item, index) in transportTypeList" v-for="(item, index) in transportTypeList"
:key="item.value" :key="item.value"
:label="item.value" :label="item.value"
>{{ item.label }}</el-checkbox >{{ item.label }}</el-checkbox>
>
</el-checkbox-group> </el-checkbox-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -371,17 +355,15 @@
</div> </div>
<div class="footer"> <div class="footer">
<el-button size="small" class="cancelBtn"> <el-button size="small" class="cancelBtn">
{{ '取消' }}</el-button {{ '取消' }}</el-button>
>
<el-button <el-button
size="small"
v-hasButtons="['ProductReleaseConfirm']" v-hasButtons="['ProductReleaseConfirm']"
@click="submit('form')" size="small"
style="background: #c8161d; border: none" style="background: #c8161d; border: none"
class="sureBtn" class="sureBtn"
@click="submit('form')"
> >
{{ '确认' }}</el-button {{ '确认' }}</el-button>
>
</div> </div>
</div> </div>
<!-- 产品弹框 --> <!-- 产品弹框 -->
@ -400,43 +382,38 @@
v-model="select.query" v-model="select.query"
clearable clearable
:placeholder="'请输入'" :placeholder="'请输入'"
@keyup.enter.native="getProduct"
prefix-icon="el-icon-search" prefix-icon="el-icon-search"
></el-input> @keyup.enter.native="getProduct"
/>
</el-col> </el-col>
<el-col :span="2"> <el-col :span="2">
<el-button type="primary" size="small" @click="getProduct"> <el-button type="primary" size="small" @click="getProduct">
{{ '搜索' }}</el-button {{ '搜索' }}</el-button>
>
</el-col> </el-col>
</el-row> </el-row>
<div style="height: 10px"></div> <div style="height: 10px" />
<el-table <el-table
:data="productList"
ref="multipleTable" ref="multipleTable"
:data="productList"
height="500px" height="500px"
style="width: 100%" style="width: 100%"
@select-all="onSelectAll"
@select="selected"
:header-cell-style="{ background: '#EEEEEE' }" :header-cell-style="{ background: '#EEEEEE' }"
:row-class-name="tableRowClassName" :row-class-name="tableRowClassName"
@select-all="onSelectAll"
@select="selected"
> >
<el-table-column type="selection" width="55"> <el-table-column type="selection" width="55" />
</el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="productName" prop="productName"
:label="'产品名称'" :label="'产品名称'"
> />
</el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="productCode" prop="productCode"
:label="'产品编号'" :label="'产品编号'"
> />
</el-table-column> <el-table-column align="center" prop="unitStr" :label="'单位'" />
<el-table-column align="center" prop="unitStr" :label="'单位'">
</el-table-column>
</el-table> </el-table>
</div> </div>
<pagination <pagination
@ -465,11 +442,10 @@
<el-checkbox-group v-model="form.checkList" class="check"> <el-checkbox-group v-model="form.checkList" class="check">
<el-checkbox <el-checkbox
v-for="(item, index) in ggList" v-for="(item, index) in ggList"
class="check_i"
:key="item.pkId" :key="item.pkId"
class="check_i"
:label="item.pkId" :label="item.pkId"
>{{ item.typeName }}</el-checkbox >{{ item.typeName }}</el-checkbox>
>
</el-checkbox-group> </el-checkbox-group>
</div> </div>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
@ -482,172 +458,176 @@
</div> </div>
</template> </template>
<script> <script>
import { getToken } from "@/utils/auth"; import { getToken } from '@/utils/auth'
import * as api from "@/api/product.js"; import * as api from '@/api/product.js'
import ImageUpload from "@/components/ImageUpload"; import ImageUpload from '@/components/ImageUpload'
import * as supply from "@/api/supply.js"; import * as supply from '@/api/supply.js'
export default { export default {
name: "jcsz", name: 'Jcsz',
components: { components: {
ImageUpload, ImageUpload
}, },
data() { data() {
return { return {
selectData:{}, selectData: {},
select:{}, select: {},
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 50, pageSize: 50
}, },
total: 0, total: 0,
dialogVisible:false, dialogVisible: false,
rules: { rules: {
shippingChannel: [ shippingChannel: [
{ {
required: true, required: true,
message: '请输入发货类型', message: '请输入发货类型',
trigger: "change", trigger: 'change'
}, }
], ],
unit: [{ required: true, message: "请选择单位", trigger: "change" }], unit: [{ required: true, message: '请选择单位', trigger: 'change' }],
productName: [ productName: [
{ required: true, message: "请输入产品名称", trigger: "blur" }, { required: true, message: '请输入产品名称', trigger: 'blur' }
], ],
retailPrice: [ retailPrice: [
{ required: true, message: '请输入划线价', trigger: "blur" }, { required: true, message: '请输入划线价', trigger: 'blur' }
], ],
shelfLife: [ shelfLife: [
{ required: true, message: '请输入保质期', trigger: "blur" }, { required: true, message: '请输入保质期', trigger: 'blur' }
], ],
weight: [{ required: true, message: "请输入重量", trigger: "blur" }], weight: [{ required: true, message: '请输入重量', trigger: 'blur' }],
productCode: [ productCode: [
{ required: true, message: "请输入产品编号", trigger: "blur" }, { required: true, message: '请输入产品编号', trigger: 'blur' }
], ],
postageWeight: [ postageWeight: [
{ required: true, message: '请输入邮费重量', trigger: "blur" }, { required: true, message: '请输入邮费重量', trigger: 'blur' }
], ],
productAttr: [ productAttr: [
{ {
required: true, required: true,
message: '请选择产品属性', message: '请选择产品属性',
trigger: "change", trigger: 'change'
}, }
], ],
isPutOn: [ isPutOn: [
{ required: true, message: '请选择', trigger: "change" }, { required: true, message: '请选择', trigger: 'change' }
], ],
productBasName: [ productBasName: [
{ required: true, message: '请选择', trigger: "change" }, { required: true, message: '请选择', trigger: 'change' }
], ],
pkClassify: [ pkClassify: [
{ {
required: true, required: true,
message: '请选择所属分类', message: '请选择所属分类',
trigger: "change", trigger: 'change'
}, }
], ],
sort: [ sort: [
{ required: true, message: '请输入排列序号', trigger: "blur" }, { required: true, message: '请输入排列序号', trigger: 'blur' }
], ],
length: [{ required: true, message: "请输入长", trigger: "blur" }], length: [{ required: true, message: '请输入长', trigger: 'blur' }],
width: [{ required: true, message: "请输入宽", trigger: "blur" }], width: [{ required: true, message: '请输入宽', trigger: 'blur' }],
height: [{ required: true, message: "请输入高", trigger: "blur" }], height: [{ required: true, message: '请输入高', trigger: 'blur' }],
cover: [ cover: [
{ required: true, message: "请上传产品主图", trigger: "change" }, { required: true, message: '请上传产品主图', trigger: 'change' }
], ],
pkSpecsType: [ pkSpecsType: [
{ required: true, message: "请选择规格", trigger: "change" }, { required: true, message: '请选择规格', trigger: 'change' }
], ],
isPrize: [ isPrize: [
{ {
required: true, required: true,
message: '抽奖礼品', message: '抽奖礼品',
trigger: "change", trigger: 'change'
}, }
], ],
isGift: [ isGift: [
{ required: true, message: "请选择特惠礼品", trigger: "change" }, { required: true, message: '请选择特惠礼品', trigger: 'change' }
], ],
isPickUp: [ isPickUp: [
{ required: true, message: "请选择提货商品", trigger: "change" }, { required: true, message: '请选择提货商品', trigger: 'change' }
], ],
isMerge: [ isMerge: [
{ {
required: true, required: true,
message: '请选择合并发货', message: '请选择合并发货',
trigger: "change", trigger: 'change'
}, }
], ],
isFresh: [ isFresh: [
{ {
required: true, required: true,
message: '请选择冷链运输', message: '请选择冷链运输',
trigger: "change", trigger: 'change'
}, }
], ],
pkCubasdoc: [ pkCubasdoc: [
{ {
required: true, required: true,
message: '请选择', message: '请选择',
trigger: "change", trigger: 'change'
}, }
], ],
isBarCode: [ isBarCode: [
{ required: true, message: "请选择条码管理", trigger: "change" }, { required: true, message: '请选择条码管理', trigger: 'change' }
], ],
ysList: [ ysList: [
{ required: true, message: '请选择运输方式', trigger: "change" }, { required: true, message: '请选择运输方式', trigger: 'change' }
], ],
wmsCode: [
{ required: true, message: '请输入仓储编号', trigger: 'blur' }
]
}, },
ggList: [], ggList: [],
// //
openDiag: false, openDiag: false,
showImg: true, // showImg: true, //
noneUploadImg: false, // noneUploadImg: false, //
uploadImgUrl: process.env.VUE_APP_BASE_API + "/system/upload", uploadImgUrl: process.env.VUE_APP_BASE_API + '/system/upload',
headers: { headers: {
Authorization: getToken(), Authorization: getToken()
}, },
form: { form: {
productBasName:'', productBasName: '',
productCode: "", productCode: '',
sptw: "", sptw: '',
checkList: [], checkList: [],
ysList: [], ysList: [],
sort: "", sort: '',
postageWeight: "", postageWeight: '',
height: "", height: '',
width: "", width: '',
length: "", length: '',
weight: "", weight: '',
shelfLife: "", shelfLife: '',
retailPrice: "", retailPrice: '',
wmsCode: ''
}, },
tabActive: 0, tabActive: 0,
agreeList: [ agreeList: [
{ {
text: '允许', text: '允许',
val: 0, val: 0
}, },
{ {
text: '禁止', text: '禁止',
val: 1, val: 1
}, }
], ],
topList: [ topList: [
{ {
name: '基础设置', name: '基础设置',
id: 0, id: 0
}, },
{ {
name: '规格明细', name: '规格明细',
id: 1, id: 1
}, },
{ {
name: '拓展设置', name: '拓展设置',
id: 2, id: 2
}, }
], ],
productTypeList: [], productTypeList: [],
fhTypeList: [], fhTypeList: [],
@ -656,162 +636,163 @@ export default {
transportTypeList: [], transportTypeList: [],
repurchaseTypeList: [], repurchaseTypeList: [],
productList: [], productList: [],
supplierList: [], supplierList: []
}; }
}, },
mounted() { mounted() {
// list // list
this.getGg(); this.getGg()
// // // //
this.getProductType(); this.getProductType()
// //
this.getShipping(); this.getShipping()
// //
this.getUnit(); this.getUnit()
// //
this.getRepurchaseType(); this.getRepurchaseType()
// //
this.getClassifyAll(); this.getClassifyAll()
// //
this.getTransportType(); this.getTransportType()
// //
this.getProductCode(); this.getProductCode()
// //
this.getSort(); this.getSort()
// //
this.getProduct(); this.getProduct()
}, },
methods: { methods: {
sureProduct(){ sureProduct() {
this.form.productBasName = this.selectData.productName this.form.productBasName = this.selectData.productName
this.form.pkProductBas = this.selectData.pkId this.form.pkProductBas = this.selectData.pkId
this.dialogVisible = false this.dialogVisible = false
}, },
onSelectAll() { onSelectAll() {
this.$refs.multipleTable.clearSelection(); this.$refs.multipleTable.clearSelection()
}, },
selected(selection, row) { selected(selection, row) {
this.$refs.multipleTable.clearSelection(); this.$refs.multipleTable.clearSelection()
if (selection.length == 0) return; if (selection.length == 0) return
this.$refs.multipleTable.toggleRowSelection(row, true); this.$refs.multipleTable.toggleRowSelection(row, true)
this.selectData = row; this.selectData = row
}, },
handleClose1() { handleClose1() {
this.dialogVisible = false this.dialogVisible = false
}, },
opProduct(){ opProduct() {
this.dialogVisible = true this.dialogVisible = true
}, },
getProduct() { getProduct() {
api.productFind1(Object.assign({}, this.queryParams, this.select)).then((res) => { api.productFind1(Object.assign({}, this.queryParams, this.select)).then((res) => {
this.productList = res.rows; this.productList = res.rows
this.total = res.total this.total = res.total
}); })
}, },
getRepurchaseType() { getRepurchaseType() {
api.repurchaseType().then((res) => { api.repurchaseType().then((res) => {
this.repurchaseTypeList = res.data; this.repurchaseTypeList = res.data
}); })
supply.supplierList().then((res) => { supply.supplierList().then((res) => {
this.supplierList = res.rows; this.supplierList = res.rows
}); })
}, },
getSort() { getSort() {
api.getMaxSort().then((res) => { api.getMaxSort().then((res) => {
this.form.sort = res.data; this.form.sort = res.data
}); })
}, },
getProductCode() { getProductCode() {
api.getProductCode().then((res) => { api.getProductCode().then((res) => {
this.form.productCode = res.msg; this.form.productCode = res.msg
}); this.form.wmsCode = res.msg
})
}, },
// //
changeYsfs(val) { changeYsfs(val) {
// //
if (val.indexOf(1) > -1) { if (val.indexOf(1) > -1) {
this.form.isLandTrans = 0; this.form.isLandTrans = 0
} else { } else {
this.form.isLandTrans = 1; this.form.isLandTrans = 1
} }
// //
if (val.indexOf(2) > -1) { if (val.indexOf(2) > -1) {
this.form.isAirTrans = 0; this.form.isAirTrans = 0
} else { } else {
this.form.isAirTrans = 1; this.form.isAirTrans = 1
} }
// //
if (val.indexOf(3) > -1) { if (val.indexOf(3) > -1) {
this.form.isOceanTrans = 0; this.form.isOceanTrans = 0
} else { } else {
this.form.isOceanTrans = 1; this.form.isOceanTrans = 1
} }
}, },
// //
getTransportType() { getTransportType() {
api.transportType().then((res) => { api.transportType().then((res) => {
this.transportTypeList = res.data; this.transportTypeList = res.data
}); })
}, },
// //
getClassifyAll() { getClassifyAll() {
api.classifyAll().then((res) => { api.classifyAll().then((res) => {
this.classifyList = res.data; this.classifyList = res.data
}); })
}, },
// //
checkTrue() { checkTrue() {
this.ggList.forEach((item) => { this.ggList.forEach((item) => {
item.checked = false; item.checked = false
}); })
this.ggList.forEach((item) => { this.ggList.forEach((item) => {
this.form.checkList.forEach((child) => { this.form.checkList.forEach((child) => {
if (item.pkId == child) { if (item.pkId == child) {
item.checked = true; item.checked = true
} }
}); })
}); })
this.openDiag = false; this.openDiag = false
this.form.pkSpecsType = this.form.checkList; this.form.pkSpecsType = this.form.checkList
}, },
// //
getGg() { getGg() {
api.findAll().then((res) => { api.findAll().then((res) => {
res.data.forEach((item) => { res.data.forEach((item) => {
item.checked = false; item.checked = false
}); })
this.ggList = res.data; this.ggList = res.data
}); })
}, },
// //
getProductType() { getProductType() {
api.productType().then((res) => { api.productType().then((res) => {
this.productTypeList = res.data; this.productTypeList = res.data
}); })
}, },
// //
getShipping() { getShipping() {
api.getShipping().then((res) => { api.getShipping().then((res) => {
this.fhTypeList = res.data; this.fhTypeList = res.data
}); })
}, },
// //
getUnit() { getUnit() {
api.unitAll().then((res) => { api.unitAll().then((res) => {
this.dwList = res.data; this.dwList = res.data
}); })
}, },
// //
handleClose(pkId) { handleClose(pkId) {
// //
this.ggList.forEach((item) => { this.ggList.forEach((item) => {
if (item.pkId == pkId) { if (item.pkId == pkId) {
item.checked = false; item.checked = false
} }
}); })
// //
this.form.checkList.splice(this.form.checkList.indexOf(pkId), 1); this.form.checkList.splice(this.form.checkList.indexOf(pkId), 1)
this.$forceUpdate(); this.$forceUpdate()
}, },
submit(form) { submit(form) {
this.$refs[form].validate((valid) => { this.$refs[form].validate((valid) => {
@ -820,27 +801,27 @@ export default {
if (res.code == 200) { if (res.code == 200) {
this.$message({ this.$message({
message: '添加成功', message: '添加成功',
type: "success", type: 'success'
}); })
this.$router.replace({ this.$router.replace({
path: "/goodsManage/productList", path: '/goodsManage/productList'
}); })
} else { } else {
this.$message({ this.$message({
message: res.msg, message: res.msg,
type: "warning", type: 'warning',
duration: 3000, duration: 3000
}); })
} }
}); })
} else { } else {
return false; return false
} }
}); })
}, },
// tab // tab
handleLink(id) { handleLink(id) {
this.tabActive = id; this.tabActive = id
}, },
tableRowClassName({ row, rowIndex }) { tableRowClassName({ row, rowIndex }) {
if (rowIndex % 2 == 1) { if (rowIndex % 2 == 1) {
@ -849,22 +830,22 @@ export default {
return 'success-row' return 'success-row'
} }
return '' return ''
}, }
// uploadImgChange(file, fileList) { // uploadImgChange(file, fileList) {
// this.noneUploadImg = fileList.length > 0 // this.noneUploadImg = fileList.length > 0
// this.$refs.form.clearValidate('cover') // this.$refs.form.clearValidate('cover')
// }, // },
// //
// handlePictureSuccess(res, file) { // handlePictureSuccess(res, file) {
// this.form.cover = res.data.url // this.form.cover = res.data.url
// }, // },
// //
// handleRemove(file, fileList) { // handleRemove(file, fileList) {
// this.form.cover = '' // this.form.cover = ''
// this.noneUploadImg = fileList.length > 0 // this.noneUploadImg = fileList.length > 0
// }, // },
}, }
}; }
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
::v-deep .el-select { ::v-deep .el-select {

File diff suppressed because it is too large Load Diff