Zory преди 3 дни
родител
ревизия
dafcb98d18

+ 26 - 0
src/api/model/mDiscount.js

@@ -0,0 +1,26 @@
+import config from "@/config";
+import http from "@/utils/request";
+
+export default {
+    list: {
+        url: `${config.API_URL}/mer/discount/list`,
+        name: "-",
+        get: async function (params) {
+            return await http.get(this.url, params);
+        },
+    },
+    save: {
+        url: `${config.API_URL}/mer/discount/save`,
+        name: "-",
+        post: async function (params) {
+            return await http.post(this.url, params);
+        },
+    },
+    del: {
+        url: `${config.API_URL}/mer/discount/del`,
+        name: "-",
+        post: async function (params) {
+            return await http.post(this.url, params);
+        },
+    },
+}

+ 4 - 11
src/api/model/mPrice.js

@@ -3,28 +3,21 @@ import http from "@/utils/request";
 
 export default {
     list: {
-        url: `${config.API_URL}/mer/prints/list`,
+        url: `${config.API_URL}/mer/price/list`,
         name: "-",
         get: async function (params) {
             return await http.get(this.url, params);
         },
     },
     save: {
-        url: `${config.API_URL}/mer/prints/save`,
+        url: `${config.API_URL}/mer/price/save`,
         name: "-",
         post: async function (params) {
             return await http.post(this.url, params);
         },
     },
-    single: {
-        url: `${config.API_URL}/mer/prints/single`,
-        name: "-",
-        post: async function (params) {
-            return await http.post(this.url, params);
-        },
-    },
-    qrcode: {
-        url: `${config.API_URL}/mer/prints/qrcode`,
+    del: {
+        url: `${config.API_URL}/mer/price/del`,
         name: "-",
         post: async function (params) {
             return await http.post(this.url, params);

+ 7 - 0
src/api/model/mPrint.js

@@ -30,4 +30,11 @@ export default {
             return await http.post(this.url, params);
         },
     },
+    price: {
+        url: `${config.API_URL}/mer/prints/price`,
+        name: "-",
+        get: async function (params) {
+            return await http.get(this.url, params);
+        },
+    },
 }

+ 19 - 0
src/api/model/mShop.js

@@ -0,0 +1,19 @@
+import config from "@/config";
+import http from "@/utils/request";
+
+export default {
+    detail: {
+        url: `${config.API_URL}/mer/shop/detail`,
+        name: "-",
+        get: async function (params) {
+            return await http.get(this.url, params);
+        },
+    },
+    save: {
+        url: `${config.API_URL}/mer/shop/save`,
+        name: "-",
+        post: async function (params) {
+            return await http.post(this.url, params);
+        },
+    },
+}

+ 96 - 0
src/views/merchant/print/discount/components/form.vue

@@ -0,0 +1,96 @@
+<template>
+    <el-dialog :title="titleMap[mode]" v-model="visible" :width="500" destroy-on-close @closed="$emit('closed')" :close-on-click-modal="false" :close-on-press-escape="false">
+        <el-form ref="dialogForm" :model="formData" :rules="rules" label-width="100px" label-position="top">
+            <el-form-item label="单双面" prop="duplex">
+                <el-radio-group v-model="formData.duplex">
+                    <el-radio-button :label="item.key" v-for="(item,index) in duplexType" :key="index">{{ item.name }}</el-radio-button>
+                </el-radio-group>
+                <div class="el-form-item-msg"></div>
+            </el-form-item>
+            <el-form-item label="打印机类型" prop="color">
+                <el-radio-group v-model="formData.color">
+                    <el-radio-button :label="item.key" v-for="(item,index) in colorType" :key="index">{{ item.name }}</el-radio-button>
+                </el-radio-group>
+                <div class="el-form-item-msg"></div>
+            </el-form-item>
+            <el-form-item label="数量" prop="number">
+                <el-input v-model="formData.number" clearable placeholder="请输入">
+                    <template #append>张/页</template>
+                </el-input>
+            </el-form-item>
+            <el-form-item label="折扣" prop="rate">
+                <el-input v-model="formData.rate" clearable placeholder="请输入"></el-input>
+                <div class="el-form-item-msg">如:数量设置10,折扣设置0.8。表示打印对应的类型页面颜色的纸张数达到10或10张以上时,打8折</div>
+            </el-form-item>
+        </el-form>
+		<template #footer>
+			<el-button @click="visible=false" >取 消</el-button>
+			<el-button type="primary" :loading="isSaveing" @click="submit()">提交</el-button>
+		</template>
+    </el-dialog>
+</template>
+<script>
+export default {
+    components: {
+        
+    },
+    data(){
+        return {
+            printType:['A3','A4','A5','A6','B4','B5'],
+            duplexType:[{"name":"单面","key":1},{"name":"双面","key":2}],
+            colorType:[{"name":"彩色","key":1},{"name":"黑白","key":2}],
+            loading: false,
+            mode:"add",
+            titleMap:{
+                add:"新建折扣",
+                edit:"编辑折扣"
+            },
+            visible: false,
+            isSaveing: false,
+            formData:{},
+            rules:{
+                color: [
+                    {required: true, message: '请选择'}
+                ],
+                duplex: [
+                    {required: true, message: '请选择'}
+                ],
+                rate: [
+                    {required: true, message: '请输入'}
+                ],
+                number: [
+                    {required: true, message: '请输入'}
+                ],
+            },
+            category:[],
+            batchData:[],
+            type:1
+        }
+    },
+    methods: {
+        open(mode = 'add'){
+            this.mode = mode;
+            this.visible = true;
+            return this
+        },
+        //表单注入数据
+        setData(data){
+            this.formData = JSON.parse(JSON.stringify(data));
+        },
+        async submit(){
+            var validate = await this.$refs.dialogForm.validate().catch(()=>{});
+            if(!validate){ return false }
+            this.isSaveing = true;
+            var resp = await this.$API.mDiscount.save.post(this.formData);
+            this.isSaveing = false;
+            if (resp.code == 0) {
+                return this.$message.error(resp.msg);
+            }
+            this.$message.success(resp.msg);
+            this.visible = false;
+            this.formData = {};
+            this.$emit("success");
+        }
+    }
+}
+</script>

+ 65 - 0
src/views/merchant/print/discount/components/option.vue

@@ -0,0 +1,65 @@
+<template>
+    <fieldset>
+        <legend>
+            <el-tag type="info">按需操作</el-tag>
+        </legend>
+        <div class="op-header">
+            <div class="left-panel">
+                <el-button type="primary" icon="el-icon-plus" @click="table_add()">新建折扣</el-button>
+                <el-button type="danger" icon="el-icon-delete" :disabled="dataSelect.length>0?false:true" @click="table_del()">批量删除</el-button>
+            </div>
+        </div>
+    </fieldset>
+    <formMain ref="formMain" @success="handleSuccess"></formMain>
+</template>
+
+<script>
+import formMain from './form';
+export default {
+    components: {
+        formMain
+    },
+    props: {
+        type: { type: String, default: "1" },
+        dataSelect: { type: Array, default: () => [] },
+        dataSelectFull: { type: Array, default: () => [] }
+    },
+    data(){
+        return {
+
+        }
+    },
+    methods: {
+        table_del(){
+            if (this.dataSelect.length == 0) {
+                return this.$message.error("请选择操作数据")
+            }
+            this.$confirm("确定要执行删除吗?","提示",{type:"warning"}).then(async ()=>{
+                let submitData = {"id":this.dataSelect,"type":"batch"};
+                var resp = await this.$mDiscount.del.post(submitData);
+                if (resp.code == 0) {
+                    return this.$message.error(resp.msg)
+                }
+                this.$message.success(resp.msg)
+                this.$emit("success");
+            }).catch(()=>{});
+        },
+        handleSuccess(){
+            this.$emit("success");
+        },
+        table_add(){
+            this.$nextTick(() => {
+                this.$refs.formMain.open("add")
+            })
+        },
+        table_audit(){
+            if (this.dataSelect.length == 0) {
+                return this.$message.error("请选择修改数据")
+            }
+            this.$nextTick(() => {
+                this.$refs.formMain.open("batch").setData(this.dataSelect)
+            })
+        },
+    }
+}
+</script>

+ 119 - 0
src/views/merchant/print/discount/components/table.vue

@@ -0,0 +1,119 @@
+<template>
+    <scTable ref="table" :apiObj="list.apiObj" :params="searchKey" @selectionChange="selectionChange" row-key="id">
+        <el-table-column type="selection" width="50" fixed="left"></el-table-column>
+        
+        <el-table-column label="类型" prop="certificate_id">
+            <template #default="scope">
+                打印
+            </template>
+        </el-table-column>
+        <el-table-column label="打印类型" prop="color">
+            <template #default="scope">
+                <el-tag type="danger" v-if="scope.row.color">{{ colorData[scope.row.color] }}</el-tag>
+                <span class="status-danger" v-else>未设置</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="单双面" prop="certificate_id">
+            <template #default="scope">
+                {{ duplexData[scope.row.duplex] }}
+            </template>
+        </el-table-column>
+        <el-table-column label="数量" prop="rate">
+            <template #default="scope">
+                {{ scope.row.number }}张
+            </template>
+        </el-table-column>
+        <el-table-column label="折扣" prop="rate">
+            <template #default="scope">
+                {{ scope.row.rate }}
+            </template>
+        </el-table-column>
+        <el-table-column label="操作" width="120" align="right" fixed="right">
+            <template #default="scope">
+                <el-button-group>
+                    <el-button text type="warning" size="small" @click="table_edit(scope.row)">编辑</el-button>
+                    <el-button text type="danger" size="small" @click="table_del(scope.row)">删除</el-button>
+                </el-button-group>
+            </template>
+        </el-table-column>
+    </scTable>
+    <formMain ref="formMain" @success="handleSuccess"></formMain>
+</template>
+
+<script>
+import formMain from "./form";
+export default {
+    components: {
+        formMain
+    },
+    props: {
+        type: { type: String, default: "1" }
+    },
+    data(){
+        return {
+            colorData:['','彩色','黑白'],
+            duplexData:['','单面','双面'],
+            list: {
+                apiObj: this.$API.mDiscount.list
+            },
+            visible:false,
+            dataSelect:[],
+            dataSelectFull:[],
+            searchKey:{
+                type:this.type
+            }
+        }
+    },
+    methods:{
+        table_edit(data){
+            this.$nextTick(() => {
+                this.$refs.formMain.open("edit").setData(data)
+            })
+        },
+        table_del(data){
+            this.$confirm("确定要删除该数据吗?","删除确认",{type: 'warning'}).then(async ()=>{
+                var resp = await this.$API.mDiscount.del.post({"id":data.id,"type":""});
+                if (resp.code == 0) {
+                    return this.$message.error(resp.msg)
+                }
+                this.$message.success(resp.msg)
+                this.$refs.table.refresh()
+            }).catch(()=>{});
+        },
+        refresh(){
+            this.$refs.table.refresh()
+        },
+        upData(data){
+            this.$refs.table.upData(data)
+        },
+        handleSuccess(){
+            this.$refs.table.refresh()
+        },
+        sortChange(event){
+            if (event.order) {
+                var data = {
+                    "field":event.prop,
+                    "order":event.order
+                }
+                this.$refs.table.upData(data)
+            } else {
+                this.$refs.table.reload(this.searchKey)
+            }
+            return ;
+        },
+        selectionChange(event){
+            this.dataSelect = [];
+            var arr = [];
+            var arrCompany = [];
+            event.forEach(function(val,index){
+                arr[index] = val.id;
+                arrCompany[index] = val;
+            });
+            this.dataSelectFull = arrCompany;
+            this.dataSelect = arr;
+            this.$emit("success",this.dataSelect);
+            this.$emit("successFull",this.dataSelectFull);
+        },
+    }
+}
+</script>

+ 50 - 1
src/views/merchant/print/discount/index.vue

@@ -1,3 +1,52 @@
 <template>
+    <el-container class="flex-column">
+        <div class="table-search">
+            <optionBtn @success="handleSuccess" :dataSelect="dataSelect" :dataSelectFull="dataSelectFull"></optionBtn>
+        </div>
+        <el-main class="nopadding">
+            <div class="table-container">
+                <tablePage ref="tablePage" @success="tableHandle" @successFull="tableHandleFull"></tablePage>
+            </div>
+        </el-main>
+    </el-container>  
+</template>
 
-</template>
+<script>
+import optionBtn from './components/option';
+import tablePage from './components/table';
+export default {
+    components: {
+        optionBtn,tablePage
+    },
+    data(){
+        return {
+            activeName:"1",
+            isLoading:false,
+            searchKey:{
+                status:7
+            },
+            dataSelect:[],
+            dataSelectFull:[],
+        }
+    },
+    methods: {
+        tabClick(event){
+            this.activeName = event;
+            this.$refs.tablePage.upData({type:event})
+        },
+        tableHandle(data){
+            this.dataSelect = data;
+        },
+        tableHandleFull(data){
+            this.dataSelectFull = data;
+        },
+        handleSuccess(data){
+            this.$refs.tablePage.upData(data)
+        },
+        handleClick(name){
+            this.searchKey.type = name;
+            this.$refs.tablePage.upData(this.searchKey)
+        }
+    }
+}
+</script>

+ 54 - 0
src/views/merchant/print/index/components/price.vue

@@ -0,0 +1,54 @@
+<template>
+    <el-dialog :title="titleMap[mode]" v-model="visible" :width="500" destroy-on-close @closed="$emit('closed')" :close-on-click-modal="false" :close-on-press-escape="false">
+        <el-form ref="dialogForm" :model="formData" :rules="rules" label-width="100px" label-position="top">
+            <el-row :gutter="15">
+                <el-col :span="12" v-for="item in priceData">
+                    <el-form-item :label="item.paper_size+colorData[item.color]+duplexData[item.duplex]" prop="number">
+                        <el-input v-model="formData.number" clearable placeholder="请输入">
+                            <template #append>元</template>
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+        </el-form>
+        <el-alert type="error" :closable="false">可针对打印机设置额外收费。如:设置A4黑白单面打印额外增收0.1元,则打印A4黑白单面单价额外加收0.1元</el-alert>
+		<template #footer>
+			<el-button @click="visible=false" >取 消</el-button>
+			<el-button type="primary" :loading="isSaveing" @click="submit()">设置</el-button>
+		</template>
+    </el-dialog>
+</template>
+
+<script>
+export default {
+    data(){
+        return {
+            loading: false,
+            mode:"add",
+            titleMap:{
+                add:"更新地址",
+                edit:"更新地址"
+            },
+            visible: false,
+            isSaveing: false,
+            formData:{},
+            colorData:['','彩色','黑白'],
+            duplexData:['','单面','双面'],
+            priceData:[]
+        }
+    },
+    methods: {
+        open(mode = 'add'){
+            this.mode = mode;
+            this.visible = true;
+            return this
+        },
+        //表单注入数据
+        setData(data){
+            this.formData.id = data.id;
+            this.priceData = data.price;
+            this.titleMap.edit = "打印机【"+data.name + "】额外收费"
+        },
+    }
+}
+</script>

+ 16 - 3
src/views/merchant/print/index/components/table.vue

@@ -79,12 +79,13 @@
                 <el-button-group>
                     <el-button text type="warning" size="small" @click="table_edit(scope.row)">编辑</el-button>
                     <el-button text type="success" size="small" @click="table_qrcode(scope.row)">二维码</el-button>
-                    <el-button text type="danger" size="small" @click="table_passwd(scope.row)" v-if="scope.row.is_price==2">额外收费</el-button>
+                    <el-button text type="danger" size="small" @click="table_price(scope.row)" v-if="scope.row.is_price==2">额外收费</el-button>
                 </el-button-group>
             </template>
         </el-table-column>
     </scTable>
     <formMain ref="formMain" @success="handleSuccess"></formMain>
+    <priceMain ref="priceMain" @success="handleSuccess"></priceMain>
     <el-dialog :title="qrcodeTitle" v-model="visible" :width="465" destroy-on-close @closed="$emit('closed')" :close-on-click-modal="false" :close-on-press-escape="false">
         <div class="qrcode-img">
             <img :src="qrcodeImg" />
@@ -97,9 +98,10 @@
 
 <script>
 import formMain from "./form";
+import priceMain from "./price";
 export default {
     components: {
-        formMain
+        formMain,priceMain
     },
     data(){
         return {
@@ -119,6 +121,17 @@ export default {
         }
     },
     methods: {
+        async table_price(data){
+            var loading = this.$loading();
+            var resp = await this.$API.mPrint.price.get();
+            loading.close()
+            if (resp.code == 0) {
+                return this.$message.error(resp.msg);
+            }
+            this.$nextTick(() => {
+                this.$refs.priceMain.open("edit").setData({"id":data.id,"name":data.name,"price":resp.data})
+            })
+        },
         table_edit(data){
             this.$nextTick(() => {
                 this.$refs.formMain.open("edit").setData(data)
@@ -138,10 +151,10 @@ export default {
         async table_qrcode(data){
             var loading = this.$loading();
             var resp = await this.$API.mPrint.qrcode.post({"id":data.id});
+            loading.close()
             if (resp.code !== 1) {
                 return this.$message.error(resp.msg);
             }
-            loading.close()
             this.visible = true;
             this.qrcodeTitle = "【"+data.name+"】打印二维码";
             this.qrcodeImg = resp.data.img;

+ 71 - 46
src/views/merchant/print/price/components/form.vue

@@ -1,22 +1,44 @@
 <template>
-    <el-dialog :title="titleMap[mode]" v-model="visible" :width="600" destroy-on-close @closed="$emit('closed')" :close-on-click-modal="false" :close-on-press-escape="false">
+    <el-dialog :title="titleMap[mode]" v-model="visible" :width="500" destroy-on-close @closed="$emit('closed')" :close-on-click-modal="false" :close-on-press-escape="false">
         <el-form ref="dialogForm" :model="formData" :rules="rules" label-width="100px" label-position="top">
-            <el-form-item label="分配门店" prop="store_id">
-                <el-input v-model="formData.store_id" placeholder="选择门店" clearable readonly :style="{ width: '100%' }" @click="selectUser">
-                    <template #append>
-                        <el-tooltip
-                            effect="dark"
-                            content="点这里,清除选择"
-                            placement="top-start"
-                        >
-                        <div class="remove-a" @click="clearUser">清除</div>
-                        </el-tooltip>
-                    </template>
-                    <template #prepend>所属门店</template>
-                </el-input>
+            <template v-if="type==1">
+                <el-form-item label="纸张类型" prop="paper_size">
+                    <el-radio-group v-model="formData.paper_size">
+                        <el-radio-button :label="item" v-for="(item,index) in printType" :key="index">{{ item }}</el-radio-button>
+                    </el-radio-group>
+                    <div class="el-form-item-msg"></div>
+                </el-form-item>
+                <el-form-item label="单双面" prop="duplex">
+                    <el-radio-group v-model="formData.duplex">
+                        <el-radio-button :label="item.key" v-for="(item,index) in duplexType" :key="index">{{ item.name }}</el-radio-button>
+                    </el-radio-group>
+                    <div class="el-form-item-msg"></div>
+                </el-form-item>
+            </template>
+            <template v-if="type==2">
+                <el-form-item label="纸张类型" prop="paper_size">
+                    <el-radio-group v-model="formData.paper_size" disabled>
+                        <el-radio-button :label="item" v-for="(item,index) in printType" :key="index">{{ item }}</el-radio-button>
+                    </el-radio-group>
+                    <div class="el-form-item-msg"></div>
+                </el-form-item>
+                <el-form-item label="单双面" prop="duplex">
+                    <el-radio-group v-model="formData.duplex" disabled>
+                        <el-radio-button :label="item.key" v-for="(item,index) in duplexType" :key="index">{{ item.name }}</el-radio-button>
+                    </el-radio-group>
+                    <div class="el-form-item-msg"></div>
+                </el-form-item>
+            </template>
+            <el-form-item label="打印机类型" prop="color">
+                <el-radio-group v-model="formData.color">
+                    <el-radio-button :label="item.key" v-for="(item,index) in colorType" :key="index">{{ item.name }}</el-radio-button>
+                </el-radio-group>
+                <div class="el-form-item-msg"></div>
             </el-form-item>
-            <el-form-item label="POI名称" v-if="mode=='edit'">
-                <el-input v-model="formData.poi_name" readonly disabled clearable placeholder="请输入"></el-input>
+            <el-form-item label="价格" prop="price">
+                <el-input v-model="formData.price" clearable placeholder="请输入">
+                    <template #append>元</template>
+                </el-input>
             </el-form-item>
         </el-form>
 		<template #footer>
@@ -32,61 +54,64 @@ export default {
     },
     data(){
         return {
+            printType:['A3','A4','A5','A6','B4','B5'],
+            duplexType:[{"name":"单面","key":1},{"name":"双面","key":2}],
+            colorType:[{"name":"彩色","key":1},{"name":"黑白","key":2}],
             loading: false,
             mode:"add",
             titleMap:{
                 add:"新建商品",
-                edit:"分配门店",
-                batch:"批量分配门店"
+                edit:"分配门店"
             },
             visible: false,
             isSaveing: false,
             formData:{},
             rules:{
-                store_id: [
+                paper_size: [
+                    {required: true, message: '请选择'}
+                ],
+                color: [
+                    {required: true, message: '请选择'}
+                ],
+                duplex: [
                     {required: true, message: '请选择'}
-                ]
+                ],
+                price: [
+                    {required: true, message: '请输入'}
+                ],
             },
             category:[],
-            batchData:[]
+            batchData:[],
+            type:1
         }
     },
     methods: {
-        handleStore(data){
-            this.formData.store_id = data.user_id;
-        },
-        clearUser(){
-            this.formData.agent = "";
-        },
-        selectUser(){
-            this.$nextTick(() => {
-                this.$refs.agentData.open()
-            })
-        },
-        open(mode = 'add'){
+        open(mode = 'add',type){
             this.mode = mode;
             this.visible = true;
+            this.type = type;
+            if (type == 1) {
+                this.titleMap.add = "新建打印价格";
+                this.titleMap.edit = "编辑打印价格";
+            } else {
+                this.titleMap.add = "新建复印价格";
+                this.titleMap.edit = "编辑复印价格";
+                this.formData.duplex = 1;
+                this.formData.paper_size = 'A4';
+            }
             return this
         },
         //表单注入数据
         setData(data){
-            if (this.mode == "batch") {
-                this.batchData = data;
-            } else {
-                this.formData = data;
-            }
+            this.formData = JSON.parse(JSON.stringify(data));
         },
         async submit(){
             var validate = await this.$refs.dialogForm.validate().catch(()=>{});
             if(!validate){ return false }
-            let submitData;
-            if (this.mode == "edit") {
-                submitData = {"id":this.formData.id,"value":this.formData.store_id,"field":"store_id","type":"one"};
-            }
-            if (this.mode == "batch") {
-                submitData = {"id":this.batchData,"value":this.formData.store_id,"field":"store_id","type":"batch"};
-            }
-            var resp = await this.$API.merStore.save.post(submitData);
+            this.formData.type = this.type;
+            this.isSaveing = true;
+            var resp = await this.$API.mPrice.save.post(this.formData);
+            this.isSaveing = false;
             if (resp.code == 0) {
                 return this.$message.error(resp.msg);
             }

+ 6 - 37
src/views/merchant/print/price/components/option.vue

@@ -5,7 +5,7 @@
         </legend>
         <div class="op-header">
             <div class="left-panel">
-                <el-button type="primary" icon="el-icon-plus" @click="table_audit()">新建价格</el-button>
+                <el-button type="primary" icon="el-icon-plus" @click="table_add()">新建价格</el-button>
                 <!-- <el-button type="primary" icon="el-icon-download" @click="table_export()">导出</el-button> -->
             </div>
         </div>
@@ -30,45 +30,14 @@ export default {
         }
     },
     methods: {
-        async table_clear(){
-            if (this.dataSelect.length == 0) {
-                return this.$message.error("请选择修改数据")
-            }
-            let submitData = {"id":this.dataSelect,"value":0,"field":"store_id","type":"batch"};
-            var resp = await this.$API.merStore.save.post(submitData);
-            if (resp.code == 0) {
-                return this.$message.error(resp.msg);
-            }
-            this.$message.success(resp.msg);
-            this.$emit("success");
-        },
-        async table_batch_status(status){
-            if (this.dataSelect.length == 0) {
-                return this.$message.error("请选择修改数据")
-            }
-            let submitData = {"id":this.dataSelect,"value":status,"field":"status","type":"batch"};
-            var resp = await this.$API.merStore.save.post(submitData);
-            if (resp.code == 0) {
-                return this.$message.error(resp.msg);
-            }
-            this.$message.success(resp.msg);
-            this.$emit("success");
-        },
-        table_del(data){
-            this.$confirm(`确定要执行删除吗`, '提示', {
-                type: 'warning'
-            }).then(async ()=>{
-                var resp = await this.$API.merGoods.del.post({"id":this.dataSelect,"type":"batch"});
-                if (resp.code == 0) {
-                    return this.$message.warning(resp.msg);
-                }
-                this.$message.success(resp.msg);
-                this.$emit("success");
-            }).catch(()=>{})
-        },
         handleSuccess(){
             this.$emit("success");
         },
+        table_add(){
+            this.$nextTick(() => {
+                this.$refs.formMain.open("add",this.type)
+            })
+        },
         table_audit(){
             if (this.dataSelect.length == 0) {
                 return this.$message.error("请选择修改数据")

+ 70 - 4
src/views/merchant/print/price/components/table.vue

@@ -1,23 +1,89 @@
 <template>
     <scTable ref="table" :apiObj="list.apiObj" :params="searchKey" @selectionChange="selectionChange" row-key="id">
         <el-table-column type="selection" width="50" fixed="left"></el-table-column>
-
+        
+        <el-table-column label="类型" prop="certificate_id">
+            <template #default="scope">
+                {{scope.row.type==1?'普通':'复印'}}
+            </template>
+        </el-table-column>
+        <el-table-column label="支持纸张" prop="certificate_id">
+            <template #default="scope">
+                <el-tag type="danger" v-if="scope.row.paper_size">{{ scope.row.paper_size }}</el-tag>
+                <span class="status-danger" v-else>未设置</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="参数设置" prop="certificate_id">
+            <template #default="scope">
+                {{ colorData[scope.row.color] }} - {{ duplexData[scope.row.duplex] }}
+            </template>
+        </el-table-column>
+        <el-table-column label="单价(元)" prop="certificate_id">
+            <template #default="scope">
+                {{ scope.row.price }}元
+            </template>
+        </el-table-column>
+        <el-table-column label="操作" width="120" align="right" fixed="right">
+            <template #default="scope">
+                <el-button-group>
+                    <el-button text type="warning" size="small" @click="table_edit(scope.row)">编辑</el-button>
+                    <el-button text type="danger" size="small" @click="table_del(scope.row)">删除</el-button>
+                </el-button-group>
+            </template>
+        </el-table-column>
     </scTable>
+    <formMain ref="formMain" @success="handleSuccess"></formMain>
 </template>
 
 <script>
+import formMain from "./form";
 export default {
-    
+    components: {
+        formMain
+    },
+    props: {
+        type: { type: String, default: "1" }
+    },
     data(){
         return {
+            colorData:['','彩色','黑白'],
+            duplexData:['','单面','双面'],
             list: {
-                apiObj: this.$API.mPrint.list
+                apiObj: this.$API.mPrice.list
             },
             visible:false,
             dataSelect:[],
             dataSelectFull:[],
-            searchKey:{}
+            searchKey:{
+                type:this.type
+            }
         }
     },
+    methods:{
+        table_edit(data){
+            this.$nextTick(() => {
+                this.$refs.formMain.open("edit",this.type).setData(data)
+            })
+        },
+        table_del(data){
+            this.$confirm("确定要删除该数据吗?","删除确认",{type: 'warning'}).then(async ()=>{
+                var resp = await this.$API.mPrice.del.post({"id":data.id,"type":""});
+                if (resp.code == 0) {
+                    return this.$message.error(resp.msg)
+                }
+                this.$message.success(resp.msg)
+                this.$refs.table.refresh()
+            }).catch(()=>{});
+        },
+        refresh(){
+            this.$refs.table.refresh()
+        },
+        upData(data){
+            this.$refs.table.upData(data)
+        },
+        handleSuccess(){
+            this.$refs.table.refresh()
+        },
+    }
 }
 </script>

+ 1 - 1
src/views/merchant/print/price/index.vue

@@ -35,8 +35,8 @@ export default {
     },
     methods: {
         tabClick(event){
-            console.log(event)
             this.activeName = event;
+            this.$refs.tablePage.upData({type:event})
         },
         tableHandle(data){
             this.dataSelect = data;

+ 140 - 1
src/views/merchant/shop/detail/index.vue

@@ -1,3 +1,142 @@
 <template>
+    <el-container>
+        <el-main>
+            <el-card shadow="never" header="店铺详情" class="borderNone mt10" v-loading="loadingState">
+                <fieldset class="layui-elem-field">
+                    <legend><el-tag type="danger">小提示</el-tag></legend>
+                    <div class="font-s14">除店铺名称,客服电话,营业时间以外,均不可自行修改。若需修改,请到微信服务群联系售后</div>
+                </fieldset>
+                <el-form ref="dialogForm" :model="formData" :rules="rules" label-width="100px" label-position="top">
+                    <el-row :gutter="15">
+                        <el-col :span="this.$store.state.global.ismobile?12:8">
+                            <el-form-item label="店铺名称" prop="shop_name">
+                                <el-input v-model="formData.shop_name" clearable placeholder="请输入"></el-input>
+                                <div class="el-form-item-msg"></div>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="this.$store.state.global.ismobile?12:8">
+                            <el-form-item label="联系电话" prop="shop_mobile">
+                                <el-input v-model="formData.shop_mobile" clearable placeholder="请输入"></el-input>
+                                <div class="el-form-item-msg"></div>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="this.$store.state.global.ismobile?12:8">
+                            <el-form-item label="服务到期时间">
+                                <el-input v-model="formData.vip_end" disabled clearable placeholder="请输入"></el-input>
+                                <div class="el-form-item-msg"></div>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="this.$store.state.global.ismobile?12:8">
+                            <el-form-item label="营业时间">
+                                <el-row :gutter="10">
+                                    <el-col :span="11">
+                                        <el-time-select v-model="formData.start_at" start="00:00" step="00:01" end="23:59" placeholder="请选择"  style="width: 100%"/>
+                                    </el-col>
+                                    <el-col :span="2" class="text-center">
+                                        <span class="text-gray-500">-</span>
+                                    </el-col>
+                                    <el-col :span="11">
+                                        <el-time-select v-model="formData.end_at" start="00:00" step="00:01" end="23:59" placeholder="请选择"  style="width: 100%"/>
+                                    </el-col>
+                                </el-row>
+                                <div class="el-form-item-msg">营业时间为必选,否则小程序端无法下单</div>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="this.$store.state.global.ismobile?12:8">
+                            <el-form-item label="详细地址" prop="shop_address">
+                                <el-input v-model="formData.shop_address" clearable placeholder="请输入"></el-input>
+                                <div class="el-form-item-msg"></div>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="24">
+                            <el-form-item label="收款二维码" prop="token">
+                                <div class="qrcode">
+                                    <el-image
+                                        style="width: 100px; height: 100px"
+                                        :src="formData.qrcode"
+                                        :preview-src-list="[formData.qrcode]"
+                                        fit="contain"
+                                        :preview-teleported="true"
+                                        :hide-on-click-modal="true"
+                                    >
+                                    </el-image>
+                                </div>
+                                <div class="qrcode-down">
+                                    <el-button type="success" icon="el-icon-download" @click="downloadImage1">下载二维码</el-button>
+                                </div>
+                                <div class="el-form-item-msg">1.线下收款码支持会员卡支付、微信支付;2.可下载打印后粘贴到店里,实现线下收款</div>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="24">
+                            <el-form-item label="店铺公告" prop="shop_notice">
+                                <el-input v-model="formData.shop_notice" type="textarea" clearable placeholder="请输入"></el-input>
+                                <div class="el-form-item-msg">小程序首页显示</div>
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                </el-form>
+            </el-card>
+        </el-main>
+        <el-footer>
+            <el-button type="primary" size="large" :loading="isSaveing" @click="saveForm">保存</el-button>
+        </el-footer>
+    </el-container>
+</template>
+<script>
+export default{
+    data(){
+        return {
+            formData:{},
+            rules:{},
+            isSaveing:false,
+            loadingState:false
+        }
+    },
+    mounted(){
+        this.getData()
+    },
+    methods:{
+        async getData(){
+            this.loadingState = true;
+            var resp = await this.$API.mShop.detail.get();
+            this.loadingState = false;
+            if (resp.code == 0) {
+                return this.$message.error(resp.msg)
+            }
+            this.formData = resp.data;
+        },
+       async saveForm(){
+            var validate = await this.$refs.dialogForm.validate().catch(()=>{});
+            if(!validate){ return false }
+            this.isSaveing = true;
+            var resp = await this.$API.mShop.save.post(this.formData);
+            this.isSaveing = false;
+            if (resp.code == 0) {
+                return this.$message.error(resp.msg);
+            }
+            this.$message.success(resp.msg);
+        },
+        downloadImage1() {
+            // 创建 a 标签
+            const link = document.createElement('a')
+            // 设置下载属性
+            link.href = this.formData.qrcode
+            link.download = '店铺收款二维码_' + new Date().getTime() + '.jpg' // 文件名
+            // 触发点击
+            document.body.appendChild(link)
+            link.click()
+            // 移除标签
+            document.body.removeChild(link)
+            this.$message.success('下载成功')
+        }
+    }
+}
+</script>
 
-</template>
+<style>
+.font-s14{font-size: 14px;}
+.text-center{text-align: center;}
+.qrcode{border: 1px solid #ccc;padding: 5px;border-radius: 5px;}
+.qrcode img{width: 100%;height: 100%;}
+.qrcode-down{width: 100%;margin-top: 10px;}
+</style>