zory 3 days ago
parent
commit
95069f127a

+ 33 - 0
src/api/model/mPrice.js

@@ -0,0 +1,33 @@
+import config from "@/config";
+import http from "@/utils/request";
+
+export default {
+    list: {
+        url: `${config.API_URL}/mer/prints/list`,
+        name: "-",
+        get: async function (params) {
+            return await http.get(this.url, params);
+        },
+    },
+    save: {
+        url: `${config.API_URL}/mer/prints/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`,
+        name: "-",
+        post: async function (params) {
+            return await http.post(this.url, params);
+        },
+    },
+}

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

@@ -0,0 +1,33 @@
+import config from "@/config";
+import http from "@/utils/request";
+
+export default {
+    list: {
+        url: `${config.API_URL}/mer/prints/list`,
+        name: "-",
+        get: async function (params) {
+            return await http.get(this.url, params);
+        },
+    },
+    save: {
+        url: `${config.API_URL}/mer/prints/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`,
+        name: "-",
+        post: async function (params) {
+            return await http.post(this.url, params);
+        },
+    },
+}

+ 100 - 100
src/views/manage/setting/basic/index.vue

@@ -1,106 +1,106 @@
 <template>
 <template>
     <el-container>
     <el-container>
         <el-main>
         <el-main>
-                <el-card shadow="never" header="系统设置" class="borderNone mt10">
-                    <el-tabs v-model="activeName" class="demo-tabs" @tab-change="handleClick">
-                        <el-tab-pane label="基础设置" name="service" v-loading="isLoading">
-                            <el-form :model="sys" :rules="rules" ref="form" label-position="top" @keyup.enter="saveForm">
-                                <el-form-item label="系统名称" prop="title" class="label-item">
-                                    <el-input v-model="sys.title" placeholder="请输入" clearable />
-                                    <div class="el-form-item-msg"></div>
-                                </el-form-item>
-                                <el-form-item label="客服联系电话" prop="tel" class="label-item">
-                                    <el-input v-model="sys.tel" placeholder="请输入" clearable />
-                                    <div class="el-form-item-msg"></div>
-                                </el-form-item>
-                                <el-form-item label="系统Logo" prop="logo">
-                                    <sc-upload v-model="sys.logo"></sc-upload>
-                                </el-form-item>
-                                <el-form-item label="备案号" prop="miitbeian" class="label-item">
-                                    <el-input v-model="sys.miitbeian" placeholder="请输入" clearable />
-                                    <div class="el-form-item-msg">支持Html格式</div>
-                                </el-form-item>
-                                <el-form-item label="版权信息" prop="copyright" class="label-item">
-                                    <el-input v-model="sys.copyright" placeholder="请输入" clearable />
-                                    <div class="el-form-item-msg"></div>
-                                </el-form-item>
-                                <el-form-item label="隐私协议" prop="privacy" class="label-item">
-                                    <sc-editor v-model="sys.privacy" placeholder="请输入" :height="400"></sc-editor>
-                                    <div class="el-form-item-msg"></div>
-                                </el-form-item>
-                                <el-form-item label="服务协议" prop="agreements" class="label-item">
-                                    <sc-editor v-model="sys.agreements" placeholder="请输入" :height="400"></sc-editor>
-                                    <div class="el-form-item-msg"></div>
-                                </el-form-item>
-                            </el-form>
-                        </el-tab-pane>
-                        <el-tab-pane label="微信设置" name="wechat" v-loading="isLoading">
-                            <el-form :model="sys" :rules="rules2" ref="form" label-position="top" @keyup.enter="saveForm" v-if="activeName=='wechat'">
-                                <el-row :gutter="15">
-                                    <el-col :span="this.$store.state.global.ismobile?24:12">
-                                        <fieldset>
-                                            <legend><el-tag>公众号配置</el-tag></legend>
-                                            <el-form-item label="Token(接口认证令牌)" prop="token">
-                                                <el-input v-model="sys.token" clearable placeholder="请输入"></el-input>
-                                                <div class="el-form-item-msg">公众号平台与系统对接认证Token,请优先填写此参数并保存,然后再在微信公众号平台操作对接。</div>
-                                            </el-form-item>
-                                            <el-form-item label="AppId(公众号 APPID)" prop="appid">
-                                                <el-input v-model="sys.appid" clearable placeholder="请输入"></el-input>
-                                                <div class="el-form-item-msg">公众号APPID是所有接口必要参数,可以在公众号平台 [ 开发 > 基本配置 ] 页面获取。</div>
-                                            </el-form-item>
-                                            <el-form-item label="AppSecret(公众号 Secret)" prop="secret">
-                                                <el-input v-model="sys.secret" show-password clearable placeholder="请输入"></el-input>
-                                                <div class="el-form-item-msg">公众号应用密钥是所有接口必要参数,可以在公众号平台 [ 开发 > 基本配置 ] 页面授权后获取。</div>
-                                            </el-form-item>
-                                            <el-form-item label="AesKey(消息加密密钥)" prop="aeskey">
-                                                <el-input v-model="sys.aeskey" clearable placeholder="请输入"></el-input>
-                                                <div class="el-form-item-msg">若开启了消息加密时必需填写,消息加密密钥必需填写并保持与公众号平台一致。</div>
-                                            </el-form-item>
-                                        </fieldset>
-                                    </el-col>
-                                    <el-col :span="this.$store.state.global.ismobile?24:12">
-                                        <fieldset>
-                                            <legend><el-tag>支付配置</el-tag></legend>
-                                            <el-form-item label="MCH_ID(微信商户账号)" prop="mch_id">
-                                                <el-input v-model="sys.mch_id" clearable placeholder="请输入"></el-input>
-                                                <div class="el-form-item-msg">微信商户账号,需要在微信商户平台获取,MCH_ID 与 APPID 匹配</div>
-                                            </el-form-item>
-                                            <el-form-item label="MCH_KEY(微信商户密钥)" prop="mch_key">
-                                                <el-input v-model="sys.mch_key" show-password clearable placeholder="请输入"></el-input>
-                                                <div class="el-form-item-msg">微信商户 V2 密钥,需要在微信商户平台操作设置操作密码并获取商户接口密钥</div>
-                                            </el-form-item>
-                                            <el-form-item label="商户KEY证书" prop="cert_key">
-                                                <scUploadFile v-model="sys.cert_key" tip="请上传apiclient_key.pem文件" btnTxt="上传KEY证书" accept=".pem" :apiObj="$API.common.uploadFile" :multiple="false" :limit="1"></scUploadFile>
-                                                <div class="el-form-item-msg"></div>
-                                            </el-form-item>
-                                            <el-form-item label="商户CRET证书" prop="cert_cert">
-                                                <scUploadFile v-model="sys.cert_cert" tip="请上传apiclient_cert.pem文件" btnTxt="上传CERT证书" accept=".pem" :apiObj="$API.common.uploadFile" :multiple="false" :limit="1"></scUploadFile>
-                                                <div class="el-form-item-msg"></div>
-                                            </el-form-item>
-                                        </fieldset>
-                                    </el-col>
-                                    <el-col :span="this.$store.state.global.ismobile?24:12">
-                                        <fieldset>
-                                            <legend><el-tag>小程序配置</el-tag></legend>
-                                            <el-form-item label="AppId(小程序 APPID)" prop="mini_appid">
-                                                <el-input v-model="sys.mini_appid" clearable placeholder="请输入"></el-input>
-                                                <div class="el-form-item-msg">小程序后台获取</div>
-                                            </el-form-item>
-                                            <el-form-item label="AppSecret(小程序密钥)" prop="mini_secret">
-                                                <el-input v-model="sys.mini_secret" show-password clearable placeholder="请输入"></el-input>
-                                                <div class="el-form-item-msg">小程序后台获取</div>
-                                            </el-form-item>
-                                            <el-form-item label="分享图片" prop="share">
-                                                <sc-upload v-model="sys.share"></sc-upload>
-                                            </el-form-item>
-                                        </fieldset>
-                                    </el-col>
-                                </el-row>
-                            </el-form>
-                        </el-tab-pane>
-                        
-                    </el-tabs>
-                </el-card>
+            <el-card shadow="never" header="系统设置" class="borderNone mt10">
+                <el-tabs v-model="activeName" class="demo-tabs" @tab-change="handleClick">
+                    <el-tab-pane label="基础设置" name="service" v-loading="isLoading">
+                        <el-form :model="sys" :rules="rules" ref="form" label-position="top" @keyup.enter="saveForm">
+                            <el-form-item label="系统名称" prop="title" class="label-item">
+                                <el-input v-model="sys.title" placeholder="请输入" clearable />
+                                <div class="el-form-item-msg"></div>
+                            </el-form-item>
+                            <el-form-item label="客服联系电话" prop="tel" class="label-item">
+                                <el-input v-model="sys.tel" placeholder="请输入" clearable />
+                                <div class="el-form-item-msg"></div>
+                            </el-form-item>
+                            <el-form-item label="系统Logo" prop="logo">
+                                <sc-upload v-model="sys.logo"></sc-upload>
+                            </el-form-item>
+                            <el-form-item label="备案号" prop="miitbeian" class="label-item">
+                                <el-input v-model="sys.miitbeian" placeholder="请输入" clearable />
+                                <div class="el-form-item-msg">支持Html格式</div>
+                            </el-form-item>
+                            <el-form-item label="版权信息" prop="copyright" class="label-item">
+                                <el-input v-model="sys.copyright" placeholder="请输入" clearable />
+                                <div class="el-form-item-msg"></div>
+                            </el-form-item>
+                            <el-form-item label="隐私协议" prop="privacy" class="label-item">
+                                <sc-editor v-model="sys.privacy" placeholder="请输入" :height="400"></sc-editor>
+                                <div class="el-form-item-msg"></div>
+                            </el-form-item>
+                            <el-form-item label="服务协议" prop="agreements" class="label-item">
+                                <sc-editor v-model="sys.agreements" placeholder="请输入" :height="400"></sc-editor>
+                                <div class="el-form-item-msg"></div>
+                            </el-form-item>
+                        </el-form>
+                    </el-tab-pane>
+                    <el-tab-pane label="微信设置" name="wechat" v-loading="isLoading">
+                        <el-form :model="sys" :rules="rules2" ref="form" label-position="top" @keyup.enter="saveForm" v-if="activeName=='wechat'">
+                            <el-row :gutter="15">
+                                <el-col :span="this.$store.state.global.ismobile?24:12">
+                                    <fieldset>
+                                        <legend><el-tag>公众号配置</el-tag></legend>
+                                        <el-form-item label="Token(接口认证令牌)" prop="token">
+                                            <el-input v-model="sys.token" clearable placeholder="请输入"></el-input>
+                                            <div class="el-form-item-msg">公众号平台与系统对接认证Token,请优先填写此参数并保存,然后再在微信公众号平台操作对接。</div>
+                                        </el-form-item>
+                                        <el-form-item label="AppId(公众号 APPID)" prop="appid">
+                                            <el-input v-model="sys.appid" clearable placeholder="请输入"></el-input>
+                                            <div class="el-form-item-msg">公众号APPID是所有接口必要参数,可以在公众号平台 [ 开发 > 基本配置 ] 页面获取。</div>
+                                        </el-form-item>
+                                        <el-form-item label="AppSecret(公众号 Secret)" prop="secret">
+                                            <el-input v-model="sys.secret" show-password clearable placeholder="请输入"></el-input>
+                                            <div class="el-form-item-msg">公众号应用密钥是所有接口必要参数,可以在公众号平台 [ 开发 > 基本配置 ] 页面授权后获取。</div>
+                                        </el-form-item>
+                                        <el-form-item label="AesKey(消息加密密钥)" prop="aeskey">
+                                            <el-input v-model="sys.aeskey" clearable placeholder="请输入"></el-input>
+                                            <div class="el-form-item-msg">若开启了消息加密时必需填写,消息加密密钥必需填写并保持与公众号平台一致。</div>
+                                        </el-form-item>
+                                    </fieldset>
+                                </el-col>
+                                <el-col :span="this.$store.state.global.ismobile?24:12">
+                                    <fieldset>
+                                        <legend><el-tag>支付配置</el-tag></legend>
+                                        <el-form-item label="MCH_ID(微信商户账号)" prop="mch_id">
+                                            <el-input v-model="sys.mch_id" clearable placeholder="请输入"></el-input>
+                                            <div class="el-form-item-msg">微信商户账号,需要在微信商户平台获取,MCH_ID 与 APPID 匹配</div>
+                                        </el-form-item>
+                                        <el-form-item label="MCH_KEY(微信商户密钥)" prop="mch_key">
+                                            <el-input v-model="sys.mch_key" show-password clearable placeholder="请输入"></el-input>
+                                            <div class="el-form-item-msg">微信商户 V2 密钥,需要在微信商户平台操作设置操作密码并获取商户接口密钥</div>
+                                        </el-form-item>
+                                        <el-form-item label="商户KEY证书" prop="cert_key">
+                                            <scUploadFile v-model="sys.cert_key" tip="请上传apiclient_key.pem文件" btnTxt="上传KEY证书" accept=".pem" :apiObj="$API.common.uploadFile" :multiple="false" :limit="1"></scUploadFile>
+                                            <div class="el-form-item-msg"></div>
+                                        </el-form-item>
+                                        <el-form-item label="商户CRET证书" prop="cert_cert">
+                                            <scUploadFile v-model="sys.cert_cert" tip="请上传apiclient_cert.pem文件" btnTxt="上传CERT证书" accept=".pem" :apiObj="$API.common.uploadFile" :multiple="false" :limit="1"></scUploadFile>
+                                            <div class="el-form-item-msg"></div>
+                                        </el-form-item>
+                                    </fieldset>
+                                </el-col>
+                                <el-col :span="this.$store.state.global.ismobile?24:12">
+                                    <fieldset>
+                                        <legend><el-tag>小程序配置</el-tag></legend>
+                                        <el-form-item label="AppId(小程序 APPID)" prop="mini_appid">
+                                            <el-input v-model="sys.mini_appid" clearable placeholder="请输入"></el-input>
+                                            <div class="el-form-item-msg">小程序后台获取</div>
+                                        </el-form-item>
+                                        <el-form-item label="AppSecret(小程序密钥)" prop="mini_secret">
+                                            <el-input v-model="sys.mini_secret" show-password clearable placeholder="请输入"></el-input>
+                                            <div class="el-form-item-msg">小程序后台获取</div>
+                                        </el-form-item>
+                                        <el-form-item label="分享图片" prop="share">
+                                            <sc-upload v-model="sys.share"></sc-upload>
+                                        </el-form-item>
+                                    </fieldset>
+                                </el-col>
+                            </el-row>
+                        </el-form>
+                    </el-tab-pane>
+                    
+                </el-tabs>
+            </el-card>
         </el-main>
         </el-main>
         <el-footer style="text-align: right;">
         <el-footer style="text-align: right;">
             <el-button type="primary" size="large" :loading="isSaveing" @click="saveForm">保存</el-button>
             <el-button type="primary" size="large" :loading="isSaveing" @click="saveForm">保存</el-button>

+ 141 - 0
src/views/merchant/print/index/components/form.vue

@@ -0,0 +1,141 @@
+<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="120px" label-position="top">
+            <el-form-item label="打印类型" prop="type">
+                <el-checkbox-group v-model="formData.type">
+                    <el-checkbox-button :label="item.key" v-for="(item,index) in typeData" :key="index">{{ item.name }}</el-checkbox-button>
+                </el-checkbox-group>
+                <div class="el-form-item-msg"></div>
+            </el-form-item>
+            <el-form-item label="支持纸型" prop="paper_size">
+                <el-checkbox-group v-model="formData.paper_size">
+                    <el-checkbox-button :label="item" v-for="(item,index) in printType" :key="index">{{ item }}</el-checkbox-button>
+                </el-checkbox-group>
+                <div class="el-form-item-msg"></div>
+            </el-form-item>
+            <el-form-item label="打印机类型" prop="color">
+                <el-checkbox-group v-model="formData.color">
+                    <el-checkbox-button :label="item.key" v-for="(item,index) in colorType" :key="index">{{ item.name }}</el-checkbox-button>
+                </el-checkbox-group>
+                <div class="el-form-item-msg"></div>
+            </el-form-item>
+            <el-form-item label="打印方向" prop="direction">
+                <el-checkbox-group v-model="formData.direction">
+                    <el-checkbox-button :label="item.key" v-for="(item,index) in directionType" :key="index">{{ item.name }}</el-checkbox-button>
+                </el-checkbox-group>
+                <div class="el-form-item-msg"></div>
+            </el-form-item>
+            <el-form-item label="支持单双面" prop="duplex">
+                <el-checkbox-group v-model="formData.duplex">
+                    <el-checkbox-button :label="item.key" v-for="(item,index) in duplexType" :key="index">{{ item.name }}</el-checkbox-button>
+                </el-checkbox-group>
+                <div class="el-form-item-msg"></div>
+            </el-form-item>
+            <el-form-item label="取件方式" prop="package">
+                <el-checkbox-group v-model="formData.package">
+                    <el-checkbox-button :label="item.key" v-for="(item,index) in packageType" :key="index">{{ item.name }}</el-checkbox-button>
+                </el-checkbox-group>
+                <div class="el-form-item-msg"></div>
+            </el-form-item>
+            <el-form-item label="额外收费" prop="is_price">
+                <el-radio-group v-model="formData.is_price">
+                    <el-radio-button :label="1">关闭</el-radio-button>
+                    <el-radio-button :label="2">启用</el-radio-button>
+                </el-radio-group>
+                <div class="el-form-item-msg">开启后该打印机可设置额外价格</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 {
+    data(){
+        return {
+            loading: false,
+            mode:"add",
+            titleMap:{
+                add:"更新地址",
+                edit:"更新地址"
+            },
+            typeData:[{"name":"文档","key":1}],
+            printType:['A3','A4','A5','A6','B4','B5'],
+            colorType:[{"name":"彩色","key":1},{"name":"黑白","key":2}],
+            directionType:[{"name":"自适应","key":1},{"name":"横向","key":2},{"name":"竖向","key":3}],
+            duplexType:[{"name":"单面","key":1},{"name":"双面","key":2}],
+            packageType:[{"name":"店内打印","key":1},{"name":"远程自取","key":2},{"name":"商家配送","key":3}],
+            visible: false,
+            isSaveing: false,
+            formData:{
+                is_price:1
+            },
+            disabled:false,
+            rules:{
+                type: [
+                    {required: true, message: '请选择'}
+                ],
+                paper_size: [
+                    {required: true, message: '请选择'}
+                ],
+                color: [
+                    {required: true, message: '请选择'}
+                ],
+                direction: [
+                    {required: true, message: '请选择'}
+                ],
+                duplex: [
+                    {required: true, message: '请选择'}
+                ],
+                package: [
+                    {required: true, message: '请选择'}
+                ],
+                is_price: [
+                    {required: true, message: '请选择'}
+                ],
+            }
+        }
+    },
+    methods:{
+        open(mode = 'add'){
+            this.mode = mode;
+            this.visible = true;
+            return this
+        },
+        //表单注入数据
+        setData(data){
+            if (data.rule) {
+                this.formData = data.rule;
+            } else {
+                this.formData = {}
+            }
+            this.formData.is_price = data.is_price;
+            this.formData.id = data.id;
+            this.titleMap.edit = "打印机【"+data.name + "】设置"
+        },
+        async submit(){
+            var validate = await this.$refs.dialogForm.validate().catch(()=>{});
+            if(!validate){ return false }
+            this.isSaveing = true;
+            let submitData = JSON.parse(JSON.stringify(this.formData));
+            var resp = await this.$API.mPrint.save.post(submitData);
+            this.isSaveing = false;
+            if (resp.code !== 1) {
+                return this.$message.error(resp.msg);
+            }
+            this.$message.success(resp.msg);
+            this.visible = false;
+            this.formData = {};
+            this.submitState = false;
+            this.$emit("success");
+        }
+    }
+}
+</script>
+<style>
+.mt20 {margin-top: 20px;}
+.login-msg-yzm {display: flex;width: 100%;}
+.login-msg-yzm .el-button {margin-left: 10px;--el-button-size:42px;}
+</style>

+ 56 - 0
src/views/merchant/print/index/components/option.vue

@@ -0,0 +1,56 @@
+<template>
+    <fieldset>
+        <legend>
+            <el-tag type="info">按需操作</el-tag>
+        </legend>
+        <div class="op-header">
+            <div class="left-panel">
+                <sc-file-export :apiObj="$API.orderlife.export" :data="searchKey" :fileName="'来客订单_'+(new Date().getTime())" async>
+                    <template #default="{ open }">
+                        <el-button type="primary" icon="sc-icon-download" @click="open">导出</el-button>
+                    </template>
+                </sc-file-export>
+            </div>
+        </div>
+    </fieldset>
+</template>
+
+<script>
+import scFileExport from '@/components/scFileExport'
+export default {
+    components: {
+        scFileExport
+    },
+    props: {
+        type: { type: String, default: "1" },
+        dataSelect: { type: Array, default: () => [] },
+        searchKey: { type: Object, default: () => {} },
+        dataSelectFull: { type: Array, default: () => [] }
+    },
+    data(){
+        return {
+
+        }
+    },
+    methods: {
+        table_export(){
+            
+        },
+        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.merGoods.batch.post(submitData);
+            if (resp.code == 0) {
+                return this.$message.error(resp.msg);
+            }
+            this.$message.success(resp.msg);
+            this.$emit("success");
+        },
+        handleSuccess(){
+            this.$emit("success");
+        },
+    }
+}
+</script>

+ 46 - 0
src/views/merchant/print/index/components/search.vue

@@ -0,0 +1,46 @@
+<template>
+    <fieldset>
+        <legend>
+            <el-tag type="info">条件筛选</el-tag>
+        </legend>
+        <el-form class="lv-form-inline" ref="searchForm" :model="searchKey" label-position="right" label-width="100px">
+            <div class="search-form">
+                <div class="form-left">
+                    <el-row :gutter="10">
+                        <el-col :span="this.$store.state.global.ismobile?12:4">
+                            <el-input v-model="searchKey.name" placeholder="打印机名称" clearable :style="{ width: '100%' }" @keyup.enter="searchForm()">
+                                <template #prepend>打印机名称</template>
+                            </el-input>
+                        </el-col>
+                        <el-col :span="this.$store.state.global.ismobile?12:4">
+                            <el-select v-model="searchKey.status" clearable placeholder="请选择状态" @change="searchForm" :style="{width: '100%'}" class="diy-select">
+                                <el-option value="1" label="正常"></el-option>
+                                <el-option value="2" label="禁用"></el-option>
+                                <template #prefix>状态</template>
+                            </el-select>
+                        </el-col>
+                    </el-row>
+                </div>
+                <div class="form-line"></div>
+                <div class="form-right">
+                    <el-button type="primary" icon="el-icon-search" @click="searchForm">搜索</el-button>
+                </div>
+            </div>
+        </el-form>
+    </fieldset>
+</template>
+
+<script>
+export default {
+    data(){
+        return {
+            searchKey:{}
+        }
+    },
+    methods: {
+        searchForm(){
+            this.$emit("success",this.searchKey);
+        }
+    }
+}
+</script>

+ 189 - 0
src/views/merchant/print/index/components/table.vue

@@ -0,0 +1,189 @@
+<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="order_id" fixed="left">
+            <template #default="scope">
+                <span v-if="scope.row.name">{{ scope.row.name }}</span>
+                <span class="status-danger" v-else>未设置</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="机器码" prop="open_id" width="150">
+            <template #default="scope">
+                <span v-if="scope.row.code">{{ scope.row.code }}</span>
+                <span class="status-danger" v-else>未设置</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="打印类型" prop="out_id">
+            <template #default="scope">
+                <div v-if="scope.row.rule" class="flex-tag">
+                    <el-tag type="success" v-for="item in scope.row.rule.type">{{ typeData[item] }}</el-tag>
+                </div>
+                <span class="status-danger" v-else>未设置</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="支持纸张" prop="certificate_id">
+            <template #default="scope">
+                <div v-if="scope.row.rule" class="flex-tag">
+                    <el-tag type="danger" v-for="item in scope.row.rule.paper_size">{{ item }}</el-tag>
+                </div>
+                <span class="status-danger" v-else>未设置</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="支持颜色" prop="color">
+            <template #default="scope">
+                <div v-if="scope.row.rule" class="flex-tag">
+                    <el-tag type="warning" v-for="item in scope.row.rule.color">{{ colorData[item] }}</el-tag>
+                </div>
+                <span class="status-danger" v-else>未设置</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="支持单双面" prop="count">
+            <template #default="scope">
+                <div v-if="scope.row.rule" class="flex-tag">
+                    <el-tag v-for="item in scope.row.rule.duplex">{{ duplexData[item] }}</el-tag>
+                </div>
+                <span class="status-danger" v-else>未设置</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="取件方式" prop="order_amount">
+            <template #default="scope">
+                <div v-if="scope.row.rule" class="flex-tag">
+                    <el-tag v-for="item in scope.row.rule.package">{{ packageData[item] }}</el-tag>
+                </div>
+                <span class="status-danger" v-else>未设置</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="打印机状态" prop="pay_amount" width="150">
+            <template #default="scope">
+                <span v-if="scope.row.print_status">{{ scope.row.print_status }}</span>
+                <span class="status-danger" v-else>未设置</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="开启打印" prop="status" width="180">
+            <template #default="scope">
+                <el-switch
+                    v-model="scope.row.status"
+                    size="large"
+                    inline-prompt
+                    :active-value="1"
+                    :inactive-value="2"
+                    active-text="启用"
+                    inactive-text="禁用"
+                    @change="table_state(scope.row)"
+                    style="--el-switch-on-color: #13ce66;"
+                />
+            </template>
+        </el-table-column>
+        <el-table-column label="操作" width="200" 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="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-group>
+            </template>
+        </el-table-column>
+    </scTable>
+    <formMain ref="formMain" @success="handleSuccess"></formMain>
+    <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" />
+        </div>
+		<template #footer>
+			<el-button @click="visible=false">关 闭</el-button>
+		</template>
+    </el-dialog>
+</template>
+
+<script>
+import formMain from "./form";
+export default {
+    components: {
+        formMain
+    },
+    data(){
+        return {
+            list: {
+                apiObj: this.$API.mPrint.list
+            },
+            qrcodeImg:"",
+            visible:false,
+            qrcodeTitle:"",
+            typeData:['','文档','照片'],
+            colorData:['','彩色','黑白'],
+            duplexData:['','单面','双面'],
+            packageData:['','店内打印','远程自取','商家配送'],
+            dataSelect:[],
+            dataSelectFull:[],
+            searchKey:{}
+        }
+    },
+    methods: {
+        table_edit(data){
+            this.$nextTick(() => {
+                this.$refs.formMain.open("edit").setData(data)
+            })
+        },
+        async table_state(data){
+            var status = 1;
+            if (data.status == 1) {
+                status = 2;
+            }
+            var resp = await this.$API.mPrint.single.post({"id":data.id,"status":status});
+            if (resp.code !== 1) {
+                return this.$message.error(resp.msg);
+            }
+            this.$refs.table.refresh()
+        },
+        async table_qrcode(data){
+            var loading = this.$loading();
+            var resp = await this.$API.mPrint.qrcode.post({"id":data.id});
+            if (resp.code !== 1) {
+                return this.$message.error(resp.msg);
+            }
+            loading.close()
+            this.visible = true;
+            this.qrcodeTitle = "【"+data.name+"】打印二维码";
+            this.qrcodeImg = resp.data.img;
+        },
+        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>
+
+<style>
+.flex-tag{display: flex;align-items: center;gap: 10px;}
+</style>

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

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

+ 100 - 0
src/views/merchant/print/price/components/form.vue

@@ -0,0 +1,100 @@
+<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-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>
+            </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>
+        </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 {
+            loading: false,
+            mode:"add",
+            titleMap:{
+                add:"新建商品",
+                edit:"分配门店",
+                batch:"批量分配门店"
+            },
+            visible: false,
+            isSaveing: false,
+            formData:{},
+            rules:{
+                store_id: [
+                    {required: true, message: '请选择'}
+                ]
+            },
+            category:[],
+            batchData:[]
+        }
+    },
+    methods: {
+        handleStore(data){
+            this.formData.store_id = data.user_id;
+        },
+        clearUser(){
+            this.formData.agent = "";
+        },
+        selectUser(){
+            this.$nextTick(() => {
+                this.$refs.agentData.open()
+            })
+        },
+        open(mode = 'add'){
+            this.mode = mode;
+            this.visible = true;
+            return this
+        },
+        //表单注入数据
+        setData(data){
+            if (this.mode == "batch") {
+                this.batchData = data;
+            } else {
+                this.formData = 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);
+            if (resp.code == 0) {
+                return this.$message.error(resp.msg);
+            }
+            this.$message.success(resp.msg);
+            this.visible = false;
+            this.formData = {};
+            this.$emit("success");
+        }
+    }
+}
+</script>

+ 82 - 0
src/views/merchant/print/price/components/option.vue

@@ -0,0 +1,82 @@
+<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_audit()">新建价格</el-button>
+                <!-- <el-button type="primary" icon="el-icon-download" @click="table_export()">导出</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: {
+        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_audit(){
+            if (this.dataSelect.length == 0) {
+                return this.$message.error("请选择修改数据")
+            }
+            this.$nextTick(() => {
+                this.$refs.formMain.open("batch").setData(this.dataSelect)
+            })
+        },
+    }
+}
+</script>

+ 23 - 0
src/views/merchant/print/price/components/table.vue

@@ -0,0 +1,23 @@
+<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>
+
+    </scTable>
+</template>
+
+<script>
+export default {
+    
+    data(){
+        return {
+            list: {
+                apiObj: this.$API.mPrint.list
+            },
+            visible:false,
+            dataSelect:[],
+            dataSelectFull:[],
+            searchKey:{}
+        }
+    },
+}
+</script>

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

@@ -1,3 +1,56 @@
 <template>
 <template>
+    <el-container class="flex-column">
+        <div class="table-search">
+            <el-tabs v-model="activeName" class="demo-tabs" @tab-change="tabClick">
+                <el-tab-pane label="打印价格" name="1" v-loading="isLoading"></el-tab-pane>
+                <el-tab-pane label="复印价格" name="2" v-loading="isLoading"></el-tab-pane>
+            </el-tabs>
+            <optionBtn @success="handleSuccess" :dataSelect="dataSelect" :dataSelectFull="dataSelectFull" :type="activeName"></optionBtn>
+        </div>
+        <el-main class="nopadding">
+            <div class="table-container">
+                <tablePage ref="tablePage" @success="tableHandle" @successFull="tableHandleFull" :type="activeName"></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){
+            console.log(event)
+            this.activeName = 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>