@@ -2,6 +2,7 @@ | |||||
namespace app\admin\controller; | namespace app\admin\controller; | ||||
use app\admin\dao\FileDao; | |||||
use app\admin\dao\GroupDao; | use app\admin\dao\GroupDao; | ||||
use app\admin\dao\OrderMainDao; | use app\admin\dao\OrderMainDao; | ||||
use app\admin\dao\OrderMemoDao; | use app\admin\dao\OrderMemoDao; | ||||
@@ -20,7 +21,7 @@ use think\Loader; | |||||
*/ | */ | ||||
class OrderMain extends Backend | class OrderMain extends Backend | ||||
{ | { | ||||
protected $noNeedRight = ['getOrderList',"save","delSubOrder","subOrderSave","getShowInfo","newAdd","insertOrderMain","addMemo","getMemoList","setHotFlag"]; | |||||
protected $noNeedRight = ['getOrderList',"save","delSubOrder","subOrderSave","getShowInfo","newAdd","insertOrderMain","addMemo","getMemoList","setHotFlag","addFileInfo","getFileList"]; | |||||
/** | /** | ||||
* OrderMain模型对象 | * OrderMain模型对象 | ||||
* @var \app\admin\model\OrderMain | * @var \app\admin\model\OrderMain | ||||
@@ -168,4 +169,27 @@ class OrderMain extends Backend | |||||
$result = $model->setHotFlag($params["order_id"],$params["val"]); | $result = $model->setHotFlag($params["order_id"],$params["val"]); | ||||
return json($result); | return json($result); | ||||
} | } | ||||
/** | |||||
* 添加附件记录 | |||||
* @return \think\response\Json | |||||
*/ | |||||
public function addFileInfo(){ | |||||
$params=$this->request->post(); | |||||
$params['create_id']=$this->auth->id; | |||||
$model = new FileDao(); | |||||
$result = $model->addInfo($params["type"],$params["file"],$params['name'],$params['id'],$params['create_id']); | |||||
return json($result); | |||||
} | |||||
/** | |||||
* 获取附件列表 | |||||
* @return \think\response\Json | |||||
*/ | |||||
public function getFileList(){ | |||||
$params=$this->request->post(); | |||||
$model = new FileDao(); | |||||
$result = $model->getList($params["type"],$params['id']); | |||||
return json($result); | |||||
} | |||||
} | } |
@@ -0,0 +1,67 @@ | |||||
<?php | |||||
namespace app\admin\dao; | |||||
/** | |||||
* Created by PhpStorm. | |||||
* User: nizongfeng | |||||
* Date: 2023/2/7 | |||||
* Time: 11:00 | |||||
*/ | |||||
use app\admin\command\Util; | |||||
use app\admin\model\File; | |||||
use think\Exception; | |||||
class FileDao | |||||
{ | |||||
/** | |||||
* 添加详情 | |||||
* @param $type | |||||
* @param $file | |||||
* @param $id | |||||
* @return array | |||||
*/ | |||||
public function addInfo($type, $file, $name, $id, $create_id){ | |||||
try{ | |||||
$fileModel = new File(); | |||||
$data = [ | |||||
"type"=>$type, | |||||
"file"=>$file, | |||||
"name"=>$name, | |||||
"obj_id"=>$id, | |||||
"create_id"=>$create_id | |||||
]; | |||||
if (!empty($create_id)) { | |||||
$adminDao = new AdminDao(); | |||||
$admin = $adminDao->getInfoById($create_id); | |||||
if ($admin["flag"]) { | |||||
$data["create_name"] = $admin["data"]["nickname"]; | |||||
} | |||||
} | |||||
$fileModel->insert($data); | |||||
return Util::returnArrSu("成功"); | |||||
}catch (Exception $e){ | |||||
return Util::returnArrEr("失败:".$e->getMessage()); | |||||
} | |||||
} | |||||
/** | |||||
* 获取列表 | |||||
* @param $type | |||||
* @param $file | |||||
* @param $id | |||||
* @return array | |||||
*/ | |||||
public function getList($type, $id){ | |||||
try{ | |||||
$fileModel = new File(); | |||||
$where = [ | |||||
"type"=>$type, | |||||
"obj_id"=>$id | |||||
]; | |||||
$list = $fileModel->where($where)->order("id","DESC")->select()->toArray(); | |||||
return Util::returnArrSu("成功", $list); | |||||
}catch (Exception $e){ | |||||
return Util::returnArrEr("失败:".$e->getMessage()); | |||||
} | |||||
} | |||||
} |
@@ -119,9 +119,9 @@ class ReceiptOrderDao | |||||
try { | try { | ||||
$where = ["a.del_flag"=>0,"a.group_id"=>$param['group_id']]; | $where = ["a.del_flag"=>0,"a.group_id"=>$param['group_id']]; | ||||
if (empty($param['order_id'])) { | |||||
if (!empty($param['order_id'])) { | |||||
$orderMainModel = new OrderMain(); | $orderMainModel = new OrderMain(); | ||||
$orderMain = $orderMainModel->where(["id"=>$param['order_id']])->select()->find(); | |||||
$orderMain = $orderMainModel->where(["id"=>$param['order_id']])->find(); | |||||
if ($orderMain == null || empty($orderMain['receipt_order_id'])) { | if ($orderMain == null || empty($orderMain['receipt_order_id'])) { | ||||
$where["a.id"] = 0; | $where["a.id"] = 0; | ||||
}else{ | }else{ | ||||
@@ -0,0 +1,20 @@ | |||||
<?php | |||||
namespace app\admin\model; | |||||
use think\Model; | |||||
/** | |||||
* Created by PhpStorm. | |||||
* User: nizongfeng | |||||
* Date: 2023/2/7 | |||||
* Time: 11:01 | |||||
*/ | |||||
class File extends Model | |||||
{ | |||||
// 表名 | |||||
protected $name = 'file'; | |||||
// 追加属性 | |||||
protected $append = [ | |||||
]; | |||||
} |
@@ -77,7 +77,7 @@ | |||||
<el-button type="primary" size="mini" @click="edit(scope.row)" icon="el-icon-edit" style="margin: 5px;">编辑</el-button> | <el-button type="primary" size="mini" @click="edit(scope.row)" icon="el-icon-edit" style="margin: 5px;">编辑</el-button> | ||||
<el-button type="success" size="mini" @click="editOrderDivShow(scope.row)" icon="el-icon-share" style="margin: 5px;">订单</el-button> | <el-button type="success" size="mini" @click="editOrderDivShow(scope.row)" icon="el-icon-share" style="margin: 5px;">订单</el-button> | ||||
<el-button type="danger" size="mini" v-if="scope.row.status==0" icon="el-icon-delete" @click="delAll(scope.row.id)" style="margin: 5px;">删除</el-button> | <el-button type="danger" size="mini" v-if="scope.row.status==0" icon="el-icon-delete" @click="delAll(scope.row.id)" style="margin: 5px;">删除</el-button> | ||||
<el-button type="danger" size="mini" icon="el-icon-search" @click="" style="margin: 5px;">附件</el-button> | |||||
<el-button type="danger" size="mini" icon="el-icon-search" @click="showFile(scope.row.id)" style="margin: 5px;">附件</el-button> | |||||
</el-button-group> | </el-button-group> | ||||
</template> | </template> | ||||
</el-table-column> | </el-table-column> | ||||
@@ -294,6 +294,53 @@ | |||||
</div> | </div> | ||||
</el-dialog> | </el-dialog> | ||||
</transition> | </transition> | ||||
<transition name="bounce" v-if="showFileFlag"> | |||||
<el-dialog title="附件详情" :visible.sync="showFileFlag" width="90%" top="15px"> | |||||
<el-form ref="form" label-width="100px" style="width: 100%;padding-bottom: 20px"> | |||||
<div style="display: flex;width: 100%"> | |||||
<el-form-item label="账单ID:" style="width: 80%"> | |||||
<div v-html="fileData.id"></div> | |||||
</el-form-item> | |||||
</div> | |||||
<div> | |||||
<el-form-item label="名称标识:" style="width: 80%"> | |||||
<el-input v-model="fileData.name" style="width: 120px;" placeholder="请输入内容" clearable></el-input> | |||||
</el-form-item> | |||||
</div> | |||||
<div> | |||||
<el-form-item label="文件:" style="width: 80%"> | |||||
<div> | |||||
<el-upload | |||||
:multiple="false" | |||||
:limit="1" | |||||
class="upload-demo" | |||||
action="/hotel.php/ajax/upload" | |||||
:on-change="handleChange" | |||||
:on-exceed="handleExceed" | |||||
:file-list="fileList"> | |||||
<el-button size="small" type="primary">点击上传</el-button> | |||||
</el-upload> | |||||
</div> | |||||
</el-form-item> | |||||
</div> | |||||
<div> | |||||
<el-button type="primary" @click="fileSubmit()" >提交</el-button> | |||||
</div> | |||||
</el-form> | |||||
<el-table ref="multipleTable" :data="fileTable" border tooltip-effect="dark" style="font-size:12px;width: 100%;margin-top: 12px"> | |||||
<el-table-column prop="name" label="名称标识" min-width="140" ></el-table-column> | |||||
<el-table-column prop="create_name" label="创建人" min-width="70" ></el-table-column> | |||||
<el-table-column prop="create_time" label="创建时间" min-width="70" ></el-table-column> | |||||
<el-table-column label="点击下载" min-width="40" > | |||||
<template slot-scope="scope"> | |||||
<el-link :href="scope.row.file" target="_blank" style="color: #0a568c">下载</el-link> | |||||
</template> | |||||
</el-table-column> | |||||
</el-table> | |||||
</el-dialog> | |||||
</transition> | |||||
</div> | </div> | ||||
</body> | </body> | ||||
<!-- import Vue before Element --> | <!-- import Vue before Element --> | ||||
@@ -403,6 +450,15 @@ | |||||
} | } | ||||
}] | }] | ||||
}, | }, | ||||
showFileFlag:false, | |||||
fileData:{ | |||||
"id":"", | |||||
"name":"", | |||||
"file":"", | |||||
"type":"pay" | |||||
}, | |||||
fileTable:[], | |||||
fileList:[] | |||||
} | } | ||||
}, | }, | ||||
created() { | created() { | ||||
@@ -420,6 +476,50 @@ | |||||
} | } | ||||
}, | }, | ||||
methods: { | methods: { | ||||
handleChange(file, fileList) { | |||||
this.fileList = fileList.slice(-3); | |||||
}, | |||||
showFile(id){ | |||||
this.fileData["id"]=id; | |||||
this.showFileFlag = true | |||||
axios.post("/hotel.php/order_main/getFileList", this.fileData).then((response) => { | |||||
let data = response.data; | |||||
if (data.flag) { | |||||
this.fileTable = data.data | |||||
} else { | |||||
this.$message.error(response.msg); | |||||
} | |||||
}).catch(function (error) { | |||||
console.log(error); | |||||
}); | |||||
}, | |||||
handleExceed(files, fileList) { | |||||
this.$message.warning(`当前限制选择 1 个文件`); | |||||
}, | |||||
fileSubmit(){ | |||||
if (this.fileList.length==0) { | |||||
this.$message.error(`请选择文件`); | |||||
return false; | |||||
} | |||||
if (this.fileData["name"]=="") { | |||||
this.$message.error(`请输入名称标识`); | |||||
return false; | |||||
} | |||||
let file = this.fileList[0].response.data.url; | |||||
this.fileData["file"]=file; | |||||
axios.post("/hotel.php/order_main/addFileInfo", this.fileData).then((response) => { | |||||
let data = response.data; | |||||
if (data.flag) { | |||||
this.fileList=[] | |||||
this.showFile(this.fileData["id"]) | |||||
} else { | |||||
this.$message.error(response.msg); | |||||
} | |||||
}).catch(function (error) { | |||||
console.log(error); | |||||
}); | |||||
}, | |||||
getTypeName(info) { | getTypeName(info) { | ||||
for (let i = 0; i < this.type_list.length; i++) { | for (let i = 0; i < this.type_list.length; i++) { | ||||
if (this.type_list[i].id == info.hotel_name) { | if (this.type_list[i].id == info.hotel_name) { | ||||
@@ -716,6 +816,13 @@ | |||||
}) | }) | ||||
</script> | </script> | ||||
<style lang="scss" scoped> | <style lang="scss" scoped> | ||||
.upload .el-upload__input { | |||||
display: none !important; | |||||
} | |||||
input[type="file"] { | |||||
display: none !important; | |||||
} | |||||
.el-table thead { | .el-table thead { | ||||
background-color: #5a5e66 !important; | background-color: #5a5e66 !important; | ||||
} | } | ||||
@@ -65,9 +65,10 @@ | |||||
<el-table-column label="操作" min-width="180"> | <el-table-column label="操作" min-width="180"> | ||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
<el-button-group> | <el-button-group> | ||||
<el-button type="primary" size="mini" @click="edit(scope.row)" icon="el-icon-edit">编辑</el-button> | |||||
<el-button type="success" size="mini" @click="editOrderDivShow(scope.row)" icon="el-icon-share">订单</el-button> | |||||
<el-button type="danger" size="mini" icon="el-icon-delete" @click="delAll(scope.row.id)">删除</el-button> | |||||
<el-button type="primary" size="mini" @click="edit(scope.row)" icon="el-icon-edit" style="margin: 5px;">编辑</el-button> | |||||
<el-button type="success" size="mini" @click="editOrderDivShow(scope.row)" icon="el-icon-share" style="margin: 5px;">订单</el-button> | |||||
<el-button type="danger" size="mini" v-if="scope.row.status==0" icon="el-icon-delete" @click="delAll(scope.row.id)" style="margin: 5px;">删除</el-button> | |||||
<el-button type="danger" size="mini" icon="el-icon-search" @click="showFile(scope.row.id)" style="margin: 5px;">附件</el-button> | |||||
</el-button-group> | </el-button-group> | ||||
</template> | </template> | ||||
</el-table-column> | </el-table-column> | ||||
@@ -263,6 +264,53 @@ | |||||
</div> | </div> | ||||
</el-dialog> | </el-dialog> | ||||
</transition> | </transition> | ||||
<transition name="bounce" v-if="showFileFlag"> | |||||
<el-dialog title="附件详情" :visible.sync="showFileFlag" width="90%" top="15px"> | |||||
<el-form ref="form" label-width="100px" style="width: 100%;padding-bottom: 20px"> | |||||
<div style="display: flex;width: 100%"> | |||||
<el-form-item label="账单ID:" style="width: 80%"> | |||||
<div v-html="fileData.id"></div> | |||||
</el-form-item> | |||||
</div> | |||||
<div> | |||||
<el-form-item label="名称标识:" style="width: 80%"> | |||||
<el-input v-model="fileData.name" style="width: 120px;" placeholder="请输入内容" clearable></el-input> | |||||
</el-form-item> | |||||
</div> | |||||
<div> | |||||
<el-form-item label="文件:" style="width: 80%"> | |||||
<div> | |||||
<el-upload | |||||
:multiple="false" | |||||
:limit="1" | |||||
class="upload-demo" | |||||
action="/hotel.php/ajax/upload" | |||||
:on-change="handleChange" | |||||
:on-exceed="handleExceed" | |||||
:file-list="fileList"> | |||||
<el-button size="small" type="primary">点击上传</el-button> | |||||
</el-upload> | |||||
</div> | |||||
</el-form-item> | |||||
</div> | |||||
<div> | |||||
<el-button type="primary" @click="fileSubmit()" >提交</el-button> | |||||
</div> | |||||
</el-form> | |||||
<el-table ref="multipleTable" :data="fileTable" border tooltip-effect="dark" style="font-size:12px;width: 100%;margin-top: 12px"> | |||||
<el-table-column prop="name" label="名称标识" min-width="140" ></el-table-column> | |||||
<el-table-column prop="create_name" label="创建人" min-width="70" ></el-table-column> | |||||
<el-table-column prop="create_time" label="创建时间" min-width="70" ></el-table-column> | |||||
<el-table-column label="点击下载" min-width="40" > | |||||
<template slot-scope="scope"> | |||||
<el-link :href="scope.row.file" target="_blank" style="color: #0a568c">下载</el-link> | |||||
</template> | |||||
</el-table-column> | |||||
</el-table> | |||||
</el-dialog> | |||||
</transition> | |||||
</div> | </div> | ||||
</body> | </body> | ||||
<!-- import Vue before Element --> | <!-- import Vue before Element --> | ||||
@@ -364,6 +412,15 @@ | |||||
} | } | ||||
}] | }] | ||||
}, | }, | ||||
showFileFlag:false, | |||||
fileData:{ | |||||
"id":"", | |||||
"name":"", | |||||
"file":"", | |||||
"type":"receipt" | |||||
}, | |||||
fileTable:[], | |||||
fileList:[] | |||||
} | } | ||||
}, | }, | ||||
created() { | created() { | ||||
@@ -373,6 +430,50 @@ | |||||
}, | }, | ||||
methods: { | methods: { | ||||
handleChange(file, fileList) { | |||||
this.fileList = fileList.slice(-3); | |||||
}, | |||||
showFile(id){ | |||||
this.fileData["id"]=id; | |||||
this.showFileFlag = true | |||||
axios.post("/hotel.php/order_main/getFileList", this.fileData).then((response) => { | |||||
let data = response.data; | |||||
if (data.flag) { | |||||
this.fileTable = data.data | |||||
} else { | |||||
this.$message.error(response.msg); | |||||
} | |||||
}).catch(function (error) { | |||||
console.log(error); | |||||
}); | |||||
}, | |||||
handleExceed(files, fileList) { | |||||
this.$message.warning(`当前限制选择 1 个文件`); | |||||
}, | |||||
fileSubmit(){ | |||||
if (this.fileList.length==0) { | |||||
this.$message.error(`请选择文件`); | |||||
return false; | |||||
} | |||||
if (this.fileData["name"]=="") { | |||||
this.$message.error(`请输入名称标识`); | |||||
return false; | |||||
} | |||||
let file = this.fileList[0].response.data.url; | |||||
this.fileData["file"]=file; | |||||
axios.post("/hotel.php/order_main/addFileInfo", this.fileData).then((response) => { | |||||
let data = response.data; | |||||
if (data.flag) { | |||||
this.fileList=[] | |||||
this.showFile(this.fileData["id"]) | |||||
} else { | |||||
this.$message.error(response.msg); | |||||
} | |||||
}).catch(function (error) { | |||||
console.log(error); | |||||
}); | |||||
}, | |||||
checkSelect(row,index){ | checkSelect(row,index){ | ||||
if (this.editOrder.status != 0) { | if (this.editOrder.status != 0) { | ||||
return false; | return false; | ||||
@@ -609,6 +710,13 @@ | |||||
}) | }) | ||||
</script> | </script> | ||||
<style lang="scss" scoped> | <style lang="scss" scoped> | ||||
.upload .el-upload__input { | |||||
display: none !important; | |||||
} | |||||
input[type="file"] { | |||||
display: none !important; | |||||
} | |||||
.el-table thead { | .el-table thead { | ||||
background-color: #5a5e66 !important; | background-color: #5a5e66 !important; | ||||
} | } | ||||
@@ -90,15 +90,15 @@ class Upload | |||||
protected function checkMimetype() | protected function checkMimetype() | ||||
{ | { | ||||
$mimetypeArr = explode(',', strtolower($this->config['mimetype'])); | |||||
$typeArr = explode('/', $this->fileInfo['type']); | |||||
//验证文件后缀 | |||||
if ($this->config['mimetype'] === '*' | |||||
|| in_array($this->fileInfo['suffix'], $mimetypeArr) || in_array('.' . $this->fileInfo['suffix'], $mimetypeArr) | |||||
|| in_array($this->fileInfo['type'], $mimetypeArr) || in_array($typeArr[0] . "/*", $mimetypeArr)) { | |||||
// $mimetypeArr = explode(',', strtolower($this->config['mimetype'])); | |||||
// $typeArr = explode('/', $this->fileInfo['type']); | |||||
// //验证文件后缀 | |||||
// if ($this->config['mimetype'] === '*' | |||||
// || in_array($this->fileInfo['suffix'], $mimetypeArr) || in_array('.' . $this->fileInfo['suffix'], $mimetypeArr) | |||||
// || in_array($this->fileInfo['type'], $mimetypeArr) || in_array($typeArr[0] . "/*", $mimetypeArr)) { | |||||
return true; | return true; | ||||
} | |||||
throw new UploadException(__('Uploaded file format is limited')); | |||||
// } | |||||
// throw new UploadException(__('Uploaded file format is limited')); | |||||
} | } | ||||
protected function checkImage($force = false) | protected function checkImage($force = false) | ||||