Selaa lähdekoodia

tenant 优化

zhuangyunsheng 1 kuukausi sitten
vanhempi
commit
cacab0c7c8

+ 1 - 1
.env.development

@@ -4,7 +4,7 @@ NODE_ENV = development
 # 接口地址
 VUE_APP_ICONIFY_BASEURL = https://api.iconify.design
 VUE_APP_ZEROAPI_BASEURL = http://www.qdeasydo.com
-VUE_APP_MES_BASEURL = http://192.168.101.93:8080
+VUE_APP_MES_BASEURL = http://192.168.101.93:10160
 
 # 本地端口
 VUE_APP_PORT = 4400

+ 3 - 3
src/api/model/sales.js

@@ -52,12 +52,12 @@ export default {
         url: "/mes/salePerformance",
         
         census: async function (data = {}) {
-            if (store.state.tenant.tenantId !== "0") data.tenantId = store.state.tenant.tenantId
-            return await http.post(`${this.url}/getTotalPrice`)
+            data.tenantId = store.state.tenant.tenantId
+            return await http.post(`${this.url}/getTotalPrice`, data)
         },
 
         echart: async function (data = {}) {
-            if (store.state.tenant.tenantId !== "0") data.tenantId = store.state.tenant.tenantId
+            data.tenantId = store.state.tenant.tenantId
             return await http.post(`${this.url}/getEcharts`, data)
         }
     }

+ 3 - 5
src/components/scFormTable/index.vue

@@ -47,7 +47,6 @@ import domZIndex from "dom-zindex";
 domZIndex.setCurrent(domZIndex.getMax() + 1);
 
 import XEUtils from "xe-utils";
-import store from "@/store";
 import scUploadFile from "@/components/scUpload/file";
 import selectTable from "@/components/scFormTable/detail";
 
@@ -57,7 +56,6 @@ const props = defineProps({
     disabled: { type: Boolean, default: false },
     tableKey: { type: String, default: "" },
     addTemplate: { type: Object, default: () => ({}) },
-    tenantId: { type: String, default: store.state.tenant.tenantId },
     
     layouts: { type: Array, default: () => [["Top", "Form"], ["Toolbar", "Table", "Bottom", "Pager"]] },
     rowKey: { type: String, default: "id" },
@@ -135,7 +133,7 @@ const selectTableOptions = reactive({
     multiple: true,
     paramsColums: [
         ...XEUtils.get(props.selectOptions, "paramsColums", []),
-        { column: "tenantId", defaultValue: computed(() => props.tenantId) }
+        { column: "tenantId", defaultValue: inject("tenantId") }
     ],
     options: {
         rowKey: props.rowKey,
@@ -144,6 +142,7 @@ const selectTableOptions = reactive({
 });
 
 watch(() => gridOptions.data, val => $emit("update:modelValue", val), { deep: true });
+watch(inject("tenantId"), (newVal, oldVal) => newVal !== oldVal && (gridOptions.data = []), { immediate: false });
 
 const xGrid = ref();
 const rowAdd = async () => {
@@ -178,8 +177,7 @@ const validateFormTable = async () => {
 }
 
 defineExpose({
-    validateFormTable,
-    clearTable: () => gridOptions.data = []
+    validateFormTable
 });
 </script>
 

+ 3 - 7
src/components/scTableInput/index.vue

@@ -21,13 +21,11 @@
 
 <script setup>
 import XEUtils from "xe-utils";
-import store from "@/store";
 import selectTable from "@/components/scFormTable/detail";
 
 const $emit = defineEmits(["update:modelValue"]);
 const props = defineProps({
     modelValue: { type: Object, default: () => ({}) },
-    tenantId: { type: String, default: store.state.tenant.tenantId },
     valueKey: { type: String, default: () => "id" },
     tableKey: { type: String, default: () => "" },
     hideShow: { type: Boolean, default: () => false },
@@ -37,11 +35,9 @@ const props = defineProps({
 
 const dialog = ref(false);
 const defaultValue = ref(XEUtils.get(props.modelValue, props.valueKey, null));
-const tenantParamsColums = reactive([...props.paramsColums, { column: "tenantId", defaultValue: computed(() => props.tenantId) }]);
+const tenantParamsColums = reactive([...props.paramsColums, { column: "tenantId", defaultValue: inject("tenantId") }]);
 
-watch(() => props.modelValue, value => {
-    if (defaultValue.value != XEUtils.get(value, props.valueKey, null)) defaultValue.value = XEUtils.get(value, props.valueKey, null);
-}, { deep: true });
+watch(inject("tenantId"), (newVal, oldVal) => newVal !== oldVal && success(), { immediate: false });
 
 const selectTableRef = ref();
 const show = () => {
@@ -51,7 +47,7 @@ const show = () => {
     }
 }
 
-const success = array => {
+const success = (array = []) => {
     defaultValue.value = XEUtils.get(XEUtils.first(array) || {}, props.valueKey, null);
     $emit("update:modelValue", XEUtils.first(array) || {});
 }

+ 9 - 5
src/store/modules/tenant.js

@@ -10,10 +10,13 @@ export default {
 	},
 
 	mutations: {
-        SET_tenantId(state, list) {
-            state.tenants = list
-            const tenantData = XEUtils.find(list, item => item.id == state.tenantId)
-            if (!tenantData) state.tenantId = TOOL.data.get("USER_INFO").tenantId
+        SET_tenants(state, data) {
+            state.tenants = data
+        },
+
+        SET_tenantId(state, data = state.tenantId) {
+            const tenantData = XEUtils.find(state.tenants, item => item.id == data)
+            state.tenantId = XEUtils.get(tenantData, "id", TOOL.data.get("USER_INFO").tenantId)
             state.tenantName = XEUtils.get(tenantData, "name", TOOL.data.get("USER_INFO").tenant.name)
             TOOL.data.set("TENANT_ID", state.tenantId)
         }
@@ -25,7 +28,8 @@ export default {
             XEUtils.get(TOOL.data.get("USER_INFO"), "tenantId", "0") !== "0" && XEUtils.set(query, "id", TOOL.data.get("USER_INFO").tenantId)
 
             API.system.tenant.all(query).then(res => {
-				commit("SET_tenantId", res)
+				commit("SET_tenants", res)
+				commit("SET_tenantId")
                 commit("setRouteShow", true)
             }).catch(() => {
                 commit("setRouteShow", false)

+ 1 - 0
src/style/fix.scss

@@ -22,6 +22,7 @@
 	--el-color-primary-dark-9: #060f19;
 }
 
+.no-border-top {border-top: none!important;} // el-descriptions + el-descriptions
 .el-menu {border: none!important;}
 .el-form-item-msg {font-size: 12px;color: #999;clear: both;width: 100%;}
 .el-container {height: 100%;}

+ 6 - 4
src/views/basic/qualityPlan/desc.vue

@@ -11,13 +11,15 @@
                         <el-descriptions-item v-if="!descData.reviewUserName" label="审批状态" :span="ismobile ? 3 : 1" label-align="right" min-width="120">{{ XEUtils.get(reviewStatusDic, descData.reviewStatus, descData.reviewStatus) }}</el-descriptions-item>
                         <el-descriptions-item v-if="descData.reviewUserName && mode == 'approval'" label="审批人员" :span="ismobile ? 3 : 1" label-align="right" min-width="120">{{ descData.reviewUserName }}</el-descriptions-item>
                         <el-descriptions-item label="质检人员" :span="ismobile ? 3 : 1" label-align="right">{{ descData.inspectUserName }}</el-descriptions-item>
-                        <el-descriptions-item label="方案类型" :span="ismobile ? 3 : descData.type == 'full' ? 2 : 1" label-align="right">{{ XEUtils.get(qualityPlanTypeDic, descData.type, descData.type) }}</el-descriptions-item>
+                        <el-descriptions-item label="方案类型" :span="ismobile ? 3 : 1" label-align="right">{{ XEUtils.get(qualityPlanTypeDic, descData.type, descData.type) }}</el-descriptions-item>
                         <template v-if="descData.type == 'sampling'">
                             <el-descriptions-item label="抽检比例" :span="ismobile ? 3 : 1" label-align="right">{{ descData.sampleRate }}%</el-descriptions-item>
-                            <el-descriptions-item label="合格率" :span="3" label-align="right">{{ descData.passedRate }}%</el-descriptions-item>
+                            <el-descriptions-item label="合格率" :span="ismobile ? 3 : 1" label-align="right">{{ descData.passedRate }}%</el-descriptions-item>
                         </template>
-                        <el-descriptions-item label="概要" :span="3" label-align="right">{{ descData.remark }}</el-descriptions-item>
-                        <el-descriptions-item label="附件" :span="3" label-align="right">
+                    </el-descriptions>
+                    <el-descriptions :column="1" label-width="140" border>
+                        <el-descriptions-item label-class-name="no-border-top" class-name="no-border-top" label="概要" label-align="right">{{ descData.remark }}</el-descriptions-item>
+                        <el-descriptions-item label="附件" label-align="right">
                             <sc-upload-file v-model="descData.fileList" hideAdd disabled></sc-upload-file>
                         </el-descriptions-item>
                     </el-descriptions>

+ 4 - 3
src/views/process/line/desc.vue

@@ -11,9 +11,10 @@
                         <el-descriptions-item label="工艺路线状态" :span="ismobile ? 3 : 1" label-align="right" min-width="120">{{ XEUtils.get(statusDic, descData.status, descData.status) }}</el-descriptions-item>
                         <el-descriptions-item label="时间单位" :span="ismobile ? 3 : 1" label-align="right">{{ XEUtils.get(processDic.timeUnit, descData.timeUnit, descData.timeUnit) }}</el-descriptions-item>
                         <el-descriptions-item label="版本号" :span="ismobile ? 3 : 1" label-align="right">{{ descData.version }}</el-descriptions-item>
-                        <el-descriptions-item label="适用产品" :span="3" label-align="right">所有产品</el-descriptions-item>
-                        <el-descriptions-item label="概要" :span="3" label-align="right">{{ descData.remark }}</el-descriptions-item>
-                        <el-descriptions-item label="附件" :span="3" label-align="right">
+                    </el-descriptions>
+                    <el-descriptions :column="1" label-width="140" border>
+                        <el-descriptions-item label-class-name="no-border-top" class-name="no-border-top" label="概要" label-align="right">{{ descData.remark }}</el-descriptions-item>
+                        <el-descriptions-item label="附件" label-align="right">
                             <sc-upload-file v-model="descData.fileList" hideAdd disabled></sc-upload-file>
                         </el-descriptions-item>
                     </el-descriptions>

+ 3 - 3
src/views/process/line/detail.vue

@@ -6,7 +6,7 @@
                     <el-row>
                         <el-col v-if="$store.state.tenant.tenantId === '0'" :md="8" :xs="24">
                             <el-form-item label="所属租户" prop="tenantId">
-                                <el-select v-if="!form.id" v-model="form.tenantId" filterable placeholder="请选择所属租户" @change="tenantChange">
+                                <el-select v-if="!form.id" v-model="form.tenantId" filterable placeholder="请选择所属租户">
                                     <el-option v-for="item in $store.state.tenant.tenants" :key="item.id" :label="item.name" :value="item.id"></el-option>
                                 </el-select>
                                 <el-input v-else v-model="tenantName" readonly></el-input>
@@ -38,7 +38,7 @@
                 </el-collapse-item>
 
                 <el-collapse-item title="加工路线" name="line">
-                    <sc-form-table ref="formTableRef" v-model="form.detailList" v-bind="tableOptions" :tenantId="form.tenantId"></sc-form-table>
+                    <sc-form-table ref="formTableRef" v-model="form.detailList" v-bind="tableOptions"></sc-form-table>
                 </el-collapse-item>
 
                 <!-- <el-collapse-item title="质检方案" name="plan">
@@ -100,6 +100,7 @@ const titleMap = reactive({
     upgrade: "发布新版本"
 });
 
+provide("tenantId", computed(() => form.value.tenantId));
 const tenantName = computed(() => XEUtils.get(XEUtils.find(store.state.tenant.tenants, item => item.id == form.value.tenantId), "name"));
 const oldData = reactive({
     code: null,
@@ -154,7 +155,6 @@ const setData = (data, modeKey = "edit") => {
 
 const formRef = ref();
 const formTableRef = ref();
-const tenantChange = () => formTableRef.value.clearTable();
 const submit = () => {
     formRef.value.validate(async valid => {
         if (valid) {

+ 4 - 4
src/views/production/bom/detail.vue

@@ -6,7 +6,7 @@
                     <el-row>
                         <el-col v-if="$store.state.tenant.tenantId === '0'" :md="8" :xs="24">
                             <el-form-item label="所属租户" prop="tenantId">
-                                <el-select v-if="!form.id" v-model="form.tenantId" filterable placeholder="请选择所属租户" @change="tenantChange">
+                                <el-select v-if="!form.id" v-model="form.tenantId" filterable placeholder="请选择所属租户">
                                     <el-option v-for="item in $store.state.tenant.tenants" :key="item.id" :label="item.name" :value="item.id"></el-option>
                                 </el-select>
                                 <el-input v-else v-model="tenantName" readonly></el-input>
@@ -31,7 +31,7 @@
                     <el-row>
                         <el-col :md="8" :xs="24">
                             <el-form-item label="产品编号" prop="material.code">
-                                <sc-table-input v-model="form.material" :hideShow="!!form.id" placeholder="选择产品" v-bind="selectOptions" :tenantId="form.tenantId"></sc-table-input>
+                                <sc-table-input v-model="form.material" :hideShow="!!form.id" placeholder="选择产品" v-bind="selectOptions"></sc-table-input>
                             </el-form-item>
                         </el-col>
                         <el-col :md="8" :xs="24">
@@ -58,7 +58,7 @@
                 </el-collapse-item>
 
                 <el-collapse-item title="子件信息" name="children">
-                    <sc-form-table ref="formTableRef" v-model="form.childrenList" v-bind="tableOptions" :tenantId="form.tenantId"></sc-form-table>
+                    <sc-form-table ref="formTableRef" v-model="form.childrenList" v-bind="tableOptions"></sc-form-table>
                 </el-collapse-item>
             </el-collapse>
         </el-form>
@@ -90,6 +90,7 @@ const titleMap = reactive({
     edit: "修改BOM单"
 });
 
+provide("tenantId", computed(() => form.value.tenantId));
 const tenantName = computed(() => XEUtils.get(XEUtils.find(store.state.tenant.tenants, item => item.id == form.value.tenantId), "name"));
 const form = ref({
     id: null,
@@ -125,7 +126,6 @@ const setData = async (data = {}, model = "add") => {
 
 const formRef = ref();
 const formTableRef = ref();
-const tenantChange = () => (formTableRef.value.clearTable(), XEUtils.clear(form.value.material, null));
 const submit = () => {
     formRef.value.validate(async valid => {
         if (valid) {

+ 5 - 3
src/views/sales/order/desc.vue

@@ -15,9 +15,11 @@
                         <el-descriptions-item label="实际交期" :span="ismobile ? 3 : 1" label-align="right" min-width="120">{{ descData.deliveryDate }}</el-descriptions-item>
                         <el-descriptions-item label="业务员" :span="ismobile ? 3 : 1" label-align="right">{{ descData.managerName }}</el-descriptions-item>
                         <el-descriptions-item label="收货日期" :span="ismobile ? 3 : 1" label-align="right" min-width="120">{{ descData.actualReceiveDate }}</el-descriptions-item>
-                        <el-descriptions-item label="客户收货地址" :span="3" label-align="right">{{ descData.deliveryAddress }}</el-descriptions-item>
-                        <el-descriptions-item label="概要" :span="3" label-align="right">{{ descData.remark }}</el-descriptions-item>
-                        <el-descriptions-item label="附件" :span="3" label-align="right">
+                    </el-descriptions>
+                    <el-descriptions :column="1" label-width="140" border>
+                        <el-descriptions-item label-class-name="no-border-top" class-name="no-border-top" label="客户收货地址" label-align="right">{{ descData.deliveryAddress }}</el-descriptions-item>
+                        <el-descriptions-item label="概要" label-align="right">{{ descData.remark }}</el-descriptions-item>
+                        <el-descriptions-item label="附件" label-align="right">
                             <sc-upload-file v-model="descData.fileList" hideAdd disabled></sc-upload-file>
                         </el-descriptions-item>
                     </el-descriptions>

+ 5 - 5
src/views/sales/order/detail.vue

@@ -6,7 +6,7 @@
                     <el-row>
                         <el-col v-if="$store.state.tenant.tenantId === '0'" :md="8" :xs="24">
                             <el-form-item label="所属租户" prop="tenantId">
-                                <el-select v-if="!form.id" v-model="form.tenantId" filterable placeholder="请选择所属租户" @change="tenantChange">
+                                <el-select v-if="!form.id" v-model="form.tenantId" filterable placeholder="请选择所属租户">
                                     <el-option v-for="item in $store.state.tenant.tenants" :key="item.id" :label="item.name" :value="item.id"></el-option>
                                 </el-select>
                                 <el-input v-else v-model="tenantName" readonly></el-input>
@@ -24,7 +24,7 @@
                         </el-col>
                         <el-col :md="8" :xs="24">
                             <el-form-item label="客户" prop="customer.id">
-                                <sc-table-input v-model="form.customer" placeholder="选择客户" v-bind="selectOptions" :tenantId="form.tenantId"></sc-table-input>
+                                <sc-table-input v-model="form.customer" placeholder="选择客户" v-bind="selectOptions"></sc-table-input>
                             </el-form-item>
                         </el-col>
                         <el-col :md="8" :xs="24">
@@ -40,7 +40,7 @@
                         <el-col :md="8" :xs="24">
                             <el-form-item label="业务员">
                                 <el-select v-model="form.managerId" clearable placeholder="请选择业务员">
-                                    <el-option v-for="item in users" :key="item.id" :label="item.nickName" :value="item.id" />
+                                    <el-option v-for="item in users.filter(r => r.tenantId == form.tenantId)" :key="item.id" :label="item.nickName" :value="item.id" />
                                 </el-select>
                             </el-form-item>
                         </el-col>
@@ -53,7 +53,7 @@
                 </el-collapse-item>
 
                 <el-collapse-item title="产品信息" name="material">
-                    <sc-form-table ref="formTableRef" v-model="form.childrenList" v-bind="tableOptions" :tenantId="form.tenantId"></sc-form-table>
+                    <sc-form-table ref="formTableRef" v-model="form.childrenList" v-bind="tableOptions"></sc-form-table>
                 </el-collapse-item>
 
                 <el-collapse-item title="金额信息" name="amount">
@@ -123,6 +123,7 @@ const titleMap = reactive({
 });
 
 const users = ref([]);
+provide("tenantId", computed(() => form.value.tenantId));
 const tenantName = computed(() => XEUtils.get(XEUtils.find(store.state.tenant.tenants, item => item.id == form.value.tenantId), "name"));
 const form = ref({
     id: null,
@@ -171,7 +172,6 @@ const setData = data => {
 
 const formRef = ref();
 const formTableRef = ref();
-const tenantChange = () => (formTableRef.value.clearTable(), XEUtils.clear(form.value.material, null));
 const submit = () => {
     formRef.value.validate(async valid => {
         if (valid) {

+ 9 - 38
src/views/sales/performance/components/line.vue

@@ -4,14 +4,14 @@
             <el-radio-button v-for="(item, key) in radioDic" :key="key" :label="key">{{ item.label }}</el-radio-button>
         </el-radio-group>
         
-        <vxe-date-range-picker v-if="query.type == 'year'" v-model="query.year" type="year" transfer @change="pickerChange"></vxe-date-range-picker>
-        <vxe-date-range-picker v-if="query.type == 'quarter'" v-model="query.quarter" type="quarter" label-format="yyyy-Qq" transfer @change="pickerChange"></vxe-date-range-picker>
-        <vxe-date-range-picker v-if="query.type == 'month'" v-model="query.month" type="month" transfer @change="pickerChange"></vxe-date-range-picker>
-        <vxe-date-range-picker v-if="query.type == 'day'" v-model="query.day" transfer @change="pickerChange"></vxe-date-range-picker>
+        <vxe-date-range-picker v-if="query.type == 'year'" style="width: 150px;" v-model="query.year" type="year" transfer @change="pickerChange"></vxe-date-range-picker>
+        <vxe-date-range-picker v-if="query.type == 'quarter'" style="width: 200px;" v-model="query.quarter" type="quarter" label-format="yyyy-Qq" transfer @change="pickerChange"></vxe-date-range-picker>
+        <vxe-date-range-picker v-if="query.type == 'month'" style="width: 190px;" v-model="query.month" type="month" transfer @change="pickerChange"></vxe-date-range-picker>
+        <vxe-date-range-picker v-if="query.type == 'day'" style="width: 240px;" v-model="query.day" transfer @change="pickerChange"></vxe-date-range-picker>
     </el-header>
 
     <div class="echart-panel">
-        <scEcharts clearCache :option="option"></scEcharts>
+        <scEcharts :option="option" clearCache></scEcharts>
     </div>
 </template>
 
@@ -21,7 +21,7 @@ import XEUtils from "xe-utils";
 
 import API from "@/api";
 import store from "@/store";
-import { radioDic, lineSeriesDefault } from "../main";
+import { radioDic, lineSeries } from "../main";
 watch(() => store.state.tenant.tenantId, () => getEcharts());
 
 const query = reactive({
@@ -65,37 +65,7 @@ const getEcharts = () => {
     const beginDate = XEUtils.first(query[query.type]), endDate = moment(XEUtils.last(query[query.type])).endOf(query.type).format("YYYY-MM-DD");
     option.xAxis.data = radioDic[query.type].generateXAxis(beginDate, endDate);
 
-    API.sales.performance.echart({ type: query.type, beginDate, endDate }).then(res => {
-        if (query.type == "day") {
-            option.series = [{
-                ...lineSeriesDefault[1],
-                data: XEUtils.map(option.xAxis.data, date => XEUtils.get(XEUtils.find(res.actualList, item => item.date == date), "price", 0))
-            }];
-        } else {
-            option.series = [{
-                ...lineSeriesDefault[0],
-                data: XEUtils.map(option.xAxis.data, date => XEUtils.get(XEUtils.find(res.planList, item => item.date2 == date), "price", 0))
-            }, {
-                ...lineSeriesDefault[1],
-                data: XEUtils.map(option.xAxis.data, date => XEUtils.get(XEUtils.find(res.actualList, item => item.date2 == date), "price", 0))
-            }];
-        }
-    }).catch(() => {
-        if (query.type == "day") {
-            option.series = [{
-                ...lineSeriesDefault[1],
-                data: new Array(option.xAxis.data.length).fill(0)
-            }];
-        } else {
-            option.series = [{
-                ...lineSeriesDefault[0],
-                data: new Array(option.xAxis.data.length).fill(0)
-            }, {
-                ...lineSeriesDefault[1],
-                data: new Array(option.xAxis.data.length).fill(0)
-            }];
-        }
-    });
+    API.sales.performance.echart({ type: query.type, beginDate, endDate }).then(res => option.series = lineSeries(query.type, option.xAxis.data, res)).catch(() => option.series = lineSeries(query.type, option.xAxis.data, {}));
 }
 
 getEcharts();
@@ -104,8 +74,9 @@ getEcharts();
 <style scoped>
 .el-header {height: fit-content;padding: 0;border: none;}
 .el-header :deep(.el-radio-group) {flex-wrap: nowrap;}
-.el-header :deep(.vxe-date-range-picker) {width: 240px;}
+.el-header :deep(.vxe-date-range-picker) {flex-direction: row-reverse;}
 .el-header :deep(.vxe-date-range-picker) .vxe-date-range-picker--inner {text-align: center;}
+.el-header :deep(.vxe-date-range-picker) .vxe-date-range-picker--control-icon {padding-left: .5em;padding-right: 0;}
 
 .echart-panel {flex: 1;}
 </style>

+ 40 - 31
src/views/sales/performance/main.js

@@ -1,4 +1,5 @@
 import moment from "moment";
+import XEUtils from "xe-utils";
 
 export const radioDic = {
     year: {
@@ -49,34 +50,42 @@ export const radioDic = {
     }
 }
 
-export const lineSeriesDefault = [{
-    type: "line",
-    name: "计划销售额",
-    areaStyle: {
-        origin: "start",
-        color: {
-            type: "linear", x: 0, y: 0, x2: 0, y2: 1,
-            colorStops: [
-                { offset: 0, color: "rgba(64, 158, 255, 1)" },
-                { offset: 1, color: "rgba(64, 158, 255, 0)" }
-            ]
-        }
-    },
-    animationDuration: 2500,
-    animationDurationUpdate: 2500
-}, {
-    type: "line",
-    name: "实际销售额",
-    areaStyle: {
-        origin: "start",
-        color: {
-            type: "linear", x: 0, y: 0, x2: 0, y2: 1,
-            colorStops: [
-                { offset: 0, color: "rgba(54, 206, 158, 1)" },
-                { offset: 1, color: "rgba(54, 206, 158, 0)" }
-            ]
-        }
-    },
-    animationDuration: 2500,
-    animationDurationUpdate: 2500
-}]
+export const lineSeries = (type, xAxisData, { planList, actualList }) => {
+    const planSerie = {
+        type: "line",
+        name: "计划销售额",
+        data: XEUtils.map(xAxisData, date => XEUtils.get(XEUtils.find(planList, item => item.date2 == date), "price", 0)),
+        areaStyle: {
+            origin: "start",
+            color: {
+                type: "linear", x: 0, y: 0, x2: 0, y2: 1,
+                colorStops: [
+                    { offset: 0, color: "rgba(64, 158, 255, 1)" },
+                    { offset: 1, color: "rgba(64, 158, 255, 0)" }
+                ]
+            }
+        },
+        animationDuration: 2500,
+        animationDurationUpdate: 2500
+    }
+    const actualSerie = {
+        type: "line",
+        name: "实际销售额",
+        data: XEUtils.map(xAxisData, date => XEUtils.get(XEUtils.find(actualList, item => item[type == "day" ? "date" : "date2"] == date), "price", 0)),
+        areaStyle: {
+            origin: "start",
+            color: {
+                type: "linear", x: 0, y: 0, x2: 0, y2: 1,
+                colorStops: [
+                    { offset: 0, color: "rgba(54, 206, 158, 1)" },
+                    { offset: 1, color: "rgba(54, 206, 158, 0)" }
+                ]
+            }
+        },
+        animationDuration: 2500,
+        animationDurationUpdate: 2500
+    }
+
+    if (type == "day") return [actualSerie]
+    return [planSerie, actualSerie]
+}

+ 2 - 2
vue.config.js

@@ -2,8 +2,8 @@ const { defineConfig } = require("@vue/cli-service")
 
 module.exports = defineConfig({
 	//设置为空打包后不分更目录还是多级目录
-	publicPath: "/",
-    outputDir: "dist",
+	publicPath: "/easydo/mes",
+    outputDir: "easydo/mes",
 	//build编译后存放静态文件的目录
 	// assetsDir: "static",