Merge remote-tracking branch 'origin/dev'
This commit is contained in:
commit
0663aa6794
@ -1,208 +1,212 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta name="renderer" content="webkit">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||
<title><%= webpackConfig.name %></title>
|
||||
<title>
|
||||
<%= webpackConfig.name %>
|
||||
</title>
|
||||
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
|
||||
<style>
|
||||
html,
|
||||
body,
|
||||
#app {
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
.chromeframe {
|
||||
margin: 0.2em 0;
|
||||
background: #ccc;
|
||||
color: #000;
|
||||
padding: 0.2em 0;
|
||||
}
|
||||
<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=6b427d1f3e633c70e11ca6e304444a63"></script>
|
||||
<style>
|
||||
html,
|
||||
body,
|
||||
#app {
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#loader-wrapper {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 999999;
|
||||
}
|
||||
.chromeframe {
|
||||
margin: 0.2em 0;
|
||||
background: #ccc;
|
||||
color: #000;
|
||||
padding: 0.2em 0;
|
||||
}
|
||||
|
||||
#loader {
|
||||
display: block;
|
||||
position: relative;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
margin: -75px 0 0 -75px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #FFF;
|
||||
-webkit-animation: spin 2s linear infinite;
|
||||
-ms-animation: spin 2s linear infinite;
|
||||
-moz-animation: spin 2s linear infinite;
|
||||
-o-animation: spin 2s linear infinite;
|
||||
animation: spin 2s linear infinite;
|
||||
z-index: 1001;
|
||||
}
|
||||
#loader-wrapper {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 999999;
|
||||
}
|
||||
|
||||
#loader:before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 5px;
|
||||
right: 5px;
|
||||
bottom: 5px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #FFF;
|
||||
-webkit-animation: spin 3s linear infinite;
|
||||
-moz-animation: spin 3s linear infinite;
|
||||
-o-animation: spin 3s linear infinite;
|
||||
-ms-animation: spin 3s linear infinite;
|
||||
animation: spin 3s linear infinite;
|
||||
}
|
||||
#loader {
|
||||
display: block;
|
||||
position: relative;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
margin: -75px 0 0 -75px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #FFF;
|
||||
-webkit-animation: spin 2s linear infinite;
|
||||
-ms-animation: spin 2s linear infinite;
|
||||
-moz-animation: spin 2s linear infinite;
|
||||
-o-animation: spin 2s linear infinite;
|
||||
animation: spin 2s linear infinite;
|
||||
z-index: 1001;
|
||||
}
|
||||
|
||||
#loader:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
left: 15px;
|
||||
right: 15px;
|
||||
bottom: 15px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #FFF;
|
||||
-moz-animation: spin 1.5s linear infinite;
|
||||
-o-animation: spin 1.5s linear infinite;
|
||||
-ms-animation: spin 1.5s linear infinite;
|
||||
-webkit-animation: spin 1.5s linear infinite;
|
||||
animation: spin 1.5s linear infinite;
|
||||
}
|
||||
#loader:before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 5px;
|
||||
right: 5px;
|
||||
bottom: 5px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #FFF;
|
||||
-webkit-animation: spin 3s linear infinite;
|
||||
-moz-animation: spin 3s linear infinite;
|
||||
-o-animation: spin 3s linear infinite;
|
||||
-ms-animation: spin 3s linear infinite;
|
||||
animation: spin 3s linear infinite;
|
||||
}
|
||||
|
||||
#loader:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
left: 15px;
|
||||
right: 15px;
|
||||
bottom: 15px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #FFF;
|
||||
-moz-animation: spin 1.5s linear infinite;
|
||||
-o-animation: spin 1.5s linear infinite;
|
||||
-ms-animation: spin 1.5s linear infinite;
|
||||
-webkit-animation: spin 1.5s linear infinite;
|
||||
animation: spin 1.5s linear infinite;
|
||||
}
|
||||
|
||||
@-webkit-keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
-ms-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
-ms-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
-ms-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
@keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
-ms-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
#loader-wrapper .loader-section {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 51%;
|
||||
height: 100%;
|
||||
background: #7171C6;
|
||||
z-index: 1000;
|
||||
-webkit-transform: translateX(0);
|
||||
-ms-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
}
|
||||
|
||||
#loader-wrapper .loader-section {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 51%;
|
||||
height: 100%;
|
||||
background: #7171C6;
|
||||
z-index: 1000;
|
||||
-webkit-transform: translateX(0);
|
||||
-ms-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
}
|
||||
#loader-wrapper .loader-section.section-left {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
#loader-wrapper .loader-section.section-left {
|
||||
left: 0;
|
||||
}
|
||||
#loader-wrapper .loader-section.section-right {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
#loader-wrapper .loader-section.section-right {
|
||||
right: 0;
|
||||
}
|
||||
.loaded #loader-wrapper .loader-section.section-left {
|
||||
-webkit-transform: translateX(-100%);
|
||||
-ms-transform: translateX(-100%);
|
||||
transform: translateX(-100%);
|
||||
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
|
||||
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
|
||||
}
|
||||
|
||||
.loaded #loader-wrapper .loader-section.section-right {
|
||||
-webkit-transform: translateX(100%);
|
||||
-ms-transform: translateX(100%);
|
||||
transform: translateX(100%);
|
||||
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
|
||||
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
|
||||
}
|
||||
|
||||
.loaded #loader-wrapper .loader-section.section-left {
|
||||
-webkit-transform: translateX(-100%);
|
||||
-ms-transform: translateX(-100%);
|
||||
transform: translateX(-100%);
|
||||
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
|
||||
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
|
||||
}
|
||||
.loaded #loader {
|
||||
opacity: 0;
|
||||
-webkit-transition: all 0.3s ease-out;
|
||||
transition: all 0.3s ease-out;
|
||||
}
|
||||
|
||||
.loaded #loader-wrapper .loader-section.section-right {
|
||||
-webkit-transform: translateX(100%);
|
||||
-ms-transform: translateX(100%);
|
||||
transform: translateX(100%);
|
||||
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
|
||||
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
|
||||
}
|
||||
.loaded #loader-wrapper {
|
||||
visibility: hidden;
|
||||
-webkit-transform: translateY(-100%);
|
||||
-ms-transform: translateY(-100%);
|
||||
transform: translateY(-100%);
|
||||
-webkit-transition: all 0.3s 1s ease-out;
|
||||
transition: all 0.3s 1s ease-out;
|
||||
}
|
||||
|
||||
.loaded #loader {
|
||||
opacity: 0;
|
||||
-webkit-transition: all 0.3s ease-out;
|
||||
transition: all 0.3s ease-out;
|
||||
}
|
||||
.no-js #loader-wrapper {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.loaded #loader-wrapper {
|
||||
visibility: hidden;
|
||||
-webkit-transform: translateY(-100%);
|
||||
-ms-transform: translateY(-100%);
|
||||
transform: translateY(-100%);
|
||||
-webkit-transition: all 0.3s 1s ease-out;
|
||||
transition: all 0.3s 1s ease-out;
|
||||
}
|
||||
.no-js h1 {
|
||||
color: #222222;
|
||||
}
|
||||
|
||||
.no-js #loader-wrapper {
|
||||
display: none;
|
||||
}
|
||||
#loader-wrapper .load_title {
|
||||
font-family: 'Open Sans';
|
||||
color: #FFF;
|
||||
font-size: 19px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
z-index: 9999999999999;
|
||||
position: absolute;
|
||||
top: 60%;
|
||||
opacity: 1;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.no-js h1 {
|
||||
color: #222222;
|
||||
}
|
||||
#loader-wrapper .load_title span {
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
font-size: 13px;
|
||||
color: #FFF;
|
||||
opacity: 0.5;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
#loader-wrapper .load_title {
|
||||
font-family: 'Open Sans';
|
||||
color: #FFF;
|
||||
font-size: 19px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
z-index: 9999999999999;
|
||||
position: absolute;
|
||||
top: 60%;
|
||||
opacity: 1;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
#loader-wrapper .load_title span {
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
font-size: 13px;
|
||||
color: #FFF;
|
||||
opacity: 0.5;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<body>
|
||||
<div id="app">
|
||||
<div id="loader-wrapper">
|
||||
<div id="loader"></div>
|
||||
<div class="loader-section section-left"></div>
|
||||
<div class="loader-section section-right"></div>
|
||||
<div class="load_title">正在加载系统资源,请耐心等待</div>
|
||||
<div id="loader-wrapper">
|
||||
<div id="loader"></div>
|
||||
<div class="loader-section section-left"></div>
|
||||
<div class="loader-section section-right"></div>
|
||||
<div class="load_title">正在加载系统资源,请耐心等待</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@ -56,13 +56,13 @@ export default {
|
||||
type: {
|
||||
type: String,
|
||||
default: "url",
|
||||
}
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
uploadUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址
|
||||
uploadUrl: process.env.VUE_APP_BASE_API + "/common/richTextPictureUrl", // 上传的图片服务器地址
|
||||
headers: {
|
||||
Authorization: "Bearer " + getToken()
|
||||
Authorization: "Bearer " + getToken(),
|
||||
},
|
||||
Quill: null,
|
||||
currentValue: "",
|
||||
@ -73,16 +73,16 @@ export default {
|
||||
modules: {
|
||||
// 工具栏配置
|
||||
toolbar: [
|
||||
["bold", "italic", "underline", "strike"], // 加粗 斜体 下划线 删除线
|
||||
["blockquote", "code-block"], // 引用 代码块
|
||||
[{ list: "ordered" }, { list: "bullet" }], // 有序、无序列表
|
||||
[{ indent: "-1" }, { indent: "+1" }], // 缩进
|
||||
[{ size: ["small", false, "large", "huge"] }], // 字体大小
|
||||
[{ header: [1, 2, 3, 4, 5, 6, false] }], // 标题
|
||||
[{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色
|
||||
[{ align: [] }], // 对齐方式
|
||||
["clean"], // 清除文本格式
|
||||
["link", "image", "video"] // 链接、图片、视频
|
||||
["bold", "italic", "underline", "strike"], // 加粗 斜体 下划线 删除线
|
||||
["blockquote", "code-block"], // 引用 代码块
|
||||
[{ list: "ordered" }, { list: "bullet" }], // 有序、无序列表
|
||||
[{ indent: "-1" }, { indent: "+1" }], // 缩进
|
||||
[{ size: ["small", false, "large", "huge"] }], // 字体大小
|
||||
[{ header: [1, 2, 3, 4, 5, 6, false] }], // 标题
|
||||
[{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色
|
||||
[{ align: [] }], // 对齐方式
|
||||
["clean"], // 清除文本格式
|
||||
["link", "image", "video"], // 链接、图片、视频
|
||||
],
|
||||
},
|
||||
placeholder: "请输入内容",
|
||||
@ -126,7 +126,7 @@ export default {
|
||||
const editor = this.$refs.editor;
|
||||
this.Quill = new Quill(editor, this.options);
|
||||
// 如果设置了上传地址则自定义图片上传事件
|
||||
if (this.type == 'url') {
|
||||
if (this.type == "url") {
|
||||
let toolbar = this.Quill.getModule("toolbar");
|
||||
toolbar.addHandler("image", (value) => {
|
||||
this.uploadType = "image";
|
||||
@ -176,7 +176,14 @@ export default {
|
||||
// 获取光标所在位置
|
||||
let length = quill.getSelection().index;
|
||||
// 插入图片 res.url为服务器返回的图片地址
|
||||
quill.insertEmbed(length, "image", process.env.VUE_APP_BASE_API + res.fileName);
|
||||
quill.insertEmbed(
|
||||
length,
|
||||
"image",
|
||||
process.env.VUE_APP_BASE_API + res.fileName
|
||||
);
|
||||
|
||||
this.$emit("imgs", res.fileName);
|
||||
|
||||
// 调整光标到最后
|
||||
quill.setSelection(length + 1);
|
||||
} else {
|
||||
@ -191,7 +198,8 @@ export default {
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.editor, .ql-toolbar {
|
||||
.editor,
|
||||
.ql-toolbar {
|
||||
white-space: pre-wrap !important;
|
||||
line-height: normal !important;
|
||||
}
|
||||
|
||||
@ -366,6 +366,7 @@
|
||||
style="margin-top: 20px"
|
||||
>
|
||||
<editor
|
||||
@imgs="imgs"
|
||||
:min-height="100"
|
||||
style="width: 90%; margin: 0 auto"
|
||||
v-model="form.goodsRemark"
|
||||
@ -506,8 +507,8 @@ export default {
|
||||
name: "OperateGoodsInfo",
|
||||
data() {
|
||||
return {
|
||||
imgsurl: { pictureUrlList: [] },
|
||||
imgone: "",
|
||||
|
||||
imageUrl: "", //商品图片
|
||||
value: "",
|
||||
datas: null,
|
||||
@ -627,6 +628,9 @@ export default {
|
||||
this.infos();
|
||||
},
|
||||
methods: {
|
||||
imgs(item) {
|
||||
this.imgsurl.pictureUrlList.push(item);
|
||||
},
|
||||
upwhetherShelf(row) {
|
||||
console.log(row);
|
||||
if (row.whetherShelf == false) {
|
||||
@ -718,6 +722,10 @@ export default {
|
||||
console.log(res);
|
||||
});
|
||||
}
|
||||
if (this.imgsurl.pictureUrlList.length > 0) {
|
||||
updatePicture(this.imgsurl).then((res) => {});
|
||||
}
|
||||
this.imgsurl = { pictureUrlList: [] };
|
||||
this.open = false;
|
||||
this.reset();
|
||||
this.StationName = "请选择所属护理站";
|
||||
|
||||
@ -18,6 +18,7 @@ export default {
|
||||
name: "OperateGoodsInfo",
|
||||
data() {
|
||||
return {
|
||||
imgsurl: { pictureUrlList: [] },
|
||||
imgone: "",
|
||||
imageUrl: "", //商品图片
|
||||
value: "",
|
||||
@ -53,22 +54,22 @@ export default {
|
||||
nursetotal: 0,
|
||||
nurseStationId: null,
|
||||
goods: [{
|
||||
value: "BUSINESS",
|
||||
label: "买卖",
|
||||
},
|
||||
{
|
||||
value: "LEASE",
|
||||
label: "租赁",
|
||||
},
|
||||
value: "BUSINESS",
|
||||
label: "买卖",
|
||||
},
|
||||
{
|
||||
value: "LEASE",
|
||||
label: "租赁",
|
||||
},
|
||||
],
|
||||
options: [{
|
||||
value: 0,
|
||||
label: "否",
|
||||
},
|
||||
{
|
||||
value: 1,
|
||||
label: "是",
|
||||
},
|
||||
value: 0,
|
||||
label: "否",
|
||||
},
|
||||
{
|
||||
value: 1,
|
||||
label: "是",
|
||||
},
|
||||
],
|
||||
// goodAttributeDetailsLists:[],
|
||||
goodDetailsLists: [],
|
||||
@ -138,6 +139,9 @@ export default {
|
||||
this.infos();
|
||||
},
|
||||
methods: {
|
||||
imgs(item) {
|
||||
this.imgsurl.pictureUrlList.push(item);
|
||||
},
|
||||
upwhetherShelf(row) {
|
||||
console.log(row);
|
||||
if (row.whetherShelf == false) {
|
||||
@ -229,6 +233,10 @@ export default {
|
||||
console.log(res);
|
||||
});
|
||||
}
|
||||
if (this.imgsurl.pictureUrlList.length > 0) {
|
||||
updatePicture(this.imgsurl).then((res) => { });
|
||||
}
|
||||
this.imgsurl = { pictureUrlList: [] };
|
||||
this.open = false;
|
||||
this.reset();
|
||||
this.StationName = "请选择所属护理站";
|
||||
@ -239,8 +247,8 @@ export default {
|
||||
goodsPrice: "",
|
||||
goodsStock: "",
|
||||
sort: "",
|
||||
}, ],
|
||||
}, ];
|
||||
},],
|
||||
},];
|
||||
},
|
||||
|
||||
handleQuery2() {
|
||||
@ -259,7 +267,7 @@ export default {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
}),
|
||||
this.handleQuery2();
|
||||
this.handleQuery2();
|
||||
},
|
||||
addcancel() {
|
||||
this.resetQuery2();
|
||||
@ -292,7 +300,7 @@ export default {
|
||||
goodsStock: "",
|
||||
sort: "",
|
||||
ids: 9999999,
|
||||
}, ];
|
||||
},];
|
||||
this.resetForm("form");
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
@ -335,7 +343,7 @@ export default {
|
||||
goodsStock: "",
|
||||
sort: "",
|
||||
ids: 9999999,
|
||||
}, ];
|
||||
},];
|
||||
this.open = true;
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
@ -366,9 +374,9 @@ export default {
|
||||
this.$refs["form"].validate((valid) => {
|
||||
if (valid) {
|
||||
if (this.form.goodsInfoId != null) {
|
||||
this.form.goodDetailsLists.forEach((e) => {
|
||||
this.form.goodDetailsLists.forEach((e) => {
|
||||
e.goodsPrice = Number(e.goodsPrice);
|
||||
});
|
||||
});
|
||||
this.form.id = this.form.goodsInfoId;
|
||||
updateGoodsInfo(this.form).then((response) => {
|
||||
var obj = { pictureUrlList: [] };
|
||||
@ -387,7 +395,7 @@ export default {
|
||||
} else {
|
||||
this.form.goodDetailsLists.forEach((e) => {
|
||||
e.goodsPrice = Number(e.goodsPrice);
|
||||
});
|
||||
});
|
||||
addGoodsInfo(this.form).then((response) => {
|
||||
console.log(this.form);
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
@ -404,10 +412,10 @@ export default {
|
||||
handleDelete(row) {
|
||||
console.log("row :>> ", row);
|
||||
this.$confirm("是否确认删除订单信息的数据项?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(() => {
|
||||
var obj = { pictureUrlList: [] };
|
||||
obj.pictureUrlList.push(row.goodsPictureUrl);
|
||||
@ -421,7 +429,7 @@ export default {
|
||||
// console.log('this.OrderDetailsList :>> ', this.OrderDetailsList);
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
.catch(() => { });
|
||||
},
|
||||
// handleDelete(row) {
|
||||
// const ids = row.id || this.ids;
|
||||
|
||||
@ -349,6 +349,7 @@
|
||||
style="margin-top: 20px"
|
||||
>
|
||||
<editor
|
||||
@imgs="imgs"
|
||||
:min-height="100"
|
||||
style="width: 90%; margin: 0 auto"
|
||||
v-model="form.goodsRemark"
|
||||
|
||||
@ -298,26 +298,23 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="下单方式" prop="buySource">
|
||||
<el-input
|
||||
:value="buySourceinfo(orderList.buySource)"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
:disabled="true"
|
||||
:value="orderChannelinfo(orderList.orderChannel)"
|
||||
disabled
|
||||
style="width: 240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="购买来源" prop="orderChannel">
|
||||
<el-input
|
||||
:value="orderChannelinfo(orderList.orderChannel)"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
:disabled="true"
|
||||
:value="buySourceinfo(orderList.buySource)"
|
||||
disabled
|
||||
style="width: 240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="综合评分" v-if="ratelist.compositeScore">
|
||||
<el-form-item label="综合评分" v-if="orderList.compositeScore">
|
||||
<div style="width: 240px">
|
||||
<el-rate
|
||||
v-model="ratelist.compositeScore"
|
||||
v-if="orderList.compositeScore"
|
||||
v-model="orderList.compositeScore"
|
||||
style="padding-top: 7px"
|
||||
disabled
|
||||
show-score
|
||||
@ -325,20 +322,24 @@
|
||||
score-template="{value}"
|
||||
>
|
||||
</el-rate>
|
||||
<el-input
|
||||
v-else
|
||||
type="text"
|
||||
disabled
|
||||
style="width: 240px"
|
||||
placeholder="未评分"
|
||||
></el-input>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="评价内容" v-if="ratelist.evaluateContent">
|
||||
<el-form-item label="评价内容" v-if="orderList.evaluateContent">
|
||||
<el-input
|
||||
type="textarea"
|
||||
disabled
|
||||
style="width: 240px"
|
||||
v-model="ratelist.evaluateContent"
|
||||
style="width: 610px"
|
||||
v-model="orderList.evaluateContent"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="评价图片"
|
||||
v-if="ratelist.orderEvaluatePictureInfoList"
|
||||
>
|
||||
<el-form-item label="评价图片" v-if="ratelist">
|
||||
<div
|
||||
style="
|
||||
display: flex;
|
||||
@ -347,8 +348,8 @@
|
||||
"
|
||||
>
|
||||
<img
|
||||
style="width: 240px"
|
||||
v-for="(item, index) in ratelist.orderEvaluatePictureInfoList"
|
||||
style="width: 23%;height:100%;margin:1%"
|
||||
v-for="(item, index) in ratelist"
|
||||
:src="baseurl + item.evaluatePictureUrl"
|
||||
alt=""
|
||||
:key="index"
|
||||
@ -662,7 +663,6 @@ export default {
|
||||
},
|
||||
created() {
|
||||
this.baseurl = baseurl;
|
||||
this.getList();
|
||||
this.info();
|
||||
this.infos();
|
||||
},
|
||||
@ -745,15 +745,10 @@ export default {
|
||||
getGoodsOrderlist(id).then((res) => {
|
||||
this.orderList = res.data;
|
||||
this.innerorder = true;
|
||||
this.ratelist = {};
|
||||
if (row.orderStatus == "EVALUATED") {
|
||||
this.ratelist = {};
|
||||
selectOrderEvaluate(id).then((res) => {
|
||||
if (res.data) {
|
||||
this.ratelist = res.data;
|
||||
}
|
||||
});
|
||||
this.ratelist = res.data.orderEvaluatePictureInfoList;
|
||||
} else {
|
||||
this.ratelist = {};
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
@ -297,7 +297,26 @@
|
||||
>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-form-item
|
||||
label="预约服务位置"
|
||||
v-if="
|
||||
query.orderStatus == 'COMPLETE' || query.orderStatus == 'EVALUATED'
|
||||
"
|
||||
>
|
||||
<el-input
|
||||
v-model="query.serviceLocationName"
|
||||
disabled
|
||||
style="width: 250px"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div
|
||||
id="container"
|
||||
v-if="
|
||||
this.query.orderStatus == 'COMPLETE' ||
|
||||
this.query.orderStatus == 'EVALUATED'
|
||||
"
|
||||
></div>
|
||||
</el-dialog>
|
||||
<!-- 派单弹框 -->
|
||||
<el-dialog
|
||||
@ -509,11 +528,12 @@ import {
|
||||
} from "@/api/system/order";
|
||||
import { getListByUser } from "@/api/system/userlist.js";
|
||||
import baseurl from "@/api/baseurl.js";
|
||||
import { selectOrderEvaluate } from "@/api/system/goodsOrder";
|
||||
|
||||
export default {
|
||||
name: "order",
|
||||
data() {
|
||||
return {
|
||||
map: null,
|
||||
baseurl: null,
|
||||
orderStatuslist: [
|
||||
{
|
||||
@ -618,11 +638,54 @@ export default {
|
||||
},
|
||||
created() {
|
||||
this.baseurl = baseurl;
|
||||
this.getList();
|
||||
this.info();
|
||||
this.infos();
|
||||
},
|
||||
methods: {
|
||||
init(query) {
|
||||
this.map = new AMap.Map("container", {
|
||||
resizeEnable: true, //设置地图可缩放
|
||||
zoom: 18, //设置地图的层级
|
||||
center: [query.serveLocationLongitude, query.serveLocationLatitude], //设置地图中心点 更多配置项参照高德官网的配置
|
||||
});
|
||||
var layer = new AMap.LabelsLayer({
|
||||
zooms: [3, 20],
|
||||
zIndex: 1000,
|
||||
// 开启标注避让,默认为开启,v1.4.15 新增属性
|
||||
collision: true,
|
||||
// 开启标注淡入动画,默认为开启,v1.4.15 新增属性
|
||||
animation: true,
|
||||
});
|
||||
this.map.add(layer);
|
||||
var labelMarker = new AMap.LabelMarker({
|
||||
name: "",
|
||||
position: [query.serveLocationLongitude, query.serveLocationLatitude],
|
||||
icon: {
|
||||
type: "image",
|
||||
image: "https://a.amap.com/jsapi_demos/static/images/poi-marker.png",
|
||||
clipOrigin: [280, 8],
|
||||
clipSize: [50, 68],
|
||||
size: [25, 34],
|
||||
anchor: "bottom-center",
|
||||
angel: 0,
|
||||
retina: true,
|
||||
},
|
||||
text: {
|
||||
content: query.serviceLocationName,
|
||||
direction: "top",
|
||||
offset: [0, 0],
|
||||
style: {
|
||||
fontSize: 13,
|
||||
fontWeight: "normal",
|
||||
fillColor: "#fff",
|
||||
padding: "2, 5",
|
||||
backgroundColor: "#22884f",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
layer.add(labelMarker);
|
||||
},
|
||||
//取消预约确定按钮
|
||||
ordercacenl() {
|
||||
var obj = {
|
||||
@ -671,6 +734,7 @@ export default {
|
||||
seeLook(row) {
|
||||
this.loading = true;
|
||||
const id = row.orderNo;
|
||||
this.map = null;
|
||||
appointmentOrderDetails(id).then((res) => {
|
||||
res.data.forEach((e) => {
|
||||
if (e.serviceDate) {
|
||||
@ -679,24 +743,33 @@ export default {
|
||||
}
|
||||
});
|
||||
this.query = res.data[0];
|
||||
this.innerVisible4 = true;
|
||||
if (row.orderStatus == "EVALUATED") {
|
||||
selectOrderEvaluate(id).then((res) => {
|
||||
if (res.data) {
|
||||
if (res.data.evaluateSatisfaction == "COMMONLY") {
|
||||
this.query.evaluateSatisfaction = "一般";
|
||||
} else if (res.data.evaluateSatisfaction == "SATISFIED") {
|
||||
this.query.evaluateSatisfaction = "满意";
|
||||
} else if (res.data.evaluateSatisfaction == "DISSATISFIED") {
|
||||
this.query.evaluateSatisfaction = "不满意";
|
||||
}
|
||||
this.loading = false;
|
||||
this.innerVisible4 = true;
|
||||
} else {
|
||||
this.loading = false;
|
||||
this.innerVisible4 = true;
|
||||
if (res.data) {
|
||||
if (res.data[0].evaluateSatisfaction == "COMMONLY") {
|
||||
this.query.evaluateSatisfaction = "一般";
|
||||
} else if (res.data[0].evaluateSatisfaction == "SATISFIED") {
|
||||
this.query.evaluateSatisfaction = "满意";
|
||||
} else if (res.data[0].evaluateSatisfaction == "DISSATISFIED") {
|
||||
this.query.evaluateSatisfaction = "不满意";
|
||||
}
|
||||
});
|
||||
this.loading = false;
|
||||
this.innerVisible4 = true;
|
||||
setTimeout(() => {
|
||||
this.init(this.query);
|
||||
}, 500);
|
||||
} else {
|
||||
this.loading = false;
|
||||
this.innerVisible4 = true;
|
||||
setTimeout(() => {
|
||||
this.init(this.query);
|
||||
}, 500);
|
||||
}
|
||||
} else if (row.orderStatus == "COMPLETE") {
|
||||
this.loading = false;
|
||||
this.innerVisible4 = true;
|
||||
setTimeout(() => {
|
||||
this.init(this.query);
|
||||
}, 500);
|
||||
} else {
|
||||
this.loading = false;
|
||||
this.innerVisible4 = true;
|
||||
@ -868,5 +941,9 @@ export default {
|
||||
width: 250px;
|
||||
height: 250px;
|
||||
}
|
||||
#container {
|
||||
width: 100%;
|
||||
height: 600px;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
@ -303,6 +303,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="护理站简介" prop="agencyIntroduce">
|
||||
<editor
|
||||
@imgs="imgs"
|
||||
:min-height="62"
|
||||
style="width: 90%; margin: 0 auto"
|
||||
v-model="form.agencyIntroduce"
|
||||
@ -468,6 +469,7 @@ export default {
|
||||
}
|
||||
};
|
||||
return {
|
||||
imgsurl: { pictureUrlList: [] },
|
||||
imageUrl: "",
|
||||
imageUrl2: "",
|
||||
imgtwo: "",
|
||||
@ -604,6 +606,9 @@ export default {
|
||||
this.infos();
|
||||
},
|
||||
methods: {
|
||||
imgs(item) {
|
||||
this.imgsurl.pictureUrlList.push(item);
|
||||
},
|
||||
imgUrl(imgUrl) {
|
||||
this.form.stationPictureUrl = imgUrl;
|
||||
},
|
||||
@ -693,6 +698,11 @@ export default {
|
||||
if (obj.pictureUrlList.length > 0) {
|
||||
updatePicture(obj).then((res) => {});
|
||||
}
|
||||
|
||||
if (this.imgsurl.pictureUrlList.length > 0) {
|
||||
updatePicture(this.imgsurl).then((res) => {});
|
||||
}
|
||||
this.imgsurl = { pictureUrlList: [] };
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
@ -898,8 +908,6 @@ export default {
|
||||
info() {
|
||||
//加个所属区域
|
||||
getListByUser(this.getListByUserquery).then((res) => {
|
||||
// 页面
|
||||
// /所属区域
|
||||
this.nurseStationlist = res.rows;
|
||||
this.total2 = res.total;
|
||||
this.loading = false;
|
||||
|
||||
@ -153,11 +153,11 @@
|
||||
align="center"
|
||||
prop="nurseItemName"
|
||||
/>
|
||||
<el-table-column
|
||||
<!-- <el-table-column
|
||||
label="提前预约时长(h)"
|
||||
align="center"
|
||||
prop="advanceAppointDuration"
|
||||
/>
|
||||
/> -->
|
||||
<el-table-column label="创建时间" align="center" prop="createTime" />
|
||||
<el-table-column label="创建人" align="center" prop="createBy" />
|
||||
<el-table-column
|
||||
@ -251,7 +251,7 @@
|
||||
maxlength="50"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
<!-- <el-form-item
|
||||
label="提前预约时长"
|
||||
prop="nurseStationItem.advanceAppointDuration"
|
||||
>
|
||||
@ -262,6 +262,15 @@
|
||||
type="number"
|
||||
min="0"
|
||||
/>
|
||||
</el-form-item> -->
|
||||
|
||||
<el-form-item label="排序" prop="nurseStationItem.sort">
|
||||
<el-input
|
||||
placeholder="请输入排序"
|
||||
v-model="form.nurseStationItem.sort"
|
||||
maxlength="10"
|
||||
oninput="value=value.replace(/[^\d]/g,'')"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目头像" prop="nurseStationItem.itemPictureUrl">
|
||||
<stationAcatar
|
||||
@ -271,27 +280,18 @@
|
||||
:type="'itemPictureUrl'"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="nurseStationItem.sort">
|
||||
<el-input
|
||||
placeholder="请输入排序"
|
||||
v-model="form.nurseStationItem.sort"
|
||||
maxlength="10"
|
||||
oninput="value=value.replace(/[^\d]/g,'')"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="项目内容简介"
|
||||
prop="nurseStationItem.nurseItemContent"
|
||||
>
|
||||
<el-input
|
||||
<editor
|
||||
@imgs="imgs"
|
||||
:min-height="82"
|
||||
style="width: 90%"
|
||||
maxlength="300"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 4 }"
|
||||
placeholder="请输入内容"
|
||||
style="width: 208px"
|
||||
|
||||
v-model="form.nurseStationItem.nurseItemContent"
|
||||
>
|
||||
</el-input>
|
||||
></editor>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目时长和价格" required>
|
||||
<el-table
|
||||
@ -685,6 +685,7 @@ export default {
|
||||
name: "NurseItem",
|
||||
data() {
|
||||
return {
|
||||
imgsurl: { pictureUrlList: [] },
|
||||
imageUrl: "",
|
||||
imgone: "",
|
||||
handstationlist: [],
|
||||
@ -777,9 +778,9 @@ export default {
|
||||
"nurseStationItem.sort": [
|
||||
{ required: true, message: "排序不能为空", trigger: "blur" },
|
||||
],
|
||||
"nurseStationItem.advanceAppointDuration": [
|
||||
{ required: true, message: "提前预约时长不能为空", trigger: "blur" },
|
||||
],
|
||||
// "nurseStationItem.advanceAppointDuration": [
|
||||
// { required: true, message: "提前预约时长不能为空", trigger: "blur" },
|
||||
// ],
|
||||
"nurseStationItem.itemPictureUrl": [
|
||||
{
|
||||
required: true,
|
||||
@ -802,6 +803,10 @@ export default {
|
||||
// this.getList();
|
||||
},
|
||||
methods: {
|
||||
imgs(item) {
|
||||
console.log(item)
|
||||
this.imgsurl.pictureUrlList.push(item);
|
||||
},
|
||||
imgUrl(imgUrl) {
|
||||
this.form.nurseStationItem.itemPictureUrl = imgUrl;
|
||||
},
|
||||
@ -943,7 +948,10 @@ export default {
|
||||
if (obj.pictureUrlList.length > 0) {
|
||||
updatePicture(obj).then((res) => {});
|
||||
}
|
||||
|
||||
if (this.imgsurl.pictureUrlList.length > 0) {
|
||||
updatePicture(this.imgsurl).then((res) => {});
|
||||
}
|
||||
this.imgsurl = { pictureUrlList: [] };
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
@ -1110,6 +1118,7 @@ export default {
|
||||
this.form.nurseStationItemPrices.forEach((e) => {
|
||||
e.price = Number(e.price);
|
||||
});
|
||||
this.form.nurseStationItem.advanceAppointDuration = 0;
|
||||
updateNurseItem(this.form).then((response) => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
@ -1119,6 +1128,7 @@ export default {
|
||||
this.form.nurseStationItemPrices.forEach((e) => {
|
||||
e.price = Number(e.price);
|
||||
});
|
||||
this.form.nurseStationItem.advanceAppointDuration = 0;
|
||||
addNurseItem(this.form).then((response) => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.$forceUpdate();
|
||||
|
||||
@ -797,7 +797,12 @@ export default {
|
||||
const userId = row.userId || this.ids;
|
||||
getUser(userId).then((response) => {
|
||||
this.form = response.data;
|
||||
this.form.nurseStationIds = Number(this.form.nurseStationIds);
|
||||
if (!this.form.nurseStationIds) {
|
||||
this.form.nurseStationIds = ''
|
||||
} else {
|
||||
this.form.nurseStationIds = Number(this.form.nurseStationIds);
|
||||
|
||||
}
|
||||
// if (
|
||||
// !this.form.nurseStationIds ||
|
||||
// this.form.nurseStationIds == null ||
|
||||
@ -843,8 +848,7 @@ export default {
|
||||
this.$router.push("/system/user-auth/role/" + userId);
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm: function () {
|
||||
console.log(this.form);
|
||||
submitForm: function () {
|
||||
this.$refs["form"].validate((valid) => {
|
||||
if (valid) {
|
||||
// this.form.nurseStationIds = this.form.nurseStationIds.join(",");
|
||||
@ -853,13 +857,26 @@ export default {
|
||||
// obj.push(this.form.nurseStationIds);
|
||||
// console.log(obj)
|
||||
// this.form.nurseStationIds = obj;
|
||||
console.log(this.form);
|
||||
|
||||
if (this.form.userId != undefined) {
|
||||
updateUser(this.form).then((response) => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
if (!this.form.nurseStationIds) {
|
||||
this.form.nurseStationIds = null
|
||||
updateUser(this.form).then((response) => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
// console.log('bbb',this.form)
|
||||
});
|
||||
} else {
|
||||
this.form.nurseStationIds = Number(this.form.nurseStationIds);
|
||||
updateUser(this.form).then((response) => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
// console.log('bbb',this.form)
|
||||
});
|
||||
}
|
||||
|
||||
} else {
|
||||
addUser(this.form).then((response) => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
|
||||
238
vue.config.js
238
vue.config.js
@ -2,7 +2,7 @@
|
||||
const path = require('path')
|
||||
|
||||
function resolve(dir) {
|
||||
return path.join(__dirname, dir)
|
||||
return path.join(__dirname, dir)
|
||||
}
|
||||
|
||||
const CompressionPlugin = require('compression-webpack-plugin')
|
||||
@ -15,122 +15,124 @@ const port = process.env.port || process.env.npm_config_port || 81 // 端口
|
||||
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
|
||||
// 这里只列一部分,具体配置参考文档
|
||||
module.exports = {
|
||||
// 部署生产环境和开发环境下的URL。
|
||||
// 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
|
||||
// 例如 https://www.xinyilu.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.xinyilu.vip/admin/,则设置 baseUrl 为 /admin/。
|
||||
publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
|
||||
// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
|
||||
outputDir: 'dist',
|
||||
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
|
||||
assetsDir: 'static',
|
||||
// 是否开启eslint保存检测,有效值:ture | false | 'error'
|
||||
lintOnSave: process.env.NODE_ENV === 'development',
|
||||
// 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
|
||||
productionSourceMap: false,
|
||||
// webpack-dev-server 相关配置
|
||||
devServer: {
|
||||
host: '0.0.0.0',
|
||||
port: port,
|
||||
open: true,
|
||||
proxy: {
|
||||
// detail: https://cli.vuejs.org/config/#devserver-proxy
|
||||
[process.env.VUE_APP_BASE_API]: {
|
||||
target: `http://localhost:8080`,
|
||||
changeOrigin: true,
|
||||
pathRewrite: {
|
||||
['^' + process.env.VUE_APP_BASE_API]: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
disableHostCheck: true
|
||||
},
|
||||
css: {
|
||||
loaderOptions: {
|
||||
sass: {
|
||||
sassOptions: { outputStyle: "expanded" }
|
||||
}
|
||||
}
|
||||
},
|
||||
configureWebpack: {
|
||||
name: name,
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': resolve('src')
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
// http://doc.xinyilu.vip/xinyilu-vue/other/faq.html#使用gzip解压缩静态文件
|
||||
new CompressionPlugin({
|
||||
cache: false, // 不启用文件缓存
|
||||
test: /\.(js|css|html)?$/i, // 压缩文件格式
|
||||
filename: '[path].gz[query]', // 压缩后的文件名
|
||||
algorithm: 'gzip', // 使用gzip压缩
|
||||
minRatio: 0.8 // 压缩率小于1才会压缩
|
||||
})
|
||||
],
|
||||
},
|
||||
chainWebpack(config) {
|
||||
config.plugins.delete('preload') // TODO: need test
|
||||
config.plugins.delete('prefetch') // TODO: need test
|
||||
|
||||
// set svg-sprite-loader
|
||||
config.module
|
||||
.rule('svg')
|
||||
.exclude.add(resolve('src/assets/icons'))
|
||||
.end()
|
||||
config.module
|
||||
.rule('icons')
|
||||
.test(/\.svg$/)
|
||||
.include.add(resolve('src/assets/icons'))
|
||||
.end()
|
||||
.use('svg-sprite-loader')
|
||||
.loader('svg-sprite-loader')
|
||||
.options({
|
||||
symbolId: 'icon-[name]'
|
||||
})
|
||||
.end()
|
||||
|
||||
config
|
||||
.when(process.env.NODE_ENV !== 'development',
|
||||
config => {
|
||||
config
|
||||
.plugin('ScriptExtHtmlWebpackPlugin')
|
||||
.after('html')
|
||||
.use('script-ext-html-webpack-plugin', [{
|
||||
// `runtime` must same as runtimeChunk name. default is `runtime`
|
||||
inline: /runtime\..*\.js$/
|
||||
}])
|
||||
.end()
|
||||
config
|
||||
.optimization.splitChunks({
|
||||
chunks: 'all',
|
||||
cacheGroups: {
|
||||
libs: {
|
||||
name: 'chunk-libs',
|
||||
test: /[\\/]node_modules[\\/]/,
|
||||
priority: 10,
|
||||
chunks: 'initial' // only package third parties that are initially dependent
|
||||
},
|
||||
elementUI: {
|
||||
name: 'chunk-elementUI', // split elementUI into a single package
|
||||
priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
|
||||
test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
|
||||
},
|
||||
commons: {
|
||||
name: 'chunk-commons',
|
||||
test: resolve('src/components'), // can customize your rules
|
||||
minChunks: 3, // minimum common number
|
||||
priority: 5,
|
||||
reuseExistingChunk: true
|
||||
// 部署生产环境和开发环境下的URL。
|
||||
// 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
|
||||
// 例如 https://www.xinyilu.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.xinyilu.vip/admin/,则设置 baseUrl 为 /admin/。
|
||||
publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
|
||||
// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
|
||||
outputDir: 'dist',
|
||||
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
|
||||
assetsDir: 'static',
|
||||
// 是否开启eslint保存检测,有效值:ture | false | 'error'
|
||||
lintOnSave: process.env.NODE_ENV === 'development',
|
||||
// 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
|
||||
productionSourceMap: false,
|
||||
// webpack-dev-server 相关配置
|
||||
devServer: {
|
||||
host: '0.0.0.0',
|
||||
port: port,
|
||||
open: true,
|
||||
proxy: {
|
||||
// detail: https://cli.vuejs.org/config/#devserver-proxy
|
||||
[process.env.VUE_APP_BASE_API]: {
|
||||
target: `http://localhost:8080`,
|
||||
changeOrigin: true,
|
||||
pathRewrite: {
|
||||
['^' + process.env.VUE_APP_BASE_API]: ''
|
||||
}
|
||||
}
|
||||
})
|
||||
config.optimization.runtimeChunk('single'),
|
||||
{
|
||||
from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件
|
||||
to: './' //到根目录下
|
||||
}
|
||||
}
|
||||
},
|
||||
disableHostCheck: true
|
||||
},
|
||||
css: {
|
||||
loaderOptions: {
|
||||
sass: {
|
||||
sassOptions: { outputStyle: "expanded" }
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
},
|
||||
configureWebpack: {
|
||||
externals: {
|
||||
'AMap': 'AMap'
|
||||
},
|
||||
name: name,
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': resolve('src')
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
// http://doc.xinyilu.vip/xinyilu-vue/other/faq.html#使用gzip解压缩静态文件
|
||||
new CompressionPlugin({
|
||||
cache: false, // 不启用文件缓存
|
||||
test: /\.(js|css|html)?$/i, // 压缩文件格式
|
||||
filename: '[path].gz[query]', // 压缩后的文件名
|
||||
algorithm: 'gzip', // 使用gzip压缩
|
||||
minRatio: 0.8 // 压缩率小于1才会压缩
|
||||
})
|
||||
],
|
||||
},
|
||||
chainWebpack(config) {
|
||||
config.plugins.delete('preload') // TODO: need test
|
||||
config.plugins.delete('prefetch') // TODO: need test
|
||||
|
||||
// set svg-sprite-loader
|
||||
config.module
|
||||
.rule('svg')
|
||||
.exclude.add(resolve('src/assets/icons'))
|
||||
.end()
|
||||
config.module
|
||||
.rule('icons')
|
||||
.test(/\.svg$/)
|
||||
.include.add(resolve('src/assets/icons'))
|
||||
.end()
|
||||
.use('svg-sprite-loader')
|
||||
.loader('svg-sprite-loader')
|
||||
.options({
|
||||
symbolId: 'icon-[name]'
|
||||
})
|
||||
.end()
|
||||
|
||||
config
|
||||
.when(process.env.NODE_ENV !== 'development',
|
||||
config => {
|
||||
config
|
||||
.plugin('ScriptExtHtmlWebpackPlugin')
|
||||
.after('html')
|
||||
.use('script-ext-html-webpack-plugin', [{
|
||||
// `runtime` must same as runtimeChunk name. default is `runtime`
|
||||
inline: /runtime\..*\.js$/
|
||||
}])
|
||||
.end()
|
||||
config
|
||||
.optimization.splitChunks({
|
||||
chunks: 'all',
|
||||
cacheGroups: {
|
||||
libs: {
|
||||
name: 'chunk-libs',
|
||||
test: /[\\/]node_modules[\\/]/,
|
||||
priority: 10,
|
||||
chunks: 'initial' // only package third parties that are initially dependent
|
||||
},
|
||||
elementUI: {
|
||||
name: 'chunk-elementUI', // split elementUI into a single package
|
||||
priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
|
||||
test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
|
||||
},
|
||||
commons: {
|
||||
name: 'chunk-commons',
|
||||
test: resolve('src/components'), // can customize your rules
|
||||
minChunks: 3, // minimum common number
|
||||
priority: 5,
|
||||
reuseExistingChunk: true
|
||||
}
|
||||
}
|
||||
})
|
||||
config.optimization.runtimeChunk('single'), {
|
||||
from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件
|
||||
to: './' //到根目录下
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user