Tang 1 rok temu
rodzic
commit
af4185b383

+ 1 - 5
src/components/tableList.vue

@@ -2896,8 +2896,4 @@ export default {
   max-height: 500px;
   overflow-y: auto;
 }
-<<<<<<< HEAD
-</style>
-=======
-</style>
->>>>>>> 3107d971f37e40886a3103e97257095c2935673b
+</style>

+ 2 - 1
src/utils/request.js

@@ -9,8 +9,9 @@ import { paramMate } from "@/utils/common";
 axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
 // 创建axios实例
 export const baseURL = process.env.VUE_APP_BASE_API
-// export const baseURL = 'http://192.168.1.24:5030/'
+// export const baseURL = 'https://cloud.xyyxt.net/'
 export const BASE_IMG_URL = process.env.VUE_APP_IMG_API
+// export const BASE_IMG_URL = 'https://file.xyyxt.net'
 const service = axios.create({
   // axios中请求配置有baseURL选项,表示请求URL公共部分
   baseURL: baseURL,

+ 28 - 1
src/views/Marketing/clientSetup/banner/diabox.vue

@@ -87,6 +87,8 @@
             <template slot-scope="scope">
               <el-button type="text" size="small" @click="editList(scope.row)"
                 >修改</el-button
+              ><el-button type="text" size="small" @click="del(scope.row)"
+                >删除</el-button
               ></template
             >
           </el-table-column>
@@ -141,7 +143,10 @@ export default {
     },
     activeFunc() {
       this.$api
-        .inquirebaseadvertisinglist({ locationId: this.activeId })
+        .inquirebaseadvertisinglist({
+          locationId: this.activeId,
+          status: "0,1",
+        })
         .then((res) => {
           this.tableData = res.rows;
         });
@@ -152,6 +157,28 @@ export default {
     close() {
       this.visible = false;
     },
+    del(row) {
+      this.$confirm("确定删除吗?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.$api
+            .editbaseadvertising({
+              id: row.id,
+              status: -1,
+            })
+            .then((res) => {
+              this.$message({
+                type: "success",
+                message: "删除成功!",
+              });
+              this.activeFunc();
+            })
+        })
+        .catch(() => {});
+    },
   },
 };
 </script>

+ 1 - 3
src/views/Marketing/clientSetup/banner/diabox_children.vue

@@ -47,9 +47,7 @@
                 />
               </label>
               <div style="font-size: 12px; color: #999; line-height: 17px">
-                注:请上传小于300kb,尺寸为
-                <span style="color: red">390*122</span>
-                的像素图片,支持jpg、jpeg、png等类型
+                注:支持小于300kb,1920*873,jpg、png格式图片
               </div>
             </div>
           </el-form-item>

+ 34 - 3
src/views/Marketing/clientSetup/banner/index.vue

@@ -7,6 +7,17 @@
       @addClick="addClick"
       :loading="loading"
     >
+      <template slot="intervalTime" slot-scope="props">
+        <el-input-number
+          v-model="props.scope.row['intervalTime']"
+          :min="1"
+          :max="60"
+          :precision="0"
+          :controls="false"
+          style="width: 100px"
+          @change="editFun($event, props.scope.row.locationId)"
+        ></el-input-number>
+      </template>
       <template slot="btn" slot-scope="props">
         <el-button
           type="text"
@@ -102,10 +113,10 @@
 <script>
 import tableList from "@/components/tableList";
 import pagination from "@/components/pagination";
-import diabox from "./diabox.vue"
+import diabox from "./diabox.vue";
 export default {
   name: "Banner",
-  components: { tableList, pagination,diabox },
+  components: { tableList, pagination, diabox },
   data() {
     return {
       disabledBtn: false,
@@ -154,6 +165,8 @@ export default {
           label: "轮播间隔(s)",
           prop: "intervalTime",
           hidden: true,
+          scope: "slot",
+          slotName: "intervalTime",
         },
         {
           label: "状态",
@@ -241,8 +254,26 @@ export default {
     this.search();
   },
   methods: {
+    /**
+     * 确定修改轮播间隔
+     */
+    editFun(e, id) {
+      if (!e) {
+        this.$message.error("请输入有效数值范围:1~60");
+        return;
+      }
+      this.$api
+        .editadvlocation({
+          locationId: id,
+          intervalTime: e,
+        })
+        .then((res) => {
+          this.$message.success("修改成功");
+          this.search();
+        });
+    },
     edit(row) {
-        this.$refs.diabox.openBoxs(row.locationId)
+      this.$refs.diabox.openBoxs(row.locationId);
     },
     loadingClose() {
       this.disabledBtn = false;

+ 18 - 10
src/views/Marketing/clientSetup/consultation/index.vue

@@ -1,21 +1,29 @@
 <template>
   <div id="">
-
+    <el-tabs v-model="activeName">
+      <el-tab-pane label="电脑端" name="1">
+        <page1 v-if="activeName == '1'" />
+      </el-tab-pane>
+      <el-tab-pane label="移动端" name="2">
+        <page2 v-if="activeName == '2'"
+      /></el-tab-pane>
+    
+    </el-tabs>
   </div>
 </template>
 
 <script>
+import page1 from "./page1.vue";
+import page2 from "./page2.vue";
 export default {
-  data () {
+  components: { page1, page2 },
+  data() {
     return {
-    }
+      activeName: "1",
+    };
   },
-  methods: {
-
-  }
-}
+  methods: {},
+};
 </script>
 
-<style lang="scss" scoped>
-
-</style>
+<style lang="scss" scoped></style>

+ 430 - 0
src/views/Marketing/clientSetup/consultation/page1.vue

@@ -0,0 +1,430 @@
+<template>
+  <div>
+    <el-form
+      :model="listData"
+      :rules="rules"
+      ref="listData"
+      label-width="120px"
+      class="demo-ruleForm"
+    >
+      <h5>咨询窗口</h5>
+      <el-form-item label="显示:" prop="consultationStatus">
+        <el-radio-group v-model="listData.consultationStatus">
+          <el-radio :label="1">开启</el-radio>
+          <el-radio :label="0">关闭</el-radio>
+        </el-radio-group></el-form-item
+      >
+      <h5>购物车</h5>
+      <el-form-item label="显示:" prop="shoppingCarStatus">
+        <el-radio-group v-model="listData.shoppingCarStatus">
+          <el-radio :label="1">开启</el-radio>
+          <el-radio :label="0">关闭</el-radio>
+        </el-radio-group></el-form-item
+      >
+      <h5>客服微信</h5>
+      <el-form-item label="显示:" prop="serviceWechatStatus">
+        <el-radio-group v-model="listData.serviceWechatStatus">
+          <el-radio :label="1">开启</el-radio>
+          <el-radio :label="0">关闭</el-radio>
+        </el-radio-group></el-form-item
+      >
+      <el-form-item
+        label="微信号:"
+        prop="serviceWechatNumber"
+        :rules="
+          listData.serviceWechatStatus == 1
+            ? rules.serviceWechatNumber
+            : [{ required: false }]
+        "
+      >
+        <el-input
+          style="width: 300px"
+          v-model="listData.serviceWechatNumber"
+          clearable
+          placeholder="请输入微信号"
+        ></el-input> </el-form-item
+      ><el-form-item
+        label="二维码:"
+        prop="serviceWechatImg"
+        :rules="
+          listData.serviceWechatStatus == 1
+            ? rules.serviceWechatImg
+            : [{ required: false }]
+        "
+      >
+        <div class="photoBox">
+          <el-button
+            type="text"
+            v-if="!listData.serviceWechatImg"
+            @click="upload('serviceWechatImg')"
+            >+点击上传<span style="color: #999"
+              ><br />请上传 1:1 图片或是截图<br />支持png、jpg</span
+            ></el-button
+          >
+          <el-image
+            v-else
+            style="width: 100%; height: 100%"
+            :src="$methodsTools.splitImgHost(listData.serviceWechatImg)"
+            :preview-src-list="[
+              $methodsTools.splitImgHost(listData.serviceWechatImg),
+            ]"
+          >
+          </el-image>
+          <i
+            v-if="listData.serviceWechatImg"
+            class="el-icon-error err_icon"
+            @click="clear('serviceWechatImg')"
+          ></i>
+        </div>
+      </el-form-item>
+      <h5>服务热线</h5>
+      <el-form-item label="显示:" prop="serviceHotlineStatus">
+        <el-radio-group v-model="listData.serviceHotlineStatus">
+          <el-radio :label="1">开启</el-radio>
+          <el-radio :label="0">关闭</el-radio>
+        </el-radio-group></el-form-item
+      >
+      <el-form-item
+        label="服务时间:"
+        prop="servicingTime"
+        :rules="
+          listData.serviceHotlineStatus == 1
+            ? rules.servicingTime
+            : [{ required: false }]
+        "
+      >
+        <el-input
+          style="width: 300px"
+          v-model="listData.servicingTime"
+          clearable
+          placeholder="例如:周一至周五(9:00-18:00)"
+        ></el-input>
+      </el-form-item>
+      <el-form-item
+        label="号码:"
+        prop="serviceNumber"
+        :rules="
+          listData.serviceHotlineStatus == 1
+            ? rules.serviceNumber
+            : [{ required: false }]
+        "
+      >
+        <el-input
+          style="width: 300px"
+          type="textarea"
+          :rows="2"
+          placeholder="请输入"
+          v-model="listData.serviceNumber"
+        />
+      </el-form-item>
+      <h5>移动端</h5>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="公众号:" prop="accountsStatus">
+            <el-radio-group v-model="listData.accountsStatus">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group></el-form-item
+          ><el-form-item label="同步:" prop="accountsSync">
+            <el-checkbox-group v-model="listData.accountsSync">
+              <el-checkbox :label="1">页尾</el-checkbox>
+              <el-checkbox :label="2">个人中心</el-checkbox>
+            </el-checkbox-group></el-form-item
+          ><el-form-item
+            label="二维码:"
+            prop="accountsImg"
+            :rules="
+              listData.accountsStatus == 1
+                ? rules.accountsImg
+                : [{ required: false }]
+            "
+          >
+            <div class="photoBox">
+              <el-button
+                type="text"
+                v-if="!listData.accountsImg"
+                @click="upload('accountsImg')"
+                >+点击上传<span style="color: #999"
+                  ><br />请上传 1:1 图片或是截图<br />支持png、jpg</span
+                ></el-button
+              >
+              <el-image
+                v-else
+                style="width: 100%; height: 100%"
+                :src="$methodsTools.splitImgHost(listData.accountsImg)"
+                :preview-src-list="[
+                  $methodsTools.splitImgHost(listData.accountsImg),
+                ]"
+              >
+              </el-image>
+              <i
+                v-if="listData.accountsImg"
+                class="el-icon-error err_icon"
+                @click="clear('accountsImg')"
+              ></i>
+            </div> </el-form-item
+        ></el-col>
+        <el-col :span="8">
+          <el-form-item label="H5:" prop="h5Status">
+            <el-radio-group v-model="listData.h5Status">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group></el-form-item
+          ><el-form-item label="同步:" prop="h5Sync">
+            <el-checkbox-group v-model="listData.h5Sync">
+              <el-checkbox :label="1">页尾</el-checkbox>
+              <el-checkbox :label="2">个人中心</el-checkbox>
+            </el-checkbox-group></el-form-item
+          ><el-form-item
+            label="二维码:"
+            prop="h5Img"
+            :rules="
+              listData.h5Status == 1 ? rules.h5Img : [{ required: false }]
+            "
+          >
+            <div class="photoBox">
+              <el-button
+                type="text"
+                v-if="!listData.h5Img"
+                @click="upload('h5Img')"
+                >+点击上传<span style="color: #999"
+                  ><br />请上传 1:1 图片或是截图<br />支持png、jpg</span
+                ></el-button
+              >
+              <el-image
+                v-else
+                style="width: 100%; height: 100%"
+                :src="$methodsTools.splitImgHost(listData.h5Img)"
+                :preview-src-list="[$methodsTools.splitImgHost(listData.h5Img)]"
+              >
+              </el-image>
+              <i
+                v-if="listData.h5Img"
+                class="el-icon-error err_icon"
+                @click="clear('h5Img')"
+              ></i>
+            </div> </el-form-item
+        ></el-col>
+        <el-col :span="8">
+          <el-form-item label="小程序:" prop="appletStatus">
+            <el-radio-group v-model="listData.appletStatus">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group></el-form-item
+          ><el-form-item label="同步:" prop="appletSync">
+            <el-checkbox-group v-model="listData.appletSync">
+              <el-checkbox :label="1">页尾</el-checkbox>
+              <el-checkbox :label="2">个人中心</el-checkbox>
+            </el-checkbox-group></el-form-item
+          ><el-form-item
+            label="二维码:"
+            prop="appletImg"
+            :rules="
+              listData.appletStatus == 1
+                ? rules.appletImg
+                : [{ required: false }]
+            "
+          >
+            <div class="photoBox">
+              <el-button
+                type="text"
+                v-if="!listData.appletImg"
+                @click="upload('appletImg')"
+                >+点击上传<span style="color: #999"
+                  ><br />请上传 1:1 图片或是截图<br />支持png、jpg</span
+                ></el-button
+              >
+              <el-image
+                v-else
+                style="width: 100%; height: 100%"
+                :src="$methodsTools.splitImgHost(listData.appletImg)"
+                :preview-src-list="[
+                  $methodsTools.splitImgHost(listData.appletImg),
+                ]"
+              >
+              </el-image>
+              <i
+                v-if="listData.appletImg"
+                class="el-icon-error err_icon"
+                @click="clear('appletImg')"
+              ></i>
+            </div> </el-form-item
+        ></el-col>
+      </el-row>
+    </el-form>
+    <input ref="file" type="file" style="display: none" @change="getImgFile" />
+    <div style="margin-top: 20px">
+      <el-button type="primary" @click="submit">保存</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+import { listConfig, updateConfig } from "@/api/system/config";
+export default {
+  data() {
+    return {
+      initData: {
+        configValue: {},
+      },
+      listData: { accountsSync: [], h5Sync: [], appletSync: [] },
+      rules: {
+        consultationStatus: [
+          { required: true, message: "请选择", trigger: "change" },
+        ],
+        shoppingCarStatus: [
+          { required: true, message: "请选择", trigger: "change" },
+        ],
+        serviceWechatStatus: [
+          { required: true, message: "请选择", trigger: "change" },
+        ],
+        serviceWechatNumber: [
+          { required: true, message: "请输入微信号", trigger: "blur" },
+        ],
+        serviceWechatImg: [
+          { required: true, message: "请上传二维码", trigger: "change" },
+        ],
+
+        serviceHotlineStatus: [
+          { required: true, message: "请选择", trigger: "change" },
+        ],
+        servicingTime: [
+          { required: true, message: "请输入服务时间", trigger: "blur" },
+        ],
+        serviceNumber: [
+          { required: true, message: "请输入号码", trigger: "blur" },
+        ],
+
+        accountsStatus: [
+          { required: true, message: "请选择", trigger: "change" },
+        ],
+        accountsSync: [
+          { required: false, message: "请选择", trigger: "change" },
+        ],
+        accountsImg: [
+          { required: true, message: "请上传二维码", trigger: "change" },
+        ],
+
+        h5Status: [{ required: true, message: "请选择", trigger: "change" }],
+        h5Sync: [{ required: false, message: "请选择", trigger: "change" }],
+        h5Img: [{ required: true, message: "请上传二维码", trigger: "change" }],
+
+        appletStatus: [
+          { required: true, message: "请选择", trigger: "change" },
+        ],
+        appletSync: [{ required: false, message: "请选择", trigger: "change" }],
+        appletImg: [
+          { required: true, message: "请上传二维码", trigger: "change" },
+        ],
+      },
+      uploadProp: "",
+    };
+  },
+  mounted() {
+    this.init();
+  },
+  methods: {
+    init() {
+      listConfig({ configKey: "client.config" }).then((res) => {
+        if (res.rows.length) {
+          this.initData = res.rows[0];
+          let configValue = JSON.parse(res.rows[0].configValue) || {};
+          this.listData = configValue.consultPc || {};
+        }
+      });
+    },
+    upload(prop) {
+      this.uploadProp = prop;
+      this.$refs.file.click();
+    },
+    getImgFile(e) {
+      var file = e.target.files[0];
+      if (file === undefined) {
+        e.target.value = "";
+        return;
+      }
+      if (file.size > 0.3 * 1024 * 1024) {
+        this.$message.error("图片不得大于300kb");
+        e.target.value = "";
+        return;
+      }
+      var type = file.name.toLowerCase().split(".").splice(-1);
+      if (type[0] != "jpg" && type[0] != "png" && type[0] != "jpeg") {
+        this.$message.error("上传格式需为:.jpg/.png/.jpeg");
+        e.target.value = "";
+        return;
+      }
+      this.$upload
+        .upload(file, 0)
+        .then((res) => {
+          this.$set(this.listData, this.uploadProp, res);
+        })
+        .finally(() => {
+          e.target.value = "";
+          this.$refs.listData.validateField(this.uploadProp);
+        });
+    },
+    clear(prop) {
+      this.listData[prop] = "";
+      this.$refs.listData.validateField(prop);
+    },
+    submit() {
+      this.$refs["listData"].validate((valid) => {
+        if (valid) {
+          let initData = JSON.parse(JSON.stringify(this.initData));
+          initData.configValue = JSON.parse(initData.configValue);
+          initData.configValue["consultPc"] = this.listData;
+          initData.configValue = JSON.stringify(initData.configValue);
+          updateConfig(initData).then((res) => {
+            this.$message.success("保存成功");
+            this.init();
+          });
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.photoBox {
+  border-radius: 4px;
+  width: 200px;
+  height: 200px;
+  text-align: center;
+  line-height: 150px;
+  border: 1px dashed #bdbdbd;
+  position: relative;
+  .el-button {
+    line-height: 20px;
+  }
+  & > .err_icon {
+    position: absolute;
+    top: 4px;
+    right: 4px;
+    color: red;
+    font-size: 16px;
+    cursor: pointer;
+    user-select: none;
+  }
+}
+h5 {
+  font-weight: bold;
+  padding-left: 30px;
+  margin: 10px 0px 16px;
+  font-size: 14px;
+}
+.photo_text {
+  font-size: 12px;
+  color: #aaa;
+  height: 20px;
+  line-height: 20px;
+}
+._p {
+  color: #a4a4a4;
+  margin: 0px;
+}
+</style>

+ 274 - 0
src/views/Marketing/clientSetup/consultation/page2.vue

@@ -0,0 +1,274 @@
+<template>
+  <div>
+    <el-form
+      :model="listData"
+      :rules="rules"
+      ref="listData"
+      label-width="120px"
+      class="demo-ruleForm"
+    >
+      <h5>咨询窗口</h5>
+      <el-form-item label="显示:" prop="consultationStatus">
+        <el-radio-group v-model="listData.consultationStatus">
+          <el-radio :label="1">开启</el-radio>
+          <el-radio :label="0">关闭</el-radio>
+        </el-radio-group></el-form-item
+      >
+      <h5>购物车</h5>
+      <el-form-item label="显示:" prop="shoppingCarStatus">
+        <el-radio-group v-model="listData.shoppingCarStatus">
+          <el-radio :label="1">开启</el-radio>
+          <el-radio :label="0">关闭</el-radio>
+        </el-radio-group></el-form-item
+      >
+      <h5>客服微信</h5>
+      <el-form-item label="显示:" prop="serviceWechatStatus">
+        <el-radio-group v-model="listData.serviceWechatStatus">
+          <el-radio :label="1">开启</el-radio>
+          <el-radio :label="0">关闭</el-radio>
+        </el-radio-group></el-form-item
+      >
+      <el-form-item
+        label="微信号:"
+        prop="serviceWechatNumber"
+        :rules="
+          listData.serviceWechatStatus == 1
+            ? rules.serviceWechatNumber
+            : [{ required: false }]
+        "
+      >
+        <el-input
+          style="width: 300px"
+          v-model="listData.serviceWechatNumber"
+          clearable
+          placeholder="请输入微信号"
+        ></el-input> </el-form-item
+      ><el-form-item
+        label="二维码:"
+        prop="serviceWechatImg"
+        :rules="
+          listData.serviceWechatStatus == 1
+            ? rules.serviceWechatImg
+            : [{ required: false }]
+        "
+      >
+        <div class="photoBox">
+          <el-button
+            type="text"
+            v-if="!listData.serviceWechatImg"
+            @click="upload('serviceWechatImg')"
+            >+点击上传<span style="color: #999"
+              ><br />请上传 1:1 图片或是截图<br />支持png、jpg</span
+            ></el-button
+          >
+          <el-image
+            v-else
+            style="width: 100%; height: 100%"
+            :src="$methodsTools.splitImgHost(listData.serviceWechatImg)"
+            :preview-src-list="[
+              $methodsTools.splitImgHost(listData.serviceWechatImg),
+            ]"
+          >
+          </el-image>
+          <i
+            v-if="listData.serviceWechatImg"
+            class="el-icon-error err_icon"
+            @click="clear('serviceWechatImg')"
+          ></i>
+        </div>
+      </el-form-item>
+      <h5>服务热线</h5>
+      <el-form-item label="显示:" prop="serviceHotlineStatus">
+        <el-radio-group v-model="listData.serviceHotlineStatus">
+          <el-radio :label="1">开启</el-radio>
+          <el-radio :label="0">关闭</el-radio>
+        </el-radio-group></el-form-item
+      >
+      <el-form-item
+        label="服务时间:"
+        prop="servicingTime"
+        :rules="
+          listData.serviceHotlineStatus == 1
+            ? rules.servicingTime
+            : [{ required: false }]
+        "
+      >
+        <el-input
+          style="width: 300px"
+          v-model="listData.servicingTime"
+          clearable
+          placeholder="例如:周一至周五(9:00-18:00)"
+        ></el-input>
+      </el-form-item>
+      <el-form-item
+        label="号码:"
+        prop="serviceNumber"
+        :rules="
+          listData.serviceHotlineStatus == 1
+            ? rules.serviceNumber
+            : [{ required: false }]
+        "
+      >
+        <el-input
+          style="width: 300px"
+          type="textarea"
+          :rows="2"
+          placeholder="请输入"
+          v-model="listData.serviceNumber"
+        />
+      </el-form-item>
+    </el-form>
+    <input ref="file" type="file" style="display: none" @change="getImgFile" />
+    <div style="margin-top: 20px">
+      <el-button type="primary" @click="submit">保存</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+import { listConfig, updateConfig } from "@/api/system/config";
+export default {
+  data() {
+    return {
+      initData: {
+        configValue: {},
+      },
+      listData: { accountsSync: [], h5Sync: [], appletSync: [] },
+      rules: {
+        consultationStatus: [
+          { required: true, message: "请选择", trigger: "change" },
+        ],
+        shoppingCarStatus: [
+          { required: true, message: "请选择", trigger: "change" },
+        ],
+        serviceWechatStatus: [
+          { required: true, message: "请选择", trigger: "change" },
+        ],
+        serviceWechatNumber: [
+          { required: true, message: "请输入微信号", trigger: "blur" },
+        ],
+        serviceWechatImg: [
+          { required: true, message: "请上传二维码", trigger: "change" },
+        ],
+
+        serviceHotlineStatus: [
+          { required: true, message: "请选择", trigger: "change" },
+        ],
+        servicingTime: [
+          { required: true, message: "请输入服务时间", trigger: "blur" },
+        ],
+        serviceNumber: [
+          { required: true, message: "请输入号码", trigger: "blur" },
+        ],
+      },
+      uploadProp: "",
+    };
+  },
+  mounted() {
+    this.init();
+  },
+  methods: {
+    init() {
+      listConfig({ configKey: "client.config" }).then((res) => {
+        if (res.rows.length) {
+          this.initData = res.rows[0];
+          let configValue = JSON.parse(res.rows[0].configValue) || {};
+          this.listData = configValue.consultMobile || {};
+        }
+      });
+    },
+    upload(prop) {
+      this.uploadProp = prop;
+      this.$refs.file.click();
+    },
+    getImgFile(e) {
+      var file = e.target.files[0];
+      if (file === undefined) {
+        e.target.value = "";
+        return;
+      }
+      if (file.size > 0.3 * 1024 * 1024) {
+        this.$message.error("图片不得大于300kb");
+        e.target.value = "";
+        return;
+      }
+      var type = file.name.toLowerCase().split(".").splice(-1);
+      if (type[0] != "jpg" && type[0] != "png" && type[0] != "jpeg") {
+        this.$message.error("上传格式需为:.jpg/.png/.jpeg");
+        e.target.value = "";
+        return;
+      }
+      this.$upload
+        .upload(file, 0)
+        .then((res) => {
+          this.$set(this.listData, this.uploadProp, res);
+        })
+        .finally(() => {
+          e.target.value = "";
+          this.$refs.listData.validateField(this.uploadProp);
+        });
+    },
+    clear(prop) {
+      this.listData[prop] = "";
+      this.$refs.listData.validateField(prop);
+    },
+    submit() {
+      this.$refs["listData"].validate((valid) => {
+        if (valid) {
+          let initData = JSON.parse(JSON.stringify(this.initData));
+          initData.configValue = JSON.parse(initData.configValue);
+          initData.configValue["consultMobile"] = this.listData;
+          initData.configValue = JSON.stringify(initData.configValue);
+          updateConfig(initData).then((res) => {
+            this.$message.success("保存成功");
+            this.init();
+          });
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.photoBox {
+  border-radius: 4px;
+  width: 200px;
+  height: 200px;
+  text-align: center;
+  line-height: 150px;
+  border: 1px dashed #bdbdbd;
+  position: relative;
+  .el-button {
+    line-height: 20px;
+  }
+  & > .err_icon {
+    position: absolute;
+    top: 4px;
+    right: 4px;
+    color: red;
+    font-size: 16px;
+    cursor: pointer;
+    user-select: none;
+  }
+}
+h5 {
+  font-weight: bold;
+  padding-left: 30px;
+  margin: 10px 0px 16px;
+  font-size: 14px;
+}
+.photo_text {
+  font-size: 12px;
+  color: #aaa;
+  height: 20px;
+  line-height: 20px;
+}
+._p {
+  color: #a4a4a4;
+  margin: 0px;
+}
+</style>

+ 91 - 11
src/views/Marketing/clientSetup/friendlyLink/index.vue

@@ -2,10 +2,18 @@
   <div id="links">
     <div class="smallBox">
       <div class="dis_x">
-        <div>友情链接<span>{{listData.length || 0}}条</span></div>
+        <div>
+          友情链接<span>{{ listData.length || 0 }}条</span>
+        </div>
+        <el-button type="warning" @click="sync">同步</el-button>
         <el-button :size="size" @click="add(1)" type="primary">新增</el-button>
       </div>
-      <el-table :data="listData" style="margin-top: 10px" border max-height="740px">
+      <el-table
+        :data="listData"
+        style="margin-top: 10px"
+        border
+        max-height="740px"
+      >
         <el-table-column
           v-for="(item, index) in tableSet"
           :width="item.width"
@@ -40,13 +48,15 @@
                 :inactive-value="0"
               >
               </el-switch>
-              <span style="margin-left:10px;">{{ scope.row[item.prop] == 1 ? "开启" : "关闭" }}</span>
+              <span style="margin-left: 10px">{{
+                scope.row[item.prop] == 1 ? "开启" : "关闭"
+              }}</span>
             </div>
             <div v-else>{{ scope.row[item.prop] }}</div>
           </template></el-table-column
         >
       </el-table>
-      <div style="text-align: center; margin-top: 20px">
+      <div style="margin-top: 20px">
         <el-button :size="size" type="primary" @click="submit">保 存</el-button>
       </div>
     </div>
@@ -154,6 +164,73 @@ export default {
     this.init();
   },
   methods: {
+    sync() {
+      listConfig().then((res) => {
+        let includesArys = [
+          "home.header",
+          "home.footer",
+          "home.links",
+          "home.mobile",
+          "client.config",
+        ];
+        let ary = res.rows.filter((i) => {
+          return includesArys.includes(i.configKey);
+        });
+        let obj = {};
+        ary.forEach((i) => {
+          obj[i.configKey] = JSON.parse(i.configValue);
+        });
+        for (let k in obj["client.config"]) {
+          if (k == "links" && obj["home.links"]) {
+            obj["client.config"][k] = obj["home.links"];
+          }
+          if (k == "nav" && obj["home.header"]) {
+            obj["client.config"][k] = obj["home.header"]["Nav"];
+          }
+          if (k == "consultPc" && obj["home.mobile"]) {
+            obj["client.config"][k]["h5Img"] = obj["home.mobile"]["h5Image"];
+            obj["client.config"][k]["appletImg"] =
+              obj["home.mobile"]["mobileImage"];
+            obj["client.config"][k]["accountsImg"] =
+              obj["home.mobile"]["gzhImage"];
+          }
+          if (k == "header" && obj["home.header"] && obj["home.mobile"]) {
+            obj["client.config"][k]["companyName"] =
+              obj["home.header"]["companyName"];
+            obj["client.config"][k]["templateStatus"] =
+              obj["home.header"]["templateStatus"];
+            obj["client.config"][k]["routinelogo"] =
+              obj["home.header"]["companyLogo"];
+            obj["client.config"][k]["whitelogo"] =
+              obj["home.header"]["undertone"];
+            obj["client.config"][k]["h5logo"] = obj["home.mobile"]["h5Logo"];
+            obj["client.config"][k]["wxlogo"] = obj["home.mobile"]["smallLogo"];
+          }
+          if (k == "footer" && obj["home.footer"]) {
+            let Array1 = obj["home.footer"] || [];
+            obj["client.config"][k]["tableData"] = Array1.map((i) => {
+              return {
+                status: 1,
+                name: i.name,
+              };
+            });
+          }
+          if (k == "footer") {
+            obj["client.config"][k]["copyright"] = "广东省中正教育科技有限公司";
+            obj["client.config"][k]["technology"] = "中正教育科技有限公司";
+            obj["client.config"][k]["miit"] =
+              "https://beian.miit.gov.cn/#/Integrated/index";
+          }
+        }
+        console.log(obj, "obj");
+        let find = ary.find((i) => i.configKey == "client.config");
+        find.configValue = JSON.stringify(obj["client.config"]);
+        console.log(find, "find");
+        updateConfig(find).then((res) => {
+          this.$message.success("保存成功");
+        });
+      });
+    },
     changeVal(row) {
       if (!row.sort && row.sort !== 0) {
         this.$message.warning("检测到你没有赋值或赋值异常,已自动赋值为0");
@@ -220,19 +297,22 @@ export default {
       });
     },
     init() {
-      listConfig({ configKey: "home.links" }).then((res) => {
+      listConfig({ configKey: "client.config" }).then((res) => {
         if (res.rows.length) {
           this.initData = res.rows[0];
-          this.listData = JSON.parse(res.rows[0].configValue);
+          let configValue = JSON.parse(res.rows[0].configValue) || {};
+          this.listData = configValue.links || [];
         }
       });
     },
     submit() {
-      let data = JSON.parse(JSON.stringify(this.listData));
-      let copySubmitData = JSON.parse(JSON.stringify(this.initData));
-      copySubmitData.configValue = JSON.stringify(data);
-      updateConfig(copySubmitData).then((res) => {
+      let initData = JSON.parse(JSON.stringify(this.initData));
+      initData.configValue = JSON.parse(initData.configValue);
+      initData.configValue["links"] = this.listData;
+      initData.configValue = JSON.stringify(initData.configValue);
+      updateConfig(initData).then((res) => {
         this.$message.success("保存成功");
+        this.init();
       });
     },
   },
@@ -240,7 +320,7 @@ export default {
 </script>
 
 <style lang="less" scoped>
-.dis_x{
+.dis_x {
   display: flex;
   align-items: center;
   justify-content: space-between;

+ 13 - 5
src/views/Marketing/clientSetup/pageSet/index.vue

@@ -2,11 +2,17 @@
   <div id="">
     <el-tabs v-model="activeName">
       <el-tab-pane label="导航菜单" name="1">
-        <page1 v-if="activeName == '1'"/>
+        <page1 v-if="activeName == '1'" />
       </el-tab-pane>
       <el-tab-pane label="页头" name="2">
-        <page2 v-if="activeName == '2'"/></el-tab-pane>
-      <el-tab-pane label="页尾" name="3"></el-tab-pane>
+        <page2 v-if="activeName == '2'"
+      /></el-tab-pane>
+      <el-tab-pane label="页尾" name="3">
+        <page3 v-if="activeName == '3'"
+      /></el-tab-pane>
+      <el-tab-pane label="其他" name="4">
+        <page4 v-if="activeName == '4'"
+      /></el-tab-pane>
     </el-tabs>
   </div>
 </template>
@@ -14,11 +20,13 @@
 <script>
 import page1 from "./page1.vue";
 import page2 from "./page2.vue";
+import page3 from "./page3.vue";
+import page4 from "./page4.vue";
 export default {
-  components: { page1,page2 },
+  components: { page1, page2, page3,page4 },
   data() {
     return {
-      activeName: "2",
+      activeName: "1",
     };
   },
   methods: {},

+ 12 - 11
src/views/Marketing/clientSetup/pageSet/page1.vue

@@ -45,8 +45,8 @@
         </template></el-table-column
       >
     </el-table>
-    <div style="text-align:center;margin-top:20px;">
-        <el-button type="primary" @click="submit">保存</el-button>
+    <div style="margin-top: 20px">
+      <el-button type="primary" @click="submit">保存</el-button>
     </div>
   </div>
 </template>
@@ -57,7 +57,7 @@ export default {
   data() {
     return {
       initData: {
-        configValue:{}
+        configValue: {},
       },
       tableData: [],
       tableSet: [
@@ -83,11 +83,11 @@ export default {
   },
   methods: {
     init() {
-      listConfig({ configKey: "home.header" }).then((res) => {
+      listConfig({ configKey: "client.config" }).then((res) => {
         if (res.rows.length) {
           this.initData = res.rows[0];
-          let A = JSON.parse(res.rows[0].configValue);
-          this.tableData = A.Nav || [];
+          let configValue = JSON.parse(res.rows[0].configValue) || {};
+          this.tableData = configValue.nav || [];
         }
       });
     },
@@ -109,12 +109,13 @@ export default {
       this.tableData.sort(this.sort);
     },
     submit() {
-      let copySubmitData = JSON.parse(JSON.stringify(this.initData));
-      copySubmitData.configValue = JSON.parse(copySubmitData.configValue)
-      copySubmitData.configValue.Nav = this.tableData
-      copySubmitData.configValue = JSON.stringify(copySubmitData.configValue)
-      updateConfig(copySubmitData).then((res) => {
+      let initData = JSON.parse(JSON.stringify(this.initData));
+      initData.configValue = JSON.parse(initData.configValue);
+      initData.configValue["nav"] = this.tableData;
+      initData.configValue = JSON.stringify(initData.configValue);
+      updateConfig(initData).then((res) => {
         this.$message.success("保存成功");
+        this.init()
       });
     },
   },

+ 161 - 236
src/views/Marketing/clientSetup/pageSet/page2.vue

@@ -1,239 +1,148 @@
 <template>
-  <div id="">
-    <ul style="margin-left: 20px" v-if="false">
-      <li class="liSty">
-        <span>模板启用</span>
-        <div>
-          <el-radio-group v-model="listData.templateStatus">
-            <el-radio :label="1">模板一</el-radio>
-            <el-radio :label="2">模板二</el-radio>
-          </el-radio-group>
+  <div>
+    <el-form
+      :model="listData"
+      :rules="rules"
+      ref="listData"
+      label-width="120px"
+      class="demo-ruleForm"
+    >
+      <h5>电脑端</h5>
+      <el-form-item label="公司名称:" prop="companyName">
+        <el-input
+          style="width: 300px"
+          v-model="listData.companyName"
+          clearable
+          placeholder="请输入公司名称"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="模板启用:" prop="templateStatus">
+        <el-radio-group v-model="listData.templateStatus">
+          <el-radio :label="1">模板一</el-radio>
+          <el-radio :label="2">模板二</el-radio>
+        </el-radio-group></el-form-item
+      ><el-form-item label="logo(常规):" prop="routinelogo">
+        <div class="photoBox">
+          <el-button
+            type="text"
+            v-if="!listData.routinelogo"
+            @click="upload('routinelogo')"
+            >+点击上传</el-button
+          >
+          <el-image
+            v-else
+            style="width: 100%; height: 100%"
+            :src="$methodsTools.splitImgHost(listData.routinelogo)"
+            :preview-src-list="[
+              $methodsTools.splitImgHost(listData.routinelogo),
+            ]"
+          >
+          </el-image>
+          <i
+            v-if="listData.routinelogo"
+            class="el-icon-error err_icon"
+            @click="clear('routinelogo')"
+          ></i>
         </div>
-      </li>
-      <li class="liSty">
-        <span style="align-self: flex-start">LOGO图片</span>
-        <div>
-          <div
-            style="
-              width: 216px;
-              height: 46px;
-              border: 1px dashed #999;
-              border-radius: 28px;
-              line-height: 46px;
-              text-align: center;
-            "
-            v-if="!listData.companyLogo"
+        <p class="photo_text">
+          注:请上传png格式透明底色图片,样式规格<el-button
+            type="text"
+            @click="img(1)"
+            >查看</el-button
+          >
+        </p> </el-form-item
+      ><el-form-item label="logo(白色):" prop="whitelogo">
+        <div class="photoBox">
+          <el-button
+            type="text"
+            v-if="!listData.whitelogo"
+            @click="upload('whitelogo')"
+            >+点击上传</el-button
+          >
+          <el-image
+            v-else
+            style="width: 100%; height: 100%"
+            :src="$methodsTools.splitImgHost(listData.whitelogo)"
+            :preview-src-list="[$methodsTools.splitImgHost(listData.whitelogo)]"
           >
-            <label for="uplose">
-              <i class="el-icon-circle-plus-outline iconStsz"></i
-            ></label>
-            <input
-              ref="file"
-              type="file"
-              style="display: none"
-              id="uplose"
-              @change="getImgFile"
-            />
-          </div>
-          <div v-else class="flex_sty">
-            <el-image
-              style="width: 216px; height: 46px"
-              :src="$methodsTools.splitImgHost(listData.companyLogo)"
-              :preview-src-list="[
-                $methodsTools.splitImgHost(listData.companyLogo),
-              ]"
-            >
-            </el-image>
-            <el-button
-              @click="listData.companyLogo = ''"
-              style="margin-left: 16px"
-              type="danger"
-              icon="el-icon-delete"
-              circle
-              size="mini"
-            ></el-button>
-          </div>
-          <p style="font-size: 12px; color: #999">
-            注:建议上传logo图片是透明底色的png格式,尺寸为216px * 46px
-          </p>
+          </el-image>
+          <i
+            v-if="listData.whitelogo"
+            class="el-icon-error err_icon"
+            @click="clear('whitelogo')"
+          ></i>
         </div>
-      </li>
-      <li class="liSty">
-        <span style="align-self: flex-start">LOGO图片-浅色</span>
-        <div>
-          <div
-            style="
-              width: 216px;
-              height: 46px;
-              border: 1px dashed #999;
-              border-radius: 28px;
-              line-height: 46px;
-              text-align: center;
-            "
-            v-if="!listData.undertone"
+        <p class="photo_text">
+          注:请上传png格式透明底色图片,样式规格<el-button
+            type="text"
+            @click="img(2)"
+            >查看</el-button
           >
-            <label for="uplose1">
-              <i class="el-icon-circle-plus-outline iconStsz"></i
-            ></label>
-            <input
-              ref="file1"
-              type="file"
-              style="display: none"
-              id="uplose1"
-              @change="getImgFile1"
-            />
-          </div>
-          <div v-else class="flex_sty" style="background-color: #eee">
-            <el-image
-              style="width: 216px; height: 46px"
-              :src="$methodsTools.splitImgHost(listData.undertone)"
-              :preview-src-list="[
-                $methodsTools.splitImgHost(listData.undertone),
-              ]"
-            >
-            </el-image>
-            <el-button
-              @click="listData.undertone = ''"
-              style="margin-left: 16px"
-              type="danger"
-              icon="el-icon-delete"
-              circle
-              size="mini"
-            ></el-button>
-          </div>
-          <p style="font-size: 12px; color: #999">
-            注:建议上传logo图片是透明底色的png格式,尺寸为216px * 46px
-          </p>
+        </p>
+      </el-form-item>
+      <h5>移动端</h5>
+      <el-form-item label="logo(H5):" prop="h5logo">
+        <div class="photoBox">
+          <el-button
+            type="text"
+            v-if="!listData.h5logo"
+            @click="upload('h5logo')"
+            >+点击上传</el-button
+          >
+          <el-image
+            v-else
+            style="width: 100%; height: 100%"
+            :src="$methodsTools.splitImgHost(listData.h5logo)"
+            :preview-src-list="[$methodsTools.splitImgHost(listData.h5logo)]"
+          >
+          </el-image>
+          <i
+            v-if="listData.h5logo"
+            class="el-icon-error err_icon"
+            @click="clear('h5logo')"
+          ></i>
         </div>
-      </li>
-    </ul>
-    <div>
-      <h4>页头设置</h4>
-      <el-form
-        :model="listData"
-        :rules="rules"
-        ref="listData"
-        label-width="120px"
-        class="demo-ruleForm"
-      >
-        <h5>电脑端</h5>
-        <el-form-item label="模板启用:" prop="templateStatus">
-          <el-radio-group v-model="listData.templateStatus">
-            <el-radio :label="1">模板一</el-radio>
-            <el-radio :label="2">模板二</el-radio>
-          </el-radio-group></el-form-item
-        ><el-form-item label="logo(常规):" prop="routinelogo">
-          <div class="photoBox">
-            <el-button
-              type="text"
-              v-if="!listData.routinelogo"
-              @click="upload('routinelogo')"
-              >+点击上传</el-button
-            >
-            <el-image
-              v-else
-              style="width: 100%; height: 100%"
-              :src="$methodsTools.splitImgHost(listData.routinelogo)"
-              :preview-src-list="[
-                $methodsTools.splitImgHost(listData.routinelogo),
-              ]"
-            >
-            </el-image>
-            <i
-              v-if="listData.routinelogo"
-              class="el-icon-error err_icon"
-              @click="clear('routinelogo')"
-            ></i>
-          </div>
-          <p class="photo_text">
-            注:建议上传logo图片是透明底色的png格式,尺寸为216px * 46px
-          </p> </el-form-item
-        ><el-form-item label="logo(白色):" prop="whitelogo">
-          <div class="photoBox">
-            <el-button
-              type="text"
-              v-if="!listData.whitelogo"
-              @click="upload('whitelogo')"
-              >+点击上传</el-button
-            >
-            <el-image
-              v-else
-              style="width: 100%; height: 100%"
-              :src="$methodsTools.splitImgHost(listData.whitelogo)"
-              :preview-src-list="[
-                $methodsTools.splitImgHost(listData.whitelogo),
-              ]"
-            >
-            </el-image>
-            <i
-              v-if="listData.whitelogo"
-              class="el-icon-error err_icon"
-              @click="clear('whitelogo')"
-            ></i>
-          </div>
-          <p class="photo_text">
-            注:建议上传logo图片是透明底色的png格式,尺寸为216px * 46px
-          </p>
-        </el-form-item>
-        <h5>移动端</h5>
-        <el-form-item label="logo(H5):" prop="h5logo">
-          <div class="photoBox">
-            <el-button
-              type="text"
-              v-if="!listData.h5logo"
-              @click="upload('h5logo')"
-              >+点击上传</el-button
-            >
-            <el-image
-              v-else
-              style="width: 100%; height: 100%"
-              :src="$methodsTools.splitImgHost(listData.h5logo)"
-              :preview-src-list="[$methodsTools.splitImgHost(listData.h5logo)]"
-            >
-            </el-image>
-            <i
-              v-if="listData.h5logo"
-              class="el-icon-error err_icon"
-              @click="clear('h5logo')"
-            ></i>
-          </div>
-          <p class="photo_text">
-            注:建议上传logo图片是透明底色的png格式,尺寸为216px * 46px
-          </p> </el-form-item
-        ><el-form-item label="logo(小程序):" prop="wxlogo">
-          <div class="photoBox">
-            <el-button
-              type="text"
-              v-if="!listData.wxlogo"
-              @click="upload('wxlogo')"
-              >+点击上传</el-button
-            >
-            <el-image
-              v-else
-              style="width: 100%; height: 100%"
-              :src="$methodsTools.splitImgHost(listData.wxlogo)"
-              :preview-src-list="[$methodsTools.splitImgHost(listData.wxlogo)]"
-            >
-            </el-image>
-            <i
-              v-if="listData.wxlogo"
-              class="el-icon-error err_icon"
-              @click="clear('wxlogo')"
-            ></i>
-          </div>
-          <p class="photo_text">
-            注:建议上传logo图片是透明底色的png格式,尺寸为216px * 46px
-          </p>
-        </el-form-item></el-form
-      >
-      <input
-        ref="file"
-        type="file"
-        style="display: none"
-        @change="getImgFile"
-      />
-    </div>
-    <div style="text-align: center; margin-top: 20px">
+        <p class="photo_text">
+          注:请上传png格式透明底色图片,样式规格<el-button
+            type="text"
+            @click="img(3)"
+            >查看</el-button
+          >
+        </p> </el-form-item
+      ><el-form-item label="logo(小程序):" prop="wxlogo">
+        <div class="photoBox">
+          <el-button
+            type="text"
+            v-if="!listData.wxlogo"
+            @click="upload('wxlogo')"
+            >+点击上传</el-button
+          >
+          <el-image
+            v-else
+            style="width: 100%; height: 100%"
+            :src="$methodsTools.splitImgHost(listData.wxlogo)"
+            :preview-src-list="[$methodsTools.splitImgHost(listData.wxlogo)]"
+          >
+          </el-image>
+          <i
+            v-if="listData.wxlogo"
+            class="el-icon-error err_icon"
+            @click="clear('wxlogo')"
+          ></i>
+        </div>
+        <p class="photo_text">
+          注:请上传png格式透明底色图片,样式规格<el-button
+            type="text"
+            @click="img(4)"
+            >查看</el-button
+          >
+        </p>
+      </el-form-item></el-form
+    >
+    <input ref="file" type="file" style="display: none" @change="getImgFile" />
+    <el-image v-show="false" ref="el_image" :src="imageUrl" :preview-src-list="[imageUrl]">
+    </el-image>
+    <div style="margin-top: 20px">
       <el-button type="primary" @click="submit">保存</el-button>
     </div>
   </div>
@@ -244,6 +153,7 @@ import { listConfig, updateConfig } from "@/api/system/config";
 export default {
   data() {
     return {
+      imageUrl: null,
       initData: {
         configValue: {},
       },
@@ -252,6 +162,9 @@ export default {
         templateStatus: [
           { required: true, message: "请选择模板启用", trigger: "change" },
         ],
+        companyName: [
+          { required: true, message: "请输入公司名称", trigger: "blur" },
+        ],
         routinelogo: [
           { required: true, message: "请上传图片", trigger: "change" },
         ],
@@ -268,11 +181,19 @@ export default {
     this.init();
   },
   methods: {
+    img(int) {
+      this.imageUrl =
+        "https://file.xyyxt.net/oss/images/avatar/20231024/1698114087361/1698114087361_116026492";
+      this.$nextTick(() => {
+        this.$refs.el_image.clickHandler();
+      });
+    },
     init() {
-      listConfig({ configKey: "home.header" }).then((res) => {
+      listConfig({ configKey: "client.config" }).then((res) => {
         if (res.rows.length) {
           this.initData = res.rows[0];
-          this.listData = JSON.parse(res.rows[0].configValue);
+          let configValue = JSON.parse(res.rows[0].configValue) || {};
+          this.listData = configValue.header || {};
         }
       });
     },
@@ -314,15 +235,19 @@ export default {
     submit() {
       this.$refs["listData"].validate((valid) => {
         if (valid) {
-          alert("submit!",this.listData);
+          let initData = JSON.parse(JSON.stringify(this.initData));
+          initData.configValue = JSON.parse(initData.configValue);
+          initData.configValue["header"] = this.listData;
+          initData.configValue = JSON.stringify(initData.configValue);
+          updateConfig(initData).then((res) => {
+            this.$message.success("保存成功");
+            this.init();
+          });
         } else {
           console.log("error submit!!");
           return false;
         }
       });
-      // updateConfig().then((res) => {
-      //   this.$message.success("保存成功");
-      // });
     },
   },
 };

+ 394 - 0
src/views/Marketing/clientSetup/pageSet/page3.vue

@@ -0,0 +1,394 @@
+<template>
+  <div>
+    <el-form
+      :model="listData"
+      :rules="rules"
+      ref="listData"
+      label-width="120px"
+      class="demo-ruleForm"
+    >
+      <h5>电脑端广告语</h5>
+      <el-form-item label="展示:" prop="sloganStatus">
+        <el-radio-group v-model="listData.sloganStatus">
+          <el-radio :label="1">启用</el-radio>
+          <el-radio :label="0">关闭</el-radio>
+        </el-radio-group></el-form-item
+      >
+      <el-form-item
+        label="标题:"
+        prop="slogan"
+        :rules="
+          listData.sloganStatus == 1 ? rules.slogan : [{ required: false }]
+        "
+      >
+        <el-input
+          style="width: 300px"
+          v-model="listData.slogan"
+          clearable
+          placeholder="输入如:为什么选择XX云学堂?"
+        ></el-input>
+      </el-form-item>
+      <el-row>
+        <el-col span="8">
+          <el-form-item label="展示:" prop="sub1Status">
+            <el-radio-group v-model="listData.sub1Status">
+              <el-radio :label="1">启用</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group></el-form-item
+          >
+          <el-form-item
+            label="副标题一:"
+            prop="sub1Title"
+            :rules="
+              listData.sub1Status == 1 ? rules.sub1Title : [{ required: false }]
+            "
+          >
+            <el-input
+              style="width: 300px"
+              v-model="listData.sub1Title"
+              clearable
+              placeholder="输入如:人社批准"
+            ></el-input>
+          </el-form-item>
+          <el-form-item
+            label="副描述一:"
+            prop="sub1Description"
+            :rules="
+              listData.sub1Status == 1
+                ? rules.sub1Description
+                : [{ required: false }]
+            "
+          >
+            <el-input
+              style="width: 300px"
+              v-model="listData.sub1Description"
+              clearable
+              placeholder="输入如:办学许可号:人社民440000315XXXX号"
+            ></el-input> </el-form-item
+        ></el-col>
+        <el-col span="8">
+          <el-form-item label="展示:" prop="sub2Status">
+            <el-radio-group v-model="listData.sub2Status">
+              <el-radio :label="1">启用</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group></el-form-item
+          >
+          <el-form-item
+            label="副标题二:"
+            prop="sub2Title"
+            :rules="
+              listData.sub2Status == 1 ? rules.sub2Title : [{ required: false }]
+            "
+          >
+            <el-input
+              style="width: 300px"
+              v-model="listData.sub2Title"
+              clearable
+              placeholder="输入如:十年专注"
+            ></el-input>
+          </el-form-item>
+          <el-form-item
+            label="副描述二:"
+            prop="sub2Description"
+            :rules="
+              listData.sub2Status == 1
+                ? rules.sub2Description
+                : [{ required: false }]
+            "
+          >
+            <el-input
+              style="width: 300px"
+              v-model="listData.sub2Description"
+              clearable
+              placeholder="输入如:雄厚师资:教授、博士、工程师"
+            ></el-input> </el-form-item
+        ></el-col>
+        <el-col span="8">
+          <el-form-item label="展示:" prop="sub3Status">
+            <el-radio-group v-model="listData.sub3Status">
+              <el-radio :label="1">启用</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group></el-form-item
+          >
+          <el-form-item
+            label="副标题三:"
+            prop="sub3Title"
+            :rules="
+              listData.sub3Status == 1 ? rules.sub3Title : [{ required: false }]
+            "
+          >
+            <el-input
+              style="width: 300px"
+              v-model="listData.sub3Title"
+              clearable
+              placeholder="输入如:教学实力"
+            ></el-input>
+          </el-form-item>
+          <el-form-item
+            label="副描述三:"
+            prop="sub3Description"
+            :rules="
+              listData.sub3Status == 1
+                ? rules.sub3Description
+                : [{ required: false }]
+            "
+          >
+            <el-input
+              style="width: 300px"
+              v-model="listData.sub3Description"
+              clearable
+              placeholder="输入如:服务5000余家企业,近50000余人次"
+            ></el-input> </el-form-item
+        ></el-col>
+      </el-row>
+      <h5>电脑端文本</h5>
+
+      <el-table :data="tableData" style="margin-top: 10px" border
+        ><el-table-column label="文本内容" align="center">
+          <template slot-scope="scope">
+            <el-input
+              v-model="scope.row['name']"
+            ></el-input> </template></el-table-column
+        ><el-table-column label="状态" align="center" width="180px">
+          <template slot-scope="scope">
+            <el-switch
+              :active-value="1"
+              :inactive-value="0"
+              style="display: block"
+              v-model="scope.row['status']"
+              active-color="#13ce66"
+              inactive-color="#ff4949"
+              active-text="开启"
+              inactive-text="关闭"
+            >
+            </el-switch></template
+        ></el-table-column>
+        <el-table-column align="center" width="200px">
+          <template slot="header" slot-scope="scope">
+            <el-button
+              size="mini"
+              type="primary"
+              @click="tableData.push({ name: '', status: 0 })"
+              >新增</el-button
+            >
+          </template>
+          <template slot-scope="scope">
+            <el-button
+              type="text"
+              icon="el-icon-upload2"
+              @click="sort(scope.$index, 1)"
+            ></el-button>
+            <el-button
+              type="text"
+              icon="el-icon-download"
+              @click="sort(scope.$index, 2)"
+            ></el-button>
+            <el-button type="text" @click="tableData.splice(scope.$index, 1)"
+              >删除</el-button
+            >
+          </template></el-table-column
+        >
+      </el-table>
+
+      <h5>版权所有</h5>
+      <el-form-item label="展示:" prop="copyrightStatus">
+        <el-radio-group v-model="listData.copyrightStatus">
+          <el-radio :label="1">启用</el-radio>
+          <el-radio :label="0">关闭</el-radio>
+        </el-radio-group></el-form-item
+      >
+      <el-form-item
+        label="名称:"
+        prop="copyright"
+        :rules="
+          listData.copyrightStatus == 1
+            ? rules.copyright
+            : [{ required: false }]
+        "
+      >
+        <el-input
+          style="width: 300px"
+          v-model="listData.copyright"
+          clearable
+          placeholder="输入"
+        ></el-input>
+      </el-form-item>
+      <h5>技术支持</h5>
+      <el-form-item label="展示:" prop="technologyStatus">
+        <el-radio-group v-model="listData.technologyStatus">
+          <el-radio :label="1">启用</el-radio>
+          <el-radio :label="0">关闭</el-radio>
+        </el-radio-group></el-form-item
+      >
+      <el-form-item
+        label="名称:"
+        prop="technology"
+        :rules="
+          listData.technologyStatus == 1
+            ? rules.technology
+            : [{ required: false }]
+        "
+      >
+        <el-input
+          style="width: 300px"
+          v-model="listData.technology"
+          clearable
+          placeholder="输入"
+        ></el-input>
+      </el-form-item>
+      <h5>ICP备案号</h5>
+      <el-form-item label="备案号:" prop="icp">
+        <el-input
+          style="width: 300px"
+          v-model="listData.icp"
+          clearable
+          placeholder="输入"
+        ></el-input
+      ></el-form-item>
+      <el-form-item label="跳转工信部:" prop="miit">
+        <el-input
+          style="width: 300px"
+          v-model="listData.miit"
+          clearable
+          placeholder="输入"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="其他:" prop="otherHtml">
+        <el-input
+          type="textarea"
+          :rows="4"
+          v-model="listData.otherHtml"
+          clearable
+          placeholder="输入"
+        ></el-input>
+      </el-form-item>
+    </el-form>
+    <div style="margin-top: 20px">
+      <el-button type="primary" @click="submit">保存</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+import { listConfig, updateConfig } from "@/api/system/config";
+export default {
+  data() {
+    return {
+      initData: {
+        configValue: {},
+      },
+      listData: {},
+      tableData: [],
+      rules: {
+        sloganStatus: [
+          { required: true, message: "请选择", trigger: "change" },
+        ],
+        slogan: [{ required: true, message: "请输入标题", trigger: "blur" }],
+        sub1Status: [{ required: true, message: "请选择", trigger: "change" }],
+        sub1Title: [
+          { required: true, message: "请输入副标题一", trigger: "blur" },
+        ],
+        sub1Description: [
+          { required: true, message: "请输入副描述一", trigger: "blur" },
+        ],
+        sub2Status: [{ required: true, message: "请选择", trigger: "change" }],
+        sub2Title: [
+          { required: true, message: "请输入副标题二", trigger: "blur" },
+        ],
+        sub2Description: [
+          { required: true, message: "请输入副描述二", trigger: "blur" },
+        ],
+        sub3Status: [{ required: true, message: "请选择", trigger: "change" }],
+        sub3Title: [
+          { required: true, message: "请输入副标题三", trigger: "blur" },
+        ],
+        sub3Description: [
+          { required: true, message: "请输入副描述三", trigger: "blur" },
+        ],
+        copyrightStatus: [
+          { required: true, message: "请选择", trigger: "change" },
+        ],
+        copyright: [
+          { required: true, message: "请输入版权所有", trigger: "blur" },
+        ],
+        technologyStatus: [
+          { required: true, message: "请选择", trigger: "change" },
+        ],
+        technology: [
+          { required: true, message: "请输入技术支持", trigger: "blur" },
+        ],
+        icp: [{ required: true, message: "请输入备案号", trigger: "blur" }],
+        miit: [
+          { required: true, message: "请输入工信部网站", trigger: "blur" },
+        ],
+      },
+    };
+  },
+  mounted() {
+    this.init();
+  },
+  methods: {
+    sort(index, status) {
+      var goIndex;
+      const ary = this.tableData[index];
+      if (status == 1) {
+        if (index == 0) {
+          goIndex = this.tableData.length - 1;
+        } else {
+          goIndex = index - 1;
+        }
+      }
+      if (status == 2) {
+        if (index == this.tableData.length - 1) {
+          goIndex = 0;
+        } else {
+          goIndex = index + 1;
+        }
+      }
+      let tableData = JSON.parse(JSON.stringify(this.tableData));
+      tableData.splice(index, 1);
+      tableData.splice(goIndex, 0, ary);
+      this.tableData = tableData;
+    },
+    init() {
+      listConfig({ configKey: "client.config" }).then((res) => {
+        if (res.rows.length) {
+          this.initData = res.rows[0];
+          let configValue = JSON.parse(res.rows[0].configValue) || {};
+          this.$nextTick(() => {
+            this.listData = configValue.footer || {};
+            this.tableData = this.listData.tableData || [];
+          });
+        }
+      });
+    },
+    submit() {
+      this.$refs["listData"].validate((valid) => {
+        if (valid) {
+          this.listData.tableData = this.tableData;
+          let initData = JSON.parse(JSON.stringify(this.initData));
+          initData.configValue = JSON.parse(initData.configValue);
+          initData.configValue["footer"] = this.listData;
+          initData.configValue = JSON.stringify(initData.configValue);
+          updateConfig(initData).then((res) => {
+            this.$message.success("保存成功");
+            this.init();
+          });
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+h5 {
+  font-weight: bold;
+  padding-left: 30px;
+  margin: 10px 0px 16px;
+  font-size: 14px;
+}
+</style>

+ 233 - 0
src/views/Marketing/clientSetup/pageSet/page4.vue

@@ -0,0 +1,233 @@
+<template>
+  <div>
+    <el-form
+      :model="listData"
+      :rules="rules"
+      ref="listData"
+      label-width="120px"
+      class="demo-ruleForm"
+    >
+      <el-row>
+        <el-col :span="6"
+          >
+          <h4>电脑端</h4>
+          <h5>首页</h5>
+          <el-form-item label="核心标签:" prop="tag">
+            <el-radio-group v-model="listData.tag">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="快捷入口:" prop="entrance">
+            <el-radio-group v-model="listData.entrance">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="资讯分享:" prop="sharing">
+            <el-radio-group v-model="listData.sharing">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="推荐课程:" prop="course">
+            <el-radio-group v-model="listData.course">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="推荐题库:" prop="bank">
+            <el-radio-group v-model="listData.bank">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="师资团队:" prop="team">
+            <el-radio-group v-model="listData.team">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="资质证书:" prop="certificate">
+            <el-radio-group v-model="listData.certificate">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group></el-form-item
+          >
+          <el-form-item label="问题帮助:" prop="problem">
+            <el-radio-group v-model="listData.problem">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group></el-form-item
+          >
+          <h5>个人中心</h5>
+          <el-form-item label="增值税发票:" prop="invoice">
+            <el-radio-group v-model="listData.invoice">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group>
+          </el-form-item></el-col
+        >
+        <el-col :span="6"
+          >
+          <h4>移动端</h4><h5>首页</h5>
+          <el-form-item label="立即获取:" prop="tagH5">
+            <el-radio-group v-model="listData.tagH5">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="快捷入口:" prop="entranceH5">
+            <el-radio-group v-model="listData.entranceH5">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="推荐课程:" prop="courseH5">
+            <el-radio-group v-model="listData.courseH5">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="推荐题库:" prop="bankH5">
+            <el-radio-group v-model="listData.bankH5">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="资讯分享:" prop="sharingH5">
+            <el-radio-group v-model="listData.sharingH5">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="师资团队:" prop="teamH5">
+            <el-radio-group v-model="listData.teamH5">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="资质证书:" prop="certificateH5">
+            <el-radio-group v-model="listData.certificateH5">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group></el-form-item
+          >
+          <el-form-item label="问题帮助:" prop="problemH5">
+            <el-radio-group v-model="listData.problemH5">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group></el-form-item
+          >
+          <h5>我的</h5>
+          <el-form-item label="增值税发票:" prop="invoiceH5">
+            <el-radio-group v-model="listData.invoiceH5">
+              <el-radio :label="1">开启</el-radio>
+              <el-radio :label="0">关闭</el-radio>
+            </el-radio-group>
+          </el-form-item></el-col
+        >
+      </el-row>
+    </el-form>
+    <div style="margin-top: 20px">
+      <el-button type="primary" @click="submit">保存</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+import { listConfig, updateConfig } from "@/api/system/config";
+export default {
+  data() {
+    return {
+      initData: {
+        configValue: {},
+      },
+      listData: {},
+      rules: {
+        tag: [{ required: true, message: "请选择", trigger: "change" }],
+        entrance: [{ required: true, message: "请选择", trigger: "change" }],
+        sharing: [{ required: true, message: "请选择", trigger: "change" }],
+        course: [{ required: true, message: "请选择", trigger: "change" }],
+        bank: [{ required: true, message: "请选择", trigger: "change" }],
+        team: [{ required: true, message: "请选择", trigger: "change" }],
+        certificate: [{ required: true, message: "请选择", trigger: "change" }],
+        problem: [{ required: true, message: "请选择", trigger: "change" }],
+        invoice: [{ required: true, message: "请选择", trigger: "change" }],
+        tagH5: [{ required: true, message: "请选择", trigger: "change" }],
+        entranceH5: [{ required: true, message: "请选择", trigger: "change" }],
+        sharingH5: [{ required: true, message: "请选择", trigger: "change" }],
+        courseH5: [{ required: true, message: "请选择", trigger: "change" }],
+        bankH5: [{ required: true, message: "请选择", trigger: "change" }],
+        teamH5: [{ required: true, message: "请选择", trigger: "change" }],
+        certificateH5: [{ required: true, message: "请选择", trigger: "change" }],
+        problemH5: [{ required: true, message: "请选择", trigger: "change" }],
+        invoiceH5: [{ required: true, message: "请选择", trigger: "change" }],
+      },
+    };
+  },
+  mounted() {
+    this.init();
+  },
+  methods: {
+    init() {
+      listConfig({ configKey: "client.config" }).then((res) => {
+        if (res.rows.length) {
+          this.initData = res.rows[0];
+          let configValue = JSON.parse(res.rows[0].configValue) || {};
+          this.listData = configValue.other || {};
+        }
+      });
+    },
+    submit() {
+      this.$refs["listData"].validate((valid) => {
+        if (valid) {
+          let initData = JSON.parse(JSON.stringify(this.initData));
+          initData.configValue = JSON.parse(initData.configValue);
+          initData.configValue["other"] = this.listData;
+          initData.configValue = JSON.stringify(initData.configValue);
+          updateConfig(initData).then((res) => {
+            this.$message.success("保存成功");
+            this.init();
+          });
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.photoBox {
+  width: 216px;
+  height: 46px;
+  text-align: center;
+  line-height: 46px;
+  border: 1px dashed #bdbdbd;
+  position: relative;
+  & > .err_icon {
+    position: absolute;
+    top: 4px;
+    right: 4px;
+    color: red;
+    font-size: 16px;
+    cursor: pointer;
+    user-select: none;
+  }
+}
+h5 {
+  font-weight: bold;
+  padding-left: 30px;
+  margin: 10px 0px 16px;
+  font-size: 14px;
+}
+.photo_text {
+  font-size: 12px;
+  color: #aaa;
+  height: 20px;
+  line-height: 20px;
+}
+</style>

+ 1 - 1
src/views/Marketing/order/offlineOrder/index.vue

@@ -58,7 +58,7 @@ export default {
     return {
       loading: false, //当前表单加载是否加载动画
       navText: {
-        title: "线下订单",
+        title: "后台订单",
         index: 0,
         ch: "条",
         num: true,

+ 1 - 1
src/views/education/classManageMent/learningHoursRecordList/index.vue

@@ -198,7 +198,7 @@ export default {
         },
         {
           prop: "searchKey",
-          placeholder: "班级名称/商品名称/学员姓名",
+          placeholder: "班级名称/商品名称/学员姓名/公司名称",
         },
       ],
       formData: {

+ 50 - 13
src/views/finance/invoiceManage/dialogExamine.vue

@@ -9,15 +9,34 @@
       <div>
         <h2 class="h_top">
           订单详情
-          <el-button type="text" style="margin-left: 20px">查看</el-button>
+          <el-button type="text" style="margin-left: 20px" @click="orderDetail"
+            >查看</el-button
+          >
         </h2>
         <div class="li_box">
-          订单编号:<span>LD24010818000464500334</span>商品类型:<span>课程</span>教育类型:<span>考前培训</span>培训项目:<span
-            >施工现场专业人员</span
-          ><br />订购人数:<span>3 位</span>订购数量:<span>4 个</span
-          >下单金额:<span>¥2,000.00</span>退款金额:<span>¥1,000.00</span>实际金额:<span
-            >¥1,000.00</span
-          >
+          订单编号:<span>{{ orderInfo.handleOrderSn }}</span
+          >商品类型:<span>{{
+            orderInfo.goodsType == 1
+              ? "课程"
+              : orderInfo.goodsType == 2
+              ? "题库"
+              : ""
+          }}</span
+          >教育类型:<span>{{ orderInfo.educationName }}</span
+          >培训项目:<span>{{
+            orderInfo.projectName + " - " + orderInfo.businessName
+          }}</span
+          ><br />
+          <!-- 订购人数:<span>{{ orderInfo.userNum || 0 }} 位</span
+          >订购数量:<span>{{ orderInfo.goodsNum }} 个</span> -->
+          下单金额:<span
+            >¥{{ orderInfo.orderPrice | formatPrice }}</span
+          >退款金额:<span
+            >¥<span v-if="orderInfo.refundPrice">{{
+              orderInfo.refundPrice | formatPrice
+            }}</span
+            ><span v-else>0.00</span></span
+          >实际金额:<span>¥{{ orderInfo.realPrice | formatPrice }}</span>
         </div>
       </div>
       <div>
@@ -40,13 +59,17 @@
               ? "企业"
               : ""
           }}</span
-          >企业全称:<span>{{ invoiceInfo.invoiceTitle }}</span
-          >纳税人号:<span>{{ invoiceInfo.taxRegistryNumber }}</span
+          > {{invoiceInfo.subject == 1 ? '姓名:':'企业全称:'}}<span>{{ invoiceInfo.invoiceTitle }}</span
+          >{{invoiceInfo.subject == 1 ? '身份证号:':'纳税人号:'}}<span>{{ invoiceInfo.taxRegistryNumber }}</span
           ><br />开票备注:<span>{{ invoiceInfo.openRemark }}</span
-          >收票邮箱:<span>{{ invoiceInfo.email }}</span
-          >收票姓名:<span>{{ invoiceInfo.consignee }}</span
-          >收票电话:<span>{{ invoiceInfo.collectionTelephone }}</span
-          >收票地址:<span>{{ invoiceInfo.shippingAddress }}</span>
+          ><template v-if="checkList.includes('2')">
+            收票邮箱:<span>{{ invoiceInfo.email }}</span></template
+          >
+          <template v-if="checkList.includes('3')">
+            收票姓名:<span>{{ invoiceInfo.consignee }}</span
+            >收票电话:<span>{{ invoiceInfo.collectionTelephone }}</span
+            >收票地址:<span>{{ invoiceInfo.shippingAddress }}</span></template
+          >
         </div>
       </div>
       <div>
@@ -130,11 +153,14 @@
     <el-dialog :visible.sync="dialogVisible">
       <img width="100%" :src="dialogImageUrl" alt="" />
     </el-dialog>
+    <order-detail ref="orderDetail" />
   </div>
 </template>
 
 <script>
+import orderDetail from "../orderManage/orderDetail.vue";
 export default {
+  components: { orderDetail },
   data() {
     return {
       dialogImageUrl: "",
@@ -144,18 +170,29 @@ export default {
       fileList: [],
       checkList: [],
       handleRemark: "",
+      orderInfo: {},
     };
   },
 
   mounted() {},
 
   methods: {
+    //查看详情
+    orderDetail() {
+      this.$refs.orderDetail.openBoxs(this.orderInfo.handleOrderSn);
+    },
     openBoxs(row) {
       this.invoiceInfo = {};
       this.fileList = [];
       this.checkList = [];
       this.handleRemark = "";
       this.isShow = true;
+      this.orderInfo = {};
+      this.$api
+        .orderhandledetail({ handleOrderSn: row.orderSn })
+        .then((res) => {
+          this.orderInfo = res.data;
+        });
       this.$api.orderinvoicecompanydetail(row.invoiceId).then((res) => {
         this.invoiceInfo = res.data || {};
         this.checkList = res.data.invoiceMode.split(",");

+ 45 - 10
src/views/finance/invoiceManage/index.vue

@@ -19,9 +19,11 @@
       :tableData="tableData"
       :navText="navText"
       :loading="loading"
+      ref="tableList"
+      rowKey="invoiceId"
     >
       <template slot="customize">
-        <el-button type="primary">批量冲红</el-button>
+        <el-button type="primary" @click="blushAll">批量冲红</el-button>
       </template>
       <template slot="applyFor" slot-scope="props">
         <p>
@@ -31,6 +33,21 @@
           开票时间:{{ $methodsTools.onlyForma(props.scope.row.invoiceTime) }}
         </p>
         <p>订单编号:{{ props.scope.row.orderSn }}</p>
+        <p>
+          商品类型:{{
+            props.scope.row.goodsType == 1
+              ? "课程"
+              : props.scope.row.goodsType == 2
+              ? "题库"
+              : "-"
+          }}
+        </p>
+        <p>教育类型:{{ props.scope.row.educationName }}</p>
+        <p>
+          培训项目:{{
+            props.scope.row.projectName + " - " + props.scope.row.businessName
+          }}
+        </p>
         <p>申请金额:{{ props.scope.row.invoicePrice | formatPrice }}</p>
       </template>
       <template slot="invoice" slot-scope="props">
@@ -52,15 +69,17 @@
               : ""
           }}
         </p>
-        <p>企业全称:{{ props.scope.row.invoiceTitle }}</p>
-        <p>纳税人号:{{ props.scope.row.taxRegistryNumber }}</p>
+        <p>{{props.scope.row.subject == 1?'姓名:':'企业全称:'}}{{ props.scope.row.invoiceTitle }}</p>
+        <p>{{props.scope.row.subject == 1?'身份证号:':'纳税人号:'}}{{ props.scope.row.taxRegistryNumber }}</p>
         <p>开票备注:{{ props.scope.row.openRemark }}</p>
       </template>
       <template slot="invoice1" slot-scope="props">
-        <p>收票邮箱:{{ props.scope.row.email }}</p>
-        <p>收票姓名:{{ props.scope.row.consignee }}</p>
+        <p v-if="props.scope.row.invoiceMode.includes(2)">收票邮箱:{{ props.scope.row.email }}</p>
+        <template v-if="props.scope.row.invoiceMode.includes(3)">
+          <p>收票姓名:{{ props.scope.row.consignee }}</p>
         <p>收票电话:{{ props.scope.row.collectionTelephone }}</p>
         <p>收票地址:{{ props.scope.row.shippingAddress }}</p>
+        </template>
       </template>
       <template slot="invoice2" slot-scope="props">
         <p v-if="props.scope.row.invoiceMode.includes(1)">在线下载</p>
@@ -68,14 +87,14 @@
         <p v-if="props.scope.row.invoiceMode.includes(3)">纸质快递</p>
       </template>
       <template slot="btn" slot-scope="props">
-        <el-button type="text" @click="examineFunc(props.scope.row)" >审核</el-button>
-        <el-button type="text" @click="handleFunc(props.scope.row)"  :disabled="!(props.scope.row.invoiceStatus == 1 || props.scope.row.invoiceStatus == 2)"
+        <el-button type="text" @click="examineFunc(props.scope.row)" :disabled="props.scope.row.invoiceStatus != 1">审核</el-button>
+        <el-button type="text" @click="handleFunc(props.scope.row)"  :disabled="props.scope.row.invoiceStatus != 2 && props.scope.row.invoiceStatus != 4"
           >处理</el-button
         >
         <el-button
           type="text"
           @click="blush([props.scope.row.invoiceId])"
-          :disabled="props.scope.row.washStatus == 2 || props.scope.row.invoiceStatus == 1"
+          :disabled="props.scope.row.washStatus != 1"
           >冲红</el-button
         >
         <el-button type="text" @click="remarkFunc(props.scope.row)"
@@ -119,12 +138,13 @@ export default {
     return {
       loading: false, //当前表单加载是否加载动画
       navText: {
-        title: "申请列表",
+        title: "经办发票",
         index: 0,
         ch: "条",
         num: true,
         choice: true,
         addHide: true,
+        openCheckMore:true,
         backFatherBtn: {
           status: false,
           title: "未定义",
@@ -193,6 +213,8 @@ export default {
             { label: "已开票", value: 2 },
             { label: "待审核", value: 1 },
             { label: "不通过", value: 3 },
+            { label: "已失效", value: 4 },
+            { label: "未开票", value: 5 },
           ],
         },
         {
@@ -234,6 +256,7 @@ export default {
             { label: "已开票", value: 2 },
             { label: "待审核", value: 1 },
             { label: "不通过", value: 3 },
+            { label: "已失效", value: 4 },
           ],
         },
         {
@@ -293,6 +316,18 @@ export default {
     this.search();
   },
   methods: {
+    blushAll(){
+      if(this.$refs.tableList.allCheckData.length == 0){
+        this.$message.error("请勾选数据")
+        return
+      }
+      if(!(this.$refs.tableList.allCheckData.every(i => i.washStatus == 1))){
+        this.$message.error("请选择待冲红数据")
+        return
+      }
+      let invoiceIds = this.$refs.tableList.allCheckData.map(i => i.invoiceId)
+      this.blush(invoiceIds)
+    },
     pictureFunc(item) {
       if (item.prop == "unApplyNum") {
         this.formData.invoiceStatus = 1;
@@ -339,6 +374,7 @@ export default {
           pageSize: 10,
           pageNum: 1,
         };
+        this.$refs.tableList.clearMoreActive()
       }
       this.$api
         .orderinvoicecompanylist(this.formData)
@@ -354,7 +390,6 @@ export default {
       delete obj.pageNum;
       delete obj.pageSize;
       this.$api.orderinvoicecompanystatistics(obj).then((res) => {
-        console.log(res, "res");
         this.info = res.data || {};
       });
     },

+ 29 - 21
src/views/finance/orderManage/index.vue

@@ -27,7 +27,7 @@
         <p>
           创建时间:{{ $methodsTools.onlyForma(props.scope.row.createTime) }}
         </p>
-        <p>通过时间:{{ $methodsTools.onlyForma(props.scope.row.overTime) }}</p>
+        <p>通过时间:{{ $methodsTools.onlyForma(props.scope.row.payTime) }}</p>
         <p>订单编号:{{ props.scope.row.handleOrderSn }}</p>
       </template>
       <template slot="invoice" slot-scope="props">
@@ -46,13 +46,13 @@
             props.scope.row.projectName + " - " + props.scope.row.businessName
           }}
         </p>
-        <p>订购人数:{{ props.scope.row.userNum || 0 }}位</p>
-        <p>订购数量:{{ props.scope.row.goodsNum || 0 }}个</p>
+        <!-- <p>订购人数:{{ props.scope.row.userNum || 0 }}位</p>
+        <p>订购数量:{{ props.scope.row.goodsNum || 0 }}个</p> -->
       </template>
       <template slot="invoice1" slot-scope="props">
         <p>下单金额:¥{{ props.scope.row.orderPrice | formatPrice }}</p>
         <p>退款金额:¥{{ props.scope.row.goodsRefund | formatPrice }}</p>
-        <p>实际金额:¥{{ props.scope.row.payPrice | formatPrice }}</p>
+        <p>实际金额:¥{{ props.scope.row.realPrice | formatPrice }}</p>
       </template>
       <template slot="invoice2" slot-scope="props">
         <el-button
@@ -68,13 +68,15 @@
         >
       </template>
       <template slot="invoice3" slot-scope="props">
+        <span v-if="!props.scope.row.invoiceStatus">未开票</span>
         <span v-if="props.scope.row.invoiceStatus == 1">待审核</span>
         <span v-if="props.scope.row.invoiceStatus == 2">已开票</span>
         <span v-if="props.scope.row.invoiceStatus == 3">不通过</span>
-        <span v-if="props.scope.row.invoiceUrl"
+        <span v-if="props.scope.row.invoiceStatus == 4">已失效</span>
+        <span v-if="props.scope.row.invoiceUrl && props.scope.row.invoiceStatus == 2"
           >({{ props.scope.row.invoiceUrl.split(",").length }}张)
         </span>
-        <div v-if="props.scope.row.invoiceUrl">
+        <div v-if="props.scope.row.invoiceUrl && props.scope.row.invoiceStatus == 2">
           <el-button
             type="text"
             @click="downinvoice(props.scope.row.invoiceUrl.split(','))"
@@ -137,7 +139,7 @@ export default {
     return {
       loading: false, //当前表单加载是否加载动画
       navText: {
-        title: "订单列表",
+        title: "经办订单",
         index: 0,
         ch: "条",
         num: true,
@@ -153,7 +155,7 @@ export default {
         {
           label: "下单金额",
           img: "ContractAmount",
-          prop: "orderPrice",
+          prop: "payPrice",
         },
         {
           label: "退款金额",
@@ -163,20 +165,20 @@ export default {
         {
           label: "实际金额",
           img: "PaymentHasBeenReceived",
-          prop: "payPrice",
-        },
-        {
-          label: "订单数量",
-          img: "NumberOfOrders2",
-          prop: "orderNum",
-          num: true,
-        },
-        {
-          label: "订单人数",
-          img: "NumberOfOrders",
-          prop: "orderUserNum",
-          num: true,
+          prop: "orderPrice",
         },
+        // {
+        //   label: "订单数量",
+        //   img: "NumberOfOrders2",
+        //   prop: "orderNum",
+        //   num: true,
+        // },
+        // {
+        //   label: "订单人数",
+        //   img: "NumberOfOrders",
+        //   prop: "orderUserNum",
+        //   num: true,
+        // },
         {
           label: "待审订单",
           img: "PendingOrder",
@@ -244,6 +246,8 @@ export default {
             { label: "待审核", value: 1 },
             { label: "已开票", value: 2 },
             { label: "不通过", value: 3 },
+            { label: "已失效", value: 4 },
+            { label: "未开票", value: 5 },
           ],
         },
         {
@@ -258,6 +262,10 @@ export default {
           prop: "searchKey",
           placeholder: "输入姓名/身份证号/商品名称",
         },
+        {
+          prop: "handleOrderSn",
+          placeholder: "输入订单编号",
+        },
       ],
       formData: {
         pageSize: 10,

+ 51 - 17
src/views/finance/orderManage/orderDetail.vue

@@ -20,13 +20,18 @@
       </div>
 
       <div class="top_box">
-        <div>
-          订单编号:<span style="margin-right: 14px; color: #007aff">{{
-            orderInfo.handleOrderSn
-          }}</span
-          >订单状态:<span style="margin-right: 14px; color: #007aff">{{
-            getPayStatus(orderInfo.payStatus)
-          }}</span>
+        <div style="font-weight: bold">
+          订单编号:<span
+            style="margin-right: 14px; color: #007aff; font-weight: 400"
+            >{{ orderInfo.handleOrderSn }}</span
+          >订单状态:<span
+            style="margin-right: 14px; color: #007aff; font-weight: 400"
+            >{{ getPayStatus(orderInfo.payStatus) }}</span
+          >
+          密码说明:
+          <strong style="font-weight: 400"
+            >第一次开通学员,密码则为身份证后六位数</strong
+          >
         </div>
         <div>
           <el-button
@@ -34,6 +39,7 @@
             size="small"
             type="primary"
             @click="submit(1)"
+            :loading="loadingBtn"
             >审核通过</el-button
           >
           <el-button
@@ -41,6 +47,7 @@
             size="small"
             type="warning"
             @click="submit(2)"
+            :loading="loadingBtn"
             >审核不通过</el-button
           >
         </div>
@@ -68,12 +75,12 @@
           <el-descriptions-item label="培训项目">
             {{ orderInfo.projectName + " - " + orderInfo.businessName }}
           </el-descriptions-item>
-          <el-descriptions-item label="订购人数">
+          <!-- <el-descriptions-item label="订购人数">
             {{ orderInfo.userNum || 0 }}位
           </el-descriptions-item>
           <el-descriptions-item label="订购数量">
             {{ orderInfo.goodsNum || 0 }}个
-          </el-descriptions-item>
+          </el-descriptions-item> -->
           <el-descriptions-item label="下单金额">
             ¥{{ orderInfo.orderPrice | formatPrice }}
           </el-descriptions-item>
@@ -81,7 +88,7 @@
             ¥{{ orderInfo.goodsRefund | formatPrice }}
           </el-descriptions-item>
           <el-descriptions-item label="实际金额">
-            ¥{{ orderInfo.payPrice | formatPrice }}
+            ¥{{ orderInfo.realPrice | formatPrice }}
           </el-descriptions-item>
           <el-descriptions-item label="支付方式">
             {{ orderInfo.payType == 1 ? "微信" : "对公转账" }}
@@ -91,8 +98,9 @@
               type="text"
               v-if="
                 (orderInfo.payStatus == 1 ||
-                orderInfo.payStatus == 2 ||
-                orderInfo.payStatus == -2) && orderInfo.payType == 2
+                  orderInfo.payStatus == 2 ||
+                  orderInfo.payStatus == -2) &&
+                orderInfo.payType == 2
               "
               @click="openZZ(orderInfo.handleOrderSn)"
               >查看</el-button
@@ -100,7 +108,7 @@
           </el-descriptions-item>
           <el-descriptions-item label="发票状态">
             {{ showInvoice(orderInfo.invoiceStatus) }}
-            <span v-if="orderInfo.invoiceUrl"
+            <span v-if="orderInfo.invoiceUrl && orderInfo.invoiceStatus == 2"
               >({{ orderInfo.invoiceUrl.split(",").length }}张)<el-button
                 type="text"
                 @click="downinvoice(orderInfo.invoiceUrl.split(','))"
@@ -141,9 +149,12 @@
             :prop="item.prop"
           >
             <template slot-scope="scope">
-              <span v-if="item.scope == 'progress'">
-                {{ scope.row.stuAllNum + scope.row.recordNum }} /
-                {{ scope.row.secAllNum + scope.row.examNum }}
+              <span v-if="item.scope == 'progress'"
+                ><span v-if="scope.row.refundStatus == 1">已关闭</span>
+                <span v-else>
+                  {{ scope.row.stuAllNum + scope.row.recordNum }} /
+                  {{ scope.row.secAllNum + scope.row.examNum }}</span
+                >
               </span>
               <div v-else-if="item.scope == 'isOptions'">
                 <span v-for="(items, indexs) in item.options" :key="indexs"
@@ -171,6 +182,7 @@ export default {
   components: { publicTransfer },
   data() {
     return {
+      loadingBtn: false,
       loading: false,
       visible: false,
       shStatus: false,
@@ -178,6 +190,8 @@ export default {
       tableData: [],
       tableSet: [
         { label: "姓名", prop: "realname" },
+        { label: "身份证号", prop: "idCard" },
+        { label: "手机号码", prop: "telPhone" },
         { label: "年份", prop: "year" },
         { label: "科目", prop: "subjectNames" },
         { label: "商品", prop: "goodsName" },
@@ -205,6 +219,7 @@ export default {
       this.tableData = [];
       this.visible = true;
       this.loading = true;
+      this.loadingBtn = true;
       this.$api
         .orderhandledetail({ handleOrderSn: sn })
         .then((res) => {
@@ -212,6 +227,7 @@ export default {
         })
         .finally(() => {
           this.loading = false;
+          this.loadingBtn = false;
         });
       this.$api.orderhandlegoodsList({ handleOrderSn: sn }).then((res) => {
         this.tableData = res.rows || [];
@@ -219,6 +235,7 @@ export default {
     },
     close() {
       this.loading = false;
+      this.loadingBtn = false;
     },
     openZZ(sn) {
       this.$refs.publicTransfer.openBoxs(sn);
@@ -235,14 +252,18 @@ export default {
         case 3:
           str = "不通过";
           break;
+        case 4:
+          str = "已失效";
+          break;
         default:
+          str = "未开票";
           break;
       }
       return str;
     },
     downinvoice(ary) {
       for (let i = 0; i < ary.length; i++) {
-        this.download(this.$tools.splitImgHost(ary[i]));
+        this.download(this.$methodsTools.splitImgHost(ary[i]));
       }
     },
     //下载
@@ -288,6 +309,7 @@ export default {
           type: "warning",
         })
           .then(() => {
+            this.loadingBtn = true;
             this.$api
               .orderhandlecheck({
                 orderHandleSn: this.orderInfo.handleOrderSn,
@@ -297,6 +319,9 @@ export default {
                 this.$message.success("操作成功");
                 this.visible = false;
                 this.$parent.search();
+              })
+              .finally(() => {
+                this.loadingBtn = false;
               });
           })
           .catch(() => {});
@@ -309,6 +334,7 @@ export default {
           inputErrorMessage: "请输入不通过原因",
         })
           .then(({ value }) => {
+            this.loadingBtn = true;
             this.$api
               .orderhandlecheck({
                 orderHandleSn: this.orderInfo.handleOrderSn,
@@ -319,6 +345,9 @@ export default {
                 this.$message.success("操作成功");
                 this.visible = false;
                 this.$parent.search();
+              })
+              .finally(() => {
+                this.loadingBtn = false;
               });
           })
           .catch(() => {});
@@ -407,4 +436,9 @@ export default {
   align-items: center;
   justify-content: space-between;
 }
+
+/deep/ .el-descriptions-item__label.is-bordered-label {
+  color: #333;
+  font-weight: bold;
+}
 </style>

+ 8 - 7
src/views/finance/orderManage/publicTransfer.vue

@@ -29,14 +29,14 @@
             <p>
               <span>转账备注:</span>
               {{
-                orderInfo.recCompanyAccount &&
-                orderInfo.recCompanyAccount.slice(0, 6)
+                handleOrderSn &&
+                handleOrderSn.slice(handleOrderSn.length-6, handleOrderSn.length)
               }}(打款时请备注此信息)
             </p>
             <p>
               <span>转账金额:</span
               ><i style="font-style: normal; color: red; font-weight: bold">
-                ¥{{ orderInfo.payPrice | formatPrice }}</i
+                ¥{{ orderInfo.realPrice | formatPrice }}</i
               >
             </p>
             <el-button size="mini" style="margin-top: 24px" @click="copy"
@@ -92,7 +92,7 @@ export default {
       ruleForm: {
         companyName: "",
         companyTel: "",
-        companyPayImg: "",
+        companyRemark: "",
         companyPayImg: "",
       },
       orderInfo: {},
@@ -133,14 +133,15 @@ export default {
         textArea.select();
         document.execCommand("copy");
         document.body.removeChild(textArea);
+        this.$message.success("复制成功")
       };
       func(
         `企业全称:${this.orderInfo.recCompanyName},开户银行:${
           this.orderInfo.recCompanyBank
         },银行账号:${this.orderInfo.recCompanyAccount},转账备注:${
-          this.orderInfo.recCompanyAccount &&
-          this.orderInfo.recCompanyAccount.slice(0, 6)
-        }(打款时请备注此信息),转账金额:¥${this.orderInfo.payPrice?.toLocaleString(
+          this.handleOrderSn &&
+          this.handleOrderSn.slice(this.handleOrderSn.length-6, this.handleOrderSn.length)
+        }(打款时请备注此信息),转账金额:¥${this.orderInfo.realPrice?.toLocaleString(
           "zh-CN",
           (undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })
         )}`

+ 6 - 7
src/views/finance/orderManage/refundFunc.vue

@@ -73,7 +73,7 @@
         <el-button type="text" @click="orderDetail">订单详情</el-button>
         <p>订单金额:¥{{ orderInfo.orderPrice | formatPrice }}</p>
         <p>已退金额:¥{{ orderInfo.goodsRefund | formatPrice }}</p>
-        <p>实际金额:¥{{ orderInfo.payPrice | formatPrice }}</p>
+        <p>实际金额:¥{{ orderInfo.realPrice | formatPrice }}</p>
         <p>本次关闭学员:{{ tableData.length || 0 }}个</p>
         <p style="font-weight: bold">
           本次退款金额:<strong style="color: red"
@@ -85,9 +85,10 @@
       <el-form
         label-position="top"
         :model="orderInfo"
-        ref="formData"
+        ref="orderInfo"
         label-width="100px"
         class="demo-ruleForm"
+        @submit.native.prevent
       >
         <el-form-item label="收款信息:" prop="payee">
           <el-input
@@ -140,7 +141,6 @@ export default {
         { label: "金额", prop: "goodsRealPrice", scope: "price" },
         { label: "学习进度", scope: "progress" },
       ],
-      formData: {},
     };
   },
   computed: {
@@ -163,23 +163,22 @@ export default {
       this.$refs.orderDetail.openBoxs(this.orderInfo.handleOrderSn);
     },
     openBoxs(sn) {
-      this.formData = {};
       this.orderInfo = {};
       this.tableData = [];
       this.visible = true;
       this.$api.orderhandledetail({ handleOrderSn: sn }).then((res) => {
         if (res.data.payType == 1) {
-          this.formData.payee = "原路退回";
-        } else {
+          res.data.payee = "原路退回";
         }
         this.orderInfo = res.data;
       });
       this.$api
-        .orderhandlegoodsList({ handleOrderSn: sn, refundStatus: 0 })
+        .orderhandlegoodsList({ handleOrderSn: sn, refundStatus: 1 })
         .then((res) => {
           this.tableData = res.rows || [];
         });
     },
+    rx(){},
     submitForm(int) {
       if (int == 1) {
         this.$confirm("确定审核通过吗?", "提示", {